MCP MongoDB Server について
MCP MongoDB Serverは、MongoDBのドメイン別データをLLMに提供し、小さなコンテキストウィンドウ向けに応答を整えます。SSEベースのMCPインターフェースと独立したREST CRUD APIを備え、小説、章、登場人物、Q&Aのデータモデルに対応します。
主な機能
- 01MongoDBコレクションのクエリ
- 02SSEベースのMCPインターフェース
- 03REST CRUD API
- 04小説・章・登場人物・Q&Aモデル
- 05Pythonスクレイパーのサブモジュール
活用シーン
- 01LLM向けに小説や登場人物の詳細を取得
- 02正規表現で章やQ&Aを検索
- 03RESTエンドポイントでデータベースを管理
MCP 対応
SSEおよびJSON-RPCエンドポイントを通じて、MCPクライアントにMongoDBのクエリと更新メソッドを公開します。応答は小さなコンテキストウィンドウ向けに整形されます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP MongoDB Server
大規模言語モデル(LLM)と MongoDB の間に効率的なナレッジインターフェースを提供する、高性能なModel Context Protocol(MCP)サーバーです。小さなコンテキストウィンドウ(3k トークン)向けに最適化されており、MongoDB コレクションに保存されたドメイン固有のナレッジを LLM が取得して操作できるようにします。
🚀 特長
-
デュアルサーバーアーキテクチャ:
- LLM と効率的に通信するための SSE ベース MCP サーバー
- データベース管理用の RESTful CRUD API
-
トークン効率:小さなコンテキストウィンドウ内で情報密度を最大化する形式で応答します
-
MongoDB 統合:最適化されたクエリ機構を使用して、既存の MongoDB コレクションと連携します
-
複数のドメイン固有エンティティに対応するデータモデル:
- 小説
- 章
- 登場人物
- Q&A ナレッジベース
-
Python スクレイパー統合:さまざまなソースからデータベースにデータを登録するためのサブモジュールが含まれています
🔧 アーキテクチャ
┌───────────────────┐
│ │
│ Language │
│ Models │
│ │
└─────────┬─────────┘
│
│ MCP (JSON-RPC 2.0)
▼
┌─────────────────────────────────────────────────────┐
│ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ │ │ │ │
│ │ SSE Server │◄────────►│ MCP Handler │ │
│ │ (Port 3000) │ │ │ │
│ └─────────────────┘ └────────┬────────┘ │
│ │ │
│ ▼ │
│ ┌────────────────┐ │
│ ┌─────────────────┐ │ │ │
│ │ │ │ DB Services │ │
│ │ CRUD API │◄────────►│ │ │
│ │ (Port 3001) │ └────────────────┘ │
│ └─────────────────┘ │ │
│ │ │
└─────────────────────────────────────────┼───────────┘
│
▼
┌─────────────────┐
│ │
│ MongoDB │
│ │
└─────────────────┘
🏁 はじめに
前提条件
- Rust(最新の安定版ツールチェーン)
- MongoDB インスタンス
- Python 3.7+(データスクレイパー用)
インストール
-
サブモジュールを含めてリポジトリをクローンします:
git clone --recursive https://github.com/SFBB/mcp-mongodb-novel-server.git cd mcp-mongodb-novel-server -
環境を設定します: プロジェクトのルートに
.envファイルを作成します:MONGODB_URI=mongodb://localhost:27017 DATABASE_NAME=your_database PORT=3000 # Base port (MCP SSE server) # CRUD API will use PORT+1 (3001) -
ビルドして実行します:
cargo build --release cargo run --release
起動に成功すると、次のエンドポイントが表示されます:
- MCP SSE エンドポイント:http://127.0.0.1:3000/sse
- MCP POST エンドポイント:http://127.0.0.1:3000/message
- CRUD API エンドポイント:http://127.0.0.1:3001/api/...
使い方
まず、このサーバーを実行する必要があります。その後、JSON-RPC または SSE に基づいてクライアントを設定します。
以下は VSCode copilot クライアントの設定例です。
"mcp-mongodb-novel-server": {
"type": "sse",
"url": "http://localhost:3000/sse"
}
🔌 サーバーエンドポイント
1. MCP サーバー(SSE プロトコル)
MCP サーバーは次の 2 つのエンドポイントを提供します:
- SSE エンドポイント:
http://localhost:3000/sse- イベントを受信するための SSE 接続を確立します
- POST エンドポイント:
http://localhost:3000/message- JSON-RPC 2.0 形式のコマンドを送信します
MCP リクエストの例(/message への POST を使用):
{
"jsonrpc": "2.0",
"id": "request-1",
"method": "query_character",
"params": {
"character_id": "5f8e4c3b2a1d"
}
}
2. CRUD API(REST)
CRUD API は、データベースのコンテンツを管理するための RESTful エンドポイントを提供します:
- 小説:
/api/novels - 章:
/api/chapters - 登場人物:
/api/characters - Q&A:
/api/qa
標準的な REST 操作(GET、POST、PATCH、DELETE)に対応しています。
📊 データモデル
小説
{
"_id": "ObjectId",
"title": "String",
"author": "String",
"summary": "String",
"year": "Number",
"tags": ["String"]
}
章
{
"_id": "ObjectId",
"novel_id": "ObjectId",
"title": "String",
"chapter_number": "Number",
"summary": "String",
"content": "String",
"word_count": "Number"
}
登場人物
{
"_id": "ObjectId",
"novel_id": "ObjectId",
"name": "String",
"description": "String",
"traits": ["String"],
"relationships": [
{
"character_id": "ObjectId",
"type": "String"
}
]
}
Q&A
{
"_id": "ObjectId",
"question": "String",
"answer": "String",
"tags": ["String"],
"novel_id": "ObjectId"
}
🤖 MCP メソッド
サーバーは、LLM とのやり取りに次の MCP メソッドをサポートしています:
クエリメソッド
| メソッド | 説明 | パラメーター |
|---|---|---|
query_character | 登場人物の詳細を取得します | {"character_id": "string"} |
query_novel | 小説のメタデータを取得します | {"novel_id": "string"} |
query_chapter | 章の情報を取得します | {"chapter_id": "string"} または {"chapter_number": number} または {"chapter_title": "string"} |
query_qa_regex | 正規表現で Q&A エントリーを検索します | {"regex_pattern": "string"} |
query_chapter_regex | 正規表現で章を検索します | {"regex_pattern": "string"} |
query_character_regex | 正規表現で登場人物を検索します | {"regex_pattern": "string"} |
更新メソッド
| メソッド | 説明 | パラメーター |
|---|---|---|
update_chapter_summary | 章の要約を更新します | {"auth_token": "string", "chapter_id": "string", "summary": "string"} |
📥 データ登録
このプロジェクトには、MongoDB へのデータ登録を支援する Python スクレイパーがサブモジュールとして含まれています:
登場人物スクレイパー
cd character-scraper
pip install -r requirements.txt
python src/scraper.py --config config/settings.json
小説スクレイパーライブラリ
cd scraper_library
pip install -r requirements.txt
python -m src.scrapers.scrape_syosetu --url <novel_url>
利用できるスクレイパーには、次のものがあります:
scrape_syosetu.py(小説家になろうの小説)scrape_69shu.py(69Shu の小説)scrape_ximalaya.py(Ximalaya のオーディオブック)scrape_qa.py(Q&A コンテンツ)scrape_x_timeline.py(Twitter/X のタイムライン)- その他多数...
🛠️ 開発
サブモジュールの更新
# Update all submodules to their latest version
git submodule update --remote --merge
# Navigate to a specific submodule and pull changes
cd scraper_library
git pull origin main
cd ..
git add scraper_library
git commit -m "Update scraper_library"
テストの実行
cargo test
コードスタイル
このプロジェクトは、Rust の標準的なコードスタイルガイドラインに準拠しています:
# Check code formatting
cargo fmt -- --check
# Run linting
cargo clippy
パフォーマンスのチューニング
トラフィックの多いデプロイでは、次の点をご検討ください。
- テキスト検索とリレーションシップのために MongoDB のインデックスを作成する
- CPU バウンドな処理のために Tokio のワーカースレッド数を増やす
- MongoDB の接続プーリングを設定する
📄 ライセンス
このプロジェクトは MIT License のもとでライセンスされています。詳細については LICENSE ファイルをご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。