Qdrant MCP について
Qdrant MCPは、ベクトルデータベースの運用管理を行うクライアント向けに、Qdrantの操作をMCPツールとして提供します。検索、データ編集、バックアップ、可観測性を選択式のツールセットで扱い、埋め込み生成や文書分割は行いません。
主な機能
- 01コレクションとポイントのライフサイクル操作
- 02密・疎・ハイブリッド・グループ検索
- 03ペイロードとベクトルの編集
- 04コレクションとストレージのスナップショット
- 05選択式ツールセットと読み取り専用モード
活用シーン
- 01コレクション作成と保存ベクトルの管理
- 02ハイブリッド検索や多段ベクトル検索の実行
- 03Qdrantデータのバックアップと復元
- 04メトリクスとコレクション状態の確認
MCP 対応
MCPサーバーはQdrant APIの操作をツールとして公開し、設定可能なツールセットに整理します。ローカルのstdioとリモートのstreamable HTTPに対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx mcp-qdrantQDRANT_URLQdrant server URL, e.g. http://localhost:6333 (mutually exclusive with QDRANT_LOCAL_PATH)QDRANT_API_KEYシークレットQdrant API key, if your instance requires oneQDRANT_LOCAL_PATHPath to an embedded Qdrant instance, instead of a URLQDRANT_MCP_TOOLSETSComma-separated toolsets to enable: core, search, payload, admin, snapshots, observabilityQDRANT_MCP_READ_ONLYRemove every tool not marked read-only from the registryQDRANT_MCP_MAX_LIMITLargest number of points one tool call may ask for (minimum 30); bigger requests are refused, not cutローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Qdrant MCP
Qdrant ベクトルデータベースの API 全体をツールとして公開する Model Context Protocol(MCP)サーバーです — コレクション管理、高度なハイブリッド検索、ペイロードとベクトルの編集、スナップショット、サーバーの可観測性に対応します。単なる store/find ではありません。
目次
- 概要
- 主な機能
- 要件
- インストール
- クイックスタート
- Claude への接続
- 設定リファレンス
- 利用可能なツール
- 読み取り専用モード
- アーキテクチャ
- セキュリティ
- 開発
- バージョン管理と変更履歴
- ライセンス
概要
Qdrant MCP は、Qdrant API をそのままラップする薄い MCP サーバーです。Qdrant の操作ごとにツールを登録し、Pydantic で入力を検証し、公式の qdrant-client SDK を呼び出して結果を返します。埋め込みの生成も、ドキュメントの解析も、テキストを分割する方法の決定もしません。意図的に、RAG システムではありません。LLM クライアントが保存またはクエリするデータには、独自のベクトルを用意する必要があります。
この点が、公式 Qdrant MCP サーバーとの違いでもあります。公式サーバーが公開するツールは store/find の 2 つだけで、ドキュメントの埋め込みも代行します。このサーバーは Qdrant のその他の機能、つまりコレクション、ポイント、検索、ペイロード、インデックス作成、スナップショット、可観測性に関するすべてをカバーします。そのため、LLM クライアントは限られたインターフェースでメモリを出し入れするだけでなく、Qdrant のデプロイメントをエンドツーエンドで管理できます。
各判断に影響したすべての調査結果を含む、フェーズごとの設計経緯の全容については、ROADMAP.md を参照してください(スペイン語)。
主な機能
- コレクションとポイントのライフサイクル全般 — コレクションの作成/更新/削除、ポイントの CRUD、スクロール、カウントに対応します。
- Qdrant のあらゆる検索モード — 密ベクトル、疎ベクトル、マルチベクトルを対象とした通常のベクトル検索、ハイブリッド検索(RRF(任意で重み付け可能)および DBSF による融合)、ネストされた複数段階のプリフェッチ(密ベクトルと疎ベクトルを融合し、マルチベクトルで再ランキング)、MMR による多様性の確保、カスタムスコア式(ペイロードによるブースト、鮮度と地理情報による減衰)、ペイロードフィールドによる並べ替え、ランダムサンプリング、グループ化クエリ、レコメンド、ディスカバー、ペアワイズ距離行列に対応します。検索精度の調整パラメーター(
search_params、score_threshold、ページング、タイムアウト)は、すべての検索ツールで使用できます。 - ペイロードとベクトルの編集 — ペイロードの設定/上書き/削除/クリア、ペイロードインデックス、ファセットのカウント、名前付き(密/疎)ベクトルの管理、順序付き一括操作に対応します。
- スナップショット — コレクション単位およびストレージ全体のバックアップ/復元に対応します。
- エイリアス、再インデックス、内部情報の確認 — ダウンタイムなしで名前が指すコレクションを切り替えたり、サーバー側でコレクション間のポイントをコピーしたりできます(ベクトルがモデルを経由することはありません)。シャード構成や、オプティマイザーによるインデックス作成の完了状況も確認できます。また、フィルターを作成する前に、コレクションが実際に保持しているペイロードキーのプロファイルを取得できます。
- 可観測性 — テレメトリー、Prometheus メトリクスエンドポイント、リソースクォータ、問題の自己診断に対応します。
- 必要なツールだけを有効化 — ツールはツールセットごとにグループ化されており、明示的に有効化できます。そのため、クライアントに重複する60個以上のツールがデフォルトで渡されることはありません。
- 読み取り専用ガード — 1つのフラグで、変更を伴うすべてのツールをレジストリから完全に除外できます。
- モデルのコンテキストに配慮 — サーバーが公開するスキーマはコンパクトです(Qdrant の冗長な
Filterおよび設定モデルを要約していますが、検証内容は変わりません)。そのため、デフォルトのツールセットが消費するスキーマは約44 KBで、約150 KBから削減されています。また、呼び出しごとの結果上限(QDRANT_MCP_MAX_LIMIT)により、誤ったlimitの指定で会話が大量の結果で埋め尽くされるのを防ぎます。 - デフォルトで高い耐障害性 — すべての Qdrant 呼び出しでバックオフ付き再試行を行い、失敗時には汎用的な例外ではなく、Qdrant 自身のエラーメッセージを返します。
要件
- Python 3.12 以降
- Qdrant サーバー v1.19.0 以降。 2つのツール(
qdrant_collection_vector_create/qdrant_collection_vector_delete)は、古い Qdrant サーバーでは404を返すエンドポイントに依存しています(v1.13.6 および v1.15.1 で確認済み)。それ以外の機能は古いバージョンでも動作しますが、このプロジェクトがテストしているのは v1.19.0 以降のみです。
インストール
PyPI
# Run without installing (recommended for Claude Desktop/Code configs)
uvx mcp-qdrant
# Or install into your environment
pip install mcp-qdrant
Docker
docker run --rm -p 8000:8000 \
-e QDRANT_URL=http://host.docker.internal:6333 \
-e QDRANT_MCP_TRANSPORT=streamable-http \
-e QDRANT_MCP_HTTP_HOST=0.0.0.0 \
-e QDRANT_MCP_SHARED_SECRET=<a long random secret> \
ghcr.io/avaazquezz/qdrant-mcp:latest
このイメージは streamable-http でのみ利用できます。stdio では、クライアントがプロセスの stdin/stdout を直接所有する必要がありますが、デタッチされたコンテナではそれを提供できません。サーバーはデフォルトで 127.0.0.1 にバインドするため、コンテナの外部からポートにアクセスするには QDRANT_MCP_HTTP_HOST=0.0.0.0 が必要です。イメージはタグ付きリリースのたびに {version}、{major}.{minor}、latest として公開されます。
Claude Desktop バンドル(.mcpb)
最新リリースから mcp-qdrant.mcpb をダウンロードし、ダブルクリックしてください。Claude Desktop は uv を使用してサーバーをインストールし(お使いのマシンで依存関係を解決するため、Python のインストールは不要です)、独自の設定フォームから Qdrant の URL、API キー、ローカルパス、ツールセット、読み取り専用モードの入力を求めます。JSON を編集する必要はありません。
クイックスタート
stdio 経由でローカルの Qdrant インスタンスにサーバーを接続し、到達可能であることを確認します。
QDRANT_URL=http://localhost:6333 mcp-qdrant
MCP クライアントから接続すると、一般的な最初のやり取りは次のようになります。
qdrant_health_check— ほかの操作を行う前に、設定された Qdrant インスタンスに到達できることを確認します。qdrant_collection_create—{"collection_name": "docs", "vector_size": 4, "distance": "Cosine"}。qdrant_points_upsert—{"collection_name": "docs", "points": [{"id": 1, "vector": [0.1, 0.2, 0.3, 0.4], "payload": {"title": "hello"}}]}。qdrant_query—{"collection_name": "docs", "query_vector": [0.1, 0.2, 0.3, 0.4], "limit": 5}。
各ツールの完全なパラメーター形式は、それぞれの MCP スキーマに記載されています。LLM クライアントは tools/list を介して直接読み取ります。以下の利用可能なツールの表は、同じ情報を人が読みやすい形でまとめたものです。
Claude に接続する
Claude Desktop / Claude Code(ローカル、stdio)
claude_desktop_config.json(Claude Desktop)または .mcp.json(Claude Code):
{
"mcpServers": {
"qdrant": {
"command": "uvx",
"args": ["mcp-qdrant"],
"env": {
"QDRANT_URL": "http://localhost:6333",
"QDRANT_MCP_TOOLSETS": "core,search"
}
}
}
}
または、インストールで説明している .mcpb バンドルを使用します。同じ結果が得られ、JSON を編集する必要はありません。
リモート(streamable-http)
ネットワーク経由で到達可能なサーバー(Claude.ai のカスタムコネクターとして追加する場合など)で、固定の Qdrant インスタンスをバックエンドとして使用します。このモードでは QDRANT_MCP_SHARED_SECRET が必須です。ネットワーク上で認証されていないエンドポイントを公開しないよう、設定されていない場合、サーバーは streamable-http としての起動を拒否します(実機で確認済み:公開された streamable-http サーバーは、URL を知っている人なら誰でも簡単に利用できます)。
QDRANT_URL=http://localhost:6333 \
QDRANT_MCP_TRANSPORT=streamable-http \
QDRANT_MCP_HTTP_HOST=0.0.0.0 \
QDRANT_MCP_SHARED_SECRET=<a long random secret> \
mcp-qdrant
Claude.ai で(Customize → Connectors → Add custom connector。実際のアカウントで確認済み)、サーバーの HTTPS URL を入力し、検出された認証画面で "None" を選んで、Request header を追加します。Authorization → Bearer <the same secret> を指定します。(Authorization を使用するのは、カスタム名について Anthropic の手動承認を受けなくても、Claude.ai のカスタムコネクター UI で受け付けられる 2 つのヘッダー名のうちの 1 つだからです。)
設定リファレンス
設定はすべて環境変数で行い、起動時に一度だけ読み込まれます。設定に誤りがある場合、後になってわかりにくいツールエラーとして現れるのではなく、すぐに失敗します。
| 変数 | デフォルト | 必須 | 用途 |
|---|---|---|---|
QDRANT_URL | — | いいえ¹ | Qdrant インスタンスの URL。例:http://localhost:6333 または Qdrant Cloud の URL。 |
QDRANT_API_KEY | — | いいえ | インスタンスで必要な場合に使用する、QDRANT_URL の API キー。 |
QDRANT_LOCAL_PATH | — | いいえ¹ | URL の代わりに使用する、組み込み型/ディスク上の Qdrant インスタンスへのパス。 |
QDRANT_MCP_READ_ONLY | false | いいえ | レジストリから、読み取り専用としてマークされていないすべてのツールを除外します。読み取り専用モードを参照してください。 |
QDRANT_MCP_TRANSPORT | stdio | いいえ | stdio(ローカル、Claude Desktop/Code 用)または streamable-http(ネットワーク用)。 |
QDRANT_MCP_TOOLSETS | core | いいえ | 登録するツールセットのカンマ区切りリスト。利用可能なツールを参照してください。 |
QDRANT_MCP_SHARED_SECRET | — | streamable-http では必須 | クライアントが Authorization ヘッダーで送信する必要があるベアラートークン。 |
QDRANT_MCP_HTTP_HOST | 127.0.0.1 | いいえ | streamable-http のバインド先ホスト。コンテナー内では 0.0.0.0 を使用します。 |
QDRANT_MCP_HTTP_PORT | 8000 | いいえ | streamable-http のバインド先ポート。 |
QDRANT_MCP_MAX_LIMIT | 1000 | いいえ | 1 回のツール呼び出しで要求できるポイント数の上限(最小値は 30 で、すべてのツールのデフォルトの要求数を満たします)(limit、グループの limit × group_size、バッチの合計、ID の数など)。上限を超える要求は、黙って切り詰められるのではなく、ページ分割するよう促すメッセージとともに拒否されます。 |
¹ QDRANT_URL と QDRANT_LOCAL_PATH は同時に設定できません。どちらも設定されていない場合、クライアントは qdrant-client SDK 独自のデフォルト値である localhost:6333 にフォールバックします。
利用可能なツール
ツールはツールセットに分類されており、QDRANT_MCP_TOOLSETS(カンマ区切り)で有効化します。デフォルトで有効なのはcoreのみです。その他は明示的に有効化する必要があるため、クライアントに一度にすべてのツールが渡されることはありません。
core— コレクションとポイントのCRUDに加え、qdrant_queryとスモークテスト用のqdrant_health_checkが含まれます。これだけでMCPを十分に利用できます。search— 単純なベクトル検索を超えるすべての機能が含まれます。一括/グループ化クエリ、レコメンド、ディスカバー、ペアワイズ距離行列などがあります。payload— ペイロードの編集とインデックス作成、名前付きベクトルの管理、順序指定の一括ポイント操作が含まれます。snapshots— コレクションおよびストレージ全体のバックアップ/復元が含まれます。observability— テレメトリー、メトリクス、クォータ、問題の自己診断が含まれます。admin— コレクションエイリアス、コレクションごとのシャードレイアウトとオプティマイザーの進行状況に加え、データをサーバー上に保持する2つの複合操作が含まれます。1つはコレクション間でポイントをコピーする操作(ダウンタイムなしの再インデックスに欠けていた機能)で、もう1つはコレクションに実際に存在するペイロードキーのプロファイリングです。ここに含まれるすべての機能は単一ノードで動作します。分散クラスターの管理(シャードキー、再シャーディング)は対象外です。ROADMAP.mdのFase 5とFase 12を参照してください。
以下の表は、稼働中のツールレジストリから直接生成されます。ツールを追加または変更した後は、uv run python scripts/gen_tools_doc.pyを実行して表を同期してください(内容にずれがあると、CIでビルドが失敗します)。
| ツール | ツールセット | 読み取り専用 | 破壊的 | 冪等 | 説明 |
|---|---|---|---|---|---|
qdrant_health_check | core | ✅ | ❌ | ✅ | 設定された Qdrant インスタンスに到達でき、応答していることを確認します。 |
qdrant_collection_create | core | ❌ | ❌ | ❌ | コレクションを作成します。単一の名前なしベクトル(vector_size + distance)、または1つ以上の名前付きベクトル(vectors。それぞれが完全な VectorParams — サイズ、距離、および必要に応じて ColBERT スタイルのマルチベクトル用の個別の multivector_config または quantization_config)のどちらか一方を指定します。 |
qdrant_collection_list | core | ✅ | ❌ | ✅ | 設定された Qdrant インスタンス内のすべてのコレクション名を一覧表示します。 |
qdrant_collection_info | core | ✅ | ❌ | ✅ | 1つのコレクションの設定全体とステータスを返します。 |
qdrant_collection_update | core | ❌ | ❌ | ✅ | 既存のコレクションのオプティマイザー/HNSW/コレクション/ベクトルのパラメーターを更新します。 |
qdrant_collection_delete | core | ❌ | ✅ | ✅ | コレクションとそのすべてのポイントを削除します。コレクションが存在しない場合は何も行いません。 |
qdrant_collection_exists | core | ✅ | ❌ | ✅ | コレクションが存在するか確認します。存在しない場合もエラーにはなりません。 |
qdrant_points_upsert | core | ❌ | ✅ | ✅ | コレクション内のポイント(ID + ベクトル + ペイロード)を挿入または置換します。 |
qdrant_points_get | core | ✅ | ❌ | ✅ | IDでポイントを取得します。不明なIDはエラーにならず、単に除外されます。 |
qdrant_points_delete | core | ❌ | ✅ | ✅ | IDリストまたはペイロードフィルターでポイントを削除します。どちらか一方を指定します。 |
qdrant_points_scroll | core | ✅ | ❌ | ✅ | コレクション内のすべてのポイントをページ単位で取得します。フィルターも指定できます。 |
qdrant_points_count | core | ✅ | ❌ | ✅ | コレクション内のポイント数を数えます。フィルターに一致するポイントのみを対象にすることもできます。 |
qdrant_query | core | ✅ | ❌ | ✅ | Qdrant の統合クエリ API を使ってコレクションを検索します。ベクトル類似度、ハイブリッド融合、複数段階の再ランキング、MMR による多様性、ペイロードベースのスコア式、ペイロードフィールドによる並べ替え、ランダムサンプリングに対応します。 |
qdrant_query_batch | search | ✅ | ❌ | ✅ | 1回のラウンドトリップで、1つのコレクションに対して複数の独立したクエリを実行します。各項目には qdrant_query のすべてのクエリモードと調整パラメーター(通常のベクトル検索、prefetch に対する融合、MMR、式、order_by、sample、search_params、score_threshold、offset)を指定できます。timeout_seconds と consistency はバッチ全体に適用されます。 |
qdrant_query_groups | search | ✅ | ❌ | ✅ | ペイロードフィールドでグループ化したベクトルクエリを実行し、各グループから最大 group_size 件のヒットを返します。たとえば、ソース文書ごとに最も一致するチャンクを取得できます。 |
qdrant_recommend | search | ✅ | ❌ | ✅ | 正例のセットに類似し、負例のセットとは異なるポイントを検索します(ベクトルまたはポイントID)。Qdrant のレコメンド API です。 |
qdrant_recommend_batch | search | ✅ | ❌ | ✅ | 1回のラウンドトリップで、1つのコレクションに対して複数の独立したレコメンドクエリを実行します。 |
qdrant_recommend_groups | search | ✅ | ❌ | ✅ | ペイロードフィールドでグループ化したレコメンドクエリを実行し、各グループから最大 group_size 件のヒットを返します。 |
qdrant_discover | search | ✅ | ❌ | ✅ | 正負のコンテキストペア(ベクトルまたはポイントID)の中で、ターゲットにどの程度適合するかに基づいてポイントを順位付けします。Qdrant のディスカバリー検索で、レコメンドよりもきめ細かい代替手段です。 |
qdrant_discover_batch | search | ✅ | ❌ | ✅ | 1回のラウンドトリップで、1つのコレクションに対して複数の独立したディスカバリークエリを実行します。 |
qdrant_distance_matrix_pairs | search | ✅ | ❌ | ✅ | ポイントのランダムサンプル間のペアワイズ距離行列です。sample 個のポイントそれぞれについて、同じサンプル内から最も近い limit 個の近傍を返します。結果は (a, b, score) のペアのフラットなリストです。 |
qdrant_distance_matrix_offsets | search | ✅ | ❌ | ✅ | qdrant_distance_matrix_pairs と同じ距離行列を、列指向の形式(共有IDリスト内のオフセット + 対応するスコア配列)で返します。大きなサンプルでは、よりコンパクトです。 |
qdrant_payload_set | payload | ❌ | ❌ | ✅ | 選択したポイントのペイロードにフィールドをマージします。ids/points_filter のどちらか一方を指定します。 |
qdrant_payload_overwrite | payload | ❌ | ✅ | ✅ | 選択したポイントのペイロード全体を payload で置き換えます。ids/points_filter のどちらか一方を指定します。 |
qdrant_payload_delete | payload | ❌ | ✅ | ✅ | 選択したポイントから特定のペイロードキーを削除します。ids/points_filter のどちらか一方を指定します。 |
qdrant_payload_clear | payload | ❌ | ✅ | ✅ | 選択したポイントのベクトルを保持したまま、ペイロード全体を消去します。ids/points_filter のどちらか一方を指定します。 |
qdrant_payload_facet | payload | ✅ | ❌ | ✅ | コレクション全体(またはフィルターで絞り込んだ範囲)で、ペイロードフィールドの異なる値の数を数えます。たとえば、city ごとのポイント数を取得できます。 |
qdrant_payload_index_create | payload | ❌ | ❌ | ✅ | field_name にペイロードインデックスを作成し、そのフィールドを使うフィルターを高速化します。 |
qdrant_payload_index_delete | payload | ❌ | ✅ | ✅ | field_name のペイロードインデックスを削除します。 |
qdrant_collection_vector_create | payload | ❌ | ❌ | ✅ | すでにポイントがあるコレクションに、新しい名前付きベクトル(密または疎)を追加します。既存のポイントには変更を加えません。 |
qdrant_collection_vector_delete | payload | ❌ | ✅ | ✅ | コレクションから名前付きベクトル(密または疎)を削除します。ポイントの他のベクトルとペイロードは保持されます。 |
qdrant_points_batch_update | payload | ❌ | ✅ | ❌ | 1つのコレクションに対して、複数のポイント操作(アップサート、削除、ペイロードの設定/上書き/削除/消去、ベクトルの更新/削除)を指定順に1回のリクエストで実行します。 |
qdrant_vectors_update | payload | ❌ | ✅ | ✅ | IDで指定した既存ポイントのベクトルを置き換えます。ペイロードは変更しません。 |
qdrant_vectors_delete | payload | ❌ | ✅ | ✅ | 選択したポイントから特定の名前付きベクトルを削除し、ペイロードとその他のベクトルは保持します。ids/points_filter のどちらか一方を指定します。 |
qdrant_alias_list | admin | ✅ | ❌ | ✅ | サーバー上のすべてのエイリアスと、それぞれが指すコレクションを一覧表示します。 |
qdrant_collection_aliases | admin | ✅ | ❌ | ✅ | 1つのコレクションを指すエイリアスを一覧表示します。該当するエイリアスがない場合は空のリストを返します。 |
qdrant_alias_update | admin | ❌ | ✅ | ❌ | エイリアスの作成、名前変更、参照先の変更、削除を行います。ダウンタイムなしで再インデックスする際に利用でき、新しいコレクションを作成してから、クライアントが使用するエイリアスを切り替えます。 |
qdrant_collection_cluster_info | admin | ✅ | ❌ | ✅ | コレクションのシャード構成を返します。シャード数と、各ローカルシャードのポイント数およびレプリカの状態を確認できます。 |
qdrant_collection_optimizations | admin | ✅ | ❌ | ✅ | コレクションのバックグラウンドオプティマイザーの進行状況を返します。「インデックス作成は完了したか」「コレクションが green にならないのはなぜか」を確認できます。 |
qdrant_collection_copy | admin | ❌ | ✅ | ✅ | 同じ Qdrant インスタンス内の別のコレクションに、ポイント(すべてのベクトル — 密、疎、マルチベクトル — とペイロード)をコピーします。処理はすべてサーバー側で行われるため、ベクトルがモデルを経由することはありません。 |
qdrant_payload_schema_infer | admin | ✅ | ❌ | ✅ | コレクション内で実際に使われているペイロードキーをプロファイリングし、推測したキーではなく実在するキーに基づいてフィルターを記述できるようにします。 |
qdrant_snapshot_create | snapshots | ❌ | ❌ | ❌ | 1つのコレクションの現在の状態のスナップショットを作成します。 |
qdrant_snapshot_list | snapshots | ✅ | ❌ | ✅ | 1つのコレクションについて保存されているスナップショットを一覧表示します。 |
qdrant_snapshot_delete | snapshots | ❌ | ✅ | ✅ | コレクションのスナップショットを削除し、サーバー上のディスク領域を解放します。稼働中のコレクションには影響しません。 |
qdrant_snapshot_recover | snapshots | ❌ | ✅ | ✅ | コレクションをスナップショットに記録された状態で上書きします。スナップショット作成後に書き込まれたデータはすべて失われます。 |
qdrant_snapshot_download | snapshots | ✅ | ❌ | ✅ | コレクションのスナップショットが存在することを確認し、取得先を返します。このツールは(非常に大きい可能性のある)スナップショットファイル自体を転送しません。返された url から自分で(例:curl を使って)ダウンロードしてください。 |
qdrant_storage_snapshot_create | snapshots | ❌ | ❌ | ❌ | 1つのコレクションだけでなく、ストレージ全体(すべてのコレクションとサーバー設定)のスナップショットを作成します。 |
qdrant_storage_snapshot_list | snapshots | ✅ | ❌ | ✅ | サーバーに保存されているストレージ全体のスナップショットを一覧表示します。 |
qdrant_storage_snapshot_delete | snapshots | ❌ | ✅ | ✅ | ストレージ全体のスナップショットを削除し、ディスク領域を解放します。 |
qdrant_storage_snapshot_download | snapshots | ✅ | ❌ | ✅ | ストレージ全体のスナップショットが存在することを確認し、取得先を返します。qdrant_snapshot_download と同様に、このツールはファイル自体を転送しません。 |
qdrant_telemetry | observability | ✅ | ❌ | ✅ | サーバー全体のテレメトリーを返します。ビルド情報、コレクションごとの統計、リクエストカウンター、メモリおよびハードウェアの使用状況を確認できます。 |
qdrant_metrics_prometheus | observability | ✅ | ❌ | ✅ | Qdrant が Prometheus 形式のメトリクスを提供する URL を返します。このツールはメトリクス自体を取得しません(メトリクスは JSON ではなくプレーンテキストです)。代わりに、返された url を Prometheus スクレイパーの取得先に指定してください。 |
qdrant_quotas_get | observability | ✅ | ❌ | ✅ | サーバー全体の現在のリソースクォータ(メモリ/ディスクの制限)と実際の使用量を返します。 |
qdrant_quotas_set | observability | ❌ | ❌ | ✅ | サーバー全体のリソースクォータを更新します。 |
qdrant_issues_list | observability | ✅ | ❌ | ✅ | Qdrant が自身の設定について検出した問題を一覧表示します(例:ペイロードインデックスがないため、あるフィールドでのフィルタリングが非常に遅い)。 |
qdrant_issues_clear | observability | ❌ | ✅ | ✅ | 蓄積された問題をすべて消去します。 |
読み取り専用モード
QDRANT_MCP_READ_ONLY=1 を設定すると、destructiveHint が明示的に
false ではない(つまり、readOnlyHint=true ではない)すべてのツールが、レジストリ自体から削除されます。クライアントが tools/list を呼び出しても、それらのツールは表示されず、表示されたうえで呼び出しを拒否されるわけではありません。これにより、LLM クライアントに Qdrant デプロイメントへの安全な読み取り専用アクセスを提供できます。データベースを指定してフラグを設定すれば、書き込みを行うコードパスは一切残りません。
アーキテクチャ
- 共有クライアントは 1 つ。 起動時に
AsyncQdrantClientを 1 つだけ生成し、すべてのツールで共有します。 - 登録の一元化。 すべてのツールモジュールは単一の
ToolRegistryを通じて登録します。ツールセットのフィルターと読み取り専用ガードの両方がここで適用されるため、ツールが異なる方法で登録してどちらかを回避することはできません。 - 堅牢性。 すべての Qdrant 呼び出しは
tenacityによるリトライとバックオフでラップされています(qdrant-clientSDK が提供するのはタイムアウトのみで、リトライ機能はありません)。また、汎用的なエラーではなく、Qdrant 自身のエラーメッセージを含む MCP のToolErrorに変換されるため、「コレクションが見つかりません」はそのままの内容で表示されます。 stdioに安全なログ記録。 MCP サーバーオブジェクトの構築前にすべてのログ出力先をstderrに設定します。stdioトランスポートでstdoutに書き込むと、JSON-RPC メッセージのフレーミングが破損するためです。
セキュリティ
streamable-httpでは認証が必須です。QDRANT_MCP_SHARED_SECRETが設定されていない場合、サーバーは起動を拒否します。認証なしのインスタンスは、URL を知っている人なら誰でも簡単に利用できることを実際に確認しています。- すべての入力を検証します。 各ツールの入力は Pydantic モデルで定義されているため、不正な入力は Qdrant SDK に渡される前に、構造化されたエラーとして拒否されます。
- 読み取り専用ガード。
QDRANT_MCP_READ_ONLYを設定すると、変更を行うすべてのツールがレジストリから削除されます。詳しくは読み取り専用モードを参照してください。
開発
git clone https://github.com/avaazquezz/Qdrant-MCP.git
cd Qdrant-MCP
uv sync --dev
uv run pre-commit install
uv run ruff check . # lint
uv run ruff format --check . # formatting
uv run mypy . # type checking (strict)
uv run pytest # unit tests
uv run pytest -m integration # integration tests — needs a running Qdrant (CI runs one as a Docker service)
ツールを追加または変更した場合は、手作業で編集するのではなく、利用可能なツールの表を再生成してください。
uv run python scripts/gen_tools_doc.py # regenerate
uv run python scripts/gen_tools_doc.py --check # verify, no changes (what CI runs)
バージョン管理と変更履歴
このプロジェクトはセマンティックバージョニングに準拠しています。リリースノートはCHANGELOG.md、各バージョンの段階的な設計の経緯はROADMAP.mdを参照してください。
ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。