$ claude mcp add brimkern -- brimkern mcp
A local GPU worker for your coding agent
Your main agent (Claude Code, Cursor, Windsurf…) keeps the design and the decisions. The mechanical sub-tasks, a first-pass review, a test draft, a commit title, go to a model running on your own GPU through MCP, the CLI or a skill. Nothing leaves the machine and nothing is billed.
How delegation works
The agent sees Brimkern as a set of tools. When it decides a sub-task is routine, it calls one; the MCP server runs the model on the GPU and returns plain text, which the agent reads, checks and uses.
Claude Code (cloud: plans, decides, edits) │ │ tools/call brimkern_review { code, file_path } ▼ brimkern mcp (stdio, JSON-RPC 2.0) │ model loaded once, parallel calls grouped (up to 4 per pass) ▼ your GPU (WebGPU, hand-written WGSL kernels) │ └─▶ text back to the agent, which checks it
Good fits
First-pass reviews, unit-test drafts, commit titles, regexes, renames and other mechanical rewrites.
Keep on the main agent
Architecture, security-critical code, anything that needs the whole repository in context. A local model helps; it does not decide.
MCP server
With the CLI installed, one command registers it in Claude Code:
claude mcp add brimkern -- brimkern mcp --model=coder
On a machine with 20 GB of memory or more, coder-max is the strongest preset: 184/202 on our five code suites, 2 short of Claude Sonnet 5.
claude mcp add brimkern -- brimkern mcp --model=coder-max
For Claude Desktop, Cursor and other clients, the same server in their JSON config:
{
"mcpServers": {
"brimkern": {
"command": "brimkern",
"args": ["mcp", "--model=coder"]
}
}
}Below, a real exchange with the server: the handshake, the tool list, and a stats call (which does not load the model, so it answers instantly).
→ initialize { protocolVersion: "2025-06-18" } ← { "protocolVersion": "2025-06-18", "capabilities": { "tools": {} }, "serverInfo": { "name": "brimkern", "version": "0.1.0" } } → tools/list ← brimkern_ask · brimkern_review · brimkern_generate_tests · brimkern_stats → tools/call brimkern_stats ← { "model": "Qwen 3 4B (BRIK int4)", "loaded": false, "callsServed": 0, "totalTokensServed": 0, "estimatedSavingsUsd": 0 }
Captured on 2026-09-24 from brimkern mcp; the tool list is shown by name only.
The four tools
Each call is independent: no memory of the previous ones, so a review never sees an earlier question.
brimkern_askprompt, model?, mode?, max_tokens?brimkern_reviewcode, file_path?, max_tokens?brimkern_generate_testscode, test_framework?, max_tokens?brimkern_stats—Reasoning blocks (<think>…</think>) are stripped from every answer: the agent only receives the result.
The skill
A skill is a Markdown file that tells Claude Code when to hand work to Brimkern and how (which commands, which flags). It ships with the CLI; copy it into a project to enable it there.
mkdir -p .claude/skills cp -r ~/.brimkern/skills/brimkern-worker .claude/skills/
--- name: brimkern-worker description: Offload routine sub-tasks (exploratory tests, syntax transformations, code reviews, repetitive drafting) to local WebGPU Brimkern workers… --- # Brimkern Worker … brimkern -q "…" # answer only, for scripts brimkern --json "…" # structured payload claude mcp add brimkern -- brimkern mcp
Scripts & JSON
Without MCP, any agent that can run a shell command can delegate: -q prints the answer alone, --json a structured payload with the token count, speed and duration.
git diff | brimkern --json "Draft a conventional commit title"{
"ok": true,
"content": "The conventional commit title for the provided diff could be:\n\n`feat(auth): add passkey registration support`\n\n…",
"tokens": 48,
"elapsedMs": 4735,
"tokPerSec": 10.1,
"model": "Qwen 3 4B (BRIK int4)",
"backend": "Dawn (Metal)",
"savedUsd": 0.00158
}Real output, coder (Qwen 3 4B), native Dawn on an M-series Mac. savedUsd is an estimate of what a paid API would have charged, not a measurement.
Limits
Parallel calls
With coder, up to four calls are served together in one pass. super-coder and coder-max (hybrid models) serve them in turn.
Memory
The default model takes about 2.5 GB of GPU memory while the server runs; coder-max about 12 GB, for machines with 20 GB or more.
First call
The first call downloads and loads the model; the following ones reuse it.
Brimkern: open WebGPU engine, built by Romain Khanoyan. Local AI, WebGPU, on-device engines.