Skip to content

RMCP

Crates.io Version

Coverage

一个使用 tokio 异步运行时实现的官方 Rust Model Context Protocol(模型上下文协议) SDK。

本仓库包含以下模块包(crates):

  • rmcp:核心模块包,提供 RMCP 协议的实现(如需了解更多,请访问 rmcp
  • rmcp-macros:用于生成 RMCP 工具实现的程序宏模块包(如需了解更多,请访问 rmcp-macros

使用方法

导入模块包

toml
rmcp = { version = "0.2.0", features = ["server"] }
## 或者开发通道
rmcp = { git = "https://github.com/modelcontextprotocol/rust-sdk", branch = "main" }

第三方依赖

基础依赖:

构建客户端

启动客户端
rust,
use rmcp::{ServiceExt, transport::{TokioChildProcess, ConfigureCommandExt}};
use tokio::process::Command;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = ().serve(TokioChildProcess::new(Command::new("npx").configure(|cmd| {
        cmd.arg("-y").arg("@modelcontextprotocol/server-everything");
    }))?).await?;
    Ok(())
}

构建服务器

构建传输层
rust,
use tokio::io::{stdin, stdout};
let transport = (stdin(), stdout());
构建一个服务

你可以通过使用 ServerHandlerClientHandler 轻松地构建一个服务。

rust,
let service = common::counter::Counter::new();
启动服务器
rust,
// 此调用将完成初始化过程
let server = service.serve(transport).await?;
与服务器交互

一旦服务器初始化完成,你就可以发送请求或通知:

rust,
// 请求
let roots = server.列出根目录().await?;

// 或发送通知
server.通知已取消(...).await?;
等待服务关闭
rust,
let quit_reason = server.waiting().await?;
// 或者取消它
let quit_reason = server.cancel().await?;

示例

请参阅 示例

OAuth 支持

详情请参阅 oauth_support

相关资源

相关项目

  • rustfs-mcp - 高性能 MCP 服务器,为 AI/LLM 集成提供 S3 兼容的对象存储操作
  • containerd-mcp-server - 基于 containerd 的 MCP 服务器实现

开发

贡献者建议

请参阅 docs/CONTRIBUTE.MD 获取一些贡献建议。

使用开发容器

如果你想使用开发容器,请参阅 docs/DEVCONTAINER.md 获取有关使用 Dev Container 进行开发的说明。