/ ディレクトリ / プレイグラウンド / Qdrant
● 公式 qdrant 🔑 自分のキーが必要

Qdrant

作者 qdrant · qdrant/mcp-server-qdrant

Claudeに永続的なベクトルメモリを付与 — シンプルで明確な設計のQdrantバックエンドMCPで、テキストの保存・呼び出し・セマンティック検索を実現します。

公式Qdrant MCPは、あらゆるQdrantインスタンス(クラウドまたはセルフホスト)を、qdrant-storeqdrant-findのわずか2つのツールでシンプルなセマンティックメモリストアに変えます。エージェントへの長期記憶の付与、個人ナレッジベースの構築、エンベディングのグルーコードを書かずにRAGをプロトタイピングするのに最適です。

なぜ使うのか

主な機能

ライブデモ

実際の動作

qdrant.replay ▶ 準備完了
0/0

インストール

クライアントを選択

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "qdrant": {
      "command": "uvx",
      "args": [
        "mcp-server-qdrant"
      ]
    }
  }
}

Claude Desktop → Settings → Developer → Edit Config を開く。保存後、アプリを再起動。

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "qdrant": {
      "command": "uvx",
      "args": [
        "mcp-server-qdrant"
      ]
    }
  }
}

Cursor は Claude Desktop と同じ mcpServers スキーマを使用。プロジェクト設定はグローバルより優先。

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "qdrant": {
      "command": "uvx",
      "args": [
        "mcp-server-qdrant"
      ]
    }
  }
}

Cline サイドバーの MCP Servers アイコンをクリックし、"Edit Configuration" を選択。

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "qdrant": {
      "command": "uvx",
      "args": [
        "mcp-server-qdrant"
      ]
    }
  }
}

Claude Desktop と同じ形式。Windsurf を再起動して反映。

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "qdrant",
      "command": "uvx",
      "args": [
        "mcp-server-qdrant"
      ]
    }
  ]
}

Continue はマップではなくサーバーオブジェクトの配列を使用。

~/.config/zed/settings.json
{
  "context_servers": {
    "qdrant": {
      "command": {
        "path": "uvx",
        "args": [
          "mcp-server-qdrant"
        ]
      }
    }
  }
}

context_servers に追加。保存時に Zed がホットリロード。

claude mcp add qdrant -- uvx mcp-server-qdrant

ワンライナー。claude mcp list で確認、claude mcp remove で削除。

ユースケース

実用的な使い方: Qdrant

Claudeエージェントにセッションを超えた永続メモリを付与する

👤 パーソナルアシスタントや社内コパイロットを開発するビルダー ⏱ ~15 min beginner

使うタイミング: チャット終了後もClaudeにユーザーの好み、過去の意思決定、進行中のプロジェクトを記憶させたい場合。

前提条件
  • Qdrantの稼働環境(ローカルDockerまたはクラウド) — docker run -p 6333:6333 qdrant/qdrant、またはQdrant CloudのクラスターURL + APIキー
  • COLLECTION_NAME環境変数の設定 — 任意の文字列、例: claude_memory
フロー
  1. 重要な事実を保存するよう教える
    Whenever I tell you something important about a project (deadlines, stakeholders, decisions), store it with qdrant-store, metadata {project, category}.✓ コピーしました
    → Claudeが永続的な事実に対して「保存しました」と返すようになる
  2. 呼び出しが機能するか確認する
    What do you remember about project 'atlas'? Use qdrant-find with a query like 'project atlas decisions'.✓ コピーしました
    → 関連する過去のメッセージがスコア付きで返される
  3. 整理・削除する
    Search for anything about project 'atlas' that's more than 90 days old or marked obsolete, and delete those entries.✓ コピーしました
    → 削除されたアイテムの一覧と確認メッセージ

結果: 先週伝えたことをきちんと覚えているアシスタント — プロジェクト単位でスコープされ、不要なデータは削除可能。

