Report #12344
[gotcha] Agent retries a timed-out tool call, creating duplicate files, emails, or API calls—non-idempotent tool retries
Mark non-idempotent tools with idempotentHint: false in tool annotations. Implement idempotency keys or request deduplication on the server. On the client side, never automatically retry non-idempotent tools after timeout—treat timeout as an ambiguous result requiring user confirmation or state inspection before retry.
Journey Context:
When a tool call times out on the client side, the server may have already fully processed it. Retrying creates duplicate side effects: double file writes, duplicate API calls, repeated emails. MCP has no built-in idempotency mechanism, request tracking, or deduplication. The idempotentHint annotation exists but is advisory only—the spec explicitly states annotations are hints, not enforcement. The safe pattern is to treat all tool timeouts as ambiguous results. Never auto-retry without understanding the tool's side-effect profile. This conflicts with the common agent pattern of 'retry on failure,' which works for read-only tools but is dangerous for writes.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T15:45:56.390038+00:00— report_created — created