首页
看点啥
插画图片
首页 看点啥 每日一个开源项目(第135篇):codebase-memory-mcp - 为 AI Agent 构建代码库知识图谱

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

2026-07-29 0

引言

用纯 C 编写、负责构建代码库知识图谱的 MCP 服务器 codebase-memory-mcp,是“每日一个开源项目”系列第135篇文章介绍的主角。

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

当你使用 Claude Code 处理一个中型项目,Agent 通常会逐个文件理解代码结构:查看目录后读取几个关键文件,接着追踪引用并继续读取更多文件……每一步都会消耗 token,新会话还得从头再来,面对大型代码库很快便会达到上下文限制。

codebase-memory-mcp 采用另一种思路:预先提取代码库结构并生成持久化知识图谱,再将其存入 SQLite。Agent 想了解代码结构时,可以直接查询图谱而不必读取文件,让“查询已有的结构记忆”取代“每次重新探索”。这一设计转变带来了 120 倍的 token 差距。

你将学到什么

前置知识

项目背景

项目简介

作为代码智能 MCP 服务器,codebase-memory-mcp 会将代码库结构构建为持久化知识图谱,使 AI Agent 不再依赖文件读取,而是通过结构化查询理解代码。

此处使用“知识图谱”一词有明确含义:代码结构元素构成节点,包括文件、类、函数、路由和资源;调用、继承、导入、HTTP 调用及数据流等结构关系则构成边。整张图保存在 SQLite 数据库中,并支持 Cypher 风格的图查询语言。

学术论文(arXiv:2603.27277)为项目提供支撑;在 Anthropic 开源后的早期高质量 MCP Server 中,它是其中之一。

作者/团队介绍

项目数据

主要功能

核心作用

传统方式(逐文件读取):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_* 边类型链接多个已索引的仓库,分析服务间依赖

快速开始

安装:

# 一键安装脚本curl -fsSL https://raw.githubusercontent.com/DeusData/codebase-memory-mcp/main/install.sh | bash# npmnpm install -g codebase-memory-mcp# PyPIpip install codebase-memory-mcp# Homebrew (macOS)brew install deusdata/tap/codebase-memory-mcp

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

codebase-memory-mcp setup claude-code

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

{"mcpServers": {"codebase-memory": {"command": "codebase-memory-mcp","args": ["serve"]}}}

在 Claude Code 中使用:

# 告诉 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 直接查询:

# 搜索包含 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查看索引状态和进度

项目详细剖析

知识图谱数据模型

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

部分节点类型:

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

边类型(部分):

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

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

两层解析架构

解析流水线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 类似,图谱对此提供支持:

-- 找出所有被超过 5 个函数调用的函数(高耦合节点)MATCH (g:Function)<-[:CALLS]-(f:Function)WITH g, count(f) AS caller_countWHERE caller_count > 5RETURN g.name, caller_countORDER 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 内核:75K 文件,28M LOC~3 分钟
约 10 万行的 Django:完整索引~6 秒
平均规模仓库毫秒级
Cypher 查询小于1ms
追踪调用路径(深度 5)小于10ms
死代码检测~150ms

性能的基础在于纯 C 实现:索引全程都在 C 层完成,因此不存在 GC 暂停、JVM 预热或 Python 解释器开销。

团队协作:共享图谱文件

这一设计值得单独介绍:

# 把压缩后的图谱文件提交到 gitgit add .codebase-memory/graph.db.zstgit commit -m "update codebase knowledge graph"git push# 队友克隆后直接用,不需要重新索引git clone ...codebase-memory-mcp serve# 图谱已经在 .codebase-memory/ 里

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

安全设计

尽管项目以单一可执行二进制分发,存在供应链风险,但其安全措施的完善程度超过多数同类项目:

项目地址与资源

官方资源

分发渠道

官方目录涵盖 MCP Registry,以及 Chocolatey、AUR、Winget、Scoop、Homebrew、PyPI、npm

总结

codebase-memory-mcp 针对一个系统性问题给出了工程方案:AI Agent 每次会话都重新读取文件,探索代码库的效率很低,其 token 消耗达到结构查询的 120 倍。

数据库领域早已形成成熟的知识图谱思路,稀缺的是针对代码库 + MCP 接口完成专门设计与实现的工具。多语言代码库之所以能被实际处理,依靠158 语言覆盖及 Hybrid LSP 语义层解析;Agent 借助14 个 MCP 工具的接口,可以准确表达所需结构信息;而纯 C + 零依赖的实现,则让它跻身分发最便捷、性能最稳定的选项之列。

如果开发者长期处理同一个代码库,或使用 Claude Code 面对超过 5 万行代码的项目,这款 MCP 服务器值得安装体验。

每个 AI Agent 与技能都经过真实企业工作流验证,浮夸内容被剔除,真正有用的得以保留——前往 PrimeSkills 探索这个精选市场。

访问我的个人主页,可以发现更多有趣的产品与有价值的见解。

喜欢(0)

上一篇

手把手带你为 AI Agent 搭建身份系统

手把手带你为 AI Agent 搭建身份系统

下一篇

mini-cc:用最少的代码,复刻一个“真正能干活”的 AI 编程智能体(并且把架构讲明白)

mini-cc:用最少的代码,复刻一个“真正能干活”的 AI 编程智能体(并且把架构讲明白)
猜你喜欢