mcp server
claudezilla
Autonomous AI game studio — one browser game every hour, self-tested and auto-posted to Twitter. Claude Code agents + MCP.
Set up
Runs on your computer. Pick your agent and operating system.
This project does not publish an install method we can turn into a config. Follow the README instead.
README
synced Oct 23, 2026Claudezilla
An autonomous AI game studio. One agent, one browser game every hour, forever — each finished game auto-posted to Twitter in the agent's own voice.
No human in the loop. The system picks a genre, designs a game, writes it, tests it by looking at screenshots, grades itself against a hard quality bar, generates cover art, ships it to a database, and tweets about it. Then it does the whole thing again an hour later.
Ran in production on Railway. The project is closed — this is the source.
How it works
A scheduler fires every hour (api.py, Flask + APScheduler). Each tick spawns a fresh headless Claude Code process that runs one full game-development cycle:
- History check —
get_game_history(10)so it never repeats a recent genre. - Pick a proven game to clone — the agent names a specific successful game (Vampire Survivors, Hotline Miami, Into the Breach, Slay the Spire…) and rebuilds its core loop with original visuals. The innovation is in execution and polish, not in inventing mechanics.
- Build — a single self-contained HTML file, desktop + mobile, following a 26-stage internal cycle defined in
workspace_claude.md. - Delegate to specialists — see the subagents below.
- Quality gate —
strict-evaluatorhas to score the game 9.5+/10, or it goes back for another iteration. - Publish —
game-publishergenerates cover art and writes the game row to Supabase. - Broadcast — the
claudezillasubagent writes one in-character tweet and posts it with the cover.
Reliability: three-stage publish failsafe
LLM agents forget the last step. After every run the system queries the DB to confirm the game was actually published and tweeted. If it wasn't:
- inject a reminder prompt and re-run the agent;
- if it's still missing, call the publisher and poster subagents directly.
A finished game is never silently lost because the agent wandered off mid-task.
Architecture
Subagents (.claude/agents/):
| Agent | Role |
|---|---|
graphics-creator | SVG / Canvas game art |
qa-tester | functional testing |
ux-auditor | UX / UI audit |
visual-tester-runner | drives the visual-playtester skill |
strict-evaluator | final 9.5+/10 quality gate |
game-publisher | cover art + database insert |
claudezilla | in-voice Twitter posting |
Skills (.claude/skills/):
- visual-playtester — launches the game in headless Chromium (Puppeteer), captures screenshots and console output so the agent can see what it built and catch visual / runtime bugs it can't find by reading code.
- game-publisher, claudezilla — fork-context skills wrapping the matching subagents.
MCP servers — three, deliberately built at different abstraction levels:
| Server | Lang | Notes |
|---|---|---|
games_mcp.py | Python | Raw JSON-RPC over stdin/stdout — no MCP SDK. Hand-written initialize / tools/list / tools/call. Supabase REST underneath. |
gen_mcp.py | Python | image generation via OpenRouter (FLUX.2 / Gemini) |
twitter_mcp.js | Node | twitter-api-v2, OAuth 1.0a |
Up to 5 agents run in parallel on manual triggers (semaphore-guarded), plus one scheduled cron agent. A web terminal (ttyd, behind nginx) is exposed for the one-time Claude Code login.
Stack
Python (Flask, APScheduler, psycopg2) · Node.js · Claude Code (headless) · MCP · PostgreSQL / Supabase · OpenRouter · Puppeteer · Docker · nginx · Railway
Layout
api.py Flask API + scheduler + agent runner + publish failsafe
db.py database helpers
games_mcp.py MCP: game history + DB writes (raw JSON-RPC, no SDK)
gen_mcp.py / gen.py MCP + CLI: cover-art generation
twitter_mcp.js MCP: Twitter posting
workspace_claude.md the agent's brain — 26-stage game-dev cycle
.claude/agents/ 7 specialist subagents
.claude/skills/ visual playtester (Puppeteer) + publish / post skills
Dockerfile, start.sh, nginx.conf, railway.toml
Running
Copy .env.example to .env and fill in the credentials (PostgreSQL, Supabase, OpenRouter, Twitter, a Claude Code OAuth token). Then build the Docker image and run it, or deploy to Railway. The scheduler starts automatically; set CRON_TIME=0 to disable it and drive runs manually via POST /trigger.
License
MIT — see LICENSE.
Built by Vladimir Shiryaev — @sand0vvv