mcpField
A
arbor

arbor

本地服务
github.com/Anandb71开发工具1621 天前更新

关于 arbor

arbor 构建代码语义依赖图,为开发者和编码 Agent 查询影响范围、调用路径及 API 用法。它还支持 CI 风险检查,以及 Python 项目中的 AI 模型退役检查。

主要功能

  1. 01代码符号与依赖的语义图
  2. 02调用者、被调用者及路径遍历
  3. 03带置信度和风险的变更影响分析
  4. 04基于影响范围的 CI 门禁
  5. 05Python AI 模型用法与退役检查

适用场景

  1. 01修改函数前查找调用者
  2. 02评估拉取请求的变更风险
  3. 03定位使用退役 AI 模型的 Python 调用

MCP 相关

README 说明可通过 MCP 工具查询代码图,其中包括 `find_api_usages`。文档也提及 MCP 传输和 Apps。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Arbor

为人和 Agent 提供代码上下文。
找出调用某个函数的代码。追踪代码中的调用路径。
在你造成问题之前,就知道会有什么代码被破坏。

Rust CI Crates.io 最新版本 GHCR Glama MCP 目录 MIT 许可证

并排对比:Agent 使用 grep-and-read 浏览 tokio(调用工具 47 次,仍在搜索),以及同一 Agent 使用 arbor 的代码图谱(调用图谱 4 次、读取 1 次,即告完成)

模拟回放 — arbor 命令及其输出均为真实内容(tokio @ 178k LOC)。方法说明:BENCHMARKS.md

v3.1.0 · 查找调用即将停用的 AI 模型的代码:arbor retirements 会列出 Python 项目中直接调用 OpenAI、Anthropic 和 Google SDK,且使用已停用或即将停用模型的代码,并给出替代模型和所需的更改;可在本地运行,也可作为 GitHub Action 运行。arbor usages 和 MCP 工具 find_api_usages 会列出所有此类 SDK 调用及其路由和模型。发行说明


为什么选择 Arbor

大多数 AI 编码工具把代码视为文本。Arbor 会构建一个语义依赖图谱——以函数、类和模块为节点,以调用、导入和继承为边——然后以确定性精度回答考虑执行路径的问题:

问题Arbor 的回答
如果我更改这个符号,哪些代码会出问题?标明深度、置信度和风险级别的影响范围
哪些代码会直接或间接调用它?沿调用图遍历调用方和被调用方
A 和 B 之间的最短路径是什么?通过实际依赖关系查找 A* 路径
这个 PR 的风险是否过高,不适合合并?根据影响范围阈值设置 CI 门禁

不靠关键词猜测。不产生嵌入式幻觉。一个图谱,支持所有接口。

如果图谱无法确定,它会如实说明——边带有置信度,存在歧义的解析结果会明确标记,而不是隐藏起来。坦诚承认未知,胜过自信地给出错误答案。


v3.1.0 新功能

本次功能版本为调用 AI 模型 API 的 Python 代码带来两条命令。两者都在本地运行, 无需账户、API 密钥或遥测。

新功能功能说明
arbor retirements列出直接调用 openai、anthropic 和 Google SDK 的代码中,使用了提供商已弃用或即将弃用的模型的调用:包括日期、提供商列出的替代模型、随之变化的参数,以及代码库当前的选择。OpenAI 将于 2027 年 1 月 14 日停用 gpt-4o、gpt-4o-mini、gpt-4.1 和 gpt-4.1-mini。下文了解更多
GitHub Action mode: retirements在 CI 中执行相同检查:生成列出所有受影响调用的作业摘要,并对最紧急的条目发出警告。默认只发出警告;仅当设置 retirements-fail-on,或检查无法运行时,才会导致构建失败。
arbor usages 和 find_api_usages列出每个 OpenAI、Anthropic 和 Gemini SDK 调用及其文件和行号、客户端路由(直接调用、Azure、自定义 base_url、Bedrock、Vertex)和模型 ID,供人和 Agent 使用。只有符合一小部分受支持语法的值才会被确认;其他所有值都会附带带类型的缺口说明。报告确认的内容

