Files
deusdata--codebase-memory-mcp/README.md
T
wehub-resource-sync 938d2268fb
CodeQL SAST / analyze (push) Waiting to run
OpenSSF Scorecard / scorecard (push) Waiting to run
DCO / dco (push) Waiting to run
docs: make Chinese README the default
2026-07-13 10:09:10 +00:00

41 KiB
Raw Blame History

Note

本文档由 WeHub 基于上游 README 翻译整理,属于社区翻译,非官方中文文档。
English · 原始项目 · 上游 README
原作者、版权与许可证归属以原始项目及本仓库 LICENSE 文件为准。

codebase-memory-mcp

GitHub Release License CI Tests Languages Hybrid LSP Agents Pure C Platform OpenSSF Scorecard SLSA 3 VirusTotal arXiv

面向 AI 编程智能体(AI coding agents)的最快、最高效的代码智能引擎。 普通仓库可在毫秒级完成全量索引,Linux 内核(2800 万行代码、7.5 万个文件)仅需 3 分钟。结构查询响应时间低于 1 毫秒。以单一静态二进制形式发布,支持 macOS、Linux 和 Windows —— 下载、运行 install,即可使用。

通过 tree-sitter 实现高质量解析,覆盖全部 158 种语言的 AST 分析,并结合 Hybrid LSP 语义类型解析 增强 Python、TypeScript / JavaScript / JSX / TSX、PHP、C#、Go、C、C++、Java、Kotlin、Rust 和 Perl —— 生成函数、类、调用链、HTTP 路由和跨服务链接的持久化知识图谱。14 个 MCP 工具。零依赖。可在 11 种编程智能体中即插即用。

研究 — 本项目的设计与基准测试详见预印本 Codebase-Memory: Tree-Sitter-Based Knowledge Graphs for LLM Code Exploration via MCP (arXiv:2603.27277)。在 31 个真实仓库上评估:答案质量 83%,相比逐文件探索,token 用量减少 10 倍,工具调用减少 2.1 倍。

安全与信任 — 本工具会读取你的代码库并写入智能体配置文件,这正是其设计用途。若你希望在运行前进行审计,完整源码在此 —— 每个发布二进制均经过签名、校验和扫描(70+ 款杀毒引擎)。所有处理 100% 在本地完成;你的代码绝不会离开你的机器。发现安全问题?我们希望知晓 —— 请参阅 SECURITY.md。安全是我们的首要优先级(Priority #1)。

Graph visualization UI showing the codebase-memory-mcp knowledge graph
内置 3D 图谱可视化(UI 变体)—— 在 localhost:9749 探索你的知识图谱

为什么选择 codebase-memory-mcp

  • 极致索引速度 — Linux 内核(2800 万行代码、7.5 万个文件)3 分钟完成。RAM 优先流水线:LZ4 压缩、内存 SQLite、融合 Aho-Corasick 模式匹配。索引完成后释放内存。
  • 即插即用 — macOSarm64/amd64)、Linuxarm64/amd64)和 Windowsamd64)单一静态二进制。无需 Docker、无运行时依赖、无需 API 密钥。下载 → install → 重启智能体 → 完成。
  • 158 种语言 — 内置(vendoredtree-sitter 语法编译进二进制。无需安装,不会损坏。
  • token 用量减少 120 倍 — 5 次结构查询:约 3,400 个 token,而逐文件搜索约 412,000 个。一次图谱查询可替代数十轮 grep/read 循环。
  • 11 种智能体,一条命令install 自动检测 Claude Code、Codex CLI、Gemini CLI、Zed、OpenCode、Antigravity、Aider、KiloCode、VS Code、OpenClaw 和 Kiro —— 为每种智能体配置 MCP 条目、指令文件和 pre-tool 钩子。
  • 内置图谱可视化 — 在 localhost:9749 提供 3D 交互式 UI(可选 UI 二进制变体)。
  • 基础设施即代码(Infrastructure-as-code)索引 — Dockerfile、Kubernetes 清单和 Kustomize 叠加层作为图谱节点索引并建立交叉引用。Resource 节点对应 K8s 资源类型,Module 节点对应 Kustomize 叠加层,并通过 IMPORTS 边连接被引用的资源。
  • 14 个 MCP 工具 — 搜索、追踪、架构分析、影响分析、Cypher 查询、死代码检测、跨服务 HTTP 链接、ADR 管理等。

快速开始

一行安装macOS / Linux):

curl -fsSL https://raw.githubusercontent.com/DeusData/codebase-memory-mcp/main/install.sh | bash

含图谱可视化 UI

curl -fsSL https://raw.githubusercontent.com/DeusData/codebase-memory-mcp/main/install.sh | bash -s -- --ui

WindowsPowerShell):

# 1. Download the installer
Invoke-WebRequest -Uri https://raw.githubusercontent.com/DeusData/codebase-memory-mcp/main/install.ps1 -OutFile install.ps1

# 2. (Optional but recommended) Inspect the script
notepad install.ps1

