Skip to main content
Glama

Zignet

by fulgidus
Do What The F*ck You Want To Public License
7
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)

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