RAG for your documents について
@devilsdev/rag-mcp-serverは、ローカルの文書フォルダーをインデックス化し、オフライン検索と回答の根拠確認を行います。APIキー、データベース、ネットワーク接続なしで、出典箇所の検索と語句ベースの確認を行いたいMCPクライアント向けです。
主な機能
- 01ローカル文書フォルダーのインデックス化
- 02自然言語クエリによる箇所検索
- 03取得した出典に基づく回答確認
- 04Markdown、HTML、CSV、テキストに対応
- 05起動時にメモリー上のインデックスを再構築
活用シーン
- 01ローカル文書から関連箇所を検索
- 02回答がファイル内容に裏付けられているか確認
- 03ネットワーク接続なしで文書を検索
MCP 対応
`search_documents`で箇所を検索し、`check_answer`でインデックス済み文書または指定した出典が回答を裏付けるか確認します。stdioで通信し、モデル呼び出しは行いません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
@devilsdev/rag-mcp-server
ドキュメント用のMCPサーバーです。フォルダーを指定すると、Claudeやその他のMCPクライアントからドキュメントを検索し、回答をドキュメントと照合できます。
npx @devilsdev/rag-mcp-server ./docs
起動時にフォルダーをインデックス化します。@devilsdev/rag-pipeline-utilsのオフラインTF-IDF埋め込み器とインメモリ検索機能を使用します。APIキー、データベース、ネットワークは不要です。言語モデルはアシスタント側にあるため、このサーバーが言語モデルを呼び出すことはありません。
Node.js 22以降が必要です。
クライアントを接続する
このサーバーはstdio経由でMCPを使用するため、クライアントが起動します。フォルダーには絶対パスを指定してください。
Claude Code:
claude mcp add docs -- npx -y @devilsdev/rag-mcp-server /absolute/path/to/docs
Claude Desktop、Cursor、その他のmcpServers設定を使用するクライアント(Claude Desktopの場合:Settings → Developer → Edit Configを選択し、再起動します):
{
"mcpServers": {
"docs": {
"command": "npx",
"args": ["-y", "@devilsdev/rag-mcp-server", "/absolute/path/to/docs"]
}
}
}
続いて、「従業員の休暇日数はいくつですか?」のように、ドキュメントから回答できる質問をしてみてください。
ツール
search_documents
| 入力 | 型 | 説明 |
|---|---|---|
query | string、必須 | 自然言語で検索する内容 |
topK | integer、1~20 | 返すパッセージ数(デフォルトは4、または--top-k) |
{ passages: [{ id, source, score, text }] }を、関連度の高い順に、構造化コンテンツとJSONテキストの両方で返します。sourceはフォルダーからの相対パス、idは<source>#<chunk number>です。クエリと用語が一致しないパッセージは除外されます。
check_answer
| 入力 | 型 | 説明 |
|---|---|---|
answer | string、必須 | 確認する回答 |
question | string | 回答対象の質問。sourcesを省略した場合、検索精度が向上します |
sources | 文字列または{ id, text }の配列 | 照合するパッセージ。省略すると、インデックス化されたドキュメントを検索します |
topK | integer、1~20 | sourcesを省略した場合に取得するパッセージ数 |
ライブラリのcheckAnswerを実行し、{ grounded, groundedness, unsupported, citations, sources }を返します。返される内容は、すべての文が根拠によって裏付けられているか、裏付けられている文の割合(0~1)、裏付けられていない文、各文を裏付けるソースのID、および照合したソースです。このチェックは語彙ベースで、モデルを呼び出しません。そのため、正しい言い換えでも裏付けがないと判定されることがあります。最終判断ではなく、再確認を促すフラグとして扱ってください。
どちらのツールも読み取り専用です。パッセージのテキストはファイルの内容であり、ツールの説明では、クライアントに対してそれを指示ではなくデータとして扱うよう伝えています。ただし、ファイルにアシスタントを操作するための文章が含まれている可能性はあるため、信頼できるフォルダーをインデックス化してください。
ファイル
フォルダーとそのサブフォルダー内のMarkdown(.md、.markdown)、HTML(.html、.htm、表示テキストのみ)、CSV(.csv、1行につき1つのパッセージ)、およびテキスト(.txt)ファイルが対象です。ライブラリのローダーと同じ方法で処理され、文章は最大500文字の文単位チャンクに分割されます。その他のファイル、node_modules、.gitはスキップされます。インデックスはメモリ上に保持され、サーバーの起動ごとに再構築されます。そのため、ドキュメントを変更した後は、クライアントのサーバーを再起動してください。
オプション
rag-mcp-server <folder> [--top-k <n>] [--embedder local]
| オプション | デフォルト | 説明 |
|---|---|---|
--top-k <n> | 4 | クライアントから topK が渡されない場合の呼び出しあたりのパッセージ数 |
--embedder <name> | local | エンベッダー。使用できるのは local(TF-IDF、オフライン)のみです |
サーバーのログはすべて stderr に出力され、stdout はプロトコル用です。
独自に構築する
ほかのエンベッダー(OpenAI、Ollama)、永続インデックス、またはベクトルデータベースを使用する場合は、MCP サーバーの例を参考にしてください。ライブラリを使って、同じ種類のサーバーを約100行で構築しています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。