项目简介
TurboMCP是一个基于Rust语言开发的高性能SDK,专注于实现Model Context Protocol (MCP)。它提供了一套生产就绪的框架,帮助开发者轻松构建与大型语言模型(LLM)客户端(如Claude Desktop)通信的应用后端。TurboMCP支持资源管理、外部工具调用和Prompt模板定义,并通过JSON-RPC协议与客户端高效交互,具备企业级安全、多种传输协议支持和零开销宏等特性。
主要功能点
- 资源托管与数据访问: 允许服务器管理文件系统边界 (Roots) 并通过URI模板提供数据访问服务。
- 工具注册与执行: 开发者可以使用'#[tool]'宏定义异步方法作为LLM可调用的外部功能,并自动生成JSON Schema进行类型校验。
- Prompt模板定义与渲染: 通过'#[prompt]'宏定义可定制的LLM交互模板,支持参数化 Prompt。
- 上下文管理与会话跟踪: 提供强大的上下文注入机制和会话管理功能,支持请求关联、结构化日志和性能监控。
- 多种传输协议: 支持Stdio、HTTP/SSE、WebSocket、TCP和Unix Socket等多种通信协议,适应不同部署场景。
- 企业级安全: 内置OAuth 2.0 (支持Google, GitHub, Microsoft)、CORS保护、速率限制、安全头和TLS支持。
- 高性能: 利用SIMD加速的JSON处理(如'simd-json'和'sonic-rs')和零拷贝消息处理,提供卓越性能。
- 优雅停机与容错: 支持Circuit Breaker、优雅停机和会话清理等生产就绪特性。
- 交互式用户输入 (Elicitation): 支持服务器发起请求,向用户收集结构化输入。
- LLM双向采样 (Sampling): 允许服务器向LLM客户端发起消息生成请求。
安装步骤
- 安装Rust: 确保您的系统已安装Rust编程语言和Cargo包管理器。可以通过 'curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh' 命令安装。
- 创建新项目 (可选): 如果您想从头开始,可以创建一个新的Rust项目:'cargo new my-mcp-server --bin'
- 添加依赖: 在您的 'Cargo.toml' 文件中添加 'turbomcp' 依赖:
[dependencies] turbomcp = "1.0" tokio = { version = "1.0", features = ["full"] } serde_json = "1.0" - 构建和运行: 编写您的MCP服务器代码(参考下面的“基本使用方法”),然后使用 'cargo build' 构建项目,并使用 'cargo run' 运行它。
服务器配置
MCP客户端需要一个配置文件来启动和连接到您的TurboMCP服务器。以下是Claude Desktop客户端的配置示例(您需要将其添加到 '~/Library/Application Support/Claude/claude_desktop_config.json' 或 '%APPDATA%\Claude\claude_desktop_config.json'):
{ "mcpServers": { "calculator-server": { "command": "/path/to/your/server/binary", // 替换为您的TurboMCP服务器可执行文件的完整路径 "args": [] // 传递给服务器的命令行参数。例如:["--http"] 或 ["--tcp", "127.0.0.1:8080"] } } }
- 'server name' (MCP服务器的唯一名称): 'calculator-server'
- 'command' (启动命令): '/path/to/your/server/binary' (请替换为实际编译后的可执行文件路径)
- 'args' (启动参数): '[]' (默认通过标准输入输出 (Stdio) 协议通信。如果需要HTTP协议,可填 '["--http"]';如果需要TCP协议,可填 '["--tcp", "127.0.0.1:8080"]')
基本使用方法
以下是一个简单的计算器服务器示例,您可以将其保存为 'main.rs' 文件:
// main.rs use turbomcp::prelude::*; #[derive(Clone)] struct Calculator; #[server( name = "calculator-server", version = "1.0.0", description = "一个简单的计算器,演示工具功能" )] impl Calculator { #[tool("添加两个数字")] async fn add(&self, a: i32, b: i32) -> McpResult<i32> { Ok(a + b) } #[tool("获取服务器状态")] async fn status(&self, _ctx: Context) -> McpResult<String> { Ok("服务器运行中".to_string()) } #[resource("calc://history")] // 示例:资源访问,例如获取历史记录 async fn history(&self) -> McpResult<String> { Ok("目前没有历史记录".to_string()) } #[prompt("生成数学问题")] // 示例:Prompt模板,用于LLM生成交互 async fn math_question(&self, topic: String, difficulty: String) -> McpResult<String> { Ok(format!("请生成一个关于 {} 的 {} 级别数学问题。", topic, difficulty)) } } #[tokio::main] async fn main() -> Result<(), Box<dyn std::error::Error>> { tracing_subscriber::fmt().with_env_filter("info").init(); // 初始化日志 let args: Vec<String> = std::env::args().collect(); let server_instance = Calculator; // 根据命令行参数选择传输协议 if args.iter().any(|arg| arg == "--http") { tracing::info!("Starting HTTP server on http://127.0.0.1:8080/mcp"); server_instance.run_http("127.0.0.1:8080").await?; } else if args.iter().any(|arg| arg == "--tcp") { tracing::info!("Starting TCP server on 127.0.0.1:8080"); server_instance.run_tcp("127.0.0.1:8080").await?; } else { tracing::info!("Starting STDIO server"); server_instance.run_stdio().await?; } Ok(()) }
编译并运行您的服务器:
cargo run # 或运行HTTP服务器: cargo run -- --http # 或运行TCP服务器: cargo run -- --tcp
一旦服务器运行,它将等待MCP客户端的连接和请求。
信息
分类
AI与计算