# arbor

Turns a codebase into a graph of functions, classes and modules linked by calls and inheritance, so an agent can answer questions about structure without guessing from text.

- MCP server · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed · ★ 162
- Author: Anandb71
- License: MIT · policy=link-only · description only; the file stays with the author
- Source: https://github.com/Anandb71/arbor
- Updated: 2026-10-22
- HTML: https://affpapa.org/en/nevibecode/mcp/arbor

## What it does

Arbor indexes a repository into a semantic graph. Functions, classes and modules are the nodes; calls, imports and inheritance connect them. On top of that graph an agent can list callers and callees, measure what a symbol change puts at risk, or trace the shortest route between two places in the code. Edges carry a confidence score, and the graph labels resolutions it cannot settle instead of hiding them. A stated unknown beats a confident mistake.

The engine ships as the `arbor` CLI. A subset of its answers is exposed as MCP tools, `find_api_usages` among them, so Claude, Codex, Cursor and other clients can query the same graph. There is also `arbor retirements`: in a Python codebase it lists calls to OpenAI, Anthropic and Google SDKs that target a model the provider has retired or will retire, along with the replacement and the changes it brings. The same check runs as a GitHub Action. Both work offline, with no account or API key.

The new SDK-facing commands read Python only for now; graph extraction is otherwise untouched. A saved graph is rebuilt once on first use after an upgrade, so that first run takes longer.

## Requirements
- Needs: Python and uv (commands run via uvx)

## Install

### Claude Code (native platform)

**Install**
- The MCP registry has no launch command for it: see the repository README

## When to use it
- find every caller of a function before editing it
- estimate the blast radius of changing a symbol
- trace the shortest path between two pieces of code
- catch calls to retired AI models in a Python repo
- gate a pull request on blast-radius thresholds in CI

## Example prompts
- Use arbor to list the callers of this function and how deep the chain goes
- Scan this Python project for SDK calls to retired OpenAI, Anthropic and Google models and show the replacements
- If I change this class signature, what breaks?

## Similar
- [REA](https://affpapa.org/en/nevibecode/mcp/rea.md) — MCP server · ★ 386989
- [GitHub](https://affpapa.org/en/nevibecode/mcp/github.md) — MCP server · ★ 33918
- [Netdata](https://affpapa.org/en/nevibecode/mcp/netdata.md) — MCP server · ★ 81115
- [browser-use](https://affpapa.org/en/nevibecode/mcp/browser-use.md) — MCP server · ★ 119160
- [Codebase Memory](https://affpapa.org/en/nevibecode/mcp/codebase-memory.md) — MCP server · ★ 47392
- [mcp-server](https://affpapa.org/en/nevibecode/mcp/mcp-server.md) — MCP server · ★ 43872

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
