Rust代码分析服务

fcp-rust是一个通过rust-analyzer为Rust代码库提供导航、检查和重构功能的MCP服务器。

  • by os-tack
  • Rust
  • 本地部署
  • 6 星标
  • 更新于
在 GitHub 查看 aetherwing-io/fcp-rust

使用说明

fcp锈

通过Rust分析器为Rust代码库提供MCP服务器。

它的作用

fcp-rust允许LLM通过意图级命令导航、检查和重构rust代码。LLM发送以下操作,而不是读取原始源文件 find Config @kind:struct 或 rename old_name new_name @file:main.rs fcp-rust将它们通过锈迹分析仪的LSP进行路由,以获得准确、项目感知的结果。建立在 FCP 框架。

使用Rust编写 rmcp 用于MCP传输和锈蚀分析仪作为语言智能后端。

快速示例

rust_session('open /path/to/my-project')

rust_query('find Config @kind:struct')
rust_query('refs Config @file:main.rs')
rust_query('diagnose')

rust([
  'rename old_handler handle_request @file:routes.rs',
  'generate Display @struct:Config',
])

rust_query('map')

可用的MCP工具

工具 目的
rust(ops) 批量突变——重命名、提取、内联、生成、导入
rust_query(q) 检查代码库——查找、定义、引用、符号、诊断、映射
rust_session(action) 生命周期——打开、状态、关闭
rust_help() 完整参考卡
enrich(path) 从单个.rs文件中提取诊断和符号(不需要会话)

动词引用--导航

动词 语法
find find QUERY [kind:KIND] [@selectors...]
def def SYMBOL [@selectors...]
refs refs SYMBOL [@selectors...]
symbols symbols PATH [kind:KIND]
impl impl SYMBOL [@selectors...]

动词参考——检查

动词 语法
diagnose diagnose [PATH] [@all]
inspect inspect SYMBOL [@selectors...]
callers callers SYMBOL [@selectors...]
callees callees SYMBOL [@selectors...]
map map
unused unused [@file:PATH]

动词指称——变异

动词 语法
rename rename SYMBOL NEW_NAME [@selectors...]
extract extract FUNC_NAME @file:PATH @lines:N-M
inline inline SYMBOL [@selectors...]
generate generate TRAIT @struct:NAME
import import SYMBOL @file:PATH @line:N

动词引用--会话

动词 语法
open open PATH
status status
close close

选择器

@file:PATH          Filter by file path substring
@struct:NAME        Filter by containing struct
@trait:NAME         Filter by containing trait
@kind:KIND          Filter by symbol kind (function, struct, enum, etc.)
@module:NAME        Filter by module name
@line:N             Filter by exact line number
@lines:N-M          Line range (for extract)

安装

从源代码构建

cargo install --git https://github.com/os-tack/fcp-rust

MCP客户端配置

{
  "mcpServers": {
    "fcp-rust": {
      "command": "fcp-rust"
    }
  }
}

建筑

src/main.rs                    MCP server — 4 tools, stdio transport
    │
src/enrich.rs                  Stateless diagnostics + symbol extraction (no session required)
    │
src/mcp/                       MCP integration
  ├── server.rs                RustServer (rmcp tool handlers)
  └── params.rs                Request/response types
    │
src/domain/                    Domain layer
  ├── verbs.rs                 Verb registration (query + mutation + session)
  ├── model.rs                 RustModel (workspace state, LSP client, symbol index)
  ├── query.rs                 Query handlers (find, def, refs, diagnose, map, etc.)
  ├── mutation.rs              Mutation handlers (rename, extract, inline, generate)
  └── format.rs                Output formatting
    │
src/resolver/                  Symbol resolution
  ├── selectors.rs             @file, @struct, @trait, @kind, @module, @line, @lines
  ├── index.rs                 In-memory SymbolIndex
  ├── pipeline.rs              Multi-tier resolution (index → LSP → tree-walk)
  └── fuzzy.rs                 Fuzzy matching
    │
src/lsp/                       rust-analyzer integration
  ├── client.rs                JSON-RPC client
  ├── transport.rs             stdio transport
  ├── types.rs                 LSP type definitions
  ├── workspace_edit.rs        Apply edits to disk
  └── lifecycle.rs             Server lifecycle management
    │
src/fcpcore/                   FCP framework (Rust port)
  ├── tokenizer.rs             DSL tokenizer
  ├── parsed_op.rs             Operation parser
  ├── verb_registry.rs         Verb spec registry + reference card
  ├── event_log.rs             Event sourcing (undo/redo)
  ├── session.rs               Session lifecycle
  └── formatter.rs             Response formatter

发展

cargo test          # Run all tests
cargo build         # Build binary
cargo clippy        # Run lints

许可证

麻省理工学院