目前仅支持 Python;图提取方式不变(保存的图会在首次使用时重建一次, 与每次升级后的行为相同)。上一版本的详情请参阅 3.0.5 版本说明。

v3.0.3(Rust 调用的路径和宏解析、按符号区分差异、--base)

这是一个修复版本。以下每一项都是错误结果,而非缺少功能,并且 都附带回归测试。

修复原有问题
解析 Rust 调用crate::jobs::enqueue()、Type::new()、self.helper() 以及 assert!/format! 内的调用都没有生成边,因此大量使用的 Rust 函数会被报告为没有调用者。现在会通过模块树解析路径,并将宏参数作为代码读取。
按符号区分 arbor diff被修改文件中的每个符号都会被视为已更改,因此在繁忙文件中新增函数时,会报告该文件的整个影响范围。现在新符号不会被视为有影响;只有已修改的符号才会。调用变更的测试会列为值得运行的测试,但不会计入影响范围。
--base 和 --staged除非设置了 ARBOR_DIFF_BASE,否则 arbor diff、check 和 summary 只能看到未提交的更改。--base origin/main 会与合并基点比较,这与拉取请求所显示的结果一致;--staged 只检查已暂存的内容。
语言保持隔离TypeScript 的 enqueue 可能会被报告为 Rust 的 enqueue 的调用者。解析现在会限制在同一语言系列中,并且 callers/callees 会分别列出名称相同的定义。
不再使用过期图切换分支后,如果没有剩余文件的时间戳晚于图的时间戳,查询结果会来自旧分支的图。现在图会记录生成时所基于的提交,并在 HEAD 移动时刷新。
继承边class Middle(Base) 不会生成边,因此更改基类时会显示影响范围为零。现在会生成 extends/implements 边,并且继承的方法仍可被访问。
调用环按一个处理闭合的函数环占据了每个中心性排名的顶部。现在会在 PageRank 之前将环折叠处理。
加固 HTTP bridgearbor bridge --http 会接受跨域和 DNS 重绑定请求。现在会检查 Origin/Host,并要求请求体为 JSON。
减少 bridge 噪声bridge 会在繁忙循环中反复为忽略的构建目录重新建立索引。

此外新增:arbor receipt。每轮编码 Agent 操作后,它会用通俗语言说明 发生了哪些更改,以及改动了哪些你未要求修改的内容;使用 arbor receipt undo 可还原这一轮操作。

3.0.0 的缓存图会在首次使用时自动重建。

v3.0.0 — 正确的节点(符号解析会参考导入文件)

一项经过验证的修复。 符号解析会参考导入文件。 当一个裸名称匹配多个模块中的定义时,resolve_ref 会退回到 SameDir,并将边关联到调用方所在目录中的某个定义——这不是丢弃边,而是自信地路由错误,置信度标记为 0.55。

GraphBuilder 已经为每个文件保留了导入映射,但只有 apply_import_validation 会读取它,而该函数是在边选定之后才为其评分。因此,它从未发现指向错误节点的引用。在同文件检查和同目录检查之间查询导入映射,既能让本地定义优先于导入,也能让显式写明的导入优先于单纯的目录相邻关系。Resolution::ViaImport 的评分为 0.93,高于 SameDir 的 0.55。

测量结果

一个包含 260 个模块、分为 10 层的测试样例,每层都定义了相同的 26 个函数名。真实值根据生成器自身的边列表得出,因此预期答案是精确值,而非估算值。

真实下游数量v2.6.0v3.0.0
1790163
1780161
1610133
14322133
12222119
362261
162246

此前无论真实答案是多少,结果都基本停留在 22 左右。现在结果与实际情况一致。最大枢纽的风险等级从 LOW 升至 CRITICAL。

边总数几乎没有变化(1335 → 1334)。这正是路由错误而非边丢失的特征:边一直都存在,只是指向了错误的节点。

破坏性变更
  • Resolution 新增了一个 ViaImport 变体——穷尽匹配将无法通过编译
  • 边会落到不同节点上,因此缓存的图、存储的节点 ID 以及来自 2.6.0 的中心性基线都会有所不同

