Initializes this server with the given name and version information.
Intended for programmatic or logical use, but used as a display name in past specs or fallback
Optionaltitle?: stringIntended for UI and end-user contexts — optimized to be human-readable and easily understood, even by those unfamiliar with domain-specific terminology.
If not provided, the name should be used for display (except for Tool,
where annotations.title should be given precedence over using name,
if present).
Optionaloptions: ServerOptionsOptionalfallbackA handler to invoke for any notification types that do not have their own handler installed.
OptionalfallbackA handler to invoke for any request types that do not have their own handler installed.
OptionaloncloseCallback for when the connection is closed for any reason.
This is invoked when close() is called as well.
OptionalonerrorCallback 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.
OptionaloninitializedCallback for when initialization has fully completed (i.e., the client has sent an initialized notification).
Asserts that a request handler has not already been set for the given method, in preparation for a new one being automatically installed.
ProtectedassertA method to check if a capability is supported by the remote side, for the given method to be called.
This should be implemented by subclasses.
ProtectedassertA method to check if a notification is supported by the local side, for the given method to be sent.
This should be implemented by subclasses.
ProtectedassertA method to check if a request handler is supported by the local side, for the given method to be handled.
This should be implemented by subclasses.
Closes the connection.
Attaches to the given transport, starts it, and starts listening for messages.
The Protocol object assumes ownership of the Transport, replacing any callbacks that have already been set, and expects that it is the only user of the Transport instance going forward.
Optional_meta?: { progressToken?: string | number; [key: string]: unknown }OptionalprogressToken?: string | numberIf specified, the caller is requesting out-of-band progress notifications for this request (as represented by notifications/progress). The value of this parameter is an opaque token that will be attached to any subsequent notifications. The receiver is not obligated to provide these notifications.
OptionalincludeContext?: "none" | "thisServer" | "allServers"A request to include context from one or more MCP servers (including the caller), to be attached to the prompt. The client MAY ignore this request.
The maximum number of tokens to sample, as requested by the server. The client MAY choose to sample fewer tokens than requested.
Optionalmetadata?: { [key: string]: unknown }Optional metadata to pass through to the LLM provider. The format of this metadata is provider-specific.
OptionalmodelPreferences?: {The server's preferences for which model to select.
OptionalcostPriority?: numberHow much to prioritize cost when selecting a model.
Optionalhints?: { name?: string; [key: string]: unknown }[]Optional hints to use for model selection.
OptionalintelligencePriority?: numberHow much to prioritize intelligence and capabilities when selecting a model.
OptionalspeedPriority?: numberHow much to prioritize sampling speed (latency) when selecting a model.
OptionalstopSequences?: string[]OptionalsystemPrompt?: stringAn optional system prompt the server wants to use for sampling. The client MAY modify or omit this prompt.
Optionaltemperature?: numberOptionaloptions: RequestOptionsOptional_meta?: { progressToken?: string | number; [key: string]: unknown }OptionalprogressToken?: string | numberIf specified, the caller is requesting out-of-band progress notifications for this request (as represented by notifications/progress). The value of this parameter is an opaque token that will be attached to any subsequent notifications. The receiver is not obligated to provide these notifications.
The message to present to the user.
The schema for the requested user input.
Optionaloptions: RequestOptionsAfter initialization has completed, this will be populated with the client's reported capabilities.
Optionalelicitation?: { [key: string]: unknown }Present if the client supports eliciting user input.
Optionalexperimental?: { [key: string]: unknown }Experimental, non-standard capabilities that the client supports.
Optionalroots?: { listChanged?: boolean; [key: string]: unknown }Present if the client supports listing roots.
OptionallistChanged?: booleanWhether the client supports issuing notifications for changes to the roots list.
Optionalsampling?: { [key: string]: unknown }Present if the client supports sampling from an LLM.
After initialization has completed, this will be populated with information about the client's name and version.
Intended for programmatic or logical use, but used as a display name in past specs or fallback
Optionaltitle?: stringIntended for UI and end-user contexts — optimized to be human-readable and easily understood, even by those unfamiliar with domain-specific terminology.
If not provided, the name should be used for display (except for Tool,
where annotations.title should be given precedence over using name,
if present).
Optionalparams: {Optionaloptions: RequestOptionsEmits a notification, which is a one-way message that does not expect a response.
Optionaloptions: NotificationOptionsRegisters new capabilities. This can only be called before connecting to a transport.
The new capabilities will be merged with any existing capabilities previously given (e.g., at initialization).
Optionalcompletions?: { [key: string]: unknown }Present if the server supports sending completions to the client.
Optionalexperimental?: { [key: string]: unknown }Experimental, non-standard capabilities that the server supports.
Optionallogging?: { [key: string]: unknown }Present if the server supports sending log messages to the client.
Optionalprompts?: { listChanged?: boolean; [key: string]: unknown }Present if the server offers any prompt templates.
OptionallistChanged?: booleanWhether this server supports issuing notifications for changes to the prompt list.
Optionalresources?: { listChanged?: boolean; subscribe?: boolean; [key: string]: unknown }Present if the server offers any resources to read.
OptionallistChanged?: booleanWhether this server supports issuing notifications for changes to the resource list.
Optionalsubscribe?: booleanWhether this server supports clients subscribing to resource updates.
Optionaltools?: { listChanged?: boolean; [key: string]: unknown }Present if the server offers any tools to call.
OptionallistChanged?: booleanWhether this server supports issuing notifications for changes to the tool list.
Removes the notification handler for the given method.
Removes the request handler for the given method.
Sends a request and wait for a response.
Do not use this method to emit notifications! Use notification() instead.
Optionaloptions: RequestOptionsOptional_meta?: { [key: string]: unknown }See MCP specification for notes on _meta usage.
Optionaldata?: unknownThe data to be logged, such as a string message or an object. Any JSON serializable type is allowed here.
The severity of this log message.
Optionallogger?: stringAn optional name of the logger issuing this message.
Optional_meta?: { [key: string]: unknown }See MCP specification for notes on _meta usage.
The URI of the resource that has been updated. This might be a sub-resource of the one that the client actually subscribed to.
Registers a handler to invoke when this protocol object receives a notification with the given method.
Note that this will replace any previous notification handler for the same method.
Registers a handler to invoke when this protocol object receives a request with the given method.
Note that this will replace any previous request handler for the same method.
An MCP server on top of a pluggable transport.
This server will automatically respond to the initialization flow as initiated from the client.
To use with custom types, extend the base Request/Notification/Result types and pass them as type parameters: