rpg-encoder について
rpg-encoder は Tree-sitter を用いてコードのセマンティックグラフを構築し、MCP ツールを通じて AI コーディングエージェントにリポジトリ全体の理解を提供します。呼び出し関係に加え、各関数の処理内容を意図レベルの機能として記録し、作業ツリーの変更に合わせてグラフを同期します。
主な機能
- 01Tree-sitter によるエンティティと依存関係の抽出
- 02関数やクラスへの意図レベルの機能説明の付与
- 03機能の3段階の階層への整理
- 04スナップショットによるリポジトリ全体の概要表示
- 05増分同期と影響範囲の分析
活用シーン
- 01grep のキーワードではなく意図に基づくコード検索
- 02変更計画の立案と影響範囲の確認
- 03大規模リポジトリにおけるモジュールの責務の把握
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
rpg-encoder
AI エージェントにコードベースのための頭脳を。
AI コーディングエージェントは、ツール呼び出しの大半を grep、cat、find、ファイル読み取りでコードベースを手探りするために無駄にしています。rpg-encoder はそれを解決します。Tree-sitter を使ってコードのセマンティックグラフを構築します。単に何が何を呼び出すかだけでなく、各関数が何をするかまで捉え、MCP を通じて 1 回のツール呼び出しでリポジトリ全体を理解できるようにします。
クイックスタート
claude mcp add rpg -- npx -y -p rpg-encoder rpg-mcp-server
コマンド 1 つだけです。Claude Code、Cursor、opencode、Windsurf、その他 MCP 互換のあらゆるエージェントで動作します。Rust ツールチェーンも、クローンも、ビルドも不要 — npx がお使いのプラットフォーム向けのビルド済みバイナリをダウンロードします。
あとは任意のリポジトリを開いて、エージェントにこう伝えてください。
「このリポジトリの RPG をビルドしてリフトして」
エージェントがすべてを処理します。エンティティをインデックス化し(数秒)、各関数を読み取って意図レベルの特徴を追加し(数分)、それらをセマンティック階層に整理し、チームのために .rpg/graph.json をコミットします。
エンティティが約 100 件以上あるリポジトリでは、lifting_status がエージェントに対して、リフティングのループをサブエージェントやより安価なモデルに委任するよう指示します。特徴抽出はパターンマッチングであり、新しい推論ではありません。実行環境にサブエージェントの仕組みがない場合は、API キーを設定してターミナルから rpg-encoder lift --provider anthropic|openai を実行してください。CLI はエージェントを介さずに外部 LLM を直接操作します。CLI の完了後、セッションで reload_rpg を呼び出して更新されたグラフを読み込んでください。CLI は特徴のないエンティティをリフトします。古いエンティティの再リフト(特徴は存在するがコード変更後に古くなったもの)は、CLI ではなくセッション内の MCP フローで処理されます。
リフトが完了したら、次のことを試してみてください。
- 「認証を処理しているのはどこ?」 — どこにも「auth」と名付けられていなくてもコードを見つけます
- 「データベース接続に依存しているものをすべて表示して」
- 「API エンドポイントにレート制限を追加する変更を計画して」
grep、cat、find の前に RPG を使う
サーバーの指示は、コード構造や動作に関するあらゆる質問に対して、まず RPG ツールに手を伸ばすようエージェントに伝えます。この反射が重要です — grep、cat、およびその場しのぎのファイル読み取りはトークンを浪費し、RPG がすでに把握している意味的な関係を見落とします。
| 代わりに手を伸ばしてしまうもの | 代わりにこれを使う |
|---|---|
grep -r / rg(意図による検索) | search_node(query="...") |
grep -r / rg(名前による検索) | search_node(query="...", mode="snippets") |
cat / 関数の読み取り | fetch_node(entity_id="file:name") |
| 呼び出し元/呼び出し先を探す連鎖的な grep | explore_rpg(entity_id="...", direction="...") |
| 「X に依存しているのは何か」を探す再帰的 grep | impact_radius(entity_id="...") |
wc -l / find / tree | rpg_info |
| コンテキスト取得のための多数ファイルの読み取り | semantic_snapshot |
| 手動での search → fetch → explore の連鎖 | context_pack(query="...") |
| 「X を安全にリファクタリングするには」 | plan_change(goal="...") |
grep、cat、またはファイル読み取りにフォールバックするのは、クエリが構造ではなくリテラルなテキスト(文字列検索、コメント、TODO、ログメッセージ)に関するものである場合だけにしてください。
仕組み
- Parse — Tree-sitter が 15 言語からエンティティ(関数、クラス、メソッド)と依存関係のエッジ(インポート、呼び出し、継承)を抽出します。
- Lift — LLM(あなたのエージェント、または Haiku のような安価な API)が各エンティティを読み、動詞-目的語の特徴を書き出します: 「JWT トークンを検証する」、「設定をディスクにシリアライズする」。
- Organize — 特徴が 3 レベルのセマンティック階層(エリア → カテゴリ → サブカテゴリ)にクラスタリングされます。これはファイルツリーではなく、コードが何をするかから生まれます。
- Understand —
semantic_snapshotがグラフ全体を約 25K トークンに圧縮します。あなたの LLM はそれを一度読むだけでリポジトリを把握します。
セマンティックスナップショット
ファイルを grep して回る代わりに、LLM は semantic_snapshot を一度呼び出すだけで以下を受け取ります:
- 階層 — 集約された特徴を持つすべての機能エリア
- エンティティ — エリアごとにグループ化された、すべての関数、クラス、メソッドとそのセマンティックな特徴
- 依存関係の骨格 — 修飾名を含む凝縮されたコールグラフ
- ホットスポット — 最も接続が多い上位 10 エンティティ(アーキテクチャのバックボーン)
約 25K トークンで約 1000 エンティティをカバーします。これは 1M コンテキストウィンドウの 2〜3% です — LLM は毎セッション、すでにあなたのリポジトリを把握した状態で開始します。
自己メンテナンスするグラフ
作業ツリーが変更されるたびに — コミット済み、ステージ済み、または未ステージを問わず — MCP サーバーは次のクエリに応答する前に自動的に再同期します。(path, size, mtime) に対するチェンジセットハッシュにより、同じファイルの繰り返し保存は 1 回の同期をトリガーし、アイドル状態のクエリはまったくトリガーしません。リバートも検出されます: 以前ダーティだったファイルが HEAD の状態に戻ると、グラフは復元されます。
Lift の 2 つの方法
| モード | コマンド | コスト | 誰が支払うか |
|---|---|---|---|
| エージェントによる lift | 「RPG をビルドして lift する」 | サブスクリプションのトークン | あなたの Claude Code / Cursor サブスクリプション |
| 自律的な lift | auto_lift(provider="anthropic", api_key_env="ANTHROPIC_API_KEY") | 100 エンティティあたり約 $0.02 | 外部 API キー(Haiku、GPT-4o-mini、OpenRouter、Gemini) |
auto_lift は安価な外部 LLM を直接呼び出します — あなたのコーディングサブスクリプションが lift 作業に触れることはありません。api_key_env を使って環境変数からキーを解決すれば、ツール呼び出しのトランスクリプトにキーが現れることはありません。
アーキテクチャ
7 つの Rust クレート、1 つの MCP サーバーバイナリ、1 つの CLI バイナリ:
| クレート | 役割 |
|---|---|
rpg-core | グラフ型 (RPGraph、Entity、HierarchyNode)、ストレージ、LCA アルゴリズム |
rpg-parser | Tree-sitter によるエンティティ + 依存関係の抽出 (15 言語) |
rpg-encoder | エンコードパイプライン、リフティングユーティリティ、インクリメンタル進化 |
rpg-nav | 検索、フェッチ、探索、スナップショット、TOON シリアライゼーション |
rpg-lift | 自律型 LLM リフティング (Anthropic、OpenAI、OpenRouter、Gemini) |
rpg-cli | CLI バイナリ (rpg-encoder) |
rpg-mcp | 27 のツールを備えた MCP サーバーバイナリ (rpg-mcp-server) |
MCP ツール (27)
ビルドとメンテナンス (4 ツール)
| ツール | 説明 |
|---|---|
build_rpg | コードベースをインデックス化します (一度実行するだけで即時完了) |
update_rpg | git の変更に基づくインクリメンタル更新 |
reload_rpg | 外部変更後にディスクからグラフを再読み込み |
rpg_info | グラフ統計、階層の概要、エリアごとのリフティングカバレッジ |
ナビゲートと検索 (5 ツール)
| ツール | 説明 |
|---|---|
semantic_snapshot | 1 回の呼び出しでリポジトリ全体のセマンティック理解を取得 (1000 エンティティで約 25K トークン) |
search_node | 意図やキーワードでエンティティを検索 (ハイブリッド埋め込み + 字句スコアリング) |
fetch_node | エンティティのメタデータ、ソースコード、依存関係、階層コンテキストを取得 |
explore_rpg | 依存関係グラフをたどる (上流、下流、またはその両方) |
context_pack | トークン予算を考慮した、検索 + フェッチ + 探索の単一呼び出し |
計画と分析 (7 ツール)
| ツール | 説明 |
|---|---|
impact_radius | BFS 到達可能性分析 — 「何が X に依存しているか?」 |
plan_change | 変更計画 — 関連エンティティ、変更順序、ブラスト半径を特定 |
find_paths | 2 つのエンティティ間の K 最短依存パス |
slice_between | エンティティ間を接続する最小サブグラフを抽出 |
analyze_health | コードヘルス: 結合度、不安定度、神オブジェクト、クローン検出 |
detect_cycles | 循環依存とアーキテクチャ上の循環を検出 |
reconstruct_plan | 依存関係を安全に考慮した再構築の実行計画 |
セマンティックリフティング (11 ツール)
| ツール | 説明 |
|---|---|
auto_lift | 安価な LLM API (Haiku、GPT-4o-mini、OpenRouter、Gemini) による単一呼び出しの自律型リフティング |
lifting_status | ダッシュボード — カバレッジ、エリアごとの進捗、NEXT STEP |
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 | ルーティングの決定 (階層パスまたは「keep」) を返却 |
対応言語
Tree-sitter による 15 言語:
| 言語 | エンティティ抽出 | 依存関係の解決 |
|---|---|---|
| Python | 関数、クラス、メソッド | imports、calls、inheritance |
| Rust | 関数、構造体、トレイト、impl メソッド | use、calls、trait impls |
| TypeScript | 関数、クラス、メソッド、インターフェース | imports、calls、inheritance |
| JavaScript | 関数、クラス、メソッド | imports、calls、inheritance |
| Go | 関数、構造体、メソッド、インターフェース | imports、calls |
| Java | クラス、メソッド、インターフェース | imports、calls、inheritance |
| C / C++ | 関数、クラス、メソッド、構造体 | includes、calls、inheritance |
| C# | クラス、メソッド、インターフェース | using、calls、inheritance |
| PHP | 関数、クラス、メソッド | use、calls、inheritance |
| Ruby | クラス、メソッド、モジュール | require、calls、inheritance |
| Kotlin | 関数、クラス、メソッド | imports、calls、inheritance |
| Swift | 関数、クラス、構造体、プロトコル | imports、calls、inheritance |
| Scala | 関数、クラス、オブジェクト、トレイト | imports、calls、inheritance |
| Bash | 関数 | source、calls |
インストール
MCP サーバー (推奨)
# 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"]
}
}
}
サーバーは現在の作業ディレクトリからプロジェクトルートを自動検出します — パス引数は不要です。
CLI
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
次に、MCP 設定を target/release/rpg-mcp-server に指定します。
ドキュメント
- RPG の比較 — GitNexus、Serena、Repomix などとの率直な比較
- 論文との忠実性 — 研究論文とのアルゴリズム単位の比較
- ユースケース — RPG で何ができるかの実践的な例
- CHANGELOG — リリース履歴
インスピレーションと参考文献
rpg-encoder は RPG-Encoder 研究論文の理論的枠組みの上に構築されており、コードインテリジェンスの領域全体にわたるツールから着想を得た独自の拡張を加えています:
- RPG-Encoder 論文 (Luo ら、2026 年、Microsoft Research) — セマンティックリフティングモデル、3 レベル階層の構築、インクリメンタル進化アルゴリズム、形式グラフモデル
G = (V_H ∪ V_L, E_dep ∪ E_feature)。 - GitNexus — 事前計算されたリレーショナルインテリジェンス、ブラスト半径分析、Claude Code フック。コードグラフツールは不可視であってこそ不可欠になれることを示しました。
- Serena — LSP によるシンボルレベルの精度。バッチ分析よりもリアルタイムのコード認識のほうが重要であることを実証しました。
- TOON — LLM に最適化された出力のための Token-Oriented Object Notation。
これは独立した実装です。すべてのコードは MIT ライセンスの下でのオリジナルの成果物です。Microsoft とは提携しておらず、承認も受けていません。
ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。