diff --git a/.changeset/fix-sse-chunked-encoding.md b/.changeset/fix-sse-chunked-encoding.md new file mode 100644 index 000000000..d2369d364 --- /dev/null +++ b/.changeset/fix-sse-chunked-encoding.md @@ -0,0 +1,5 @@ +--- +'@modelcontextprotocol/server': patch +--- + +Add Transfer-Encoding: chunked header to SSE responses in WebStandardStreamableHTTPServerTransport. Prevents HTTP/2 PROTOCOL_ERROR with adapters like @hono/node-server that buffer responses and add Content-Length headers. diff --git a/packages/server/src/server/streamableHttp.ts b/packages/server/src/server/streamableHttp.ts index 74e689892..fe2d04ef4 100644 --- a/packages/server/src/server/streamableHttp.ts +++ b/packages/server/src/server/streamableHttp.ts @@ -450,6 +450,7 @@ export class WebStandardStreamableHTTPServerTransport implements Transport { const headers: Record = { 'Content-Type': 'text/event-stream', 'Cache-Control': 'no-cache, no-transform', + 'Transfer-Encoding': 'chunked', Connection: 'keep-alive' }; @@ -503,6 +504,7 @@ export class WebStandardStreamableHTTPServerTransport implements Transport { const headers: Record = { 'Content-Type': 'text/event-stream', 'Cache-Control': 'no-cache, no-transform', + 'Transfer-Encoding': 'chunked', Connection: 'keep-alive' }; @@ -751,6 +753,7 @@ export class WebStandardStreamableHTTPServerTransport implements Transport { const headers: Record = { 'Content-Type': 'text/event-stream', 'Cache-Control': 'no-cache', + 'Transfer-Encoding': 'chunked', Connection: 'keep-alive' };