关于 crg
crg 是一个 MCP 服务,使用 Tree-sitter 解析代码库,构建函数、类与导入之间的结构化知识图谱,让客户端只读取与任务相关的代码。默认通过 fastretrieval 的本地 ONNX 模型进行语义搜索,无需配置或 API 密钥,也可选用云端 embedding。
主要功能
- 01Tree-sitter 解析与结构图谱构建
- 02语义搜索,默认使用本地 ONNX 模型
- 03限定名调用关系解析
- 04输出分页
- 05v2.0 起支持时间版本列与可选安全扫描
适用场景
- 01为代码审查提供相关函数与调用上下文
- 02分析变更的影响范围
- 03在命令行中对本地仓库建立图谱并搜索
MCP 相关
crg 以 MCP 服务形式运行,通过 stdio 或 HTTP 向 MCP 客户端暴露图谱构建与查询功能。CLI 是其主要使用方式,MCP 为次要的协议适配层。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
uvx better-code-review-graphEMBEDDING_MODELSEmbedding models in selection order; the current runtime uses the first provider/model entry; empty = local ONNXLOCAL_EMBEDDING_MODELBuilt-in fastretrieval model ID or local directory with fastretrieval-manifest.jsonLOCAL_RERANK_MODELFastretrieval TextCrossEncoder model ID; empty = reranking disabledLOCAL_EMBEDDING_DIMRequired positive output dimension for an external local embedding ID without a manifestLOCAL_EMBEDDING_MODEL_FILEONNX file path inside a manifest-backed local embedding directoryLOCAL_EMBEDDING_POOLINGExplicit pooling for an external local embedding ID without a manifestLOCAL_EMBEDDING_NORMALIZEExplicit L2 normalization for an external local embedding ID without a manifestHULL_EMBED_API_KEY密钥API key for the [models.embed] cell transport (OpenRouter pre-wired default); host-injected, overrides the cell api_keyHULL_CHAT_API_KEY密钥API key for the [models.chat] cell transport (OpenRouter pre-wired default); host-injected, enables LLM summaries when the cell model is setEMBEDDING_BACKENDDEPRECATED (honored one release): embedding backend override 'local' or 'cloud'. Use EMBEDDING_MODELS instead.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
更好的代码审查图谱
已重命名(2026-09-13): 仓库现已更名为
crg,以 CLI 为先(crg命令)。PyPI 包仍为better-code-review-graph;MCP 服务是次要入口。
mcp-name: io.github.n24q02m/crg
用于节省令牌的代码审查知识图谱——在整个代码库中进行语义搜索并解析调用图。
n24q02m 的姊妹项目(点击展开)
| 项目 | 标语 | 标签 | |---|---|---| | [agent-chat-plugin](https://github.com/n24q02m/agent-chat-plugin) | AI Agent 在共享文件夹中相互聊天——无需人工转发,也无需编排器,wor... | 工具 | | [crg](https://github.com/n24q02m/crg) | 用于高效利用令牌进行代码审查的知识图谱——语义搜索和调用关系... | MCP | | [better-drive](https://github.com/n24q02m/better-drive) | 双向 Google Drive 同步,支持 .driveignore 过滤器——采用 rclone 引擎,提供 Windows 托盘 | 工具 | | [better-email-mcp](https://github.com/n24q02m/better-email-mcp) | 为 AI Agent 提供 IMAP/SMTP 邮件功能——读取、发送、整理文件夹并管理附件... | MCP | | [better-godot-mcp](https://github.com/n24q02m/better-godot-mcp) | Godot Engine 的复合 MCP 服务——提供 17 个复合工具,支持 AI 辅助游戏开发... | MCP | | [better-notion-mcp](https://github.com/n24q02m/better-notion-mcp) | 面向 AI Agent、以 Markdown 为先的 Notion——页面、数据库、块和评论... | MCP | | [better-semantic-release](https://github.com/n24q02m/better-semantic-release) | 可直接替换的 python-semantic-release 分支,内置发布安全防护(孤... | 工具 | | [better-telegram-mcp](https://github.com/n24q02m/better-telegram-mcp) | 为 AI Agent 提供 Telegram 功能——在 Bot 和用户账号上处理消息、聊天、媒体和联系人... | MCP | | [better-workspace-mcp](https://github.com/n24q02m/better-workspace-mcp) | Google Workspace MCP 服务(Docs/Drive/Calendar/Gmail/Sheets/Slides/Tasks/Ch... | MCP | | [claude-plugins](https://github.com/n24q02m/claude-plugins) | 面向 n24q02m MCP 服务的 Claude Code 插件市场——安装网页搜索... | 市场 | | [imagine-mcp](https://github.com/n24q02m/imagine-mcp) | 为 AI Agent 提供图像和视频理解与生成——支持 Gemini、Op... | MCP | | [jules-task-archiver](https://github.com/n24q02m/jules-task-archiver) | 通过 batchexecute API 批量操作 Jules 任务的 Chrome 扩展——a... | 工具 | | [mcp-core](https://github.com/n24q02m/mcp-core) | 用于构建 MCP 服务的共享基础组件——Streamable HTTP 传输、OAuth... | MCP | | [mnemo-mcp](https://github.com/n24q02m/mnemo-mcp) | 具备混合搜索和嵌入式同步功能的持久化 AI 记忆。开放、免费、无限... | MCP | | [fastretrieval](https://github.com/n24q02m/fastretrieval) | 面向 ONNX 和 GGUF 嵌入、重排序及模型契约的快速多模型检索运行时 | 库 | | [skret](https://github.com/n24q02m/skret) | 无需服务端的密钥管理。 | 命令行 | | [tacet](https://github.com/n24q02m/tacet) | 一种自蒸馏神经符号级联,可将大模型成本分摊到知识... | 工具 | | [web-core](https://github.com/n24q02m/web-core) | 用于搜索、抓取、HTTP 安全和 st... 的共享 Web 基础设施包 | 库 | | [wet-mcp](https://github.com/n24q02m/wet-mcp) | 面向 AI Agent 的开源 MCP 服务:网页搜索、内容提取和 lib... | MCP |一个 MCP 服务,可使用 Tree-sitter 解析代码库,构建函数、类和导入项的结构图,并为 Claude(或任何 MCP 客户端)提供精准上下文,让它只读取相关内容,而不是整个代码树。默认情况下,语义搜索通过 fastretrieval 的本地 ONNX 模型注册表运行(零配置,无需 API 密钥),也可选用云端嵌入链。它是 code-review-graph 的分支,修复了多词搜索、限定名称调用解析、双模式嵌入和输出分页,并提供生产级 CI/CD。
v2.0 迁移(重大变更)
v2.0 新增了时间列(每个节点和边上都有 valid_from_sha / valid_to_sha),并提供可选启用的安全扫描器。首次打开 GraphStore 时会自动应用架构迁移,并将 2.0 之前的数据库备份保存到 <graph_db>.pre-2.0.bak,以便回滚。完整的架构变更列表、行为变更、环境要求和降级步骤(CRG_DOWNGRADE_TO_1_X=1 uv run crg)请参阅 BREAKING_CHANGES.md。
目录
安装
对于 OMP 和其他本地编码框架,主要使用方式是通过包的 CLI
以及捆绑的 skills/ 工作流。这些技能会直接调用 CLI,
不需要配置 MCP 服务映射。
# Run without a persistent install (short `crg` script; PyPI package name stays
# better-code-review-graph, so `uvx` needs the explicit --from form)
uvx --python 3.13 --from better-code-review-graph crg graph build --full-rebuild \
--repo-root /path/to/repo
uvx --python 3.13 --from better-code-review-graph crg graph stats \
--repo-root /path/to/repo
# Or install the console scripts (installs both `crg` and the legacy long name)
pip install better-code-review-graph
crg query search --search-query "authentication" \
--repo-root /path/to/repo
用于深度安全扫描的可选 Semgrep 引擎是单独的额外组件:
pip install 'better-code-review-graph[security]'
MCP stdio 仍是供有此需求的客户端使用的次要协议适配器:
{
"mcpServers": {
"crg": {
"command": "uvx",
"args": ["--python", "3.13", "better-code-review-graph"],
"env": { "MCP_TRANSPORT": "stdio" }
}
}
}
安装方式矩阵(除特别说明外均为 stdio;上述 CLI 优先用法仍是主要方式):
| 客户端 | 安装 |
|---|---|
| Claude Code(插件) | /plugin marketplace add n24q02m/claude-plugins 然后运行 /plugin install better-code-review-graph@n24q02m-plugins |
| Claude Code(stdio) | claude mcp add crg -- uvx --python 3.13 better-code-review-graph |
| Codex | 在 ~/.codex/config.toml 的 mcp_servers 下注册 stdio 命令 uvx --python 3.13 better-code-review-graph |
| Gemini CLI | 将上方的 mcpServers JSON 添加到 ~/.gemini/settings.json |
| Cursor / Windsurf | 通过客户端的 MCP 设置(mcp.json)添加上方的 mcpServers JSON |
| 任意客户端(HTTP 自托管) | 将客户端指向 https://<your-host>/mcp(MCP_TRANSPORT=http)——仅支持自托管,没有托管端点 |
使用 AI Agent 安装 —— 将以下内容粘贴给你的 AI 编码 Agent:
按照以下步骤安装 MCP 服务
crg: https://raw.githubusercontent.com/n24q02m/claude-plugins/main/plugins/better-code-review-graph/setup-with-agent.md
完整的 CLI 用法请参阅 CLI。可选的客户端专属 MCP 设置请见 mcp.n24q02m.com/servers/better-code-review-graph/setup/。
用法
运行服务有两种方式,此外还有使用它的入口。
开发:uv,无需身份验证(仅限环回地址)
# instance config lives at $CRG_CONFIG_DIR or ~/.crg (same schema as hull's
# config.toml); a default no-auth template is fine for local dev
uv run better-code-review-graph server start
# -> http://127.0.0.1:8000/mcp (no-auth is refused on any off-loopback bind)
常驻运行:docker(令牌身份验证)
cp docker-config/config.example.toml docker-config/config.toml
# mint a token + hash (hull CLI ships with crg's dependency tree):
# TOKEN=$(python -c "import secrets; print(secrets.token_urlsafe(32))")
# hull token hash "$TOKEN" # paste output into token_hash in config.toml
docker compose up -d
compose 文件会构建 Dockerfile 的 http 目标(镜像 crg:http),
仅将容器发布到主机环回地址
(127.0.0.1:${CRG_PORT:-8772}:8080),并将
./docker-config/config.toml 以只读方式挂载到容器的配置目录
(CRG_CONFIG_DIR=/data/config);图状态会持久保存在名为 crg-data
的卷中。所有状态都保留在你的机器上。
使用方式:CLI 或 MCP
CLI(本地图,无需服务):
crg graph build --full-rebuild --repo-root /path/to/repo
crg query search --search-query "authentication" --repo-root /path/to/repo
通过 HTTP 使用 MCP(远程/常驻运行):将任意 MCP 客户端指向
http://127.0.0.1:8772/mcp,并设置 Authorization: Bearer <token>:
{
"mcpServers": {
"better-code-review-graph": {
"url": "http://127.0.0.1:8772/mcp",
"headers": { "Authorization": "Bearer <token>" }
}
}
}
按任务配置模型
每个任务(embed / rerank / chat / jev_score)都会从实例配置中的 [models.<task>] 解析各自的 OpenAI 规范供应商配置单元:独立的
base_url + api_key + model。使用云端还是本地完全由配置决定——
将 base_url 指向 OpenRouter、供应商或你自己的本地网关
(例如 http://host.docker.internal:11434/v1)。API 密钥仅供主机使用:
请将其保存在 config.toml(在 docker-config/ 下由 gitignore 忽略)中,或通过
HULL_<TASK>_API_KEY 环境变量提供;绝不会由最终用户提供。
本地优先边界
CRG 面向编码工作流,采用本地优先模式:
- CLI 和内置 Skills 是构建/查询图、影响分析、评审上下文、安全扫描和仓库接入的主要入口。
- MCP stdio 是基于同一组本地域服务的次要协议适配器;它不会维护独立的图实现。
- 图状态保存在
<repo>/.crg/graph.db中,除非明确的多用户/自托管配置选择其他数据目录。 - PyPI、CI、安全扫描、GitHub 发布以及符合条件的稳定版 MCP Registry 发布仍在进行。保留历史公开 OCI 标签,但不再发布新的公开 Docker Hub/GHCR 镜像。
- CRG 在目标拓扑中没有托管的 Cloudflare 运行时。
Smithery
仓库提供 smithery.yaml,以便通过 Smithery 构建和运行服务。它通过 stdio 部署,无需启动配置——配置架构为空,任何可选的云端嵌入/摘要密钥都在运行时通过服务自身的配置流程提供(见下文的配置)。启动命令与本地安装使用的 uvx 调用相同:
startCommand:
type: stdio
commandFunction: |-
(config) => ({ command: 'uvx', args: ['--python', '3.13', 'crg'] })
配置
所有功能开箱即用,无需任何配置——语义搜索使用 fastretrieval 中的本地 ONNX 注册表(Qwen3-Embedding-0.6B 是当前内置的参考条目,首次运行 graph embed 时下载约 570 MB)。此参考条目并非仅限 Qwen 的边界:任何内置注册表 ID 或有效的非 Qwen 工件清单都遵循相同的解析器。以下所有环境变量均为可选,仅在使用云端嵌入、大模型摘要或明确指定自带的本地工件时才需要。
模型选择
嵌入会选择 EMBEDDING_MODELS 中第一个 provider/model 条目;后续条目会保留为配置,但不会作为运行时回退选项。摘要模型取自 [models.chat] 单元格的 model 字段(未配置的单元格会禁用摘要)。传输方式始终取自每项任务的 [models.<task>] 单元格(预先配置了 OpenRouter 默认值)——模型名称前缀只用于选择线路细节,不会选择密钥。
| 变量 | 用途 | 为空时(默认值) |
|---|---|---|
EMBEDDING_MODELS | 云端嵌入选择;第一个条目处于启用状态 | 本地 fastretrieval 注册表 |
[models.chat] 单元格 model | 选择 graph(action="summarize") 的补全模型 | 禁用摘要 |
Cohere embed-v4.0 请求并存储 1024 维数据;其他后端仍使用 768 维存储。CRG 不会截断、填充或静默接受不同的服务商维度。复用前,嵌入行的模型和字节宽度必须匹配。更改模型或升级旧的 768 维 Cohere 索引后,请运行 graph(action="embed")。搜索会在调用服务商之前拒绝不兼容的维度;图节点会保留,重新嵌入只会替换过时的向量。
提供商 API 密钥
密钥位于每个任务单元格的 api_key 中(仅主机端;见下表)。
仅有密钥不会选择模型:空的嵌入链会保持本地运行,空的摘要链则保持禁用状态。已配置的云端服务出错时,不会回退到本地或其他提供商。摘要器需要聊天补全模型。
| 任务 | 配置单元格 | 备注 |
|---|---|---|
| 嵌入 | 实例配置中的 [models.embed](base_url + api_key + model),或 HULL_EMBED_API_KEY 环境变量 | 通过 hull-core 使用符合 OpenAI 规范的普通 HTTP;默认已预先接入 OpenRouter。EMBEDDING_MODELS 用于选择模型名称——密钥不会选择模型。模型前缀(cohere/…、jina_ai/…、gemini/…)仅用于选择传输细节(例如 Cohere 的 input_type);不存在按供应商区分的 API 密钥。直接使用 Cohere embed-4.0 是文档所述的可选例外(规范 2026-09-26 §9)。 |
| 摘要器 | [models.chat] 单元格(或 HULL_CHAT_API_KEY) | 需要聊天补全模型;默认使用 OpenRouter。 |
供应商专用的密钥环境变量(JINA_AI_API_KEY、GEMINI_API_KEY、
OPENAI_API_KEY、GOOGLE_VERTEX_EXPRESS_API_KEY、…)不会被 crg 读取;
已移除的按供应商分发逻辑曾存在于去除主机依赖前的技术栈中。
高级配置
| 变量 | 用途 |
|---|---|
EMBEDDING_MODELS | 以逗号分隔的嵌入模型链;第一项是云端模型(由主机管理;密钥不会选择模型)。旧版 EMBEDDING_MODEL 会在下一次发布前继续受支持,并显示弃用警告。 |
DISABLE_LOCAL_EMBED | 跳过本地 ONNX 下载;除非配置了云端链,否则嵌入功能不可用 |
LOCAL_RERANK_MODEL | 用于有界语义重排序的 Fastretrieval TextCrossEncoder 模型 ID |
LOCAL_EMBEDDING_DIM | 对于没有清单的外部模型 ID,必须指定的维度 |
LOCAL_EMBEDDING_MODEL_FILE | 清单支持的制品目录中的 ONNX 文件路径 |
LOCAL_EMBEDDING_POOLING | 对于没有清单的外部 ID,显式指定池化方式:CLS、MEAN、LAST_TOKEN 或 DISABLED |
LOCAL_EMBEDDING_NORMALIZE | 对于没有清单的外部 ID,显式指定 L2 归一化 |
CRG_DATA_DIR | 覆盖每用户数据目录(默认为 ~/.crg),该目录用于 HTTP 多用户模式下存储每用户图谱和凭据 |
EMBEDDING_BACKEND / EMBEDDING_MODEL | 已弃用的单数变量,仍支持一个发布周期并显示警告——请迁移到 EMBEDDING_MODELS。不再读取去除主机依赖前的摘要模型和基础 URL 环境变量;模型和传输配置位于 [models.*] 单元格中 |
配置 LOCAL_RERANK_MODEL 后,语义向量搜索会检索一个有界候选池,包含 min(max(limit * 4, limit), 100) 行,应用现有的 kind、repo 和实时行筛选器,然后对该候选池重新排序,最多返回 limit 行。响应使用 search_mode="semantic_reranked",并添加 rerank_score,同时保留 similarity_score。留空时,会沿用现有的 limit * 2 向量路径和 search_mode="semantic"。配置的重排序器发生故障时会返回明确错误;CRG 不会静默回退到向量或关键词结果。关键词搜索(包括 as_of 快照)不会调用重排序器。
示例——云端嵌入 + 摘要
~/.crg/config.toml(手动编写,或从 hull config init 开始,该命令会预先配置 OpenRouter 默认值):
[models.embed]
base_url = "https://openrouter.ai/api/v1"
api_key = "sk-or-..."
model = "cohere/embed-v4.0"
[models.chat]
base_url = "https://openrouter.ai/api/v1"
api_key = "sk-or-..."
model = "minimax/minimax-m3:free"
MCP 服务条目的等效环境变量配置(键会覆盖对应单元格;模型名称仍来自 EMBEDDING_MODELS / model 字段):
{
"mcpServers": {
"crg": {
"command": "uvx",
"args": ["--python", "3.13", "better-code-review-graph"],
"env": {
"MCP_TRANSPORT": "stdio",
"EMBEDDING_MODELS": "cohere/embed-v4.0",
"HULL_EMBED_API_KEY": "sk-or-...",
"HULL_CHAT_API_KEY": "sk-or-..."
}
}
}
}
Cohere 嵌入需要付费。在进行实际索引/查询之前,请先授权限定额度;选择 Minimax 免费补全模型并不意味着嵌入免费。模型名称前缀(cohere/…、openrouter/…)仅用于选择传输格式细节——传输方式和凭据来自由宿主管理的 [models.*] 单元格。
CRG 目前没有云端重排调用:LOCAL_RERANK_MODEL 是其唯一的重排路径。设置 RERANK_MODELS 或 RERANK_API_BASE 并不会启用云端重排。
工具
共六个工具,每个工具将相关操作归为一组,以精简工具接口。
graph——图生命周期
操作:build | update | stats | embed | export | summarize
| 操作 | 描述 |
|---|---|
build | 完整或增量构建图。设置 full_rebuild=true 可重新解析所有文件;传入 roots 可将其他仓库目录合并到一个图中。 |
update | build 的别名,且 full_rebuild=false(增量)。 |
stats | 图的规模、语言、节点/边明细、嵌入数量。 |
embed | 计算用于语义搜索的向量嵌入。双模式:本地 ONNX 或云端链路。 |
export | 将图导出为 graphml / json-ld / dot / cypher。可内嵌导出或导出到 output_path。 |
summarize | 为 Function 节点生成由大模型生成的单段文档字符串(通过 [models.chat] 单元格;未配置模型时不执行任何操作)。调用数量受 max_nodes 限制。 |
query——图查询
操作:query | search | impact | large_functions | spot_check | renamed_in_diff | diff
| 操作 | 描述 |
|---|---|
query | 预定义模式:callers_of、callees_of、imports_of、importers_of、children_of、tests_for、inheritors_of、file_summary。 |
search | 按名称/关键词或语义相似度搜索代码实体。 |
impact | 评估已更改文件的影响范围。根据 git diff 自动检测。支持分页,使用 max_results。 |
large_functions | 查找超过行数阈值的函数/类。 |
spot_check | 从最近一次 callers_of/callees_of/inheritors_of/importers_of 结果中随机抽取调用点片段。 |
renamed_in_diff | 调用点行号相对于基准 ref 发生偏移的符号。 |
diff | 两个提交 SHA 之间新增/删除/修改的节点(from_sha、to_sha)。 |
大多数读取操作都接受 as_of=<sha>,用于获取时间点快照;也接受 repo=<repo_id>,用于限定联合多仓库图的范围。
review——代码审查上下文
操作:context(默认)| delta
经过 token 优化的审查上下文,包含结构摘要、受影响节点、源代码片段和审查指导。context 会根据 git diff 自动检测更改文件;delta(使用 from_sha/to_sha,可选 show_line_shifts)会显示两个提交之间的重构移动。
config——服务配置和凭据设置
操作:status | set | cache_clear | setup_status | setup_start | setup_skip | setup_reset | setup_complete
| 操作 | 描述 |
|---|---|
status | 服务信息:版本、图路径、节点/边数量、嵌入后端、嵌入数量。 |
set | 更新运行时设置(key=log_level)。 |
cache_clear | 移除所有已计算的嵌入。 |
setup_status | 显示当前凭据状态,以及哪些模型单元格配置了密钥。 |
setup_start | 说明宿主在哪里配置 API 密钥(由宿主管理的模型单元格)。 |
setup_skip | 设置为本地模式(本地 ONNX 嵌入,不使用云端单元格)。 |
setup_reset | 将状态重置为本地模式;下次调用时由宿主配置重新解析。 |
setup_complete | 根据宿主配置重新解析凭据状态。 |
security -- 安全扫描
操作:scan | report | suppress | rule_list
| 操作 | 描述 |
|---|---|
scan | 运行安全扫描(默认 engine='heuristic',使用 5 条正则规则;或使用 'semgrep')。扫描结果会保存在 nodes.security_tags 中。 |
report | 将缓存的扫描结果重新输出为 JSON(format='json')或 SARIF v2.1.0(format='sarif')。 |
suppress | 按 rule_id 忽略一条扫描结果(或设置 remove=true 取消忽略)。 |
rule_list | 列出某个引擎可用的规则。 |
semgrep 引擎需要 [security] extra,并会运行 Semgrep 的
p/auto registry pack 以及一个包含 3 条规则的精选叠加包。
help -- 完整文档
主题:graph | query | review | config | security | recipes
返回每个工具的完整文档。如果上面的精简描述不够详尽,请使用此工具。
CLI
此软件包会安装两个控制台脚本:crg(主脚本)和
crg(旧版长名称)。运行时不带任何参数,即可通过 stdio 启动 MCP 服务;添加开头位置参数,则会调用本地 CLI 子命令,该命令使用与 MCP 适配器相同的领域服务。运行 pip install 后可直接运行这些脚本;也可以通过 uvx --python 3.13 --from better-code-review-graph crg ... 运行,无需持久安装。
# Start the MCP server over stdio (default -- no subcommand)
crg
# Build, inspect, and embed the local graph
crg graph build
crg graph stats
crg graph embed
# Query relationships and impact
crg query query \
--pattern callers_of --target "path/to/module.py::function"
crg query search --search-query "authentication"
crg query impact --changed-files src/app.py
# Produce review context and run a local security scan
crg review context --base HEAD~1
crg security scan --engine heuristic
| 命令 | 描述 |
|---|---|
graph build | 完整或增量构建图。--full-rebuild 会重新解析每个文件;--base <ref> 用于设置增量差异的基准引用;--repo-root <path> 用于覆盖自动检测结果。 |
graph embed | 使用本地 ONNX 或已配置的云端链计算向量嵌入。 |
graph stats / graph export / graph import / graph summarize | 检查、导出/导入可移植的 crg 图,或汇总函数。 |
query query / query search | 执行关系模式查询或关键词/语义搜索。 |
query impact / query large_functions | 分析已更改文件的影响范围,或查找过大的节点。 |
query spot_check / query renamed_in_diff / query diff | 检查调用位置、行号变化或提交之间的图变化。 |
review context / review delta | 为代码更改生成审查上下文或差异分类。 |
security scan / security report / security suppress / security rule_list | 运行和管理启发式/Semgrep 安全扫描结果。 |
CLI 子命令会输出结构化 JSON,发生错误时以非零状态码退出。
功能
此分支相较于上游 code-review-graph 修复的内容:
| 功能 | code-review-graph | crg |
|---|---|---|
| 多词搜索 | 已损坏(按字面子字符串匹配) | 按 AND 逻辑拆分单词 |
| callers_of/callees_of | 结果为空(目标仅为裸名称) | 限定名称解析 + 裸名称回退 |
| 嵌入 | sentence-transformers + torch(1.1 GB) | fastretrieval ONNX + 云端(200 MB),双模式 |
| 输出大小 | 无限制(超过 500K 字符) | 分页(max_results,带 truncated 标志) |
| 工具设计 | 9 个独立工具 | 6 个分组工具:graph + query + review + config + security + help |
| 插件钩子 | 无效的 PostEdit/PostGit | 有效的 PostToolUse |
对比
crg 在各项能力上与直接竞品的对比:
| 能力 | crg | Greptile | Sourcegraph(Cody / MCP) | CodeGraph(colbymchenry) |
|---|---|---|---|---|
| 代码库知识图谱 | 是(Tree-sitter,14 种语言,SQLite) | 是(函数/类/依赖) | 是(精确代码索引) | 是(Tree-sitter,20 多种语言,SQLite) |
| 持久化增量更新 | 是(git-diff + 文件哈希重新解析) | ? | 是(持续索引) | 是(OS 文件监视器,带防抖) |
| 限定的调用解析(调用者/被调用者) | 是(同文件裸调用解析 + 回退) | ? | 是(转到定义 / 查找引用) | 是(调用者 / 被调用者 / 影响范围) |
| 语义搜索 / 嵌入 | 是(fastretrieval 本地注册表 + 云端 Jina/Gemini/OpenAI/Cohere) | ? | 是(语义 + 关键词 + 正则表达式) | 否(仅 FTS5 全文搜索) |
| Token 优化的代码审查上下文 | 是(review 工具,限定于 git-diff) | 是(PR 审查评论) | 否(代码上下文助手) | 否(上下文层,而非审查) |
| 安全扫描 | 是(Semgrep p/auto + 3 条规则叠加,SARIF) | ? | ? | 否 |
| 可自托管 | 是(默认使用 stdio,绑定到机器) | 是(Docker / K8s / 隔离网络) | 是(自托管实例) | 是(100% 本地运行,无需 API 密钥) |
| 免费 / 开源 | 是(Apache-2.0) | 否(专有 SaaS;提供免费的 OSS 层级) | 否(Enterprise 许可证,源码不公开) | 是(MIT) |
来源:Greptile · Greptile 定价 · Sourcegraph MCP · CodeGraph。标记为 ? 的单元格表示竞品未公开说明的能力,并非确认其不具备这些能力。
安全
- 明确选择 -- 云端嵌入出错时会报告错误;运行时不会静默切换模型,也不会回退到本地 ONNX。
- 错误处理 -- 工具会返回包含修复建议的错误字符串,不会崩溃。
- 只读挂载 -- Docker 模式会将仓库挂载为
:ro(只读)。 - 防 SSRF 的端点 -- 在进行任何出站调用前,都会验证自定义
[models.*]单元格中的base_url值。
如需报告漏洞,请参阅 SECURITY.md。
从源码构建
git clone https://github.com/n24q02m/crg
cd crg
uv sync --group dev
uv run pytest
uv run crg
**要求:**Python 3.13、uv。
信任模型
此插件实现了 TC-Local(绑定到机器,单一信任主体)。完整分类请参阅 mcp-core 信任模型。
| 模式 | 图数据库 | 云端凭据 | 谁可以读取你的数据? |
|---|---|---|---|
| stdio(默认) | <repo>/.crg/graph.db(已加入 git 忽略规则) | ~/.crg/config.toml(AES-GCM,使用绑定到机器的密钥) | 只有你的 OS 用户 |
| HTTP 自托管(多用户) | 每位用户各自使用 ~/.crg/subs/<sub>/graph.db | 每位用户各自使用 ~/.crg/subs/<sub>/config.json | 只有经过身份验证的用户 |
迁移与更新日志
图、安全扫描缓存和抑制状态现在都使用软件包专属的
.crg/ 目录。升级后运行一次 graph(action="build", full_rebuild=true),
若需要语义搜索,再运行 graph(action="embed")。旧的
.better-code-review-graph/ 状态目录,以及含义不明确的
.code-review-graph/ 和 .code-review-graph.db 路径及其 SQLite
辅助文件均会原样保留,不会迁移。请检查并明确重新应用所需的
抑制规则。
v2.0 版本新增了时间列(每个节点和边上都有 valid_from_sha / valid_to_sha)
以及一个可选的安全扫描器。首次打开 GraphStore 时会自动应用架构迁移,
并将升级前的 DB 备份写入 <graph_db>.pre-2.0.bak。如需降级并恢复备份:
CRG_DOWNGRADE_TO_1_X=1 uvx better-code-review-graph
完整的架构变更列表、行为变更和回滚步骤: BREAKING_CHANGES.md。按版本整理的完整历史: CHANGELOG.md。
文档
完整文档请访问 mcp.n24q02m.com/servers/better-code-review-graph/setup/:
- 设置 -- Claude Code、Codex、Gemini CLI、Cursor、Windsurf、mcp.json 的安装方法
- 模式概览 -- stdio / local-relay / remote-relay / remote-oauth
- 多用户设置 -- 按 JWT sub 划分的凭据模型
使用任意 MCP 客户端中的 help 工具,查看各工具的内联参考文档。
许可证
Apache-2.0 -- 请参阅 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。