MCP TypeScript SDK (V2) / @modelcontextprotocol/node / streamableHttp
streamableHttp
Classes
NodeStreamableHTTPServerTransport
Defined in: packages/middleware/node/src/streamableHttp.ts:74
Server transport for Streamable HTTP: this implements the MCP Streamable HTTP transport specification. It supports both SSE streaming and direct HTTP responses.
This is a wrapper around WebStandardStreamableHTTPServerTransport that provides Node.js HTTP compatibility. It uses the @hono/node-server library to convert between Node.js HTTP and Web Standard APIs.
In stateful mode:
- Session ID is generated and included in response headers
- Session ID is always included in initialization responses
- Requests with invalid session IDs are rejected with
404 Not Found - Non-initialization requests without a session ID are rejected with
400 Bad Request - State is maintained in-memory (connections, message history)
In stateless mode:
- No Session ID is included in any responses
- No session validation is performed
Examples
Stateful setup
const server = new McpServer({ name: 'my-server', version: '1.0.0' });
const transport = new NodeStreamableHTTPServerTransport({
sessionIdGenerator: () => randomUUID()
});
await server.connect(transport);Stateless setup
const transport = new NodeStreamableHTTPServerTransport({
sessionIdGenerator: undefined
});Using with a pre-parsed request body (e.g. Express)
app.post('/mcp', (req, res) => {
transport.handleRequest(req, res, req.body);
});Implements
Constructors
Constructor
new NodeStreamableHTTPServerTransport(
options?):NodeStreamableHTTPServerTransport
Defined in: packages/middleware/node/src/streamableHttp.ts:80
Parameters
options?
WebStandardStreamableHTTPServerTransportOptions = {}
Returns
NodeStreamableHTTPServerTransport
Accessors
onclose
Get Signature
get onclose(): (() =>
void) |undefined
Defined in: packages/middleware/node/src/streamableHttp.ts:114
Callback for when the connection is closed for any reason.
This should be invoked when close() is called as well.
Returns
(() => void) | undefined
Set Signature
set onclose(
handler):void
Defined in: packages/middleware/node/src/streamableHttp.ts:110
Sets callback for when the transport is closed.
Parameters
handler
(() => void) | undefined
Returns
void
Callback for when the connection is closed for any reason.
This should be invoked when close() is called as well.
Implementation of
onerror
Get Signature
get onerror(): ((
error) =>void) |undefined
Defined in: packages/middleware/node/src/streamableHttp.ts:125
Callback for when an error occurs.
Note that errors are not necessarily fatal; they are used for reporting any kind of exceptional condition out of band.
Returns
((error) => void) | undefined
Set Signature
set onerror(
handler):void
Defined in: packages/middleware/node/src/streamableHttp.ts:121
Sets callback for transport errors.
Parameters
handler
((error) => void) | undefined
Returns
void
Callback for when an error occurs.
Note that errors are not necessarily fatal; they are used for reporting any kind of exceptional condition out of band.
Implementation of
onmessage
Get Signature
get onmessage(): ((
message,extra?) =>void) |undefined
Defined in: packages/middleware/node/src/streamableHttp.ts:136
Callback for when a message (request or response) is received over the connection.
Includes the request and authInfo if the transport is authenticated.
The request can be used to get the original request information (headers, etc.)
Returns
((message, extra?) => void) | undefined
Set Signature
set onmessage(
handler):void
Defined in: packages/middleware/node/src/streamableHttp.ts:132
Sets callback for incoming messages.
Parameters
handler
((message, extra?) => void) | undefined
Returns
void
Callback for when a message (request or response) is received over the connection.
Includes the request and authInfo if the transport is authenticated.
The request can be used to get the original request information (headers, etc.)
Implementation of
sessionId
Get Signature
get sessionId():
string|undefined
Defined in: packages/middleware/node/src/streamableHttp.ts:103
Gets the session ID for this transport instance.
Returns
string | undefined
The session ID generated for this connection.
Implementation of
Methods
close()
close():
Promise<void>
Defined in: packages/middleware/node/src/streamableHttp.ts:151
Closes the transport and all active connections.
Returns
Promise<void>
Implementation of
closeSSEStream()
closeSSEStream(
requestId):void
Defined in: packages/middleware/node/src/streamableHttp.ts:216
Close an SSE stream for a specific request, triggering client reconnection. Use this to implement polling behavior during long-running operations - client will reconnect after the retry interval specified in the priming event.
Parameters
requestId
Returns
void
closeStandaloneSSEStream()
closeStandaloneSSEStream():
void
Defined in: packages/middleware/node/src/streamableHttp.ts:224
Close the standalone GET SSE stream, triggering client reconnection. Use this to implement polling behavior for server-initiated notifications.
Returns
void
handleRequest()
handleRequest(
req,res,parsedBody?):Promise<void>
Defined in: packages/middleware/node/src/streamableHttp.ts:188
Handles an incoming HTTP request, whether GET or POST.
This method converts Node.js HTTP objects to Web Standard Request/Response and delegates to the underlying WebStandardStreamableHTTPServerTransport.
Parameters
req
IncomingMessage & object
Node.js IncomingMessage, optionally with auth property from middleware
res
ServerResponse
Node.js ServerResponse
parsedBody?
unknown
Optional pre-parsed body from body-parser middleware
Returns
Promise<void>
send()
send(
message,options?):Promise<void>
Defined in: packages/middleware/node/src/streamableHttp.ts:158
Sends a JSON-RPC message through the transport.
Parameters
message
options?
relatedRequestId?
Returns
Promise<void>
Implementation of
setScopeChallengeResolver()
setScopeChallengeResolver(
resolver):void
Defined in: packages/middleware/node/src/streamableHttp.ts:174
Sets the scope challenge resolver used by the wrapped Web Standard transport.
Parameters
resolver
Returns
void
setSupportedProtocolVersions()
setSupportedProtocolVersions(
versions):void
Defined in: packages/middleware/node/src/streamableHttp.ts:169
Forwards the supported protocol versions to the wrapped Web Standard transport for MCP-Protocol-Version header validation. Called by the protocol layer during connect; without this delegation a server's supportedProtocolVersions option never reached the Node adapter's header validation.
Parameters
versions
string[]
Returns
void
Implementation of
Transport.setSupportedProtocolVersions
start()
start():
Promise<void>
Defined in: packages/middleware/node/src/streamableHttp.ts:144
Starts the transport. This is required by the Transport interface but is a no-op for the Streamable HTTP transport as connections are managed per-request.
Returns
Promise<void>
Implementation of
Type Aliases
StreamableHTTPServerTransportOptions
StreamableHTTPServerTransportOptions =
WebStandardStreamableHTTPServerTransportOptions
Defined in: packages/middleware/node/src/streamableHttp.ts:29
Configuration options for NodeStreamableHTTPServerTransport
This is an alias for WebStandardStreamableHTTPServerTransportOptions for backward compatibility.