使用说明
编码图MCP
一个自用的Rust MCP服务器,为AI编码代理提供跨会话的持久代码理解和内存。作为个人工具构建,用于探索当您向LLM结构化访问代码库的符号图、会话状态和积累的项目知识时会发生什么。
它的作用
Codegraph作为 MCP服务器 (stdio传输)并公开了26个AI代理可以调用的工具:
-
代码图 --使用树形图(Rust、TypeScript、JavaScript、Python、Go)解析源代码,提取符号及其关系(调用、导入、继承),并将其存储为有向图。代理可以搜索符号、遍历依赖关系和理解文件结构,而无需读取整个文件。
-
会话内存 --跟踪代理的当前任务、子任务、决策和工作环境。在上下文窗口压缩中幸存下来,以便代理可以从停止的地方继续。
-
学习系统 --记录模式(有效的东西)、失败(要避免的陷阱)和解决方案沿袭(有结果的尝试链)。反射引擎将结果转换为可重用的知识。建议系统将这三种方法结合起来,为新任务推荐方法。
-
技能提炼 --生成一个
SKILL.md从积累的模式、失败和惯例中——对项目特定知识的机器可读总结。 -
跨语言推理 --检测前端代码中的REST/GraphQL调用,并将其与后端路由定义相匹配。
-
Bash压缩 --压缩详细的命令输出(git状态、测试结果、目录列表)以减少令牌使用。
技术栈
| 组件 | 技术 |
|---|---|
| 语言 | Rust(异步,tokio) |
| 协议 | MCP-over-stio(JSON-RPC 2.0) |
| 解析 | 树保姆(5种语言语法) |
| Graph | petgraph(带BFS遍历的有向图) |
| 存储 | libSQL/SQLite(两个数据库:代码图+学习) |
| 哈希 | xxh3(基于内容的变化检测) |
| 配置 | TOML |
建筑
src/
├── main.rs # Entry point
├── config.rs # Project root detection, config.toml
├── mcp/ # MCP protocol layer
│ ├── protocol.rs # JSON-RPC 2.0 + MCP types
│ ├── transport.rs # Stdio transport
│ ├── server.rs # Request dispatch, lazy init
│ └── tools.rs # Tool registry (26 tools)
├── store/ # Persistence
│ ├── db.rs # SQLite CRUD
│ ├── graph.rs # In-memory petgraph
│ └── migrations.rs # Schema versioning
├── code/ # Code analysis
│ ├── parser.rs # tree-sitter symbol extraction
│ ├── indexer.rs # Incremental indexing + cross-file resolution
│ ├── languages.rs # Language configs + grammars
│ └── cross_language.rs
├── session/ # Session state machine
│ └── state.rs # Task, decisions, context tracking
├── learning/ # Learning system
│ ├── patterns.rs # Pattern storage + scoped queries
│ ├── failures.rs # Failure records + severity
│ ├── confidence.rs # Time decay + drift detection
│ ├── lineage.rs # Solution attempt tracking
│ ├── reflection.rs # Outcome → pattern/failure conversion
│ ├── niches.rs # Behavioral clustering
│ └── sync.rs # JSON export
├── skill/ # Skill distillation
│ ├── distill.rs # Pattern → SKILL.md generation
│ ├── conventions.rs # Convention clustering
│ └── render.rs # Markdown rendering
└── compress/ # Token-saving output compression
├── bash.rs # Command dispatch
├── git.rs # Git output compression
├── test_output.rs # Test result compression
└── analytics.rs # Savings tracking
设置
1.建造
git clone https://github.com/subhankar-chowdhury/codegraph-mcp.git
cd codegraph-mcp
cargo build --release
二进制文件将位于 target/release/codegraph.
2.添加到您的MCP客户端
服务器通过以下方式进行通信 标准 (换行符分隔的JSON-RPC 2.0)--您的MCP客户端必须通过stdio传输连接,而不是HTTP/SSE。将其添加到您使用的任何MCP客户端:
克劳德代码 (~/.claude.json):
{
"mcpServers": {
"codegraph": {
"command": "/absolute/path/to/codegraph-mcp/target/release/codegraph",
"type": "stdio"
}
}
}
光标 (.cursor/mcp.json 在项目根目录中):
{
"mcpServers": {
"codegraph": {
"command": "/absolute/path/to/codegraph-mcp/target/release/codegraph",
"type": "stdio"
}
}
}
替换 /absolute/path/to/codegraph-mcp 无论你在哪里克隆repo。
3.首轮
当您在任何git repo中启动会话时,Codegraph将:
- 自动检测项目根(向上查找
.git/) - 创建一个
.codegraph/默认目录config.toml - 等待您进行索引--运行
index_project(full: true)构建代码图
在初始索引之后,后续会话只需要 index_project() (增量——跳过未更改的文件)或者如果您没有更改代码,则完全不更改。
4.配置(可选)
编辑 .codegraph/config.toml 自定义:
[indexing]
exclude = ["node_modules", "target", ".git", "dist", "build", "__pycache__"]
max_file_size = 1048576 # 1 MiB
[learning]
decay_half_life = 90 # days
[cross_language]
enabled = true
运行测试
cargo test # 87 tests
cargo bench # criterion benchmarks
基准测试
在111K行Python代码库上独立测试了5种配置:Vanilla(grep/read)、Serena(LSP)、Codegraph、Serena+Codegraph和使用模式不佳的Codegraph。所有数字均来自实际测量的运行。
多步重构任务(真实测试)
一个现实的10步调查任务(读取方法、查找调用者、检查测试、理解接口、制定重构计划)。这就是每次查询节省的地方。
| 排名 | 配置 | 令牌 | 与香草 |
|---|---|---|---|
| 1 | 仅CG(紧凑型) | 36,790 | -23% |
| 2 | S+CG | 45424 | -5% |
| 3 | 香草 | 47693 | 基线 |
| 4 | 仅限塞雷娜 | 76228 | +60% |
| 5 | 仅CG(使用不当) | 78051 | +64% |
所有五个配置的准确性相同。纯粹的成本差异。压缩模式是默认模式——代理首先获取概述,仅在需要时请求特定符号的来源。
每次查询令牌节省
| 查询 | 抓取/读取 | 代码图 | 节省 |
|---|---|---|---|
| “谁使用诊断?” | 42478个标记 | 151个标记 | 99.6%(281倍) |
| “bootstrap()调用什么?” | 9431个令牌 | 366个令牌 | 96%(26倍) |
| “诊断中有什么。py?” | 14503个标记 | 1382个标记 | 90%(10倍) |
| “压缩后恢复” | ~20000个代币 | 95个代币 | 99.5%(210倍) |
Codegraph的成本随着答案大小而不是文件大小而变化——在更大的代码库上,差距会扩大。
学习系统(10节进化测试)
10个主题重叠的连续会议。第9-10节课故意与之前的课重叠,以测试知识复合。
- 方法生成:工作。
suggest_approach在各次会议上返回了越来越具体的策略。在第9-10节课中,它明确地综合了前几节课的学习成果(“利用第1+2+4节课。搜索redis。RedisError捕获。"). - 模式检索:工作。
recall_patterns使用置信度评分和时间衰减来显示文件路径和标签范围内的相关模式。 - 故障召回:工作。
recall_failures始终包括严重性严重的故障,并根据范围相关性过滤其他故障。
看 BENCHMARK.md 对于完整的方法论、所有5个配置、每个任务的细分和准确性分析。
我学到了什么
这是一个探索“AI代理记忆”设计空间的自用项目
- 紧凑模式就是一切。 编码图
compact=true(默认)比vanilla grep/read便宜23%,速度快32%。随着include_source=true就整个文件而言,这是64% 更糟该值位于结构化概述中,而不是通过额外的协议层转储源代码。 - 代码图的值在会话中复合。 在孤立的单个查询中,固定的代理开销会掩盖节省的成本。在包含18个以上查询的多步骤任务中,每个查询的节省(26-281x)占主导地位。
- 会话记忆真的很有用 对于达到上下文限制的长时间运行的任务,尽管其值随着上下文窗口的增长而缩小。
- 学习系统复合。 随着模式的积累,方法生成在会话中明显改善。“When X,do Y because Z”格式产生可操作、可重用的知识。
- MCP作为一种协议运行良好 对于这种工具。Stdio传输简单,工具/资源模型干净,延迟初始化(等待客户端的
initialize握手以解决项目根)是正确的选择。
许可证
麻省理工学院