Skip to main content

mcp_host/
lib.rs

1//! mcp-host: Production-grade MCP server implementation
2//!
3//! This crate provides a comprehensive Model Context Protocol (MCP) server
4//! implementation with sophisticated features like circuit breakers, visibility
5//! predicates, session customization, and more.
6//!
7//! ## Features
8//!
9//! - `stdio` - STDIO transport (default)
10//! - `http` - HTTP transport via rama
11//! - `macros` - Procedural macros (#[mcp_tool], #[mcp_prompt], #[mcp_resource], etc.)
12//! - `full` - All features
13//!
14//! ## Quick Start
15//!
16//! ```rust,ignore
17//! use mcp_host::prelude::*;
18//! use mcp_host::registry::router::McpToolRouter;
19//! use schemars::JsonSchema;
20//! use serde::Deserialize;
21//!
22//! #[derive(Deserialize, JsonSchema)]
23//! struct GreetParams {
24//!     name: String,
25//! }
26//!
27//! struct MyServer;
28//!
29//! impl MyServer {
30//!     #[mcp_tool(name = "greet")]
31//!     async fn greet(&self, _ctx: Ctx<'_>, params: Parameters<GreetParams>) -> ToolResult {
32//!         Ok(ToolOutput::text(format!("Hello, {}!", params.0.name)))
33//!     }
34//!
35//!     fn tool_router() -> McpToolRouter<Self> {
36//!         McpToolRouter::new().with_tool(
37//!             Self::greet_tool_info(),
38//!             Self::greet_handler,
39//!             None,
40//!         )
41//!     }
42//! }
43//!
44//! #[tokio::main]
45//! async fn main() {
46//!     let server = mcp_host::server::builder::server("my-server", "1.0.0")
47//!         .with_tools(true)
48//!         .build();
49//!
50//!     let my_server = std::sync::Arc::new(MyServer);
51//!     MyServer::tool_router().register_all(server.tool_registry(), my_server);
52//!
53//!     server.run(StdioTransport::new()).await.unwrap();
54//! }
55//! ```
56//!
57//! Enable macros with: `mcp-host = { version = "0.1", features = ["macros"] }`
58
59pub mod content;
60pub mod logging;
61#[cfg(feature = "macros")]
62pub mod macros;
63pub mod managers;
64pub mod protocol;
65pub mod registry;
66pub mod server;
67pub mod transport;
68pub mod utils;
69
70// Re-export commonly used types
71pub mod prelude {
72    // Protocol types
73    pub use crate::protocol::capabilities::{ClientCapabilities, ServerCapabilities};
74    pub use crate::protocol::types::{
75        JsonRpcError, JsonRpcRequest, JsonRpcResponse, ToolAnnotations,
76    };
77
78    // Content types and builders
79    pub use crate::content::annotations::Annotations;
80    pub use crate::content::builder::{audio, image, resource, text};
81    pub use crate::content::resource::ResourceContent;
82    pub use crate::content::types::{
83        AudioContent, Content, ImageContent, ResourceLink, TextContent,
84    };
85
86    // Server types
87    pub use crate::server::builder::{ServerBuilder, server};
88    pub use crate::server::core::Server;
89    pub use crate::server::multiplexer::{
90        ClientRequester, CreateMessageParams, CreateMessageResult, JsonRpcClientRequest,
91        ListRootsResult, ModelHint, ModelPreferences, MultiplexerError, RequestMultiplexer, Root,
92        SamplingContent, SamplingMessage,
93    };
94    pub use crate::server::profile::SessionProfile;
95    pub use crate::server::session::Session;
96    pub use crate::server::visibility::{
97        Environment, ExecutionContext, SimpleEnvironment, VisibilityContext,
98    };
99
100    // Prompt message types
101    pub use crate::content::prompt::{PromptContent, PromptMessage, PromptRole};
102
103    // Completion types
104    pub use crate::protocol::types::{
105        CompleteRequest, CompleteResult, CompletionArgument, CompletionInfo, CompletionRef,
106        CompletionValue,
107    };
108
109    // Utility functions
110    pub use crate::utils::{
111        DEFAULT_PAGE_SIZE, PaginatedResult, base64_decode, base64_encode, byte_to_line_col,
112        collect_files, decode_cursor, encode_cursor, is_safe_path, paginate,
113    };
114
115    // Transport traits
116    pub use crate::transport::traits::{
117        IncomingMessage, JsonRpcNotification, Transport, TransportError, TransportFuture,
118    };
119
120    // Registry types
121    pub use crate::registry::prompts::{
122        GetPromptResult, Prompt, PromptArgument, PromptError, PromptFuture, PromptInfo,
123        PromptManager,
124    };
125    pub use crate::registry::resources::{
126        Resource, ResourceError, ResourceInfo, ResourceManager, ResourceReadFuture,
127        ResourceRetryConfig, ResourceTemplate, ResourceTemplateInfo,
128    };
129    pub use crate::registry::tools::{
130        Tool, ToolBreakerConfig, ToolError, ToolFuture, ToolHelpers, ToolInfo, ToolLifecycleState,
131        ToolOutput, ToolPolicy, ToolRegistry,
132    };
133
134    // Middleware
135    pub use crate::server::middleware::{RateLimiter, RateLimiterConfig};
136
137    // Logging
138    pub use crate::logging::{LogLevel, LoggerConfig, McpLogger, send_log_notification};
139
140    // Managers
141    pub use crate::managers::cancellation::{CancellationManager, CancellationToken};
142    pub use crate::managers::completion::{
143        CompletionError, CompletionFuture, CompletionManager, CompletionProvider,
144    };
145    pub use crate::managers::progress::{ProgressToken, ProgressTracker};
146    pub use crate::managers::subscription::SubscriptionManager;
147    pub use crate::managers::task::{TaskError, TaskStore};
148
149    // === Feature-gated exports ===
150
151    // STDIO transport
152    #[cfg(feature = "stdio")]
153    pub use crate::transport::stdio::StdioTransport;
154
155    // HTTP transport
156    #[cfg(feature = "http")]
157    pub use crate::transport::http::{HttpTransport, HttpTransportConfig, HttpTransportError};
158
159    // Routers and helpers (requires macros feature)
160    #[cfg(feature = "macros")]
161    pub use crate::registry::router::{
162        McpPromptRouter, McpResourceRouter, McpResourceTemplateRouter, McpRouter, McpToolRouter,
163        prompt_info, prompt_info_with_args, tool_info, tool_info_with_output,
164    };
165
166    // Macro support types (requires macros feature)
167    #[cfg(feature = "macros")]
168    pub use crate::macros::{
169        Ctx, FromExecutionContext, IntoToolResult, Parameters, PromptResult, ResourceResult,
170        ToolResult, assistant_image_message, assistant_message, blob_resource, prompt_messages,
171        prompt_with_description, schema_for, structured, text_resource, text_resource_with_mime,
172        user_image_message, user_message,
173    };
174
175    // Procedural macros (requires macros feature)
176    #[cfg(feature = "macros")]
177    pub use mcp_host_macros::{
178        mcp_prompt, mcp_resource, mcp_resource_template, mcp_router, mcp_tool,
179    };
180}