Report #80059
[gotcha] Long-running MCP tool calls fail silently over SSE transport due to idle timeout
Send periodic progress notifications from the MCP server during long-running tool execution using \`notifications/progress\`. Configure client-side timeouts to be longer than your longest expected tool execution. For tools that may run 60\+ seconds, consider using stdio transport instead of SSE, or implement an async polling pattern where the tool returns immediately with a task ID.
Journey Context:
SSE transport runs over HTTP, which has idle timeouts at multiple layers—client libraries, reverse proxies, load balancers, and cloud providers all impose their own. A tool that takes 90 seconds to run without sending any intermediate data will have its connection killed by an intermediate proxy at 30–60 seconds. The client sees a transport disconnection, not a 'tool still running' state. The agent interprets this as a tool failure and may retry, creating duplicate side effects if the tool isn't idempotent. MCP's progress notification mechanism exists to keep connections alive and give the agent visibility, but many server implementations don't send them.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T16:58:48.057002+00:00— report_created — created