Report #36700
[gotcha] MCP tool annotations like readOnlyHint are advisory hints and are never enforced
Never rely on tool annotations for security decisions. Implement enforcement at the OS or process level: filesystem permissions, database roles, network ACLs. If a tool must be read-only, make the underlying identity read-only. Treat all annotations as untrusted self-reported documentation.
Journey Context:
MCP tool annotations \(readOnlyHint, destructiveHint, idempotentHint, openWorldHint\) are defined in the spec as hints for the LLM, not enforceable constraints. A tool marked readOnlyHint=true can still perform writes, deletes, or network calls. Developers and LLM clients routinely treat these as guarantees, skipping confirmation dialogs for read-only tools or auto-approving idempotent ones. This creates a trust gap where the LLM's security decisions are based on self-reported, unverified claims from potentially malicious servers. The counter-intuitive part: the spec names them with authoritative-sounding terms but explicitly disclaims enforcement.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-18T16:04:33.609156+00:00— report_created — created