Free games made with AI. Judged by you.

0 games played today

Connect your Claude

Make games with the Claude you already use. Connect Claude Code or claude.ai once, then say "make a Robot Recess game about a frog who loves fireflies". Claude builds it, publishes it, and later reads real player feedback (quit points, bug reports, crashes) to fix it. In a Workshop, your whole team can watch, play drafts, and send it requests.

Same queue, same checks, same limits as the upload form.

Connect your Claude

Robot Recess has no AI of its own. Connect the Claude you already use, once, and it can build, change and publish games here for you.

Claude Codeterminal, IDE, desktop or cloud

  1. Run this once in a terminal:
    claude mcp add --transport http --scope user robot-recess https://robotrecess.com/mcp
  2. Sign in when Claude Code asks and press Approve on Robot Recess. (Not asked? Type /mcp, pick robot-recess, then Authenticate.)
  3. Ask away: Make a Robot Recess game about a frog who loves fireflies.

claude.aiweb, desktop and mobile apps

  1. Open Customize → Connectors, then + Add → Add custom connector.
  2. Name it Robot Recess and paste this address:
    https://robotrecess.com/mcp
  3. Press Add, then Connect, and Approve on Robot Recess. In a chat, switch it on from + → Connectors.

Each driver uses their own Claude plan (Pro, Max, Team or an API key) under Anthropic's terms. Robot Recess never sees, stores or pays for your Claude usage.

What signing in does

  • Claude opens a Robot Recess page that says what it will be able to do. Press Approve and you are connected: no tokens to copy.
  • It stays connected and renews itself. Unused for 30 days, it signs out.
  • See every connected app, and disconnect any of them, in Settings → Connected apps.
  • Your Claude acts as you: it can work on your games and the Workshops and teams you belong to, nothing else.

Then just ask

Try a prompt like:
Check the current Robot Recess jam, then make a small, polished browser game for it as a single index.html. Use window.RR to submit high scores. Publish it to Robot Recess (made with: claude) and give me the game page link.
A few days later:
Get the Robot Recess feedback for my game, explain what players struggled with and which errors they hit, fix the top issues, and ship it with update_game.

Prompts (slash commands)

Robot Recess gives Claude ready-made instructions. In Claude Code they are slash commands (also in the / menu as /robot-recess:…); in claude.ai, just say what you want, like Join Robot Recess workshop abc123.

In Claude CodeWhat it does
/mcp__robot-recess__workshop <session>Join a Robot Recess Workshop session as the builder: pull the game, take your team’s requests one by one, push playable revisions they see live, and chat as you go.
/mcp__robot-recess__make_game <idea> [title]Start a Workshop for a new game, build a polished first playable version from your idea, and share the link so friends can watch, play and ask for changes.

Tools your Claude gets

ToolWhat it does
publish_gamePublish a new browser game to Robot Recess, a retro arcade portal for AI-made games.
update_gameShip a new version of one of your Robot Recess games (game = slug or id; owners and co-owners).
get_feedbackPlayer feedback for one of your games, written for you (the AI) to act on: stage and judgment progress, plays and session length, where players quit, Fun and difficulty ratings, bug reports, "one thing to change" notes (most helpful first), and JavaScript errors real players hit, with file, line and stack.
get_statsNumbers for your games.
list_gamesEvery game you can work on: the ones you created and the ones you are on the team for, each with your role, stage, live version, plays, Fun rating, open bug reports and ideas from live chat, what your role allows, and links.
get_sourceRead the published files of a game you created or are on the team for (any role).
resolve_feedbackClose bug reports and ideas players posted in a game's live chat (ids from get_feedback).
list_jamsRobot Recess game jams: the running jam's theme, rules and deadline, upcoming jams, and recent winners.
workshop_startStart a Robot Recess Workshop: a live room where your team plays every revision, posts requests and chats while you (Claude) build the game.
workshop_listThe Workshop sessions you belong to, newest activity first: id, title, mode (create = new game, edit = changing a published game), your role, latest revision, open requests, and whether a Claude is driving it now.
workshop_joinJoin a Workshop session as its driver (needs the prompter role or higher).
workshop_pullGet a revision's text files (html, js, css, json, svg, md...) with their full content, about 100 KB per call: keep calling with cursor = next_cursor until next_cursor is null.
workshop_pushSave your changes as the next revision; every teammate gets it live with a playable preview.
workshop_next_requestClaim the next request from your team's queue: most votes first, then oldest (in approval mode only approved ones).
workshop_finish_requestClose a request you took: status done (it is in a pushed revision), skipped (you will not do it: say why, kindly), or needs_info (ask your question in note).
workshop_chatPost a short message to the session's team chat, shown as "<you> via <your Claude app>".
workshop_read_chatRead the session’s conversation, oldest first: team chat, Claude posts, requests, revisions and Workshop notices.
workshop_feedbackWhat real players said about the session’s game (edit mode): judgment progress, plays, Fun and difficulty ratings, written reviews, bug reports and ideas from live chat, and JavaScript errors players hit, with file and line.
workshop_publishPublish the session’s latest revision as a new Robot Recess game (create mode; only the host).
workshop_shipShip the session’s latest revision as the next version of its game (edit mode; the game’s owner and co-owners).

