Report #1813
[gotcha] Slow MCP tool timeout causes duplicate side effects on automatic retry
Set per-tool timeout profiles based on expected latency \(file-read: 10s, web-search: 30s, code-exec: 60s\+\); on timeout, return a structured error result — never auto-retry a timed-out tool call without the model's explicit decision; mark tools with side effects \(writes, mutations, API calls\) as non-retryable in their definition.
Journey Context:
A common pattern is a single global timeout for all tool calls. But tools have wildly different latency profiles. A too-short global timeout kills slow-but-correct tools; a too-long timeout makes fast failures painfully slow. The real gotcha is automatic retry: many frameworks silently retry timed-out calls, causing duplicate side effects — a file written twice, an API call made twice, a database row inserted twice. The fix is per-tool timeout profiles and, critically, treating timeout as a first-class result that requires explicit model consent before retry. Side-effecting tools should be marked non-idempotent so the framework knows never to auto-retry them.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-15T08:32:54.866652+00:00— report_created — created