🚀 Rust MCP 服务器
Rust MCP 服务器是一个全面的模型上下文协议(MCP)服务器,它为基于大语言模型(LLM)辅助的 Rust 开发提供了与 rust-analyzer 的集成。该服务器借助 rust-analyzer 的语言服务器协议(LSP)能力,使 Claude 等 AI 工具能够以符合 Rust 语言习惯的方式处理代码,避免了字符串操作,提供智能的代码分析和重构功能。

🚀 快速开始
- 构建:执行
cargo build --release
命令。
- 配置:将你的 MCP 客户端配置为使用
target/release/rustmcp
。
- 使用:通过 AI 助手,使用自然语言提示,例如“生成一个带有 Debug 和 Clone 派生的 User 结构体”。
✨ 主要特性 - 完整工具套件(19 个工具)
代码分析(4 个工具)
find_definition
- 导航到符号定义处。
find_references
- 查找符号的所有使用位置。
get_diagnostics
- 获取编译器错误/警告,并提供修复建议。
workspace_symbols
- 搜索项目中的符号。
代码生成(4 个工具)
generate_struct
- 创建带有派生和构造函数的结构体。
generate_enum
- 创建带有变体的枚举。
generate_trait_impl
- 生成带有存根的特征实现。
generate_tests
- 创建单元或集成测试模板。
代码重构(5 个工具)
rename_symbol
- 重命名符号,并考虑作用域。
extract_function
- 将代码块提取为函数。
inline_function
- 内联函数调用。
organize_imports
- 对 use
语句进行排序和整理。
format_code
- 应用 rustfmt
格式化代码。
质量保证(2 个工具)
apply_clippy_suggestions
- 应用 clippy
的自动修复建议。
validate_lifetimes
- 检查生命周期和借用检查器问题。
项目管理(2 个工具)
analyze_manifest
- 解析和分析 Cargo.toml
文件。
run_cargo_check
- 执行 cargo check
并解析错误信息。
高级特性(4 个工具)
get_type_hierarchy
- 获取符号的类型层次结构。
suggest_dependencies
- 根据代码模式推荐依赖项。
create_module
- 创建具有可见性控制的新 Rust 模块。
move_items
- 在文件之间移动代码项。
其他高级工具
change_signature
- 安全地修改函数签名。
📦 安装指南
前提条件
- Rust 工具链(版本 1.70 及以上)。
- 安装
rust-analyzer
(默认路径为 ~/.cargo/bin/rust-analyzer
)。
- 一个兼容 MCP 的客户端(如 Claude、Roo 等)。
安装步骤
- 克隆本仓库:
git clone <repository-url>
cd rust-mcp
- 构建服务器:
cargo build --release
- 服务器二进制文件将位于
target/release/rustmcp
。
🔧 配置
环境变量
服务器支持以下环境变量:
RUST_ANALYZER_PATH
- rust-analyzer
二进制文件的路径(默认值:~/.cargo/bin/rust-analyzer
)。
你可以在运行服务器时设置该变量:
RUST_ANALYZER_PATH=/usr/local/bin/rust-analyzer ./target/release/rustmcp
或者在 MCP 客户端配置中设置(见以下示例)。
Claude Desktop
将以下内容添加到你的 Claude Desktop MCP 配置文件中:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
- Windows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"rust-analyzer": {
"command": "/path/to/rust-mcp/target/release/rustmcp",
"args": [],
"env": {
"RUST_ANALYZER_PATH": "/custom/path/to/rust-analyzer"
}
}
}
}
如果 rust-analyzer
位于默认位置(~/.cargo/bin/rust-analyzer
),可以省略 env
部分:
{
"mcpServers": {
"rust-analyzer": {
"command": "/path/to/rust-mcp/target/release/rustmcp",
"args": []
}
}
}
Roo 配置
将以下内容添加到你的 Roo 配置文件中(通常为 ~/.roo/config.json
):
{
"mcp_servers": [
{
"name": "rust-analyzer",
"command": "/path/to/rust-mcp/target/release/rustmcp",
"args": [],
"env": {
"RUST_ANALYZER_PATH": "/custom/path/to/rust-analyzer"
}
}
]
}
对于默认的 rust-analyzer
位置,可以使用空的 env
对象:
{
"mcp_servers": [
{
"name": "rust-analyzer",
"command": "/path/to/rust-mcp/target/release/rustmcp",
"args": [],
"env": {}
}
]
}
其他 MCP 客户端
对于任何兼容 MCP 的客户端,将其配置为运行:
/path/to/rust-mcp/target/release/rustmcp
服务器使用标准输入输出(stdio)传输,并准备好接收 MCP 协议消息。
💻 使用示例
配置完成后,你可以通过 AI 助手使用这些工具。以下是一些示例提示:
代码分析
"查找此 Rust 项目中 `Config` 结构体的所有引用"
"显示 `parse_args` 函数的定义"
"检查 src/main.rs 中的编译器错误"
"在工作区中搜索所有与 'user' 匹配的符号"
代码生成
"生成一个名为 `User` 的结构体,包含字段:name(String 类型)、age(u32 类型)、email(String 类型),并带有 Debug 和 Clone 派生"
"创建一个名为 `HttpStatus` 的枚举,包含变体:Ok、NotFound、ServerError"
"为 `calculate_total` 函数生成单元测试"
"为 User 结构体生成 Display 特征的实现"
代码重构
"将代码库中所有的 `data` 变量重命名为 `user_input`"
"将此代码块提取为一个名为 `validate_input` 的独立函数"
"内联第 42 行的 `helper_function` 调用"
"整理 src/lib.rs 中的所有导入语句"
"格式化 src/lib.rs 中的所有代码"
质量保证
"运行 clippy 并应用所有自动修复,以提高代码质量"
"检查 src/auth.rs 中是否存在任何生命周期或借用检查器问题"
项目管理
"分析 Cargo.toml 文件并显示依赖信息"
"运行 cargo check 并报告任何编译错误"
高级特性
"显示 src/main.rs 中第 15 行第 8 列符号的类型层次结构"
"为此工作区中的 HTTP 客户端功能建议依赖项"
"在 src/auth.rs 中创建一个名为 'auth' 的新公共模块"
"将 User 结构体和 validate_user 函数从 src/main.rs 移动到 src/user.rs"
"将 process_data 函数的签名修改为接受引用而不是所有权"
📚 详细文档
架构
服务器采用模块化架构构建:
src/main.rs
- 入口点和服务器初始化。
src/lib.rs
- 模块声明。
src/server/
- MCP 服务器实现:
handler.rs
- 使用 rmcp
crate 的工具处理程序和 MCP 服务器逻辑。
parameters.rs
- 所有工具的参数类型定义。
src/analyzer/
- rust-analyzer
LSP 客户端集成:
client.rs
- LSP 客户端实现和协议处理。
src/tools/
- 模块化工具实现:
types.rs
- 工具调度器和定义。
analysis.rs
- 代码分析工具(如 find_definition
、find_references
等)。
generation.rs
- 代码生成工具(如 generate_struct
、generate_enum
等)。
refactoring.rs
- 代码重构工具(如 rename_symbol
、extract_function
等)。
formatting.rs
- 代码格式化工具。
quality.rs
- 质量保证工具(如 clippy
、生命周期检查)。
cargo.rs
- 项目管理工具。
navigation.rs
- 导航工具(如 workspace_symbols
)。
advanced.rs
- 高级特性(如类型层次结构、依赖项、模块)。
开发
开发环境运行
cargo run
测试单个工具
服务器通过 MCP 协议公开所有工具。为了调试,你可以:
- 运行服务器:
cargo run
。
- 通过标准输入(JSON-RPC 格式)发送 MCP 消息。
- 检查服务器日志和响应。
添加新工具
- 在相应的
src/tools/*.rs
文件中创建工具实现函数。
- 将参数结构体添加到
src/server/parameters.rs
中。
- 将工具添加到
src/tools/types.rs
中的 execute_tool
匹配语句中。
- 将工具定义添加到
src/tools/types.rs
中的 get_tools()
函数中。
- 在
src/server/handler.rs
中的 RustMcpServer
中添加相应的 #[tool]
方法。
- 如果需要,在
src/analyzer/client.rs
中添加分析器客户端方法。
故障排除
rust-analyzer
未找到
确保 rust-analyzer
已安装且可访问。服务器将按以下顺序查找 rust-analyzer
:
RUST_ANALYZER_PATH
环境变量指定的路径。
- 默认位置:
~/.cargo/bin/rust-analyzer
。
要使用自定义路径,请设置环境变量:
export RUST_ANALYZER_PATH=/custom/path/to/rust-analyzer
或者在 MCP 客户端配置中进行配置(见上述配置部分)。
MCP 连接问题
- 验证 MCP 客户端配置中的服务器二进制文件路径。
- 检查二进制文件是否具有执行权限:
chmod +x target/release/rustmcp
。
- 确保没有其他进程使用相同的 MCP 服务器名称。
LSP 通信错误
- 验证
rust-analyzer
是否可以独立工作:rust-analyzer --version
。
- 检查你的 Rust 项目是否有有效的
Cargo.toml
文件。
- 确保调用工具时工作区路径正确。
🤝 贡献
- 分叉本仓库。
- 创建一个功能分支。
- 实现你的更改并编写测试。
- 提交拉取请求。