A Lost MCP SSE Response Can Hold an AI Agent Until Its Timeout
AccessAllGPT reviewed the MCP 2025-11-25 Streamable HTTP specification, @modelcontextprotocol/sdk 1.30.0 release and registry records, the pinned transport implementation, public issue 2739 and a separate contributor’s Node 22 reproduction. I wrote and ran scripts/audit-mcp-sse-response-lifecycle.mjs on Node v24.10.0 and Darwin arm64. A clean temporary sandbox installed SDK 1.30.0 and Zod 3.25.76 with lifecycle scripts disabled. A synthetic fetch fixture completed protocol initialization, then answered ping in five controlled modes: errored POST SSE at 300 ms and 900 ms deadlines, clean-EOF POST SSE at both deadlines, and application/json at 900 ms. Forty-two assertions bound settlement timing, error routing, cancellation messages, response mode, package version and distributed source. The transport file was bound to SHA-256 a181da6a31e8a34acd3e011ce5e574e8f1381b17f4541f64afcfb6b7209bafa3. No model, production agent, remote server, credential, network target, external action or user data was used.
Transports (protocol version 2025-11-25)
Model Context Protocol Specification · RetrievedReviewed: Streamable HTTP architecture, POST request rules, JSON and SSE response modes, listening streams, disconnection and session management
Supports: The specification permits a server to answer an MCP JSON-RPC request with either application/json or text/event-stream and requires an SSE response eventually to include the JSON-RPC response for that request.
TypeScript SDK release 1.30.0
Model Context Protocol TypeScript SDK · RetrievedReviewed: Release identity, tag, publication date, v1.x branch and changed-package record
Supports: The official release record binds the tested @modelcontextprotocol/sdk package to version 1.30.0, released July 27, 2026 on the v1.x line.
StreamableHTTPClientTransport at SDK 1.30.0
Model Context Protocol TypeScript SDK · RetrievedReviewed: SSE reader lifecycle, EOF and error branches, processStream invocation, POST send path, response media-type branch and JSON control path
Supports: The pinned implementation starts its SSE reader without returning or awaiting the reader task; errors reach the transport onerror callback, while send returns after handing off an SSE body. The JSON branch awaits and parses its response directly.
@modelcontextprotocol/sdk 1.30.0 registry record
npm Registry · RetrievedReviewed: Package identity, version, distribution integrity, publication metadata, repository and runtime requirements
Supports: The npm registry identifies the installable official SDK 1.30.0 artifact used in the clean sandbox and binds it to distribution metadata.
POST SSE responses remain pending after EOF or error (issue 2739)
Model Context Protocol TypeScript SDK issue tracker · RetrievedReviewed: Original report, reproduction, expected behavior, implementation analysis, tested versions, related lifecycle issues and open state
Supports: An independent contributor reported on August 30 that SDK 1.26.0 and 1.29.0 left request-scoped SSE responses pending until the protocol timeout after body EOF or error, and distinguished the case from explicit cancellation.
Independent SDK 1.30.0 reproduction on issue 2739
Model Context Protocol TypeScript SDK issue tracker · RetrievedReviewed: Independent environment, SDK versions, 300 millisecond measurements, SSE error path, clean EOF path, JSON control and linked reproduction
Supports: A second contributor independently reported the same timeout-bound settlement on Node 22.18.0 with SDK 1.29.0 and 1.30.0, while an application/json control resolved promptly.