The tool surface collapses from 13 → 6
Every tool is now a natural verb backed by a Rust engine primitive (glia 0.4.18), so each call returns a complete, ranked, located answer in one shot — instead of the agent composing a dozen low-level lookups.
The 6 tools
orient— repo overview, entry points, and a blind-spots note (which languages/edges the graph under-links, so you know when to grep). (← status + dense_text + graph_view)find— any text → the ranked nodes that matter: a symbol, keyword, stacktrace, failing test, or diff.expand=truefans out to the neighbourhood. (← find + locate + activate)impact— blast radius: what a change affects or depends on, ranked and located, with likely-dead code flagged⊘. (← impact + neighbours)trace— a feature end-to-end across the stack, or the shortest path between two nodes. (← flow + trace)read— a node's exact source, plus who calls it and what tests it.refresh— rebuild the graph (incremental; self-updates as you edit).
Why fewer tools
The MCP layer is a fixed per-turn cost. Fewer, more powerful tools mean less overhead and less agent confusion — while the engine does the ranking, locating, and dead-code detection.
Also new
- Liveness (
⊘) andpath:linenow come from the engine, not a wrapper heuristic. - README: "Where it fits best" (monorepos, polyrepo, large/legacy codebases — grep wins on small single-language repos) and "Use it without MCP" (call
repo-graph-pydirectly, no per-turn MCP cost).
Requires repo-graph-py>=0.4.18. Wrapper-only release; engine unchanged.
Install: uvx mcp-repo-graph install