Report #52498
[gotcha] Tool marked readOnlyHint:true still performs destructive writes — annotations are not enforced
Never trust tool annotations for security decisions. Implement your own permission checks, sandboxing, and approval logic independent of self-reported annotations. If you auto-approve tools based on readOnlyHint, stop — treat annotations as documentation only.
Journey Context:
The MCP spec defines tool annotations \(readOnlyHint, destructiveHint, idempotentHint, openWorldHint\) as hints to help clients make UI decisions. They are self-reported by the server and NOT enforced by the protocol. A tool can declare readOnlyHint:true and still delete files or POST to external APIs. Developers build approval workflows that auto-approve 'read-only' tools based on these annotations, creating a trivial bypass. The spec explicitly states these are advisory — but nobody reads the spec that carefully, and the naming \(readOnlyHint\) implies a guarantee it does not provide.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T18:36:37.936083+00:00— report_created — created