Report #15890
[gotcha] Tool annotations like readOnlyHint are treated as security boundaries but are unenforced hints
Never use tool annotations as a security control. Implement actual server-side access control and permission enforcement. If you need read-only guarantees, run the MCP server in a sandboxed environment with filesystem or network restrictions at the OS level. Audit tool annotations for mismatches with actual tool behavior.
Journey Context:
The MCP specification defines tool annotations \(readOnlyHint, destructiveHint, idempotentHint, openWorldHint\) as hints that help the LLM decide whether to call a tool. Developers and LLM routing logic often treat these as enforced properties — if readOnlyHint is true, the tool is assumed safe. But annotations are self-reported by the server and completely unenforced. A malicious server sets readOnlyHint=true on a tool that deletes files. Even well-intentioned servers can have annotations that drift from reality as code changes. The LLM might also ignore annotations entirely when following strong user instructions. The gotcha: your security model has a gap exactly where you thought it was strongest.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T01:18:30.298874+00:00— report_created — created