Skip to main content

mcp_kit/
lib.rs

1//! # mcp — Rust library for building MCP servers
2//!
3//! A high-quality, type-safe, async-first library for the
4//! [Model Context Protocol](https://modelcontextprotocol.io/).
5//!
6//! ## Quick start
7//!
8//! ```rust,no_run
9//! use mcp_kit::prelude::*;
10//!
11//! #[tokio::main]
12//! async fn main() -> anyhow::Result<()> {
13//!     McpServer::builder()
14//!         .name("my-server")
15//!         .version("1.0.0")
16//!         .tool(
17//!             Tool::new("greet", "Say hello", serde_json::json!({
18//!                 "type": "object",
19//!                 "properties": { "name": { "type": "string" } },
20//!                 "required": ["name"]
21//!             })),
22//!             |args: serde_json::Value| async move {
23//!                 CallToolResult::text(format!("Hello, {}!", args["name"]))
24//!             },
25//!         )
26//!         .build()
27//!         .serve_stdio()
28//!         .await?;
29//!     Ok(())
30//! }
31//! ```
32
33// ─── Core modules (always compiled, WASM-safe) ────────────────────────────────
34
35pub mod error;
36pub mod protocol;
37pub mod types;
38
39// ─── Auth module (requires `auth` feature) ───────────────────────────────────
40
41#[cfg(feature = "auth")]
42pub mod auth;
43
44// ─── Plugin module (requires `plugin` feature) ───────────────────────────────
45
46#[cfg(feature = "plugin")]
47pub mod plugin;
48
49// ─── Server module (requires `server` feature) ───────────────────────────────
50
51#[cfg(feature = "server")]
52pub mod server;
53
54// ─── Transport module (requires `stdio`, `sse`, or `websocket` feature) ──────
55
56#[cfg(any(feature = "stdio", feature = "sse", feature = "websocket"))]
57pub mod transport;
58
59// ─── Top-level re-exports ─────────────────────────────────────────────────────
60
61pub use error::{ErrorCode, ErrorData, McpError, McpResult};
62
63pub use protocol::{
64    JsonRpcError, JsonRpcMessage, JsonRpcNotification, JsonRpcRequest, JsonRpcResponse,
65    ProgressToken, RequestId, JSONRPC_VERSION, MCP_PROTOCOL_VERSION,
66};
67
68pub use types::{
69    content::{
70        AudioContent, BlobResourceContents, Content, EmbeddedResource, ImageContent,
71        ResourceContents, TextContent, TextResourceContents,
72    },
73    elicitation::{ElicitAction, ElicitRequest, ElicitResult, ElicitSchema},
74    messages::{
75        CallToolRequest, CompleteRequest, CompleteResult, CompletionArgument, CompletionReference,
76        GetPromptRequest, GetPromptResult, InitializeRequest, InitializeResult, ListPromptsResult,
77        ListResourcesResult, ListToolsResult, ReadResourceRequest, ReadResourceResult,
78    },
79    prompt::{Prompt, PromptArgument, PromptMessage, PromptMessageRole},
80    resource::{Resource, ResourceTemplate},
81    sampling::{CreateMessageRequest, CreateMessageResult, ModelPreferences, SamplingMessage},
82    tool::{CallToolResult, Tool, ToolAnnotations},
83    ClientCapabilities, ClientInfo, Implementation, LoggingLevel, ServerCapabilities, ServerInfo,
84};
85
86#[cfg(feature = "server")]
87pub use server::{
88    builder::{McpServerBuilder, PromptDef, ResourceDef, ToolDef},
89    core::McpServer,
90    elicitation::{
91        ChannelElicitationClient, ElicitationClient, ElicitationClientExt, ElicitationError,
92        ElicitationRequestBuilder,
93    },
94    extract::{Extension, Json, State},
95    handler::{CompletionHandler, IntoToolResult, ToolHandler},
96    notification::{NotificationReceiver, NotificationSender, SendError, SharedNotificationSender},
97    progress::{ProgressTokenExt, ProgressTracker},
98    session::Session,
99};
100
101#[cfg(all(feature = "server", feature = "auth"))]
102pub use server::{Auth, AuthenticatedMarker};
103
104#[cfg(feature = "auth")]
105pub use auth::{
106    AuthProvider, AuthenticatedIdentity, CompositeAuthProvider, Credentials, DynAuthProvider,
107    IntoDynProvider,
108};
109
110#[cfg(feature = "auth-bearer")]
111pub use auth::BearerTokenProvider;
112
113#[cfg(feature = "auth-apikey")]
114pub use auth::ApiKeyProvider;
115
116#[cfg(feature = "auth-basic")]
117pub use auth::BasicAuthProvider;
118
119#[cfg(feature = "auth")]
120pub use auth::CustomHeaderProvider;
121
122#[cfg(feature = "stdio")]
123pub use transport::stdio::{ServeStdioExt, StdioTransport};
124
125#[cfg(feature = "sse")]
126pub use transport::sse::{ServeSseExt, SseTransport};
127
128#[cfg(feature = "sse")]
129pub use transport::streamable::{ServeStreamableExt, StreamableTransport};
130
131#[cfg(feature = "websocket")]
132pub use transport::websocket::{ServeWebSocketExt, WebSocketTransport};
133
134// Re-export proc macros
135pub use mcp_kit_macros::{prompt, resource, tool};
136
137// Re-export commonly-needed external crates
138pub use schemars::{self, JsonSchema};
139pub use serde::{Deserialize, Serialize};
140pub use serde_json;
141
142#[cfg(feature = "stdio")]
143pub use tokio;
144
145// ─── Prelude ─────────────────────────────────────────────────────────────────
146
147/// Everything you need to build an MCP server — import with `use mcp_kit::prelude::*`.
148pub mod prelude {
149    pub use crate::{serde_json, Deserialize, JsonSchema, Serialize};
150    pub use crate::{
151        CallToolResult, CompleteRequest, CompleteResult, Content, GetPromptResult, ImageContent,
152        McpError, McpResult, Prompt, PromptArgument, PromptMessage, PromptMessageRole,
153        ReadResourceResult, Resource, ResourceContents, ResourceTemplate, TextContent, Tool,
154        ToolAnnotations,
155    };
156    pub use mcp_kit_macros::tool;
157
158    #[cfg(feature = "server")]
159    pub use crate::{
160        Json, McpServer, McpServerBuilder, NotificationSender, ProgressTracker, PromptDef,
161        ResourceDef, Session, SharedNotificationSender, State, ToolDef,
162    };
163
164    #[cfg(all(feature = "server", feature = "auth"))]
165    pub use crate::Auth;
166
167    #[cfg(feature = "auth")]
168    pub use crate::{AuthProvider, AuthenticatedIdentity, CompositeAuthProvider, Credentials};
169
170    #[cfg(feature = "auth-bearer")]
171    pub use crate::BearerTokenProvider;
172
173    #[cfg(feature = "auth-apikey")]
174    pub use crate::ApiKeyProvider;
175
176    #[cfg(feature = "auth-basic")]
177    pub use crate::BasicAuthProvider;
178
179    #[cfg(feature = "auth")]
180    pub use crate::CustomHeaderProvider;
181
182    #[cfg(feature = "stdio")]
183    pub use crate::ServeStdioExt;
184
185    #[cfg(feature = "sse")]
186    pub use crate::ServeSseExt;
187
188    #[cfg(feature = "sse")]
189    pub use crate::ServeStreamableExt;
190
191    #[cfg(feature = "websocket")]
192    pub use crate::ServeWebSocketExt;
193}
194
195// ─── Private re-exports for proc-macro use ────────────────────────────────────
196
197#[doc(hidden)]
198pub mod __private {
199    pub use crate::error::{McpError, McpResult};
200    pub use crate::types::{
201        messages::{CallToolRequest, GetPromptRequest, ReadResourceRequest},
202        prompt::{GetPromptResult, Prompt, PromptArgument},
203        resource::{ReadResourceResult, Resource, ResourceTemplate},
204        tool::CallToolResult,
205    };
206    pub use schemars;
207    pub use serde_json;
208
209    #[cfg(feature = "server")]
210    pub use crate::server::handler::{BoxFuture, IntoToolResult};
211
212    #[cfg(feature = "server")]
213    pub use crate::server::builder::{PromptDef, ResourceDef};
214
215    #[cfg(all(feature = "server", feature = "auth"))]
216    pub use crate::server::extract::Auth;
217}