Expand description
Fluent server builder for MCP servers.
The builder uses the typestate pattern to track registered capabilities at the type level, ensuring compile-time verification of server configuration.
§Type Parameters
H: The base server handlerTools: Tool handler state (()= not registered,TH: ToolHandler= registered)Resources: Resource handler statePrompts: Prompt handler stateTasks: Task handler state
§Example
use mcpkit_server::{ServerBuilder, ServerHandler};
use mcpkit_core::capability::{ServerInfo, ServerCapabilities};
struct MyHandler;
impl ServerHandler for MyHandler {
fn server_info(&self) -> ServerInfo {
ServerInfo::new("my-server", "1.0.0")
}
}
let server = ServerBuilder::new(MyHandler).build();
assert_eq!(server.server_info().name, "my-server");§Type-Level Capability Tracking
The builder tracks which handlers have been registered at the type level. This means you can’t accidentally call a method that requires a handler that hasn’t been registered - the compiler will catch it.
use mcpkit_server::{ServerBuilder, ServerHandler, ToolHandler, Context};
use mcpkit_core::capability::{ServerInfo, ServerCapabilities};
use mcpkit_core::types::{Tool, ToolOutput};
use mcpkit_core::error::McpError;
use serde_json::Value;
struct MyHandler;
impl ServerHandler for MyHandler {
fn server_info(&self) -> ServerInfo {
ServerInfo::new("test", "1.0.0")
}
}
struct MyToolHandler;
impl ToolHandler for MyToolHandler {
async fn list_tools(&self, _ctx: &Context<'_>) -> Result<Vec<Tool>, McpError> {
Ok(vec![])
}
async fn call_tool(&self, _name: &str, _args: Value, _ctx: &Context<'_>) -> Result<ToolOutput, McpError> {
Ok(ToolOutput::text("done"))
}
}
// Tools are registered - this compiles
let server = ServerBuilder::new(MyHandler)
.with_tools(MyToolHandler)
.build();
assert!(server.capabilities().has_tools());Structs§
- NotRegistered
- Marker type indicating no handler is registered for a capability.
- Registered
- Marker type indicating a handler is registered for a capability.
- Server
- A configured MCP server ready to serve requests.
- Server
Builder - Builder for constructing MCP servers with specific capabilities.
Type Aliases§
- Full
Server - Type alias for a fully-configured server with all handlers.
- Minimal
Server - Type alias for a minimal server with no optional handlers.