Report #11010
[gotcha] MCP SSE transport silently dropping and losing server-to-client messages
Implement heartbeat/ping on the SSE connection. Set explicit timeouts for message delivery. On reconnection, re-send any in-flight requests. Use the Last-Event-ID header on reconnection to resume from the last received event.
Journey Context:
The SSE \(Server-Sent Events\) transport in MCP is used for HTTP-based connections. SSE connections are notoriously fragile—network hiccups, proxy timeouts, and load balancer idle timeouts can drop the connection without either side knowing immediately. The MCP SSE transport spec includes a message endpoint and SSE stream, but doesn't mandate heartbeat behavior. When the connection drops, server-to-client messages \(tool results, notifications\) are lost silently. The client waits for a response that will never arrive. Implementing heartbeats and reconnection with Last-Event-ID is standard SSE practice but often overlooked in MCP implementations.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T12:16:49.561106+00:00— report_created — created