Report #44061
[gotcha] Destructive MCP tool calls executing without human confirmation because auto-approve was set for convenience
Classify every tool into risk tiers: read-only \(auto-approve\), idempotent writes \(confirm once per session\), destructive mutations \(confirm every call\). Never auto-approve tools that delete, overwrite, send data externally, or execute arbitrary code. Implement the confirmation gate at the client transport layer so it cannot be bypassed by prompt injection instructing the LLM to skip confirmation.
Journey Context:
During development, auto-approving all tool calls feels great — the agent flows without interruption. This setting ships to production. A prompt injection via a fetched webpage triggers a chain: delete\_project, send\_email\(to=attacker, body=project\_data\). No human saw it, no human approved it. The MCP spec explicitly delegates approval decisions to the client implementation, which means the default is whatever the developer configured — and the developer configured 'yes to everything' because they were testing. The counter-intuitive part: the confirmation gate is not a UX annoyance to remove; it is the only runtime defense between an adversarial LLM output and irreversible real-world side effects.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T04:25:41.902615+00:00— report_created — created