pub struct McpServer { /* private fields */ }Expand description
In-process MCP server that owns registered tools, resources, and prompts.
Implementations§
Source§impl McpServer
impl McpServer
Sourcepub fn new(
server_name: impl Into<Cow<'static, str>>,
server_version: impl Into<Cow<'static, str>>,
) -> Self
pub fn new( server_name: impl Into<Cow<'static, str>>, server_version: impl Into<Cow<'static, str>>, ) -> Self
Create a dynamic MCP tool server with the advertised metadata.
Sourcepub fn builder(
server_name: impl Into<Cow<'static, str>>,
server_version: impl Into<Cow<'static, str>>,
) -> McpServerBuilder
pub fn builder( server_name: impl Into<Cow<'static, str>>, server_version: impl Into<Cow<'static, str>>, ) -> McpServerBuilder
Start building a dynamic MCP tool server with generated registrars.
Sourcepub fn from_tool_registry(
server_name: impl Into<Cow<'static, str>>,
server_version: impl Into<Cow<'static, str>>,
tools: McpToolRegistry,
) -> Self
pub fn from_tool_registry( server_name: impl Into<Cow<'static, str>>, server_version: impl Into<Cow<'static, str>>, tools: McpToolRegistry, ) -> Self
Create a dynamic MCP server from an existing tool registry.
Sourcepub fn tool_registry(&self) -> &McpToolRegistry
pub fn tool_registry(&self) -> &McpToolRegistry
Borrow the shared tool registry.
Sourcepub fn tool_registry_mut(&mut self) -> &mut McpToolRegistry
pub fn tool_registry_mut(&mut self) -> &mut McpToolRegistry
Mutably borrow the shared tool registry.
Sourcepub fn into_tool_registry(self) -> McpToolRegistry
pub fn into_tool_registry(self) -> McpToolRegistry
Consume the server and return its tool registry.
Sourcepub fn add_tool<Call>(
&mut self,
definition: ToolDefinition,
call: Call,
) -> Result<(), McpToolError>
pub fn add_tool<Call>( &mut self, definition: ToolDefinition, call: Call, ) -> Result<(), McpToolError>
Register a synchronous MCP tool handler.
§Errors
Returns McpToolError when definition is invalid or a tool with the
same name is already registered.
Sourcepub fn add_typed_tool<Input, Call>(
&mut self,
definition: McpTypedTool<Input>,
call: Call,
) -> Result<(), McpToolError>
pub fn add_typed_tool<Input, Call>( &mut self, definition: McpTypedTool<Input>, call: Call, ) -> Result<(), McpToolError>
Register a synchronous typed MCP tool handler.
§Errors
Returns McpToolError when definition is invalid or a tool with the
same name is already registered.
Sourcepub fn add_tool_async<Call, Fut>(
&mut self,
definition: ToolDefinition,
call: Call,
) -> Result<(), McpToolError>where
Call: Fn(McpToolCall) -> Fut + Send + Sync + 'static,
Fut: Future<Output = ToolCallResult> + Send + 'static,
pub fn add_tool_async<Call, Fut>(
&mut self,
definition: ToolDefinition,
call: Call,
) -> Result<(), McpToolError>where
Call: Fn(McpToolCall) -> Fut + Send + Sync + 'static,
Fut: Future<Output = ToolCallResult> + Send + 'static,
Register an async MCP tool handler.
§Errors
Returns McpToolError when definition is invalid or a tool with the
same name is already registered.
Sourcepub fn add_typed_tool_async<Input, Call, Fut>(
&mut self,
definition: McpTypedTool<Input>,
call: Call,
) -> Result<(), McpToolError>where
Input: McpToolInput,
Call: Fn(Input) -> Fut + Send + Sync + 'static,
Fut: Future<Output = ToolCallResult> + Send + 'static,
pub fn add_typed_tool_async<Input, Call, Fut>(
&mut self,
definition: McpTypedTool<Input>,
call: Call,
) -> Result<(), McpToolError>where
Input: McpToolInput,
Call: Fn(Input) -> Fut + Send + Sync + 'static,
Fut: Future<Output = ToolCallResult> + Send + 'static,
Register an async typed MCP tool handler.
§Errors
Returns McpToolError when definition is invalid or a tool with the
same name is already registered.
Sourcepub fn list_tools(&self) -> Vec<ToolDefinition>
pub fn list_tools(&self) -> Vec<ToolDefinition>
Return registered MCP tool definitions.
Sourcepub fn contains_tool(&self, name: &str) -> bool
pub fn contains_tool(&self, name: &str) -> bool
Whether a tool name is already registered.
Sourcepub fn tool_count(&self) -> usize
pub fn tool_count(&self) -> usize
Number of registered tools.
Sourcepub fn add_resource<Read>(
&mut self,
definition: ResourceDefinition,
read: Read,
) -> Result<(), McpToolError>
pub fn add_resource<Read>( &mut self, definition: ResourceDefinition, read: Read, ) -> Result<(), McpToolError>
Register a static MCP resource reader.
§Errors
Returns McpToolError when definition is invalid or a resource with
the same URI is already registered.
Sourcepub fn add_resource_async<Read, Fut>(
&mut self,
definition: ResourceDefinition,
read: Read,
) -> Result<(), McpToolError>
pub fn add_resource_async<Read, Fut>( &mut self, definition: ResourceDefinition, read: Read, ) -> Result<(), McpToolError>
Register an async MCP resource reader.
§Errors
Returns McpToolError when definition is invalid or a resource with
the same URI is already registered.
Sourcepub fn add_resource_template(
&mut self,
definition: ResourceTemplateDefinition,
) -> Result<(), McpToolError>
pub fn add_resource_template( &mut self, definition: ResourceTemplateDefinition, ) -> Result<(), McpToolError>
Register an MCP resource template advertised by resources/templates/list.
§Errors
Returns McpToolError when definition is invalid.
Sourcepub fn list_resources(&self) -> Vec<ResourceDefinition>
pub fn list_resources(&self) -> Vec<ResourceDefinition>
Return registered MCP resource definitions.
Sourcepub fn list_resource_templates(&self) -> Vec<ResourceTemplateDefinition>
pub fn list_resource_templates(&self) -> Vec<ResourceTemplateDefinition>
Return registered MCP resource template definitions.
Sourcepub fn contains_resource(&self, uri: &str) -> bool
pub fn contains_resource(&self, uri: &str) -> bool
Whether a resource URI is already registered.
Sourcepub fn resource_count(&self) -> usize
pub fn resource_count(&self) -> usize
Number of registered concrete resources.
Sourcepub fn add_prompt<Get>(
&mut self,
definition: PromptDefinition,
get: Get,
) -> Result<(), McpToolError>
pub fn add_prompt<Get>( &mut self, definition: PromptDefinition, get: Get, ) -> Result<(), McpToolError>
Register a static MCP prompt.
§Errors
Returns McpToolError when definition is invalid or a prompt with
the same name is already registered.
Sourcepub fn add_prompt_async<Get, Fut>(
&mut self,
definition: PromptDefinition,
get: Get,
) -> Result<(), McpToolError>where
Get: Fn(Option<JsonObject>) -> Fut + Send + Sync + 'static,
Fut: Future<Output = Result<GetPromptResult, ErrorData>> + Send + 'static,
pub fn add_prompt_async<Get, Fut>(
&mut self,
definition: PromptDefinition,
get: Get,
) -> Result<(), McpToolError>where
Get: Fn(Option<JsonObject>) -> Fut + Send + Sync + 'static,
Fut: Future<Output = Result<GetPromptResult, ErrorData>> + Send + 'static,
Register an async MCP prompt.
§Errors
Returns McpToolError when definition is invalid or a prompt with
the same name is already registered.
Sourcepub fn list_prompts(&self) -> Vec<PromptDefinition>
pub fn list_prompts(&self) -> Vec<PromptDefinition>
Return registered MCP prompt definitions.
Sourcepub fn contains_prompt(&self, name: &str) -> bool
pub fn contains_prompt(&self, name: &str) -> bool
Whether a prompt name is already registered.
Sourcepub fn prompt_count(&self) -> usize
pub fn prompt_count(&self) -> usize
Number of registered prompts.
Sourcepub fn call_tool(&self, name: &str, arguments: Option<Value>) -> ToolCallResult
pub fn call_tool(&self, name: &str, arguments: Option<Value>) -> ToolCallResult
Calls a registered tool and converts validation or handler failures into a protocol-level tool result.
Sourcepub async fn call_tool_async(
&self,
name: &str,
arguments: Option<Value>,
) -> ToolCallResult
pub async fn call_tool_async( &self, name: &str, arguments: Option<Value>, ) -> ToolCallResult
Asynchronously calls a registered tool and converts validation or handler failures into a protocol-level tool result.
Sourcepub async fn serve_stdio(self) -> ServeStdioResult
pub async fn serve_stdio(self) -> ServeStdioResult
Serve this server over stdin/stdout using the MCP stdio transport.
§Errors
Returns an error when stdio serving fails or the service task fails.
Sourcepub fn serve_stdio_blocking(self) -> ServeStdioResult
pub fn serve_stdio_blocking(self) -> ServeStdioResult
Serve this server over stdin/stdout on a new Tokio runtime.
§Errors
Returns an error when the Tokio runtime cannot be created, stdio serving fails, or the service task fails.
Trait Implementations§
Source§impl ServerHandler for McpServer
impl ServerHandler for McpServer
fn get_info(&self) -> ServerInfo
fn list_tools( &self, _request: Option<PaginatedRequestParams>, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<ListToolsResult, ErrorData>> + MaybeSendFuture + '_
Source§fn call_tool(
&self,
request: CallToolRequestParams,
_context: RequestContext<RoleServer>,
) -> impl Future<Output = Result<CallToolResponse, ErrorData>> + MaybeSendFuture + '_
fn call_tool( &self, request: CallToolRequestParams, _context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<CallToolResponse, ErrorData>> + MaybeSendFuture + '_
tools/call request from a client. Read morefn list_resources( &self, _request: Option<PaginatedRequestParams>, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<ListResourcesResult, ErrorData>> + MaybeSendFuture + '_
fn list_resource_templates( &self, _request: Option<PaginatedRequestParams>, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<ListResourceTemplatesResult, ErrorData>> + MaybeSendFuture + '_
fn read_resource( &self, request: ReadResourceRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<ReadResourceResponse, ErrorData>> + MaybeSendFuture + '_
fn list_prompts( &self, _request: Option<PaginatedRequestParams>, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<ListPromptsResult, ErrorData>> + MaybeSendFuture + '_
fn get_prompt( &self, request: GetPromptRequestParams, _context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<GetPromptResponse, ErrorData>> + MaybeSendFuture + '_
fn ping( &self, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), ErrorData>> + MaybeSendFuture
fn initialize( &self, request: InitializeRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<InitializeResult, ErrorData>> + MaybeSendFuture
Source§fn negotiate_initialize(
&self,
request: &InitializeRequestParams,
) -> Result<InitializeResult, ErrorData>
fn negotiate_initialize( &self, request: &InitializeRequestParams, ) -> Result<InitializeResult, ErrorData>
initialize response for request, negotiating the
protocol version against Self::supported_protocol_versions. Read moreSource§fn supported_protocol_versions(&self) -> Cow<'static, [ProtocolVersion]>
fn supported_protocol_versions(&self) -> Cow<'static, [ProtocolVersion]>
Source§fn discover(
&self,
context: RequestContext<RoleServer>,
) -> impl Future<Output = Result<DiscoverResult, ErrorData>> + MaybeSendFuture
fn discover( &self, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<DiscoverResult, ErrorData>> + MaybeSendFuture
fn complete( &self, request: CompleteRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<CompleteResult, ErrorData>> + MaybeSendFuture
fn set_level( &self, request: SetLevelRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), ErrorData>> + MaybeSendFuture
Source§fn accepted_subscription_filter(
&self,
requested: &SubscriptionFilter,
) -> Option<SubscriptionFilter>
fn accepted_subscription_filter( &self, requested: &SubscriptionFilter, ) -> Option<SubscriptionFilter>
Source§fn listen(
&self,
context: SubscriptionContext,
) -> impl Future<Output = Result<(), ErrorData>> + MaybeSendFuture
fn listen( &self, context: SubscriptionContext, ) -> impl Future<Output = Result<(), ErrorData>> + MaybeSendFuture
Source§fn subscribe(
&self,
request: SubscribeRequestParams,
context: RequestContext<RoleServer>,
) -> impl Future<Output = Result<(), ErrorData>> + MaybeSendFuture
fn subscribe( &self, request: SubscribeRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), ErrorData>> + MaybeSendFuture
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<(), ErrorData>> + MaybeSendFuture
fn unsubscribe( &self, request: UnsubscribeRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), ErrorData>> + MaybeSendFuture
resources/unsubscribe is legacy-only; subscriptions/listen is cancelled through its request lifecycle
fn on_custom_request( &self, request: CustomRequest, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<CustomResult, ErrorData>> + 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
Source§fn get_task(
&self,
request: GetTaskParams,
context: RequestContext<RoleServer>,
) -> impl Future<Output = Result<GetTaskResult, ErrorData>> + MaybeSendFuture
fn get_task( &self, request: GetTaskParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<GetTaskResult, ErrorData>> + MaybeSendFuture
tasks/get: return the current DetailedTask state.Source§fn update_task(
&self,
request: UpdateTaskParams,
context: RequestContext<RoleServer>,
) -> impl Future<Output = Result<(), ErrorData>> + MaybeSendFuture
fn update_task( &self, request: UpdateTaskParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), ErrorData>> + MaybeSendFuture
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<(), ErrorData>> + MaybeSendFuture
fn cancel_task( &self, request: CancelTaskParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), ErrorData>> + MaybeSendFuture
tasks/cancel: cooperative cancellation. Returns an empty
acknowledgement; the task’s observable status may lag.Auto Trait Implementations§
impl !RefUnwindSafe for McpServer
impl !UnwindSafe for McpServer
impl Freeze for McpServer
impl Send for McpServer
impl Sync for McpServer
impl Unpin for McpServer
impl UnsafeUnpin for McpServer
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<R, S> DynService<R> for Swhere
R: ServiceRole,
S: Service<R>,
impl<R, S> DynService<R> for Swhere
R: ServiceRole,
S: Service<R>,
fn handle_request( &self, request: <R as ServiceRole>::PeerReq, context: RequestContext<R>, ) -> Pin<Box<dyn Future<Output = Result<<R as ServiceRole>::Resp, ErrorData>> + Send + '_>>
fn handle_notification( &self, notification: <R as ServiceRole>::PeerNot, context: NotificationContext<R>, ) -> Pin<Box<dyn Future<Output = Result<(), ErrorData>> + Send + '_>>
fn get_info(&self) -> <R as ServiceRole>::Info
Source§fn supported_protocol_versions(&self) -> Cow<'static, [ProtocolVersion]>
fn supported_protocol_versions(&self) -> Cow<'static, [ProtocolVersion]>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<H> Service<RoleServer> for Hwhere
H: ServerHandler,
impl<H> Service<RoleServer> for Hwhere
H: ServerHandler,
async fn handle_request( &self, request: <RoleServer as ServiceRole>::PeerReq, context: RequestContext<RoleServer>, ) -> Result<<RoleServer as ServiceRole>::Resp, ErrorData>
async fn handle_notification( &self, notification: <RoleServer as ServiceRole>::PeerNot, context: NotificationContext<RoleServer>, ) -> Result<(), ErrorData>
fn get_info(&self) -> <RoleServer as ServiceRole>::Info
Source§fn supported_protocol_versions(&self) -> Cow<'static, [ProtocolVersion]>
fn supported_protocol_versions(&self) -> Cow<'static, [ProtocolVersion]>
initialize
negotiation may agree to. Read more