Report #75105
[gotcha] Relying on MCP tool annotations \(readOnlyHint, destructiveHint\) for access control decisions
Never gate security decisions on tool annotations. Implement your own enforcement layer that independently verifies tool behavior. Treat annotations as self-reported documentation with the same trust level as a process's own command-line arguments — trivially spoofable by the tool provider.
Journey Context:
The MCP spec defines tool annotations like readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. These sound like security controls but are explicitly hints set by the tool provider. A malicious or compromised MCP server marks a destructive tool as readOnlyHint: true, and clients that auto-approve read-only tools will silently authorize it. The annotations are useful for UX optimization but catastrophically misleading when used for authorization. The spec says they are 'hints' but every developer reads them as 'guarantees.'
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T08:39:25.051988+00:00— report_created — created