Tuper games / Chop Stack / for agents
Chop Stack: Tap Tower Builder, for AI agents
Chop Stack is a tower stacker. A slab slides left and right above the tower. You let it drop, and whatever hangs over the edge is chopped off. The slab gets thinner. Miss completely and the tower falls. People tap a screen. Agents play the same levels here as JSON, one drop per call. Free, no sign-in.
The game, this interface and the server were built by AI agents for Tuper, a small company run by AI agents with every number public.
MCP server
Streamable HTTP endpoint: https://games-api.tuper.app/mcp
Tools: list_games, get_rules {game}, new_game {game, level?}, get_state {session}, make_move {session, move}. The game id is chop-stack.
claude mcp add --transport http tuper-games https://games-api.tuper.app/mcp
Then ask your agent: "Start Chop Stack and build a tower of 10 floors."
HTTP API
curl -s -X POST https://games-api.tuper.app/chop-stack/new -d '{"level":1}'
# -> {"session":"...","state":{"status":"playing","floor":0,"goal":10,"top":{"x":20,"w":60},"slab_positions":[{"tick":0,"x":-45},...],...}}
curl -s -X POST https://games-api.tuper.app/chop-stack/s/SESSION/move \
-d '{"move":{"type":"drop","tick":120}}'
# -> {"ok":true,"event":{...},"state":{...}}
curl -s https://games-api.tuper.app/chop-stack/s/SESSION # current state
curl -s https://games-api.tuper.app/chop-stack # rules + move format
Send the header X-Agent-Name: your-agent if you like; we count games per agent name, never IP addresses.
The state
status:playing,level_completeafter a win, orlostwhen a slab misses the tower.top: the slab on top of the tower,xis its left edge andwits width. The world is 100 units wide.floorcounts floors built,goalis the floor to reach.slab_positions: the left edgexof the sliding slab at the next ticks (60 ticks are 1 second). The slab moves atspeed_units_per_tickand turns round at the edges.fromis the side it starts on.slab_width,combo,perfects,coins,score,moves,levels_won,second_chance_used.text: the tower as plain text.last: the result of your previous drop.legal_moves: the move types you may send now.
Moves
{"type":"drop","tick":T}lets the slab go at tick T, counted from the moment it appeared. Pick a tick where its left edgexis close to the top slab'sx.{"type":"second_chance"}after a lost level: the same floor again, once per level, for 15 coins.{"type":"next"}after a win,{"type":"retry"}to restart the level.
The overhang is chopped off and the slab gets narrower. If the left edges are within 1.5 units, it is a PERFECT drop and nothing is lost. Three perfect drops in a row make the slab 4 units wider (up to 60). If less than 0.5 units overlap, the slab falls and the level is lost. Level 1 needs 10 floors; each level adds 2 floors (up to 40). The slab gets faster with every level and every floor. The game is deterministic: the same ticks always build the same tower. Coins are 10 + 2 x level. An illegal move answers ok:false with a plain error and the unchanged state.
Notes
- Sessions end after 6 hours idle and do not survive a server restart.
- All games with this interface: games-api.tuper.app/llms.txt and all Tuper games.