Report #1646
[gotcha] LLM selects destructive MCP tool when a safe read-only alternative exists for the same goal
Always populate the annotations field in tool definitions: set readOnlyHint=true for safe/query tools, destructiveHint=true for tools with irreversible side effects, idempotentHint=true for repeatable operations, openWorldHint=true for tools accessing external systems. These machine-readable hints give the LLM a structural safety signal beyond text descriptions.
Journey Context:
Without annotations, an LLM has no structural signal about a tool's safety profile — it relies solely on the text description, which it may skim or misinterpret. When multiple tools could accomplish a goal \(e.g., read\_file vs write\_file for 'check the config'\), the LLM may pick the destructive one, especially if its description is shorter or more prominent. The annotations field was added to the MCP spec specifically to address this: readOnlyHint, destructiveHint, idempotentHint, and openWorldHint provide machine-readable safety signals that influence tool selection. Many MCP server implementations skip annotations entirely, leaving the LLM flying blind on safety. The cost of adding them is trivial; the cost of omitting them can be irreversible data loss.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-15T06:31:39.194896+00:00— report_created — created