项目简介
PMCP Rust SDK 是 Model Context Protocol (MCP) 的高质量 Rust 实现。它提供了一套完整的工具和组件,用于构建高性能、安全且可扩展的 MCP 服务器和客户端,与 TypeScript SDK 保持功能兼容。该 SDK 专注于性能优化、内存效率和协议合规性,支持资源管理、工具调用、Prompt 模板渲染以及多种传输协议。
主要功能点
- 完整的MCP协议支持: 全面实现了 MCP v1.0 规范,支持 JSON-RPC 2.0 通信。
- 多种传输协议: 内置支持 StdIo、HTTP/SSE (Server-Sent Events) 和 WebSocket 等传输方式,提供连接池和优化。
- 资源、工具和Prompt管理: 轻松托管和访问数据资源、注册和执行外部工具、定义和渲染 Prompt 模板。
- 高性能解析: 采用 SIMD 加速、零拷贝和批处理技术,显著提升消息解析速度和内存效率。
- 高级中间件和错误恢复: 集成熔断器、限流、压缩、指标收集等中间件,并支持自适应重试、健康监控和级联故障检测。
- 会话管理和能力声明: 支持会话生命周期管理,并允许客户端与服务器协商和声明各自支持的 MCP 能力。
- WebAssembly支持: 可编译为 WASM,部署到 Cloudflare Workers、WASI 运行时及浏览器环境。
安装步骤
要将 'pmcp' SDK 添加到您的 Rust 项目,请在 'Cargo.toml' 文件中添加以下依赖:
[dependencies] pmcp = "1.4" # 或者使用最新版本
如果您需要启用所有企业级功能(如 WebSocket 服务器、SSE 优化、高级中间件、SIMD 解析等),请使用 'full' 特性:
[dependencies] pmcp = { version = "1.4", features = ["full"] }
服务器配置
MCP 客户端通常通过 JSON-RPC 协议与 MCP 服务器通信。客户端需要知道服务器的连接地址和协议类型。以下是使用 'pmcp' SDK 构建的示例 MCP 服务器的典型配置信息和启动方式:
- 服务器名称 (server name): 在初始化握手时,服务器会向客户端声明其名称,例如 "example-tools-server" 或 "prompt-server"。
- 启动命令 (command) 及参数 (args):
- 对于通过标准输入输出 (Stdio) 运行的服务器:客户端将启动一个子进程并与其标准 I/O 进行通信。例如,对于 '02_server_basic' 示例:
- 'command': 'cargo'
- 'args': '["run", "--example", "02_server_basic", "--features", "full"]'
- 对于通过 HTTP 运行的服务器:服务器需要独立运行,客户端通过 HTTP URL 连接。例如,对于 '22_streamable_http_server_stateful' 示例:
- 服务器启动命令(本地开发):'cargo run --example 22_streamable_http_server_stateful --features full'
- 客户端连接 URL:'http://localhost:8080'
- 对于通过 WebSocket 运行的服务器:服务器需要独立运行,客户端通过 WebSocket URL 连接。例如,对于 '27_websocket_server_enhanced' 示例:
- 服务器启动命令(本地开发):'cargo run --example 27_websocket_server_enhanced --features websocket'
- 客户端连接 URL:'ws://127.0.0.1:9001'
- 对于通过标准输入输出 (Stdio) 运行的服务器:客户端将启动一个子进程并与其标准 I/O 进行通信。例如,对于 '02_server_basic' 示例:
- 客户端声明: MCP 客户端在连接时会发送 'initialize' 请求,包含 'clientInfo' (客户端名称、版本) 和 'capabilities' (客户端支持的 MCP 功能)。
基本使用方法
-
构建 MCP 服务器: 使用 'pmcp::Server::builder()' 创建服务器实例,并通过 '.tool()', '.resources()', '.prompt()' 等方法注册所需的功能模块(工具、资源、Prompt)。
// 导入必要的模块和类型 use pmcp::{Server, ToolHandler, ServerCapabilities}; use serde_json::Value; use async_trait::async_trait; // 示例:一个简单的计算器工具 struct CalculatorTool; #[async_trait] impl ToolHandler for CalculatorTool { async fn handle(&self, args: Value, _extra: pmcp::RequestHandlerExtra) -> pmcp::Result<Value> { // 实现计算逻辑 let a = args["a"].as_f64().unwrap_or_default(); let b = args["b"].as_f64().unwrap_or_default(); Ok(serde_json::json!({ "result": a + b })) } } #[tokio::main] // 使用tokio作为异步运行时 async fn main() -> Result<(), Box<dyn std::error::Error>> { // 创建一个MCP服务器实例 let server = Server::builder() .name("my-calculator-server") // 服务器名称 .version("1.0.0") // 服务器版本 .capabilities(ServerCapabilities::tools_only()) // 声明只提供工具能力 .tool("add_numbers", CalculatorTool) // 注册一个名为"add_numbers"的工具 .build()?; // 构建服务器 println!("MCP服务器已启动,通过标准I/O监听..."); // 通过标准输入/输出运行服务器 server.run_stdio().await?; Ok(()) } -
启动服务器: 运行您的 Rust 服务器应用程序。根据您在代码中配置的传输协议,它将开始监听客户端连接。
-
MCP客户端连接: 使用任何兼容 MCP 协议的客户端(如 Claude Code、PMCP TypeScript SDK 或您用 'pmcp' SDK 构建的客户端)连接到正在运行的 MCP 服务器。客户端需提供服务器的连接地址/方式(例如 'ws://localhost:9001' 或 'http://localhost:8080'),并发送 JSON-RPC 请求来调用工具、访问资源或获取 Prompt。
信息
分类
AI与计算