mcpkit_server/
lib.rs

1//! Server implementation for the MCP SDK.
2//!
3//! This crate provides the server-side implementation for the Model Context
4//! Protocol. It includes composable handler traits, a fluent builder API,
5//! and request routing.
6//!
7//! # Overview
8//!
9//! Building an MCP server involves:
10//!
11//! 1. Implementing the [`ServerHandler`] trait (required)
12//! 2. Implementing optional capability traits ([`ToolHandler`], [`ResourceHandler`], etc.)
13//! 3. Using [`ServerBuilder`] to create a configured server
14//! 4. Running the server with a transport
15//!
16//! # Example
17//!
18//! ```rust
19//! use mcpkit_server::{ServerBuilder, ServerHandler};
20//! use mcpkit_core::capability::{ServerInfo, ServerCapabilities};
21//!
22//! struct MyServer;
23//!
24//! impl ServerHandler for MyServer {
25//!     fn server_info(&self) -> ServerInfo {
26//!         ServerInfo::new("my-server", "1.0.0")
27//!     }
28//!
29//!     fn capabilities(&self) -> ServerCapabilities {
30//!         ServerCapabilities::new().with_tools()
31//!     }
32//! }
33//!
34//! let server = ServerBuilder::new(MyServer).build();
35//! assert!(server.capabilities().has_tools());
36//! ```
37//!
38//! # Handler Traits
39//!
40//! The server uses composable handler traits:
41//!
42//! - [`ServerHandler`]: Core trait required for all servers
43//! - [`ToolHandler`]: Handle tool discovery and execution
44//! - [`ResourceHandler`]: Handle resource discovery and reading
45//! - [`PromptHandler`]: Handle prompt discovery and rendering
46//! - [`TaskHandler`]: Handle long-running task operations
47//! - [`SamplingHandler`]: Handle server-initiated LLM requests
48//! - [`ElicitationHandler`]: Handle structured user input requests
49//!
50//! # Context
51//!
52//! Handlers receive a [`Context`] that provides:
53//!
54//! - Request metadata (ID, progress token)
55//! - Client and server capabilities
56//! - Cancellation checking
57//! - Progress reporting
58//! - Notification sending
59
60#![deny(missing_docs)]
61
62pub mod builder;
63pub mod capability;
64pub mod context;
65pub mod handler;
66pub mod metrics;
67pub mod router;
68pub mod server;
69pub mod state;
70
71// Re-export commonly used types
72pub use builder::{FullServer, MinimalServer, NotRegistered, Registered, Server, ServerBuilder};
73pub use context::{CancellationToken, CancelledFuture, Context, ContextData, NoOpPeer, Peer};
74pub use handler::{
75    CompletionHandler, ElicitationHandler, LogLevel, LoggingHandler, PromptHandler,
76    ResourceHandler, SamplingHandler, ServerHandler, TaskHandler, ToolHandler,
77};
78pub use metrics::{MethodStats, MetricsSnapshot, ServerMetrics};
79pub use router::{route_prompts, route_resources, route_tools};
80pub use server::{RequestRouter, RuntimeConfig, ServerRuntime, ServerState, TransportPeer};
81
82/// Prelude module for convenient imports.
83pub mod prelude {
84    pub use crate::builder::{
85        FullServer, MinimalServer, NotRegistered, Registered, Server, ServerBuilder,
86    };
87    pub use crate::context::{
88        CancellationToken, CancelledFuture, Context, ContextData, NoOpPeer, Peer,
89    };
90    pub use crate::handler::{
91        CompletionHandler, ElicitationHandler, LogLevel, LoggingHandler, PromptHandler,
92        ResourceHandler, SamplingHandler, ServerHandler, TaskHandler, ToolHandler,
93    };
94    pub use crate::metrics::{MethodStats, MetricsSnapshot, ServerMetrics};
95}