A Python server providing Retrieval-Augmented Generation (RAG) functionality. It indexes various document formats and requires a PostgreSQL database with pgvector.
MCP RAG Serverは、Model Context Protocol (MCP)に準拠したRAG(Retrieval-Augmented Generation)機能を持つPythonサーバーです。マークダウン、テキスト、パワーポイント、PDFなど複数の形式のドキュメントをデータソースとして、multilingual-e5-largeモデルを使用してインデックス化し、ベクトル検索によって関連情報を取得する機能を提供します。
このプロジェクトは、MCPサーバーの基本的な実装に加えて、RAG機能を提供します。複数形式のドキュメントをインデックス化し、自然言語クエリに基づいて関連情報を検索することができます。
MCPサーバーの基本実装
RAG機能
ツール
# uvがインストールされていない場合は先にインストール
# pip install uv
# 依存関係のインストール
uv sync
# pgvectorを含むPostgreSQLコンテナを起動
docker run --name postgres-pgvector -e POSTGRES_PASSWORD=password -p 5432:5432 -d pgvector/pgvector:pg17
PostgreSQLコンテナを起動した後、以下のコマンドでデータベースを作成します:
# ragdbデータベースの作成
docker exec -it postgres-pgvector psql -U postgres -c "CREATE DATABASE ragdb;"
-- pgvectorエクステンションをインストール
CREATE EXTENSION vector;
.env
ファイルを作成し、以下の環境変数を設定します:
# PostgreSQL接続情報
POSTGRES_HOST=localhost
POSTGRES_PORT=5432
POSTGRES_USER=postgres
POSTGRES_PASSWORD=password
POSTGRES_DB=ragdb
# ドキュメントディレクトリ
SOURCE_DIR=./data/source
PROCESSED_DIR=./data/processed
# エンベディングモデル設定
EMBEDDING_MODEL=intfloat/multilingual-e5-large
EMBEDDING_DIM=1024
EMBEDDING_PREFIX_QUERY="query: "
EMBEDDING_PREFIX_EMBEDDING="passage: "
このサーバーでは、環境変数でエンベディングモデルを選択できます。
EMBEDDING_MODEL=intfloat/multilingual-e5-large
EMBEDDING_DIM=1024
EMBEDDING_PREFIX_QUERY="query: "
EMBEDDING_PREFIX_EMBEDDING="passage: "
EMBEDDING_MODEL=cl-nagoya/ruri-v3-30m
EMBEDDING_DIM=256
EMBEDDING_PREFIX_QUERY="検索クエリ: "
EMBEDDING_PREFIX_EMBEDDING="検索文書: "
多くのエンベディングモデル(特にE5系)では、テキストの種類に応じてプレフィックスを付けることで性能が向上します:
EMBEDDING_PREFIX_QUERY
- ユーザーの検索クエリに自動で追加EMBEDDING_PREFIX_EMBEDDING
- インデックス化される文書に自動で追加プレフィックスは自動で処理されるため、MCPクライアントは意識する必要がありません。
エンベディングモデルを変更した場合は、ベクトル次元が変わる可能性があるため、既存のインデックスをクリアして再作成してください:
python -m src.cli clear
python -m src.cli index
uv run python -m src.main
オプションを指定する場合:
uv run python -m src.main --name "my-rag-server" --version "1.0.0" --description "My RAG Server"
python -m src.main
インデックスのクリアとインデックス化を行うためのコマンドラインツールが用意されています。
python -m src.cli --help
python -m src.cli clear
# デフォルト設定でインデックス化(./data/source ディレクトリ)
python -m src.cli index
# 特定のディレクトリをインデックス化
python -m src.cli index --directory ./path/to/documents
# チャンクサイズとオーバーラップを指定してインデックス化
python -m src.cli index --directory ./data/source --chunk-size 300 --chunk-overlap 50
# または短い形式で
python -m src.cli index -d ./data/source -s 300 -o 50
# 差分インデックス化(新規・変更ファイルのみを処理)
python -m src.cli index --incremental
# または短い形式で
python -m src.cli index -i
python -m src.cli count
MCPホスト(Claude Desktop、Cline、Cursorなど)でこのサーバーを使用するには、以下のような設定を行います。設定するjsonファイルについては、各MCPホストの ドキュメントを参照してください。
{
"mcpServers": {
"mcp-rag-server": {
"command": "uv",
"args": [
"run",
"--directory",
"/path/to/mcp-rag-server",
"python",
"-m",
"src.main"
]
}
}
}
command
: uv
(推奨)またはpython
args
: 実行引数の配列/path/to/mcp-rag-server
: このリポジトリの実際のパスに置き換えてくださいuvがインストールされていない環境では、通常のPythonを使用できます:
{
"command": "python",
"args": [
"-m",
"src.main"
],
"cwd": "/path/to/mcp-rag-server"
}
ベクトル検索を行います。
{
"jsonrpc": "2.0",
"method": "search",
"params": {
"query": "Pythonのジェネレータとは何ですか?",
"limit": 5,
"with_context": true,
"context_size": 1,
"full_document": false
},
"id": 1
}
query
: 検索クエリ(必須)limit
: 返す結果の数(デフォルト: 5)with_context
: 前後のチャンクも取得するかどうか(デフォルト: true)context_size
: 前後に取得するチャンク数(デフォルト: 1)full_document
: ドキュメント全体を取得するかどうか(デフォルト: false)このツールは以下の機能により、より良い検索結果を提供します:
前後のチャンク取得機能:
with_context
パラメータで有効/無効を切り替え可能context_size
パラメータで前後に取得するチャンク数を調整可能ドキュメント全文取得機能:
full_document
パラメータで有効/無効を切り替え可能結果の整形改善:
インデックス内のドキュメント数を取得します。
{
"jsonrpc": "2.0",
"method": "get_document_count",
"params": {},
"id": 2
}
ドキュメントファイルを data/source
ディレクトリに配置します。サポートされるファイル形式は以下の通りです:
CLIコマンドを使用してドキュメントをインデックス化します:
# 初回は全件インデックス化
python -m src.cli index
# 以降は差分インデックス化で効率的に更新
python -m src.cli index -i
MCPサーバーを起動します:
uv run python -m src.main
search
ツールを使用して検索を行います。
インデックス化したデータベースを別のPCで使用するには、以下の手順でバックアップと復元を行います。
単純に他のPCでRAG検索機能を使いたいだけなら、PostgreSQLデータベースのバックアップだけで十分です。ベクトル化されたデータはすべてデータベースに保存されているためです。
PostgreSQLデータベースをバックアップするには、Dockerコンテナ内でpg_dump
コマンドを使用します:
# Dockerコンテナ内でデータベースをバックアップ
docker exec -it postgres-pgvector pg_dump -U postgres -d ragdb -F c -f /tmp/ragdb_backup.dump
# バックアップファイルをコンテナからホストにコピー
docker cp postgres-pgvector:/tmp/ragdb_backup.dump ./ragdb_backup.dump
これにより、PostgreSQLデータベースのバックアップファイル(例:239MB)がカレントディレクトリに作成されます。
# Dockerを使用する場合
docker run --name postgres-pgvector -e POSTGRES_PASSWORD=password -p 5432:5432 -d pgvector/pgvector:pg17
# データベースを作成
docker exec -it postgres-pgvector psql -U postgres -c "CREATE DATABASE ragdb;"
# バックアップファイルをコンテナにコピー
docker cp ./ragdb_backup.dump postgres-pgvector:/tmp/ragdb_backup.dump
# コンテナ内でデータベースを復元
docker exec -it postgres-pgvector pg_restore -U postgres -d ragdb -c /tmp/ragdb_backup.dump
新しいPCでは、.env
ファイルのPostgreSQL接続情報が正しく設定されていることを確認してください。
python -m src.cli count
これにより、インデックス内のドキュメント数が表示されます。元のPCと同じ数が表示されれば、正常に復元されています。
将来的に新しいドキュメントを追加する予定がある場合や、差分インデックス化機能を使用したい場合は、以下の追加バックアップも行うと良いでしょう:
処理済みドキュメントディレクトリをバックアップします:
# 処理済みドキュメントディレクトリをZIPファイルにバックアップ
zip -r processed_data_backup.zip data/processed/
.env
ファイルをバックアップします:
# .envファイルをコピー
cp .env env_backup.txt
新しいPCには以下のソフトウェアがインストールされている必要があります:
PostgreSQLデータベースを上記の「最小限の復元手順」で復元します。
処理済みドキュメントを復元します:
# ZIPファイルを展開
unzip processed_data_backup.zip -d /path/to/mcp-rag-server/
# .envファイルを復元
cp env_backup.txt /path/to/mcp-rag-server/.env
必要に応じて、新しいPC環境に合わせて.env
ファイルの設定(特にPostgreSQL接続情報)を編集します。
python -m src.cli count
sentence-transformers
、psycopg2-binary
など)をインストールしておく必要があります。mcp-rag-server/
├── data/
│ ├── source/ # 原稿ファイル(階層構造対応)
│ │ ├── markdown/ # マークダウンファイル
│ │ ├── docs/ # ドキュメントファイル
│ │ └── slides/ # プレゼンテーションファイル
│ └── processed/ # 処理済みファイル(テキスト抽出済み)
│ └── file_registry.json # 処理済みファイルの情報(差分インデックス用)
├── docs/
│ └── design.md # 設計書
├── logs/ # ログファイル
├── src/
│ ├── __init__.py
│ ├── document_processor.py # ドキュメント処理モジュール
│ ├── embedding_generator.py # エンベディング生成モジュール
│ ├── example_tool.py # サンプルツールモジュール
│ ├── main.py # メインエントリーポイント
│ ├── mcp_server.py # MCPサーバーモジュール
│ ├── rag_service.py # RAGサービスモジュール
│ ├── rag_tools.py # RAGツールモジュール
│ └── vector_database.py # ベクトルデータベースモジュール
├── tests/
│ ├── __init__.py
│ ├── conftest.py
│ ├── test_document_processor.py
│ ├── test_embedding_generator.py
│ ├── test_example_tool.py
│ ├── test_mcp_server.py
│ ├── test_rag_service.py
│ ├── test_rag_tools.py
│ └── test_vector_database.py
├── .env # 環境変数設定ファイル
├── .gitignore
├── LICENSE
├── pyproject.toml
└── README.md
このプロジェクトはMITライセンスの下で公開されています。詳細はLICENSEファイルを参照してください。
A Model Context Protocol (MCP) server that enables AI assistants to integrate with Prometheus Alertmanager
Integration with QA Sphere test management system, enabling LLMs to discover, summarize, and interact with test cases directly from AI-powered IDEs
Up-to-date documentation for your coding agent. Covers 1000s of public repos and sites. Built by ref.tools
Advanced computer vision and object detection MCP server powered by Dino-X, enabling AI agents to analyze images, detect objects, identify keypoints, and perform visual understanding tasks.
Single tool to control all 100+ API integrations, and UI components
MCP server to provide Jira Tickets information to AI coding agents like Cursor.
MCP Language Server gives MCP enabled clients access to semantic tools like get definition, references, rename, and diagnostics.
Boost security in your dev lifecycle via SAST, SCA, Secrets & IaC scanning with Cycode.
Interact with Homebrew (the package manager for macOS and Linux) using natural language commands.
Tool platform by IBM to build, test and deploy tools for any data source