Skip to main content

ServerHandler

Trait ServerHandler 

Source
pub trait ServerHandler:
    Sized
    + Send
    + Sync
    + 'static {
Show 28 methods // Provided methods fn ping( &self, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), McpError>> + MaybeSendFuture + '_ { ... } fn initialize( &self, request: InitializeRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<InitializeResult, McpError>> + MaybeSendFuture + '_ { ... } fn supported_protocol_versions(&self) -> Cow<'static, [ProtocolVersion]> { ... } fn discover( &self, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<DiscoverResult, McpError>> + MaybeSendFuture + '_ { ... } fn complete( &self, request: CompleteRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<CompleteResult, McpError>> + MaybeSendFuture + '_ { ... } fn set_level( &self, request: SetLevelRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), McpError>> + MaybeSendFuture + '_ { ... } fn get_prompt( &self, request: GetPromptRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<GetPromptResponse, McpError>> + MaybeSendFuture + '_ { ... } fn list_prompts( &self, request: Option<PaginatedRequestParams>, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<ListPromptsResult, McpError>> + MaybeSendFuture + '_ { ... } fn list_resources( &self, request: Option<PaginatedRequestParams>, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<ListResourcesResult, McpError>> + MaybeSendFuture + '_ { ... } fn list_resource_templates( &self, request: Option<PaginatedRequestParams>, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<ListResourceTemplatesResult, McpError>> + MaybeSendFuture + '_ { ... } fn read_resource( &self, request: ReadResourceRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<ReadResourceResponse, McpError>> + MaybeSendFuture + '_ { ... } fn accepted_subscription_filter( &self, requested: &SubscriptionFilter, ) -> Option<SubscriptionFilter> { ... } fn listen( &self, context: SubscriptionContext, ) -> impl Future<Output = Result<(), McpError>> + MaybeSendFuture + '_ { ... } fn subscribe( &self, request: SubscribeRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), McpError>> + MaybeSendFuture + '_ { ... } fn unsubscribe( &self, request: UnsubscribeRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), McpError>> + MaybeSendFuture + '_ { ... } fn call_tool( &self, request: CallToolRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<CallToolResponse, McpError>> + MaybeSendFuture + '_ { ... } fn list_tools( &self, request: Option<PaginatedRequestParams>, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<ListToolsResult, McpError>> + MaybeSendFuture + '_ { ... } fn get_tool(&self, _name: &str) -> Option<Tool> { ... } fn on_custom_request( &self, request: CustomRequest, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<CustomResult, McpError>> + MaybeSendFuture + '_ { ... } fn on_cancelled( &self, notification: CancelledNotificationParam, context: NotificationContext<RoleServer>, ) -> impl Future<Output = ()> + MaybeSendFuture + '_ { ... } fn on_progress( &self, notification: ProgressNotificationParam, context: NotificationContext<RoleServer>, ) -> impl Future<Output = ()> + MaybeSendFuture + '_ { ... } fn on_initialized( &self, context: NotificationContext<RoleServer>, ) -> impl Future<Output = ()> + MaybeSendFuture + '_ { ... } fn on_roots_list_changed( &self, context: NotificationContext<RoleServer>, ) -> impl Future<Output = ()> + MaybeSendFuture + '_ { ... } fn on_custom_notification( &self, notification: CustomNotification, context: NotificationContext<RoleServer>, ) -> impl Future<Output = ()> + MaybeSendFuture + '_ { ... } fn get_info(&self) -> ServerInfo { ... } fn get_task( &self, request: GetTaskParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<GetTaskResult, McpError>> + MaybeSendFuture + '_ { ... } fn update_task( &self, request: UpdateTaskParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), McpError>> + MaybeSendFuture + '_ { ... } fn cancel_task( &self, request: CancelTaskParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), McpError>> + MaybeSendFuture + '_ { ... }
}
Available on crate feature server and non-crate feature local only.

Provided Methods§

Source

fn ping( &self, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), McpError>> + MaybeSendFuture + '_

Source

