🚀 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 文件。