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 health;
67pub mod metrics;
68pub mod router;
69pub mod server;
70pub mod state;
71
72// Re-export commonly used types
73pub use builder::{FullServer, MinimalServer, NotRegistered, Registered, Server, ServerBuilder};
74pub use context::{CancellationToken, CancelledFuture, Context, ContextData, NoOpPeer, Peer};
75pub use handler::{
76 CompletionHandler, ElicitationHandler, LogLevel, LoggingHandler, PromptHandler,
77 ResourceHandler, SamplingHandler, ServerHandler, TaskHandler, ToolHandler,
78};
79pub use health::{
80 ComponentHealth, HealthChecker, HealthReport, HealthStatus, LivenessResponse, ReadinessResponse,
81};
82pub use metrics::{MethodStats, MetricsSnapshot, ServerMetrics};
83pub use router::{route_prompts, route_resources, route_tools};
84pub use server::{RequestRouter, RuntimeConfig, ServerRuntime, ServerState, TransportPeer};
85
86/// Prelude module for convenient imports.
87pub mod prelude {
88 pub use crate::builder::{
89 FullServer, MinimalServer, NotRegistered, Registered, Server, ServerBuilder,
90 };
91 pub use crate::context::{
92 CancellationToken, CancelledFuture, Context, ContextData, NoOpPeer, Peer,
93 };
94 pub use crate::handler::{
95 CompletionHandler, ElicitationHandler, LogLevel, LoggingHandler, PromptHandler,
96 ResourceHandler, SamplingHandler, ServerHandler, TaskHandler, ToolHandler,
97 };
98 pub use crate::metrics::{MethodStats, MetricsSnapshot, ServerMetrics};
99}