# 3. Unblock the downloaded file (removes Mark-of-the-Web restriction added by browsers/Invoke-WebRequest)
Unblock-File .\install.ps1

# 4. Run it
.\install.ps1

注意: 若出现脚本执行策略错误,请先运行 Set-ExecutionPolicy -Scope Process Bypass,或使用 PowerShell -ExecutionPolicy Bypass -File .\install.ps1 调用。

选项:--ui(图谱可视化)、--skip-config(仅二进制,不配置智能体)、--dir=<path>(自定义安装位置)。

重启你的编程智能体。说 "Index this project" —— 完成。

手动安装
  1. 最新发布版: 下载适合你平台的压缩包

    • codebase-memory-mcp-<os>-<arch>.tar.gzmacOS/Linux)或 .zipWindows)—— 标准版
    • codebase-memory-mcp-ui-<os>-<arch>.tar.gz / .zip —— 含图谱可视化
  2. 解压并安装(每个压缩包均包含 install.shinstall.ps1):

    macOS / Linux

    tar xzf codebase-memory-mcp-*.tar.gz
    ./install.sh
    

    Windows (PowerShell)

    Expand-Archive codebase-memory-mcp-windows-amd64.zip -DestinationPath .
    Unblock-File .\install.ps1
    .\install.ps1
    
  3. 重启 你的编程智能体。

install 命令会自动清除 macOS 隔离属性并对二进制进行临时签名 —— 无需手动执行 xattr/codesign

install 命令会自动检测所有已安装的编程智能体,并为每种智能体配置 MCP 服务器条目、指令文件、技能和 pre-tool 钩子。

图谱可视化 UI

UI 以独立的 ui 构建版本发布(内嵌前端)。各渠道默认安装的是精简的无头(headless)服务器;可通过以下方式选择 UI 构建版本:

  • install.sh 添加 --ui(见快速开始
  • npm CBM_VARIANT=ui npm install -g codebase-memory-mcp
  • PyPI CBM_VARIANT=ui pip install codebase-memory-mcp
  • 手动: 下载 codebase-memory-mcp-ui-<os>-<arch> 压缩包

然后运行:

codebase-memory-mcp --ui=true --port=9749

在浏览器中打开 http://localhost:9749。UI 作为后台线程与 MCP 服务器并行运行 —— 只要智能体已连接即可使用。

自动索引

在 MCP 会话启动时启用自动索引:

codebase-memory-mcp config set auto_index true

启用后,新项目会在首次连接时自动建立索引。此前已索引的项目会注册到后台 watcher,以便持续进行基于 git 的变更检测。可配置文件数量上限:config set auto_index_limit 50000

Watcher 注册由 auto_watch 单独控制(默认 true)。将 config set auto_watch false 设为可阻止会话将其项目注册到后台 watcher——在同时处理多个项目、且希望每个会话仅进行显式索引时很有用。

保持最新

codebase-memory-mcp update

MCP 服务器还会在启动时检查更新,并在首次工具调用时若有新版本可用则发出通知。

卸载

codebase-memory-mcp uninstall

会移除所有 agent 配置、skills、hooks 和 instructions。不会移除二进制文件或 SQLite 数据库。

功能

图与分析

  • 架构概览get_architecture 单次调用即可返回语言、包、入口点、路由、热点(hotspots)、边界、层级与聚类
  • 架构决策记录(Architecture Decision Recordsmanage_adr 在多个会话间持久化架构决策
  • Louvain 社区发现:通过对调用边聚类来发现功能模块
  • Git diff 影响映射detect_changes 将未提交变更映射到受影响的符号,并进行风险分类
  • 调用图(Call graph:跨文件与包解析函数调用(感知 import、类型推断)
  • 死代码检测:找出零调用者的函数,排除入口点
  • 类 Cypher 查询MATCH (f:Function)-[:CALLS]->(g) WHERE f.name = 'main' RETURN g.name

搜索

  • 语义搜索semantic_query):在整个图上进行向量搜索,由内置的 Nomic nomic-embed-code 嵌入(40K tokens768 维 int8)编译进二进制——无需 API key、无需 Ollama、无需 Docker。11 信号组合评分(TF-IDF、RRI、API/Type/Decorator 签名、AST 概要、数据流、Halstead-lite、MinHash、模块邻近度、图扩散)。
  • BM25 全文搜索:通过 SQLite FTS5,使用 cbm_camel_split 分词器(支持 camelCase / snake_case
  • 结构化搜索search_graph):正则名称模式、标签过滤、最小/最大度数、文件范围限定
  • 代码搜索search_code):仅对已索引文件进行图增强 grep

跨服务链接

  • HTTP 路由 ↔ 调用点匹配,带置信度评分
  • gRPC、GraphQL、tRPC 服务检测,并提取 protobuf Route
  • 通道检测EMITS / LISTENS_ON):支持 Socket.IO、EventEmitter 及通用 pub-sub 模式,覆盖 8 种语言,并进行常量解析

跨仓库智能

  • CROSS_* 将同一 store 下已索引的多个仓库中的节点相互链接
  • 多星系 3D UI 布局,用于跨仓库架构可视化
  • 跨仓库架构摘要,汇总已索引集群中的服务、路由与依赖