PageRank 计算前会先合并调用环。每个强连通分量只排名一次,并将该分量的权重分配给其成员,因此闭合环不会占据排名前列,而有外部调用的环也会让其成员保持在一起。CentralityScores 报告的数值仍是 v2.6.0 的百分位数,即 i / (n - 1)。

已知且仍待解决的问题

以下问题已明确记录,而非留待用户自行发现:

  • 小型目标现在会出现高估(36 → 61,16 → 46)。这比完全不报更安全,但尚不准确。
  • 动态和反射式导入(importlib、__import__、import()、eval(require(...)))从设计上就无法解析;在测试样例中,它们被记录为预期的未命中,而非缺陷。
v2.6.0 — 真实值(保留名称冲突,确定性解析,边置信度,百分位中心性)

关注正确性,而非速度。此前这些情况都会被悄然错误处理。

修复原因
保留重名符号SymbolTable 使用 HashMap::insert,因此第二个 handler、new 或 process 会替换第一个。同名符号中被替换的那个没有调用方,因此不会出现在影响范围中。
解析结果具有确定性通过遍历 HashMap 来判断同目录局部性。Rust 会为每个进程设置不同的 RandomState 种子,因此同一个二进制文件处理相同输入时,每次运行都可能构建出不同的边。现在会在八个全新进程中断言结果一致。
边带有置信度已确认的同文件调用和基于同目录的推测原本属于相同证据。现在每条边都会根据解析方式获得 [0,1] 范围内的分数。
导出的 TS 符号只索引一次export_statement 会递归处理其子项,随后通用循环又递归一次——每个导出符号因此变成共享同一节点 id 的两个顶点。一个包含 149 个文件的应用中产生了 133 个虚假节点,占图的 25%。
可解析未显式声明类型的接收者上的方法调用obj.method() 会被直接丢弃,导致 TS/JS 图几乎没有边——空图报告的影响范围为零,读起来像是“安全”,而不是“未知”。
中心性采用百分位排名分数原本除以图中的最大值,因此排名最高的节点必定为 1.0,而 0.6 的阈值在不同代码库间毫无一致意义。新增一个枢纽节点就会重新缩放所有其他节点。
解析复杂度为 O(1),而非 O(refs × nodes × files)无法解析的引用——标准库和第三方调用,也就是实际代码中的大多数调用点——会触发最坏情况。现在已为后缀建立索引。

新增能力——概念搜索。 子串匹配无法通过 login 找到 get_authenticated;两者没有共同子串。现在会对标识符进行分词,并通过精选的概念集扩展搜索范围,同时将文档字符串、签名和路径与名称一起编入索引。确定性、离线运行,无需模型。该功能可通过库中的 ArborGraph::search_ranked 使用(arbor query 目前仍采用字面子串匹配)。

新增能力——代码块级影响分析。 changed_node_ids_for_ranges 只保留行实际发生变化的符号,而不是触及文件中的所有符号。

在节点集合相同的条件下,应用重复提取修复后测得:

代码库修复前修复后
TypeScript(149 个文件)172 条边196(+14%)
Rust(arbor-graph)116 条边167(+44%)

早期版本生成的图缓存会失效——现在的中心性含义已不同,因此读取过期缓存会导致错误结果。

v2.5.0 — 最后的借口(PageRank 提速 23 倍、并行索引、热启动中心性)
变更测量结果
重写 PageRank — 使用扁平的调用图邻接结构替代逐轮遍历在包含 10k 个节点的图上从 149.8ms 降至 6.6ms(23 倍),并与旧实现进行了并排验证
并行索引 — 解析任务分发至所有核心,组装结果具有确定性Arbor:253ms → 95ms · tokio(178k 行代码):2.7s → 1.6s
热启动中心性 — 监视器根据之前的分数重新计算种子值单文件补丁后约 2 轮即可收敛,而非耗尽完整的 20 轮迭代预算
收敛提前退出最大增量达到 1e-9 时停止迭代——预算是上限,不是硬性要求

