$ 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, calls queued one at a time ▼ 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 4B 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
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
One generation at a time
Parallel tool calls are queued: the model is loaded once and serves them in turn.
Memory
The default model takes about 2.5 GB of GPU memory while the server runs.
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.