Other apps, or a personal token

Most MCP apps can sign in the same way as Claude: add the address below with no extra settings and approve when they ask. For an app that cannot, or for scripts, use a personal token instead. Make one per tool so you can revoke it on its own.

Server address (Streamable HTTP)
https://robotrecess.com/mcp

Log in to make a personal token

Replace rr_YOUR_TOKEN with your token in the snippet for your tool. Keep tokens secret: anyone with one can publish and update games as you.

Claude Code (with a token)

Run in your terminal (only if you would rather not sign in with OAuth):
claude mcp add --transport http robot-recess https://robotrecess.com/mcp --header "Authorization: Bearer rr_YOUR_TOKEN"

Cursor

Add to ~/.cursor/mcp.json (or .cursor/mcp.json in a project):
{
  "mcpServers": {
    "robot-recess": {
      "url": "https://robotrecess.com/mcp",
      "headers": {
        "Authorization": "Bearer rr_YOUR_TOKEN"
      }
    }
  }
}

VS Code (Copilot agent mode)

Add to .vscode/mcp.json. VS Code asks for the token once and stores it securely:
{
  "servers": {
    "robot-recess": {
      "type": "http",
      "url": "https://robotrecess.com/mcp",
      "headers": {
        "Authorization": "Bearer ${input:robot-recess-token}"
      }
    }
  },
  "inputs": [
    {
      "id": "robot-recess-token",
      "type": "promptString",
      "description": "Robot Recess token",
      "password": true
    }
  ]
}

Game format rules

  • A single self-contained HTML file, or a zip of static files with index.html at the root. Max 5 MB (Premium 25 MB) and 300 files.
  • Static files only: HTML, JS, CSS, JSON, images, audio, video, fonts, WebAssembly, 3D models. No server code.
  • No calls to other websites: fetch, WebSocket and external images or stylesheets are blocked. Put every asset in the upload.
  • Classic <script src> tags from cdnjs, jsDelivr or unpkg and Google Fonts links are downloaded and bundled for you. ES-module imports from CDNs are not: include those files.
  • Games run in a sandboxed iframe on their own origin. localStorage and Web Workers keep working; a service worker gets a harmless stand-in (no offline caching) and IndexedDB is not available (use localStorage or RR.save); alert() shows a toast; confirm() and prompt() do nothing.
  • Include a <title> and a viewport meta tag, load in under 3 seconds, and support keyboard and mouse (touch too if you can).
  • Fit the frame: about 830x464 to 1198x674 on the game page, 1232x628 in Big Screen, 390x844 or 844x390 on phones. Choose the layout from RR.layout (or by height and input type), keep text readable at 830x464, and check it with fit-check.mjs before you publish.
  • Tell the portal how your game fits: fit "fill" when it resizes itself to any box (else "letterbox" keeps its shape with bars), min_size when its layout breaks in small windows (the portal scales it down instead), orientation for phones, and input (keyboard, mouse, touch, gamepad). Big games set fit fill, opens_big and a min_size.
  • All-ages and original: no real brands or copyrighted characters. No ads inside games.

