每日一个开源项目(第135篇):codebase-memory-mcp - 给 AI Agent 一张代码库的知识图谱

引言

"AI Agent 探索代码库时读取每一个文件,消耗 412,000 个 token。换成知识图谱查询,只需要 3,400 个 token。"

这是"每日一个开源项目"系列的第135篇文章 。今天的主角是 codebase-memory-mcp------一个用纯 C 编写的代码库知识图谱 MCP 服务器。

你用 Claude Code 处理一个中型项目时,Agent 会怎么理解代码结构?通常是逐文件读取:先看目录结构,再读几个关键文件,再追踪引用,再读更多文件......每一步都在消耗 token,每次新会话都要重新来一遍,大型代码库里很快就触到上下文限制。

codebase-memory-mcp 的思路是:先把代码库的结构信息提取成持久化的知识图谱,存进 SQLite;Agent 需要了解代码结构时,不读文件,查图谱。从"每次重新探索"变成"查询已有的结构记忆"。120 倍的 token 差距来自这个设计改变。

你将学到什么

  • 代码知识图谱的数据模型:节点类型和边类型是什么
  • 两层解析架构:Tree-sitter 语法层 + Hybrid LSP 语义层
  • 14 个 MCP 工具的功能分布:从索引到 Cypher 查询
  • 性能数据:Linux 内核级别的代码库需要多久建完图谱
  • 团队协作场景:共享压缩图谱文件的工作流
  • 安全设计:SLSA Level 3、Sigstore 签名、VirusTotal 扫描

前置知识

  • 使用过 Claude Code 或其他支持 MCP 的 AI 编程工具
  • 了解代码库结构(函数、类、调用关系)的基本概念
  • 了解 MCP 协议的基本概念

项目背景

项目简介

codebase-memory-mcp 是一个代码智能 MCP 服务器,把代码库的结构信息构建成持久化的知识图谱,让 AI Agent 通过结构化查询而非文件读取来理解代码。

"知识图谱"在这里是精确的词:节点是代码结构元素(文件、类、函数、路由、资源),边是结构关系(调用、继承、导入、HTTP 调用、数据流),整个图存在 SQLite 数据库里,支持 Cypher 风格的图查询语言。

项目是 Anthropic 开源后最早出现的高质量 MCP Server 之一,背后有学术论文支撑(arXiv:2603.27277)。

作者/团队介绍

  • 组织: DeusData
  • 语言: 纯 C(零运行时依赖)
  • License: MIT
  • 最新版本: v0.8.1
  • 测试用例: 5,604 个

项目数据

  • ⭐ GitHub Stars: 5,400+
  • 🍴 Forks: 491+
  • 📄 License: MIT
  • 🔬 论文: arXiv:2603.27277

主要功能

核心作用

scss 复制代码
传统方式(逐文件读取):
AI Agent → 读 file1.py → 读 file2.py → 读 file3.py → ...
            ↓
         ~412,000 tokens,每次会话重复,遇到上下文限制

知识图谱方式:
AI Agent → query_graph("MATCH (f:Function)-[:CALLS]->(g)...")
            ↓
         ~3,400 tokens,结果来自持久化图谱,秒级响应

使用场景

  1. 大型代码库理解:接手陌生代码库时,通过图查询快速定位关键结构,不需要逐文件阅读
  2. 重构辅助 :查找所有调用某函数的路径(trace_path),确认改动影响范围
  3. 死代码检测:找到没有被任何调用链触及的孤立函数
  4. 架构分析:用 Leiden 社区检测算法自动识别代码的模块边界
  5. 跨仓库分析CROSS_* 边类型链接多个已索引的仓库,分析服务间依赖

快速开始

安装

bash 复制代码
# 一键安装脚本
curl -fsSL https://raw.githubusercontent.com/DeusData/codebase-memory-mcp/main/install.sh | bash

# npm
npm install -g codebase-memory-mcp

# PyPI
pip install codebase-memory-mcp

# Homebrew (macOS)
brew install deusdata/tap/codebase-memory-mcp

配置到 Claude Code(自动配置,支持 11 个 Agent):

bash 复制代码
codebase-memory-mcp setup claude-code

手动配置 ~/.claude/mcp.json

json 复制代码
{
  "mcpServers": {
    "codebase-memory": {
      "command": "codebase-memory-mcp",
      "args": ["serve"]
    }
  }
}