边类型(节选)

  • CALLSIMPORTSDEFINESIMPLEMENTSINHERITS
  • HTTP_CALLSASYNC_CALLS(跨服务)
  • EMITSLISTENS_ON(通道)
  • DATA_FLOWS,含参数到形参映射 + 字段访问链
  • SIMILAR_TOMinHash + LSH 近克隆检测,Jaccard 评分)
  • SEMANTICALLY_RELATED(词汇不匹配、同语言,score ≥ 0.80)

索引流水线

  • 158 个 vendored tree-sitter 语法 编译进二进制
  • 通用包 / 模块解析 —— 裸说明符如 @myorg/pkggithub.com/foo/baruse my_crate::foo 通过清单扫描解析(package.jsongo.modCargo.tomlpyproject.tomlcomposer.jsonpubspec.yamlpom.xmlbuild.gradlemix.exs*.gemspec
  • 基础设施即代码(Infrastructure-as-code)索引 —— Dockerfile、Kubernetes manifest、Kustomize overlay 作为图节点
  • 混合 LSP 语义类型解析,支持 Python、TypeScript / JavaScript / JSX / TSX、PHP、C#、Go、C、C++、Java、Kotlin、Rust 与 Perl —— 语言类型解析算法的轻量 C 实现,在结构上受主流 language server 启发并与之兼容,包括 tsserver / typescript-go、pyright、gopls、Roslyn、Eclipse JDT 与 rust-analyzer(参数绑定、返回类型推断、泛型替换、JSX 组件派发、纯 JS 文件的 JSDoc 推断、PHP 的 namespace + trait + late-static-binding 解析、C# 的文件作用域 namespace + records + LINQ 方法语法、Java 的类层次 + 重载 + lambda 解析、Kotlin 的扩展函数 + 作用域函数解析、Rust 的 trait 方法 + UFCS 解析)
  • RAM 优先流水线:LZ4 压缩、内存 SQLite、结束时单次 dump。之后释放内存。

分发与运行

  • 单一静态二进制,零基础设施:基于 SQLite,持久化到 ~/.cache/codebase-memory-mcp/
  • 自动同步:后台 watcher 检测文件变更并自动重新索引
  • 路由节点REST 端点为一等图实体
  • CLI 模式codebase-memory-mcp cli search_graph '{"project": "my-project", "name_pattern": ".*Handler.*"}'
  • 可通过以下渠道获取npm、PyPI、Homebrew、Scoop、Winget、Chocolatey、AUR、go install

团队共享图制品

向仓库提交单个压缩文件,队友即可跳过重新索引。

.codebase-memory/graph.db.zst 是位于源码旁的知识图 zstd 压缩快照。索引时会写入或刷新该制品;队友克隆仓库并首次运行 codebase-memory-mcp 时,制品会被解压,增量索引再补齐其本地 diff。

  • 格式SQLite 数据库,剥离索引,VACUUM INTO 压缩后,再以 zstd 1.5.7 压缩(典型压缩比 813:1)
  • 两层级
    • Bestzstd -9 + 索引剥离 + VACUUM INTO)—— 在显式执行 index_repository 时写入
    • Fastzstd -3)—— 由 watcher 写入,用于低延迟增量更新
  • 引导:本地无 DB 但存在制品时,index_repository 先导入制品,再运行增量索引 —— 避免完整重新索引的开销
  • 无合并烦恼:首次导出时会自动创建带 merge=ours.gitattributes 行,并发编辑不会在二进制制品上产生冲突
  • 可选:除非你主动提交,否则不会入库。若希望每个人都从零重新索引,可将 .codebase-memory/ 加入 .gitignore

其结果在理念上类似 graphify 的 graphify-out/ 目录,但以单个压缩文件呈现,具备显式两层级导出、完整性校验导入,且零合并摩擦。

工作原理

codebase-memory-mcp 是一个结构化分析后端 —— 它构建并查询知识图。它不包含 LLM。相反,它依赖你的 MCP 客户端(Claude Code,或任何兼容 MCP 的 agent)作为智能层。

You: "what calls ProcessOrder?"

Agent calls: trace_path(function_name="ProcessOrder", direction="inbound")

codebase-memory-mcp: executes graph query, returns structured results

Agent: presents the call chain in plain English

为何没有内置 LLM 其他代码图工具会嵌入 LLM,用于自然语言 → 图查询的翻译。这意味着额外的 API key、额外成本,以及又要配置一个模型。借助 MCP,你已经在对话的 agent 就是查询翻译器。

性能

在 Apple M3 Pro 上基准测试:

Operation Time Notes
Linux kernel full index 3 min 28M LOC, 75K files → 4.81M nodes, 7.72M edges
Linux kernel fast index 1m 12s 1.88M nodes
Django full index ~6s 49K nodes, 196K edges
Cypher query <1ms Relationship traversal
Name search (regex) <10ms SQL LIKE pre-filtering
Dead code detection ~150ms Full graph scan with degree filtering
Trace call path (depth=5) <10ms BFS traversal

