Make up any game and play it in chat: a fair table that deals, hides cards and rolls dice.
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.
Set up any game to play in this chat: board games, card games, dice games, word and guessing games, mysteries. Describe it with the building blocks below, or pass starter for a ready one (tic-tac-toe, four-in-a-row, gomoku, checkers, reversi, crazy-eights, go-fish, twenty-one, pig, sea-battle, hangman, twenty-questions). The server keeps the board, deals and hides cards, rolls dice and enforces turns, so the player can trust the game. The player gets an interactive board in the chat (and a link to play in a browser or invite friends). Returns game_id and agent_key; keep both for get_state and take_turn. You run the rules that aren't built in.
Cards dealt to each hand at the start.
"standard" (52, ids like AS, 10H, QC), "standard_jokers", "numbers:1-10x4", or a list of card labels or {label, suit, rank}. Adds a face-down deck, a face-up table and a hidden hand per seat.
Default die sides.
The rules in a few sentences, shown to the player. Write them so you can follow them too.
Seat name that goes first.
Rules the server enforces for you.
Players in turn order. Default: Player (human) then Agent (agent).
alternate (default): one seat at a time. free: anyone acts anytime (guessing games, puzzles).
Starting pieces.
A ready-made game. Other fields here override its setup (for example seats).
Scores and tallies: "score", or {name, per_seat: false, start}.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http playtable https://play.rowhousesoftware.com/mcp
Set up any game to play in this chat: board games, card games, dice games, word and guessing games, mysteries. Describe it with the building blocks below, or pass starter for a ready one (tic-tac-toe, four-in-a-row, gomoku, checkers, reversi, crazy-eights, go-fish, twenty-one, pig, sea-battle, hangman, twenty-questions). The server keeps the board, deals and hides cards, rolls dice and enforces turns, so the player can trust the game. The player gets an interactive board in the chat (and a link to play in a browser or invite friends). Returns game_id and agent_key; keep both for get_state and take_turn. You run the rules that aren't built in.
| Argument | Type | Description |
|---|---|---|
| deal | integer | Cards dealt to each hand at the start. |
| deck | any | "standard" (52, ids like AS, 10H, QC), "standard_jokers", "numbers:1-10x4", or a list of card labels or {label, suit, rank}. Adds a face-down deck, a face-up table and a hidden hand per seat. |
| dice | integer | Default die sides. |
| about | string | The rules in a few sentences, shown to the player. Write them so you can follow them too. |
| board | object | |
| first | string | Seat name that goes first. |
| piles | array | |
| rules | object | Rules the server enforces for you. |
| seats | array | Players in turn order. Default: Player (human) then Agent (agent). |
| title | string | |
| turns | string | alternate (default): one seat at a time. free: anyone acts anytime (guessing games, puzzles). |
| pieces | array | Starting pieces. |
| starter | string | A ready-made game. Other fields here override its setup (for example seats). |
| counters | array | Scores and tallies: "score", or {name, per_seat: false, start}. |
{
"type": "object",
"properties": {
"deal": {
"type": "integer",
"description": "Cards dealt to each hand at the start."
},
"deck": {
"anyOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "object"
}
]
}
}
],
"description": "\"standard\" (52, ids like AS, 10H, QC), \"standard_jokers\", \"numbers:1-10x4\", or a list of card labels or {label, suit, rank}. Adds a face-down deck, a face-up table and a hidden hand per seat."
},
"dice": {
"type": "integer",
"description": "Default die sides."
},
"about": {
"type": "string",
"description": "The rules in a few sentences, shown to the player. Write them so you can follow them too."
},
"board": {
"type": "object",
"properties": {
"cols": {
"type": "integer",
"maximum": 26
},
"rows": {
"type": "integer",
"maximum": 26
},
"cells": {
"type": "object",
"description": "Starting cell marks: {\"B2\": {\"color\": \"#cde2fb\", \"label\": \"?\"}}",
"additionalProperties": true
},
"coords": {
"type": "boolean"
},
"pattern": {
"enum": [
"plain",
"checker",
"lines"
],
"type": "string"
}
}
},
"first": {
"type": "string",
"description": "Seat name that goes first."
},
"piles": {
"type": "array",
"items": {
"type": "object",
"properties": {
"face": {
"enum": [
"up",
"down",
"top",
"owner"
],
"type": "string"
},
"name": {
"type": "string"
},
"owner": {
"type": "string"
}
}
}
},
"rules": {
"type": "object",
"properties": {
"place": {
"enum": [
"empty",
"any"
],
"type": "string"
},
"gravity": {
"type": "boolean"
},
"max_hand": {
"type": "integer"
},
"one_move": {
"type": "boolean",
"description": "A place, move or play ends the turn by itself."
},
"win_line": {
"type": "integer",
"description": "n in a row wins."
}
},
"description": "Rules the server enforces for you."
},
"seats": {
"type": "array",
"items": {
"type": "object",
"properties": {
"kind": {
"enum": [
"human",
"agent"
],
"type": "string"
},
"name": {
"type": "string"
},
"color": {
"type": "string"
},
"piece": {
"type": "object",
"properties": {
"color": {
"type": "string"
},
"label": {
"type": "string"
},
"shape": {
"enum": [
"disc",
"square",
"ring",
"star",
"diamond"
],
"type": "string"
}
},
"description": "What a click on an empty cell places for this seat."
}
}
},
"maxItems": 8,
"description": "Players in turn order. Default: Player (human) then Agent (agent)."
},
"title": {
"type": "string"
},
"turns": {
"enum": [
"alternate",
"free"
],
"type": "string",
"description": "alternate (default): one seat at a time. free: anyone acts anytime (guessing games, puzzles)."
},
"pieces": {
"type": "array",
"items": {
"type": "object",
"properties": {
"at": {
"type": "string"
},
"kind": {
"type": "string"
},
"color": {
"type": "string"
},
"label": {
"type": "string"
},
"owner": {
"type": "string",
"description": "Seat name, or omit for neutral."
},
"shape": {
"type": "string"
}
}
},
"description": "Starting pieces."
},
"starter": {
"enum": [
"tic-tac-toe",
"four-in-a-row",
"gomoku",
"checkers",
"reversi",
"crazy-eights",
"go-fish",
"twenty-one",
"pig",
"sea-battle",
"hangman",
"twenty-questions"
],
"type": "string",
"description": "A ready-made game. Other fields here override its setup (for example seats)."
},
"counters": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "object"
}
]
},
"description": "Scores and tallies: \"score\", or {name, per_seat: false, start}."
}
}
}What your seat can see now: the board, your hand, public piles, scores, dice, secrets you hold and the recent log. Call it when the player says they've moved or it might be your turn.
| Argument | Type | Description |
|---|---|---|
| as | string | Which of your seats, when you play more than one. |
| game_id* | string | |
| agent_key* | string |
{
"type": "object",
"required": [
"game_id",
"agent_key"
],
"properties": {
"as": {
"type": "string",
"description": "Which of your seats, when you play more than one."
},
"game_id": {
"type": "string"
},
"agent_key": {
"type": "string"
}
}
}Show the interactive board in the chat again, for example after a long conversation or when the player asks to see it.
| Argument | Type | Description |
|---|---|---|
| game_id* | string | |
| agent_key* | string |
{
"type": "object",
"required": [
"game_id",
"agent_key"
],
"properties": {
"game_id": {
"type": "string"
},
"agent_key": {
"type": "string"
}
}
}Apply one or more actions for your seat, all or nothing: if any action is illegal, none happen and you get the reason. Usually end with end_turn. Action types and fields: - place {at: "B3"} or {column: "D"} with gravity; optional label, shape (disc, square, ring, star, diamond), color, kind, owner - move {from: "B3", to: "C4"} or {piece, to}; moving onto another player's piece takes it; optional label, kind - edit {at, owner?, label?, kind?, shape?, color?}: change a piece in place (flip, crown) - remove {at} or {piece} - mark {at, color?, label?}: paint or label a cell (hits, misses, letters) - draw {from?: "deck", to?: "hand", count?} - play {card, to?: "table", from?}: a card you can see, by id or label - give {card, to: seat} - shuffle {pile?}, collect {into?: "deck", from?: [piles]}: gather and reshuffle - roll {dice?: "2d6"}, pick {options: [...]}: server randomness, logged - score {counter?, seat?, add? | set?} - secret {name, value}: lock in hidden info (the word, the culprit, your fleet); reveal {name} - say {text}, end_turn {next?}, end_game {winner?, reason}, concede Cells are column letter + row number from the top: A1 is the top left.
| Argument | Type | Description |
|---|---|---|
| as | string | |
| actions* | array | |
| game_id* | string | |
| agent_key* | string |
{
"type": "object",
"required": [
"game_id",
"agent_key",
"actions"
],
"properties": {
"as": {
"type": "string"
},
"actions": {
"type": "array",
"items": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
}
},
"additionalProperties": true
},
"maxItems": 40,
"minItems": 1
},
"game_id": {
"type": "string"
},
"agent_key": {
"type": "string"
}
}
}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 9, 2026.