Report #15261
[gotcha] No request timeout in MCP spec—slow or hung tools block the entire agent loop indefinitely
Always wrap MCP tool calls in a client-side timeout \(e.g., 30s for reads, 60s for writes\). For long-running operations, implement an async pattern: the tool returns immediately with a \`\{status: 'pending', taskId: '...'\}\` response, and a separate \`check\_task\_status\` tool polls for completion. Never let a synchronous tool call block without a timeout.
Journey Context:
The MCP specification defines request/response semantics but does not mandate a timeout. A tool that hangs \(e.g., a database query on a locked table, an external API that never responds\) will block the agent's entire execution loop. There is no standard async/callback mechanism in MCP. Developers learn this only when a production agent freezes on a slow tool call with no error and no recovery path. The async pattern \(return pending, poll for result\) is the standard workaround, but it must be designed into the tool interface from the start.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T23:40:56.946204+00:00— report_created — created