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, GetPromptRequest, GetPromptResult, InitializeRequest, InitializeResult,
70        ListPromptsResult, ListResourcesResult, ListToolsResult, ReadResourceRequest,
71        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::{IntoToolResult, ToolHandler},
86    session::Session,
87};
88
89#[cfg(all(feature = "server", feature = "auth"))]
90pub use server::{Auth, AuthenticatedMarker};
91
92#[cfg(feature = "auth")]
93pub use auth::{
94    AuthProvider, AuthenticatedIdentity, CompositeAuthProvider, Credentials, DynAuthProvider,
95    IntoDynProvider,
96};
97
98#[cfg(feature = "auth-bearer")]
99pub use auth::BearerTokenProvider;
100
101#[cfg(feature = "auth-apikey")]
102pub use auth::ApiKeyProvider;
103
104#[cfg(feature = "auth-basic")]
105pub use auth::BasicAuthProvider;
106
107#[cfg(feature = "auth")]
108pub use auth::CustomHeaderProvider;
109
110#[cfg(feature = "stdio")]
111pub use transport::stdio::{ServeStdioExt, StdioTransport};
112
113#[cfg(feature = "sse")]
114pub use transport::sse::{ServeSseExt, SseTransport};
115
116// Re-export proc macros
117pub use mcp_kit_macros::{prompt, resource, tool};
118
119// Re-export commonly-needed external crates
120pub use schemars::{self, JsonSchema};
121pub use serde::{Deserialize, Serialize};
122pub use serde_json;
123
124#[cfg(feature = "stdio")]
125pub use tokio;
126
127// ─── Prelude ─────────────────────────────────────────────────────────────────
128
129/// Everything you need to build an MCP server — import with `use mcp_kit::prelude::*`.
130pub mod prelude {
131    pub use crate::{serde_json, Deserialize, JsonSchema, Serialize};
132    pub use crate::{
133        CallToolResult, Content, GetPromptResult, ImageContent, McpError, McpResult, Prompt,
134        PromptArgument, PromptMessage, PromptMessageRole, ReadResourceResult, Resource,
135        ResourceContents, ResourceTemplate, TextContent, Tool, ToolAnnotations,
136    };
137    pub use mcp_kit_macros::tool;
138
139    #[cfg(feature = "server")]
140    pub use crate::{
141        Json, McpServer, McpServerBuilder, PromptDef, ResourceDef, Session, State, ToolDef,
142    };
143
144    #[cfg(all(feature = "server", feature = "auth"))]
145    pub use crate::Auth;
146
147    #[cfg(feature = "auth")]
148    pub use crate::{AuthProvider, AuthenticatedIdentity, CompositeAuthProvider, Credentials};
149
150    #[cfg(feature = "auth-bearer")]
151    pub use crate::BearerTokenProvider;
152
153    #[cfg(feature = "auth-apikey")]
154    pub use crate::ApiKeyProvider;
155
156    #[cfg(feature = "auth-basic")]
157    pub use crate::BasicAuthProvider;
158
159    #[cfg(feature = "auth")]
160    pub use crate::CustomHeaderProvider;
161
162    #[cfg(feature = "stdio")]
163    pub use crate::ServeStdioExt;
164
165    #[cfg(feature = "sse")]
166    pub use crate::ServeSseExt;
167}
168
169// ─── Private re-exports for proc-macro use ────────────────────────────────────
170
171#[doc(hidden)]
172pub mod __private {
173    pub use crate::error::{McpError, McpResult};
174    pub use crate::types::{
175        messages::{CallToolRequest, GetPromptRequest, ReadResourceRequest},
176        prompt::{GetPromptResult, Prompt, PromptArgument},
177        resource::{ReadResourceResult, Resource, ResourceTemplate},
178        tool::CallToolResult,
179    };
180    pub use schemars;
181    pub use serde_json;
182
183    #[cfg(feature = "server")]
184    pub use crate::server::handler::{BoxFuture, IntoToolResult};
185
186    #[cfg(feature = "server")]
187    pub use crate::server::builder::{PromptDef, ResourceDef};
188
189    #[cfg(all(feature = "server", feature = "auth"))]
190    pub use crate::server::extract::Auth;
191}