
























今天在 GitHub Trending 上看到一个令人印象深刻的项目:codebase-memory-mcp,它用纯 C 实现了一个零依赖的代码知识图谱引擎,能在毫秒级回答结构化查询,让 AI 编程代理的代码理解能力从"逐文件搜索"跃升到"图谱遍历"。
codebase-memory-mcp 是一个面向 AI 编程代理的代码智能后端,核心能力是将整个代码仓库索引为一棵持久化的知识图谱(Knowledge Graph),通过 MCP 协议暴露 14 个工具供代理调用。
核心解决的问题: AI 编程代理在理解大型代码库时,传统的 grep / read 逐文件搜索方式极其低效——5 次结构化查询仅需 ~3,400 tokens,而逐文件搜索需要 ~412,000 tokens,差距 120 倍。codebase-memory-mcp 通过预构建调用链、跨服务 HTTP 链接、类型推断等结构化信息,将代码理解从文本匹配升级为图谱遍历。
关键指标:
| 指标 | 数据 |
|---|---|
| 支持语言 | 158 种(内置 tree-sitter 语法) |
| Linux 内核全量索引 | 3 分钟(28M LOC, 75K 文件) |
| Django 索引 | ~6 秒 |
| Cypher 查询响应 | <1ms |
| Token 消耗降低 | 99.2%(120x fewer tokens) |
| 跨平台 | macOS / Linux / Windows,单静态二进制 |
项目采用 RAM-first 流水线 架构,整个索引过程在内存中完成:
源码 → 文件发现(.gitignore/.cbmignore) → tree-sitter AST →
定义提取 → 调用链构建 → Hybrid LSP 类型推断 →
HTTP/gRPC 路由链接 → 知识图谱持久化
第一层:Tree-sitter 语法解析(158 语言全覆盖)
所有 tree-sitter 语法内嵌编译到二进制中,零外部依赖。这一层提取函数定义、类结构、导入关系、调用位置等语法级信息。
第二层:Hybrid LSP 语义类型推断(11 语言深度支持)
Tree-sitter 只能做语法分析,无法解析跨模块的类型引用。Hybrid LSP 层用纯 C 实现了各语言的类型解析算法:
dataclass/Mapped[T]/BaseModel 泛型推断.d.ts 声明合并use 声明 + trait 方法 + UFCS 静态路径这意味着生成的 CALLS 边不仅记录了调用位置,还解析了实际调用的目标方法——等同于 IDE 的 “Go to Definition” 能力。
节点类型: Project, Package, Folder, File, Module, Class, Function, Method, Interface, Enum, Type, Route, Resource
边类型(精选):
CALLS — 函数调用链IMPORTS — 模块导入HTTP_CALLS / ASYNC_CALLS — 跨服务调用EMITS / LISTENS_ON — 事件通道(Socket.IO, EventEmitter 等)DATA_FLOWS — 参数到参数的数据流映射SIMILAR_TO — MinHash + LSH 近似克隆检测SEMANTICALLY_RELATED — 语义关联(词汇不匹配但语义等价)内置 Nomic nomic-embed-code 嵌入模型(40K tokens, 768d int8),编译进二进制,无需 API Key 或 Ollama。11 信号联合评分:TF-IDF、RRI、API/类型/装饰器签名、AST 轮廓、数据流、Halstead-lite、MinHash、模块邻近度、图扩散。
实现了 openCypher 只读子集,支持 MATCH/WHERE/WITH/RETURN/ORDER BY/UNION/UNWIND,以及 EXISTS { (n)-[:TYPE]->() } 等单跳存在性检查。例如查找无人调用的死代码:
MATCH (f:Function) WHERE NOT EXISTS { (f)<-[:CALLS]-() } RETURN f.name
# macOS / Linux
curl -fsSL https://raw.githubusercontent.com/DeusData/codebase-memory-mcp/main/install.sh | bash
# 含 3D 图可视化 UI
curl -fsSL https://raw.githubusercontent.com/DeusData/codebase-memory-mcp/main/install.sh | bash -s -- --ui
安装脚本会自动:
重启编程代理后,在代理中说 “Index this project” 即可。代理会调用 index_repository 工具开始索引。
如不使用 install 命令,可手动添加到 ~/.claude/.mcp.json:
{
"mcpServers": {
"codebase-memory-mcp": {
"command": "/path/to/codebase-memory-mcp",
"args": []
}
}
}
Agent: "这个项目的架构是怎样的?"
→ get_architecture → 返回语言、包、入口点、路由、热点、边界、层级、聚类
Agent: "谁调用了 ProcessOrder?"
→ trace_path(function_name="ProcessOrder", direction="inbound")
→ 返回完整调用链
Agent: "修改了这个函数会影响什么?"
→ detect_changes → 映射 git diff 到受影响符号 + 风险分类
Agent: "找出所有没有调用者的函数"
→ search_graph(label="Function", min_in_degree=0)
+ Cypher: MATCH (f:Function) WHERE NOT EXISTS { (f)<-[:CALLS]-() } RETURN f.name
自动检测 REST 路由并在服务间建立 HTTP_CALLS 边,还能识别 gRPC、GraphQL、tRPC 的服务定义。
将 .codebase-memory/graph.db.zst(zstd 压缩的知识图谱快照)提交到仓库,队友克隆后直接解压使用,跳过全量索引。压缩比 8–13:1,配合 .gitattributes merge=ours 避免合并冲突。
所有 MCP 工具均可命令行调用:
codebase-memory-mcp cli search_graph '{"name_pattern": ".*Handler.*"}'
codebase-memory-mcp cli trace_path '{"function_name": "Search", "direction": "both"}'
codebase-memory-mcp cli query_graph '{"query": "MATCH (f:Function) RETURN f.name LIMIT 5"}'
codebase-memory-mcp --ui=true --port=9749
# 浏览器打开 http://localhost:9749 即可看到 3D 交互式图谱
Q: /mcp 不显示服务?
检查 .mcp.json 中路径是否为绝对路径。验证方式:echo '{}' | /path/to/binary 应输出 JSON。重启代理。
Q: trace_path 返回 0 结果?
先用 search_graph(name_pattern=".*PartialName.*") 查找精确函数名,Hybrid LSP 的类型推断需要精确匹配。
Q: 查询返回了错误项目的结果?
添加 project="name" 参数。用 list_projects 查看已索引项目名称。
Q: Windows SmartScreen 警告?
当前二进制未签名,点击 “More info” → “Run anyway”。可用 checksums.txt 校验 SHA-256。
Q: 索引大仓库内存不够?
RAM-first 管线在索引期间占内存,完成后释放。可通过 CBM_WORKERS 环境变量减少并行工作线程数。
Q: 想忽略某些文件?
在项目根目录创建 .cbmignore(语法同 .gitignore),或设置 auto_index_limit 限制文件数。
codebase-memory-mcp 填补了 AI 编程代理生态中的一个关键空白:结构化代码理解。它用纯 C 零依赖的单二进制,实现了从 158 种语言的语法解析到 11 种语言的语义类型推断,再到跨服务调用链链接的全链路能力。120 倍的 token 节省和毫秒级的查询响应,使其成为大型代码库中 AI 代理的"代码记忆"。对于任何需要在大型项目中使用 AI 辅助编程的开发者,这个项目值得立刻安装试用。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。