在 Claude Code 中使用

bash 复制代码
# 告诉 Agent 索引当前项目
"Index this project"
# Agent 调用 index_repository,几秒到几分钟后图谱建完

# 之后所有代码探索走图谱,不走文件读取
"Find all functions that call the authentication handler"
"What does the payment flow look like from API to database?"
"Are there any functions that are never called?"

CLI 直接查询

bash 复制代码
# 搜索包含 Handler 的函数
codebase-memory-mcp cli search_graph \
  '{"name_pattern": ".*Handler.*", "label": "Function"}'

# 追踪某函数的调用路径
codebase-memory-mcp cli trace_path \
  '{"function_name": "processPayment", "direction": "both"}'

# Cypher 图查询
codebase-memory-mcp cli query_graph \
  '{"query": "MATCH (f:Function)-[:CALLS]->(g:Function) WHERE f.name = \"main\" RETURN g.name"}'

14 个 MCP 工具

工具 功能
index_repository 索引代码库,构建或更新知识图谱
search_graph 按名称模式/标签搜索节点
search_code 四阶段混合代码搜索(grep + 图智能)
semantic_query 向量嵌入语义搜索(Nomic nomic-embed-code)
trace_path 追踪函数调用链(可指定方向和深度)
query_graph 原生 Cypher 图查询
find_dead_code 检测未被调用的孤立代码
analyze_architecture 用 Leiden 算法检测模块边界
get_node 获取单个节点的详细信息
list_routes 列出所有 HTTP 路由(REST API 分析)
get_dependencies 获取包/模块的依赖关系
get_graph_stats 图谱统计(节点数、边数、覆盖率)
watch_repository 启动后台 Git 感知自动同步
get_index_status 查看索引状态和进度

项目详细剖析

知识图谱数据模型

图谱里的节点和边涵盖代码库的完整结构语义:

节点类型(部分)

sql 复制代码
Project     ← 仓库根节点
Package     ← 包/模块
File        ← 源文件
Class       ← 类定义
Function    ← 独立函数
Method      ← 类方法
Route       ← HTTP 路由端点
Resource    ← 基础设施资源(K8s、Docker)

边类型(部分)

vbnet 复制代码
CALLS           ← 函数/方法调用关系
IMPORTS         ← 模块导入关系
INHERITS        ← 类继承关系
HTTP_CALLS      ← 跨服务 HTTP 调用
EMITS           ← 事件发送(消息队列)
LISTENS_ON      ← 事件监听
DATA_FLOWS      ← 数据流向关系
SIMILAR_TO      ← MinHash 近似重复代码
CROSS_*         ← 跨仓库依赖边

这个数据模型的精度超过大多数 IDE 的符号索引。DATA_FLOWSHTTP_CALLS 边需要理解运行时行为,不只是语法结构。

两层解析架构

yaml 复制代码
解析流水线
    ↓
Layer 1: Tree-sitter
    ├── 158 种语言的语法分析
    ├── 提取:函数/类/方法定义、调用关系、导入
    └── 速度极快,但只有语法层面的信息
         (不知道泛型实例化的具体类型、跨模块的类型解析)
    ↓
Layer 2: Hybrid LSP(9 种语言)
    ├── Python、TypeScript/JS、PHP、C#
    ├── Go、C/C++、Java、Kotlin、Rust
    └── 类型感知分析:
        ├── 跨模块调用解析(知道 foo() 调用的是哪个 foo)
        ├── 泛型实例化
        ├── 继承链解析
        └── 类型推断

关键:Hybrid LSP 不启动语言服务器进程,在进程内完成类型解析

v0.7.0 引入 Hybrid LSP 后,TypeScript 编译器索引时间从 ~5,100 秒降到 ~50 秒(100 倍提升)。代价是仅对 9 种主流语言有效,其余 149 种语言只有 Tree-sitter 语法层。

Cypher 查询语言

图谱支持类似 Neo4j Cypher 的查询语法:

cypher 复制代码
-- 找出所有被超过 5 个函数调用的函数(高耦合节点)
MATCH (g:Function)<-[:CALLS]-(f:Function)
WITH g, count(f) AS caller_count
WHERE caller_count > 5
RETURN g.name, caller_count
ORDER BY caller_count DESC

-- 找出完整的认证调用链
MATCH path = (api:Route)-[:CALLS*..5]->(auth:Function)
WHERE auth.name CONTAINS "authenticate"
RETURN path

