diff --git a/src/startHTTPServer.ts b/src/startHTTPServer.ts index 5ee59f2..9734dc5 100644 --- a/src/startHTTPServer.ts +++ b/src/startHTTPServer.ts @@ -42,6 +42,7 @@ const getBody = (request: http.IncomingMessage) => { const handleStreamRequest = async ({ activeTransports, createServer, + enableJsonResponse, endpoint, eventStore, onClose, @@ -54,6 +55,7 @@ const handleStreamRequest = async ({ { server: T; transport: StreamableHTTPServerTransport } >; createServer: (request: http.IncomingMessage) => Promise; + enableJsonResponse?: boolean; endpoint: string; eventStore?: EventStore; onClose?: (server: T) => Promise; @@ -99,6 +101,7 @@ const handleStreamRequest = async ({ } else if (!sessionId && isInitializeRequest(body)) { // Create a new transport for the session transport = new StreamableHTTPServerTransport({ + enableJsonResponse, eventStore: eventStore || new InMemoryEventStore(), onsessioninitialized: (_sessionId) => { // add only when the id Sesison id is generated @@ -132,7 +135,20 @@ const handleStreamRequest = async ({ server = await createServer(req); } catch (error) { if (error instanceof Response) { - res.writeHead(error.status).end(error.statusText); + const fixedHeaders: http.OutgoingHttpHeaders = {}; + error.headers.forEach((value, key) => { + // If a header appears multiple times, combine them as an array + if (fixedHeaders[key]) { + if (Array.isArray(fixedHeaders[key])) { + (fixedHeaders[key] as string[]).push(value); + } else { + fixedHeaders[key] = [fixedHeaders[key] as string, value]; + } + } else { + fixedHeaders[key] = value; + } + }); + res.writeHead(error.status, error.statusText, fixedHeaders).end(error.statusText); return true; } @@ -381,6 +397,7 @@ const handleSSERequest = async ({ export const startHTTPServer = async ({ createServer, + enableJsonResponse, eventStore, host = "::", onClose, @@ -391,6 +408,7 @@ export const startHTTPServer = async ({ streamEndpoint = "/mcp", }: { createServer: (request: http.IncomingMessage) => Promise; + enableJsonResponse?: boolean; eventStore?: EventStore; host?: string; onClose?: (server: T) => Promise; @@ -462,6 +480,7 @@ export const startHTTPServer = async ({ (await handleStreamRequest({ activeTransports: activeStreamTransports, createServer, + enableJsonResponse, endpoint: streamEndpoint, eventStore, onClose,