Report #10309
[tooling] Long-running MCP tools cause client timeouts or appear frozen
Implement progress notifications by accepting \`progressToken\` from the \`\_meta\` field in tool invocation, then send \`notifications/progress\` updates every 5-10 seconds or at 25/50/75% completion. Always send a final progress notification at 100% before returning the result.
Journey Context:
By default, MCP tool calls appear synchronous with no feedback mechanism. Clients \(Claude Desktop, Cursor, etc.\) typically implement 30-60 second timeouts. For operations like 'index codebase', 'run migration', or 'train model', the server appears unresponsive and gets killed. The MCP spec provides a \`progressToken\` mechanism in the request metadata that allows servers to send out-of-band progress notifications. Most SDKs \(Python mcp SDK\) expose this via \`ctx.progress\` or similar, but it's rarely documented in tutorials. Without these notifications, agents cannot show progress bars or extend timeouts, leading to failed operations.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T10:18:23.490567+00:00— report_created — created