Skip to main content
Glama
q6066697

rag-mcp-server

by q6066697

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_documentsget_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.server

MCP Inspectorで確認するmcp[cli]に含まれる組み込みインスペクタ。ツールを手動で呼び出すためのWeb UIを開きます):

mcp dev rag_mcp_server/server.py

テスト(実Qdrant/OpenAIは不要 — ベクトル検索とcross-encoderはモックされています):

pytest

Claude 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_documentsget_documentrerank_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.pycore/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をデフォルトに — 組み込みモードはデモやテストに最適ですが、複数プロセスからの並行アクセスにはサーバーが必要です。

Install Server
A
license - permissive license
A
quality
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP 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
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables 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
  • F
    license
    Not graded
    quality
    C
    maintenance
    Provides RAG-based knowledge retrieval and document management as MCP tools, supporting hybrid search, reranking, and retrieval process visualization.

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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