Crate pmcp

Source
Expand description

§MCP SDK for Rust

A high-quality Rust implementation of the Model Context Protocol (MCP) SDK.

This crate provides both client and server implementations of MCP with:

  • Full protocol compatibility with the TypeScript SDK
  • Zero-copy parsing where possible
  • Comprehensive type safety
  • Multiple transport options (stdio, HTTP/SSE, WebSocket)
  • Built-in authentication support

§Quick Start

§Client Example

use pmcp::{Client, StdioTransport, ClientCapabilities};

// Create a client with stdio transport
let transport = StdioTransport::new();
let mut client = Client::new(transport);

// Initialize the connection
let server_info = client.initialize(ClientCapabilities::default()).await?;

// List available tools
let tools = client.list_tools(None).await?;

§Server Example

use pmcp::{Server, ServerCapabilities, ToolHandler};
use async_trait::async_trait;
use serde_json::Value;

struct MyTool;

#[async_trait]
impl ToolHandler for MyTool {
    async fn handle(&self, args: Value) -> Result<Value, pmcp::Error> {
        Ok(serde_json::json!({"result": "success"}))
    }
}

let server = Server::builder()
    .name("my-server")
    .version("1.0.0")
    .capabilities(ServerCapabilities::default())
    .tool("my-tool", MyTool)
    .build()?;

// Run with stdio transport
server.run_stdio().await?;

Re-exports§

pub use client::Client;
pub use client::ClientBuilder;
pub use error::Error;
pub use error::ErrorCode;
pub use error::Result;
pub use server::PromptHandler;
pub use server::ResourceHandler;
pub use server::SamplingHandler;
pub use server::Server;
pub use server::ServerBuilder;
pub use server::ToolHandler;
pub use shared::AuthMiddleware;
pub use shared::LoggingMiddleware;
pub use shared::Middleware;
pub use shared::MiddlewareChain;
pub use shared::RetryMiddleware;
pub use shared::StdioTransport;
pub use shared::Transport;
pub use shared::WebSocketConfig;
pub use shared::WebSocketTransport;
pub use shared::HttpConfig;
pub use shared::HttpTransport;
pub use types::AuthInfo;
pub use types::AuthScheme;
pub use types::CallToolRequest;
pub use types::CallToolResult;
pub use types::ClientCapabilities;
pub use types::ClientNotification;
pub use types::ClientRequest;
pub use types::CompleteRequest;
pub use types::CompleteResult;
pub use types::CompletionArgument;
pub use types::CompletionReference;
pub use types::Content;
pub use types::CreateMessageParams;
pub use types::CreateMessageRequest;
pub use types::CreateMessageResult;
pub use types::GetPromptResult;
pub use types::Implementation;
pub use types::IncludeContext;
pub use types::ListResourcesResult;
pub use types::ListToolsResult;
pub use types::LoggingLevel;
pub use types::MessageContent;
pub use types::ModelPreferences;
pub use types::ProgressNotification;
pub use types::ProgressToken;
pub use types::PromptMessage;
pub use types::ProtocolVersion;
pub use types::ReadResourceResult;
pub use types::RequestId;
pub use types::ResourceInfo;
pub use types::Role;
pub use types::RootsCapabilities;
pub use types::SamplingCapabilities;
pub use types::SamplingMessage;
pub use types::ServerCapabilities;
pub use types::ServerNotification;
pub use types::ServerRequest;
pub use types::TokenUsage;
pub use types::ToolCapabilities;
pub use types::ToolInfo;
pub use utils::BatchingConfig;
pub use utils::DebouncingConfig;
pub use utils::MessageBatcher;
pub use utils::MessageDebouncer;

Modules§

client
MCP client implementation.
error
Error types for the MCP SDK.
server
MCP server implementation.
shared
Shared components used by both client and server.
types
Core protocol types for MCP.
utils
Utility modules for the MCP SDK.

Constants§

DEFAULT_PROTOCOL_VERSION
Default protocol version to use for negotiation
DEFAULT_REQUEST_TIMEOUT_MS
Default request timeout in milliseconds
LATEST_PROTOCOL_VERSION
Protocol version constants
SUPPORTED_PROTOCOL_VERSIONS
List of all protocol versions supported by this SDK

Functions§

log
Server-side logging function (placeholder for examples).

Attribute Macros§

async_trait