A community-driven registry for the Claude Code ecosystem. Not affiliated with Anthropic.
Are you the author? Sign in to claim
Structural graph memory for AI coding assistants — MCP server for codebase navigation
Structural graph memory for AI coding assistants. Map your codebase. Navigate by structure. Read only what matters.
repo-graph gives LLMs a map of your codebase — entities, relationships, and flows — so they can navigate to the right files without reading everything first.
Instead of flooding an LLM's context window with your entire codebase (or hoping it guesses right), repo-graph builds a lightweight graph of what exists, how things connect, and where the entry points are. The LLM queries the graph, finds the minimal set of files it needs, and reads only those.
https://github.com/user-attachments/assets/a1e4171b-b225-40d4-9210-39453e14b76a
https://github.com/user-attachments/assets/fc3191e5-fc35-4bd7-8372-72af55995883
Same bug, same model, same prompt — the only difference is whether repo-graph is installed.
The task: fix a reversed comparison operator in a Go + Angular monorepo (566 nodes, 620 edges).
| Without repo-graph | With repo-graph | |
|---|---|---|
| Tokens used | 75,308 | 29,838 |
| Time to fix | 4m 36s | ~30s |
| Files explored | ~15 (grep, read, grep, read...) | 2 (flow lookup + handler file) |
| Outcome | Found and fixed the bug | Found and fixed the bug |
2.5x fewer tokens. ~9x faster. Same correct fix.
Both runs used identical conditions to keep the comparison fair:
/clear with no prior conversationgroup_controller.go:57 on its ownWithout repo-graph, Claude greps for keywords, reads files, greps again, reads more files, and eventually narrows down to the bug. With repo-graph, Claude calls flow("groups"), gets back the exact handler function and file, reads it, and fixes it.
Browse pre-generated examples for FastAPI, Gin, Hono, and NestJS — real graph output you can inspect without installing anything.
LLMs working on code waste most of their context on orientation:
This is expensive, slow, and gets worse as codebases grow.
repo-graph scans your codebase once and builds a graph of:
Then it exposes 11 MCP tools that let the LLM:
The LLM gets structural context in a few hundred tokens instead of reading thousands of lines.
| Language | Detection | What it extracts |
|---|---|---|
| Go | go.mod | Packages, functions, HTTP routes (gin/echo/chi/stdlib), imports |
| Rust | Cargo.toml | Crates, modules, structs, traits, functions, routes (Actix/Rocket/Axum) |
| TypeScript | tsconfig.json / package.json | Modules, classes, functions, import relationships |
| React | react in package.json | Components, hooks, context providers, React Router routes, fetch/axios calls, flows |
| Angular | @angular/core in package.json | Components, services, guards, DI injection, HTTP calls, feature flows |
| Vue | vue in package.json | SFCs, composables, Vue Router routes, fetch/axios calls |
| Python | pyproject.toml / setup.py / requirements.txt | Packages, modules, classes, functions, routes (Flask/FastAPI/Django) |
| Java/Kotlin | pom.xml / build.gradle | Packages, classes, routes (Spring/JAX-RS/Ktor/WebFlux/Micronaut) |
| Scala | build.sbt | Packages, objects/classes/traits, routes (Play/Akka HTTP/http4s) |
| Clojure | project.clj / deps.edn | Namespaces, defn/defprotocol/defrecord, routes (Compojure/Reitit) |
| C#/.NET | .csproj / .sln | Namespaces, classes, routes (ASP.NET/Minimal API) |
| Ruby | Gemfile / .gemspec | Files, classes, modules, Rails routes |
| PHP | composer.json | Namespaces, classes, interfaces, routes (Laravel/Symfony) |
| Swift | Package.swift / .xcodeproj | Files, types (class/struct/enum/protocol/actor), Vapor routes |
| C/C++ | CMakeLists.txt / Makefile / meson.build | Sources, headers, classes, structs, enums, namespaces, includes |
| Dart/Flutter | pubspec.yaml | Modules, classes, widgets, go_router/shelf routes |
| Elixir/Phoenix | mix.exs | Modules, functions, Phoenix router scopes + routes |
| Solidity | .sol files / foundry.toml / hardhat.config.* | Contracts, interfaces, libraries, events, inheritance |
| Terraform | .tf files | Modules, resources, variables, outputs, module sources |
| SCSS | .scss files present | File-level bloat analysis |
Cross-cutting extractors (work across all languages):
.proto filesfetch/axios calls linked to backend routesMultiple languages can match one repo (e.g., Go backend + Angular frontend + SCSS). Each contributes its nodes and edges into a single unified graph.
The package name is the run command — uvx mcp-repo-graph just works. No prior
pip install, nothing to keep on PATH. This is the same command VS Code, Cursor,
and the MCP registry use under the hood.
Requirements: Python 3.11+, and uv if you use the
uvx path. Prebuilt wheels ship for the Rust engine on Linux (x86_64, aarch64),
macOS (Intel + Apple Silicon), and Windows (x86_64) — no Rust toolchain needed.
claude mcp add repo-graph -- uvx mcp-repo-graph --repo .
(--repo . points the graph at the current project; use an absolute path to pin it.)
One command — adds the server to your user config:
code --add-mcp '{"name":"repo-graph","command":"uvx","args":["mcp-repo-graph","--repo","${workspaceFolder}"]}'
Or click Install on the MCP gallery entry,
or add it to .vscode/mcp.json manually (see below).
Add this to your client's MCP config (.mcp.json, .cursor/mcp.json,
.vscode/mcp.json, or ~/.claude.json):
{
"mcpServers": {
"repo-graph": {
"command": "uvx",
"args": ["mcp-repo-graph", "--repo", "/path/to/your/project"]
}
}
}
Prefer a persistent install? pip install mcp-repo-graph (or uv tool install mcp-repo-graph) puts a mcp-repo-graph / repo-graph command on your PATH; then
use "command": "mcp-repo-graph" in the config above.
--repo also accepts a git URL. Point it at any public repo without cloning
first — it shallow-clones and maps it (requires git):
uvx mcp-repo-graph --repo https://github.com/org/repo
uvx --from mcp-repo-graph repo-graph-init --repo /path/to/your/project
# or, if installed: repo-graph-init --repo /path/to/your/project
This generates the graph, writes .mcp.json and CLAUDE.md instructions, and gets your
AI assistant ready to use repo-graph. If you used the one-liners above, you can skip
this — the server builds the graph on first connect.
The AI assistant now has access to all 11 tools. Example queries it can answer:
status toolflow toolimpact toolactivate / find toolsdense_text toolgraph_view toolThe graph auto-refreshes on cold start whenever the source tree has changed since the
cached .gmap was written, so it's never stale when your assistant connects. To
pre-warm the cache on every commit instead — so even the first query is instant — add
a pre-commit hook:
# .git/hooks/pre-commit (or add to your existing hook)
#!/bin/sh
uvx --from mcp-repo-graph repo-graph-init --repo . # or: repo-graph-init --repo .
git add .ai/repo-graph/
chmod +x .git/hooks/pre-commit
Every commit keeps the graph current. The LLM always has a fresh map without wasting a single token on generate.
Tip: If you don't want graph data in version control, add
.ai/repo-graph/to.gitignoreand skip thegit addline — the graph will just live locally.
repo-graph exposes 11 tools across four tiers.
| Tool | Parameters | Description |
|---|---|---|
generate | repo_path (optional) | Scan the codebase with tree-sitter, rebuild the graph, run cross-stack resolvers, and cache it |
| Tool | Parameters | Description |
|---|---|---|
status | (none) | Repo overview: node/edge counts, detected kinds, entry points, dense preview. Call this first to orient |
flow | feature | End-to-end flow for a feature — entry point → service layer → data store, in layered tiers |
trace | from_node, to_node | Shortest path between two nodes, hop by hop with tier transitions |
impact | node, direction (downstream/upstream), depth | Blast radius — what a node affects (downstream) or depends on (upstream) |
neighbours | node | All direct connections to and from a node, one hop each way |
| Tool | Parameters | Description |
|---|---|---|
activate | seeds, top_k | Spreading activation (Personalized PageRank) from seed nodes — the most relevant nodes to your seeds |
find | query | Find nodes by name or qualified-name pattern |
dense_text | (none) | The full graph in dense sigil notation — the primary context tool; feed it to the LLM to navigate without reading files |
| Tool | Parameters | Description |
|---|---|---|
graph_view | node (optional), depth | Visual ASCII map — a node's tree/neighbourhood, or the full overview |
reload | (none) | Re-generate the graph from source after code changes |
mcp-repo-graph is a thin Python MCP server that wraps glia, a Rust engine.
.ai/repo-graph/ as a zero-copy .gmap (rkyv + mmap) plus JSON projections for portabilityThe Rust engine lives in its own glia repo; mcp-repo-graph is the MCP-facing thin wrapper.
If auto-detection misses a weird layout, drop .ai/repo-graph/config.yaml in the target repo:
skip:
- legacy # directory basenames excluded from the walk
- scratch
roots: # explicit roots heuristics miss — added on top of auto-detection
- path: apps/weird-layout
kind: python
- path: services/custom
kind: go
kind values: go, rust, python, typescript, react, vue, angular, java, scala, clojure, csharp, ruby, php, swift, c_cpp, dart, elixir, solidity, terraform. config.json works too if you prefer.
Generated files live in .ai/repo-graph/ inside the target repo:
nodes.json — [{id, type, name, file_path, confidence, ...}, ...]edges.json — [{from, to, type}, ...]flows/*.yaml — named feature flows with ordered step sequences and kind (http/page/cli/grpc/queue)state.md — human-readable snapshot for quick orientationCommon edge types: imports, defines, contains, uses, calls, handles, handled_by, exports, includes, tests, cross-stack HTTP links.
repo-graph runs on your machine and is built to keep your code there. Full text: PRIVACY.md.
.ai/repo-graph/ directory and stays on your device.uvx/pip downloads the package and its prebuilt engine wheel from PyPI.--repo, repo-graph runs git clone against the URL you specified; nothing is sent to repo-graph or its author. A local --repo path (the default) makes zero network calls.MIT
If repo-graph saved you time, consider buying me a coffee.
Run Claude Code as an MCP server so any agent can delegate coding tasks to it
Browser automation using accessibility snapshots instead of screenshots
Secure MCP server for MySQL database interaction, queries, and schema management
English-first Korean equity intelligence MCP — DART filings, foreign-holder 5%-rule flows, activist filings, KRX news. F