🔍

リポジトリ内のドキュメントをRAG化するMCPサーバーを作った

に公開

背景: 「コンテキストエンジニアリング」の勃興

近頃、Vibe Codingが急速に浸透し、AIアシスタントを前提とした開発体験が流行っています。多くのAIコーディングツールでは、プロンプト条件や開発ルールを CLAUDE.md や類似ファイルに集約し、生成モデルに読ませるのが基本となります。

この流れの中でAIに情報を与えることの重要性は益々評価されており、 「プロンプトエンジニアリング」に代わって「コンテキストエンジニアリング」という概念が注目されています。

https://simonwillison.net/2025/Jun/27/context-engineering/#atom-everything

一方で、プロジェクトにおいて重要なあらゆる知識を CLAUDE.md のようなファイルに集約し、毎度コンテキストに乗せるのは、コンテキストウィンドウを非常に圧迫し、AIの出力の精度に悪影響を与える可能性もあるため、課題と言えます。

そんなとき、単一のプロジェクトにおいてのみ使用可能な RAG を簡単に構築することができれば解決できそうだなと思っていたのですが、私が調査した限りではプロジェクト問わずPC内に蓄積されたドキュメントを検索する RAG を構築する事例しか見つかりませんでした。

Local MCP Server 「Repocks」

そこで、プロジェクト内に蓄積されたドキュメントを検索し、必要に応じてその内容から答えを組み立てる Local MCP Server「repocks」 を開発しました。

https://github.com/boke0/repocks

技術構成

技術構成

実装にあたり、近頃注目されているAIエージェント開発フレームワーク「Mastra」を採用しました。
また、今回はエージェント機能においてテキスト生成AIを、検索やインデックス化において埋め込み生成AIを使用しますが、それぞれローカルで十分な速度で動くモデルを採用し、API料金をかけずに実行できるようにしてみました。
デフォルトでは、テキスト生成にはqwen3:4b、埋め込み生成にはmxbai-embed-largeを採用しています。

仕組み

このツールでは「インデックス化」「エージェント呼び出し」という2つの操作が可能となっています。
「インデックス化」はCLIツールかMCP Clientから利用することができ、「エージェント呼び出し」はMCP Clientから利用することができます。

インデックス化

この操作では、下記の流れでプロジェクト内のドキュメントから埋め込みを生成し、DuckDBに格納します。

  1. 捜査対象のドキュメント(デフォルトでは docs/**/*.md~/.repocks/**/*.md)をリポジトリから読み込む
  2. 各文書から Ollama の埋め込みモデルを呼び出して埋め込みを生成する
  3. DuckDB に 埋め込み列(FLOAT[N]) として文章とセットで格納する

DuckDBはプロジェクトごとに /path/to/project/.repocks/store.duckdb に保存されるため、他のプロジェクトの情報が交じることが無いようになっています。

エージェント呼び出し

この操作では、MCP Client から投げかけられた質問に対してドキュメントの意味検索を行い、得られたドキュメントから回答生成を行います。

  1. Ollama のチャットモデルをバックエンドとするAIエージェントが質問に応じて意味検索を行うための文章を生成し、その文章の埋め込みを元に、DuckDB に対して cosine 類似度検索を実行
  2. 得られた類似文書を元に、質問に対する回答文を生成し、レスポンスとして返す

※一応 MCP Client からは検索のみを利用することもできるのですが、コンテキスト長の問題を解消する手段としては微妙なので非推奨です。

使い方

インストール

npm installで導入できます。

npm install -g repocks

また、上記の他にOllamaのインストールと使用するモデルのpullが行われている必要があるため、実行しておいてください。

Ollamaのインストールはこちら

モデルはpullコマンドを打つとできます。

ollama pull qwen3:4b
ollama pull mxbai-embed-large

インデックス化

プロジェクトのディレクトリに移動し、下記コマンドを実行するとインデックス化が行われます。

cd /path/to/project
repocks index

完了すると、.repocks配下にDuckDBのファイルが作成されているのがわかると思います。

$ tree .repocks
.repocks
└── store.duckdb

Claude Codeへの導入

repocks startを起動コマンドとしてclaude mcpに登録することで、claude codeから利用できます。

claude mcp add repocks -- repocks start

claude code内で/mcpを実行し、↓のようになっていれば成功です

Manage MCP servers
  1. repocks     ✔ connected · Enter to view details

まとめ

従来の CLAUDE.md の「一気書きで知識共有」は、情報の肥大化やモデルの無視など弊害が出てきました。これに対し、repocksを使用することで、「必要な時に必要な情報を渡す」ことが可能となりました。

ちなみに作者は「プロジェクトのことはrepocksが詳しく知っているので、<特定技術>の設計時や実装時は必ず相談してください」みたいなインストラクションをしています。

プロジェクトの生産性とモデル応答の信頼性を両立させたい開発チームにとって、repocks は非常に有力な選択肢になると考えています。
ぜひ一度リポジトリをご覧の上、現場環境に応じてお試しください。

Discussion