Skip to main content

Crate model_context_protocol

Crate model_context_protocol 

Source
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 features
  • client - Client transports for connecting to external MCP servers
  • stdio-server - Stdio server transport
  • http-server - HTTP server with actix-web
  • macros - 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-server
pub use server::http::McpHttpServer;http-server
pub use hub::McpHub;
pub use server_hub::McpServerHub;
pub use client::stdio::AsyncStdioTransport;client
pub use client::stdio::StdioTransportAdapter;client
pub use client::stdio::TokioStdioTransport;client
pub use client::http::HttpTransport;client
pub use client::http::HttpTransportAdapter;client
pub use macro_adapter::MacroServer;macros
pub use macro_adapter::MacroServerAdapter;macros

Modules§

circuit_breaker
Circuit breaker pattern for resilient server connections.
clientclient
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_adaptermacros
Adapter for macro-generated MCP servers.
macrosmacros
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.