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
许可证
麻省理工学院