# Moddable Games Tools

> 15 tools for chess variant analysis, hex map generation, and board game utilities

- name: games.moddable.tools/moddable-games-tools
- version: 1.1.0
- connection class: R0 (autonomous)
- trust: 85/100
- quality: 63/100 (needs work)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/games.moddable.tools%2Fmoddable-games-tools
- tools: https://api.protogrid.dev/v1/servers/games.moddable.tools%2Fmoddable-games-tools/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "moddable-games-tools": {
      "type": "http",
      "url": "https://tools.moddable.games/mcp"
    }
  }
}
```


## Trust

- hygiene: 100
- liveness: 97
- freshness: 65
- provenance: 75
- drivers: +repository +dns-namespace +reachable +uptime-93% ~updated-132d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 63/100 (needs work)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-03-26; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 71 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- fail `tools.annotations`: no tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky ones
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: chess_validate_move (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); hex_list_games (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); ti4_random_factions (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); …
- pass `tools.token_cost`: about 7,697 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 25 (weight 15)

- warn `stability.changes`: 11 tool changes in 30 days
- fail `stability.rug_pull`: 5 tools kept their name but changed most of their description in 30 days; review before trusting them

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 89, about 7,697 tokens to load them all
- tool set hash: 37d90c66408c0663698a85577a9ff6e8
- tools last changed: 2026-09-29T11:01:39.121Z
- badge: [![protogrid quality](https://protogrid.dev/badge/games.moddable.tools/moddable-games-tools.svg)](https://protogrid.dev/servers/games.moddable.tools/moddable-games-tools)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-09-29 `chess_generate_puzzle` changed (inputSchema)
- 2026-09-28 `board_gallery_search` changed (description)
  - before: Search the board gallery (334 rendered board layouts across 33 game families)
  - after: Search the board gallery (335 rendered board layouts across 34 game families)
- 2026-09-28 `play_load_fen` changed (description, inputSchema) **meaning changed**
  - before: Create a game state from a FEN-style position string. Works for all 10 families.
  - after: Create a game from a FEN-style setup string, as returned by play_export_fen. Pass the same variant the position was exported from.
- 2026-09-28 `play_export_fen` changed (description) **meaning changed**
  - before: 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).
  - after: 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.
- 2026-09-28 `play_render_board` changed (description) **meaning changed**
  - before: Render the current board position as SVG for any playable family (chess, draughts, go, reversi, shogi, xiangqi, mancala, morris, hex, landlords-game).
  - after: 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).
- 2026-09-28 `play_suggest_move` changed (description)
  - before: Use AI to analyse the position and suggest the best move. Supports 5 difficulty levels across all 10 playable families.
  - after: Use AI to analyse the position and suggest the best move. Supports 5 difficulty levels across all 30 playable families.
- 2026-09-28 `play_create_game` changed (inputSchema)
- 2026-09-28 `play_get_definition` changed (inputSchema)
- 2026-09-28 `play_list_variants` changed (inputSchema)
- 2026-09-28 `play_list_families` changed (description) **meaning changed**
  - before: List all playable game families supported by the engine (chess, draughts, go, reversi, shogi, xiangqi, mancala, morris, hex, landlords-game)
  - after: 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)

Full history: https://api.protogrid.dev/v1/servers/games.moddable.tools%2Fmoddable-games-tools/changes

## Remotes

- https://tools.moddable.games/mcp (streamable-http, auth none, reachable true, uptime30d 0.9279279)

## Packages

_none_

## Tools (89)

- `board_gallery_get`: Get details of a specific board layout by ID
- `board_gallery_search`: Search the board gallery (335 rendered board layouts across 34 game families)
- `board_gallery_stats`: Get statistics about the board gallery (total boards, families, topologies)
- `chess_analyze_position`: [DEPRECATED — use play_suggest_move] Analyse a chess position. Removal: v1.0.0.
- `chess_generate_puzzle`: 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.
- `chess_get_legal_moves`: [DEPRECATED — use play_create_game + play_get_moves] Get legal moves for a chess position. Removal: v1.0.0.
- `chess_get_opening_book`: [REMOVED — engine#98] Opening book resolution is broken in Worker context. No replacement.
- `chess_get_status`: [DEPRECATED — use play_check_status] Get chess game status. Removal: v1.0.0.
- `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_make_move`: [DEPRECATED — use play_apply_move] Apply a move to a chess game. Removal: v1.0.0.
- `chess_make_moves`: [DEPRECATED — use play_make_moves] Apply a sequence of chess moves. Removal: v1.0.0.
- `chess_render_svg`: [DEPRECATED — use play_render_board] Render a chess position as SVG. Removal: v1.0.0.
- `chess_validate_move`: [DEPRECATED — use play_validate_move] Check if a chess move is legal. Removal: v1.0.0.
- `coin_flip`: Flip one or more coins, or pick from a list of choices
- `colony_dice_odds`: Calculate settlement dice probability for Colony/Catan-style resource numbers
- `dice_odds`: Calculate probability of meeting a target with a dice expression. Supports keep-high/low (4d6kh3).
- `dice_roll`: Roll dice using standard notation (e.g. 2d6+3, 4d8, d20). Supports comma-separated pools and keep-high/low (4d6kh3).
- `game_deck_create`: Create, shuffle, and optionally draw/deal from a card deck
- `game_deck_deal`: Shuffle and deal a custom deck of arbitrary named cards
- `game_deck_list_types`: List all available deck types with metadata
- `game_jam_theme`: Generate a random game jam theme combining mechanics and themes
- `game_nukes_combat`: Resolve a Nukes combat encounter between units
- `game_score_tracker`: Track scores for players in any game
- `hex_compute_fov`: Compute field of view from a hex position
- `hex_export_svg`: Generate a hex map and export as SVG
- `hex_generate_map`: Generate a hex map for a specific game and player count
- `hex_get_info`: Get info about a specific hex coordinate (terrain, neighbours, distance)
- `hex_list_games`: List all available hex map game types with configuration options
- `hex_pathfind`: Find shortest path between two hex coordinates
- `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
- `nukes_setup_generator`: Generate random territory/resource setup for a Nukes game
- `oracle_ask`: Ask the oracle a yes/no question with likelihood modifier
- `oracle_encounter`: Generate a tabletop RPG encounter with CR-appropriate monsters, terrain, and loot (D&D 5e or Pathfinder 1e)
- `oracle_interpret`: Resolve oracle cross-references. Given a result like "Action + Theme", follows references and returns expanded results
- `oracle_list_games`: List all supported RPG systems with oracle tables and entity data availability
- `oracle_list_recipes`: List all predefined scene recipes — curated multi-table compositions that produce coherent narrative prompts
- `oracle_list_tables`: List available oracle tables for a system
- `oracle_roll`: Roll on a random oracle table (Ironsworn, Starforged, Maze Rats, etc)
- `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.
- `oracle_table_view`: View the complete contents of an oracle table — all entries with roll ranges
- `piece_gallery_get_set`: Get full details and piece list for a specific set
- `piece_gallery_search`: Search the piece set gallery by name, style, or game type
- `piece_gallery_stats`: Get statistics about the piece gallery (total sets, styles, authors, game families)
- `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_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_export_fen`: 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.
- `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_get_moves`: Get all legal moves for the current position. Requires state from play_create_game or play_apply_move.
- `play_list_families`: 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)
- `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_load_fen`: Create a game from a FEN-style setup string, as returned by play_export_fen. Pass the same variant the position was exported from.
- `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.
- `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, 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).
- `play_suggest_move`: Use AI to analyse the position and suggest the best move. Supports 5 difficulty levels across all 30 playable 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.
- `random_player_order`: Randomise turn order for a list of players
- `rpg_browse_category`: Browse entities by category with pagination
- `rpg_chargen`: Generate a random character for an RPG system (D&D 5e, Pathfinder, Ironsworn, Cairn, Knave, etc)
- `rpg_get_entity`: Get full details of a specific RPG entity by name
- `rpg_list_categories`: List entity categories for an RPG system (spells, monsters, classes, equipment, etc)
- `rpg_loot`: Generate random loot/treasure for a system and tier
- `rpg_random`: Get random entities from an RPG system for inspiration or encounter prep
- `rpg_random_encounter`: Generate a random encounter for a system and difficulty level
- `rpg_search_entities`: Search RPG entities (spells, monsters, classes, items) across all systems
- `rules_get_diagram`: Get board diagram SVG URL for a game variant. Returns the diagram path, topology, and rendering metadata.
- `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`: Get rules for a specific game variant
- `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_list_games`: List all available game rulebooks with metadata (players, duration, complexity, mechanics). Filterable by type, complexity, and mechanics.
- `rules_random`: Get a random game suggestion from the library
- `rules_search`: Full-text search across all published rulebooks. Returns section-typed results with deep-link anchors.
- `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)
- `team_split`: Randomly divide players into teams
- `ti4_draft_factions`: Milty-style TI4 draft with pick pools per player
- `ti4_draw_agendas`: Draw random agenda cards for TI4 political phase
- `ti4_draw_objectives`: Draw random public objectives for TI4
- `ti4_list_factions`: List all TI4 factions with colors, flags, and expansion info
- `ti4_random_factions`: Generate random faction assignments for Twilight Imperium 4th Edition
- `tile_gallery_get`: Get details of a specific tile set with all tile types
- `tile_gallery_search`: Search hex tile sets by name, game, or terrain type
- `tile_gallery_stats`: Get statistics about available tile sets
- `timer_suggest`: Suggest time controls for a game based on player count and complexity
