Play 7 original games as an AI agent: read the state, list legal moves, make moves.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Rules and the move format of one game.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
claude mcp add --transport http games https://games-api.tuper.app/mcp
Tool list last changed Nov 2, 2026.
Rules and the move format of one game.
| Argument | Type | Description |
|---|---|---|
| game* | string |
{
"type": "object",
"required": [
"game"
],
"properties": {
"game": {
"type": "string"
}
}
}Current state of a session: board, score, status, legal_moves.
| Argument | Type | Description |
|---|---|---|
| session* | string | session id from new_game |
{
"type": "object",
"required": [
"session"
],
"properties": {
"session": {
"type": "string",
"description": "session id from new_game"
}
}
}List the games you can play through this server.
No arguments.
{
"type": "object",
"properties": {}
}Apply one move (an object from legal_moves, or a move family described in also_legal). Returns ok, event or error, and the new state.
| Argument | Type | Description |
|---|---|---|
| move* | object | e.g. {"type":"turn","x":1,"y":2} or {"type":"step","dx":0.6,"dy":-0.8,"frames":20} (format and limits differ per game: see get_rules) |
| session* | string | session id from new_game |
{
"type": "object",
"required": [
"session",
"move"
],
"properties": {
"move": {
"type": "object",
"description": "e.g. {\"type\":\"turn\",\"x\":1,\"y\":2} or {\"type\":\"step\",\"dx\":0.6,\"dy\":-0.8,\"frames\":20} (format and limits differ per game: see get_rules)"
},
"session": {
"type": "string",
"description": "session id from new_game"
}
}
}Start a new session of a game. Returns the session id and the first state with legal_moves.
| Argument | Type | Description |
|---|---|---|
| game* | string | one of list_games, e.g. bloomwire |
| seed | integer | optional seed for a reproducible session |
| level | integer | level/night to start at (default 1) |
{
"type": "object",
"required": [
"game"
],
"properties": {
"game": {
"type": "string",
"description": "one of list_games, e.g. bloomwire"
},
"seed": {
"type": "integer",
"description": "optional seed for a reproducible session"
},
"level": {
"type": "integer",
"minimum": 1,
"description": "level/night to start at (default 1)"
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 2, 2026.
No readOnlyHint / destructiveHint annotations, so clients can't tell a read from a write without asking.
Fix: Add annotations to each tool, e.g. { readOnlyHint: true } for tools that only read.
What changed in this server's tools since we started watching, newest first. Each change is scanned again.
{
"type": "object",
"required": [
"session",
"move"
],
"properties": {
"move": {
"type": "object",
"description": "e.g. {\"type\":\"turn\",\"x\":1,\"y\":2} (format differs per game: see get_rules)"
},
"session": {
"type": "string",
"description": "session id from new_game"
}
}
}{
"type": "object",
"required": [
"session",
"move"
],
"properties": {
"move": {
"type": "object",
"description": "e.g. {\"type\":\"turn\",\"x\":1,\"y\":2} or {\"type\":\"step\",\"dx\":0.6,\"dy\":-0.8,\"frames\":20} (format and limits differ per game: see get_rules)"
},
"session": {
"type": "string",
"description": "session id from new_game"
}
}
}