觉得某个数字不对?运行 cargo bench -p arbor-graph 来验证:BENCHMARKS.md。

v2.4.0 — 迈向 Agent 原生的飞跃(MCP 2026-07-28、HTTP 传输、Tasks、MCP Apps) | 功能 | 作用 | |---------|--------------| | **MCP `2026-07-28`** | 无状态 `server/discover`、响应缓存(`ttlMs`/`cacheScope`),以及对 `2025-03-26` 客户端的双版本回退支持 | | **Tasks 扩展** | `tasks/get` · `tasks/update` · `tasks/cancel` — 冷启动索引会返回任务句柄,而不是错误 | | **MCP Apps** | 在 Agent 宿主中展示交互式影响范围图(`ui://arbor/blast-radius`)和架构图(`ui://arbor/architecture-map`) | | **HTTP 传输** | `arbor bridge --http --port 3333` — 在负载均衡器后运行无状态 MCP | | **真正的 `get_blast_radius`** | 通过共享的 `arbor-graph::compute_blast_radius`,基于 Git 差异进行影响分析 | | **分页** | `search_symbols` 和 `get_map` 支持 `offset` / `limit` / `hasMore` | | **基准测试** | Criterion 套件 + CI 回归检查门槛 — 参见 [BENCHMARKS.md](docs/BENCHMARKS.md) |

快速开始

# Install (crates.io can lag the latest release: see docs/INSTALL.md)
cargo install arbor-graph-cli

# Index your project (one command)
cd your-project && arbor setup

# Explore before you edit
arbor map . --exclude-test          # ranked project skeleton (~1k tokens)
arbor refactor parse_file           # blast radius of changing a symbol
arbor diff                          # impact of uncommitted git changes
arbor diff --base origin/main       # impact of this branch, as its PR shows it

# Wire up your AI agent
claude mcp add --transport stdio --scope project arbor -- arbor bridge

每轮交互后: arbor hook claude 会让 Claude Code 显示一份回执,说明它更改了什么、动了哪些你没要求它动的内容,以及需要测试什么。查看回执 →

Agent 工作流: 先调用 get_map → 用 search_symbols / get_file_graph 定位代码 → 只读取目标文件。MCP 完整指南 →


查找调用即将停用的 AI 模型的代码

OpenAI 将于 2027 年 1 月 14 日停用 gpt-4o、gpt-4o-mini、gpt-4.1 和 gpt-4.1-mini;Anthropic 和 Google 也会在各自日期停用模型。arbor retirements 会列出使用已停用或即将停用模型的直接 openai、anthropic 和 Google SDK 调用。对于每个调用,它会显示服务提供商列出的替代模型、需要随之更改的参数,以及仓库优先采用的选项(例如 gpt-6-luna 是否应该进行推理)。目前尚未检查通过 LangChain、LiteLLM 或其他封装进行的调用。

npx @anandb71/arbor-cli retirements .
3 calls use models OpenAI shuts down on 14 Jan 2027 (88 days)
  app/chat.py:12  gpt-4o (MODEL, line 8) → gpt-6-luna
                  also change: max_tokens → max_completion_tokens
                  decide: keep reasoning off (add reasoning_effort="none"; keep temperature) or let the model reason (remove temperature)
  app/chat.py:21  gpt-4o-mini (line 22) → gpt-6-luna  fallback of an environment or config lookup: confirm the deployed value
                  decide: keep reasoning off (add reasoning_effort="none") or let the model reason (no change)
                  check: stop and logit_bias are not supported on gpt-6-luna (400).
  • 在本地运行。 无需账户或 API 密钥,也不进行遥测;代码不会离开你的设备。
  • 如实说明置信度。 只有在用法扫描确认调用毫无疑问时,字面量才会被标记为已确认。os.getenv("MODEL", "gpt-4o") 这类回退值、参数默认值、可能被子类覆盖的类属性,以及路由情况不确定的调用,都会标记为请先确认并说明原因;只有使用 --count-unconfirmed 时,这些情况才会导致检查失败。通过 Azure、OpenRouter 或代理进行的调用会单独列出(--include-routed),因为服务提供商的停用日期可能不适用于这些调用;在服务提供商自有主机上设置 base_url 则属于直接调用。Arbor 无法读取的模型以及未分析的代码都会计入统计,不会被隐藏。
  • 由你决定。 如果替代模型的行为本就有所不同(gpt-6-luna 默认使用中等推理强度,因此可以进行推理,而 gpt-4o 不会;claude-sonnet-5-5 默认会进行思考,而它所替代的 Sonnet 模型不会),报告会展示两种选项及各自的成本,并且在你作出选择之前不会更改任何内容。
  • 适用于 CI。 支持 --json、--markdown、--annotations、--markdown-out <file> 和 --fail-within <days>。退出代码为 1 表示已确认的调用使用了已停用模型,或使用了将在你设定的时间范围内停用的模型;停用当天也视为已停用(UTC)。
  • 当前范围: 支持使用 openai、anthropic 和 Google GenAI SDK 的 Python 代码。即将支持 TypeScript 和 JavaScript。