RAM 优先流水线(RAM-first pipeline:所有索引均在内存中完成(LZ4 HC 压缩读取、内存 SQLite、最后一次性转储)。索引完成后,内存会释放回操作系统。

Token 效率:五次结构化查询通过 codebase-memory-mcp 仅消耗约 3,400 个 token,而通过逐文件 grep 探索则消耗约 412,000 个 token——减少 99.2%

故障排查与诊断

codebase-memory-mcp 100% 本地运行且不收集任何遥测数据——你的代码、查询、环境和使用情况永远不会离开你的机器。这一隐私保障也意味着,当你遇到我们无法在本地复现的问题(数小时内内存缓慢攀升、性能回退、或仅在多日实际使用后才会出现的泄漏)时,除非你主动发送,否则我们完全没有任何数据。 以下介绍如何自行采集。

采集诊断日志

在 MCP 服务器启动前设置 CBM_DIAGNOSTICS=1,然后复现问题(让它运行足够久——缓慢泄漏需要时间才能在趋势中显现)。服务器会将两个文件写入系统临时目录(macOS/Linux 为 $TMPDIR/tmpWindows 为 %TEMP%):

文件 说明
cbm-diagnostics-<pid>.ndjson 内存轨迹——每 5 秒一行 JSON,包含 rsscommittedWindows commit charge)、peak_*page_faultsfdqueries这是我们处理内存/泄漏报告所需的文件——随时间变化的趋势才能定位泄漏。服务器退出后该文件会保留在磁盘上(便于事后获取),超过约 8 MB 时会轮转到 .ndjson.1
cbm-diagnostics-<pid>.json 仅最新快照——便于快速实时检查。正常退出时会被删除。

启动日志会打印两个路径,例如:

level=info msg=diagnostics.start snapshot=/tmp/cbm-diagnostics-12345.json trajectory=/tmp/cbm-diagnostics-12345.ndjson interval=5s

在代理的 MCP 服务器配置中的 env 块内设置该变量,或在启动服务器前 export。

需要分享的内容

当你提交内存/性能相关 issue 时,请附上 .ndjson 轨迹文件——其中不含源代码或查询文本,仅有资源计数器。若不想附加文件,可将其(或代理对其的摘要)粘贴到 issue 中:你的助手可直接读取 NDJSON,并报告 rss/committed 是否单调增长、增速如何、以及与查询次数的相对关系——这正是我们定位原因所需的信息。

安装

预编译二进制

平台 标准版 含 Graph UI
macOS (Apple Silicon) codebase-memory-mcp-darwin-arm64.tar.gz codebase-memory-mcp-ui-darwin-arm64.tar.gz
macOS (Intel) codebase-memory-mcp-darwin-amd64.tar.gz codebase-memory-mcp-ui-darwin-amd64.tar.gz
Linux (x86_64) codebase-memory-mcp-linux-amd64.tar.gz codebase-memory-mcp-ui-linux-amd64.tar.gz
Linux (ARM64) codebase-memory-mcp-linux-arm64.tar.gz codebase-memory-mcp-ui-linux-arm64.tar.gz
Windows (x86_64) codebase-memory-mcp-windows-amd64.zip codebase-memory-mcp-ui-windows-amd64.zip

每次发布均包含带 SHA-256 哈希的 checksums.txt。所有二进制均为静态链接——无共享库依赖。

Windows 说明SmartScreen 可能对未签名软件显示警告。点击 "More info""Run anyway"。使用 checksums.txt 验证完整性。

安装脚本

自动下载 + 安装

macOS / Linux:

curl -fsSL https://raw.githubusercontent.com/DeusData/codebase-memory-mcp/main/scripts/setup.sh | bash

Windows (PowerShell):

irm https://raw.githubusercontent.com/DeusData/codebase-memory-mcp/main/scripts/setup-windows.ps1 | iex

AUR (Arch Linux)

yay -S codebase-memory-mcp-bin
paru -S codebase-memory-mcp-bin

codebase-memory-mcp-bin 软件包可在以下地址获取:https://aur.archlinux.org/packages/codebase-memory-mcp-bin

通过 Claude Code 安装

You: "Install this MCP server: https://github.com/DeusData/codebase-memory-mcp"

从源码构建

前置条件:C 编译器 + zlib
要求 检查 安装
C 编译器gcc 或 clang gcc --versionclang --version macOSxcode-select --installLinuxapt install build-essential
C++ 编译器 g++ --versionclang++ --version 同上
zlib macOS:已内置,Linuxapt install zlib1g-dev
Git git --version 大多数系统已预装
git clone https://github.com/DeusData/codebase-memory-mcp.git
cd codebase-memory-mcp
scripts/build.sh                    # standard binary
scripts/build.sh --with-ui          # with graph visualization
# Binary at: build/c/codebase-memory-mcp

手动 MCP 配置

若不想使用 install 命令

添加到 ~/.claude/.mcp.json(全局)或项目 .mcp.json

