Skip to main content

Module builder

Module builder 

Source
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 handler
  • Tools: Tool handler state (() = not registered, TH: ToolHandler = registered)
  • Resources: Resource handler state
  • Prompts: Prompt handler state
  • Tasks: 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.
ServerBuilder
Builder for constructing MCP servers with specific capabilities.

Type Aliases§

FullServer
Type alias for a fully-configured server with all handlers.
MinimalServer
Type alias for a minimal server with no optional handlers.