This is the documentation for the v2 beta — 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:117

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:144

Parameters
options

PerRequestHTTPServerTransportOptions

Returns

PerRequestHTTPServerTransport

Properties

onclose?

optional onclose?: () => void

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

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:119

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:120

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:337

Closes the connection.

Returns

Promise<void>

Implementation of

Transport.close

handleMessage()

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

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

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:234

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:149

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:326

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:77

Constructor options for PerRequestHTTPServerTransport.

Properties

classification

classification: MessageClassification

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

The edge classification of the message this transport will serve.

responseMode?

optional responseMode?: PerRequestResponseMode

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

Response shaping for the exchange; defaults to auto.


PerRequestMessageExtra

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

Per-exchange context handed to PerRequestHTTPServerTransport.handleMessage.

Properties

authInfo?

optional authInfo?: AuthInfo

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

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:91

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:74

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.