项目简介

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客户端发起消息生成请求。

安装步骤

  1. 安装Rust: 确保您的系统已安装Rust编程语言和Cargo包管理器。可以通过 'curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh' 命令安装。
  2. 创建新项目 (可选): 如果您想从头开始,可以创建一个新的Rust项目:'cargo new my-mcp-server --bin'
  3. 添加依赖: 在您的 'Cargo.toml' 文件中添加 'turbomcp' 依赖:
    [dependencies]
    turbomcp = "1.0"
    tokio = { version = "1.0", features = ["full"] }
    serde_json = "1.0"
  4. 构建和运行: 编写您的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与计算