MCP TypeScript SDK (V2) / @modelcontextprotocol/server / server/streamableHttp
server/streamableHttp
Classes
WebStandardStreamableHTTPServerTransport
Defined in: packages/server/src/server/streamableHttp.ts:231
Server transport for Web Standards Streamable HTTP: this implements the MCP Streamable HTTP transport specification using Web Standard APIs (Request, Response, ReadableStream).
This transport works on any runtime that supports Web Standards: Node.js 18+, Cloudflare Workers, Deno, Bun, etc.
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 WebStandardStreamableHTTPServerTransport({
sessionIdGenerator: () => crypto.randomUUID()
});
await server.connect(transport);Stateless setup
const transport = new WebStandardStreamableHTTPServerTransport({
sessionIdGenerator: undefined
});Hono.js
app.all('/mcp', async c => {
return transport.handleRequest(c.req.raw);
});Cloudflare Workers
const worker = {
async fetch(request: Request): Promise<Response> {
return transport.handleRequest(request);
}
};Implements
Constructors
Constructor
new WebStandardStreamableHTTPServerTransport(
options?):WebStandardStreamableHTTPServerTransport
Defined in: packages/server/src/server/streamableHttp.ts:256
Parameters
options?
WebStandardStreamableHTTPServerTransportOptions = {}
Returns
WebStandardStreamableHTTPServerTransport
Properties
onclose?
optionalonclose?: () =>void
Defined in: packages/server/src/server/streamableHttp.ts:252
Callback for when the connection is closed for any reason.
This should be invoked when close() is called as well.
Returns
void
Implementation of
onerror?
optionalonerror?: (error) =>void
Defined in: packages/server/src/server/streamableHttp.ts:253
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.
Parameters
error
Error
Returns
void
Implementation of
onmessage?
optionalonmessage?: (message,extra?) =>void
Defined in: packages/server/src/server/streamableHttp.ts:254
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.)
Parameters
message
extra?
Returns
void
Implementation of
sessionId?
optionalsessionId?:string
Defined in: packages/server/src/server/streamableHttp.ts:251
The session ID generated for this connection.
Implementation of
Methods
close()
close():
Promise<void>
Defined in: packages/server/src/server/streamableHttp.ts:977
Closes the connection.
Returns
Promise<void>
Implementation of
closeSSEStream()
closeSSEStream(
requestId):void
Defined in: packages/server/src/server/streamableHttp.ts:999
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/server/src/server/streamableHttp.ts:1013
Close the standalone GET SSE stream, triggering client reconnection. Use this to implement polling behavior for server-initiated notifications.
Returns
void
handleRequest()
handleRequest(
req,options?):Promise<Response>
Defined in: packages/server/src/server/streamableHttp.ts:354
Handles an incoming HTTP request, whether GET, POST, or DELETE Returns a Response object (Web Standard)
Parameters
req
Request
options?
Returns
Promise<Response>
send()
send(
message,options?):Promise<void>
Defined in: packages/server/src/server/streamableHttp.ts:1020
Sends a JSON-RPC message (request or response).
If present, relatedRequestId is used to indicate to the transport which incoming request to associate this outgoing message with.
Parameters
message
options?
relatedRequestId?
Returns
Promise<void>
Implementation of
setSupportedProtocolVersions()
setSupportedProtocolVersions(
versions):void
Defined in: packages/server/src/server/streamableHttp.ts:284
Sets the supported protocol versions for header validation. Called by the server during connect() to pass its supported versions.
Parameters
versions
string[]
Returns
void
Implementation of
Transport.setSupportedProtocolVersions
start()
start():
Promise<void>
Defined in: packages/server/src/server/streamableHttp.ts:273
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
Interfaces
EventStore
Defined in: packages/server/src/server/streamableHttp.ts:28
Interface for resumability support via event storage
Methods
getStreamIdForEventId()?
optionalgetStreamIdForEventId(eventId):Promise<string|undefined>
Defined in: packages/server/src/server/streamableHttp.ts:45
Get the stream ID associated with a given event ID.
Parameters
eventId
string
The event ID to look up
Returns
Promise<string | undefined>
The stream ID, or undefined if not found
Optional: If not provided, the SDK will use the streamId returned by replayEventsAfter for stream mapping.
replayEventsAfter()
replayEventsAfter(
lastEventId,__namedParameters):Promise<string>
Defined in: packages/server/src/server/streamableHttp.ts:47
Parameters
lastEventId
string
__namedParameters
send
(eventId, message) => Promise<void>
Returns
Promise<string>
storeEvent()
storeEvent(
streamId,message):Promise<string>
Defined in: packages/server/src/server/streamableHttp.ts:35
Stores an event for later retrieval
Parameters
streamId
string
ID of the stream the event belongs to
message
The JSON-RPC message to store
Returns
Promise<string>
The generated event ID for the stored event
HandleRequestOptions
Defined in: packages/server/src/server/streamableHttp.ts:167
Options for handling a request
Properties
authInfo?
optionalauthInfo?:AuthInfo
Defined in: packages/server/src/server/streamableHttp.ts:177
Authentication info from middleware. If provided, will be passed to message handlers.
parsedBody?
optionalparsedBody?:unknown
Defined in: packages/server/src/server/streamableHttp.ts:172
Pre-parsed request body. If provided, the transport will use this instead of parsing req.json(). Useful when using body-parser middleware that has already parsed the body.
WebStandardStreamableHTTPServerTransportOptions
Defined in: packages/server/src/server/streamableHttp.ts:80
Configuration options for WebStandardStreamableHTTPServerTransport
Properties
allowedHosts?
optionalallowedHosts?:string[]
Defined in: packages/server/src/server/streamableHttp.ts:128
List of allowed Host header values for DNS rebinding protection. If not specified, host validation is disabled.
Deprecated
Use external middleware for host validation instead.
allowedOrigins?
optionalallowedOrigins?:string[]
Defined in: packages/server/src/server/streamableHttp.ts:135
List of allowed Origin header values for DNS rebinding protection. If not specified, origin validation is disabled.
Deprecated
Use external middleware for origin validation instead.
enableDnsRebindingProtection?
optionalenableDnsRebindingProtection?:boolean
Defined in: packages/server/src/server/streamableHttp.ts:142
Enable DNS rebinding protection (requires allowedHosts and/or allowedOrigins to be configured). Default is false for backwards compatibility.
Deprecated
Use external middleware for DNS rebinding protection instead.
enableJsonResponse?
optionalenableJsonResponse?:boolean
Defined in: packages/server/src/server/streamableHttp.ts:115
If true, the server will return JSON responses instead of starting an SSE stream. This can be useful for simple request/response scenarios without streaming. Default is false (SSE streams are preferred).
eventStore?
optionaleventStore?:EventStore
Defined in: packages/server/src/server/streamableHttp.ts:121
Event store for resumability support If provided, resumability will be enabled, allowing clients to reconnect and resume messages
onsessionclosed?
optionalonsessionclosed?: (sessionId) =>void|Promise<void>
Defined in: packages/server/src/server/streamableHttp.ts:108
A callback for session close events This is called when the server closes a session due to a DELETE request. Useful in cases when you need to clean up resources associated with the session. Note that this is different from the transport closing, if you are handling HTTP requests from multiple nodes you might want to close each WebStandardStreamableHTTPServerTransport after a request is completed while still keeping the session open/running.
Parameters
sessionId
string
The session ID that was closed
Returns
void | Promise<void>
onsessioninitialized?
optionalonsessioninitialized?: (sessionId) =>void|Promise<void>
Defined in: packages/server/src/server/streamableHttp.ts:96
A callback for session initialization events This is called when the server initializes a new session. Useful in cases when you need to register multiple mcp sessions and need to keep track of them.
Parameters
sessionId
string
The generated session ID
Returns
void | Promise<void>
retryInterval?
optionalretryInterval?:number
Defined in: packages/server/src/server/streamableHttp.ts:149
Retry interval in milliseconds to suggest to clients in SSE retry field. When set, the server will send a retry field in SSE priming events to control client reconnection timing for polling behavior.
sessionIdGenerator?
optionalsessionIdGenerator?: () =>string
Defined in: packages/server/src/server/streamableHttp.ts:87
Function that generates a session ID for the transport. The session ID SHOULD be globally unique and cryptographically secure (e.g., a securely generated UUID, a JWT, or a cryptographic hash)
If not provided, session management is disabled (stateless mode).
Returns
string
supportedProtocolVersions?
optionalsupportedProtocolVersions?:string[]
Defined in: packages/server/src/server/streamableHttp.ts:161
List of protocol versions that this transport will accept. Used to validate the mcp-protocol-version header in incoming requests.
Note: When using Server.connect(), the server automatically passes its supportedProtocolVersions to the transport, so you typically don't need to set this option directly.
Default
Type Aliases
EventId
EventId =
string
Defined in: packages/server/src/server/streamableHttp.ts:23
StreamId
StreamId =
string
Defined in: packages/server/src/server/streamableHttp.ts:22