Skip to main content
Glama
README.mdβ€’16.1 kB
# ZigNet **MCP Server for Zig** β€” Intelligent code analysis, validation, and documentation powered by a fine-tuned LLM ZigNet integrates with Claude (and other MCP-compatible LLMs) to provide real-time Zig code analysis without leaving your chat interface. --- ## 🎯 Features ### MCP Tools <details> <summary><b>πŸ” analyze_zig</b> β€” Syntax and type checking with official Zig compiler</summary> Analyze Zig code for syntax errors, type mismatches, and semantic issues using `zig ast-check`. **Example usage:** ```typescript User: "Analyze this Zig code" Claude: [calls analyze_zig tool] Response: "βœ… Syntax: Valid | Type Check: PASS | Warnings: 0" ``` **Capabilities:** - Lexical analysis (tokenization) - Syntax parsing (AST generation) - Type checking and validation - Semantic error detection - Line/column error reporting </details> <details> <summary><b>✨ compile_zig</b> β€” Format and validate Zig code</summary> Validate and format Zig code using `zig fmt`, generating clean, idiomatic output. **Example:** ```zig // Input (messy) fn add(a:i32,b:i32)i32{return a+b;} // Output (formatted) fn add(a: i32, b: i32) i32 { return a + b; } ``` **Capabilities:** - Code formatting (2-space indentation) - Syntax validation - Best practices enforcement - Preserves semantics </details> <details> <summary><b>πŸ“– get_zig_docs</b> β€” AI-powered documentation lookup (coming soon)</summary> Retrieve Zig documentation and explanations for language features using a fine-tuned LLM. **Example:** ```typescript Query: "comptime" Response: "comptime enables compile-time evaluation in Zig..." ``` **Powered by:** - Fine-tuned Qwen2.5-Coder-7B model - 13,756 examples from Zig 0.13-0.15 - Specialized on advanced Zig idioms (comptime, generics, error handling) </details> <details> <summary><b>πŸ”§ suggest_fix</b> β€” Intelligent error fix suggestions (coming soon)</summary> Get intelligent code fix suggestions for Zig errors using AI-powered analysis. **Example:** ```zig // Error: "Type mismatch: cannot assign string to i32" var x: i32 = "hello"; // Suggestions: // Option 1: var x: []const u8 = "hello"; // If you meant string // Option 2: var x: i32 = 42; // If you meant integer ``` **Features:** - Context-aware suggestions - Multiple fix options - Explanation of the issue - Zig idiom recommendations </details> --- ## πŸ“– Usage ZigNet is an **MCP server** β€” configure it once in your MCP client, then use it naturally in conversation. <details> <summary><b>πŸ–₯️ Claude Desktop</b></summary> **Configuration file location:** - **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json` - **Linux**: `~/.config/Claude/claude_desktop_config.json` - **Windows**: `%APPDATA%\Claude\claude_desktop_config.json` **Add this:** ```json { "mcpServers": { "zignet": { "command": "npx", "args": ["-y", "zignet"] } } } ``` **Then restart Claude Desktop** and start using: ``` You: "Analyze this Zig code for errors" [paste code] Claude: [uses analyze_zig tool] "Found 1 type error: variable 'x' expects i32 but got []const u8" ``` </details> <details> <summary><b>πŸ”§ VS Code (with GitHub Copilot)</b></summary> **Method 1: VS Code Marketplace (coming soon)** 1. Open VS Code Extensions (`Ctrl+Shift+X` / `Cmd+Shift+X`) 2. Search for `@mcp zignet` 3. Click **Install** 4. Restart VS Code **Method 2: Manual configuration (available now)** 1. Install GitHub Copilot extension (if not already installed) 2. Open Copilot settings 3. Add to MCP servers config: ```json { "mcpServers": { "zignet": { "command": "npx", "args": ["-y", "zignet"] } } } ``` **Then restart VS Code** and Copilot will have access to ZigNet tools. </details> ### What happens after configuration? 1. **First use**: `npx` downloads and caches ZigNet automatically 2. **Zig compiler**: Downloads on-demand (supports Zig 0.13, 0.14, 0.15) 3. **Tools available**: `analyze_zig`, `compile_zig` (+ `get_zig_docs`, `suggest_fix` coming soon) 4. **Zero maintenance**: Updates automatically via `npx -y zignet` --- ## βš™οΈ Configuration ### GPU Selection (Multi-GPU Systems) If you have multiple GPUs (e.g., AMD + NVIDIA), you can control which GPU ZigNet uses via environment variables. **Windows (PowerShell):** ```powershell $env:ZIGNET_GPU_DEVICE="0" npx -y zignet ``` **macOS/Linux:** ```bash export ZIGNET_GPU_DEVICE="0" npx -y zignet ``` **VS Code MCP Configuration with GPU selection:** ```json { "mcpServers": { "zignet": { "command": "npx", "args": ["-y", "zignet"], "env": { "ZIGNET_GPU_DEVICE": "0" } } } } ``` **Claude Desktop configuration with GPU selection:** **macOS/Linux** (`~/.config/Claude/claude_desktop_config.json`): ```json { "mcpServers": { "zignet": { "command": "npx", "args": ["-y", "zignet"], "env": { "ZIGNET_GPU_DEVICE": "0" } } } } ``` **Windows** (`%APPDATA%\Claude\claude_desktop_config.json`): ```json { "mcpServers": { "zignet": { "command": "npx", "args": ["-y", "zignet"], "env": { "ZIGNET_GPU_DEVICE": "0" } } } } ``` **GPU Device Values:** - `"0"` - Use first GPU only (e.g., RTX 4090) - `"1"` - Use second GPU only - `"0,1"` - Use both GPUs - Not set - Use all available GPUs (default) **Identify your GPUs:** ```bash # NVIDIA GPUs nvidia-smi # Output shows GPU indices: # GPU 0: NVIDIA RTX 4090 # GPU 1: AMD Radeon 6950XT (won't be used by CUDA anyway) ``` ### Advanced Configuration All configuration options can be set via environment variables: | Variable | Default | Description | |----------|---------|-------------| | `ZIGNET_GPU_DEVICE` | auto | GPU device selection (CUDA_VISIBLE_DEVICES) | | `ZIGNET_GPU_LAYERS` | 35 | Number of model layers on GPU (0=CPU only) | | `ZIGNET_MODEL_PATH` | `~/.zignet/models/...` | Custom model path | | `ZIGNET_MODEL_AUTO_DOWNLOAD` | true | Auto-download model from HuggingFace | | `ZIGNET_CONTEXT_SIZE` | 4096 | LLM context window size | | `ZIGNET_TEMPERATURE` | 0.7 | LLM creativity (0.0-1.0) | | `ZIGNET_TOP_P` | 0.9 | LLM sampling parameter | | `ZIG_SUPPORTED` | 0.13.0,0.14.0,0.15.2 | Supported Zig versions | | `ZIG_DEFAULT` | 0.15.2 | Default Zig version | See [.env.example](./.env.example) for detailed examples. --- ## πŸ—οΈ Architecture ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Claude / MCP Client β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ MCP Protocol (JSON-RPC) β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ ZigNet MCP Server (TypeScript) β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Tool Handlers β”‚ β”‚ β”‚ β”‚ - analyze_zig β”‚ β”‚ β”‚ β”‚ - compile_zig β”‚ β”‚ β”‚ β”‚ - get_zig_docs β”‚ β”‚ β”‚ β”‚ - suggest_fix β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β–Ό β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Zig Compiler Integration β”‚ β”‚ β”‚ β”‚ - zig ast-check (syntax + type validation) β”‚ β”‚ β”‚ β”‚ - zig fmt (official formatter) β”‚ β”‚ β”‚ β”‚ - Auto-detects system Zig installation β”‚ β”‚ β”‚ β”‚ - Falls back to downloading if needed β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β–Ό β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Fine-tuned LLM (Qwen2.5-Coder-7B) β”‚ β”‚ β”‚ β”‚ - Documentation lookup β”‚ β”‚ β”‚ β”‚ - Intelligent suggestions β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` **Why this architecture?** - **Official Zig compiler** (100% accurate, always up-to-date) instead of custom parser - **System integration** (uses existing Zig installation if available) - **LLM-powered suggestions** (get_zig_docs, suggest_fix) for intelligence - **No external API calls** (local inference via node-llama-cpp) - **Fast** (< 100ms for validation, < 2s for LLM suggestions) **Note:** When Zig releases a new version (e.g., 0.16.0), ZigNet will need to re-train the LLM model on updated documentation and examples. --- ## πŸ§ͺ Development Status | Component | Status | Notes | | -------------------- | ---------- | ----------------------------------- | | Zig Compiler Wrapper | βœ… Complete | ast-check + fmt integration | | System Zig Detection | βœ… Complete | Auto-detects installed Zig versions | | Multi-version Cache | βœ… Complete | Downloads Zig 0.13-0.15 on demand | | MCP Server | βœ… Complete | All 4 tools fully implemented | | LLM Fine-tuning | βœ… Complete | Trained on 13,756 Zig examples | | get_zig_docs | βœ… Complete | LLM-powered documentation lookup | | suggest_fix | βœ… Complete | LLM-powered intelligent suggestions | | GGUF Conversion | βœ… Complete | Q4_K_M quantized (4.4GB) | | E2E Testing | βœ… Complete | 27/27 tests passing (8.7s) | | Claude Integration | ⏳ Planned | Final deployment to Claude Desktop | **Current Phase:** Ready for deployment - All core features complete --- ## πŸ§ͺ Testing ### Running Tests ```bash # Run all tests (unit + E2E) pnpm test # Run only E2E tests pnpm test tests/e2e/mcp-integration.test.ts # Run deterministic tests only (no LLM required) SKIP_LLM_TESTS=1 pnpm test tests/e2e # Watch mode for development pnpm test:watch ``` ### Test Coverage **E2E Test Suite:** 27 tests covering all MCP tools | Tool | Tests | Type | Pass Rate | | ------------ | ----- | ------------- | --------- | | analyze_zig | 4 | Deterministic | 100% | | compile_zig | 3 | Deterministic | 100% | | get_zig_docs | 5 | LLM-powered | 100% | | suggest_fix | 5 | LLM-powered | 100% | | Integration | 3 | Mixed | 100% | | Performance | 3 | Stress tests | 100% | | Edge Cases | 4 | Error paths | 100% | **Execution time:** 8.7 seconds (without LLM model, deterministic only) **With LLM model:** ~60-120 seconds (includes model loading + inference) ### Test Behavior - **Deterministic tests** (12 tests): Always run, use Zig compiler directly - **LLM tests** (15 tests): Auto-skip if model not found, graceful degradation - **CI/CD ready**: Runs on GitHub Actions without GPU requirements For detailed testing guide, see [tests/e2e/README.md](./tests/e2e/README.md) --- ## πŸ“¦ Project Structure ``` zignet/ β”œβ”€β”€ src/ β”‚ β”œβ”€β”€ config.ts # Environment-based configuration β”‚ β”œβ”€β”€ mcp-server.ts # MCP protocol handler β”‚ β”œβ”€β”€ zig/ β”‚ β”‚ β”œβ”€β”€ manager.ts # Multi-version Zig download/cache β”‚ β”‚ └── executor.ts # zig ast-check + fmt wrapper β”‚ β”œβ”€β”€ llm/ β”‚ β”‚ β”œβ”€β”€ model-downloader.ts # Auto-download GGUF from HuggingFace β”‚ β”‚ └── session.ts # node-llama-cpp integration β”‚ └── tools/ β”‚ β”œβ”€β”€ analyze.ts # analyze_zig tool (COMPLETE) β”‚ β”œβ”€β”€ compile.ts # compile_zig tool (COMPLETE) β”‚ β”œβ”€β”€ docs.ts # get_zig_docs tool (COMPLETE) β”‚ └── suggest.ts # suggest_fix tool (COMPLETE) β”œβ”€β”€ scripts/ β”‚ β”œβ”€β”€ train-qwen-standard.py # Fine-tuning script (COMPLETE) β”‚ β”œβ”€β”€ scrape-zig-repos.js # Dataset collection β”‚ β”œβ”€β”€ install-zig.js # Zig version installer β”‚ └── test-config.cjs # Config system tests β”œβ”€β”€ data/ β”‚ β”œβ”€β”€ training/ # 13,756 examples (train/val/test) β”‚ └── zig-docs/ # Scraped documentation β”œβ”€β”€ models/ β”‚ └── zignet-qwen-7b/ # Fine-tuned model + LoRA adapters β”œβ”€β”€ tests/ β”‚ β”œβ”€β”€ *.test.ts # Unit tests (lexer, parser, etc.) β”‚ └── e2e/ β”‚ β”œβ”€β”€ mcp-integration.test.ts # 27 E2E tests β”‚ └── README.md # Testing guide β”œβ”€β”€ docs/ β”‚ β”œβ”€β”€ AGENTS.md # Detailed project spec β”‚ β”œβ”€β”€ DEVELOPMENT.md # Development guide β”‚ └── TESTING.md # Testing documentation └── README.md # This file ``` --- ## πŸ€– Model Details **Base Model:** Qwen/Qwen2.5-Coder-7B-Instruct **Fine-tuning:** QLoRA (4-bit) on 13,756 Zig examples **Dataset:** 97% real-world repos (Zig 0.13-0.15), 3% documentation **Training:** RTX 3090 (24GB VRAM), 3 epochs, ~8 hours **Output:** `fulgidus/zignet-qwen2.5-coder-7b` (HuggingFace) **Quantization:** Q4_K_M (~4GB GGUF for node-llama-cpp) **Why Qwen2.5-Coder-7B?** - Best Zig syntax understanding (benchmarked vs 14 models) - Modern idioms (comptime, generics, error handling) - Fast inference (~15-20s per query post-quantization) --- ## πŸ“Š Benchmarks | Model | Pass Rate | Avg Time | Quality | Notes | | ------------------- | --------- | -------- | ------- | -------------------------- | | Qwen2.5-Coder-7B | 100% | 29.58s | ⭐⭐⭐⭐⭐ | **SELECTED** - Best idioms | | DeepSeek-Coder-6.7B | 100% | 27.86s | ⭐⭐⭐⭐⭐ | Didactic, verbose | | Llama3.2-3B | 100% | 12.27s | ⭐⭐⭐⭐ | Good balance | | CodeLlama-7B | 100% | 24.61s | ⭐⭐⭐ | Confuses Zig/Rust | | Qwen2.5-Coder-0.5B | 100% | 3.94s | ❌ | Invents syntax | Full benchmarks: `scripts/test-results/` --- ## πŸ› οΈ Development ```bash # Run tests pnpm test # Run specific component tests pnpm test -- lexer pnpm test -- parser pnpm test -- type-checker # Watch mode pnpm test:watch # Linting pnpm lint pnpm lint:fix # Build pnpm build ``` --- ## 🀝 Contributing See [AGENTS.md](./AGENTS.md) for detailed project specification and development phases. **Current needs:** - Testing on diverse Zig codebases - Edge case discovery (parser/type-checker) - Performance optimization - Documentation improvements --- ## πŸ“„ License **WTFPL v2** β€” Do What The Fuck You Want To Public License --- ## πŸ”— Links - **Repository:** https://github.com/fulgidus/zignet - **Model (post-training):** https://huggingface.co/fulgidus/zignet-qwen2.5-coder-7b - **MCP Protocol:** https://modelcontextprotocol.io - **Zig Language:** https://ziglang.org --- **Status:** βœ… Phase 4 Complete - Ready for deployment (fine-tuning complete, E2E tests passing)

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/fulgidus/zignet'

If you have feedback or need assistance with the MCP directory API, please join our Discord server