qdrant-mcp-ollama
Uses Ollama to generate GPU-accelerated embeddings, enabling semantic search and retrieval over codebases stored in Qdrant.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@qdrant-mcp-ollamaSearch the codebase for authentication logic and return relevant code chunks."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
qdrant-mcp-ollama
A Model Context Protocol (MCP) server for Qdrant vector database that uses Ollama for GPU-accelerated embeddings.
Why not the official mcp-server-qdrant?
The official Qdrant MCP server uses FastEmbed for embeddings, which:
Runs on CPU only — slow on large codebases, underutilizes modern GPUs
Uses a small model (
all-MiniLM-L6-v2, 384-dim) — lower quality embeddingsSingle-process lock in local mode — only one MCP client can access the database at a time
This server solves all three problems:
Official |
| |
Embedding engine | FastEmbed (CPU) | Ollama (GPU) |
Default model | all-MiniLM-L6-v2 (384-dim, 80MB) | bge-m3 (1024-dim, 1.2GB) |
Concurrent access | No (local mode) | Yes (Qdrant server) |
Model flexibility | FastEmbed models only | Any Ollama embedding model |
Related MCP server: Claude Context MCP
Architecture
┌──────────────┐ ┌────────────────────┐ ┌─────────────┐
│ MCP Client │────>│ qdrant-mcp-ollama │────>│ Ollama │
│ (Claude Code, │ │ (server.py) │ │ (GPU) │
│ Kilo Code, │<────│ │ └─────────────┘
│ Cursor, etc) │ └────────┬───────────┘
└──────────────┘ │
v
┌────────────────────┐
│ Qdrant Server │
│ (Docker, :6333) │
│ Storage: local │
│ disk / cloud │
└────────────────────┘Prerequisites
Ollama — installed and running with an embedding model pulled
Docker — for running the Qdrant server
uv — Python package manager (recommended) or
pip
Quick Start
1. Pull an embedding model in Ollama
ollama pull bge-m32. Start the Qdrant server
docker run -d --name qdrant-server \
-p 6333:6333 -p 6334:6334 \
-v qdrant-storage:/qdrant/storage \
--restart unless-stopped \
qdrant/qdrant:latest3. Run the MCP server
# No install needed — uv downloads dependencies on-the-fly:
QDRANT_URL="http://localhost:6333" \
EMBEDDING_MODEL="bge-m3" \
uv run --with fastmcp --with qdrant-client --with httpx python server.py4. Embed a codebase
uv run --with qdrant-client --with httpx python embed_codebase.py \
/path/to/your/project my-project --preset python5. Search from your MCP client
Once configured (see sections below), ask your AI assistant:
"Search the codebase for authentication logic"
It will use the qdrant_find tool to return semantically relevant code chunks.
Setting Up the Qdrant Server
Option A: Docker (recommended)
Store data on a specific drive (e.g., E: on Windows):
# Create storage directories
mkdir -p E:/qdrant-storage E:/qdrant-snapshots
# Start Qdrant with persistent storage
docker run -d --name qdrant-server \
-p 6333:6333 -p 6334:6334 \
-v E:/qdrant-storage:/qdrant/storage \
-v E:/qdrant-snapshots:/qdrant/snapshots \
--restart unless-stopped \
qdrant/qdrant:latestOn Linux/macOS:
docker run -d --name qdrant-server \
-p 6333:6333 -p 6334:6334 \
-v ~/qdrant-storage:/qdrant/storage \
--restart unless-stopped \
qdrant/qdrant:latestThe --restart unless-stopped flag ensures Qdrant starts automatically with Docker Desktop.
Verify it's running:
docker ps --filter name=qdrant-server
# Or open http://localhost:6333/dashboard in your browserOption B: Qdrant Cloud
Sign up at cloud.qdrant.io and get your URL and API key. Then set:
QDRANT_URL="https://your-cluster.cloud.qdrant.io:6333"
QDRANT_API_KEY="your-api-key"Note: The
QDRANT_API_KEYenvironment variable is passed through to the Qdrant client automatically.
Embedding a Codebase
The embed_codebase.py script scans a directory, chunks source files, and bulk-embeds them into Qdrant using Ollama on GPU.
Basic usage
uv run --with qdrant-client --with httpx python embed_codebase.py <directory> <collection-name>Using extension presets
# Python project
python embed_codebase.py ./my-api api-backend --preset python
# Full-stack web project
python embed_codebase.py ./my-app frontend --preset web
# R / bioinformatics project
python embed_codebase.py ./analysis bio-analysis --preset r
# Everything
python embed_codebase.py ./mono-repo all-code --preset allCustom extensions
python embed_codebase.py ./project my-collection --extensions .py .sql .sh .yamlAvailable presets
Preset | Extensions |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| All common source extensions |
If no --preset or --extensions is provided, the script auto-detects file types.
All options
usage: embed_codebase.py <directory> <collection> [options]
positional arguments:
directory Path to the codebase directory
collection Qdrant collection name
options:
--extensions EXT [EXT ...] File extensions to include (e.g. .py .ts)
--preset PRESET Use a preset group of extensions
--model MODEL Ollama embedding model (default: bge-m3)
--qdrant-url URL Qdrant server URL (default: http://localhost:6333)
--ollama-url URL Ollama server URL (default: http://localhost:11434)
--chunk-size N Max lines per chunk (default: 80)
--chunk-overlap N Overlap lines between chunks (default: 10)
--batch-size N Upload batch size for Qdrant (default: 500)
--append Append to existing collection instead of replacingAppend mode
By default, re-running the script replaces the collection. Use --append to add to an existing collection:
# First embed
python embed_codebase.py ./src main-code --preset typescript
# Add more files later
python embed_codebase.py ./docs main-code --extensions .md --appendMulti-Codebase Usage
Use separate collections for each codebase to keep search results scoped and relevant:
# Project A
python embed_codebase.py ~/projects/api-server api-server --preset python
# Project B
python embed_codebase.py ~/projects/web-app web-app --preset web
# Project C
python embed_codebase.py ~/projects/data-pipeline data-pipeline --preset pythonWhen configuring the MCP server:
Without
COLLECTION_NAME: You must specify the collection per query. This is ideal when one MCP server serves multiple projects.With
COLLECTION_NAME: A default collection is used automatically. Set this per-project if your MCP client supports project-scoped configuration.
Configuring Claude Code
Add the MCP server
claude mcp add qdrant -s user \
-e QDRANT_URL="http://localhost:6333" \
-e OLLAMA_URL="http://localhost:11434" \
-e EMBEDDING_MODEL="bge-m3" \
-- uv run --with fastmcp --with qdrant-client --with httpx \
python /path/to/qdrant-mcp-ollama/server.pyReplace /path/to/qdrant-mcp-ollama/ with the actual path where you cloned this repo.
With a default collection
If you primarily work on one project:
claude mcp add qdrant -s user \
-e QDRANT_URL="http://localhost:6333" \
-e OLLAMA_URL="http://localhost:11434" \
-e EMBEDDING_MODEL="bge-m3" \
-e COLLECTION_NAME="my-project" \
-- uv run --with fastmcp --with qdrant-client --with httpx \
python /path/to/qdrant-mcp-ollama/server.pyVerify
claude mcp list
# Should show: qdrant: ... ✓ Connected
claude mcp get qdrant
# Shows full configuration detailsUsage in Claude Code
Once configured, Claude Code can use these tools:
qdrant_store— Store information: "Store this authentication pattern in Qdrant"qdrant_find— Search: "Find code related to database migrations"
For multi-collection setups (no default), specify the collection:
"Search the
api-servercollection for rate limiting logic"
Configuring Kilo Code (VS Code Extension)
Kilo Code is a VS Code extension with built-in MCP support.
Option 1: Manual MCP configuration
Open Kilo Code settings in VS Code
Navigate to MCP Servers configuration
Add a new server with:
Field | Value |
Name |
|
Command |
|
Arguments |
|
Set environment variables:
Variable | Value |
|
|
|
|
|
|
| Your project collection name (e.g., |
Option 2: VS Code settings.json
Add to your VS Code settings.json (Ctrl+Shift+P > Preferences: Open User Settings (JSON)):
{
"kilocode.mcpServers": {
"qdrant": {
"command": "uv",
"args": [
"run", "--with", "fastmcp", "--with", "qdrant-client", "--with", "httpx",
"python", "/path/to/qdrant-mcp-ollama/server.py"
],
"env": {
"QDRANT_URL": "http://localhost:6333",
"OLLAMA_URL": "http://localhost:11434",
"EMBEDDING_MODEL": "bge-m3",
"COLLECTION_NAME": "my-project"
}
}
}
}Per-project setup in Kilo Code
For multi-codebase setups, configure Kilo Code at project scope (not global) with a project-specific COLLECTION_NAME. This way each workspace searches only its own codebase.
Configuring Other MCP Clients
Cursor / Windsurf
Run the server with SSE transport for remote-capable clients:
QDRANT_URL="http://localhost:6333" \
OLLAMA_URL="http://localhost:11434" \
EMBEDDING_MODEL="bge-m3" \
FASTMCP_PORT=8000 \
uv run --with fastmcp --with qdrant-client --with httpx \
python server.py --transport sseThen in Cursor/Windsurf MCP settings, connect to: http://localhost:8000/sse
Generic MCP client (stdio)
The default transport is stdio. Any MCP client that supports stdio can use this server by running:
uv run --with fastmcp --with qdrant-client --with httpx python server.pyConfiguration Reference
MCP Server Environment Variables
Variable | Description | Default |
| Qdrant server URL |
|
| API key for Qdrant Cloud | None |
| Ollama server URL |
|
| Ollama embedding model name |
|
| Default collection (empty = must specify per call) | (empty) |
Choosing an Embedding Model
All models below are available via ollama pull <model>:
Model | Dimensions | Size | Speed | Quality | Best for |
| 1024 | 1.2 GB | Moderate | High | General purpose, multilingual |
| 768 | 274 MB | Fast | Good | Lightweight, English-focused |
| 1024 | 670 MB | Moderate | High | English, high quality |
| 1024 | 1.2 GB | Moderate | Very High | Best quality, English |
| 384 | 46 MB | Very Fast | Fair | Minimal resources |
Recommendation: Start with bge-m3. It handles code well, supports multilingual content (comments in any language), and balances quality with speed.
Important: The embedding model used to index a collection must match the model used for queries. If you re-embed with a different model, delete and recreate the collection.
GPU Utilization
Larger models use more GPU. If your GPU is underutilized:
Switch from
nomic-embed-text(274 MB) tobge-m3(1.2 GB) or largerThe embedding script sends all texts in a single batch to maximize GPU saturation
For individual queries (via
qdrant_find), GPU spikes are brief and normal — embedding a single query takes milliseconds
Check GPU usage: nvidia-smi (NVIDIA) or rocm-smi (AMD)
MCP Tools
qdrant_store
Store information in the Qdrant database.
Parameter | Type | Required | Description |
| string | Yes | Text to store and make searchable |
| string | If no default set | Target collection |
| dict | No | Optional metadata to attach |
qdrant_find
Search for relevant information using semantic similarity.
Parameter | Type | Required | Description |
| string | Yes | Natural language search query |
| string | If no default set | Collection to search |
| int | No | Max results to return (default: 5) |
Troubleshooting
"Connection closed" / MCP server won't start
Is Ollama running? Check with
ollama list. Start it withollama serveif needed.Is the embedding model pulled? Run
ollama pull bge-m3.Is Qdrant running? Check with
docker ps --filter name=qdrant-server.
"Collection does not exist"
The collection is created by the embedding script or on first qdrant_store call. Either:
Run
embed_codebase.pyto index your codebase firstOr store something with
qdrant_storeto auto-create the collection
Dimension mismatch errors
This happens when the collection was created with one embedding model but you're querying with another. Fix:
Delete the collection: visit
http://localhost:6333/dashboardRe-embed with the correct model
Ensure
EMBEDDING_MODELin the MCP server config matches what you used for embedding
"Storage folder is already accessed by another instance"
This error comes from the official mcp-server-qdrant using local mode (QDRANT_LOCAL_PATH). This project avoids that by connecting to a Qdrant server via URL. Make sure you're not running both servers pointing to the same local path.
Slow embedding / low GPU utilization
Use a larger model:
bge-m3(1.2 GB) instead ofnomic-embed-text(274 MB)The embedding script sends all texts in one batch — if you have thousands of chunks, this maximizes GPU usage
For very large codebases (10,000+ files), consider splitting into multiple runs per directory
License
Apache License 2.0 — see LICENSE.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Tools
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables semantic code search across codebases using Qdrant vector database and OpenAI embeddings, allowing users to find code by meaning rather than just keywords through natural language queries.2MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to index and search codebases using semantic search powered by multiple embedding providers (OpenAI, VoyageAI, Gemini, Ollama) and vector database storage.
- FlicenseNot gradedqualityDmaintenanceEnables semantic code search across multi-language codebases using natural language queries, integrated with Qdrant vector database for fast, cached retrieval.1
- AlicenseNot gradedqualityFmaintenanceIndexes codebases into Qdrant for semantic search, enabling AI assistants to find relevant code by meaning without re-exploring the repo.MIT
Related MCP Connectors
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…
Search your knowledge bases from any AI assistant using hybrid RAG.
Code intelligence for coding agents: semantic, AST, graph, and full-text search. 279+ languages.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/michal7kw/qdrant-mcp-ollama'
If you have feedback or need assistance with the MCP directory API, please join our Discord server