
Moddable Games Tools
15 tools for chess variant analysis, hex map generation, and board game utilities
What it can do
What data it sees
Do you need an account
No: the server works without sign-in
15 tools for chess variant analysis, hex map generation, and board game utilities
How to connect
How to connect Moddable Games Tools to Claude
The server address to paste into Claude settings:
https://tools.moddable.games/mcp
- Open Claude (claude.ai or the desktop app).
- Go to Settings → Connectors.
- Click Add custom connector.
- Paste the server address copied below into Remote MCP server URL and click Add.
- In a chat, click + → Connectors and switch the new connector on.
Custom connectors are available on Free, Pro, Max, Team and Enterprise plans (Free is limited to one). On Team and Enterprise an organization Owner adds the connector first under Organization settings → Connectors.
Authorization
After you click Add, a sign-in window for the service opens. Sign in with your own account and approve access. Claude never sees your password.
How to connect Moddable Games Tools to ChatGPT
The server address to paste into ChatGPT settings:
https://tools.moddable.games/mcp
- Open ChatGPT in a browser (chatgpt.com). A Plus, Pro, Business, Enterprise or Edu plan is required.
- Turn on developer mode once: Settings → Apps → Advanced settings → Developer mode.
- Open Settings → Connectors and click Create.
- Fill in the form: Name (anything), Description (one line about what the service does), MCP server URL (copy it below).
- Under Authentication choose OAuth if the service requires sign-in, otherwise None. Click Create.
- In a new chat open + → Apps/Connectors and enable the connector.
OpenAI has renamed this section before (Connectors → Apps/Plugins). If the label differs, search settings for "developer mode". On Business/Enterprise workspaces an admin must allow custom connectors first.
Authorization
On first use ChatGPT opens the service's sign-in window. Sign in and approve access.
How to connect Moddable Games Tools to Cursor
The server address to paste into Cursor settings:
https://tools.moddable.games/mcp
Fastest: click Open in Cursor below and confirm the prompt.
Manually:
- In Cursor open Settings → Cursor Settings → MCP and click Add new global MCP server.
- Paste the JSON copied below into
~/.cursor/mcp.json(per project:.cursor/mcp.jsonin the repo root). - Save the file. The server appears in the MCP list; authorize it there if asked.
Authorization
If the service needs sign-in, an authorize button appears next to the server in the MCP list.
Server tool list (89)
Raw names from tools/list. Only developers need these.
| chess_generate_puzzle | Get a random chess puzzle. Filter by variant or difficulty. Variant puzzles have no themes and max rating 1400 — theme and hard difficulty filters only apply to standard puzzles. |
| chess_list_puzzle_types | List available puzzle variants, themes, and per-variant counts from the puzzle pool |
| chess_list_variants | [DEPRECATED — use play_list_variants] List chess variants. Removal: v1.0.0. |
| chess_get_legal_moves | [DEPRECATED — use play_create_game + play_get_moves] Get legal moves for a chess position. Removal: v1.0.0. |
| chess_analyze_position | [DEPRECATED — use play_suggest_move] Analyse a chess position. Removal: v1.0.0. |
| chess_make_move | [DEPRECATED — use play_apply_move] Apply a move to a chess game. Removal: v1.0.0. |
| chess_validate_move | [DEPRECATED — use play_validate_move] Check if a chess move is legal. Removal: v1.0.0. |
| chess_get_status | [DEPRECATED — use play_check_status] Get chess game status. Removal: v1.0.0. |
| chess_render_svg | [DEPRECATED — use play_render_board] Render a chess position as SVG. Removal: v1.0.0. |
| chess_make_moves | [DEPRECATED — use play_make_moves] Apply a sequence of chess moves. Removal: v1.0.0. |
| chess_get_opening_book | [REMOVED — engine#98] Opening book resolution is broken in Worker context. No replacement. |
| hex_list_games | List all available hex map game types with configuration options |
| hex_generate_map | Generate a hex map for a specific game and player count |
| hex_export_svg | Generate a hex map and export as SVG |
| hex_get_info | Get info about a specific hex coordinate (terrain, neighbours, distance) |
| hex_compute_fov | Compute field of view from a hex position |
| hex_pathfind | Find shortest path between two hex coordinates |
| play_list_families | List all playable game families supported by the engine (chess, draughts, go, reversi, shogi, xiangqi, mancala, morris, hex, landlords-game) |
| play_list_variants | 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". |
| play_get_definition | 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. |
| play_create_game | 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". |
| play_get_moves | Get all legal moves for the current position. Requires state from play_create_game or play_apply_move. |
| play_apply_move | 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"}). |
| play_check_status | Check the current game status: whose turn it is, whether the game is over, and who won. |
| play_suggest_move | Use AI to analyse the position and suggest the best move. Supports 5 difficulty levels across all 10 playable families. |
| play_render_board | Render the current board position as SVG for any playable family (chess, draughts, go, reversi, shogi, xiangqi, mancala, morris, hex, landlords-game). |
| play_export_fen | Export the current board position as a FEN-style notation string. Works for all 10 families (chess, draughts, go, reversi, shogi, xiangqi, mancala, morris, hex, landlords-game). |
| play_load_fen | Create a game state from a FEN-style position string. Works for all 10 families. |
| play_validate_move | 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. |
| play_make_moves | 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. |
| rules_list_games | List all available game rulebooks with metadata (players, duration, complexity, mechanics). Filterable by type, complexity, and mechanics. |
| rules_get_game | Get full rulebook content for a specific game (markdown). For metadata only, use rules_get_game_meta instead. |
| rules_get_game_meta | 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. |
| rules_get_page | 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. |
| rules_get_variant_list | List all variants for a game with structured metadata (players, board, playable status, topology, engine config). Much richer than parsing the rulebook. |
| rules_get_diagram | Get board diagram SVG URL for a game variant. Returns the diagram path, topology, and rendering metadata. |
| rules_get_variant | Get rules for a specific game variant |
| rules_search | Full-text search across all published rulebooks. Returns section-typed results with deep-link anchors. |
| rules_random | Get a random game suggestion from the library |
| board_gallery_search | Search the board gallery (334 rendered board layouts across 33 game families) |
| board_gallery_get | Get details of a specific board layout by ID |
| tile_gallery_search | Search hex tile sets by name, game, or terrain type |
| tile_gallery_get | Get details of a specific tile set with all tile types |
| tile_gallery_stats | Get statistics about available tile sets |
| board_gallery_stats | Get statistics about the board gallery (total boards, families, topologies) |
| piece_gallery_search | Search the piece set gallery by name, style, or game type |
| piece_gallery_get_set | Get full details and piece list for a specific set |
| piece_gallery_stats | Get statistics about the piece gallery (total sets, styles, authors, game families) |
| oracle_list_games | List all supported RPG systems with oracle tables and entity data availability |
| rpg_chargen | Generate a random character for an RPG system (D&D 5e, Pathfinder, Ironsworn, Cairn, Knave, etc) |
| oracle_roll | Roll on a random oracle table (Ironsworn, Starforged, Maze Rats, etc) |
| oracle_list_tables | List available oracle tables for a system |
| oracle_ask | Ask the oracle a yes/no question with likelihood modifier |
| oracle_scene | 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. |
| rpg_search_entities | Search RPG entities (spells, monsters, classes, items) across all systems |
| rpg_get_entity | Get full details of a specific RPG entity by name |
| rpg_random_encounter | Generate a random encounter for a system and difficulty level |
| rpg_browse_category | Browse entities by category with pagination |
| rpg_loot | Generate random loot/treasure for a system and tier |
| oracle_list_recipes | List all predefined scene recipes — curated multi-table compositions that produce coherent narrative prompts |
| oracle_interpret | Resolve oracle cross-references. Given a result like "Action + Theme", follows references and returns expanded results |
| oracle_table_view | View the complete contents of an oracle table — all entries with roll ranges |
| oracle_encounter | Generate a tabletop RPG encounter with CR-appropriate monsters, terrain, and loot (D&D 5e or Pathfinder 1e) |
| rpg_list_categories | List entity categories for an RPG system (spells, monsters, classes, equipment, etc) |
| rpg_random | Get random entities from an RPG system for inspiration or encounter prep |
| ti4_random_factions | Generate random faction assignments for Twilight Imperium 4th Edition |
| ti4_draft_factions | Milty-style TI4 draft with pick pools per player |
| ti4_list_factions | List all TI4 factions with colors, flags, and expansion info |
| ti4_draw_objectives | Draw random public objectives for TI4 |
| ti4_draw_agendas | Draw random agenda cards for TI4 political phase |
| nukes_setup_generator | Generate random territory/resource setup for a Nukes game |
| game_nukes_combat | Resolve a Nukes combat encounter between units |
| colony_dice_odds | Calculate settlement dice probability for Colony/Catan-style resource numbers |
| game_deck_create | Create, shuffle, and optionally draw/deal from a card deck |
| game_deck_list_types | List all available deck types with metadata |
| game_deck_deal | Shuffle and deal a custom deck of arbitrary named cards |
| game_score_tracker | Track scores for players in any game |
| talisman_draw_characters | Draw random characters from the Talisman 4e (revised) base set for a character lottery |
| talisman_draw_encounter | Draw a random encounter for a Talisman ring (outer, middle, inner, crown) |
| jam_status | Get the current Mod Jam status (active jam, deadline, submissions) |
| jam_timer | Get time remaining in the current Mod Jam |
| jam_vote | Get voting status for the current Mod Jam |
| dice_roll | Roll dice using standard notation (e.g. 2d6+3, 4d8, d20). Supports comma-separated pools and keep-high/low (4d6kh3). |
| coin_flip | Flip one or more coins, or pick from a list of choices |
| team_split | Randomly divide players into teams |
| random_player_order | Randomise turn order for a list of players |
| timer_suggest | Suggest time controls for a game based on player count and complexity |
| game_jam_theme | Generate a random game jam theme combining mechanics and themes |
| dice_odds | Calculate probability of meeting a target with a dice expression. Supports keep-high/low (4d6kh3). |