{
  "mcpServers": {
    "codebase-memory-mcp": {
      "command": "/path/to/codebase-memory-mcp",
      "args": []
    }
  }
}

重启你的代理。使用 /mcp 验证——你应能看到 codebase-memory-mcp 及 14 个工具。

多代理支持

install 会自动检测并配置所有已安装的代理:

代理 MCP 配置 说明/指令 Hooks
Claude Code .claude/.mcp.json 4 Skills PreToolUseGrep/Glob 图增强,非阻塞)
Codex CLI .codex/config.toml .codex/AGENTS.md SessionStart 提醒
Gemini CLI .gemini/settings.json .gemini/GEMINI.md BeforeToolgrep 提醒)+ SessionStart 提醒
Zed settings.json (JSONC)
OpenCode opencode.json AGENTS.md
Antigravity .gemini/config/mcp_config.json (shared) antigravity-cli/AGENTS.md SessionStart 提醒
Aider CONVENTIONS.md
KiloCode mcp_settings.json ~/.kilocode/rules/
VS Code Code/User/mcp.json
OpenClaw openclaw.json
Kiro .kiro/settings/mcp.json

Hooks 在结构上为非阻塞(退出码 0,所有失败路径亦然)。 对于 Claude CodePreToolUse hook 会拦截 Grep/Glob(从不拦截 Read—— 对 Read 进行门控会破坏先读后改不变量),当搜索 token 与已索引符号匹配时,通过 search_graph 将其作为 additionalContext 注入, 使代理在常规搜索结果之外还能获得结构化上下文。对于 Codex、Gemini CLI 和 AntigravitySessionStart hook 会以会话上下文形式注入一行代码发现提醒(Gemini CLI 还会 保留其 BeforeTool 提醒)。 已安装的 Claude shim 文件名为 cbm-code-discovery-gate,以 兼容既有安装;尽管名称沿用旧版,它 从不进行门控,也从不阻塞。

CLI 模式

每个 MCP 工具均可从命令行调用:

codebase-memory-mcp cli index_repository '{"repo_path": "/path/to/repo"}'
codebase-memory-mcp cli list_projects

# Use the "name" returned by list_projects as the project value.
codebase-memory-mcp cli search_graph '{"project": "my-project", "name_pattern": ".*Handler.*", "label": "Function"}'
codebase-memory-mcp cli trace_path '{"project": "my-project", "function_name": "Search", "direction": "both"}'
codebase-memory-mcp cli query_graph '{"project": "my-project", "query": "MATCH (f:Function) RETURN f.name LIMIT 5"}'
codebase-memory-mcp cli --raw search_graph '{"project": "my-project", "label": "Function"}' | jq '.results[].name'

MCP 工具

索引

工具 说明
index_repository 将仓库索引到图中。之后自动同步保持最新。
list_projects 列出所有已索引项目及其节点/边数量。
delete_project 移除项目及其全部图数据。
index_status 检查项目的索引状态。

查询

工具 说明
search_graph 按标签、名称模式、文件模式、度过滤进行结构化搜索。通过 limit/offset 分页。
trace_path BFS 遍历——谁调用了某函数,以及它调用了什么(别名:trace_call_path)。深度 1-5。
detect_changes 将 git diff 映射到受影响的符号 + 带风险分级的影响半径(blast radius)。
query_graph 执行类 Cypher 的图查询(只读)。
get_graph_schema 各标签的节点/边数量、关系模式、属性定义。请先运行此项。
get_code_snippet 按限定名读取函数的源代码。
get_architecture 代码库概览:语言、包、路由、热点、簇、ADR。
search_code 在已索引的项目文件中进行类 Grep 的文本搜索。
manage_adr 架构决策记录(Architecture Decision Records)的 CRUD。
ingest_traces 摄入运行时追踪以校验 HTTP_CALLS 边。

图数据模型

节点标签

Project, Package, Folder, File, Module, Class, Function, Method, Interface, Enum, Type, Route, Resource

边类型

CONTAINS_PACKAGE, CONTAINS_FOLDER, CONTAINS_FILE, DEFINES, DEFINES_METHOD, IMPORTS, CALLS, HTTP_CALLS, ASYNC_CALLS, IMPLEMENTS, HANDLES, USAGE, CONFIGURES, WRITES, MEMBER_OF, TESTS, USES_TYPE, FILE_CHANGES_WITH

限定名

get_code_snippet 使用限定名:<project>.<path_parts>.<name>。请先用 search_graph 发现它们。

支持的 CypheropenCypher 只读子集)

