11import { randomUUID } from 'node:crypto' ;
22
33import type { CallToolResult } from '@modelcontextprotocol/server' ;
4- import { isInitializeRequest , McpServer , SSEServerTransport , StreamableHTTPServerTransport } from '@modelcontextprotocol/server' ;
4+ import { isInitializeRequest , McpServer , SSEServerTransport , NodeStreamableHTTPServerTransport } from '@modelcontextprotocol/server' ;
55import { createMcpExpressApp } from '@modelcontextprotocol/server-express' ;
66import type { Request , Response } from 'express' ;
77import * as z from 'zod/v4' ;
@@ -76,7 +76,7 @@ const getServer = () => {
7676const app = createMcpExpressApp ( ) ;
7777
7878// Store transports by session ID
79- const transports : Record < string , StreamableHTTPServerTransport | SSEServerTransport > = { } ;
79+ const transports : Record < string , NodeStreamableHTTPServerTransport | SSEServerTransport > = { } ;
8080
8181//=============================================================================
8282// STREAMABLE HTTP TRANSPORT (PROTOCOL VERSION 2025-11-25)
@@ -89,16 +89,16 @@ app.all('/mcp', async (req: Request, res: Response) => {
8989 try {
9090 // Check for existing session ID
9191 const sessionId = req . headers [ 'mcp-session-id' ] as string | undefined ;
92- let transport : StreamableHTTPServerTransport ;
92+ let transport : NodeStreamableHTTPServerTransport ;
9393
9494 if ( sessionId && transports [ sessionId ] ) {
9595 // Check if the transport is of the correct type
9696 const existingTransport = transports [ sessionId ] ;
97- if ( existingTransport instanceof StreamableHTTPServerTransport ) {
97+ if ( existingTransport instanceof NodeStreamableHTTPServerTransport ) {
9898 // Reuse existing transport
9999 transport = existingTransport ;
100100 } else {
101- // Transport exists but is not a StreamableHTTPServerTransport (could be SSEServerTransport)
101+ // Transport exists but is not a NodeStreamableHTTPServerTransport (could be SSEServerTransport)
102102 res . status ( 400 ) . json ( {
103103 jsonrpc : '2.0' ,
104104 error : {
@@ -111,7 +111,7 @@ app.all('/mcp', async (req: Request, res: Response) => {
111111 }
112112 } else if ( ! sessionId && req . method === 'POST' && isInitializeRequest ( req . body ) ) {
113113 const eventStore = new InMemoryEventStore ( ) ;
114- transport = new StreamableHTTPServerTransport ( {
114+ transport = new NodeStreamableHTTPServerTransport ( {
115115 sessionIdGenerator : ( ) => randomUUID ( ) ,
116116 eventStore, // Enable resumability
117117 onsessioninitialized : sessionId => {
@@ -186,7 +186,7 @@ app.post('/messages', async (req: Request, res: Response) => {
186186 // Reuse existing transport
187187 transport = existingTransport ;
188188 } else {
189- // Transport exists but is not a SSEServerTransport (could be StreamableHTTPServerTransport )
189+ // Transport exists but is not a SSEServerTransport (could be NodeStreamableHTTPServerTransport )
190190 res . status ( 400 ) . json ( {
191191 jsonrpc : '2.0' ,
192192 error : {
0 commit comments