🚀 Rust MCP 服务器
Rust MCP 服务器是一个用 Rust 编写的模型上下文协议(MCP)服务器,它为 Rust 项目提供了 AI 辅助代码分析工具。该服务器能让 AI 代理对 Rust 代码库进行高级代码分析、导航和重构建议。
✨ 主要特性
- 文件分析:解析并检查 Rust 文件的语法错误。
- 工作区索引:构建全面的调用图、类型使用图和模块依赖图。
- 代码导航:查找符号的定义和引用。
- 代码异味检测:识别未使用的函数、长函数、高复杂度代码和上帝对象。
- 重构建议:自动给出代码改进建议。
🔧 技术细节
服务器使用了以下组件和技术:
- rmcp 库用于处理 MCP 协议。
- syn 用于解析 Rust 抽象语法树(AST)。
- tokio 用于异步操作。
- 使用 RwLock 实现线程安全缓存。
- 采用访问者模式遍历 AST。
📦 安装指南
前提条件
- Docker 和 Docker Compose(用于从 Docker Hub 安装)。
- Git(可选,用于开发)。
- Rust 1.70 及以上版本(仅在从源代码构建时需要)。
注意:对于大多数用户来说,仅需要 Docker。Docker 镜像使用 Rust nightly 版本以支持最新的 MCP SDK 特性(版本 2024)。
从 Docker Hub 安装(推荐)
docker run --rm -i mytheclipse/rust-mcp-server:latest
docker pull mytheclipse/rust-mcp-server:latest
docker run --rm -i mytheclipse/rust-mcp-server:latest
docker run --rm -i -v $(pwd):/workspace mytheclipse/rust-mcp-server:latest
开发环境安装
git clone https://github.com/MythEclipse/rust-mcp-server.git
cd rust-mcp-server
docker-compose up --build
docker build -t rust-mcp-server .
docker run --rm -i rust-mcp-server
手动构建(高级用户)
前提条件
- Rust 1.70 及以上版本(2024 版本)。
- Cargo。
从源代码构建
git clone https://github.com/MythEclipse/rust-mcp-server.git
cd rust-mcp-server
cargo build --release
./target/release/rust-mcp-server
💻 使用示例
运行 MCP 服务器
从 Docker Hub 运行(推荐)
docker run --rm -i mytheclipse/rust-mcp-server:latest
docker run --rm -i -v $(pwd):/workspace mytheclipse/rust-mcp-server:latest
docker run -d --name rust-mcp-server mytheclipse/rust-mcp-server:latest
docker stop rust-mcp-server && docker rm rust-mcp-server
使用 Docker Compose 进行开发
git clone https://github.com/MythEclipse/rust-mcp-server.git
cd rust-mcp-server
docker-compose up --build
docker-compose up -d
docker-compose logs -f
docker-compose down
手动运行(高级)
如果你是从源代码构建的:
./target/release/rust-mcp-server
cargo run
MCP 协议集成
该服务器实现了模型上下文协议(MCP),并通过标准输入输出使用 JSON-RPC 2.0 进行通信。它旨在与兼容 MCP 的客户端(如 AI 编码助手)集成。
可用工具
1. 检查文件
解析并检查 Rust 文件的语法错误。
参数:
MCP 调用示例:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "check_file",
"arguments": {
"path": "/path/to/your/file.rs"
}
}
}
响应示例:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "File parsed successfully with no syntax errors."
}
]
}
}
2. 索引工作区
对目录中的所有 Rust 文件进行索引,并构建全面的分析图。
参数:
MCP 调用示例:
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "index_workspace",
"arguments": {
"root": "/path/to/rust/project"
}
}
}
返回结果:
- 调用图(函数关系)
- 类型使用图(类型的使用位置)
- 模块依赖图
- 函数信息(复杂度、行数、参数)
- 结构体和枚举信息
- 未使用函数检测
- 重构建议
3. 转到定义
查找符号的定义位置。
参数:
MCP 调用示例:
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "goto_definition",
"arguments": {
"name": "MyStruct"
}
}
}
4. 查找引用
查找符号的所有引用。
参数:
MCP 调用示例:
{
"jsonrpc": "2.0",
"id": 4,
"method": "tools/call",
"params": {
"name": "find_references",
"arguments": {
"name": "my_function"
}
}
}
实际使用示例
分析 Rust 项目
- 启动 MCP 服务器:
cargo run
- 索引工作区(在另一个终端或 MCP 客户端中):
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "index_workspace",
"arguments": {
"root": "/home/user/my-rust-project"
}
}
}
- 检查特定文件的语法错误:
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "check_file",
"arguments": {
"path": "/home/user/my-rust-project/src/main.rs"
}
}
}
- 查找函数的定义位置:
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "goto_definition",
"arguments": {
"name": "process_data"
}
}
}
与 AI 助手集成
该服务器设计用于与支持 MCP 的 AI 编码助手配合使用。通常的集成方式如下:
- AI 助手将 MCP 服务器作为子进程启动。
- 通过标准输入输出使用 JSON-RPC 2.0 进行通信。
- 助手可以调用工具进行代码分析、导航和获取建议。
- 使用结果提供智能代码辅助。
命令行测试
你可以使用 socat 等工具手动测试服务器,或者编写一个简单的客户端。为了开发目的,你也可以使用内置测试:
cargo test
cargo test test_index_workspace
cargo test test_check_file
代码分析输出
当你索引工作区时,服务器会返回全面的分析结果,包括:
函数分析:
- 行数超过 50 的函数。
- 复杂度大于 10 的函数。
- 参数超过 5 个的函数。
结构分析:
- 字段超过 10 个的结构体。
- 变体超过 10 个的枚举。
依赖分析:
- 调用超过 10 个其他函数的函数。
- 被超过 10 个其他函数调用的函数。
- 在超过 10 个地方使用的结构体(上帝对象)。
未使用代码:
错误处理
服务器会为无效请求返回结构化错误:
{
"jsonrpc": "2.0",
"id": 1,
"error": {
"code": -32602,
"message": "Invalid params",
"data": {
"details": "Path does not exist"
}
}
}
🛠️ 开发指南
构建
使用 Docker
docker build -t rust-mcp-server .
docker-compose build
手动构建
cargo build
测试
使用 Docker
docker run --rm -v $(pwd):/app mytheclipse/rust-mcp-server:latest cargo test
手动测试
cargo test
开发工作流程
- 修改代码。
- 在本地测试:
cargo test
- 构建 Docker 镜像:
docker build -t rust-mcp-server .
- 测试 Docker 镜像:
docker run rust-mcp-server
代码分析特性
服务器执行多种类型的代码分析:
- 函数分析
- 检测行数(超过 50 行标记)。
- 计算圈复杂度(超过 10 标记)。
- 分析参数数量(超过 5 个参数标记)。
- 结构分析
- 检测大型结构体(超过 10 个字段)。
- 检测大型枚举(超过 10 个变体)。
- 依赖分析
- 检测调用过多其他函数的函数(超过 10 个被调用函数)。
- 检测被过多其他函数调用的函数(超过 10 个调用函数)。
- 检测上帝对象(在超过 10 个地方使用的结构体)。
- 未使用代码检测
⚙️ 配置说明
MCP 客户端配置
要将此 MCP 服务器与兼容 MCP 的客户端一起使用,请将其配置为运行 Docker 容器:
对于 Claude Desktop(claude_desktop_config.json)
{
"mcpServers": {
"rust-mcp-server": {
"command": "docker",
"args": ["run", "--rm", "mytheclipse/rust-mcp-server:latest"]
}
}
}
对于 VS Code 或其他 MCP 客户端
{
"mcpServers": {
"rust-mcp-server": {
"command": "docker",
"args": ["run", "--rm", "mytheclipse/rust-mcp-server:latest"]
}
}
}
使用 Docker Compose
如果你更喜欢使用 Docker Compose:
{
"mcpServers": {
"rust-mcp-server": {
"command": "docker-compose",
"args": ["exec", "rust-mcp-server", "rust-mcp-server"],
"cwd": "/path/to/rust-mcp-server"
}
}
}
配置参数
command:要运行的可执行文件(docker 或 docker-compose)。
args:传递给命令的参数数组。
cwd:当前工作目录 - 仅在使用 Docker Compose 时需要,应指向包含 docker-compose.yml 的目录。
环境变量
服务器在基本操作中不需要任何环境变量。但是,你可以设置:
RUST_LOG:设置日志级别(例如,info、debug、trace)。
Docker 镜像管理
docker build -t rust-mcp-server .
docker pull mytheclipse/rust-mcp-server:latest
docker run -e RUST_LOG=debug mytheclipse/rust-mcp-server:latest
docker run -v /host/path:/container/path mytheclipse/rust-mcp-server:latest
发布到 Docker Hub
有关如何将此镜像推送到 Docker Hub 的详细说明,请参阅 DOCKER_HUB_DEPLOYMENT.md。
官方 Docker Hub 仓库是:mytheclipse/rust-mcp-server
配置选项
服务器使用默认配置,不需要额外的设置。所有分析都是在调用工具时按需执行的。
🤝 贡献指南
- 分叉仓库。
- 创建功能分支。
- 进行修改。
- 为新功能添加测试。
- 确保
cargo test 通过。
- 提交拉取请求。
📄 许可证
本项目采用 MIT 许可证 - 详情请参阅 LICENSE 文件。