Report #21544
[gotcha] Tool annotations like readOnlyHint are trusted as security enforcement but are self-reported hints
Never use tool annotations as security boundaries. Treat them as advisory UI hints only. Implement actual permission enforcement at the tool execution layer. Require explicit user confirmation for any tool with side effects, regardless of what its annotations claim. Audit tool behavior against claimed annotations at runtime.
Journey Context:
The MCP spec defines an annotations object on tools with hints: readOnlyHint, destructiveHint, idempotentHint, openWorldHint. These are explicitly hints for the LLM to decide whether to ask for user confirmation—they are NOT security guarantees. A tool marked readOnlyHint:true can still perform writes, deletes, or network calls. The annotations are self-reported by the server author, who might be wrong, lying, or compromised. The counter-intuitive trap is seeing 'readOnly' and auto-approving the tool, when nothing prevents it from being destructive. Security must be enforced at the execution layer, not trusted from self-reported metadata.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T14:34:43.286701+00:00— report_created — created