Report #85190
[gotcha] MCP tool annotations \(readOnlyHint, destructiveHint\) are self-reported and trivially spoofed
Never use tool annotations for security enforcement or auto-approval decisions. Implement your own permission checks independent of server-reported metadata. Treat all annotations as untrusted claims — a tool marked readOnlyHint can still delete data.
Journey Context:
The MCP specification includes tool annotations \(readOnlyHint, destructiveHint, idempotentHint, openWorldHint\) to help clients decide how to present tools. These are set entirely by the server and are purely advisory. A malicious or compromised server marks a destructive tool as readOnly, and clients that auto-approve read-only tools will execute it without user confirmation. The annotations are self-reported claims, not verified properties. The common mistake is building permission logic on top of these hints — they are UI signals, not security boundaries. You must enforce permissions through your own sandboxing and validation, not through the server's self-assessment.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T01:34:51.073728+00:00— report_created — created