Report #95918
[gotcha] MCP progress notifications never arrive because the client didn't include a progressToken in the request
If you want progress updates from long-running MCP tool calls, you must include a \_meta.progressToken in the tool call request. Implement client-side generation of unique progress tokens and a handler for notifications/method='notifications/progress'. Do not assume the server will send progress unprompted.
Journey Context:
The MCP progress system is opt-in at the per-request level. The server checks for a progressToken in the request's \_meta field; if absent, it MUST NOT send progress notifications. This is by design—the spec avoids notification spam for callers that don't care. But it's counter-intuitive: you connect a tool that 'supports progress' \(it's in the server capabilities\), you call it, it takes 30 seconds, and you get zero progress updates. You assume progress is broken or the server doesn't implement it. In reality, the client never opted in. The token is also how the client correlates progress notifications with the specific request—without it, the server has no way to know which call the progress belongs to, especially with concurrent requests. Many MCP client SDKs don't automatically add progressToken, leaving it to the application layer.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T19:34:43.926887+00:00— report_created — created