
Workspace-Qdrant-MCP
β 2from ChrisGVE
Code knowledge and metadata with live update, knowledge library, semantic and vector searches
workspace-qdrant-mcp
Project-scoped vector database for AI assistants, providing hybrid semantic + keyword search with automatic project detection.
π§ v0.2.0 rebuild in progress
workspace-qdrant-mcp is being rebuilt from the ground up in preparation for v0.2.0 β a unified storage model, better search quality, more reliable file watching, and a cleaner architecture, with a no-re-index migration for existing users. Once the design is locked (targeted early July) we'll open the work to outside contributors. See the Roadmap for the top-line plan.
Features
- Hybrid Search - Combines semantic similarity with keyword matching using Reciprocal Rank Fusion
- Project Detection - Automatic Git repository awareness and project-scoped collections
- 7 MCP Tools - search, retrieve, rules, store, grep, list, embedding
- Code Intelligence - Tree-sitter semantic chunking + LSP integration for active projects
- Code Graph - Relationship graph with algorithms (PageRank, community detection, betweenness centrality)
- High-Performance CLI - Rust-based
wqmcommand-line tool - Background Daemon -
memexdfor continuous file monitoring and processing
workspace-qdrant
The workspace-qdrant MCP server provides codebase-aware search, a library knowledge base, a scratchpad for accumulated insights, and persistent behavioral rules. The tool schemas are self-describing; these instructions cover when and how to use them.
Primary Search and Knowledge Base
Use workspace-qdrant first whenever context is uncertain β first session on a project, returning after a significant gap, or exploring an unfamiliar subsystem. It is faster and more accurate than walking files manually, and it retrieves findings from prior sessions that would otherwise be lost.
Three-step protocol:
- Search with
workspace-qdrant(search,grep,list, orretrieve) - Fall back to
Grep,Glob,WebSearchonly when workspace-qdrant is insufficient or unavailable - Store any new findings, analysis, or design rationale via
storeso they are retrievable in future sessions
When a fresh handover or strong prior context already covers what you need, skip the exploratory search β but always store new findings at the end.
Collections and their purpose:
projectsβ indexed codebase; usescope="project"(current project) orscope="all"(across all projects)librariesβ external reference docs, API specs, third-party documentation; add viastorewithcollection="libraries"and search withincludeLibraries=truescratchpadβ analysis, design rationale, research transcripts, architectural insights; complements session handovers by building a growing, semantically searchable knowledge layer across sessionsrulesβ persistent behavioral rules; load at session start viarulesβaction="list"
Practical notes:
- Use
grepfor exact strings or regex;listwithformat="summary"to explore project structure - Store external docs or specs into
librariesso they are searchable alongside code - Use the scratchpad to record why decisions were made, not just what was done β future sessions can retrieve the reasoning
Sub-Agents
Sub-agents start with only the prompt you give them β they have no session history or handover context. They must always use workspace-qdrant first for any code exploration, without exception. Include this verbatim in every agent prompt:
"You have no prior context about this codebase. Use
workspace-qdrantas your mandatory first tool for ALL code searches β symbols, functions, architecture, patterns, prior findings. Usesearch,grep,list, orretrievebefore touching any file with Read/Grep/Glob. Store any new findings, analysis, or design rationale viastore(scratchpad for insights, libraries for reference docs) so they persist for future sessions."
Project Registration
At session start, check whether the current project is registered with workspace-qdrant. If it is not, ask the user whether they want to register it (do not register silently). Once registered, the daemon handles file watching and ingestion automatically β no further action is needed.
Behavioral Rules
The rules tool manages persistent rules that are injected into context across sessions. Rules are user-initiated only β add rules when the user explicitly instructs you to, never autonomously. Use action="list" at session start to load active rules.
Issue Reporting
workspace-qdrant is under active development. If you encounter errors, unexpected behavior, or limitations with any workspace-qdrant tool, report them as GitHub issues at https://github.com/ChrisGVE/workspace-qdrant-mcp/issues using the gh CLI.
## MCP Tools
| Tool | Purpose |
|------|---------|
| `search` | Hybrid semantic + keyword search across indexed content |
| `retrieve` | Direct document lookup by ID or metadata filter |
| `rules` | Manage persistent behavioral rules |
| `store` | Store content, register projects, save notes |
| `grep` | Exact substring or regex search using FTS5 |
| `list` | List project files and folder structure |
See [MCP Tools Reference](https://github.com/ChrisGVE/workspace-qdrant-mcp/blob/HEAD/docs/reference/mcp-tools.md) for parameters and examples.
## Collections
| Collection | Purpose | Isolation |
|------------|---------|-----------|
| `projects` | Project code and documentation | Multi-tenant by `tenant_id` |
| `libraries` | Reference documentation (books, papers, docs) | Multi-tenant by `library_name` |
| `rules` | Behavioral rules and preferences | Multi-tenant by `project_id` |
| `scratchpad` | Temporary working storage | Per-session |
## CLI Reference
```bash
# Service management
wqm service start # Start background daemon
wqm service status # Check daemon status
wqm status health # System health check
# Search and content
wqm search "query" # Search collections
wqm ingest file path.py # Ingest a file
wqm rules list # List behavioral rules
# Project and library
wqm project list # List registered projects
wqm project watch pause # Pause file watchers
wqm library list # List libraries
wqm tags list # List tags with counts
# Administration
wqm admin collections list # List collections
wqm admin rebuild all # Rebuild all indexes
wqm admin backup create # Backup snapshots
wqm admin stats overview # Search analytics
# Code graph
wqm graph stats --tenant <t> # Node/edge counts
wqm graph query --node-id <id> --tenant <t> --hops 2 # Related nodes
wqm graph impact --symbol <name> --tenant <t> # Impact analysis
wqm graph pagerank --tenant <t> --top-k 20 # PageRank centrality
# Setup
wqm init completions zsh # Shell completions
wqm init man install # Install man pages
wqm init hooks install # Install Claude Code hooks (respects CLAUDE_CONFIG_DIR)
# Queue and monitoring
wqm queue stats # Queue statistics
```
See [CLI Reference](https://github.com/ChrisGVE/workspace-qdrant-mcp/blob/HEAD/docs/reference/cli.md) for complete documentation.
## Observability
The daemon exposes metrics and traces. Both are disabled by default.
### Prometheus (`/metrics`, pull)
Enable via config or env var, then scrape:
```yaml
# in the daemon config
observability:
telemetry:
prometheus:
enabled: true
port: 9464
bind: 0.0.0.0
```
or:
```bash
WQM_PROMETHEUS_ENABLED=true WQM_PROMETHEUS_PORT=9464 memexd --foreground
curl http://localhost:9464/metrics | head
```
The `--metrics-port <N>` CLI flag is a shortcut that forces
`enabled=true` and overrides the port. See
`docs/observability/prometheus-scrape-example.yaml` for a
`scrape_configs` snippet and
`docs/observability/memexd-telemetry-dashboard.json` for a Grafana 10
dashboard.
### OTLP traces (push)
`#[tracing::instrument]` spans on the queue processor, watcher, gRPC,
embedding, and Qdrant paths are exported over OTLP/gRPC when:
```yaml
observability:
telemetry:
service_name: memexd
otlp:
enabled: true
endpoint: http://collector.example:4317
protocol: grpc # http/protobuf is also recognized (logs a warning)
sample_rate: 0.1
```
Standard OpenTelemetry env vars are honored: `OTEL_SERVICE_NAME`,
`OTEL_EXPORTER_OTLP_ENDPOINT`, `OTEL_EXPORTER_OTLP_PROTOCOL`,
`OTEL_EXPORTER_OTLP_HEADERS`, `OTEL_TRACES_SAMPLER_ARG`.
OTLP metrics export is **not** currently implemented β Prometheus is
the canonical metrics surface.
## Architecture
```
+-----------------+
| Claude/Client |
+--------+--------+
|
+--------v--------+
| MCP Server | (TypeScript)
+--------+--------+
|
+--------------+--------------+
| |
+--------v--------+ +--------v--------+
| Rust Daemon | | Qdrant |
| (memexd) | | Vector Database |
+--------+--------+ +-----------------+
|
+--------v--------+
| File Watcher |
| Code Graph |
| Embeddings |
+-----------------+
```
The Rust daemon handles file watching, embedding generation, code graph extraction, and queue processing. All writes route through the daemon for consistency.
## Documentation
**User guides:**
- [Quick Start](https://github.com/ChrisGVE/workspace-qdrant-mcp/blob/HEAD/docs/quick-start.md) β get running in 5 minutes
- [User Manual](https://github.com/ChrisGVE/workspace-qdrant-mcp/blob/HEAD/docs/user-manual.md) β full usage guide
- [LLM Integration](https://github.com/ChrisGVE/workspace-qdrant-mcp/blob/HEAD/docs/reference/mcp-best-practices.md) β best practices for Claude
**Reference:**
- [Installation](https://github.com/ChrisGVE/workspace-qdrant-mcp/blob/HEAD/docs/reference/installation.md) | [Windows](https://github.com/ChrisGVE/workspace-qdrant-mcp/blob/HEAD/docs/reference/windows-installation.md)
- [CLI Reference](https://github.com/ChrisGVE/workspace-qdrant-mcp/blob/HEAD/docs/reference/cli.md) β all `wqm` commands
- [MCP Tools](https://github.com/ChrisGVE/workspace-qdrant-mcp/blob/HEAD/docs/reference/mcp-tools.md) β tool parameters and examples
- [Configuration](https://github.com/ChrisGVE/workspace-qdrant-mcp/blob/HEAD/docs/reference/configuration.md) β all options and defaults
- [Architecture](https://github.com/ChrisGVE/workspace-qdrant-mcp/blob/HEAD/docs/reference/architecture.md) β component overview
See the [Documentation Index](https://github.com/ChrisGVE/workspace-qdrant-mcp/blob/HEAD/docs/INDEX.md) for specifications, ADRs, and developer resources.
## Development
```bash
# Rust daemon, CLI, and MCP server (from src/rust/)
# Builds memexd (daemon), wqm (CLI), and workspace-qdrant-mcp (MCP server)
cargo build --release
cargo test
# Graph benchmarks
cargo bench --package workspace-qdrant-core --bench graph_bench
# Binaries output to:
# - target/release/wqm
# - target/release/memexd
```brew install ChrisGVE/tap/workspace-qdrant
brew services start workspace-qdrantBefore it works, you'll need: QDRANT_URL
Quick Start
Prerequisites
- Qdrant -
docker run -d -p 6333:6333 -v qdrant_storage:/qdrant/storage qdrant/qdrant - C compiler - Required for compiling Tree-sitter grammars on first use. Tree-sitter grammars are distributed as C source and compiled locally.
- macOS:
xcode-select --install(Xcode Command Line Tools) - Linux:
apt install build-essential(Debian/Ubuntu) ordnf groupinstall "Development Tools"(Fedora) - Windows: Install Visual Studio Build Tools with C++ workload
- macOS:
- Clang/LLVM - Required only to build
memexdfrom source, for the LadybugDB C++ core (the default graph backend). Pre-built binaries (Homebrew, release artifacts) do not need it.- macOS: Xcode Command Line Tools include Clang (
xcode-select --install) - Linux:
apt install clang libclang-dev(Debian/Ubuntu) ordnf install clang(Fedora) - Alternative: build without the C++ toolchain using the SQLite-only backend β
cargo build --no-default-features --features sqlite
- macOS: Xcode Command Line Tools include Clang (
Install
Option 1: Homebrew (Recommended β macOS & Linux)
brew install ChrisGVE/tap/workspace-qdrant
brew services start workspace-qdrantOption 2: Pre-built Binaries
# macOS / Linux
curl -fsSL https://raw.githubusercontent.com/ChrisGVE/workspace-qdrant-mcp/main/scripts/download-install.sh | bash
# Windows (PowerShell)
irm https://raw.githubusercontent.com/ChrisGVE/workspace-qdrant-mcp/main/scripts/download-install.ps1 | iexInstalls wqm, memexd, and workspace-qdrant-mcp to ~/.local/bin (Linux/macOS) or %LOCALAPPDATA%\wqm\bin (Windows).
Option 3: Build from Source
git clone https://github.com/ChrisGVE/workspace-qdrant-mcp.git
cd workspace-qdrant-mcp
./install.shSee Installation Reference for detailed instructions and platform-specific notes. For Windows, see the Windows Installation Guide.
Configure MCP
Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"workspace-qdrant-mcp": {
"command": "workspace-qdrant-mcp",
"env": {
"QDRANT_URL": "http://localhost:6333"
}
}
}
}Claude Code:
claude mcp add workspace-qdrant-mcp -- workspace-qdrant-mcpVerify
wqm --version
wqm status healthCLAUDE.md Integration
Add the following to your project's CLAUDE.md (or your global ~/.claude/CLAUDE.md) so Claude Code uses workspace-qdrant proactively:
## Configuration
### Environment Variables
| Variable | Default | Description |
|----------|---------|-------------|
| `QDRANT_URL` | `http://localhost:6333` | Qdrant server URL |
| `QDRANT_API_KEY` | - | API key (required for Qdrant Cloud) |
| `FASTEMBED_MODEL` | `all-MiniLM-L6-v2` | Embedding model |
### Claude Code Integration
`wqm init hooks` reads and writes Claude Code's `settings.json`. The
location is resolved from:
| Variable | Default | Description |
|----------|---------|-------------|
| `CLAUDE_CONFIG_DIR` | `~/.claude` | Claude Code config directory used by `wqm init hooks install/uninstall/status`. Set this for Claude Code Enterprise or any non-default install. |
Example β Claude Code Enterprise:
```bash
export CLAUDE_CONFIG_DIR=~/.config/claude/claude-ent
wqm init hooks install
```No common issues documented yet. If you hit a problem, the repository's GitHub Issues page is the best place to look.
Licensed under Apache-2.0β you can use, modify, and redistribute it under that license's terms.
View the full license file on GitHub β