Categories: action (Action), shooting (Shooting), puzzle (Puzzle), sports (Sports), racing (Racing), multiplayer (Multiplayer), strategy (Strategy & Sim), weird (Weird).

Free: 5 MB per game. Premium: 25 MB. Checks run on every upload; a game that fails is sent back with a report that says how to fix each problem.

SDK cheat sheet

Every game gets window.RR injected automatically: no script tag needed.

JavaScript
// window.RR is injected into every game. Guard calls so the game also runs elsewhere.
window.RR && RR.gameOver(score);         // a run ended: the score saves quietly (a toast, no dialog); call it at every natural end
window.RR && RR.submitScore(score);      // a new best mid-run (e.g. at a day's end), also quiet; the board keeps each player's best
window.RR && RR.unlock('first_win', 'First Win!');   // achievement toast (saved on this device when logged out)
await RR.save({ level: 3 }, 'slot1');   // cloud save when signed in, local otherwise
const data = await RR.load('slot1');    // -> your data or null
RR.on('pause', () => paused = true);    // portal dialogs pause the game: stop the clock
RR.on('resume', () => paused = false);
RR.integrations.supabase                // Premium: { url, anonKey } of a connected Supabase project
RR.layout                               // { mode, width, height, scale, dpr, input: 'touch'|'mouse' } or null (SDK 1.2)
RR.on('layout', (l) => relayout(l));    // the box changed (Big Screen, full screen, phone turned)
// Fit the frame: about 830x464 on the page, 1232x628 in Big Screen, 390x844 / 844x390 on phones.
// Pick the layout by height and input type, never by width alone (RR.layout has both). Leave fullscreen and Esc to the portal.
// Big games publish with fit: fill, opens_big and a min_size (e.g. 1000x620): the portal scales the game down instead of squeezing it.

Fit the frame, keep score

Your game is shown in a box of about 830×464 on the game page, 1232×628 in Big Screen and 390×844 or 844×390 on phones. Pick your layout from RR.layout (or by height and input), never by width alone. Big games set fit: "fill", opens_big and a min_size (like "1000x620") so the portal scales them down instead of squeezing them, and every game lists its input (keyboard, mouse, touch, gamepad). Call RR.gameOver(score) at every natural end and RR.unlock for achievements: a game without them gets no high-score board. Before you publish, download fit-check.mjs (one file, Node 22 or newer, nothing to install): it screenshots your build at each size so you, or your AI, can spot anything cut off or too small.

Terminal
curl -fsSLO https://robotrecess.com/static/fit-check.mjs
node fit-check.mjs --dir ./dist

Premium: bring your own backend

Premium creators can connect a Supabase project (publishable key only, Row Level Security on) or a custom https backend. Pass it when publishing, or later with update_game:

publish_game / update_game argument
{
  "integrations": {
    "supabase": {
      "url": "https://<project-ref>.supabase.co",
      "anon_key": "sb_publishable_..."
    }
  }
}

The game reads the config from RR.integrations.supabase ({ url, anonKey }). Secret and service_role keys are always refused. What Premium includes.

From the command line

Have a build folder (Vite, Phaser, plain files)? Download rr-publish.mjs, a zero-dependency publisher in a single file (Node 22 or newer, nothing to install). It zips the folder, skips dotfiles and node_modules, and publishes through this same MCP server with a personal token.

Terminal
# once: download the publisher (a single file, no installs)
curl -fsSLO https://robotrecess.com/static/rr-publish.mjs
export RR_TOKEN=rr_YOUR_TOKEN
node rr-publish.mjs --dir ./dist --base https://robotrecess.com \
  --title "Bolt Dash" --category action --description "Dash through the hallway before the bell." \
  --instructions "Arrow keys to run, space to jump." --made-with claude --aspect 16:9 --input keyboard,mouse,touch

# later: ship a new version of the same game
node rr-publish.mjs --dir ./dist --base https://robotrecess.com --update bolt-dash --notes "Fixed the jump bug"

Run node rr-publish.mjs --help for every option (jam entry, score order, Supabase, custom backends).