query_graph 是只读的 openCypher 子集:

  • 子句MATCH, OPTIONAL MATCH, 多个 MATCH, WHERE, WITH+ WITH … WHERE, RETURN, ORDER BY, SKIP, LIMIT, DISTINCT, UNWIND, UNION / UNION ALL, CASE
  • 模式:带标签的节点、标签交替 (n:A|B)、关系类型/方向、可变长度路径 [*1..3]、内联属性映射。
  • WHERE= <> < <= > >=, AND/OR/XOR/NOT, IN, CONTAINS, STARTS WITH, ENDS WITH, IS [NOT] NULL, 正则 =~, 标签测试 n:Label, 以及 EXISTS { (n)-[:TYPE]->() }(单跳存在性——非常适合死代码,例如 WHERE NOT EXISTS { (f)<-[:CALLS]-() })。
  • 聚合count+DISTINCT, sum, avg, min, max, collect
  • 函数labels, type, id, keys, propertiestoLower/toUpper/toString/toInteger/toFloat/toBooleansize, length, trim/ltrim/rtrim, reversecoalesce, substring, replace, left, right

该子集之外的任何内容(写操作/MERGE/CALL 子句、不支持的函数、列表/映射字面量、推导式、路径函数、参数)会以明确的 unsupported … 错误失败,而不是返回空结果。

忽略文件

分层处理:硬编码模式(.gitnode_modules 等)→ .gitignore 层级 → .cbmignore(项目专用,gitignore 语法)。符号链接始终跳过。

完整的 .cbmignore 用法说明(语法、各忽略层的优先级、取反语义)见 docs/cbmignore.md

配置

codebase-memory-mcp config list                          # show all settings
codebase-memory-mcp config set auto_index true           # auto-index on session start
codebase-memory-mcp config set auto_index_limit 50000    # max files for auto-index
codebase-memory-mcp config set auto_watch false          # don't register background git watcher (default: true)
codebase-memory-mcp config reset auto_index              # reset to default

环境变量

变量 默认值 说明
CBM_ALLOWED_ROOT (未设置) index_repository 限制在此目录内的路径。设置后,若 repo_path 在解析(符号链接 / .. 解析之后)落在该根目录之外,则会被拒绝;未设置时不加限制。适用于服务器可能由不可信调用方驱动的场景,例如智能体或跨租户部署。
CBM_CACHE_DIR ~/.cache/codebase-memory-mcp 覆盖数据库存储目录。所有项目索引与配置都保存在此。
CBM_DIAGNOSTICS false 设为 1true,以启用向 /tmp/cbm-diagnostics-<pid>.json 定期输出诊断信息。
CBM_DOWNLOAD_URL (GitHub releases) 覆盖更新下载 URL。用于测试或自托管部署。
CBM_LOG_LEVEL info 设置最低日志级别。可接受的值(不区分大小写):debuginfowarnerrornone —— 或其与内部枚举对应的数字等价形式 04。日志输出到 stderrstdout 保留给 MCP JSON-RPC。
CBM_WORKERS (自动检测) 覆盖 cbm_default_worker_count 返回的并行索引进程数。在容器内很有用,因为 sysconf(_SC_NPROCESSORS_ONLN) 报告的是宿主机 CPU 数,而非 cgroup 的有效配额。范围 1–256;无效值会被忽略并给出警告。
CBM_MEM_BUDGET_MB (自动检测) 用显式的 MiB 上限覆盖内存中图的预算,优先于 ram_fraction × total_RAM 默认值。适用于没有 cgroup 限制的裸机主机,或将预算固定在 cgroup 限制之下,以便为同机其他进程留出余量。必须为正整数;会被钳制到检测到的总 RAM(记录为 mem.budget.clamped),非数字或非正值会被忽略并给出警告(mem.budget.env.invalid)。
CBM_DUMP_VERIFY_MIN_RATIO 0.5 索引完成后,比较持久化的 SQLite 节点数与内存转储节点数。当持久化节点数低于已提交节点数的该比例(且已提交 > 50)时,index_repository 返回 status:"degraded",而不是静默的 indexed。范围 01;设为 0 可禁用。无效值会被忽略并给出警告。
# Store indexes in a custom directory
export CBM_CACHE_DIR=~/my-projects/cbm-data

自定义文件扩展名

JSON 配置文件支持单个键 extra_extensions,用于将额外的文件扩展名映射到受支持的语言。适用于框架专用扩展名,例如 .blade.phpLaravel)或 .mjs(ES modules)。(其他可调项见 环境变量 以及上文的 config 子命令。)

需要完整的配置文件参考?见 docs/CONFIGURATION.md

按项目(在仓库根目录):

// .codebase-memory.json
{"extra_extensions": {".blade.php": "php", ".mjs": "javascript"}}

全局(应用于所有项目):

// ~/.config/codebase-memory-mcp/config.json  (or $XDG_CONFIG_HOME/...)
{"extra_extensions": {".twig": "html", ".phtml": "php"}}

每条将扩展名(必须. 开头)映射到语言名。语言名匹配不区分大小写。可接受的值(括号内为别名)为:

bash (sh), c, c++ (cpp), c# (csharp), clojure, cmake, cobol, common lisp (commonlisp, lisp), css, cuda, dart, dockerfile, elixir, elm, emacs lisp (emacslisp), erlang, f# (fsharp), form, fortran, glsl, go, graphql, groovy, haskell, hcl (terraform), html, ini, java, javascript, json, julia, kotlin, lean, lua, magma, makefile, markdown, matlab, meson, nix, objective-c (objc), ocaml, perl, php, protobuf, python, r, ruby, rust, scala, scss, sql, svelte, swift, toml, tsx, typescript, verilog, vimscript, vue, wolfram, xml, yaml, zig

