rag-mcp-server
rag-mcp-server
本番RAGパイプライン(rag-eval-service)を標準プロトコル(Model Context Protocol)でラップし、エージェント向けに提供するMCPサーバーです。ハイブリッド検索(denseエンベディング + BM25 + RRF)が、Claude Desktop、Claude Code、または独自エージェントなど、あらゆるMCPクライアントから呼び出せるツールになります。
アーキテクチャ
Client (Claude Desktop / Claude Code / любой MCP-клиент)
|
v MCP over stdio (JSON-RPC)
FastMCP server (rag_mcp_server/server.py)
|
+--> search_documents(query, top_k)
+--> get_document(doc_id)
+--> rerank_results(query, doc_ids)
|
v
Hybrid retrieval (rag_mcp_server/core/retrieval.py)
|
+---> Dense retriever --- OpenAI text-embedding-3-small ---> Qdrant (cosine, 1536d)
| |
+---> Sparse retriever -- BM25 (rank-bm25 / BM25Okapi) ----------+
| |
| +-------------------------------+
| v
| Reciprocal Rank Fusion (k=60)
| |
+---------------------------------v
Top-k документов --> клиент (LLM формирует ответ)Qdrantはデフォルトで組み込みモード(ディスク上のファイル、独立プロセスなし)で動作するため、サーバーは自己完結型で、デモに外部インフラは不要です。必要に応じて、docker-compose.yml(下記参照)で本格的なQdrantサーバーに切り替えることもできます。
Related MCP server: RAG In A Box MCP Server
これは何か、なぜ必要なのか
これはMCPラッパーであり、retrievalロジックの再発明ではありません。ハイブリッド検索(dense + BM25 + RRF)自体はrag-eval-serviceからほぼ変更なしで移植されています。このラッパーが新たに追加するものは次のとおりです。
HTTP APIの代わりにプロトコル — ツールはカスタムHTTPクライアントを書いたり、RESTでサービスを常時起動しておく必要なく、あらゆるMCPクライアント(Claude Desktop、Claude Code)から見えます。
自己完結型デモモード — Dockerコンテナの代わりに組み込みQdrantを使用し、
git clone→ 動作するツールまでのステップを最小限に抑えます。doc_id/titleスキーマと、チャンク単位ではなくドキュメント単位での結果集約 —
search_documents→get_documentを呼び出すLLMクライアントのニーズに合わせており、生のチャンクを直接扱うことはありません。LLMによるツール利用者向けに書かれたDocstringコントラクト(
rag_mcp_server/server.py参照)— APIドキュメントを読む人間向けではありません。
ローカルでの起動方法
要件: Python 3.10以上、OpenAI APIキー(エンベディング用)。
git clone https://github.com/q6066697/rag-mcp-server.git
cd rag-mcp-server
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt # или: pip install -e ".[dev]"
cp .env.example .env
# впишите свой OPENAI_API_KEY в .envインデックスを構築する(一度だけ実行。data/を読み、OpenAIでチャンクをエンベディングし、組み込みQdrantに投入します):
python -m rag_mcp_server.core.indexing(任意)組み込みモードの代わりに本番用Qdrantを使用する場合:
docker-compose up -d
# затем в .env: QDRANT_MODE=serverサーバーを起動する(stdioトランスポート):
python -m rag_mcp_server.serverMCP Inspectorで確認する(mcp[cli]に含まれる組み込みインスペクタ。ツールを手動で呼び出すためのWeb UIを開きます):
mcp dev rag_mcp_server/server.pyテスト(実Qdrant/OpenAIは不要 — ベクトル検索とcross-encoderはモックされています):
pytestClaude Desktop / Claude Codeへの接続方法
claude_desktop_config.jsonに追加します(Claude Desktop: Settings → Developer → Edit Config。Claude Code: プロジェクト内の.mcp.jsonまたはclaude mcp add):
{
"mcpServers": {
"rag-mcp-server": {
"command": "/absolute/path/to/rag-mcp-server/.venv/bin/python",
"args": ["-m", "rag_mcp_server.server"],
"cwd": "/absolute/path/to/rag-mcp-server",
"env": {
"OPENAI_API_KEY": "sk-..."
}
}
}
}クライアントを再起動すると、search_documents、get_document、rerank_resultsツールが利用可能なツール一覧に表示されます。
ツール呼び出しの例
search_documents
search_documents(query="что такое Reciprocal Rank Fusion", top_k=3)[
{
"doc_id": "reciprocal-rank-fusion.md",
"title": "Reciprocal Rank Fusion",
"snippet": "RRF сливает несколько ранжированных списков без нормализации сырых score — документ на позиции r получает вклад 1/(k+r)…",
"score": 0.0328
},
{
"doc_id": "hybrid-search.md",
"title": "Hybrid Search",
"snippet": "Гибридный поиск комбинирует dense-эмбеддинги и BM25, чтобы ловить и семантическое сходство, и точные термины…",
"score": 0.0301
}
]get_document
get_document(doc_id="reciprocal-rank-fusion.md")"# Reciprocal Rank Fusion (RRF)\n\nRRF — метод слияния нескольких ранжированных списков результатов…"rerank_results
rerank_results(
query="как оценивать качество ретривера",
doc_ids=["eval-retrieval-metrics.md", "reranking.md", "hybrid-search.md"]
)[
{
"doc_id": "eval-retrieval-metrics.md",
"title": "Evaluating Retrieval Quality",
"snippet": "Метрики retrieval — hit@k, recall@k, MRR, nDCG@k — измеряют, находит ли поиск релевантные документы…",
"score": 4.81
},
{
"doc_id": "reranking.md",
"title": "Reranking",
"snippet": "Cross-encoder реранкинг переупорядочивает шортлист кандидатов, читая query и passage вместе…",
"score": 1.02
}
]リポジトリ構成
rag-mcp-server/
├── rag_mcp_server/
│ ├── server.py # точка входа, FastMCP инстанс, регистрация tools
│ ├── core/
│ │ ├── retrieval.py # портированная гибридная логика поиска (dense + BM25 + RRF + rerank)
│ │ └── indexing.py # загрузка корпуса, чанкинг, индексация в Qdrant
│ └── config.py # конфигурация из .env
├── data/ # bootstrap-корпус (15 markdown-доков, копия из rag-eval-service)
├── tests/
│ └── test_server.py # unit-тесты на MCP tools (мокают поиск)
├── docker-compose.yml # опциональный Qdrant-сервер
├── pyproject.toml / requirements.txt
├── .env.example
└── LICENSE (MIT)retrievalロジックの出典
ハイブリッド検索(rag_mcp_server/core/retrieval.py、core/indexing.py)はrag-eval-serviceから移植されています。eval-harness(NFCorpus/BEIRベンチマーク、カスタムgolden set、hit@k/recall@k/MRR/nDCGメトリクス)も同リポジトリにありますが、このリポジトリには意図的に含めていません。rag-mcp-serverは、すでに検証済みのretrievalパイプラインに対する薄いプロトコルラッパーであり、その再評価を行うものではないからです。
今後追加したい機能
MCPサーバー自体のDocker化 — 現在DockerコンテナでラップされているのはQdrantのみ。サーバー自体をデプロイするには独自のDockerfileが必要です。
SSE/HTTPトランスポート — stdioはクライアントと同じマシン上のローカルプロセスを前提としています。リモートアクセス(複数ユーザー、クラウドデプロイ)には、MCP SDKのSSEまたはStreamable HTTPトランスポートが必要です。
認証 — stdioトランスポートには設計上認証がありません(プロセスは信頼され、ローカルで起動されます)。ネットワークトランスポートに移行する際は、サーバーレベルでAPIキー/OAuthが必要になります。
インクリメンタルインデックス — 現在
core.indexingはコレクション全体を再作成します。増大するコーパスには、変更されたドキュメントのみをupsertする必要があります。CI/本番での実Qdrantをデフォルトに — 組み込みモードはデモやテストに最適ですが、複数プロセスからの並行アクセスにはサーバーが必要です。
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server for document ingestion and semantic search on Qdrant. Enables ingesting local documents, generating embeddings with OpenAI, and performing vector search with metadata filters.Apache 2.0
- FlicenseNot gradedqualityBmaintenanceEnables any MCP-compatible AI assistant to search, filter, and retrieve information from a local document collection using a hybrid search pipeline with vector, BM25, reranking, and LLM enrichment.4
- FlicenseNot gradedqualityCmaintenanceIndexes PDF documents into Qdrant and exposes semantic search as MCP tools, enabling RAG-based interactions with your documents.
- FlicenseNot gradedqualityCmaintenanceProvides RAG-based knowledge retrieval and document management as MCP tools, supporting hybrid search, reranking, and retrieval process visualization.
Related MCP Connectors
Turn a GitHub repo or docs site into agent-ready context: pack it or search it, over MCP.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Agentic search over your Dewey document collections from any MCP-compatible client.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/q6066697/rag-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server