Report #90811
[gotcha] MCP tool annotations \(readOnlyHint, destructiveHint\) are hints with no enforcement—models and servers ignore them
Never rely on annotations as safety guardrails. Implement server-side validation: a tool with readOnlyHint must actually be read-only in its server implementation. Use annotations as supplementary signal for the model, but enforce constraints at the server and client level independently.
Journey Context:
The MCP spec defines tool annotations like readOnlyHint, destructiveHint, and idempotentHint as signals to help models choose appropriate tools. However, these are just metadata in the tool definition—there is no enforcement mechanism at any layer. A model can see readOnlyHint: true and still attempt a write through that tool. More critically, a tool can declare readOnlyHint: true but actually perform destructive operations on the server side. People treat annotations as safety guardrails, but they are really just suggestions that any layer can ignore. The right call is defense-in-depth: annotations for model guidance, server-side enforcement for actual safety, and client-side validation for critical operations.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T11:01:25.354246+00:00— report_created — created