zig-mcp
Zig ZLS MCP for Claude Code ๐ค
Documentation
zig-mcp
MCP server for Zig that connects AI coding assistants to ZLS via the Language Server Protocol.
Works with Claude Code, Cursor, Windsurf, and any MCP-compatible client.
AI assistant zig-mcp ZLS
|
zig build / test / checkRequirements
Install
Claude Code plugin (recommended)
Install directly from the Claude Code interface โ no manual build needed:
# 1. Add the marketplace
/plugin marketplace add nzrsky/zig-mcp
# 2. Install the plugin
/plugin install zig-mcp@zigOr as a one-liner from the terminal:
claude plugin marketplace add nzrsky/zig-mcp && claude plugin install zig-mcp@zigThe binary is built automatically on first use. Just make sure `zig` and `zls` are in your PATH.
Manual build
git clone https://github.com/nzrsky/zig-mcp.git
cd zig-mcp
zig build -Doptimize=ReleaseFastBinary is at `zig-out/bin/zig-mcp`.
Setup (manual install only)
If you installed via the plugin system, skip this section โ everything is configured automatically.
Claude Code
# add globally
claude mcp add zig-mcp -- /absolute/path/to/zig-mcp --workspace /path/to/your/zig/project
# add for current project only
claude mcp add --scope project zig-mcp -- /absolute/path/to/zig-mcp --workspace /path/to/your/zig/projectOr edit `~/.claude/mcp_servers.json`:
{
"mcpServers": {
"zig-mcp": {
"command": "/absolute/path/to/zig-mcp",
"args": ["--workspace", "/path/to/your/zig/project"]
}
}
}> If you omit `--workspace`, zig-mcp uses the current working directory.
Cursor
Add to `.cursor/mcp.json` in your project:
{
"mcpServers": {
"zig-mcp": {
"command": "/absolute/path/to/zig-mcp",
"args": ["--workspace", "/path/to/your/zig/project"]
}
}
}Windsurf
Add to `~/.codeium/windsurf/mcp_config.json`:
{
"mcpServers": {
"zig-mcp": {
"command": "/absolute/path/to/zig-mcp",
"args": ["--workspace", "/path/to/your/zig/project"]
}
}
}Options
--workspace, -w Project root directory (default: cwd)
--zls-path Path to ZLS binary (default: auto-detect from PATH)
--help, -h Show help
--version Show versionTools
All of these answer from ZLS's semantic model โ the part a shell and a text
search cannot reach.
| Tool | What it knows that grep does not |
|---|---|
| `zig_definition` | The one true declaration, followed through imports and aliases. Takes `symbol` or `file`+`line`+`character` |
| `zig_references` | Real usages, scope-aware; skips same-named identifiers, comments and strings. `symbol` mode also searches through re-exports |
| `zig_hover` | The type after comptime evaluation and inference โ invisible in the source text |
| `zig_diagnostics` | Errors for one file without building the project, re-synced against disk first |
| `zig_workspace_symbols` | Declarations by name, not every line mentioning it |
| `zig_document_symbols` | A file's outline: declarations, kinds, nesting |
| `zig_completion` | What can legally follow at a position, with types |
| `zig_signature_help` | The real signature, comptime and generic parameters included |
| `zig_rename` | Which files a rename touches, scope-aware |
| `zig_code_action` | Quick fixes ZLS offers for a range |
| `zig_inlay_hints` | Every inferred type in a file at once โ nothing of this is in the source text |
| `zig_type_definition` | The declaration of a value's *type*, not of the value |
| `zig_ast_query` | Code by shape: empty `catch {}`, `catch unreachable`, `undefined` initializers, `unreachable`, `@panic`. Matched over the syntax tree, so comments and string literals never match and multi-line forms always do |
| `zig_unused_private` | Private declarations nothing refers to โ exact, because a non-`pub` name cannot escape its file |
What is deliberately absent
There is no `zig_build`, `zig_test`, `zig_format`, `zig_version`, `zig_check`
or `zig_manage`. They used to exist and wrapped `zig build`, `zig test`,
`zig fmt`, `zig version`, `zig ast-check` and `zvm` โ and a wrapper loses to
the shell it wraps: no pipes, no redirection, no working
directory of its own. Session transcripts settle it: 526 `zig build`
invocations through the shell, zero calls to the tool. Run those with your
shell.
How it works
zig-mcp spawns ZLS as a child process and talks to it over stdin/stdout using the LSP protocol (Content-Length framing). On the other side, it speaks MCP (newline-delimited JSON-RPC) to the AI assistant.
Three threads:
- main -- reads MCP requests, dispatches tool calls, writes responses
- reader -- reads LSP responses from ZLS, correlates by request ID
- stderr -- forwards ZLS stderr to the server log
If ZLS crashes, zig-mcp automatically restarts it and re-opens all tracked documents.
Files are opened in ZLS lazily on first access, and re-synced (`didChange`) whenever their contents change on disk -- no need to manage document state manually.
Development
# build
zig build
# run tests (162 unit tests, including a fake-ZLS harness)
zig build test
# quality gates: lint, coverage, dead code, mutants
make lint cov deadcode mutants
# run manually
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"capabilities":{}}}' | \
zig-out/bin/zig-mcp --workspace . 2>/dev/nullLicense
MIT
Frequently asked questions
What is zig-mcp?
zig-mcp is Zig ZLS MCP for Claude Code ๐ค
How do I install zig-mcp?
Open the GitHub repository and follow its README. Most MCP servers are added to your client's MCP config, then called by your agent.
Is zig-mcp open source?
Yes โ it is hosted on GitHub at https://github.com/nzrsky/zig-mcp and has 6 stars.
Related MCP tools
A desktop MCP client designed as a tool unitary utility integration, accelerating AI adoption through the Model Context Protocol (MCP) and enabling cross-vendor LLM API orchestration.
Unity MCP acts as a bridge between AI assistants and your Unity Editor. Give your LLM tools to manage assets, control scenes, edit scripts, and automate tasks within Unity.
The go-to web for your AI coding agent โ local-first search, fetch, crawl & research over MCP. No API keys, no cloud, $0/query. Public beta.
AI Skills, MCP Tools, and CLI for Unity Engine. Full AI develop and test loop. Use cli for quick setup. Efficient token usage, advanced tools. Any C# method may be turned into a tool by a single line. Works with Claude Code, Gemini, Copilot, Cursor and any other absolutely for free.
Control Gmail, Google Calendar, Docs, Sheets, Slides, Chat, Forms, Tasks, Search & Drive with AI - Comprehensive Google Workspace MCP Server & CLI Tool
Universal AI context generator. Saves thousands of tokens per conversation in Claude Code, Cursor, Copilot, Codex, and more.
Run your own MCP server? See who uses it and what to fix.
Measure it with TrackMCP