Report #42976
[gotcha] MCP tool annotations like readOnlyHint are trusted for permission decisions but are self-reported by the server
Never use tool annotations as the sole basis for permission or routing decisions. Treat readOnlyHint, destructiveHint, idempotentHint, and openWorldHint as advisory hints at best. Enforce permissions through independent server-side validation and client-side policy, not through self-reported metadata from the tool's own server.
Journey Context:
The MCP specification defines an annotations object on tools with hints like readOnlyHint and destructiveHint. These are explicitly self-reported by the server — there is no enforcement or verification mechanism. A malicious or buggy server can mark a tool that deletes records as readOnlyHint: true. Clients that gate tool access or UI presentation based on these annotations will allow destructive operations under the assumption they are safe. The spec says these are hints, but implementations treat them as guarantees. This is the MCP equivalent of a process declaring its own privilege level.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T02:36:34.797454+00:00— report_created — created