对冲突的扩展名,项目配置覆盖全局配置。语言名未知、或扩展名不以 . 开头的条目会被跳过,并在 stderr 记录警告(在默认的 info 日志级别下可见)。缺失的配置文件会被忽略。

持久化

SQLite 数据库存储在 ~/.cache/codebase-memory-mcp/。跨重启持久保存(WAL 模式,ACID 安全)。若要重置:rm -rf ~/.cache/codebase-memory-mcp/

故障排除

问题 处理
/mcp 未显示服务器 检查 .mcp.json 路径是否为绝对路径。重启 agent。测试:echo '{}' | /path/to/binary 应输出 JSON。
index_repository 失败 传入绝对路径:index_repository(repo_path="/absolute/path")
trace_path 返回 0 条结果 先用 search_graph(name_pattern=".*PartialName.*") 查找确切名称。
查询返回了错误项目的结果 添加 project="name" 参数。用 list_projects 查看名称。
安装后找不到二进制文件 加入 PATHexport PATH="$HOME/.local/bin:$PATH"
UI 无法加载 确保下载的是 ui 变体,并已运行 --ui=true。检查 http://localhost:9749

Hybrid LSP

超越 tree-sitter 的语义类型解析。

仅靠 tree-sitter 只能得到语法 AST。这对命名、结构和调用点处理得很好,但它无法告诉你 user.profile.display_name() 会解析到三个模块之外声明的 Profile.display_name —— tree-sitter 不跟踪 import、泛型、继承或标准库类型。

codebase-memory-mcp 内置了轻量级 C 语言实现的类型解析算法,在结构上受主流语言服务器(language server)启发并与之兼容(tsserver / typescript-go、pyright、gopls、Roslyn、Eclipse JDT、rust-analyzer),直接嵌入静态二进制文件中。无需语言服务器进程、无需按项目配置、无需 API 密钥。我们将这一层称为 Hybrid LSP:它在每次解析时与 tree-sitter 并行运行,并用类型信息细化 CALLSUSAGERESOLVED_CALLS 边,从而使生成的图谱与 IDE 中「转到定义」(Go to Definition)的解析结果一致。

已完整支持 Hybrid LSP 的语言:

Language What it handles
Python (new in v0.7.0) imports + 点号子模块遍历、dataclasses、Self 返回类型、泛型、@propertymatch/case 类模式、SQLAlchemy 2.0 Mapped[T]、Pydantic BaseModeltyping.Annotated / ClassVar / Final / InitVar、async/await、classmethod/staticmethod、收窄(isinstance / is not None / walrus)、typing.cast / assert_type、常用标准库(logging、pathlib、json、functools)。目标是在惯用代码上达到约 95% 的解析率。
TypeScript / JavaScript / JSX / TSX 泛型、JSX 组件分派、纯 JS 的 JSDoc 推断、.d.ts 声明、模块再导出、通过返回类型传播实现的方法链、按文件叠加并链接到共享跨文件注册表
PHP (new in v0.7.0) 命名空间、trait、late-static-binding、PHPDoc 推断、参数绑定、返回类型推断
C# (new in v0.7.0) 全局 using、文件作用域命名空间、record(含 C# 12 主构造函数)、LINQ 方法语法、async Task<T> / ValueTask<T> 解包、泛型方法、this / base 分派、var 推断、常用 BCL 标准库
Go (sharpened in v0.7.0) 预构建的按包跨文件注册表、泛型、嵌入结构体、接口满足、包感知的 import 解析
C / C++ (sharpened in v0.7.0) 预构建的按语言跨文件注册表,C 与 C++ 共享;C 侧处理宏 + typedef 链 + 头文件与源文件链接;C++ 侧处理模板、命名空间、auto 推断,以及通过类层次结构进行的方法解析
Java (new in v0.8.0) import(单类型、按需、静态)、带 this / super 分派的类层次结构、泛型、注解、按参数个数与参数类型的重载匹配、绑定到函数式接口的 lambda / 方法引用、字段类型推断、常用 JDK 标准库
Kotlin (new in v0.8.0) import + 同包解析、class / object / companion object、扩展函数、data class、可空类型解包、作用域函数(let / apply / run / also / with)、中缀调用、常用标准库
Rust (new in v0.8.0) use 声明 + 模块路径、impl 块与 trait 方法、结构体字段、带 trait 约束的泛型、运算符 trait 脱糖、derive 宏方法合成、UFCS 静态路径、常用 std prelude
Perl 包 + @ISA / use parent / use base 继承及方法解析顺序(method-resolution-order)分派、SUPER:: 调用、Exporteruse Foo qw(...)import 映射、bless / ref($class)||$class self 类型推断、限定 Pkg::sub 静态调用、精选 perlfunc + CPAN OOP 标准库;未解析的接收者不产生边(零边保证)