注意点
  • すべてのメッセージを保存するとコレクションが肥大化し、呼び出しの精度が低下する — 明確な事実や意思決定のみを保存し、雑談は保存しない。「保存するかどうか」の判断をシステムプロンプトに組み込むこと。
  • エンベディングモデル変更後にベクトルサイズが合わないコレクションが作成される — Qdrantは不一致のベクトルを拒否します — EMBEDDING_MODELを変更した場合はコレクションを削除して再作成してください。
組み合わせ: filesystem · notion

ドキュメントフォルダ上に軽量RAGを構築する

👤 フレームワークなしでRAGを実現したい開発者 ⏱ ~30 min intermediate

使うタイミング: 50〜5000件のMarkdownファイルがあり、Claudeにそれらを参照して引用付きで質問に回答させたい場合。

前提条件
  • ディスク上のMarkdownドキュメント — .mdファイルが入った任意のフォルダ
フロー
  1. ドキュメントをチャンク分割して保存する
    Read every .md under /docs. Split into ~500-token chunks on heading boundaries. For each chunk, call qdrant-store with the text and metadata {source_path, heading}.✓ コピーしました
    → セクションごとに1つずつ、N個のチャンクが保存される
  2. ユーザーの質問でクエリする
    User asks: 'How do I rotate API keys?' Use qdrant-find to pull the top 5 most relevant chunks. Cite source_path in your answer.✓ コピーしました
    → インラインの[source_path]引用付きの回答
  3. 検索品質を測定する
    For these 10 eval questions [list], which of the expected source paths appear in the top-5 retrieval? Report recall@5.✓ コピーしました
    → 反復的に改善可能な検索品質スコア

結果: チャンクサイズとkを調整して品質を高められる、動作するRAGループ。

注意点
  • チャンクが大きすぎるとエンベディングが希薄になり、検索精度が低下する — チャンクは最大約1000トークンに抑え、まず見出しで分割し、次にトークン数でフォールバック分割する
  • ドキュメントを更新しても古いチャンクが削除されず、回答が陳腐化する — 決定論的なポイントID(source_path+headingのハッシュ)を使い、アップサートで重複ではなく置換されるようにする
組み合わせ: filesystem · firecrawl

チケット・リード・FAQなどの雑多なリストをセマンティックに重複排除する

👤 類似重複が大量にあるCSVを抱える運用チーム ⏱ ~25 min intermediate

使うタイミング: 完全一致の重複排除では「パスワードリセット」と「パスワードの変更方法」のような類似表現を検出できない場合 — セマンティック類似度が必要です。

フロー
  1. 各アイテムを行IDをメタデータとして保存する
    Read rows.csv. For each row, qdrant-store with information=<text> and metadata={row_id: <id>}.✓ コピーしました
    → N件のポイントが保存される
  2. 類似度でクラスタリングする
    For each row, query qdrant-find for its top-5 neighbors with score > 0.85. Output groups of row_ids that are mutually near.✓ コピーしました
    → 重複グループが出力される
  3. 正規レコードを選び、残りを重複としてマークする
    For each group, pick the longest/most-informative row as canonical. Output a CSV {row_id, canonical_id}.✓ コピーしました
    → ソースシステムに適用可能な重複排除マッピング

結果: 信頼度スコア付きの重複排除マッピングCSV。適用前に人間がレビュー可能。

注意点
  • 類似度の閾値はドメイン依存 — 0.85では緩すぎるか厳しすぎる場合がある — まず20ペアを手動でラベル付けし、重複と非重複を最もよく分離する閾値を選定する
組み合わせ: postgres · filesystem

検索可能な議事録メモリ

👤 Notion/Obsidianのメモに埋もれているマネージャー / IC ⏱ ~20 min beginner

使うタイミング: 毎週メモを取っているが、特定の意思決定がどの回の議事録にあったか見つけられない場合。

前提条件
  • 議事録のフォルダ — テキストまたはMarkdownファイル
フロー
  1. 既存のメモをインデックスする
    Walk /meetings/**/*.md. For each, qdrant-store the body with metadata {date, attendees, project}.✓ コピーしました
    → すべてのメモが日付付きでインデックスされる
  2. 意思決定を呼び出す
    Find every note where we discussed 'pricing for enterprise tier'. Show me the date and a 2-line summary of each.✓ コピーしました
    → 該当する会議のランク付きリスト
  3. 最新の状態を維持する
    Add today's note <paste>, then tell me which past notes most likely contradict or update decisions in today's.✓ コピーしました
    → セマンティック近傍を使った矛盾チェック

