用 Rust 写 MCP 服务真的比 Python 快吗?

自由职业运营喵 高级 2天前 348 浏览 5 点赞 约 1 分钟

很多人觉得用 Rust 重写工具是为了追求那点运行速度,但其实在写 MCP 服务时,这完全是误区。因为这类服务绝大多数时间都在等网络 I/O(比如调用 AWS API),无论你用什么语言,等接口返回的时间都是一样的。

但我这次在公司尝试用 rmcp(官方 Rust SDK)替代原有的 Python 版本后,发现 Rust 的真正优势在于“部署成本”和“内存占用”。我们团队得管理 16 台 G5g 实例,如果每台机器都跑一个 Python 写的 MCP 服务,光内存就得吃掉 1.3GB 左右,而且还得处理各种虚拟环境和依赖冲突。换成 Rust 静态编译后的二进制文件,16 个服务加起来才占用 192MB 内存,启动时间从秒级直接掉到了毫秒级。最关键的是,它不需要安装 Python 解释器,直接扔个二进制文件上去就能跑,彻底解决了依赖漂移的问题。

如果你也想尝试用 Rust 搭建,可以参考这个实操流程:

一、环境准备与依赖配置


首先在 Cargo.toml 中引入必要的 crate。这里 schemars 非常关键,它能保证你的 JSON Schema 和代码结构完全同步,不会出现模型调用时参数对不上的情况。

[dependencies]
rmcp = "3.1.2"
tokio = { version = "1", features = ["full"] }
schemars = "0.8"
aws-config = "1.0"
aws-sdk-ec2 = "1.0"
aws-sdk-ssm = "1.0"
serde = { version = "1.0", features = ["derive"] }

二、定义工具与处理逻辑


在 Rust 中,你需要定义一个结构体来接收参数,并利用 JsonSchema 派生宏让 MCP 客户端(如 Claude Code)知道这个工具怎么用。

#[derive(serde::Deserialize, schemars::JsonSchema)]
struct EC2LaunchArgs {
    instance_type: String,
    ami_id: String,
}

// 在 handler 中实现具体的 AWS 调用逻辑
async fn handle_launch_instance(args: EC2LaunchArgs) -> Result<String, String> {
    // 这里调用 aws-sdk-ec2 的逻辑
    Ok("Instance launched successfully".to_string())
}

三、启动 stdio 传输服务


MCP 服务通过标准输入输出(stdio)与客户端通信。使用 rmcp 快速挂载工具并启动服务器:

#[tokio::main]
async fn main() {
    let mut server = rmcp::Server::new("aws-manager");
    
    server.add_tool("launch_instance", "启动指定类型的EC2实例", handle_launch_instance);
    
    if let Err(e) = server.run().await {
        eprintln!("Server error: {}", e);
    }
}

最后将编译好的二进制文件配置到 Claude Code 的配置文件中即可。对于只有一两个小工具的需求,Python 确实更快捷;但如果你在做企业级部署,或者像我们这样需要管理大量实例的 Agent 工作流,Rust 的确定性确实香得多。

工作流rustawsClaude Codermcp
各类AI落地变现的详细拆解见AI赚钱方法实操指南,有不少直接可参考的案例。

全部回复 (3)

躺平产品经理 初级 2天前
确实,而且Rust写完类型检查完,基本不用担心运行时崩掉。
0 回复
小柯爱学习 专家 2天前
内存确实省,不过用 rmcp 写异步处理起来顺手吗?
0 回复
小Ray在路上 中级 2天前
之前试过,Python版内存涨得快,Rust确实省心不少。
0 回复

发表回复

支持 Markdown 格式