Fast indexed code search for AI agents, powered by Sourcegraph Zoekt.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
An MCP server that exposes Sourcegraph Zoekt code search to any MCP-capable AI agent β Claude Code, Claude Desktop, Cursor, MCP Inspector, etc. β so the agent can run fast, indexed, regex/symbol-aware code search over your repositories regardless of the language you're working in.
zoekt-webserver you run yourself via the Docker
Compose file attached to every
GitHub release β
or point the MCP server at any existing zoekt-webserver you have
lying around.search_code, list_repos, get_file.Getting from "nothing installed" to "Claude can search my code" is three steps: install the MCP server, run the backend, wire it into your client. No git clone required in any of them.
You need exactly one of these to run the MCP server, plus Docker for the backend:
uv on your PATH β for the
uvx zoekt-mcp install path. MCP clients spawn the server via
uvx, so which uv must resolve in whatever shell your client
launches processes in. Install once per machine:
The installer drops uv and uvx into ~/.local/bin/ (Linux/macOS)
or %USERPROFILE%\.local\bin\ (Windows). Verify with uv --version.
β¦or Docker β for the docker run ghcr.io/radiovisual/zoekt-mcp
install path. Any recent Docker Desktop or engine works. You need
Docker anyway for the backend, so this path saves you from
installing uv if you don't already have it.
And for the backend:
zoekt-webserver and the
one-shot indexer via the compose file attached to every
release.The zoekt backend is a regular Docker Compose stack you run yourself β zoekt-mcp does not lifecycle-manage it. Grab the compose file and helper script from the latest GitHub release and bring them up against whatever directory holds your code:
So if /home/you/code looks like this:
β¦zoekt indexes all three repos in one pass and you can scope any
query with repo:project-a β or leave repo: off to search across
everything at once. See
Indexing multiple codebases below for
more on the one-server-many-repos model.
Sanity check:
You should see each subdirectory of ZOEKT_REPOS_DIR listed as a
zoekt repo.
On macOS / Windows Docker Desktop, the path you pick must be under an allowed file-sharing root (check Docker Desktop β Settings β Resources β File Sharing). On Linux there's no such restriction.
Just want to try it without touching your real code directory? Clone the repo and use the in-tree test fixture:
./tests/fixtures/up.shβ see Development at the bottom of this file.
Two install paths β pick whichever matches your existing tooling. Both end up running the same versioned server binary; the only difference is how it's launched.
uvx (recommended if you already have uv)uvx downloads the latest zoekt-mcp from PyPI on first
invocation, caches it, and spawns it. No permanent install, no venv
to manage.
Claude Code (~/.claude.json):
Or via the claude CLI:
Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
Cursor (~/.cursor/mcp.json or .cursor/mcp.json in a project):
To pin a specific version instead of always using the latest:
If you already have Docker running for the backend and would rather
not install uv, use the container image instead. MCP clients
spawn it over stdio exactly like the uvx path.
Claude Code / Claude Desktop / Cursor:
On Docker Desktop (macOS/Windows) the host isn't reachable via
localhost from inside a container. Drop --network=host and use
host.docker.internal instead:
To pin a specific version, replace :latest with the semver tag
(e.g. :0.1.0). The image is multi-arch (linux/amd64 +
linux/arm64), so it works on Apple Silicon and ARM Linux hosts
without extra flags.
Restart Claude Code / Claude Desktop / Cursor and the three tools
(search_code, list_repos, get_file) should appear. Try
something like "where is getVideoId defined?" and watch it call
search_code("sym:getVideoId").
One zoekt-mcp server handles as many repos as you want β that's
the default. Every top-level subdirectory of ZOEKT_REPOS_DIR becomes
a separate searchable repo in one shared index. The search_code
tool can scope to a subset with repo:NAME (regex matched against
repo names) or leave repo: off to search across everything.
If your projects live under different parent directories (e.g.
~/work/ and ~/personal/), the simplest fix is to create a single
"index root" directory with symlinks pointing at each project and set
ZOEKT_REPOS_DIR to that index root. One server, one config, all
repos searchable.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/zoekt-mcp)<a href="https://allmcps.com/mcp/zoekt-mcp"><img src="https://allmcps.com/api/badge/zoekt-mcp?style=directory" alt="Zoekt MCP on AllMCPs" /></a>