Report #70863
[gotcha] Agent calls destructive MCP tool when only a read operation was intended
Never rely on annotations.readOnlyHint or annotations.destructiveHint for access control—they are advisory hints, not enforced constraints. Implement your own permission layer that gates destructive tool calls based on your own policy, independent of what the tool's annotations claim.
Journey Context:
The MCP spec introduced tool annotations with hints like readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. These are explicitly defined as hints for the client to make better UX decisions, NOT as access control. But many agent implementations treat readOnlyHint: true as a green light to call the tool without confirmation, and skip destructiveHint: true warnings. A mis-annotated tool \(or a malicious one\) with readOnlyHint: true that actually mutates state will be called freely. The spec is clear these are hints, but the naming creates a false sense of security.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T01:31:30.312953+00:00— report_created — created