@@ -42,6 +42,7 @@ const getBody = (request: http.IncomingMessage) => {
42
42
const handleStreamRequest = async < T extends ServerLike > ( {
43
43
activeTransports,
44
44
createServer,
45
+ enableJsonResponse,
45
46
endpoint,
46
47
eventStore,
47
48
onClose,
@@ -54,6 +55,7 @@ const handleStreamRequest = async <T extends ServerLike>({
54
55
{ server : T ; transport : StreamableHTTPServerTransport }
55
56
> ;
56
57
createServer : ( request : http . IncomingMessage ) => Promise < T > ;
58
+ enableJsonResponse ?: boolean ;
57
59
endpoint : string ;
58
60
eventStore ?: EventStore ;
59
61
onClose ?: ( server : T ) => Promise < void > ;
@@ -99,6 +101,7 @@ const handleStreamRequest = async <T extends ServerLike>({
99
101
} else if ( ! sessionId && isInitializeRequest ( body ) ) {
100
102
// Create a new transport for the session
101
103
transport = new StreamableHTTPServerTransport ( {
104
+ enableJsonResponse,
102
105
eventStore : eventStore || new InMemoryEventStore ( ) ,
103
106
onsessioninitialized : ( _sessionId ) => {
104
107
// add only when the id Sesison id is generated
@@ -132,7 +135,20 @@ const handleStreamRequest = async <T extends ServerLike>({
132
135
server = await createServer ( req ) ;
133
136
} catch ( error ) {
134
137
if ( error instanceof Response ) {
135
- res . writeHead ( error . status ) . end ( error . statusText ) ;
138
+ const fixedHeaders : http . OutgoingHttpHeaders = { } ;
139
+ error . headers . forEach ( ( value , key ) => {
140
+ // If a header appears multiple times, combine them as an array
141
+ if ( fixedHeaders [ key ] ) {
142
+ if ( Array . isArray ( fixedHeaders [ key ] ) ) {
143
+ ( fixedHeaders [ key ] as string [ ] ) . push ( value ) ;
144
+ } else {
145
+ fixedHeaders [ key ] = [ fixedHeaders [ key ] as string , value ] ;
146
+ }
147
+ } else {
148
+ fixedHeaders [ key ] = value ;
149
+ }
150
+ } ) ;
151
+ res . writeHead ( error . status , error . statusText , fixedHeaders ) . end ( error . statusText ) ;
136
152
137
153
return true ;
138
154
}
@@ -381,6 +397,7 @@ const handleSSERequest = async <T extends ServerLike>({
381
397
382
398
export const startHTTPServer = async < T extends ServerLike > ( {
383
399
createServer,
400
+ enableJsonResponse,
384
401
eventStore,
385
402
host = "::" ,
386
403
onClose,
@@ -391,6 +408,7 @@ export const startHTTPServer = async <T extends ServerLike>({
391
408
streamEndpoint = "/mcp" ,
392
409
} : {
393
410
createServer : ( request : http . IncomingMessage ) => Promise < T > ;
411
+ enableJsonResponse ?: boolean ;
394
412
eventStore ?: EventStore ;
395
413
host ?: string ;
396
414
onClose ?: ( server : T ) => Promise < void > ;
@@ -462,6 +480,7 @@ export const startHTTPServer = async <T extends ServerLike>({
462
480
( await handleStreamRequest ( {
463
481
activeTransports : activeStreamTransports ,
464
482
createServer,
483
+ enableJsonResponse,
465
484
endpoint : streamEndpoint ,
466
485
eventStore,
467
486
onClose,
0 commit comments