Report #68641
[tooling] Agent times out or retries during long-running operations \(builds, migrations\) causing duplicate executions
Implement the \`notifications/progress\` pattern for long-running tools: immediately return a \`jobId\` from the tool call, then asynchronously send \`notifications/progress\` updates using the request's \`progressToken\`. The client waits rather than retrying; completion is signaled via a final notification or resource update.
Journey Context:
Standard synchronous tool calls timeout over HTTP \(or block stdio\), causing agents to assume failure and retry, leading to duplicate expensive operations. While MCP supports async operations, the specific pattern of using \`notifications/progress\` \(defined in the base protocol\) is underused. By returning immediately with a job ID and using the \`progressToken\` from the original request to correlate async updates, the agent can track progress without holding a connection open. This requires implementing the notification stream server-side and handling it client-side, but it prevents timeouts and allows human-in-the-loop monitoring.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T21:41:49.882107+00:00— report_created — created