GitHub Action(默认发出警告;只有在你要求时才会导致构建失败):

      - uses: Anandb71/[email protected]
        with:
          mode: retirements
          retirements-fail-on: never   # or: retired, or a number of days such as 90

工作原理、数据来源和完整范围 →


面向 AI Agent(MCP)

Arbor 通过 arbor bridge 提供可用于生产环境的 MCP 服务。默认使用 Stdio;HTTP 为可选项,适用于远程/企业环境。

# Stdio (Claude, Cursor, VS Code)
arbor bridge

# HTTP (MCP 2026-07-28)
arbor bridge --http --port 3333
Cursor / VS Code
{
  "mcpServers": {
    "arbor": {
      "type": "stdio",
      "command": "arbor",
      "args": ["bridge"]
    }
  }
}

模板:templates/mcp/ · 设置脚本:scripts/setup-mcp.sh · scripts/setup-mcp.ps1

17 个 MCP 工具
层级工具适用场景
概览get_map首次调用 — 按 PageRank 排序、受令牌预算限制的项目骨架
精准查询list_entry_points · get_callers · get_callees · search_symbols · get_file_graph · get_node_detail导航至特定符号或文件
广度查询get_logic_path · analyze_impact · find_path · get_knowledge_path追踪依赖、影响范围和路径
Agent 原生get_blast_radius · explain_symbol · audit_security · get_architecture_overview · batch_queryPR 影响分析、项目入门、安全审计、批量查询
SDK 用法find_api_usages查找代码调用 OpenAI、Anthropic 或 Gemini SDK 的位置,以及路由和模型 ID(Python)

每个工具都会返回 { ok, tool, data, meta: { suggested_next_tool, suggested_next_args } },让 Agent 无需再次提示即可链式调用。

注册信息: io.github.Anandb71/arbor · 官方 API 查询 · Glama 列表


CLI 参考

命令说明
arbor setup一次性初始化并建立索引
arbor map按排名排序、受令牌预算限制的项目骨架
arbor query <term>模糊符号搜索(支持 | OR)
arbor callers / callees <sym>单跳图遍历。同名符号按定义列出;可用 jobs::enqueue、Type.method 或 src/jobs.rs:enqueue 缩小范围
arbor entry-pointsHTTP 处理程序、主入口、任务、Webhook
arbor file-graph <path>单个文件中的符号和边
arbor inspect <sym>完整的符号详情
arbor path <a> <b>最短调用图路径
arbor refactor <sym>重构前分析影响范围
arbor usagesPython 中对 OpenAI、Anthropic 和 Gemini SDK 的调用:客户端路由(直接、Azure、自定义 base_url、Bedrock、Vertex)、模型 ID 和类型化缺口;绝不打印凭据。--sdk openai|anthropic|google、--json。没有缺口的值能确认什么:docs/SDK_USAGES.md
arbor retirements直接调用其提供商已弃用或即将弃用的 AI 模型的 SDK(Python):日期和剩余天数、列出的替代项、所需参数变更及各代码库需要做出的选择。--fail-within <days>、--count-unconfirmed、--include-routed、--json、--markdown、--annotations(指南)
arbor diff按符号生成 Git 变更影响报告:新符号不会产生影响范围。--base <ref> 与合并基准比较(即 PR 显示的内容),--staged 仅检查已暂存的变更
arbor checkCI 安全检查门禁(--max-blast-radius N、--base <ref>)
arbor summary自动生成 PR 描述(--base <ref>)
arbor agent review自主 PR 架构审查
arbor agent onboard代码库入门指南
arbor agent guard实时架构安全检查门禁
arbor bridgeMCP 服务(添加 --http 以使用 HTTP 传输)
arbor watch文件变更时实时重新建立索引
arbor receipt list / show / undo用通俗语言记录每轮 Agent 操作所做的变更,并可撤销某一轮操作(指南)
arbor hook claude将 Arbor 接入 Claude Code:添加指令,并在每轮操作后生成记录
arbor gui原生桌面 UI

