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// ─── Server module (requires `server` feature) ───────────────────────────────
45
46#[cfg(feature = "server")]
47pub mod server;
48
49// ─── Transport module (requires `stdio` or `sse` feature) ────────────────────
50
51#[cfg(any(feature = "stdio", feature = "sse"))]
52pub mod transport;
53
54// ─── Top-level re-exports ─────────────────────────────────────────────────────
55
56pub use error::{ErrorCode, ErrorData, McpError, McpResult};
57
58pub use protocol::{
59    JsonRpcError, JsonRpcMessage, JsonRpcNotification, JsonRpcRequest, JsonRpcResponse,
60    ProgressToken, RequestId, JSONRPC_VERSION, MCP_PROTOCOL_VERSION,
61};
62
63pub use types::{
64    content::{
65        AudioContent, BlobResourceContents, Content, EmbeddedResource, ImageContent,
66        ResourceContents, TextContent, TextResourceContents,
67    },
68    messages::{
69        CallToolRequest, CompleteRequest, CompleteResult, CompletionArgument, CompletionReference,
70        GetPromptRequest, GetPromptResult, InitializeRequest, InitializeResult, ListPromptsResult,
71        ListResourcesResult, ListToolsResult, ReadResourceRequest, ReadResourceResult,
72    },
73    prompt::{Prompt, PromptArgument, PromptMessage, PromptMessageRole},
74    resource::{Resource, ResourceTemplate},
75    sampling::{CreateMessageRequest, CreateMessageResult, ModelPreferences, SamplingMessage},
76    tool::{CallToolResult, Tool, ToolAnnotations},
77    ClientCapabilities, ClientInfo, Implementation, LoggingLevel, ServerCapabilities, ServerInfo,
78};
79
80#[cfg(feature = "server")]
81pub use server::{
82    builder::{McpServerBuilder, PromptDef, ResourceDef, ToolDef},
83    core::McpServer,
84    extract::{Extension, Json, State},
85    handler::{CompletionHandler, IntoToolResult, ToolHandler},
86    notification::{NotificationReceiver, NotificationSender, SendError, SharedNotificationSender},
87    progress::{ProgressTokenExt, ProgressTracker},
88    session::Session,
89};
90
91#[cfg(all(feature = "server", feature = "auth"))]
92pub use server::{Auth, AuthenticatedMarker};
93
94#[cfg(feature = "auth")]
95pub use auth::{
96    AuthProvider, AuthenticatedIdentity, CompositeAuthProvider, Credentials, DynAuthProvider,
97    IntoDynProvider,
98};
99
100#[cfg(feature = "auth-bearer")]
101pub use auth::BearerTokenProvider;
102
103#[cfg(feature = "auth-apikey")]
104pub use auth::ApiKeyProvider;
105
106#[cfg(feature = "auth-basic")]
107pub use auth::BasicAuthProvider;
108
109#[cfg(feature = "auth")]
110pub use auth::CustomHeaderProvider;
111
112#[cfg(feature = "stdio")]
113pub use transport::stdio::{ServeStdioExt, StdioTransport};
114
115#[cfg(feature = "sse")]
116pub use transport::sse::{ServeSseExt, SseTransport};
117
118// Re-export proc macros
119pub use mcp_kit_macros::{prompt, resource, tool};
120
121// Re-export commonly-needed external crates
122pub use schemars::{self, JsonSchema};
123pub use serde::{Deserialize, Serialize};
124pub use serde_json;
125
126#[cfg(feature = "stdio")]
127pub use tokio;
128
129// ─── Prelude ─────────────────────────────────────────────────────────────────
130
131/// Everything you need to build an MCP server — import with `use mcp_kit::prelude::*`.
132pub mod prelude {
133    pub use crate::{serde_json, Deserialize, JsonSchema, Serialize};
134    pub use crate::{
135        CallToolResult, CompleteRequest, CompleteResult, Content, GetPromptResult, ImageContent,
136        McpError, McpResult, Prompt, PromptArgument, PromptMessage, PromptMessageRole,
137        ReadResourceResult, Resource, ResourceContents, ResourceTemplate, TextContent, Tool,
138        ToolAnnotations,
139    };
140    pub use mcp_kit_macros::tool;
141
142    #[cfg(feature = "server")]
143    pub use crate::{
144        Json, McpServer, McpServerBuilder, NotificationSender, ProgressTracker, PromptDef,
145        ResourceDef, Session, SharedNotificationSender, State, ToolDef,
146    };
147
148    #[cfg(all(feature = "server", feature = "auth"))]
149    pub use crate::Auth;
150
151    #[cfg(feature = "auth")]
152    pub use crate::{AuthProvider, AuthenticatedIdentity, CompositeAuthProvider, Credentials};
153
154    #[cfg(feature = "auth-bearer")]
155    pub use crate::BearerTokenProvider;
156
157    #[cfg(feature = "auth-apikey")]
158    pub use crate::ApiKeyProvider;
159
160    #[cfg(feature = "auth-basic")]
161    pub use crate::BasicAuthProvider;
162
163    #[cfg(feature = "auth")]
164    pub use crate::CustomHeaderProvider;
165
166    #[cfg(feature = "stdio")]
167    pub use crate::ServeStdioExt;
168
169    #[cfg(feature = "sse")]
170    pub use crate::ServeSseExt;
171}
172
173// ─── Private re-exports for proc-macro use ────────────────────────────────────
174
175#[doc(hidden)]
176pub mod __private {
177    pub use crate::error::{McpError, McpResult};
178    pub use crate::types::{
179        messages::{CallToolRequest, GetPromptRequest, ReadResourceRequest},
180        prompt::{GetPromptResult, Prompt, PromptArgument},
181        resource::{ReadResourceResult, Resource, ResourceTemplate},
182        tool::CallToolResult,
183    };
184    pub use schemars;
185    pub use serde_json;
186
187    #[cfg(feature = "server")]
188    pub use crate::server::handler::{BoxFuture, IntoToolResult};
189
190    #[cfg(feature = "server")]
191    pub use crate::server::builder::{PromptDef, ResourceDef};
192
193    #[cfg(all(feature = "server", feature = "auth"))]
194    pub use crate::server::extract::Auth;
195}