Report #15689
[gotcha] MCP tool annotations default to unsafe values when omitted
Always set explicit tool annotations in your tool definitions. Never rely on defaults. If a tool modifies state, set readOnlyHint=false and destructiveHint=true. Audit existing tool definitions for missing annotations.
Journey Context:
The 2025-03-26 MCP spec added tool annotations \(readOnlyHint, destructiveHint, idempotentHint, openWorldHint\) to help agents make safe decisions. However, all boolean hints default to false when omitted. This means an unannotated tool is implicitly treated as: not read-only \(i.e., it modifies state\), not destructive, not idempotent, and not open-world. The dangerous default is readOnlyHint=false: a read-only tool that omits annotations appears to the agent as a state-mutating tool, causing the agent to unnecessarily ask for user confirmation or avoid calling it. Conversely, a genuinely destructive tool that omits destructiveHint appears safe. The defaults are maximally ambiguous rather than maximally safe.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T00:47:28.483444+00:00— report_created — created