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// ─── Server module (requires `server` feature) ───────────────────────────────
40
41#[cfg(feature = "server")]
42pub mod server;
43
44// ─── Transport module (requires `stdio` or `sse` feature) ────────────────────
45
46#[cfg(any(feature = "stdio", feature = "sse"))]
47pub mod transport;
48
49// ─── Top-level re-exports ─────────────────────────────────────────────────────
50
51pub use error::{ErrorCode, ErrorData, McpError, McpResult};
52
53pub use protocol::{
54    JsonRpcError, JsonRpcMessage, JsonRpcNotification, JsonRpcRequest, JsonRpcResponse,
55    ProgressToken, RequestId, JSONRPC_VERSION, MCP_PROTOCOL_VERSION,
56};
57
58pub use types::{
59    content::{
60        AudioContent, BlobResourceContents, Content, EmbeddedResource, ImageContent,
61        ResourceContents, TextContent, TextResourceContents,
62    },
63    messages::{
64        CallToolRequest, GetPromptRequest, GetPromptResult, InitializeRequest, InitializeResult,
65        ListPromptsResult, ListResourcesResult, ListToolsResult, ReadResourceRequest,
66        ReadResourceResult,
67    },
68    prompt::{Prompt, PromptArgument, PromptMessage, PromptMessageRole},
69    resource::{Resource, ResourceTemplate},
70    sampling::{CreateMessageRequest, CreateMessageResult, ModelPreferences, SamplingMessage},
71    tool::{CallToolResult, Tool, ToolAnnotations},
72    ClientCapabilities, ClientInfo, Implementation, LoggingLevel, ServerCapabilities, ServerInfo,
73};
74
75#[cfg(feature = "server")]
76pub use server::{
77    builder::{McpServerBuilder, PromptDef, ResourceDef, ToolDef},
78    core::McpServer,
79    extract::{Extension, Json, State},
80    handler::{IntoToolResult, ToolHandler},
81    session::Session,
82};
83
84#[cfg(feature = "stdio")]
85pub use transport::stdio::{ServeStdioExt, StdioTransport};
86
87#[cfg(feature = "sse")]
88pub use transport::sse::{ServeSseExt, SseTransport};
89
90// Re-export proc macros
91pub use mcp_kit_macros::{prompt, resource, tool};
92
93// Re-export commonly-needed external crates
94pub use schemars::{self, JsonSchema};
95pub use serde::{Deserialize, Serialize};
96pub use serde_json;
97
98#[cfg(feature = "stdio")]
99pub use tokio;
100
101// ─── Prelude ─────────────────────────────────────────────────────────────────
102
103/// Everything you need to build an MCP server — import with `use mcp_kit::prelude::*`.
104pub mod prelude {
105    pub use crate::{serde_json, Deserialize, JsonSchema, Serialize};
106    pub use crate::{
107        CallToolResult, Content, GetPromptResult, ImageContent, McpError, McpResult, Prompt,
108        PromptArgument, PromptMessage, PromptMessageRole, ReadResourceResult, Resource,
109        ResourceContents, ResourceTemplate, TextContent, Tool, ToolAnnotations,
110    };
111    pub use mcp_kit_macros::tool;
112
113    #[cfg(feature = "server")]
114    pub use crate::{
115        Json, McpServer, McpServerBuilder, PromptDef, ResourceDef, Session, State, ToolDef,
116    };
117
118    #[cfg(feature = "stdio")]
119    pub use crate::ServeStdioExt;
120
121    #[cfg(feature = "sse")]
122    pub use crate::ServeSseExt;
123}
124
125// ─── Private re-exports for proc-macro use ────────────────────────────────────
126
127#[doc(hidden)]
128pub mod __private {
129    pub use crate::error::{McpError, McpResult};
130    pub use crate::types::{
131        messages::{CallToolRequest, GetPromptRequest, ReadResourceRequest},
132        prompt::{GetPromptResult, Prompt, PromptArgument},
133        resource::{ReadResourceResult, Resource, ResourceTemplate},
134        tool::CallToolResult,
135    };
136    pub use schemars;
137    pub use serde_json;
138
139    #[cfg(feature = "server")]
140    pub use crate::server::handler::{BoxFuture, IntoToolResult};
141
142    #[cfg(feature = "server")]
143    pub use crate::server::builder::{PromptDef, ResourceDef};
144}