Embedding a large repository costs money per token, and this tells you the file count, the token estimate and the projected spend before it starts. Everything else follows from taking that seriously: incremental indexing so you pay once per change rather than once per run, batch and concurrency controls for staying under rate limits, and a background watcher so the index does not silently drift from the code. Two moving parts to keep running — Qdrant and the indexer — which is the trade for search that understands what code does.
A code-search server backed by a Qdrant vector database. A separate indexer walks your repository, embeds the files and stores them in Qdrant; the MCP server then answers meaning-based queries against that index, and a background process re-indexes files as they change.
- Search by meaning rather than keyword — find all authentication code, or what is similar to a given class, without knowing the identifiers
- Incremental indexing so only changed files are re-embedded, plus a force option for a full rebuild
- A background indexer controlled with `qdrant-control start`, `status` and `stop`, keeping the index current as you work
- Filtering that respects `.gitignore`, with `INCLUDE_PATTERNS` and `EXCLUDE_PATTERNS` for the rest
- A cost estimate before you commit: `qdrant-indexer --dry-run` reports the file count, estimated tokens and estimated spend
- Throughput controls — `--batch-size`, `--max-concurrent` and `--delay` — for staying inside API rate limits
- A Python API for the same operations, and pluggable file processors for formats the default handling misses
An OpenAI API key as `OPENAI_API_KEY`, since embeddings are generated per file, and a Qdrant instance — Docker locally on `http://localhost:6333`, or Qdrant Cloud with `QDRANT_URL` and `QDRANT_API_KEY`. Node.js 18+ and Python 3.8+. Install with `pip install qdrant-mcp-server`, which provides `qdrant-indexer`, `qdrant-control` and `qdrant-mcp`. Tunables include `QDRANT_COLLECTION_NAME` defaulting to `codebase`, `MAX_FILE_SIZE` at 1048576, `BATCH_SIZE` at 10, and `EMBEDDING_MODEL` defaulting to `text-embedding-3-small`. MIT licensed.
