Skip to main content

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//!
48//! # Context
49//!
50//! Handlers receive a [`Context`] that provides:
51//!
52//! - Request metadata (ID, progress token)
53//! - Client and server capabilities
54//! - Cancellation checking
55//! - Progress reporting
56//! - Notification sending
57
58#![deny(missing_docs)]
59
60pub mod adapter_peer;
61pub mod builder;
62pub mod capability;
63pub mod context;
64pub mod dispatch;
65pub mod handler;
66pub mod health;
67pub mod metrics;
68pub mod router;
69pub mod server;
70pub mod state;
71#[cfg(feature = "tokio")]
72pub mod streams;
73#[cfg(feature = "schema-validation")]
74pub mod validation;
75
76// Re-export commonly used types
77pub use builder::{FullServer, MinimalServer, NotRegistered, Registered, Server, ServerBuilder};
78pub use context::{CancellationToken, CancelledFuture, Context, ContextData, NoOpPeer, Peer};
79pub use handler::{
80    CompletionHandler, LogLevel, PromptHandler, ResourceHandler, ServerHandler, TaskHandler,
81    ToolHandler,
82};
83pub use health::{
84    ComponentHealth, HealthChecker, HealthReport, HealthStatus, LivenessResponse, ReadinessResponse,
85};
86pub use metrics::{MethodStats, MetricsSnapshot, ServerMetrics};
87pub use router::{
88    AugmentedTaskOutcome, begin_augmented_task, call_tool_json, dispatch_notification_hooks,
89    route_completion, route_logging, route_prompts, route_resources, route_tools,
90    run_augmented_tool, tool_task_support,
91};
92pub use server::{
93    RequestRouter, RuntimeConfig, ServerNotifier, ServerRuntime, ServerState, TransportPeer,
94};
95#[cfg(feature = "schema-validation")]
96pub use validation::{ValidatingToolHandler, ValidationMode, validate_json};
97
98/// Prelude module for convenient imports.
99pub mod prelude {
100    pub use crate::builder::{
101        FullServer, MinimalServer, NotRegistered, Registered, Server, ServerBuilder,
102    };
103    pub use crate::context::{
104        CancellationToken, CancelledFuture, Context, ContextData, NoOpPeer, Peer,
105    };
106    pub use crate::handler::{
107        CompletionHandler, LogLevel, PromptHandler, ResourceHandler, ServerHandler, TaskHandler,
108        ToolHandler,
109    };
110    pub use crate::metrics::{MethodStats, MetricsSnapshot, ServerMetrics};
111}