-- 检测循环依赖
MATCH (a:Package)-[:IMPORTS]->(b:Package)-[:IMPORTS]->(a)
RETURN a.name, b.name

查询延迟 小于1ms,因为 SQLite 在 WAL 模式下运行,图遍历和过滤在 C 层执行。

性能基准

在 Apple M3 Pro 上测试:

操作 时间
Linux 内核完整索引(28M LOC,75K 文件) ~3 分钟
Django 完整索引(约 10 万行) ~6 秒
平均规模仓库 毫秒级
Cypher 查询 小于1ms
追踪调用路径(深度 5) 小于10ms
死代码检测 ~150ms

纯 C 实现是性能的基础:没有 GC 暂停,没有 JVM 预热,没有 Python 解释器开销,索引过程全程在 C 层进行。

团队协作:共享图谱文件

这是一个值得单独说的设计:

bash 复制代码
# 把压缩后的图谱文件提交到 git
git add .codebase-memory/graph.db.zst
git commit -m "update codebase knowledge graph"
git push

# 队友克隆后直接用,不需要重新索引
git clone ...
codebase-memory-mcp serve  # 图谱已经在 .codebase-memory/ 里

graph.db.zst 是 Zstandard 压缩的 SQLite 数据库。对大型代码库,团队里每人重新索引一遍浪费时间;由 CI 生成并提交图谱文件,其他人直接用。

安全设计

单一可执行二进制的分发方式有供应链风险,这个项目的安全措施比多数同类项目完善:

  • SLSA Level 3 构建来源:每个 Release 的构建过程有可验证的来源证明
  • Sigstore cosign 无密钥签名:不需要管理 GPG 密钥,签名可以通过 Sigstore 链验证
  • VirusTotal 扫描:v0.8.1 的二进制在 72 个引擎上 0/72 检出
  • CodeQL SAST:代码安全静态分析作为发布门禁
  • 本地处理承诺:所有代码处理发生在本地,不发送到外部服务
  • HTTP 绑定 127.0.0.1:内置可视化界面只接受本地连接,v0.8.1 明确排除了任何非 localhost 访问路径

项目地址与资源

官方资源

分发渠道

npm、PyPI、Homebrew、Scoop、Winget、AUR、Chocolatey、MCP Registry 官方目录


总结

codebase-memory-mcp 的核心贡献是把一个系统性问题做出了工程解答:AI Agent 探索代码库的方式效率极低,每次会话重新读文件,token 消耗是结构查询的 120 倍。

知识图谱的思路在数据库领域是成熟的,但专门为代码库 + MCP 接口设计并实现的工具并不多。纯 C + 零依赖的实现使它成为分发最容易、性能最稳定的选项之一;158 语言覆盖和 Hybrid LSP 语义层解析使它对多语言代码库实际可用;14 个 MCP 工具的接口设计使 Agent 可以精确描述想要的结构信息。

对于长期在同一个代码库上工作的开发者,或者使用 Claude Code 处理超过 5 万行代码的场景,这个 MCP 服务器值得装上试试。


探索 PrimeSkills ------ 精选 AI Agent 与技能的市场,每一个都经过真实企业工作流验证,去掉浮夸,留下真正有用的。

欢迎访问我的个人主页,发现更多有价值的见解和有趣的产品。

相关推荐
IT_陈寒4 小时前
JavaScript的闭包把我坑惨了,说好的内存会自动回收呢?
前端·人工智能·后端
jooloo7 小时前
Codex 间歇性 400 之谜:一条对话里,它为什么有时候用 chat/completions,有时候切到 responses?
人工智能
用户5191495848458 小时前
OpenSSL PKCS#12 PBMAC1 堆栈缓冲区溢出漏洞 (CVE-2025-11187) 分析与验证
人工智能·aigc
用户5191495848459 小时前
HP Sound Research SECOMNService 权限提升漏洞利用工具
人工智能·aigc
用户018349301699 小时前
给 AI 智能体能力包一层 BFF,前端只调一个接口
人工智能
uniquejing9 小时前
《每次 API 调用前扔掉 43% Token,我开源了一个 AI 提示词瘦身工具》
开源
黄忠12 小时前
大模型之LangGraph技术体系
python·llm
不好听61312 小时前
Tool:让大模型长出手脚
llm·agent