15 tools for chess variant analysis, hex map generation, and board game utilities
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.
Get details of a specific board layout by ID
Board ID or name
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Get details of a specific board layout by ID
| Argument | Type | Description |
|---|---|---|
| board* | string | Board ID or name |
{
"type": "object",
"required": [
"board"
],
"properties": {
"board": {
"type": "string",
"description": "Board ID or name"
}
}
}Search the board gallery (335 rendered board layouts across 34 game families)
| Argument | Type | Description |
|---|---|---|
| limit | number | Max results (default 10) |
| query | string | Search term (e.g. "8x8", "hex", "shogi") |
{
"type": "object",
"properties": {
"limit": {
"type": "number",
"description": "Max results (default 10)"
},
"query": {
"type": "string",
"description": "Search term (e.g. \"8x8\", \"hex\", \"shogi\")"
}
}
}Get statistics about the board gallery (total boards, families, topologies)
No arguments.
{
"type": "object",
"properties": {}
}[DEPRECATED — use play_suggest_move] Analyse a chess position. Removal: v1.0.0.
| Argument | Type | Description |
|---|---|---|
| depth | number | |
| variant | string |
{
"type": "object",
"properties": {
"depth": {
"type": "number"
},
"variant": {
"type": "string"
}
}
}Get a random chess puzzle. Filter by variant, difficulty or theme. Not every variant puzzle carries themes; use chess_list_puzzle_types to see what the pool holds.
| Argument | Type | Description |
|---|---|---|
| theme | string | Puzzle theme (fork, pin, skewer, mateIn2, etc). Not every variant puzzle carries themes. |
| variant | string | Chess variant play slug (e.g. almost-chess, benedict, fischer-random, king-of-the-hill, standard); a manifest key such as chess960 is also accepted. Returns only puzzles for this variant. |
| difficulty | string | Puzzle difficulty by rating: easy under 1200, medium 1200-1799, hard 1800 and above |
{
"type": "object",
"properties": {
"theme": {
"type": "string",
"description": "Puzzle theme (fork, pin, skewer, mateIn2, etc). Not every variant puzzle carries themes."
},
"variant": {
"type": "string",
"description": "Chess variant play slug (e.g. almost-chess, benedict, fischer-random, king-of-the-hill, standard); a manifest key such as chess960 is also accepted. Returns only puzzles for this variant."
},
"difficulty": {
"enum": [
"easy",
"medium",
"hard"
],
"type": "string",
"description": "Puzzle difficulty by rating: easy under 1200, medium 1200-1799, hard 1800 and above"
}
}
}[DEPRECATED — use play_create_game + play_get_moves] Get legal moves for a chess position. Removal: v1.0.0.
| Argument | Type | Description |
|---|---|---|
| variant | string |
{
"type": "object",
"properties": {
"variant": {
"type": "string"
}
}
}[REMOVED — engine#98] Opening book resolution is broken in Worker context. No replacement.
| Argument | Type | Description |
|---|---|---|
| variant | string |
{
"type": "object",
"properties": {
"variant": {
"type": "string"
}
}
}[DEPRECATED — use play_check_status] Get chess game status. Removal: v1.0.0.
| Argument | Type | Description |
|---|---|---|
| variant | string |
{
"type": "object",
"properties": {
"variant": {
"type": "string"
}
}
}List available puzzle variants, themes, and per-variant counts from the puzzle pool
No arguments.
{
"type": "object",
"properties": {}
}[DEPRECATED — use play_list_variants] List chess variants. Removal: v1.0.0.
| Argument | Type | Description |
|---|---|---|
| group | string |
{
"type": "object",
"properties": {
"group": {
"type": "string"
}
}
}[DEPRECATED — use play_apply_move] Apply a move to a chess game. Removal: v1.0.0.
| Argument | Type | Description |
|---|---|---|
| move* | object | |
| variant | string |
{
"type": "object",
"required": [
"move"
],
"properties": {
"move": {
"type": "object"
},
"variant": {
"type": "string"
}
}
}[DEPRECATED — use play_make_moves] Apply a sequence of chess moves. Removal: v1.0.0.
| Argument | Type | Description |
|---|---|---|
| moves* | array | |
| variant | string |
{
"type": "object",
"required": [
"moves"
],
"properties": {
"moves": {
"type": "array",
"items": {
"type": "object"
}
},
"variant": {
"type": "string"
}
}
}[DEPRECATED — use play_render_board] Render a chess position as SVG. Removal: v1.0.0.
| Argument | Type | Description |
|---|---|---|
| fen | string | FEN position string |
| variant | string | |
| highlights | array | Squares to highlight (e.g. ["e2","e4"]) |
{
"type": "object",
"properties": {
"fen": {
"type": "string",
"description": "FEN position string"
},
"variant": {
"type": "string"
},
"highlights": {
"type": "array",
"items": {
"type": "string"
},
"description": "Squares to highlight (e.g. [\"e2\",\"e4\"])"
}
}
}[DEPRECATED — use play_validate_move] Check if a chess move is legal. Removal: v1.0.0.
| Argument | Type | Description |
|---|---|---|
| move* | object | |
| variant | string |
{
"type": "object",
"required": [
"move"
],
"properties": {
"move": {
"type": "object"
},
"variant": {
"type": "string"
}
}
}Flip one or more coins, or pick from a list of choices
| Argument | Type | Description |
|---|---|---|
| count | number | Number of coins (default 1) |
| choices | string | Comma-separated options to pick from (overrides coin flip) |
{
"type": "object",
"properties": {
"count": {
"type": "number",
"description": "Number of coins (default 1)"
},
"choices": {
"type": "string",
"description": "Comma-separated options to pick from (overrides coin flip)"
}
}
}Calculate settlement dice probability for Colony/Catan-style resource numbers
| Argument | Type | Description |
|---|---|---|
| numbers* | string | Settlement numbers, comma-separated (e.g. "5,6,8,9") |
{
"type": "object",
"required": [
"numbers"
],
"properties": {
"numbers": {
"type": "string",
"description": "Settlement numbers, comma-separated (e.g. \"5,6,8,9\")"
}
}
}Calculate probability of meeting a target with a dice expression. Supports keep-high/low (4d6kh3).
| Argument | Type | Description |
|---|---|---|
| target* | number | Target number to meet or exceed |
| comparison | string | Comparison (default >=) |
| expression* | string | Dice expression (e.g. 2d6, 4d6kh3) |
{
"type": "object",
"required": [
"expression",
"target"
],
"properties": {
"target": {
"type": "number",
"description": "Target number to meet or exceed"
},
"comparison": {
"enum": [
">=",
">",
"<=",
"<",
"="
],
"type": "string",
"description": "Comparison (default >=)"
},
"expression": {
"type": "string",
"description": "Dice expression (e.g. 2d6, 4d6kh3)"
}
}
}Roll dice using standard notation (e.g. 2d6+3, 4d8, d20). Supports comma-separated pools and keep-high/low (4d6kh3).
| Argument | Type | Description |
|---|---|---|
| count | number | Number of times to roll (default 1) |
| notation | string | Dice notation (e.g. 2d6+3, 4d6kh3, 3d8,1d12+2) |
| expression | string | Alias for notation |
{
"type": "object",
"properties": {
"count": {
"type": "number",
"description": "Number of times to roll (default 1)"
},
"notation": {
"type": "string",
"description": "Dice notation (e.g. 2d6+3, 4d6kh3, 3d8,1d12+2)"
},
"expression": {
"type": "string",
"description": "Alias for notation"
}
}
}Create, shuffle, and optionally draw/deal from a card deck
| Argument | Type | Description |
|---|---|---|
| draw | number | Number of cards to draw |
| type | string | Deck type (default: standard-52) |
| hands | number | Deal into N hands |
| per_hand | number | Cards per hand (default: 5) |
{
"type": "object",
"properties": {
"draw": {
"type": "number",
"description": "Number of cards to draw"
},
"type": {
"enum": [
"standard-52",
"bavarian-32",
"hanafuda-48",
"mahjong-136",
"dominoes-28",
"standard-dice"
],
"type": "string",
"description": "Deck type (default: standard-52)"
},
"hands": {
"type": "number",
"description": "Deal into N hands"
},
"per_hand": {
"type": "number",
"description": "Cards per hand (default: 5)"
}
}
}Shuffle and deal a custom deck of arbitrary named cards
| Argument | Type | Description |
|---|---|---|
| draw | number | Draw N cards from the top instead of dealing hands |
| cards* | array | Cards in the deck (name + optional quantity) |
| hands | number | Deal into N hands (default: 1 = draw pile only) |
| per_hand | number | Cards per hand (default: 5) |
{
"type": "object",
"required": [
"cards"
],
"properties": {
"draw": {
"type": "number",
"description": "Draw N cards from the top instead of dealing hands"
},
"cards": {
"type": "array",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string"
},
"quantity": {
"type": "number",
"default": 1
}
}
},
"description": "Cards in the deck (name + optional quantity)"
},
"hands": {
"type": "number",
"description": "Deal into N hands (default: 1 = draw pile only)"
},
"per_hand": {
"type": "number",
"description": "Cards per hand (default: 5)"
}
}
}List all available deck types with metadata
No arguments.
{
"type": "object",
"properties": {}
}Generate a random game jam theme combining mechanics and themes
| Argument | Type | Description |
|---|---|---|
| count | number | Number of themes to generate (default 3) |
{
"type": "object",
"properties": {
"count": {
"type": "number",
"description": "Number of themes to generate (default 3)"
}
}
}Resolve a Nukes combat encounter between units
| Argument | Type | Description |
|---|---|---|
| terrain | string | Terrain type (plains, forest, mountain, urban) |
| attacker* | string | Attacking unit type |
| defender* | string | Defending unit type |
{
"type": "object",
"required": [
"attacker",
"defender"
],
"properties": {
"terrain": {
"type": "string",
"description": "Terrain type (plains, forest, mountain, urban)"
},
"attacker": {
"type": "string",
"description": "Attacking unit type"
},
"defender": {
"type": "string",
"description": "Defending unit type"
}
}
}Track scores for players in any game
| Argument | Type | Description |
|---|---|---|
| game | string | Game name |
| scores | array | Scores (default: all 0) |
| players* | array | Player names |
{
"type": "object",
"required": [
"players"
],
"properties": {
"game": {
"type": "string",
"description": "Game name"
},
"scores": {
"type": "array",
"items": {
"type": "number"
},
"description": "Scores (default: all 0)"
},
"players": {
"type": "array",
"items": {
"type": "string"
},
"description": "Player names"
}
}
}Compute field of view from a hex position
| Argument | Type | Description |
|---|---|---|
| q* | number | Origin Q coordinate |
| r* | number | Origin R coordinate |
| game | string | Game context for obstacle lookup |
| seed | string | Map seed |
| range* | number | Vision range in hexes |
{
"type": "object",
"required": [
"q",
"r",
"range"
],
"properties": {
"q": {
"type": "number",
"description": "Origin Q coordinate"
},
"r": {
"type": "number",
"description": "Origin R coordinate"
},
"game": {
"type": "string",
"description": "Game context for obstacle lookup"
},
"seed": {
"type": "string",
"description": "Map seed"
},
"range": {
"type": "number",
"description": "Vision range in hexes"
}
}
}Generate a hex map and export as SVG
| Argument | Type | Description |
|---|---|---|
| game* | string | Game type |
| seed | string | Random seed |
| size | number | Map size |
| style | string | Visual style |
| hexSize | number | Hex size in pixels (default: 30) |
| players | number | Number of players |
{
"type": "object",
"required": [
"game"
],
"properties": {
"game": {
"type": "string",
"description": "Game type"
},
"seed": {
"type": "string",
"description": "Random seed"
},
"size": {
"type": "number",
"description": "Map size"
},
"style": {
"type": "string",
"description": "Visual style"
},
"hexSize": {
"type": "number",
"description": "Hex size in pixels (default: 30)"
},
"players": {
"type": "number",
"description": "Number of players"
}
}
}Generate a hex map for a specific game and player count
| Argument | Type | Description |
|---|---|---|
| game* | string | Game type (nukes, colony, catan, age-of-steam, eclipse, twilight-imperium) |
| seed | string | Random seed for reproducibility |
| size | number | Map size (default: game default) |
| players | number | Number of players (default: 2) |
{
"type": "object",
"required": [
"game"
],
"properties": {
"game": {
"type": "string",
"description": "Game type (nukes, colony, catan, age-of-steam, eclipse, twilight-imperium)"
},
"seed": {
"type": "string",
"description": "Random seed for reproducibility"
},
"size": {
"type": "number",
"description": "Map size (default: game default)"
},
"players": {
"type": "number",
"description": "Number of players (default: 2)"
}
}
}Get info about a specific hex coordinate (terrain, neighbours, distance)
| Argument | Type | Description |
|---|---|---|
| q* | number | Hex Q coordinate (column) |
| r* | number | Hex R coordinate (row) |
| game | string | Game context for terrain lookup |
| seed | string | Map seed (to look up terrain from a generated map) |
{
"type": "object",
"required": [
"q",
"r"
],
"properties": {
"q": {
"type": "number",
"description": "Hex Q coordinate (column)"
},
"r": {
"type": "number",
"description": "Hex R coordinate (row)"
},
"game": {
"type": "string",
"description": "Game context for terrain lookup"
},
"seed": {
"type": "string",
"description": "Map seed (to look up terrain from a generated map)"
}
}
}List all available hex map game types with configuration options
No arguments.
{
"type": "object",
"properties": {}
}Find shortest path between two hex coordinates
| Argument | Type | Description |
|---|---|---|
| endQ* | number | End Q |
| endR* | number | End R |
| game | string | Game context for movement costs |
| seed | string | Map seed |
| startQ* | number | Start Q |
| startR* | number | Start R |
{
"type": "object",
"required": [
"startQ",
"startR",
"endQ",
"endR"
],
"properties": {
"endQ": {
"type": "number",
"description": "End Q"
},
"endR": {
"type": "number",
"description": "End R"
},
"game": {
"type": "string",
"description": "Game context for movement costs"
},
"seed": {
"type": "string",
"description": "Map seed"
},
"startQ": {
"type": "number",
"description": "Start Q"
},
"startR": {
"type": "number",
"description": "Start R"
}
}
}Get the current Mod Jam status (active jam, deadline, submissions)
No arguments.
{
"type": "object",
"properties": {}
}Get time remaining in the current Mod Jam
No arguments.
{
"type": "object",
"properties": {}
}Get voting status for the current Mod Jam
No arguments.
{
"type": "object",
"properties": {}
}Generate random territory/resource setup for a Nukes game
| Argument | Type | Description |
|---|---|---|
| players | number | Number of players (2-6, default: 2) |
{
"type": "object",
"properties": {
"players": {
"type": "number",
"description": "Number of players (2-6, default: 2)"
}
}
}Ask the oracle a yes/no question with likelihood modifier
| Argument | Type | Description |
|---|---|---|
| question* | string | Yes/no question |
| likelihood | string | How likely is yes? (default: even) |
{
"type": "object",
"required": [
"question"
],
"properties": {
"question": {
"type": "string",
"description": "Yes/no question"
},
"likelihood": {
"enum": [
"certain",
"likely",
"even",
"unlikely",
"impossible"
],
"type": "string",
"description": "How likely is yes? (default: even)"
}
}
}Generate a tabletop RPG encounter with CR-appropriate monsters, terrain, and loot (D&D 5e or Pathfinder 1e)
| Argument | Type | Description |
|---|---|---|
| system | string | Game system (default: dnd-5e) |
| terrain | string | Terrain type (omit for random) |
| difficulty | string | Encounter difficulty (default: medium) |
| party_size | number | Number of players 1-10 (default: 4) |
| party_level | number | Average party level 1-20 (default: 5) |
| monster_type | string | Filter by type (undead, dragon, beast, etc) |
{
"type": "object",
"properties": {
"system": {
"enum": [
"dnd-5e",
"pathfinder-1e"
],
"type": "string",
"description": "Game system (default: dnd-5e)"
},
"terrain": {
"type": "string",
"description": "Terrain type (omit for random)"
},
"difficulty": {
"enum": [
"easy",
"medium",
"hard",
"deadly"
],
"type": "string",
"description": "Encounter difficulty (default: medium)"
},
"party_size": {
"type": "number",
"description": "Number of players 1-10 (default: 4)"
},
"party_level": {
"type": "number",
"description": "Average party level 1-20 (default: 5)"
},
"monster_type": {
"type": "string",
"description": "Filter by type (undead, dragon, beast, etc)"
}
}
}Resolve oracle cross-references. Given a result like "Action + Theme", follows references and returns expanded results
| Argument | Type | Description |
|---|---|---|
| game | string | Game system (default: starforged) |
| result* | string | Oracle result text to interpret |
| source_table | string | Table ID the result came from |
{
"type": "object",
"required": [
"result"
],
"properties": {
"game": {
"type": "string",
"description": "Game system (default: starforged)"
},
"result": {
"type": "string",
"description": "Oracle result text to interpret"
},
"source_table": {
"type": "string",
"description": "Table ID the result came from"
}
}
}List all supported RPG systems with oracle tables and entity data availability
No arguments.
{
"type": "object",
"properties": {}
}List all predefined scene recipes — curated multi-table compositions that produce coherent narrative prompts
| Argument | Type | Description |
|---|---|---|
| game | string | Filter by game system (omit for all) |
{
"type": "object",
"properties": {
"game": {
"type": "string",
"description": "Filter by game system (omit for all)"
}
}
}List available oracle tables for a system
| Argument | Type | Description |
|---|---|---|
| system* | string | RPG system slug |
{
"type": "object",
"required": [
"system"
],
"properties": {
"system": {
"type": "string",
"description": "RPG system slug"
}
}
}Roll on a random oracle table (Ironsworn, Starforged, Maze Rats, etc)
| Argument | Type | Description |
|---|---|---|
| table | string | Specific table name (omit for random) |
| system* | string | RPG system slug (ironsworn, starforged, maze-rats, cairn, knave, fate-core) |
{
"type": "object",
"required": [
"system"
],
"properties": {
"table": {
"type": "string",
"description": "Specific table name (omit for random)"
},
"system": {
"type": "string",
"description": "RPG system slug (ironsworn, starforged, maze-rats, cairn, knave, fate-core)"
}
}
}Generate a scene using oracle tables. With a recipe, rolls each table in the recipe, resolves cross-references, and composes a narrative sentence. Without, picks random tables.
| Argument | Type | Description |
|---|---|---|
| type | string | Scene type for random mode (default: event) |
| recipe | string | Recipe ID (from oracle_list_recipes) — rolls each table in the recipe |
| region | string | Region for Starforged region-aware recipes |
| system | string | RPG system slug (default: ironsworn) |
{
"type": "object",
"properties": {
"type": {
"enum": [
"location",
"npc",
"event",
"combat"
],
"type": "string",
"description": "Scene type for random mode (default: event)"
},
"recipe": {
"type": "string",
"description": "Recipe ID (from oracle_list_recipes) — rolls each table in the recipe"
},
"region": {
"enum": [
"terminus",
"outlands",
"expanse"
],
"type": "string",
"description": "Region for Starforged region-aware recipes"
},
"system": {
"type": "string",
"description": "RPG system slug (default: ironsworn)"
}
}
}View the complete contents of an oracle table — all entries with roll ranges
| Argument | Type | Description |
|---|---|---|
| game | string | Game system (default: starforged) |
| table* | string | Table ID to view |
{
"type": "object",
"required": [
"table"
],
"properties": {
"game": {
"type": "string",
"description": "Game system (default: starforged)"
},
"table": {
"type": "string",
"description": "Table ID to view"
}
}
}Get full details and piece list for a specific set
| Argument | Type | Description |
|---|---|---|
| set* | string | Set name or ID |
{
"type": "object",
"required": [
"set"
],
"properties": {
"set": {
"type": "string",
"description": "Set name or ID"
}
}
}Search the piece set gallery by name, style, or game type
| Argument | Type | Description |
|---|---|---|
| limit | number | Max results (default 10) |
| query* | string | Search term (e.g. "staunton", "pixel", "shogi") |
| family | string | Filter by game family (chess, shogi, xiangqi, draughts, go, etc) |
{
"type": "object",
"required": [
"query"
],
"properties": {
"limit": {
"type": "number",
"description": "Max results (default 10)"
},
"query": {
"type": "string",
"description": "Search term (e.g. \"staunton\", \"pixel\", \"shogi\")"
},
"family": {
"type": "string",
"description": "Filter by game family (chess, shogi, xiangqi, draughts, go, etc)"
}
}
}Get statistics about the piece gallery (total sets, styles, authors, game families)
No arguments.
{
"type": "object",
"properties": {}
}Apply a move to the game and return the new state. Pass the move object exactly as returned by play_get_moves (format varies by family: chess uses {from,to}, go uses {coord} or {action:"pass"}).
| Argument | Type | Description |
|---|---|---|
| move* | object | Move object from play_get_moves (e.g. {from:"e2",to:"e4"} for chess, {coord:40} for go, {action:"pass"}) |
| state* | object | Game state object from play_create_game or a previous play_apply_move |
{
"type": "object",
"required": [
"state",
"move"
],
"properties": {
"move": {
"type": "object",
"description": "Move object from play_get_moves (e.g. {from:\"e2\",to:\"e4\"} for chess, {coord:40} for go, {action:\"pass\"})"
},
"state": {
"type": "object",
"description": "Game state object from play_create_game or a previous play_apply_move"
}
}
}Check the current game status: whose turn it is, whether the game is over, and who won.
| Argument | Type | Description |
|---|---|---|
| state* | object | Game state object from play_create_game or play_apply_move |
{
"type": "object",
"required": [
"state"
],
"properties": {
"state": {
"type": "object",
"description": "Game state object from play_create_game or play_apply_move"
}
}
}Create a new game instance for a given family. Returns initial state to pass to subsequent calls. Variant can include flags like "grand+random" or "standard+drops".
| Argument | Type | Description |
|---|---|---|
| family* | string | Game family name (chess, draughts, go, reversi, shogi, xiangqi, mancala, morris, hex, landlords-game, backgammon, standard-52, bavarian-32, flower-48, double-six-dominoes, mahjong, standard-dice, agon, asalto, chaupar, dou-shou-qi, fanorona, halma, nyout, pachisi, royal-ur, senet, stern-halma, surakarta, tafl) |
| rngSeed | number | Optional RNG seed for deterministic games |
| variant | string | Variant slug, optionally with flags (e.g. "grand", "grand+random", "standard+drops") |
{
"type": "object",
"required": [
"family"
],
"properties": {
"family": {
"type": "string",
"description": "Game family name (chess, draughts, go, reversi, shogi, xiangqi, mancala, morris, hex, landlords-game, backgammon, standard-52, bavarian-32, flower-48, double-six-dominoes, mahjong, standard-dice, agon, asalto, chaupar, dou-shou-qi, fanorona, halma, nyout, pachisi, royal-ur, senet, stern-halma, surakarta, tafl)"
},
"rngSeed": {
"type": "number",
"description": "Optional RNG seed for deterministic games"
},
"variant": {
"type": "string",
"description": "Variant slug, optionally with flags (e.g. \"grand\", \"grand+random\", \"standard+drops\")"
}
}
}Export the current board position as a FEN-style setup string, in the form the variant's own frontmatter declares its starting position. Card, tile and dice games have no board position to export.
| Argument | Type | Description |
|---|---|---|
| state* | object | Game state object from play_create_game or play_apply_move |
{
"type": "object",
"required": [
"state"
],
"properties": {
"state": {
"type": "object",
"description": "Game state object from play_create_game or play_apply_move"
}
}
}Get the full engine definition (topology, render config, pieces, setup FEN) for a game variant. Returns the resolved frontmatter used to render and play the game.
| Argument | Type | Description |
|---|---|---|
| family* | string | Game family (chess, draughts, go, reversi, shogi, xiangqi, mancala, morris, hex, landlords-game, backgammon, standard-52, bavarian-32, flower-48, double-six-dominoes, mahjong, standard-dice, agon, asalto, chaupar, dou-shou-qi, fanorona, halma, nyout, pachisi, royal-ur, senet, stern-halma, surakarta, tafl) |
| variant | string | Variant slug (default: the family's default game) |
{
"type": "object",
"required": [
"family"
],
"properties": {
"family": {
"type": "string",
"description": "Game family (chess, draughts, go, reversi, shogi, xiangqi, mancala, morris, hex, landlords-game, backgammon, standard-52, bavarian-32, flower-48, double-six-dominoes, mahjong, standard-dice, agon, asalto, chaupar, dou-shou-qi, fanorona, halma, nyout, pachisi, royal-ur, senet, stern-halma, surakarta, tafl)"
},
"variant": {
"type": "string",
"description": "Variant slug (default: the family's default game)"
}
}
}Get all legal moves for the current position. Requires state from play_create_game or play_apply_move.
| Argument | Type | Description |
|---|---|---|
| state* | object | Game state object returned by play_create_game or play_apply_move |
{
"type": "object",
"required": [
"state"
],
"properties": {
"state": {
"type": "object",
"description": "Game state object returned by play_create_game or play_apply_move"
}
}
}List all playable game families supported by the engine (chess, draughts, go, reversi, shogi, xiangqi, mancala, morris, hex, landlords-game, backgammon, standard-52, bavarian-32, flower-48, double-six-dominoes, mahjong, standard-dice, agon, asalto, chaupar, dou-shou-qi, fanorona, halma, nyout, pachisi, royal-ur, senet, stern-halma, surakarta, tafl)
No arguments.
{
"type": "object",
"properties": {}
}List available variants for a game family. Each variant can be passed to play_create_game. Variants with flags (e.g. +random) can be requested as "slug+flag".
| Argument | Type | Description |
|---|---|---|
| family* | string | Game family (chess, draughts, go, reversi, shogi, xiangqi, mancala, morris, hex, landlords-game, backgammon, standard-52, bavarian-32, flower-48, double-six-dominoes, mahjong, standard-dice, agon, asalto, chaupar, dou-shou-qi, fanorona, halma, nyout, pachisi, royal-ur, senet, stern-halma, surakarta, tafl) |
{
"type": "object",
"required": [
"family"
],
"properties": {
"family": {
"type": "string",
"description": "Game family (chess, draughts, go, reversi, shogi, xiangqi, mancala, morris, hex, landlords-game, backgammon, standard-52, bavarian-32, flower-48, double-six-dominoes, mahjong, standard-dice, agon, asalto, chaupar, dou-shou-qi, fanorona, halma, nyout, pachisi, royal-ur, senet, stern-halma, surakarta, tafl)"
}
}
}Create a game from a FEN-style setup string, as returned by play_export_fen. Pass the same variant the position was exported from.
| Argument | Type | Description |
|---|---|---|
| fen* | string | Position string in FEN-style notation for the family |
| family* | string | Game family (chess, draughts, go, reversi, shogi, xiangqi, mancala, morris, hex, landlords-game, backgammon, standard-52, bavarian-32, flower-48, double-six-dominoes, mahjong, standard-dice, agon, asalto, chaupar, dou-shou-qi, fanorona, halma, nyout, pachisi, royal-ur, senet, stern-halma, surakarta, tafl) |
| variant | string | Optional variant slug (default: the family's default game) |
{
"type": "object",
"required": [
"family",
"fen"
],
"properties": {
"fen": {
"type": "string",
"description": "Position string in FEN-style notation for the family"
},
"family": {
"type": "string",
"description": "Game family (chess, draughts, go, reversi, shogi, xiangqi, mancala, morris, hex, landlords-game, backgammon, standard-52, bavarian-32, flower-48, double-six-dominoes, mahjong, standard-dice, agon, asalto, chaupar, dou-shou-qi, fanorona, halma, nyout, pachisi, royal-ur, senet, stern-halma, surakarta, tafl)"
},
"variant": {
"type": "string",
"description": "Optional variant slug (default: the family's default game)"
}
}
}Apply a sequence of moves to a game and return the final state. Stops at the first illegal move. Move objects must match play_get_moves format.
| Argument | Type | Description |
|---|---|---|
| moves* | array | Array of move objects in the format returned by play_get_moves |
| state* | object | Game state object from play_create_game or play_apply_move |
{
"type": "object",
"required": [
"state",
"moves"
],
"properties": {
"moves": {
"type": "array",
"items": {
"type": "object"
},
"description": "Array of move objects in the format returned by play_get_moves"
},
"state": {
"type": "object",
"description": "Game state object from play_create_game or play_apply_move"
}
}
}Render the current board position as SVG for any playable family (chess, draughts, go, reversi, shogi, xiangqi, mancala, morris, hex, landlords-game, backgammon, standard-52, bavarian-32, flower-48, double-six-dominoes, mahjong, standard-dice, agon, asalto, chaupar, dou-shou-qi, fanorona, halma, nyout, pachisi, royal-ur, senet, stern-halma, surakarta, tafl).
| Argument | Type | Description |
|---|---|---|
| size | integer | Board width in pixels for PNG output (default: 480, max: 2048) |
| state* | object | Game state object from play_create_game or play_apply_move |
| highlights | array | Optional cells to highlight (e.g. [{key: 52, color: "#ff0"}]) |
{
"type": "object",
"required": [
"state"
],
"properties": {
"size": {
"type": "integer",
"description": "Board width in pixels for PNG output (default: 480, max: 2048)"
},
"state": {
"type": "object",
"description": "Game state object from play_create_game or play_apply_move"
},
"highlights": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "integer"
},
"color": {
"type": "string"
}
}
},
"description": "Optional cells to highlight (e.g. [{key: 52, color: \"#ff0\"}])"
}
}
}Use AI to analyse the position and suggest the best move. Supports 5 difficulty levels across all 30 playable families.
| Argument | Type | Description |
|---|---|---|
| state* | object | Game state object from play_create_game or play_apply_move |
| difficulty | string | AI difficulty level (default: medium) |
{
"type": "object",
"required": [
"state"
],
"properties": {
"state": {
"type": "object",
"description": "Game state object from play_create_game or play_apply_move"
},
"difficulty": {
"enum": [
"beginner",
"easy",
"medium",
"hard",
"expert"
],
"type": "string",
"description": "AI difficulty level (default: medium)"
}
}
}Check whether a move is legal in the current position without applying it. Pass the move object in the same format as play_get_moves returns.
| Argument | Type | Description |
|---|---|---|
| move* | object | Move object to validate (same format as play_get_moves output) |
| state* | object | Game state object from play_create_game or play_apply_move |
{
"type": "object",
"required": [
"state",
"move"
],
"properties": {
"move": {
"type": "object",
"description": "Move object to validate (same format as play_get_moves output)"
},
"state": {
"type": "object",
"description": "Game state object from play_create_game or play_apply_move"
}
}
}Randomise turn order for a list of players
| Argument | Type | Description |
|---|---|---|
| players* | array | Player names |
{
"type": "object",
"required": [
"players"
],
"properties": {
"players": {
"type": "array",
"items": {
"type": "string"
},
"description": "Player names"
}
}
}Browse entities by category with pagination
| Argument | Type | Description |
|---|---|---|
| game | string | Alias for system |
| page | number | Page number (default 1) |
| system* | string | System slug |
| category* | string | Category (spell, monster, class, item, feat, etc) |
| pageSize | number | Items per page (default 20) |
{
"type": "object",
"required": [
"system",
"category"
],
"properties": {
"game": {
"type": "string",
"description": "Alias for system"
},
"page": {
"type": "number",
"description": "Page number (default 1)"
},
"system": {
"type": "string",
"description": "System slug"
},
"category": {
"type": "string",
"description": "Category (spell, monster, class, item, feat, etc)"
},
"pageSize": {
"type": "number",
"description": "Items per page (default 20)"
}
}
}Generate a random character for an RPG system (D&D 5e, Pathfinder, Ironsworn, Cairn, Knave, etc)
| Argument | Type | Description |
|---|---|---|
| class | string | Class preference (omit for random) |
| level | number | Character level (default: 1) |
| system* | string | RPG system (dnd-5e, pathfinder-1e, ironsworn, starforged, cairn, knave, maze-rats, dungeon-world) |
{
"type": "object",
"required": [
"system"
],
"properties": {
"class": {
"type": "string",
"description": "Class preference (omit for random)"
},
"level": {
"type": "number",
"description": "Character level (default: 1)"
},
"system": {
"type": "string",
"description": "RPG system (dnd-5e, pathfinder-1e, ironsworn, starforged, cairn, knave, maze-rats, dungeon-world)"
}
}
}Get full details of a specific RPG entity by name
| Argument | Type | Description |
|---|---|---|
| game | string | Alias for system |
| name* | string | Entity name |
| system | string | System slug |
| category | string | Category filter (spells, monsters, classes, etc) |
{
"type": "object",
"required": [
"name"
],
"properties": {
"game": {
"type": "string",
"description": "Alias for system"
},
"name": {
"type": "string",
"description": "Entity name"
},
"system": {
"type": "string",
"description": "System slug"
},
"category": {
"type": "string",
"description": "Category filter (spells, monsters, classes, etc)"
}
}
}List entity categories for an RPG system (spells, monsters, classes, equipment, etc)
| Argument | Type | Description |
|---|---|---|
| game | string | Game system slug (omit for all systems) |
| system | string | Alias for game |
{
"type": "object",
"properties": {
"game": {
"type": "string",
"description": "Game system slug (omit for all systems)"
},
"system": {
"type": "string",
"description": "Alias for game"
}
}
}Generate random loot/treasure for a system and tier
| Argument | Type | Description |
|---|---|---|
| tier | string | Loot tier (default: minor) |
| count | number | Number of items (default 3) |
| system | string | System slug (default: dnd-5e) |
{
"type": "object",
"properties": {
"tier": {
"enum": [
"minor",
"major",
"legendary"
],
"type": "string",
"description": "Loot tier (default: minor)"
},
"count": {
"type": "number",
"description": "Number of items (default 3)"
},
"system": {
"type": "string",
"description": "System slug (default: dnd-5e)"
}
}
}Get random entities from an RPG system for inspiration or encounter prep
| Argument | Type | Description |
|---|---|---|
| game* | string | Game system slug |
| count | number | Number of random picks 1-10 (default: 1) |
| system | string | Alias for game |
| category | string | Category to draw from (omit for any) |
{
"type": "object",
"required": [
"game"
],
"properties": {
"game": {
"type": "string",
"description": "Game system slug"
},
"count": {
"type": "number",
"description": "Number of random picks 1-10 (default: 1)"
},
"system": {
"type": "string",
"description": "Alias for game"
},
"category": {
"type": "string",
"description": "Category to draw from (omit for any)"
}
}
}Generate a random encounter for a system and difficulty level
| Argument | Type | Description |
|---|---|---|
| type | string | Monster type filter (beast, undead, fiend, dragon, etc) |
| system | string | System slug (default: dnd-5e) |
| difficulty | string | Encounter difficulty |
{
"type": "object",
"properties": {
"type": {
"type": "string",
"description": "Monster type filter (beast, undead, fiend, dragon, etc)"
},
"system": {
"type": "string",
"description": "System slug (default: dnd-5e)"
},
"difficulty": {
"enum": [
"easy",
"medium",
"hard",
"deadly"
],
"type": "string",
"description": "Encounter difficulty"
}
}
}Search RPG entities (spells, monsters, classes, items) across all systems
| Argument | Type | Description |
|---|---|---|
| game | string | Alias for system |
| limit | number | Max results (default 10) |
| query* | string | Search term |
| system | string | Limit to system (dnd-5e, pathfinder-1e, etc) |
| category | string | Entity category (spell, monster, class, item) |
{
"type": "object",
"required": [
"query"
],
"properties": {
"game": {
"type": "string",
"description": "Alias for system"
},
"limit": {
"type": "number",
"description": "Max results (default 10)"
},
"query": {
"type": "string",
"description": "Search term"
},
"system": {
"type": "string",
"description": "Limit to system (dnd-5e, pathfinder-1e, etc)"
},
"category": {
"type": "string",
"description": "Entity category (spell, monster, class, item)"
}
}
}Get board diagram SVG URL for a game variant. Returns the diagram path, topology, and rendering metadata.
| Argument | Type | Description |
|---|---|---|
| game* | string | Game family slug (e.g. chess, go, agon) |
| variant | string | Variant slug (default: standard) |
{
"type": "object",
"required": [
"game"
],
"properties": {
"game": {
"type": "string",
"description": "Game family slug (e.g. chess, go, agon)"
},
"variant": {
"type": "string",
"description": "Variant slug (default: standard)"
}
}
}Get full rulebook content for a specific game (markdown). For metadata only, use rules_get_game_meta instead.
| Argument | Type | Description |
|---|---|---|
| game* | string | Game slug (e.g. chess, dnd-5e, catan) |
{
"type": "object",
"required": [
"game"
],
"properties": {
"game": {
"type": "string",
"description": "Game slug (e.g. chess, dnd-5e, catan)"
}
}
}Get structured metadata for a game: players, duration, complexity, mechanics, how_to_play, variant list, page list, related games. Lightweight alternative to fetching the full rulebook.
| Argument | Type | Description |
|---|---|---|
| game* | string | Game slug (e.g. chess, backgammon, cairn) |
{
"type": "object",
"required": [
"game"
],
"properties": {
"game": {
"type": "string",
"description": "Game slug (e.g. chess, backgammon, cairn)"
}
}
}Get a specific page/section from a game rulebook (e.g. character creation, combat rules, marketplace). Use rules_get_game_meta to see available pages.
| Argument | Type | Description |
|---|---|---|
| game* | string | Game slug (e.g. cairn, dnd-5e) |
| page* | string | Page slug (e.g. character-creation, combat-and-difficulty) |
| section | string | Section name (e.g. rules, classes, spells). Default: rules |
{
"type": "object",
"required": [
"game",
"page"
],
"properties": {
"game": {
"type": "string",
"description": "Game slug (e.g. cairn, dnd-5e)"
},
"page": {
"type": "string",
"description": "Page slug (e.g. character-creation, combat-and-difficulty)"
},
"section": {
"type": "string",
"description": "Section name (e.g. rules, classes, spells). Default: rules"
}
}
}Get rules for a specific game variant
| Argument | Type | Description |
|---|---|---|
| game* | string | Game slug |
| variant* | string | Variant slug |
{
"type": "object",
"required": [
"game",
"variant"
],
"properties": {
"game": {
"type": "string",
"description": "Game slug"
},
"variant": {
"type": "string",
"description": "Variant slug"
}
}
}List all variants for a game with structured metadata (players, board, playable status, topology, engine config). Much richer than parsing the rulebook.
| Argument | Type | Description |
|---|---|---|
| game* | string | Game slug (e.g. chess, backgammon, draughts) |
| playable | boolean | Filter to only engine-playable variants |
| topology | string | Filter by board topology (grid, hex, track, graph, tableau) |
{
"type": "object",
"required": [
"game"
],
"properties": {
"game": {
"type": "string",
"description": "Game slug (e.g. chess, backgammon, draughts)"
},
"playable": {
"type": "boolean",
"description": "Filter to only engine-playable variants"
},
"topology": {
"type": "string",
"description": "Filter by board topology (grid, hex, track, graph, tableau)"
}
}
}List all available game rulebooks with metadata (players, duration, complexity, mechanics). Filterable by type, complexity, and mechanics.
| Argument | Type | Description |
|---|---|---|
| status | string | Filter by status (default: all) |
| category | string | Filter by type (standalone, hub, classic, rpg, component, platform, mod, game) |
| mechanic | string | Filter by mechanic (e.g. dice, capture, hex, oracle, narrative) |
| complexity | string | Filter by complexity level |
{
"type": "object",
"properties": {
"status": {
"enum": [
"live",
"alpha",
"playtest"
],
"type": "string",
"description": "Filter by status (default: all)"
},
"category": {
"type": "string",
"description": "Filter by type (standalone, hub, classic, rpg, component, platform, mod, game)"
},
"mechanic": {
"type": "string",
"description": "Filter by mechanic (e.g. dice, capture, hex, oracle, narrative)"
},
"complexity": {
"enum": [
"simple",
"moderate",
"complex"
],
"type": "string",
"description": "Filter by complexity level"
}
}
}Get a random game suggestion from the library
| Argument | Type | Description |
|---|---|---|
| players | number | Number of players available |
| maxDuration | number | Maximum game duration in minutes |
{
"type": "object",
"properties": {
"players": {
"type": "number",
"description": "Number of players available"
},
"maxDuration": {
"type": "number",
"description": "Maximum game duration in minutes"
}
}
}Full-text search across all published rulebooks. Returns section-typed results with deep-link anchors.
| Argument | Type | Description |
|---|---|---|
| game | string | Limit to specific game slug |
| limit | number | Max results (default 10) |
| query* | string | Search query |
| sectionType | string | Filter by section type (general, board, pieces, setup, movement, capture, winning, special, variants) |
{
"type": "object",
"required": [
"query"
],
"properties": {
"game": {
"type": "string",
"description": "Limit to specific game slug"
},
"limit": {
"type": "number",
"description": "Max results (default 10)"
},
"query": {
"type": "string",
"description": "Search query"
},
"sectionType": {
"type": "string",
"description": "Filter by section type (general, board, pieces, setup, movement, capture, winning, special, variants)"
}
}
}Draw random characters from the Talisman 4e (revised) base set for a character lottery
| Argument | Type | Description |
|---|---|---|
| count | number | Number of characters to draw (2-6, default: 4) |
{
"type": "object",
"properties": {
"count": {
"type": "number",
"description": "Number of characters to draw (2-6, default: 4)"
}
}
}Draw a random encounter for a Talisman ring (outer, middle, inner, crown)
| Argument | Type | Description |
|---|---|---|
| ring | string | Ring to draw from (default: outer) |
{
"type": "object",
"properties": {
"ring": {
"enum": [
"outer",
"middle",
"inner",
"crown"
],
"type": "string",
"description": "Ring to draw from (default: outer)"
}
}
}Randomly divide players into teams
| Argument | Type | Description |
|---|---|---|
| count | number | Number of teams (default 2) |
| teams | number | Alias for count |
| members | string | Comma-separated names (alternative to array) |
| players* | array | Player names |
{
"type": "object",
"required": [
"players"
],
"properties": {
"count": {
"type": "number",
"description": "Number of teams (default 2)"
},
"teams": {
"type": "number",
"description": "Alias for count"
},
"members": {
"type": "string",
"description": "Comma-separated names (alternative to array)"
},
"players": {
"type": "array",
"items": {
"type": "string"
},
"description": "Player names"
}
}
}Milty-style TI4 draft with pick pools per player
| Argument | Type | Description |
|---|---|---|
| choices | number | Factions per player to choose from (default: 3) |
| players | number | Number of players (3-8, default: 6) |
| expansions | array | Expansion filter (e.g. ["base","pok"]). Default: all |
{
"type": "object",
"properties": {
"choices": {
"type": "number",
"description": "Factions per player to choose from (default: 3)"
},
"players": {
"type": "number",
"description": "Number of players (3-8, default: 6)"
},
"expansions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Expansion filter (e.g. [\"base\",\"pok\"]). Default: all"
}
}
}Draw random agenda cards for TI4 political phase
| Argument | Type | Description |
|---|---|---|
| type | string | Filter by type |
| count | number | Number to draw (default: 2) |
| expansions | array | Expansion filter |
{
"type": "object",
"properties": {
"type": {
"enum": [
"law",
"directive"
],
"type": "string",
"description": "Filter by type"
},
"count": {
"type": "number",
"description": "Number to draw (default: 2)"
},
"expansions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Expansion filter"
}
}
}Draw random public objectives for TI4
| Argument | Type | Description |
|---|---|---|
| count | number | Number to draw (default: 5) |
| stage | number | Stage 1 or 2 (default: both) |
| expansions | array | Expansion filter |
{
"type": "object",
"properties": {
"count": {
"type": "number",
"description": "Number to draw (default: 5)"
},
"stage": {
"enum": [
1,
2
],
"type": "number",
"description": "Stage 1 or 2 (default: both)"
},
"expansions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Expansion filter"
}
}
}List all TI4 factions with colors, flags, and expansion info
| Argument | Type | Description |
|---|---|---|
| expansions | array | Filter by expansion (e.g. ["base","pok"]). Default: all |
{
"type": "object",
"properties": {
"expansions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by expansion (e.g. [\"base\",\"pok\"]). Default: all"
}
}
}Generate random faction assignments for Twilight Imperium 4th Edition
| Argument | Type | Description |
|---|---|---|
| players* | number | Number of players (3-8) |
| expansions | array | Expansion filter (e.g. ["base","pok"]). Default: all |
{
"type": "object",
"required": [
"players"
],
"properties": {
"players": {
"type": "number",
"description": "Number of players (3-8)"
},
"expansions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Expansion filter (e.g. [\"base\",\"pok\"]). Default: all"
}
}
}Get details of a specific tile set with all tile types
| Argument | Type | Description |
|---|---|---|
| set* | string | Tile set ID or name |
{
"type": "object",
"required": [
"set"
],
"properties": {
"set": {
"type": "string",
"description": "Tile set ID or name"
}
}
}Search hex tile sets by name, game, or terrain type
| Argument | Type | Description |
|---|---|---|
| query | string | Search term (omit to list all) |
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Search term (omit to list all)"
}
}
}Get statistics about available tile sets
No arguments.
{
"type": "object",
"properties": {}
}Suggest time controls for a game based on player count and complexity
| Argument | Type | Description |
|---|---|---|
| game* | string | Game name |
| players | number | Number of players |
{
"type": "object",
"required": [
"game"
],
"properties": {
"game": {
"type": "string",
"description": "Game name"
},
"players": {
"type": "number",
"description": "Number of players"
}
}
}