所有查询命令均支持 --json。map 还支持 --tokens N、--focus "pattern"、--focus-changed。


可视化介绍

Arbor 可视化工具截图


安装

# macOS / Linux: prebuilt binary from the latest GitHub release
curl -fsSL https://raw.githubusercontent.com/Anandb71/arbor/main/scripts/install.sh | bash

# Windows (PowerShell)
irm https://raw.githubusercontent.com/Anandb71/arbor/main/scripts/install.ps1 | iex

# Scoop (Windows)
scoop install https://raw.githubusercontent.com/Anandb71/arbor/main/packaging/scoop/arbor.json

# Rust / Cargo (crates.io can lag the latest release)
cargo install arbor-graph-cli

# npm wrapper (cross-platform)
npx @anandb71/arbor-cli

# Docker
docker pull ghcr.io/anandb71/arbor:latest

固定版本安装:docs/INSTALL.md


语言支持

生产级解析器: Rust · TypeScript / JavaScript · Python · Go · Java · C / C++ · C# · Dart

备用解析器: Kotlin · Swift · Ruby · PHP · Shell

添加语言 →


CI 与拉取请求

arbor diff --markdown
arbor check --max-blast-radius 30 --markdown
arbor summary

GitHub Action(预构建二进制文件,约 5 秒,而编译约需 3–5 分钟):

name: Arbor Check
on: [pull_request]

jobs:
  arbor:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - uses: Anandb71/[email protected]
        with:
          command: check . --max-blast-radius 30 --markdown
          comment-on-pr: true
          github-token: ${{ secrets.GITHUB_TOKEN }}

mode: retirements 会改为运行 arbor retirements。它会生成一份作业摘要,列出所有调用即将退役模型的位置,并标注最紧急的 10 行,这是 GitHub 对每个步骤的数量限制(指南)。


架构

arbor-core (Tree-sitter parsing)
    └── arbor-graph (petgraph + PageRank + impact analysis)
            ├── arbor-cli      — CLI + MCP bridge
            ├── arbor-mcp      — MCP protocol server
            ├── arbor-server   — WebSocket JSON-RPC
            ├── arbor-watcher  — incremental file watcher
            └── arbor-gui      — desktop UI

文档: 快速入门 · 架构 · 图谱架构 · MCP 集成 · 收据 · 基准测试 · 路线图 · 理念

发布渠道: GitHub Releases · crates.io · GHCR · npm · VS Code / Open VSX · Scoop — 发布指南


理念

  1. 消费者优先 — 美观、直观、即刻实用
  2. 无障碍性其次 — 兼容各种生态系统,可在任何地方运行
  3. 经济实惠再次 — 开销极低,从笔记本电脑到单体应用都适用

Arbor 本地优先:不强制外传数据,支持离线使用,且为开源软件。安全政策 →


贡献

cargo build --workspace
cargo test --workspace
cargo clippy --workspace --all-targets --all-features

CONTRIBUTING.md · 适合新手的议题 · 行为准则


Contributors

Anandb71 holg cabinlab Karthiksenthilkumar1 zacwolfe sanjayy-j sathguru07 Junaid

7 contributors | View all


License

MIT — see LICENSE.

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。