A query against a repository that is not ready comes back as `index_unavailable` with a safe fallback of native search and a remediation to follow — so a stale index degrades into ordinary grep rather than into confident wrong answers. Check readiness with `get_status` before you rely on results, and note that only the tracked default branch is indexed automatically.
A local-first search index over your repositories, exposed to coding assistants over MCP. Indexing happens on your machine and the code never leaves it; the assistant searches instead of reading files, which is both faster and cheaper in tokens.
- `symbol_lookup` — exact class or function lookup, benchmarked under 100ms on indexed repos
- `search_code` — pattern, keyword or semantic search, benchmarked under 500ms
- `get_status` — repository readiness, so you know whether to trust an indexed answer
- `reindex` — rebuild the index on demand after a large change
- One server across many unrelated repositories, with one registered worktree per repository
- Optional semantic search over embeddings, and optional index sharing through GitHub Artifacts with sensitive files filtered on export
Run the published container image, or native Python with `uv sync --locked`. Basic search needs no API key; semantic search needs `SEMANTIC_SEARCH_ENABLED` plus a `VOYAGE_API_KEY` or a local endpoint. `MCP_ALLOWED_ROOTS` bounds which paths the tools may touch, `MCP_CLIENT_SECRET` guards the local stdio handshake, and `MCP_AUTO_INDEX` can be set to false on very large repositories so you index on demand.
One command plus a key — docker run -it -v $(pwd):/workspace ghcr.io/consiliency/code-index-mcp:v1.4.0, then supply credentials