結果: 毎週更新し続けられる、メモ全体に対するセマンティックインデックス。

注意点
  • 個人用と業務用のメモを1つのコレクションに混在させるとスコープが漏れる — コレクションを分けるか、すべてのfindでscopeメタデータフィルタを必ず適用する
組み合わせ: filesystem · notion

組み合わせ

他のMCPと組み合わせて10倍の力を

qdrant + filesystem

ローカルのドキュメントフォルダをインデックスし、引用付きで質問に回答する

Index every .md under /docs into Qdrant, then answer: 'how does our auth flow work?' with citations to the original file paths.✓ コピーしました
qdrant + firecrawl

サイトをクロールして検索可能なナレッジベースを構築する

Crawl docs.mycompany.com with Firecrawl, store each page in Qdrant collection company_docs.✓ コピーしました
qdrant + postgres

リレーショナルDBの非構造化カラムに対するセマンティック検索

SELECT id, body FROM support_tickets created in the last 30 days, embed each body into Qdrant with metadata {ticket_id}, then let me search them by meaning.✓ コピーしました

ツール

このMCPが提供する機能

ツール入力呼び出すタイミングコスト
qdrant-store information: str, metadata?: object 事実、チャンク、またはメモを後でセマンティック呼び出しするために永続化する free (local embedding)
qdrant-find query: str, limit?: int 質問への回答や重複排除のためにセマンティックに類似するエントリを取得する free

コストと制限

運用コスト

APIクォータ
セルフホスト: 無制限。Qdrant Cloud: クラスターサイズに依存。
呼び出しあたりのトークン
Store: 1回あたり約100トークンのオーバーヘッド。Find: 約200トークン + 結果ペイロード。
金額
セルフホストなら無料。Qdrant Cloud無料枠: 1GBクラスター。有料プランは月額約$25から。
ヒント
開発時はローカルDockerで始め、永続化やマルチデバイスアクセスが必要になった段階でCloudにアップグレードしましょう。

セキュリティ

権限、シークレット、影響範囲

認証情報の保管: QDRANT_URLおよびオプションのQDRANT_API_KEYを環境変数に設定
データ送信先: セルフホストの場合: なし。Qdrant Cloudの場合: すべてのベクトルとメタデータが指定リージョンのクラスターに送信されます。

トラブルシューティング

よくあるエラーと対処法

Collection does not exist / Not found

サーバーは最初のstore時にのみコレクションを作成しますが、COLLECTION_NAMEが設定されている必要があります。環境変数を確認し、MCPを再起動してください。

確認: curl $QDRANT_URL/collections
Vector dimension mismatch

古いコレクションを削除せずにEMBEDDING_MODELを変更しました。コレクションを削除して最初からやり直すか、新しいCOLLECTION_NAMEを使用してください。

確認: curl $QDRANT_URL/collections/<name>
Connection refused on localhost:6333

Qdrantコンテナが起動していません。docker run -p 6333:6333 qdrant/qdrantを実行してリトライしてください。

確認: curl localhost:6333/healthz
Searches return irrelevant results(検索結果が無関係)

チャンクが大きすぎるか、エンベディングモデルの性能が不足している可能性があります。FastEmbedのbge-small-en-v1.5と500トークン以下のチャンクを試してください。

代替案

Qdrant 他との比較

代替案代わりに使う場面トレードオフ
Chroma MCPインフラ不要の組み込み型ベクトルDBを使いたい場合高負荷時のプロダクション品質はQdrantに劣る
Pinecone MCPすでにPineconeを利用しており、ホスト型のみで運用したい場合初日から有料。設計がより固定的
Memory MCPセマンティック検索ではなく、シンプルなキーバリュー型メモリが必要な場合エンベディングなし — 完全一致の呼び出しのみ

その他

リソース

📖 GitHub の公式 README を読む

🐙 オープンな issue を見る

🔍 400以上のMCPサーバーとSkillsを見る