# Graph Indexer: code graph MCP server for AI coding agents

> Graph Indexer is a free, MIT-licensed, local code graph and search engine for AI coding agents over MCP: exact references, call graphs, change impact and edit checks.

Graph Indexer is a live code graph and search engine for AI coding agents, served locally over MCP. It gives agents exact references, call graphs, change impact and edit checks, with no model, no network and no native build. It is free, open source (MIT) and needs Node.js 22.5 or newer.

Install it in your repository with one command:

```bash
npx graph-indexer init
```

## What does Graph Indexer do?

Graph Indexer parses your repository with tree-sitter and keeps a structural index: every definition, every reference bound to the definition it actually points at, the call graph, inheritance, imports and which tests exercise what. Agents query it through eight read-only MCP tools instead of reading whole files and grepping. See [How Graph Indexer works](/how-it-works/).

## Why is it better than grep?

Graph Indexer lists the callers of the method you mean, not of every method with the same name. On 400 nestjs symbols checked against the TypeScript compiler:

| Method | Precision | Recall |
|---|---|---|
| Graph Indexer `find_references` | 99.7% | 96.2% |
| grep for the name | 12.8% | 99.3% |

Go (checked against the Go type checker) reaches 99.2% to 100% precision and Java (checked against the Java compiler) 95.5% to 99.4%. In real Claude Code sessions answering 12 code questions, the agent got all 12 exactly right with Graph Indexer against 9 of 12 without. Across 24 code questions in two repositories, it cost 16% less than with no index. Fixing real issues showed no measurable saving. Details: [benchmarks](/benchmarks/) and [Graph Indexer vs grep](/graph-indexer-vs-grep/).

## What are the eight tools?

| Tool | Use it to |
|---|---|
| `read_code` | read symbols, line ranges or files, with where every name they use is defined |
| `search_text` | grep any text, with the enclosing definition of each match |
| `search_code` | find where a behaviour or identifier lives |
| `find_references` | see every use before renaming or changing a signature |
| `call_graph` | trace callers and callees across files |
| `change_impact` | get the blast radius of a change and the tests to run |
| `check_changes` | verify uncommitted edits without building |
| `outline` | see a file's structure or a ranked map of the repository |

All tools are read-only and typically answer in about 400 to 1,500 tokens. Full reference: [tools](/tools/).

## Which agents and languages does it support?

The `init` command configures Claude Code, Cursor, VS Code Copilot, Codex, Gemini CLI, OpenCode, Kilo Code, Junie, Zed and Devin. Guides: [all agents](/agents/), [Claude Code](/agents/claude-code/), [Cursor](/agents/cursor/), [VS Code Copilot](/agents/vscode-copilot/), [Codex](/agents/codex/), [Gemini CLI](/agents/gemini-cli/), [OpenCode](/agents/opencode/), [Kilo Code](/agents/kilo-code/), [Junie](/agents/junie/), [Zed](/agents/zed/) and [Devin](/agents/devin/).

Sixteen tree-sitter grammars ship as WebAssembly: JavaScript, TypeScript, TSX, Python, Go, Java, Kotlin, Scala, C#, Rust, C, C++, Ruby, PHP, Bash and CSS. Binding is deepest for TypeScript, JavaScript, Python, Go, Java, C# and Rust. See [languages](/languages/).

## How do I install the Claude Code plugin?

```text
/plugin marketplace add MaquinaTech/graph-indexer
/plugin install graph-indexer@graph-indexer
```

The plugin bundles the MCP server, three hooks and a read-only `code-structure` sub-agent. See [the plugin page](/claude-code-plugin/) and the [install guide](/install/).

## Is it private?

Graph Indexer itself makes no network calls and sends no telemetry. It runs locally, talks to the agent over stdio and never reads outside the repository. The agent still sends what it reads to its model provider. The index lives in `.graph-indexer/` and is git-ignored.

## How fast is it?

A full index of nestjs (1,641 files, 96k lines) takes 3.7 seconds, and only changed files are re-parsed afterwards. Warm graph tool calls take 1 to 4 ms.

## What are the limits?

Graph Indexer is not a type checker. Generics, reflection, `any` and string-token dependency injection are only partly visible, and Java was the weakest language measured. Agent benchmarks use small samples.

## Where can I learn more?

- [Install](/install/), [Claude Code plugin](/claude-code-plugin/), [Tools](/tools/), [How it works](/how-it-works/), [Languages](/languages/), [FAQ](/faq/)
- [Benchmarks](/benchmarks/), [Graph Indexer vs grep](/graph-indexer-vs-grep/)
- Source and docs: https://github.com/MaquinaTech/graph-indexer
- npm: https://www.npmjs.com/package/graph-indexer

---

Updated: 2026-09-23 · Graph Indexer 3.0.0 · https://graph-indexer.vercel.app/
