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