Maps your codebase into a compact symbol graph to help AI coding agents navigate repositories without re-reading every file.
Also known as glincker/stacklit
- Stars
- 131
- Tools
- —
- Downloads, 30 days
- —
- Latest version
- —
- Last commit
- Nov 9, 2026
- License
- MIT
What is stacklit MCP?
stacklit maps your codebase into a compact symbol graph to help AI coding agents navigate repositories without re-reading every file.
Summary generated from the project's README
About stacklit MCP server
Stacklit provides a way to map codebases into compact symbol graphs, allowing AI coding agents to navigate large repositories without reading every file. By parsing code with tree-sitter, it generates a stacklit.json file containing modules, exports, and dependency edges. This approach reduces the token burden on LLMs, as seen in a 19,500 line Go repository requiring only 137 tokens for a map.
Developers can run this locally as a Go binary or via npm and brew. It functions without an LLM and makes no network calls, ensuring privacy and determinism. The tool includes a CLI with commands like query, slice, and impact to help agents find specific code locations. For those using MCP, the stacklit serve command provides 15 tools to integrate directly with AI assistants.
It supports 48 languages and formats, with a symbol graph and call edges available for 20 specific languages including Python, Rust, and TypeScript. The system is designed to be committed to version control so that the index stays fresh alongside the code.
What you can do with it
- 1Reduce LLM token consumptionAn AI agent can use a compact map instead of crawling entire files to understand a repository.
- 2Navigate complex dependency structuresA developer can ask an AI to find specific function definitions or code paths using the symbol graph.
Written from the project's README. Every use case is checked against a quote from it.
How to install stacklit MCP
Formats verified 10 Nov 2026Add to CursorAdd to GooseInstall stacklit MCP in Claude Code
$ claude mcp add stacklit -- npx -y stacklitInstall stacklit MCP in Cursor
~/.cursor/mcp.json
{
"mcpServers": {
"stacklit": {
"command": "npx",
"args": [
"-y",
"stacklit"
]
}
}
}Install stacklit MCP in VS Code
.vscode/mcp.json
{
"servers": {
"stacklit": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"stacklit"
]
}
}
}Install stacklit MCP in VS Code CLI
$ code --add-mcp '{"name":"stacklit","type":"stdio","command":"npx","args":["-y","stacklit"]}'Install stacklit MCP in Claude Desktop
claude_desktop_config.json
{
"mcpServers": {
"stacklit": {
"command": "npx",
"args": [
"-y",
"stacklit"
]
}
}
}Install stacklit MCP in Codex
$ codex mcp add stacklit -- npx -y stacklitInstall stacklit MCP in Codex config.toml
~/.codex/config.toml
[mcp_servers.stacklit] command = "npx" args = ["-y", "stacklit"]
Install stacklit MCP in Gemini CLI
$ gemini mcp add -s user stacklit npx -- -y stacklitInstall stacklit MCP in Gemini settings.json
~/.gemini/settings.json
{
"mcpServers": {
"stacklit": {
"command": "npx",
"args": [
"-y",
"stacklit"
]
}
}
}Automated checks
Ran Nov 12, 2026Full report →Passed our automated checks. That is not a security audit: read the code and give the server the narrowest access it needs. How checks work
- Source repository linked and reachablePass
- Open source license (OSI)Pass
- Commit or release in the last yearPass
- Package name not close to a popular packagePass
- Remote endpoint uses HTTPSNot checked
- Destructive tools are labelledNot checked
- No hidden instructions to the modelPass
- No critical advisory in the package or its dependenciesNot checked
README
View on GitHubStacklit maps your codebase once and keeps the map fresh. It parses your repo with tree-sitter and writes stacklit.json: modules, exports, dependency edges and hints. Commit it, and your coding agent reads a few hundred tokens instead of crawling your files, then uses a few commands (query, slice, impact) to go straight to the right file.
Free and MIT, no paid tier. One Go binary, local and deterministic, no LLM, and the CLI makes no network calls. (The map page can load language icons from thesvg.org; STACKLIT_MAP_ICONS=off removes that.)
Install
npx stacklit init # scan, write the index, open the map
stacklit setup # wire up the assistants it detects
git add stacklit.json && git commit -m "add stacklit index"
Also: brew install glincker/tap/stacklit, npm install -g stacklit, go install github.com/glincker/stacklit/cmd/stacklit@latest, or a binary from Releases.
See it
Output
stacklit derive prints a compact map for a prompt (gin v1.10.0, 137 tokens, module list trimmed here):
gin | go | 8 modules | 19,537 lines | Gin, GitHub Actions, net/http
test: go test ./... | env: PORT
modules:
binding binding | depends: bytesconv, json
internal/bytesconv bytesconv | depended-by: binding, render, root
render render | depends: bytesconv, json
root root package | depends: binding, bytesconv, json, render
do-not-touch: .github/
stacklit query returns a token-budgeted slice of the symbol graph (output trimmed here):
$ stacklit query "how is the symbol graph built" --budget 600
internal/cli/graphcmds.go
50-63 func buildSymbolGraph(root string, includeTests ...bool) (*graph.SymGraph, error)
calls BuildSymbols E0.95
internal/graph/resolve.go
955-961 func BuildSymbols(root string, files []string, eo ExtractOptions) *SymGraph
What you get
| Index | stacklit.json, a Mermaid diagram (DEPENDENCIES.md by default, set with output.mermaid) and an interactive stacklit.html map |
| Languages | 48 languages and formats indexed; symbol graph for 20 (list) |
| Queries | query, explain, impact, path, hubs, slice, each with a hard --budget |
| MCP | stacklit serve: 15 tools, or --profile minimal for 4 (about 230 tokens of schema) |
| Hooks | git post-commit refresh; optional Claude Code hook that points a grepped identifier to its definition |
| CI | export (graphml, cypher, dot, mermaid and more), check architecture rules, status freshness, merge-graphs, a GitHub Action |
| Deterministic | same repo, same bytes. A committed index only changes when the code does |
| Privacy | no telemetry, no upload. The map loads language logos from thesvg.org unless STACKLIT_MAP_ICONS=off (details) |
Assistants
stacklit setup sets up 25 assistants, including Aider, Cline, Continue, OpenCode, Roo Code and Kiro, plus a generic AGENTS.md (stacklit setup --list shows all 26 targets). Anything else can read stacklit.json directly.
Languages
Stacklit indexes 48 languages and formats (full table). Symbol graph and call edges (query, slice, impact) cover 20 of them.
Symbol graph and call edges (20)
Index only (modules, exports and imports, no call edges)
Anything else gets line counts and language detection.
Benchmark
Two tests, with different answers. The first, with no model in the loop: six pinned repos in six languages, 58 tasks, tokens as bytes / 4. The derived map is 137 to 1,351 tokens. On 47 where-is-X questions one stacklit query with a 1,000 token budget put the right file first on 81% (95% interval 70 to 91) and in the top five on 96%. Grep with a hand written pattern did better, 89% first and 100% in the top five. The 81% was tuned after looking at failures, so treat it as an upper bound. Method and limits: bench/RESULTS.md.
The second is a real agent test, run twice. Round 1: 450 Claude Code sessions (Sonnet, 30 questions, three public repos, plan written before the first run). Stacklit changed how the agent works but did not lower cost overall: pooled cost ratio 1.00 [0.93, 1.07], tokens 1.01 [0.92, 1.10]. It used about a third fewer tool calls (0.68 [0.61, 0.77]), a quarter fewer turns (0.77) and over four fifths fewer grep and glob calls (0.18). Answers were right slightly less often (94.0% to 88.0% on the pre-registered grader, 98.0% to 95.3% audited). Cost ratio by repo (below 1 is cheaper, 50 paired sessions each; full tables, method, limits and the claims we do not make are in bench/agent-ab/RESULTS.md):
| Repo | Size | Cost ratio [95% CI] |
|---|---|---|
| levelrail | about 16,000 files | 0.78 [0.70, 0.86] |
| theauth-go | about 1,300 files | 1.10 [0.98, 1.25] |
| featuredrop | about 400 files | 1.23 [1.14, 1.33] |
Round 2 (650 more sessions, 40 new questions, four repos, bench/agent-ab/RESULTS-round2.md) pointed the same way. The 16,000 file repo was cheaper again (0.89 [0.84, 0.96] with the default wording, 0.87 [0.81, 0.93] with the routed wording). The smaller repos cost more: theauth-go 1.10 and 1.05, featuredrop 1.37 and 1.21, theauth (about 2,900 files) 1.61 and 1.42. Pooled over all four repos a session cost more, not less: 1.17 [1.11, 1.24] and 1.09 [1.04, 1.14]. Tool calls were 0.76 of the no Stacklit count and Grep and Glob calls 0.22 and 0.53. Right answers were equal (97.5%, 97.0%, 97.5%). The model had partly memorised featuredrop, which favours the side without Stacklit. So today Stacklit is for very large repos and "where is it" questions, not for small repos.
When it helps. Locate and add-feature questions ("where is it", "where does a new thing go") were 12 to 22 percent cheaper, mostly on the large repo. Trace questions cost the same and were right less often. "Who imports X" cost 1.59x [1.47, 1.72] because one exact grep already answers it. Small repos cost more, since the map is overhead there. The strict setup (crawl guard plus strict rules) measured worse and is off by default.
Docs
Usage | Languages | FAQ | Privacy | Architecture | Comparison | Roadmap | Changelog | Agent skill | Brand kit
Contributing: .github/CONTRIBUTING.md. Security reports: .github/SECURITY.md. Questions: Discussions.
MIT. See LICENSE.
stacklit MCP questions
How do I add stacklit MCP to Claude Code?
Run claude mcp add stacklit -- npx -y stacklit in your terminal. Add --scope user to make it available in every project.
How do I add stacklit MCP to Cursor?
Open ~/.cursor/mcp.json and add the server under mcpServers, using the Cursor config shown in the install section above.
How does Stacklit help AI agents?
It creates a compact map of your repository so agents can use commands like query, slice, and impact to find files instead of crawling the entire codebase.
Does Stacklit require an internet connection or LLM?
No, it is a local, deterministic tool that uses no LLM and the CLI makes no network calls.
What languages does Stacklit support?
It indexes 48 languages and formats, with a symbol graph and call edges available for 20 of them.
Is Stacklit free to use?
Yes, it is free, MIT licensed, and has no paid tier.