rpg-encoder MCP server
✓ VerifiedBuilds a semantic code graph using tree-sitter to provide AI agents with deep, whole-repository understanding through a single tool call.
Also known as userFRM/rpg-encoder
- Stars
- 33
- Tools
- 27
- Downloads, 30 days
- —
- Latest version
- 0.6.7
- Last commit
- May 29, 2026
- License
- MIT
What is rpg-encoder MCP?
rpg-encoder builds a semantic code graph using tree-sitter to provide AI agents with deep, whole-repository understanding through a single tool call. It exposes 27 tools, such as build_rpg, update_rpg, reload_rpg.
Summary generated from the project's README
About rpg-encoder MCP server
rpg-encoder provides AI coding agents with a deep, semantic understanding of entire codebases through a structured graph. Instead of relying on basic text searches like grep or cat, this server uses tree-sitter to parse 15 different languages and extract functional entities such as classes, methods, and functions. It builds a hierarchy based on what the code actually does rather than just its file structure.
Developers can integrate this server with MCP-compatible clients like Claude Code, Cursor, or Windsurf using a single npx command. The system works locally and can be enhanced through a lifting process where an LLM adds intent-level features to each entity. For large repositories, users can use the autonomous lifting mode with an external API key from providers like Anthropic or OpenAI to process entities efficiently without consuming primary agent tokens.
Once the graph is built, the semantic_snapshot tool allows an agent to grasp the whole repository in a single call by compressing complex source code into a manageable token count. This enables smarter planning, impact analysis, and navigation across the entire project architecture.
Written from the project's README. Every use case is checked against a quote from it.
How to install rpg-encoder MCP
Formats verified 10 Nov 2026Add to CursorAdd to GooseInstall rpg-encoder MCP in Claude Code
$ claude mcp add rpg-encoder -- npx -y rpg-encoderInstall rpg-encoder MCP in Cursor
~/.cursor/mcp.json
{
"mcpServers": {
"rpg-encoder": {
"command": "npx",
"args": [
"-y",
"rpg-encoder"
]
}
}
}Install rpg-encoder MCP in VS Code
.vscode/mcp.json
{
"servers": {
"rpg-encoder": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"rpg-encoder"
]
}
}
}Install rpg-encoder MCP in VS Code CLI
$ code --add-mcp '{"name":"rpg-encoder","type":"stdio","command":"npx","args":["-y","rpg-encoder"]}'Install rpg-encoder MCP in Claude Desktop
claude_desktop_config.json
{
"mcpServers": {
"rpg-encoder": {
"command": "npx",
"args": [
"-y",
"rpg-encoder"
]
}
}
}Install rpg-encoder MCP in Codex
$ codex mcp add rpg-encoder -- npx -y rpg-encoderInstall rpg-encoder MCP in Codex config.toml
~/.codex/config.toml
[mcp_servers.rpg-encoder] command = "npx" args = ["-y", "rpg-encoder"]
Install rpg-encoder MCP in Gemini CLI
$ gemini mcp add -s user rpg-encoder npx -- -y rpg-encoderInstall rpg-encoder MCP in Gemini settings.json
~/.gemini/settings.json
{
"mcpServers": {
"rpg-encoder": {
"command": "npx",
"args": [
"-y",
"rpg-encoder"
]
}
}
}rpg-encoder MCP tools 27
Detected from the READMEbuild_rpgupdate_rpgreload_rpgrpg_infosemantic_snapshotsearch_nodefetch_nodeexplore_rpgcontext_packimpact_radiusplan_changefind_paths
| build_rpg | — | |
| update_rpg | — | |
| reload_rpg | — | |
| rpg_info | — | |
| semantic_snapshot | — | |
| search_node | — | |
| fetch_node | — | |
| explore_rpg | — | |
| context_pack | — | |
| impact_radius | — | |
| plan_change | — | |
| find_paths | — |
Show all 27 toolsShow fewer tools
slice_betweenanalyze_healthdetect_cyclesreconstruct_planauto_liftlifting_statusget_entities_for_liftingsubmit_lift_resultsfinalize_liftingget_files_for_synthesissubmit_file_synthesesbuild_semantic_hierarchysubmit_hierarchyget_routing_candidatessubmit_routing_decisions
| slice_between | — | |
| analyze_health | — | |
| detect_cycles | — | |
| reconstruct_plan | — | |
| auto_lift | — | |
| lifting_status | — | |
| get_entities_for_lifting | — | |
| submit_lift_results | — | |
| finalize_lifting | — | |
| get_files_for_synthesis | — | |
| submit_file_syntheses | — | |
| build_semantic_hierarchy | — | |
| submit_hierarchy | — | |
| get_routing_candidates | — | |
| submit_routing_decisions | — |
Automated checks
Ran Nov 14, 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 reachableuserfrm/rpg-encoder is public and reachablegithub.com/userfrm/rpg-encoder ↗Pass
- Package names this repository as its sourcerpg-encoder names userfrm/rpg-encoder as sourcenpmjs.com/package/rpg-encoder ↗Pass
- Build provenance (Sigstore attestation)Sigstore attestation for rpg-encodernpmjs.com/package/rpg-encoder/v/0.6.7#provenance ↗Pass
- Open source license (OSI)MITspdx.org/licenses/MIT.html ↗Pass
- Commit or release in the last yearLast commit or release 2026-05-29github.com/userfrm/rpg-encoder ↗Pass
- OpenSSF ScorecardNot checked
- Package name not close to a popular packageNo popular package one edit away from rpg-encoderPass
- No critical advisory in the package or its dependencies1 resolved dependencies checked; no critical advisoryosv.dev ↗Pass
- No hidden instructions to the model27 tool descriptions and the README read; no override phrases, credential paths or hidden charactersPass
- Destructive tools are labelledNo tool named like delete, drop or execPass
- Remote endpoint answers the MCP handshakeNot checked
README
View on GitHubAI coding agents waste most of their tool calls fumbling through your codebase with grep, cat, find, and file reads. rpg-encoder fixes that. It builds a semantic graph of your code with Tree-sitter — not just what calls what, but what every function does — and gives your AI assistant whole-repo understanding via MCP in a single tool call.
Quick Start
claude mcp add rpg -- npx -y -p rpg-encoder rpg-mcp-server
One command. Works with Claude Code, Cursor, opencode, Windsurf, or any MCP-compatible agent. No Rust toolchain, no cloning, no building — npx downloads a pre-built binary for your platform.
Then open any repo and tell your agent:
"Build and lift the RPG for this repo"
Your agent handles everything: indexes entities (seconds), reads each function and adds intent-level features (a few minutes), organizes them into a semantic hierarchy, and commits .rpg/graph.json for your team.
For repos with ~100+ entities, lifting_status will tell your agent to delegate the lifting loop to a sub-agent or a cheaper model — feature extraction is pattern-matching, not novel reasoning. If your runtime has no sub-agent mechanism, run rpg-encoder lift --provider anthropic|openai from the terminal with an API key — the CLI drives an external LLM directly with no agent involvement. After the CLI finishes, call reload_rpg in your session to load the updated graph. The CLI lifts entities with no features; re-lifting stale entities (features present but outdated after code changes) is handled by the in-session MCP flow, not the CLI.
Once lifted, try:
- "What handles authentication?" — finds code even when nothing is named "auth"
- "Show everything that depends on the database connection"
- "Plan a change to add rate limiting to API endpoints"
Use RPG before grep, cat, find
The server instructions tell your agent to reach for RPG tools FIRST for any
question about code structure or behavior. That reflex matters — grep, cat,
and ad-hoc file reads burn tokens and miss semantic relationships RPG already
knows.
| If you'd otherwise reach for... | Use this instead |
|---|---|
grep -r / rg (by intent) |
search_node(query="...") |
grep -r / rg (by name) |
search_node(query="...", mode="snippets") |
cat / reading a function |
fetch_node(entity_id="file:name") |
| chained greps for callers/callees | explore_rpg(entity_id="...", direction="...") |
| recursive grep for "what depends on X" | impact_radius(entity_id="...") |
wc -l / find / tree |
rpg_info |
| reading many files for context | semantic_snapshot |
| manual search → fetch → explore chains | context_pack(query="...") |
| "how do I refactor X safely" | plan_change(goal="...") |
Fall back to grep, cat, or file reads only when the query is about literal text
(string search, comments, TODOs, log messages) — not about structure.
How It Works
- Parse — Tree-sitter extracts entities (functions, classes, methods) and dependency edges (imports, calls, inheritance) from 15 languages.
- Lift — An LLM (your agent, or a cheap API like Haiku) reads each entity and writes verb-object features: "validate JWT tokens", "serialize config to disk".
- Organize — Features cluster into a 3-level semantic hierarchy (Area → Category → Subcategory) that emerges from what the code does, not the file tree.
- Understand —
semantic_snapshotcompresses the whole graph into ~25K tokens. Your LLM reads it once and knows the repo.
The semantic snapshot
Instead of grepping through files, the LLM calls semantic_snapshot once and receives:
- Hierarchy — every functional area with aggregate features
- Entities — every function, class, method grouped by area, with its semantic features
- Dependency skeleton — condensed call graph with qualified names
- Hot spots — top 10 most-connected entities (the architectural backbone)
~25K tokens covers ~1000 entities. That's 2-3% of a 1M context window — the LLM starts every session already knowing your repo.
Self-maintaining graph
Whenever your working tree changes — committed, staged, or unstaged — the MCP server automatically re-syncs before responding to the next query. A changeset hash over (path, size, mtime) means repeated saves of the same file trigger one sync, and idle queries trigger none. Reverts are detected too: if a previously-dirty file returns to its HEAD state, the graph is restored.
Two ways to lift
| Mode | Command | Cost | Who pays |
|---|---|---|---|
| Agent lifting | "Build and lift the RPG" | Subscription tokens | Your Claude Code / Cursor subscription |
| Autonomous lifting | auto_lift(provider="anthropic", api_key_env="ANTHROPIC_API_KEY") |
~$0.02 per 100 entities | External API key (Haiku, GPT-4o-mini, OpenRouter, Gemini) |
auto_lift calls a cheap external LLM directly — your coding subscription never touches the lifting work. Use api_key_env to resolve keys from environment variables so they never appear in tool call transcripts.
Architecture
Seven Rust crates, one MCP server binary, one CLI binary:
| Crate | Role |
|---|---|
rpg-core |
Graph types (RPGraph, Entity, HierarchyNode), storage, LCA algorithm |
rpg-parser |
Tree-sitter entity + dependency extraction (15 languages) |
rpg-encoder |
Encoding pipeline, lifting utilities, incremental evolution |
rpg-nav |
Search, fetch, explore, snapshot, TOON serialization |
rpg-lift |
Autonomous LLM lifting (Anthropic, OpenAI, OpenRouter, Gemini) |
rpg-cli |
CLI binary (rpg-encoder) |
rpg-mcp |
MCP server binary (rpg-mcp-server) with 27 tools |
MCP Tools (27)
| Tool | Description |
|---|---|
build_rpg |
Index the codebase (run once, instant) |
update_rpg |
Incremental update from git changes |
reload_rpg |
Reload graph from disk after external changes |
rpg_info |
Graph statistics, hierarchy overview, per-area lifting coverage |
| Tool | Description |
|---|---|
semantic_snapshot |
Whole-repo semantic understanding in one call (~25K tokens for 1000 entities) |
search_node |
Search entities by intent or keywords (hybrid embedding + lexical scoring) |
fetch_node |
Get entity metadata, source code, dependencies, and hierarchy context |
explore_rpg |
Traverse dependency graph (upstream, downstream, or both) |
context_pack |
Single-call search + fetch + explore with token budget |
| Tool | Description |
|---|---|
impact_radius |
BFS reachability analysis — "what depends on X?" |
plan_change |
Change planning — find relevant entities, modification order, blast radius |
find_paths |
K-shortest dependency paths between two entities |
slice_between |
Extract minimal connecting subgraph between entities |
analyze_health |
Code health: coupling, instability, god objects, clone detection |
detect_cycles |
Find circular dependencies and architectural cycles |
reconstruct_plan |
Dependency-safe reconstruction execution plan |
| Tool | Description |
|---|---|
auto_lift |
One-call autonomous lifting via cheap LLM API (Haiku, GPT-4o-mini, OpenRouter, Gemini) |
lifting_status |
Dashboard — coverage, per-area progress, NEXT STEP |
get_entities_for_lifting |
Get entity source code for your agent to analyze |
submit_lift_results |
Submit the agent's semantic features back to the graph |
finalize_lifting |
Aggregate file-level features, rebuild hierarchy metadata |
get_files_for_synthesis |
Get file-level entity features for holistic synthesis |
submit_file_syntheses |
Submit holistic file-level summaries |
build_semantic_hierarchy |
Get domain discovery + hierarchy assignment prompts |
submit_hierarchy |
Apply hierarchy assignments to the graph |
get_routing_candidates |
Get entities needing semantic routing (drifted or newly lifted) |
submit_routing_decisions |
Submit routing decisions (hierarchy path or "keep") |
Supported Languages
15 languages via Tree-sitter:
| Language | Entity Extraction | Dependency Resolution |
|---|---|---|
| Python | Functions, classes, methods | imports, calls, inheritance |
| Rust | Functions, structs, traits, impl methods | use, calls, trait impls |
| TypeScript | Functions, classes, methods, interfaces | imports, calls, inheritance |
| JavaScript | Functions, classes, methods | imports, calls, inheritance |
| Go | Functions, structs, methods, interfaces | imports, calls |
| Java | Classes, methods, interfaces | imports, calls, inheritance |
| C / C++ | Functions, classes, methods, structs | includes, calls, inheritance |
| C# | Classes, methods, interfaces | using, calls, inheritance |
| PHP | Functions, classes, methods | use, calls, inheritance |
| Ruby | Classes, methods, modules | require, calls, inheritance |
| Kotlin | Functions, classes, methods | imports, calls, inheritance |
| Swift | Functions, classes, structs, protocols | imports, calls, inheritance |
| Scala | Functions, classes, objects, traits | imports, calls, inheritance |
| Bash | Functions | source, calls |
Install
MCP server (recommended)
# Claude Code
claude mcp add rpg -- npx -y -p rpg-encoder rpg-mcp-server
# Cursor — add to ~/.cursor/mcp.json
{
"mcpServers": {
"rpg": {
"command": "npx",
"args": ["-y", "-p", "rpg-encoder", "rpg-mcp-server"]
}
}
}
The server auto-detects the project root from the current working directory — no path argument needed.
npm install -g rpg-encoder
# Build a graph
rpg-encoder build
# Query
rpg-encoder search "parse entities from source code"
rpg-encoder fetch "src/parser.rs:extract_entities"
rpg-encoder explore "src/parser.rs:extract_entities" --direction both --depth 2
rpg-encoder info
# Autonomous lifting via API
rpg-encoder lift --provider anthropic --dry-run # estimate cost
rpg-encoder lift --provider anthropic # lift with Haiku (~$0.02/100 entities)
# Incremental update
rpg-encoder update
# Pre-commit hook (auto-updates graph on commit)
rpg-encoder hook install
git clone https://github.com/userFRM/rpg-encoder.git
cd rpg-encoder && cargo build --release
Then point your MCP config at target/release/rpg-mcp-server.
Documentation
- How RPG Compares — honest comparison with GitNexus, Serena, Repomix, and others
- Paper Fidelity — algorithm-by-algorithm comparison with the research paper
- Use Cases — practical examples of what RPG enables
- CHANGELOG — release history
Inspirations & References
rpg-encoder is built on the theoretical framework from the RPG-Encoder research paper, with original extensions inspired by tools across the code intelligence landscape:
- RPG-Encoder paper (Luo et al., 2026, Microsoft Research) — semantic lifting model, 3-level hierarchy construction, incremental evolution algorithms, formal graph model
G = (V_H ∪ V_L, E_dep ∪ E_feature). - GitNexus — precomputed relational intelligence, blast radius analysis, Claude Code hooks. Showed that a code graph tool must be invisible to be essential.
- Serena — symbol-level precision via LSP. Demonstrated that real-time code awareness matters more than batch analysis.
- TOON — Token-Oriented Object Notation for LLM-optimized output.
This is an independent implementation. All code is original work under the MIT license. Not affiliated with or endorsed by Microsoft.
License
rpg-encoder MCP questions
How do I add rpg-encoder MCP to Claude Code?
Run claude mcp add rpg-encoder -- npx -y rpg-encoder in your terminal. Add --scope user to make it available in every project.
How do I add rpg-encoder MCP to Cursor?
Open ~/.cursor/mcp.json and add the server under mcpServers, using the Cursor config shown in the install section above.
What tools does rpg-encoder MCP provide?
It exposes 27 tools, including build_rpg, update_rpg, reload_rpg, rpg_info, semantic_snapshot.
How does rpg-encoder help AI coding agents?
It replaces inefficient file searches like grep and cat with a semantic graph, allowing agents to understand function intent and repository structure via a single snapshot.
How can I run the lifting process without using my agent's tokens?
You can use the CLI to run autonomous lifting with a cheap external LLM provider like Anthropic or OpenAI using an API key.
Does the graph stay up to date with my code changes?
Yes, the MCP server automatically re-syncs the graph whenever your working tree changes, such as when files are committed, staged, or unstaged.