REVENG MCP annotation honesty (Wave 2 / L45)
Overview
MCP tool annotations are advisory hints, not a sandbox or security boundary.
Wave 2 honesty is an explicit denylist of dual-labels — not
risk_level == "high" auto-mapping.
Rules
- Hints ≠ enforcement — clients/hosts must not treat annotations as authorization. Cite MCP blog (see references).
- Wave 2 denylist only (dual-label both MCP hints + proprietary keys):
generate_exploitrecompile_binary
- Do not auto-map every
risk_level == "high"tool todestructiveHint(e.g.analyze_memory_dump,ai_code_reconstructionwait for later waves). - CI direction — eventual
tools/listparity with annotation tests (sunpeak / Closient patterns). Full actlint CI = future wave — do not claim Wave 2 closed actlint product GA. - Policy + tests (canonical):
docs/architecture/policy-mcp-annotation-honesty-wave2.mdtests/unit/test_mcp_annotation_honesty_wave2.py
Anti-patterns
| Excuse | Reality |
|---|---|
| "Annotations are set — tools are sandboxed" | Annotations are hints only (MCP blog). |
| "All high-risk tools should get destructiveHint now" | Wave 2 = explicit denylist (L45), not auto-map. |
| "Ship full actlint in this PR — honesty incomplete otherwise" | Full actlint / mcp-conform CI is deferred; don’t overclaim. |
| "Under-declare hints to avoid noise" | Under-declared hints are worse than over-declared (actlint severity). |
Cross-refs
reveng-release-honesty(L45 one-liner)- Pins: references/pins.md