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