Per-project collections are what make the search usable across a machine full of repositories, but they depend on the server knowing your actual working directory, which MCP clients do not always pass through. Check the reported project context before you conclude the index is empty. The GitHub half is a separate, larger surface bolted onto the same retrieval engine.
A context-aware RAG server backed by Qdrant. It detects the current project from markers such as .git or package.json and keeps each project's index in its own collection, so a search from one repository does not surface results from another unless you ask it to.
- `index_directory` indexes a whole tree with glob patterns and exclusions; `index_code` and `index_config` take a single file
- `search_code` filters by language and chunk type, and `search_config` filters by file type and config path
- Hybrid search combines semantic similarity with BM25 keyword matching, and results carry their own vector_score and bm25_score
- AST-based chunking keeps whole functions and classes intact for Python, JavaScript/TypeScript, Shell and Go
- `get_context` reports which project the server thinks you are in — the first thing to check when results look wrong
- A GitHub side: 29 tools covering issues, sub-issues and Projects V2, including `github_list_projects`, `github_get_project_status` and `github_smart_add_project_item`
The Python package `qdrant-rag-mcp`, version 0.3.4.post6. Python 3.10+ with uv, Docker for Qdrant itself, and the repository's `./scripts/setup.sh` then `./install_global.sh`. The server needs to know your real working directory: set `MCP_CLIENT_CWD` in the client config, pass `--client-cwd`, or export it at the start of the session. `QDRANT_RAG_AUTO_INDEX=true` keeps the index current as files change.
Build from source — clone the repository and build it, then point your client at the binary
