Expand description
§MCP - Model Context Protocol
A Rust implementation of the Model Context Protocol (MCP) for AI tool integration.
This crate provides the infrastructure for communicating with MCP servers via stdio/HTTP transports.
§Features
- McpServer: Core MCP server with tools and capabilities
- McpServerHub: Aggregates multiple external servers into one
- Multiple Transports: Support for stdio and HTTP-based MCP servers
- Tool Routing: Automatic routing of tool calls to the correct server
- Macros:
#[mcp_tool]for easy tool definitions from functions
§Quick Start - Creating a Server
ⓘ
use mcp::macros::mcp_tool;
use mcp::server::stdio::McpStdioServer;
use mcp::McpServerConfig;
// Define tools as simple functions
#[mcp_tool(description = "Add two numbers")]
fn add(a: f64, b: f64) -> f64 { a + b }
#[mcp_tool(description = "Subtract two numbers")]
fn subtract(a: f64, b: f64) -> f64 { a - b }
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let config = McpServerConfig::builder()
.name("calculator")
.version("1.0.0")
.with_tools(tools![AddTool, SubtractTool])
.build();
McpStdioServer::run(config).await?;
Ok(())
}§Aggregating Multiple Servers
ⓘ
use mcp::{McpServerHub, McpServerConnectionConfig};
use mcp::server::stdio::McpStdioServer;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Create a hub that aggregates external servers
let hub = std::sync::Arc::new(McpServerHub::new("aggregator", "1.0.0"));
// Connect to external servers
hub.connect(McpServerConnectionConfig::stdio("calc", "node", vec!["calc.js".into()])).await?;
hub.connect(McpServerConnectionConfig::stdio("files", "python", vec!["files.py".into()])).await?;
// Wrap as a stdio server - all tools are now exposed
McpStdioServer::run(hub.to_config()).await?;
Ok(())
}§Feature Flags
default- Enables stdio, http, and macros featuresclient- Client transports for connecting to external MCP serversstdio-server- Stdio server transporthttp-server- HTTP server with actix-webmacros- Procedural macros for defining tools
Re-exports§
pub use protocol::CallToolParams;pub use protocol::CallToolResult;pub use protocol::ClientInbound;pub use protocol::JsonRpcError;pub use protocol::JsonRpcId;pub use protocol::JsonRpcMessage;pub use protocol::JsonRpcNotification;pub use protocol::JsonRpcPayload;pub use protocol::JsonRpcRequest;pub use protocol::JsonRpcResponse;pub use protocol::ListToolsParams;pub use protocol::ListToolsResult;pub use protocol::McpCapabilities;pub use protocol::McpServerInfo;pub use protocol::McpToolDefinition;pub use protocol::ServerOutbound;pub use protocol::ToolContent;pub use protocol::ToolInputSchema;pub use protocol::Annotations;pub use protocol::BaseMetadata;pub use protocol::BooleanSchema;pub use protocol::CancelTaskParams;pub use protocol::CompleteArgument;pub use protocol::CompleteContext;pub use protocol::CompleteParams;pub use protocol::CompleteResult;pub use protocol::CompletionData;pub use protocol::CreateMessageParams;pub use protocol::CreateMessageResult;pub use protocol::CreateTaskResult;pub use protocol::ElicitAction;pub use protocol::ElicitRequestFormParams;pub use protocol::ElicitRequestParams;pub use protocol::ElicitRequestUrlParams;pub use protocol::ElicitResult;pub use protocol::ElicitationCompleteParams;pub use protocol::GetTaskParams;pub use protocol::GetTaskPayloadParams;pub use protocol::Icon;pub use protocol::IconTheme;pub use protocol::Implementation;pub use protocol::ListRootsResult;pub use protocol::ListTasksParams;pub use protocol::ListTasksResult;pub use protocol::LoggingLevel;pub use protocol::LoggingMessageParams;pub use protocol::ModelHint;pub use protocol::ModelPreferences;pub use protocol::NumberSchema;pub use protocol::ProgressNotificationParams;pub use protocol::ProgressToken;pub use protocol::PromptReference;pub use protocol::RelatedTaskMetadata;pub use protocol::ResourceTemplateReference;pub use protocol::Role;pub use protocol::Root;pub use protocol::SamplingContent;pub use protocol::SamplingMessage;pub use protocol::SetLevelParams;pub use protocol::StringSchema;pub use protocol::StringSchemaFormat;pub use protocol::Task;pub use protocol::TaskMetadata;pub use protocol::TaskStatus;pub use protocol::TaskStatusNotificationParams;pub use protocol::TaskSupport;pub use protocol::ToolAnnotations;pub use protocol::ToolChoice;pub use protocol::ToolChoiceMode;pub use protocol::ToolExecution;pub use protocol::ToolResultContent;pub use protocol::ToolUseContent;pub use transport::ClientInfo;pub use transport::InitializeCapabilities;pub use transport::InitializeParams;pub use transport::InitializeResult;pub use transport::McpServerConnectionConfig;pub use transport::McpTransport;pub use transport::McpTransportError;pub use transport::RestartPolicy;pub use transport::ServerCapabilities;pub use transport::ServerInfo;pub use transport::TransportTypeId;pub use transport::ElicitationCapabilities;pub use transport::PromptsCapabilities;pub use transport::ResourcesCapabilities;pub use transport::RootsCapabilities;pub use transport::SamplingCapabilities;pub use transport::ServerToolCapabilities;pub use transport::TasksCapabilities;pub use transport::ToolCapabilities;pub use result::error_result;pub use result::success_result;pub use result::tool_err;pub use result::tool_ok;pub use result::IntoCallToolResult;pub use result::ToolResult;pub use tool::all_tools;pub use tool::tools_in_group;pub use tool::BoxFuture;pub use tool::DynTool;pub use tool::FnTool;pub use tool::McpTool;pub use tool::ToolCallResult;pub use tool::ToolEntry;pub use tool::ToolFactory;pub use tool::ToolProvider;pub use tool::ToolRegistry;pub use server::McpServer;pub use server::McpServerChannels;pub use server::McpServerConfig;pub use server::McpServerConfigBuilder;pub use server::ServerError;pub use server::ServerStatus;pub use server::stdio::McpStdioServer;stdio-serverpub use server::http::McpHttpServer;http-serverpub use hub::McpHub;pub use server_hub::McpServerHub;pub use client::stdio::AsyncStdioTransport;clientpub use client::stdio::StdioTransportAdapter;clientpub use client::stdio::TokioStdioTransport;clientpub use client::http::HttpTransport;clientpub use client::http::HttpTransportAdapter;clientpub use macro_adapter::MacroServer;macrospub use macro_adapter::MacroServerAdapter;macros
Modules§
- circuit_
breaker - Circuit breaker pattern for resilient server connections.
- client
client - MCP Client transports for connecting to external MCP servers.
- hub
- McpHub - Central hub for MCP tool routing across multiple servers.
- hub_
common - Common hub infrastructure shared between McpHub and McpServerHub.
- macro_
adapter macros - Adapter for macro-generated MCP servers.
- macros
macros - Procedural macros for defining MCP servers and tools.
- protocol
- MCP JSON-RPC Protocol Types
- result
- Result types for MCP tool implementations.
- server
- MCP Server with bidirectional async communication.
- server_
hub - McpServerHub - A hub that aggregates multiple MCP servers into a single server.
- tool
- Tool traits and types for MCP servers.
- transport
- McpTransport - Abstract transport interface for MCP servers.
- transport_
factory - Transport factory for creating MCP transports from configuration.
Macros§
- fn_tool
- Helper macro for creating tools from async functions.
- tools
- Creates a vector of tools from tool types.
Constants§
- MCP_
PROTOCOL_ VERSION - Current MCP protocol version (2025-11-25).
- VERSION
- Crate version.