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.