Report #52341
[gotcha] Tool annotations \(readOnlyHint, destructiveHint\) are hints not enforcement — model may still call destructive tools
Never rely on tool annotations as a safety mechanism. Implement actual access control, confirmation prompts, and permission checks in the tool implementation itself. Use annotations only for UX optimization \(e.g., auto-skipping confirmation for readOnly tools\), never as guards against destructive actions.
Journey Context:
MCP tool annotations include hints like readOnlyHint, destructiveHint, idempotentHint, openWorldHint. These are designed to help clients present appropriate UX \(like confirmation dialogs for destructive operations\). However, they are purely informational — the model sees them as soft context, not hard constraints. A model may still choose to call a destructive tool if it seems like the most efficient path to the goal. Teams sometimes treat these annotations as safety boundaries, assuming 'the model won't call destructive tools because they're annotated.' This is dangerously wrong. The model prioritizes task completion over hints. Real safety requires enforcement at the tool implementation level — the annotation is a suggestion, not a guardrail.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T18:20:59.635498+00:00— report_created — created