双层架构:

  1. Tree-sitter pass —— 快速、语法级,对全部 158 种语言运行。提取定义、调用、import。
  2. Hybrid LSP pass —— 类型感知,在 tree-sitter pass 之上按语言运行。利用 import 图以及按文件或预构建的跨文件定义注册表来细化调用边。尚未支持 Hybrid LSP pass 的语言会回退到文本解析,因此你总能得到某种答案。

最终得到的知识图谱足够准确,可驱动跨包、继承层次结构和标准库调用的 trace_path —— 且无需为每个项目支付语言服务器进程的开销。

Language Support

158 种语言,均通过编入二进制的 vendored tree-sitter 语法进行解析。已在 64 个真实开源仓库上完成基准测试(节点数从 78 到 49K):

Tier Score Languages
Excellent (>= 90%) Lua、Kotlin、C++、Perl、Objective-C、Groovy、C、Bash、Zig、Swift、CSS、YAML、TOML、HTML、SCSS、HCL、Dockerfile
Good (75-89%) Python、TypeScript、TSX、Go、Rust、Java、R、Dart、JavaScript、Erlang、Elixir、Scala、Ruby、PHP、C#、SQL
Functional (< 75%) OCaml、Haskell

另已支持(尚未基准测试):Ada、Agda、Apex、Assembly (NASM)、Astro、AWK、Beancount、BibTeX、Bicep、Bitbake、Blade、Cairo、Cap'n Proto、Clojure、CMake、COBOL、Common Lisp、Crystal、CSV、CUDA、D、Devicetree、Diff、.env、Elm、Emacs Lisp、F#、Fennel、Fish、FORM、Fortran、FunC、GDScript、.gitattributes、.gitignore、Gleam、GLSL、GN、Go module、Go template、GraphQL、Hare、HLSL、Hyprlang、INI、ISPC、Janet、Jinja2、JSDoc、JSON、JSON5、Jsonnet、Julia、Just、Kconfig、KDL、Lean 4、Linker Script、Liquid、LLVM IR、Luau、Magma、Makefile、Markdown、MATLAB、Mermaid、Meson、Move、Nickel、Nim、Nix、Odin、Pascal、Pkl、PO (gettext)、Pony、PowerShell、Prisma、.properties、Protobuf、Puppet、PureScript、Racket、Regex、requirements.txt、ReScript、RON、reStructuredText、Scheme、Slang、Smali、Smithy、Solidity、SOQL、SOSL、Squirrel、SSH config、Starlark、Svelte、Sway、SystemVerilog、TableGen、Tcl、Teal、Templ、Thrift、TLA+、Typst、Verilog、VHDL、Vim script、Vue、WGSL、WIT、Wolfram、XML、Zsh。

Architecture

src/
  main.c              Entry point (MCP stdio server + CLI + install/update/config)
  mcp/                MCP server (14 tools, JSON-RPC 2.0, session detection, auto-index)
  cli/                Install/uninstall/update/config (10 agents, hooks, instructions)
  store/              SQLite graph storage (nodes, edges, traversal, search, Louvain)
  pipeline/           Multi-pass indexing (structure → definitions → calls → HTTP links → config → tests)
  cypher/             Cypher query lexer, parser, planner, executor
  discover/           File discovery (.gitignore, .cbmignore, symlink handling)
  watcher/            Background auto-sync (git polling, adaptive intervals)
  traces/             Runtime trace ingestion
  ui/                 Embedded HTTP server + 3D graph visualization
  foundation/         Platform abstractions (threads, filesystem, logging, memory)
internal/cbm/         Vendored tree-sitter grammars (158 languages) + AST extraction engine

Security

每次发布前,所有发行版二进制文件都会经过多层流水线验证:

  • VirusTotal —— 所有二进制文件由 70+ 款杀毒引擎扫描(发布前要求零检出)
  • SLSA Level 3 —— 由受信任的 GitHub Actions 构建工作流生成加密构建溯源(build provenance);使用 gh attestation verify <file> --repo DeusData/codebase-memory-mcp --signer-workflow DeusData/codebase-memory-mcp/.github/workflows/_build.yml 进行验证
  • Sigstore cosign —— 对所有制品进行无密钥签名;每个发行版均包含 bundle
  • SHA-256 checksums —— 每次发行都会发布 checksums.txt;安装脚本在解压前都会进行校验
  • CodeQL SAST —— 若仍存在未关闭的告警,将阻断发布流水线
  • Zero runtime dependencies —— 无传递性供应链;所有库在编译时 vendored

v0.7.0 VirusTotal scans

Binary SHA-256 VirusTotal
linux-amd64 8e12bb2d6ead7f20a6d3... 0/72
linux-arm64 10f7136bfbf3950c6b2a... 0/72
darwin-arm64 7062a7408906344bf4f8... 0/72
darwin-amd64 28c6d640e1a0ac7bfcab... 0/72
windows-amd64 9c3ddcf78368fd4fa891... 0/72

每个版本的扫描链接也会自动包含在 GitHub Release 说明中。

许可证

MIT