This is the documentation for v2 — looking for the v1 documentation?
Skip to content

MCP TypeScript SDK (V2) / @modelcontextprotocol/server / server/perRequestTransport

server/perRequestTransport ​

Classes ​

PerRequestHTTPServerTransport ​

Defined in: packages/server/src/server/perRequestTransport.ts:122

The per-request micro-transport: a real, connected Transport whose whole lifetime is one HTTP exchange. See the module documentation for the response shapes it produces.

Implements ​

Constructors ​

Constructor ​

new PerRequestHTTPServerTransport(options): PerRequestHTTPServerTransport

Defined in: packages/server/src/server/perRequestTransport.ts:150

Parameters ​
options ​

PerRequestHTTPServerTransportOptions

Returns ​

PerRequestHTTPServerTransport

Properties ​

onclose? ​

optional onclose?: () => void

Defined in: packages/server/src/server/perRequestTransport.ts:123

Callback for when the connection is closed for any reason.

This should be invoked when close() is called as well.

Returns ​

void

Implementation of ​

Transport.onclose

onerror? ​

optional onerror?: (error) => void

Defined in: packages/server/src/server/perRequestTransport.ts:124

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 ​

Transport.onerror

onmessage? ​

optional onmessage?: <T>(message, extra?) => void

Defined in: packages/server/src/server/perRequestTransport.ts:125

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.)

Type Parameters ​
T ​

T extends JSONRPCMessage

Parameters ​
message ​

T

extra? ​

MessageExtraInfo

Returns ​

void

Implementation of ​

Transport.onmessage

Methods ​

close() ​

close(): Promise<void>

Defined in: packages/server/src/server/perRequestTransport.ts:344

Closes the connection.

Returns ​

Promise<void>

Implementation of ​

Transport.close

handleMessage() ​

handleMessage(message, extra?): Promise<Response>

Defined in: packages/server/src/server/perRequestTransport.ts:173

Serves the single exchange: delivers the classified message to the connected server instance and resolves with the HTTP response.

Throws when called a second time (the transport is strictly single-use), or before a server has been connected to the transport. The returned promise rejects with a connection-closed error when the transport is closed before a response was produced (for example because the client disconnected).

Parameters ​
message ​

{ id: string | number; jsonrpc: "2.0"; method: string; params?: {[key: string]: unknown; _meta?: {[key: string]: unknown; io.modelcontextprotocol/related-task?: { taskId: string; }; progressToken?: string | number; }; }; } | { jsonrpc: "2.0"; method: string; params?: {[key: string]: unknown; _meta?: {[key: string]: unknown; io.modelcontextprotocol/related-task?: { taskId: string; }; progressToken?: string | number; }; }; }

extra? ​

PerRequestMessageExtra

Returns ​

Promise<Response>

send() ​

send(message, options?): Promise<void>

Defined in: packages/server/src/server/perRequestTransport.ts:241

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 ​

JSONRPCMessage

options? ​

TransportSendOptions

Returns ​

Promise<void>

Implementation of ​

Transport.send

start() ​

start(): Promise<void>

Defined in: packages/server/src/server/perRequestTransport.ts:156

Starts processing messages on the transport, including any connection steps that might need to be taken.

This method should only be called after callbacks are installed, or else messages may be lost.

NOTE: This method should not be called explicitly when using Client or Server classes, as they will implicitly call start().

Returns ​

Promise<void>

Implementation of ​

Transport.start

writeCommentFrame() ​

writeCommentFrame(comment): void

Defined in: packages/server/src/server/perRequestTransport.ts:333

Writes an SSE comment frame (a keep-alive heartbeat). Dropped when the exchange is not currently streaming.

Parameters ​
comment ​

string

Returns ​

void

Interfaces ​

PerRequestHTTPServerTransportOptions ​

Defined in: packages/server/src/server/perRequestTransport.ts:79

Constructor options for PerRequestHTTPServerTransport.

Properties ​

classification ​

classification: MessageClassification

Defined in: packages/server/src/server/perRequestTransport.ts:81

The edge classification of the message this transport will serve.

keepAliveMs? ​

optional keepAliveMs?: number

Defined in: packages/server/src/server/perRequestTransport.ts:85

SSE keep-alive interval in milliseconds; defaults to 15000, 0 disables.

responseMode? ​

optional responseMode?: PerRequestResponseMode

Defined in: packages/server/src/server/perRequestTransport.ts:83

Response shaping for the exchange; defaults to auto.


PerRequestMessageExtra ​

Defined in: packages/server/src/server/perRequestTransport.ts:89

Per-exchange context handed to PerRequestHTTPServerTransport.handleMessage.

Properties ​

authInfo? ​

optional authInfo?: AuthInfo

Defined in: packages/server/src/server/perRequestTransport.ts:100

Validated authentication information supplied by the caller. Strictly pass-through: the transport never populates this from request headers.

request? ​

optional request?: Request

Defined in: packages/server/src/server/perRequestTransport.ts:95

The original HTTP request. Used for handler context and, when the runtime provides an abort signal on it, to cancel the exchange when the client disconnects.

Type Aliases ​

PerRequestResponseMode ​

PerRequestResponseMode = "auto" | "sse" | "json"

Defined in: packages/server/src/server/perRequestTransport.ts:76

How the transport shapes its HTTP response for a request:

  • auto (default): answer with a single JSON body unless the handler emits a related message before its result, in which case the response upgrades to an SSE stream.
  • sse: always answer handler output over an SSE stream. The stream opens once the request has passed the pre-dispatch validation gates, so ladder rejections keep their mapped HTTP status instead of being framed onto a 200 stream.
  • json: never stream; related messages other than the terminal response are dropped.