perch-agent
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@perch-agent fix the failing tests in ./app and show me the command output"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
⚡ perch-agent
Delegate tasks from Claude Code / opencode to Perch AI as an autonomous worker agent.
One MCP server. Your orchestrator keeps the plan — Perch does the work, verifies it, and comes back with evidence.
Architecture · Quick Start · Tools · Benchmarks · Troubleshooting
🏗 Architecture
Claude Code (or opencode) stays the orchestrator. This server translates one MCP tool call into the
official perch CLI (perch run "<task>" --json) — no unofficial internal APIs, no session-token
proxying — and returns a structured result: final answer, thread id, model identity and token usage.
Related MCP server: outsrc
✨ Features
🔁 Async job model — long tasks return a
job_idin seconds; pollperch_job_statusor cancel withperch_job_cancel(kills the whole process tree).🧭 Karpathy guidelines baked in — every delegated task is prepended with working discipline: surface assumptions, minimal change, surgical scope, verification with real command output. (
guidelines: falseto disable.)📊 Live progress —
notifications/progressevery 5s while a task runs; renders in Claude Code.🧵 Thread continuation — pass a previous
thread_idand the worker remembers the conversation.🎯 Model pinning — tier (
standard/pro) or pin id (qwen-3.8-max,glm-5.3-flash-starter, …).🧾 Evidence-first output —
assistant_text,model_id,usage,thread_id, exit codes, and human-readable plan-gate errors instead of raw stack traces.🔒 Local-first — everything runs on your machine; the only network hop is the official CLI → Perch's own API, using your existing login. No keys to manage.
🧪 Battle-tested — unit + E2E suite, plus a real benchmark harness (Exercism polyglot, agentic coding, differential reasoning) included in
bench/.
🚀 Quick Start (3 Steps)
Step 1 — Prerequisites
Node.js 20+
Perch CLI installed and logged in (the MCP reuses this session — no API key):
npm i -g perchai-cli
perch login # browser sign-in (Google/GitHub)
perch status # must show "Signed in as …"Step 2 — Get this repo
git clone https://github.com/DMCconnect/perch-agent-mcp.git
cd perch-agent-mcp
npm install
npm test # parser self-checkStep 3 — Register with your harness
Claude Code (user scope):
claude mcp add --scope user perch-agent \
-e PERCH_AGENT_MODEL=qwen-3.8-max \
-e PERCH_AGENT_EFFORT=high \
-- node "C:/path/to/perch-agent-mcp/index.js"
claude mcp list # → perch-agent: ✓ connectedFor long delegations also set
MCP_TOOL_TIMEOUT=900000in your environment (Claude Code's default MCP call timeout is short).
opencode (~/.config/opencode/opencode.json):
{
"mcp": {
"perch-agent": {
"type": "local",
"command": ["node", "C:/path/to/perch-agent-mcp/index.js"],
"enabled": true,
"timeout": 1200000
}
}
}Any other MCP client — it's a plain stdio server:
command: node <path>/index.jsDone. In your harness, say: "Use perch-agent to fix the failing tests in ./app".
🛠️ Tools
Tool | What it does |
| Spawn a Perch worker run. Params: |
| Live status/result of a job: state, elapsed, |
| Kill a running job's whole process tree ( |
| Free local check: CLI version, sign-in state, live job list. |
Result shape (success):
{
"job_id": "pj-95c583b8",
"status": "finished",
"perch_status": "completed",
"ok": true,
"thread_id": "cli-cwd-a713c141ff2d4ddb",
"assistant_text": "…final worker answer…",
"model_id": "Qwen/Qwen3.8-Max",
"usage": { "input_tokens": 15761, "output_tokens": 30, "total_tokens": 24495 }
}🎛️ Environment
Variable | Default | Purpose |
|
| Default model pin for every delegation. |
|
| Default reasoning effort. |
| OS temp dir | Fallback |
| auto-resolve | Explicit path to the CLI's JS entry (see Troubleshooting #1). |
🔥 The free Qwen 3.8 Max pin
Qwen 3.8 Max is free on the Perch Starter plan until Nov 20, 2026 (announcement). To make it the default worker:
PERCH_AGENT_MODEL=qwen-3.8-max PERCH_AGENT_EFFORT=highAfter the promo expires, the CLI rejects the pin with a clear plan error — switch back to
standard (or any current Starter pin) with one env change.
🧠 The karpathy preamble
Every delegate_to_perch task ships with this discipline header (the whole point of a worker —
it must not wander, and it must prove it finished):
1. Think before coding — state your assumptions explicitly…
2. Simplicity first — the minimum change that solves the problem…
3. Surgical changes — touch only what the task requires…
4. Goal-driven verification — run the tests/builds, quote the real command
and its output as evidence. Never claim verification without evidence.Disable per-call with guidelines: false.
📈 Benchmarks
Real runs by this repo's harness against the live Perch service (Starter plan), graded objectively — pytest/exit-codes/answer-checking, never the model's self-report:
Suite | Items | standard (Qwen 3.6-35B) | qwen-3.8-max |
Math / logic / JS-reasoning | 16 | 16/16 | 16/16 |
Exercism polyglot (pytest-graded) | 3 exercises | ✅ bowling·rectangles·zebra (84–126s) | ✅ all (127–153s) |
Agentic coding (build / debug-tests / stateful CLI) | 3 | ✅ 3/3 | ✅ 3/3 (agentic run 2.5× faster) |
Mid-run cancellation | — | ✅ clean kill | ✅ clean kill |
Is the pinned model real? Perch's own accounting reports
Qwen/Qwen3.8-Maxper turn and the timing fingerprint differs fromstandardper task type — while short-form reasoning scores are tied. Harness:bench/· methodology borrowed from aider's polyglot benchmark (Exercism + pytest, self-correction loop).
🧪 Testing
npm test # parser hardening self-check
npm run e2e # full MCP E2E: happy path, threads, error surfacing, async+cancel
npm run bench:polyglot # Exercism exercises, pytest-graded (needs: python + pytest)The E2E covers: inline completion, thread continuation, plan-gate error surfacing,
async job_id handoff, and mid-run cancellation.
🔧 Troubleshooting
Symptom | Cause / fix |
| Node ≥ 20.12 refuses |
| Harness-side timeout. Claude Code: set |
| Your plan doesn't cover that surface or model pin. The CLI's plan-gate message is surfaced verbatim in |
Status says "not signed in" but runs work | Stale access token — |
Worker asks instead of writing files | Don't override |
Headless | The 5.5-model safeguard classifies project context, not just prompts — aggressive |
🤖 For agents (machine-readable)
llms.txt— condensed install + tool contract for LLM agents.Tool schemas are standard MCP (
tools/list); this server speaks plain stdio JSON-RPC.Safe to auto-install: no telemetry, no keys, no network beyond the official CLI → Perch.
📄 License
MIT — free to use, modify, and share.
🙏 Credits
Discipline header from the karpathy-guidelines pattern.
Benchmark methodology from aider's polyglot benchmark (Exercism + pytest).
Diagram style inspired by Cocoon-AI/architecture-diagram-generator.
Reliability patterns studied from glm-mcp and opencode-mcp.
Available Tools
4 toolsdelegate_to_perchDelegate task to Perch AIADestructive
Delegate a task to Perch AI (worker agent) via the official perch CLI. Perch runs autonomously in the given working directory with its own tools (bash, file read/write, skills) on the signed-in Perch plan. Karpathy working guidelines (assumptions, simplicity, surgical scope, evidence-based verification) are prepended to every task by default (guidelines:false to disable). Returns the final answer, thread id, and status. Long-running tasks: pass wait_seconds to bound blocking; if still running you get a job_id — poll perch_job_status.
Inputs: task (required), cwd, mode, model, +7 more.
perch_job_cancelCancel Perch jobBDestructiveIdempotent
Kill a running delegated Perch job (process tree).
Inputs: job_id (required).
perch_job_statusPerch job statusCRead-onlyIdempotent
Get status/result of a delegated Perch job by job_id.
Inputs: job_id (required).
perch_statusPerch CLI & server statusARead-onlyIdempotent
Free local check (no model call): perch CLI presence and sign-in state, plus this server's live job list. Call before delegating if unsure the worker is ready.
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 4 tools
Each tool maps to a distinct phase of the delegation lifecycle: delegate, poll a job, cancel a job, and check local CLI readiness. The only mild overlap is between perch_status and perch_job_status, but descriptions make clear one is a per-job query and the other a free local sign-in/health check.
All names are snake_case and share a perch_ namespace, but the verb/noun ordering is mixed: delegate_to_perch is verb-first, while perch_job_status and perch_job_cancel are noun-first. It is still readable but not a single predictable pattern.
Four tools is thin but well-matched to a focused delegation wrapper: one action plus the poll/cancel/health trio needed to operate it. Nothing feels redundant or gratuitous.
The delegated-job lifecycle is covered end to end: readiness check, launch with optional bounded wait, status polling, and cancellation. Minor gaps like explicit job listing or cleanup are largely absorbed by perch_status reporting the live job list.
Related MCP Connectors
Hand tasks, bugs and finished work to AI coding agents, and get back a write-up with evidence.
Autonomous AI developers on your own infrastructure: assign a task, get a pull request.
AI work orchestration for plans, tasks, teams, and coding-agent dispatch.
Hire AI workers that run on schedule, report back and act with your OK. Or deploy private models.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables orchestrators to drive Claude Code as a structured software-engineering worker over HTTP, with tools to submit coding tasks, poll for normalized results, resume, review, and cancel jobs.-
- AlicenseNot gradedqualityCmaintenanceLets an agent delegate coding tasks and reviews to Claude Code, Codex or Grok Build CLIs running locally in isolated git worktrees, then poll an inbox for the status, question or final answer. Each caller sees only its own threads.5 npm1MIT
- AlicenseNot gradedqualityBmaintenanceEnables Codex or Claude Code to orchestrate persistent Antigravity CLI workers as independent implementers and testers within restricted workspace roots. It supports asynchronous task dispatch, progress polling, result inspection, follow-up messages, and cancellation with bounded, audited local event logging.38 npm4MIT
- AlicenseNot gradedqualityBmaintenanceEnables Claude Code, Cursor, and Codex users to orchestrate plan/build/review workflows across host or CLI models with a spec gate, tool vetting, hard per-run and per-day cost/token limits, safe defaults, and clear logs.11 npmMIT