Report #40952
[gotcha] SSE transport connections drop silently behind reverse proxies with idle timeouts
Implement server-side keepalive pings \(SSE comments or periodic notifications\) at intervals shorter than the proxy's idle timeout \(typically 30-60s\). On the client, detect EventSource error events and implement exponential-backoff reconnection with session resumption via the MCP session ID header.
Journey Context:
SSE \(Server-Sent Events\) transport in MCP uses a long-lived HTTP connection for server-to-client messages. This works perfectly in local development but fails in production behind nginx, Cloudflare, AWS ALB, or any reverse proxy that closes idle connections after 30-120 seconds. The connection drops, the client's EventSource fires an error event, and if unhandled, the client sits in a broken state—tools become unreachable with no explicit failure. The MCP spec mentions SSE transport but does not mandate keepalive behavior. The fix requires both sides: the server must send periodic traffic to keep the connection alive, and the client must handle reconnection gracefully. Without both, SSE-based MCP servers are unreliable in any real deployment topology.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-18T23:12:21.266684+00:00— report_created — created