AbstractMaps event names to the listener's params type.
Maps event names to the listener's params type.
Optional_options: ProtocolOptionsAdd a listener for a notification event.
Unlike the singular on* handler, calling this multiple times appends
listeners rather than replacing them. All registered listeners fire in
insertion order after the on* handler when the notification arrives.
Registration is lazy: the first call (for a given event, from either
this method or the on* setter) registers a dispatcher with the base
Protocol.
Asserts that a request handler has not already been set for the given method, in preparation for a new one being automatically installed.
Protected AbstractassertA 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.
Protected AbstractassertA 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.
Protected AbstractassertA 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.
Protected AbstractassertA method to check if task creation is supported for the given request method.
This should be implemented by subclasses.
Protected AbstractassertA method to check if task handler is supported by the local side, for the given method to be handled.
This should be implemented by subclasses.
ProtectedcancelExperimentalCancels a specific task.
Use client.experimental.tasks.cancelTask() to access this method.
Optionaloptions: RequestOptionsCloses 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.
ProtectedgetProtectedgetExperimentalGets the current status of a task.
Use client.experimental.tasks.getTask() to access this method.
Optionaloptions: RequestOptionsProtectedgetExperimentalRetrieves the result of a completed task.
Use client.experimental.tasks.getTaskResult() to access this method.
Optionaloptions: RequestOptionsProtectedlistExperimentalLists tasks, optionally starting from a pagination cursor.
Use client.experimental.tasks.listTasks() to access this method.
Optionalparams: { cursor?: string }Optionaloptions: RequestOptionsEmits a notification, which is a one-way message that does not expect a response.
Optionaloptions: NotificationOptionsProtectedonRemoves the notification handler for the given method.
Removes the request handler for the given method.
Sends a request and waits for a response.
Do not use this method to emit notifications! Use notification() instead.
Optionaloptions: RequestOptionsProtectedrequestExperimentalSends a request and returns an AsyncGenerator that yields response messages. The generator is guaranteed to end with either a 'result' or 'error' message.
Optionaloptions: RequestOptionsconst stream = protocol.requestStream(request, resultSchema, options);
for await (const message of stream) {
switch (message.type) {
case 'taskCreated':
console.log('Task created:', message.task.taskId);
break;
case 'taskStatus':
console.log('Task status:', message.task.status);
break;
case 'result':
console.log('Final result:', message.result);
break;
case 'error':
console.error('Error:', message.error);
break;
}
}
Use client.experimental.tasks.requestStream() to access this method.
ProtectedsetSet or clear the singular on* handler for an event.
Replace semantics — like the DOM's el.onclick = fn. Assigning
undefined clears the handler without affecting addEventListener
listeners.
ProtectedwarnWarn if a request handler on* setter is replacing a previously-set
handler. Call from each request setter before updating the backing field.
Protected Abstract ReadonlyeventEvent name → notification schema. Subclasses populate this so that the event system can lazily register a dispatcher with the correct schema on first use.
OptionalfallbackA 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.
ProtectedreplaceReplace a request handler, bypassing double-set protection. Used by
on* request-handler setters that need replace semantics.
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.
Registers a notification handler. Throws if a handler for the same
method has already been registered — use the on* setter (replace
semantics) or addEventListener (multi-listener) for mapped events.
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 request handler. Throws if a handler for the same method
has already been registered — use the on* setter (replace semantics)
or addEventListener (multi-listener) for notification events.
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.
Intermediate base class that adds DOM-style event support on top of the MCP SDK's
Protocol.The base
Protocolclass stores one handler per method:setRequestHandler()andsetNotificationHandler()replace any existing handler for the same method silently. This class introduces a two-channel event model inspired by the DOM:Singular
on*handler (likeel.onclick)Subclasses expose
get/setpairs that delegate tosetEventHandler/getEventHandler. Assigning replaces the previous handler; assigningundefinedclears it.addEventListenerlisteners are unaffected.Multi-listener (
addEventListener/removeEventListener)Append to a per-event listener array. Listeners fire in insertion order after the singular
on*handler.Dispatch order
When a notification arrives for a mapped event:
onEventDispatch(subclass side-effects)on*handler (if set)addEventListenerlisteners in insertion orderDouble-set protection
Direct calls to
setRequestHandler/setNotificationHandlerthrow if a handler for the same method has already been registered (through any path), so accidental overwrites surface as errors instead of silent bugs.