fn initialize( &self, request: InitializeRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<InitializeResult, McpError>> + MaybeSendFuture + '_

Source

fn supported_protocol_versions(&self) -> Cow<'static, [ProtocolVersion]>

Return the protocol versions supported by this server.

Defaults to every version this SDK knows. Override it to narrow the set to the revisions the server actually implements: the returned list is advertised by Self::discover, bounds what initialize negotiation may agree to, and is what per-request versions are validated against.

Source

fn discover( &self, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<DiscoverResult, McpError>> + MaybeSendFuture + '_

Return this server’s discovery information.

Source

fn complete( &self, request: CompleteRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<CompleteResult, McpError>> + MaybeSendFuture + '_

Source

fn set_level( &self, request: SetLevelRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), McpError>> + MaybeSendFuture + '_

Source

fn get_prompt( &self, request: GetPromptRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<GetPromptResponse, McpError>> + MaybeSendFuture + '_

Source

fn list_prompts( &self, request: Option<PaginatedRequestParams>, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<ListPromptsResult, McpError>> + MaybeSendFuture + '_

Source

fn list_resources( &self, request: Option<PaginatedRequestParams>, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<ListResourcesResult, McpError>> + MaybeSendFuture + '_

Source

fn list_resource_templates( &self, request: Option<PaginatedRequestParams>, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<ListResourceTemplatesResult, McpError>> + MaybeSendFuture + '_

Source

fn read_resource( &self, request: ReadResourceRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<ReadResourceResponse, McpError>> + MaybeSendFuture + '_

Source

fn accepted_subscription_filter( &self, requested: &SubscriptionFilter, ) -> Option<SubscriptionFilter>

Return the subset of a requested notification filter this server accepts.

Returning None leaves subscriptions/listen unimplemented. The SDK intersects the returned filter with both requested and the notification capabilities advertised by Self::get_info before acknowledging it. Categories that were not requested or advertised are always removed.

Source

fn listen( &self, context: SubscriptionContext, ) -> impl Future<Output = Result<(), McpError>> + MaybeSendFuture + '_

Run one established subscription until it is cancelled or closed gracefully.

The SDK sends the acknowledgment before invoking this method. Returning Ok(()) sends the final SubscriptionsListenResult defined by the 2026-07-28 schema, marking graceful server teardown. Explicit stdio cancellation uses notifications/cancelled instead.

Source

fn subscribe( &self, request: SubscribeRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), McpError>> + MaybeSendFuture + '_

👎Deprecated:

resources/subscribe is legacy-only; implement accepted_subscription_filter and listen for protocol version 2026-07-28

Source

fn unsubscribe( &self, request: UnsubscribeRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), McpError>> + MaybeSendFuture + '_

👎Deprecated:

resources/unsubscribe is legacy-only; subscriptions/listen is cancelled through its request lifecycle

Source

fn call_tool( &self, request: CallToolRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<CallToolResponse, McpError>> + MaybeSendFuture + '_

Handle a tools/call request from a client.

§Choosing a return value

MCP distinguishes two failure modes; the API forces you to pick the right one explicitly because they reach the caller’s UI very differently:

  • Ok(CallToolResult::error(...)) — the tool ran (or tried to) and produced a failure the caller should see. The content you supply is rendered in the caller’s MCP client, so the user gets your message. This is the right return value for almost every “the tool didn’t work” path — empty results, validation failures the user can fix, downstream service unavailability, etc.

  • Err(McpError) — a JSON-RPC protocol error. Use this only when the request itself is unroutable: unknown tool (ErrorCode::METHOD_NOT_FOUND), malformed request shape that cannot be treated as a valid tools/call, or a server-internal failure that means the server cannot serve any request right now (ErrorCode::INTERNAL_ERROR, -32603). MCP clients typically render protocol errors opaquely; the caller will not see your message — they see something like “Tool result missing due to internal error”. If you want the caller to read your error, use Ok(CallToolResult::error(...)).

See CallToolResult::error for a worked example.

Source

fn list_tools( &self, request: Option<PaginatedRequestParams>, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<ListToolsResult, McpError>> + MaybeSendFuture + '_

Source

fn get_tool(&self, _name: &str) -> Option<Tool>

Get a tool definition by name.

The default implementation returns None, which bypasses validation. When using #[tool_handler], this method is automatically implemented.

Source

fn on_custom_request( &self, request: CustomRequest, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<CustomResult, McpError>> + MaybeSendFuture + '_

Source

fn on_cancelled( &self, notification: CancelledNotificationParam, context: NotificationContext<RoleServer>, ) -> impl Future<Output = ()> + MaybeSendFuture + '_

Source

fn on_progress( &self, notification: ProgressNotificationParam, context: NotificationContext<RoleServer>, ) -> impl Future<Output = ()> + MaybeSendFuture + '_

Source

fn on_initialized( &self, context: NotificationContext<RoleServer>, ) -> impl Future<Output = ()> + MaybeSendFuture + '_

Source

fn on_roots_list_changed( &self, context: NotificationContext<RoleServer>, ) -> impl Future<Output = ()> + MaybeSendFuture + '_

Source

fn on_custom_notification( &self, notification: CustomNotification, context: NotificationContext<RoleServer>, ) -> impl Future<Output = ()> + MaybeSendFuture + '_

Source

fn get_info(&self) -> ServerInfo

Source

fn get_task( &self, request: GetTaskParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<GetTaskResult, McpError>> + MaybeSendFuture + '_

SEP-2663 tasks/get: return the current DetailedTask state.

Source

fn update_task( &self, request: UpdateTaskParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), McpError>> + MaybeSendFuture + '_

SEP-2663 tasks/update: accept responses to outstanding in-task input requests. Returns an empty acknowledgement on success.

Source

fn cancel_task( &self, request: CancelTaskParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), McpError>> + MaybeSendFuture + '_

SEP-2663 tasks/cancel: cooperative cancellation. Returns an empty acknowledgement; the task’s observable status may lag.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementations on Foreign Types§

Source§

impl<T: ServerHandler> ServerHandler for Arc<T>

Source§

fn ping( &self, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), McpError>> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn initialize( &self, request: InitializeRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<InitializeResult, McpError>> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn supported_protocol_versions(&self) -> Cow<'static, [ProtocolVersion]>

Available on non-crate feature local only.
Source§

fn discover( &self, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<DiscoverResult, McpError>> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn complete( &self, request: CompleteRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<CompleteResult, McpError>> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn set_level( &self, request: SetLevelRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), McpError>> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn get_prompt( &self, request: GetPromptRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<GetPromptResponse, McpError>> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn list_prompts( &self, request: Option<PaginatedRequestParams>, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<ListPromptsResult, McpError>> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn list_resources( &self, request: Option<PaginatedRequestParams>, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<ListResourcesResult, McpError>> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn list_resource_templates( &self, request: Option<PaginatedRequestParams>, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<ListResourceTemplatesResult, McpError>> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn read_resource( &self, request: ReadResourceRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<ReadResourceResponse, McpError>> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn accepted_subscription_filter( &self, requested: &SubscriptionFilter, ) -> Option<SubscriptionFilter>

Available on non-crate feature local only.
Source§

fn listen( &self, context: SubscriptionContext, ) -> impl Future<Output = Result<(), McpError>> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn subscribe( &self, request: SubscribeRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), McpError>> + MaybeSendFuture + '_

👎Deprecated:

resources/subscribe is legacy-only; implement accepted_subscription_filter and listen for protocol version 2026-07-28

Available on non-crate feature local only.
Source§

fn unsubscribe( &self, request: UnsubscribeRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), McpError>> + MaybeSendFuture + '_

👎Deprecated:

resources/unsubscribe is legacy-only; subscriptions/listen is cancelled through its request lifecycle

Available on non-crate feature local only.
Source§

fn call_tool( &self, request: CallToolRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<CallToolResponse, McpError>> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn list_tools( &self, request: Option<PaginatedRequestParams>, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<ListToolsResult, McpError>> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn get_tool(&self, name: &str) -> Option<Tool>

Available on non-crate feature local only.
Source§

fn on_custom_request( &self, request: CustomRequest, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<CustomResult, McpError>> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn on_cancelled( &self, notification: CancelledNotificationParam, context: NotificationContext<RoleServer>, ) -> impl Future<Output = ()> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn on_progress( &self, notification: ProgressNotificationParam, context: NotificationContext<RoleServer>, ) -> impl Future<Output = ()> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn on_initialized( &self, context: NotificationContext<RoleServer>, ) -> impl Future<Output = ()> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn on_roots_list_changed( &self, context: NotificationContext<RoleServer>, ) -> impl Future<Output = ()> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn on_custom_notification( &self, notification: CustomNotification, context: NotificationContext<RoleServer>, ) -> impl Future<Output = ()> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn get_info(&self) -> ServerInfo

Available on non-crate feature local only.
Source§

fn get_task( &self, request: GetTaskParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<GetTaskResult, McpError>> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn update_task( &self, request: UpdateTaskParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), McpError>> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn cancel_task( &self, request: CancelTaskParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), McpError>> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

impl<T: ServerHandler> ServerHandler for Box<T>

Source§

fn ping( &self, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), McpError>> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn initialize( &self, request: InitializeRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<InitializeResult, McpError>> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn supported_protocol_versions(&self) -> Cow<'static, [ProtocolVersion]>

Available on non-crate feature local only.
Source§

fn discover( &self, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<DiscoverResult, McpError>> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn complete( &self, request: CompleteRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<CompleteResult, McpError>> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn set_level( &self, request: SetLevelRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), McpError>> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn get_prompt( &self, request: GetPromptRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<GetPromptResponse, McpError>> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn list_prompts( &self, request: Option<PaginatedRequestParams>, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<ListPromptsResult, McpError>> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn list_resources( &self, request: Option<PaginatedRequestParams>, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<ListResourcesResult, McpError>> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn list_resource_templates( &self, request: Option<PaginatedRequestParams>, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<ListResourceTemplatesResult, McpError>> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn read_resource( &self, request: ReadResourceRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<ReadResourceResponse, McpError>> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn accepted_subscription_filter( &self, requested: &SubscriptionFilter, ) -> Option<SubscriptionFilter>

Available on non-crate feature local only.
Source§

fn listen( &self, context: SubscriptionContext, ) -> impl Future<Output = Result<(), McpError>> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn subscribe( &self, request: SubscribeRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), McpError>> + MaybeSendFuture + '_

👎Deprecated:

resources/subscribe is legacy-only; implement accepted_subscription_filter and listen for protocol version 2026-07-28

Available on non-crate feature local only.
Source§

fn unsubscribe( &self, request: UnsubscribeRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), McpError>> + MaybeSendFuture + '_

👎Deprecated:

resources/unsubscribe is legacy-only; subscriptions/listen is cancelled through its request lifecycle

Available on non-crate feature local only.
Source§

fn call_tool( &self, request: CallToolRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<CallToolResponse, McpError>> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn list_tools( &self, request: Option<PaginatedRequestParams>, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<ListToolsResult, McpError>> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn get_tool(&self, name: &str) -> Option<Tool>

Available on non-crate feature local only.
Source§

fn on_custom_request( &self, request: CustomRequest, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<CustomResult, McpError>> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn on_cancelled( &self, notification: CancelledNotificationParam, context: NotificationContext<RoleServer>, ) -> impl Future<Output = ()> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn on_progress( &self, notification: ProgressNotificationParam, context: NotificationContext<RoleServer>, ) -> impl Future<Output = ()> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn on_initialized( &self, context: NotificationContext<RoleServer>, ) -> impl Future<Output = ()> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn on_roots_list_changed( &self, context: NotificationContext<RoleServer>, ) -> impl Future<Output = ()> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn on_custom_notification( &self, notification: CustomNotification, context: NotificationContext<RoleServer>, ) -> impl Future<Output = ()> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn get_info(&self) -> ServerInfo

Available on non-crate feature local only.
Source§

fn get_task( &self, request: GetTaskParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<GetTaskResult, McpError>> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn update_task( &self, request: UpdateTaskParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), McpError>> + MaybeSendFuture + '_

Available on non-crate feature local only.
Source§

fn cancel_task( &self, request: CancelTaskParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), McpError>> + MaybeSendFuture + '_

Available on non-crate feature local only.

Implementors§