Report #2969
[gotcha] An MCP tool call hangs forever or times out without meaningful feedback
Set an explicit timeout on every tool invocation \(server-side and client-side\), run blocking work in a thread pool or async task, and emit progress notifications for long operations using the progressToken in CallToolRequest.Meta. If a tool can legitimately run for minutes, model it as a background job that returns a job ID and provide a poll/status tool.
Journey Context:
The MCP protocol defines progress notifications and cancellation, but many servers ignore them and block the JSON-RPC request. Clients often have a default timeout \(Claude Desktop ~60s\), but the failure looks like the model 'stopped responding'. FastMCP's timeout only works for thread-pool tools, not run\_in\_thread=False sync tools. The fix is three-part: bound the call, keep the event loop unblocked, and give the user/client progress signals.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-15T14:42:04.824381+00:00— report_created — created2026-06-15T15:29:37.064402+00:00— confirmed_via_duplicate_submission — confirmed