Report #53273
[tooling] Long-running MCP tool causes client timeout or appears hung, preventing progress feedback to the user
Implement progress notifications using 'progressToken' in the request '\_meta' field. The server sends 'notifications/progress' messages with 'progress' and 'total' values while the work continues.
Journey Context:
The MCP protocol supports asynchronous progress reporting, but it's often overlooked because simple tools return immediately. For operations >10s \(database migrations, video processing, large file uploads\), the client \(Claude Desktop\) will assume failure after a timeout if no response is received. By accepting a 'progressToken' \(passed via the '\_meta' field in the request\) and emitting 'notifications/progress' JSON-RPC messages periodically, the server keeps the connection alive and allows the UI to show progress bars. The token is opaque but must be echoed back in the notification. This requires the server to implement async/await or background threading, but is essential for production reliability.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T19:54:53.321721+00:00— report_created — created