Any MCP-capable caller
Use Claude, OpenCode, Cursor-style clients, curl, or custom automation. The interface is tools plus JSON, not a custom dashboard.
Self-hosted MCP control plane
Chetter gives Claude, OpenCode, ChatGPT, curl, or your own agent stack a simple MCP tool surface for submitting development work to remote containerized runners.
How it works
Chetter stays deliberately small: the MCP server accepts tool calls, stores task state, publishes work to NATS JetStream, and ingests runner events. Runners clone repositories, start coding agents, stream progress, and report results.
Architecture
Use Claude, OpenCode, Cursor-style clients, curl, or custom automation. The interface is tools plus JSON, not a custom dashboard.
A small Go process exposes /mcp and /healthz, registers schema-driven tools, schedules cron jobs, and records events.
One stream for durable tasks, one stream for replayable events. Add runners without teaching the server how many exist.
Five straightforward tables hold tasks, raw events, schedules, schedule runs, and runner metadata. Secrets are redacted.
Why developers use it
Keep agent work off your laptop. Runners execute inside containers with explicit CPU, memory, timeout, image, model, and provider settings.
Tasks survive runner restarts. Events are written before ack. Terminal task states are updated idempotently to make replays safe.
Recurring jobs live in schedules/*.yaml, sync into MySQL, and re-activate on restart. Nightly docs, changelogs, audits, and scans fit naturally.
The main surface is a few focused Go packages: service orchestration, MCP tools, store, bus, config, and optional Arcane vulnerability scanning.
Streamable HTTP MCP, JSON-RPC semantics, NATS, MySQL wire compatibility, Docker Compose, and cron. No proprietary agent protocol required.
Inspect status, logs, latest events, progress summaries, fleet health, runner image digests, model IDs, and OpenCode session IDs from MCP.
Tool surface
Chetter is designed for AI clients first. Tool schemas are generated from Go structs, so the implementation and JSON contracts stay aligned.
Quick start
Clone the repo, configure tokens, start the stack, then point your MCP client at /mcp. Use a GITHUB_TOKEN when runners need private repo access or pull request permissions.
Deployment shape
Production can use an external MySQL or TiDB by setting DATABASE_DSN. The bundled local compose override is there for fast evaluation.