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 middleware chains, task management,
5//! progress tracking, and more.
6//!
7//! ## Quick Start
8//!
9//! ```rust,ignore
10//! use mcp_host::prelude::*;
11//! use async_trait::async_trait;
12//!
13//! struct MyTool;
14//!
15//! #[async_trait]
16//! impl Tool for MyTool {
17//!     fn name(&self) -> &str { "my_tool" }
18//!     fn input_schema(&self) -> serde_json::Value {
19//!         serde_json::json!({
20//!             "type": "object",
21//!             "properties": {
22//!                 "input": { "type": "string" }
23//!             }
24//!         })
25//!     }
26//!     async fn execute(&self, ctx: ExecutionContext<'_>) -> Result<Vec<Box<dyn Content>>, ToolError> {
27//!         Ok(vec![Box::new(TextContent::new("Hello!"))])
28//!     }
29//! }
30//! ```
31//!
32//! ## Derive Macros (Recommended)
33//!
34//! When using the `macros` feature, you can use procedural derive macros for reduced boilerplate:
35//!
36//! ```rust,ignore
37//! use mcp_host::prelude::*;
38//!
39//! #[derive(McpTool)]
40//! #[mcp(name = "my_tool", description = "Does something useful")]
41//! struct MyTool {
42//!     #[mcp(skip)]
43//!     state: SomeInternalState,  // Not included in schema
44//!     input: String,              // Included in schema
45//! }
46//!
47//! // User must implement execute manually
48//! impl MyTool {
49//!     async fn run(&self, ctx: ExecutionContext<'_>) -> Result<Vec<Box<dyn Content>>, ToolError> {
50//!         Ok(vec![Box::new(TextContent::new(&self.input))])
51//!     }
52//! }
53//! ```
54//!
55//! Enable derive macros with: `mcp-host = { version = "0.1", features = ["macros"] }`
56
57pub mod content;
58pub mod logging;
59pub mod managers;
60pub mod protocol;
61pub mod registry;
62pub mod server;
63pub mod transport;
64pub mod utils;
65
66// Re-export commonly used types
67pub mod prelude {
68    // Protocol types
69    pub use crate::protocol::capabilities::{ClientCapabilities, ServerCapabilities};
70    pub use crate::protocol::types::{JsonRpcError, JsonRpcRequest, JsonRpcResponse};
71
72    // Content types and builders
73    pub use crate::content::annotations::Annotations;
74    pub use crate::content::builder::{audio, image, resource, text};
75    pub use crate::content::resource::ResourceContent;
76    pub use crate::content::types::{
77        AudioContent, Content, ImageContent, ResourceLink, TextContent,
78    };
79
80    // Server types
81    pub use crate::server::builder::{ServerBuilder, server};
82    pub use crate::server::core::Server;
83    pub use crate::server::multiplexer::{
84        ClientRequester, CreateMessageParams, CreateMessageResult, JsonRpcClientRequest,
85        ListRootsResult, ModelHint, ModelPreferences, MultiplexerError, RequestMultiplexer, Root,
86        SamplingContent, SamplingMessage,
87    };
88    pub use crate::server::profile::SessionProfile;
89    pub use crate::server::session::Session;
90    pub use crate::server::visibility::{
91        Environment, ExecutionContext, SimpleEnvironment, VisibilityContext,
92    };
93
94    // Registry types
95    pub use crate::registry::prompts::{
96        GetPromptResult, Prompt, PromptArgument, PromptError, PromptInfo, PromptManager,
97    };
98    pub use crate::registry::resources::{
99        Resource, ResourceError, ResourceInfo, ResourceManager, ResourceRetryConfig,
100        ResourceTemplate, ResourceTemplateInfo,
101    };
102    pub use crate::registry::tools::{
103        Tool, ToolBreakerConfig, ToolError, ToolHelpers, ToolInfo, ToolRegistry,
104    };
105
106    // Prompt message types
107    pub use crate::content::prompt::{PromptContent, PromptMessage, PromptRole};
108
109    // Middleware and resilience types
110    pub use crate::server::middleware::{RateLimiter, RateLimiterConfig};
111
112    // Logging types
113    pub use crate::logging::{LogLevel, LoggerConfig, McpLogger, send_log_notification};
114
115    // Progress tracking
116    pub use crate::managers::progress::{ProgressToken, ProgressTracker};
117
118    // Utility functions
119    pub use crate::utils::{
120        base64_decode, base64_encode, byte_to_line_col, collect_files, is_safe_path,
121    };
122
123    // Transport types
124    pub use crate::transport::traits::{
125        IncomingMessage, JsonRpcNotification, Transport, TransportError,
126    };
127
128    #[cfg(feature = "stdio")]
129    pub use crate::transport::stdio::StdioTransport;
130
131    #[cfg(feature = "http")]
132    pub use crate::transport::http::{HttpTransport, HttpTransportConfig, HttpTransportError};
133
134    // Procedural macros (when enabled)
135    #[cfg(feature = "macros")]
136    pub use mcp_host_macros::{McpPrompt, McpResource, McpTool};
137}