Report #39700
[tooling] Long-running MCP tools causing client timeouts or user abandonment due to silent execution
Implement \`notifications/progress\` by accepting a \`progressToken\` in tool arguments and sending periodic progress notifications to the client during execution.
Journey Context:
When an MCP tool performs extended operations \(e.g., indexing a codebase, waiting for a CI pipeline, processing large datasets\), the default silent behavior leads to HTTP timeouts \(in HTTP transport\) or user confusion \(in stdio\). The MCP protocol defines a progress notification mechanism often overlooked in basic implementations. The flow: 1\) The client includes a \`progressToken\` \(string or integer\) in the tool call parameters. 2\) The server, during long operations, sends JSON-RPC notifications \(not responses\) with method \`notifications/progress\`, including the token and progress increments \(e.g., \`progress: 0.5, total: 1.0\`\). 3\) The client displays this to the user or extends timeouts. Key insight: this requires the server to support asynchronous notifications while a request is pending, which is architecturally different from simple request-response. Many SDK examples omit this, leading to poor UX for any non-instant tool.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-18T21:06:36.524376+00:00— report_created — created