# Moddable Games Tools (remote · tools.moddable.games)

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

- Trust score: 66/100 (medium)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- remote · `tools.moddable.games`: 66/100 (this document), [markdown](https://verifymcp.io/servers/games-moddable-tools-moddable-games-tools/tools.md), [page](https://verifymcp.io/servers/games-moddable-tools-moddable-games-tools/tools)

## Channel facts

- Endpoint: `https://tools.moddable.games/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.1.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Endpoint Security**: 57/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation not fully verified: no authorisation is required to call this server, and 56 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe.
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 84/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 5477 tokens (~91/item across 60 items; 56 tools + 4 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 40/100
  - Spec-recency check failed: implements MCP spec 2025-03-26; the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add --transport http games-moddable-tools-moddable-games-tools https://tools.moddable.games/mcp
```

### Codex

```toml
[mcp_servers.games-moddable-tools-moddable-games-tools]
url = "https://tools.moddable.games/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "games-moddable-tools-moddable-games-tools": {
      "type": "remote",
      "url": "https://tools.moddable.games/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add games-moddable-tools-moddable-games-tools --url https://tools.moddable.games/mcp --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  games-moddable-tools-moddable-games-tools:
    url: "https://tools.moddable.games/mcp"
```

### Other

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

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 66, +1)

No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-08-01 (score 65, +1)

No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-31 (score 64, −1)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-29 (score 65, +1)

No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-28 (score 64, +1)

No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-27 (score 63, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-26 (score 63)

First indexed and scored.

## MCP tools (56)

### `chess_list_variants` (~57 tokens)

List all available chess variants with their descriptions, board sizes, and rules.

Input parameters:

- `group` (string): Filter by group name (Classic, Tactical, Alternate Rules, Asymmetric, Small Boards, Large Boards). Omit for all.

### `chess_get_legal_moves` (~87 tokens)

Get all legal moves for the current position. Returns moves in algebraic notation with annotations (capture, promotion, castling, etc).

Input parameters:

- `fen` (string): FEN string of the position. Omit to use the variant starting position.
- `variant` (string): Variant key (e.g. "standard", "atomic", "capablanca"). Defaults to "standard".

### `chess_analyze_position` (~94 tokens)

Evaluate a chess position using the engine. Returns a score (centipawns from the side to move), best move, and the principal variation.

Input parameters:

- `depth` (number): Search depth (1-6). Higher is slower but more accurate. Defaults to 4.
- `fen` (string): FEN string. Omit for starting position.
- `variant` (string): Variant key. Defaults to "standard".

### `chess_validate_move` (~88 tokens)

Check whether a specific move is legal in the current position. Returns legal/illegal with explanation.

Input parameters:

- `fen` (string): FEN string. Omit for starting position.
- `move` (string, required): Move in coordinate notation (e.g. "e2e4", "e7e8q" for promotion).
- `variant` (string): Variant key. Defaults to "standard".

### `chess_make_moves` (~95 tokens)

Play a sequence of moves from a position and return the resulting FEN, game status, and move list.

Input parameters:

- `fen` (string): Starting FEN. Omit for variant start position.
- `moves` (array, required): Moves in coordinate notation (e.g. ["e2e4", "e7e5", "g1f3"]).
- `variant` (string): Variant key. Defaults to "standard".

### `chess_get_opening_book` (~61 tokens)

Look up opening book moves for a position. Returns known good continuations from the variant opening book.

Input parameters:

- `fen` (string): FEN string. Omit for starting position.
- `variant` (string): Variant key. Defaults to "standard".

### `chess_render_svg` (~149 tokens)

Render a board position as a self-contained SVG string. No DOM or browser APIs required. Works in Cloudflare Workers.

Input parameters:

- `fen` (string): FEN string of the position. Omit to use the variant starting position.
- `highlights` (array): Squares to highlight (algebraic notation, e.g. ["e2", "e4"] for last move).
- `size` (number): Board width in pixels. Height is derived from rows. Defaults to 480.
- `theme` (string): Board colour theme. Defaults to "classic".
- `variant` (string): Variant key (e.g. "standard", "grand", "capablanca"). Defaults to "standard".

### `chess_generate_puzzle` (~264 tokens)

Serve a random chess puzzle from a pool of 1,557 pre-generated puzzles across 66 variants (plus standard). Returns position, solution, metadata, and an SVG board image. Use chess_list_puzzle_types to discover available variant:type combinations.

Input parameters:

- `include_svg` (boolean): Include an SVG board render of the puzzle position. Defaults to true.
- `rating_max` (number): Maximum puzzle rating filter. Omit for no maximum.
- `rating_min` (number): Minimum puzzle rating filter (Lichess rating scale). Omit for no minimum.
- `theme` (string): Filter by puzzle theme (e.g. "backRankMate", "sacrifice", "endgame"). Only applies to Lichess-sourced puzzles.
- `type` (string): Puzzle type (e.g. "mate-in-1", "detonate-in-1", "sacrifice-your-king"). Defaults to the first available type for the variant. Use chess_list_puzzle_types to see all types.
- `variant` (string): Variant key (e.g. "standard", "atomic", "racingKings") or "random" for a surprise variant. Defaults to "standard". Use chess_list_puzzle_types to see all available variants.

### `hex_list_games` (~28 tokens)

List all available hex map games with their map types, layouts, sizes, and style options.

### `hex_generate_map` (~161 tokens)

Generate a hex map for a given game. Returns the full hex grid with terrain types, coordinates, and metadata.

Input parameters:

- `game` (string, required): Game key (e.g. "nukes", "colony", "twilight", "talisman", "mongo", "endless").
- `layout` (string): Layout variant (e.g. "standard", "expanded", "6p"). Only for games with multiple layouts.
- `players` (number): Player count. Omit or 0 for no player bases.
- `seed` (string): Seed string for reproducible generation. Omit for a default seed.
- `size` (number): Map size (ring count). Meaning varies by game. Omit for the game default.

### `hex_get_info` (~113 tokens)

Get detailed information about a specific hex coordinate on a generated map: terrain type, neighbors, and distances to other hexes.

Input parameters:

- `game` (string, required): Game key.
- `layout` (string): Layout variant.
- `players` (number): Player count.
- `q` (number, required): Axial q coordinate of the target hex.
- `r` (number, required): Axial r coordinate of the target hex.
- `seed` (string): Seed used to generate the map.
- `size` (number): Map size.

### `hex_compute_fov` (~158 tokens)

Compute field-of-view from a hex position: all hexes visible within a given range, respecting line-of-sight through the grid.

Input parameters:

- `blocking` (array): Terrain types that block line of sight (e.g. ["mount", "mountains"]). Defaults to none.
- `game` (string, required): Game key.
- `layout` (string): Layout variant.
- `players` (number): Player count.
- `q` (number, required): Axial q coordinate of the observer.
- `r` (number, required): Axial r coordinate of the observer.
- `range` (number): Vision range in hex steps (default 3).
- `seed` (string): Seed used to generate the map.
- `size` (number): Map size.

### `hex_export_svg` (~131 tokens)

Export a generated hex map as an SVG string for rendering or embedding.

Input parameters:

- `bgColor` (string): Background colour (e.g. "#1a1a2e"). Omit for transparent.
- `game` (string, required): Game key.
- `hexSize` (number): Hex radius in pixels (default from game config).
- `labels` (boolean): Show terrain labels on hexes (default false).
- `layout` (string): Layout variant.
- `players` (number): Player count.
- `seed` (string): Seed used to generate the map.
- `size` (number): Map size.

### `hex_pathfind` (~161 tokens)

Find the shortest path between two hexes on a generated map using breadth-first search. Optionally specify impassable terrain types.

Input parameters:

- `fromQ` (number, required): Start hex axial q.
- `fromR` (number, required): Start hex axial r.
- `game` (string, required): Game key.
- `impassable` (array): Terrain types that cannot be traversed (e.g. ["water", "mount"]). Defaults to none.
- `layout` (string): Layout variant.
- `players` (number): Player count.
- `seed` (string): Seed used to generate the map.
- `size` (number): Map size.
- `toQ` (number, required): End hex axial q.
- `toR` (number, required): End hex axial r.

### `rules_list_games` (~69 tokens)

List all game families in the Moddable Games rules library. Returns titles, player counts, variant counts, and URLs.

Input parameters:

- `status` (string): Filter by status. "published" (default) shows all published games, "live" shows only fully released, "all" includes unpublished.

### `rules_get_game` (~77 tokens)

Get full metadata and variant list for a specific game family. Returns players, duration, tagline, variant names, and rules URL.

Input parameters:

- `slug` (string, required): Game slug (e.g. "backgammon", "draughts", "nukes", "moddable-chess"). Use rules_list_games to see all.

### `rules_get_variant` (~87 tokens)

Get rules content for a specific variant within a game family. Returns headings, rules text, and direct URL.

Input parameters:

- `game` (string, required): Game family slug (e.g. "backgammon", "draughts").
- `variant` (string, required): Variant name (e.g. "Acey-Deucey", "Standard Rules", "German Draughts"). Partial match supported.

### `rules_search` (~72 tokens)

Search the entire rules library by keyword. Returns matching entries ranked by relevance across all games and variants.

Input parameters:

- `limit` (number): Max results to return (default 10, max 50).
- `query` (string, required): Search query (e.g. "capture", "dice", "promotion", "4 players").

### `rules_random` (~66 tokens)

Pick a random game or variant from the library. Optionally constrain to a specific game family for a random variant within it.

Input parameters:

- `family` (string): Optional game family slug to pick a random variant from (e.g. "backgammon" for a random backgammon variant).

### `ti4_draw_objectives` (~97 tokens)

Draw random public objectives for a Twilight Imperium 4e game round. Supports expansion filtering.

Input parameters:

- `count` (number): Number of objectives to draw (default 5).
- `expansions` (array): Expansions to include: "base", "pok", "ds", "te". Defaults to ["base","pok"].
- `stage` (number): Stage 1 or Stage 2. Defaults to 1.

### `ti4_draw_agendas` (~75 tokens)

Draw random agenda cards for a Twilight Imperium 4e agenda phase. Returns for/against text.

Input parameters:

- `count` (number): Number of agendas to draw (default 2).
- `expansions` (array): Expansions to include: "base", "ds", "te". Defaults to ["base"].

### `ti4_draft_factions` (~118 tokens)

Run a Milty-style faction draft: deal N factions per player to choose from. Supports ban lists.

Input parameters:

- `ban` (array): Faction names to exclude from the draft.
- `expansions` (array): Expansions: "base","pok","ds","te","codex". Defaults to ["base","pok"].
- `players` (number): Number of players (3-8). Defaults to 6.
- `pool_size` (number): Factions dealt to each player to pick from (default 3).

### `nukes_setup_generator` (~63 tokens)

Generate random starting positions for a Nukes game. Assigns territories to players on a generated hex map.

Input parameters:

- `players` (number): Number of players (2-6). Defaults to 3.
- `seed` (string): Map seed for reproducible setups.

### `colony_dice_odds` (~77 tokens)

Calculate probability of each resource number being rolled on 2d6. Returns the odds table and expected output for a given board position.

Input parameters:

- `numbers` (array): Array of numbers on your settlements (e.g. [5, 6, 8, 9, 11]). Returns probability of rolling at least one.

### `mancala_simulate_move` (~135 tokens)

Simulate a mancala move: sow seeds from a pit and return the resulting board state. Supports Oware and Kalah rules.

Input parameters:

- `board` (array, required): Array of 14 values: pits[0-5] = player 1, pit[6] = store 1, pits[7-12] = player 2, pit[13] = store 2.
- `pit` (number, required): Pit index (0-5 for player 1, 7-12 for player 2) to sow from.
- `variant` (string): Rule variant. Defaults to "kalah".

### `mancala_legal_moves` (~66 tokens)

List legal moves for the current player in a mancala position.

Input parameters:

- `board` (array, required): Array of 14 values (same format as mancala_simulate_move).
- `player` (number): Which player to move (1 or 2). Defaults to 1.

### `morris_legal_moves` (~130 tokens)

List legal moves in a Nine Men's Morris position. Handles placement, sliding, and flying phases.

Input parameters:

- `board` (array, required): Array of 24 values (0=empty, 1=player1, 2=player2) for the 24 intersections.
- `phase` (string): Game phase. "place" during initial placement, "slide" during normal play, "fly" when player has 3 pieces.
- `pieces_in_hand` (number): Pieces not yet placed (0-9). Required during place phase.
- `player` (number, required): Which player to move.

### `morris_detect_mill` (~74 tokens)

Check if a placement/move forms a mill (three in a row) in Nine Men's Morris.

Input parameters:

- `board` (array, required): Array of 24 intersection values.
- `player` (number, required): Which player to check.
- `position` (number, required): The intersection index (0-23) to check for mills.

### `ur_roll_dice` (~42 tokens)

Roll the four tetrahedral dice for the Royal Game of Ur. Each die has 2 marked corners (50% chance). Sum is 0-4.

### `ur_legal_moves` (~110 tokens)

List legal moves for a Royal Game of Ur position given a dice roll.

Input parameters:

- `board` (array, required): Array of 14 track positions (0=empty, 1=player1, 2=player2). Indices 0-13 represent the shared track.
- `pieces_home` (array): Pieces at home for each player [p1, p2].
- `player` (number, required): Which player to move.
- `roll` (number, required): Dice roll result (0-4).

### `pachisi_roll_cowries` (~104 tokens)

Roll cowrie shells for Pachisi/Chaupar. 6 shells, count faces up. Special values: 0 faces = 25 (grace), 1 face = 10 (grace).

Input parameters:

- `game` (string): Which game rules to apply. Defaults to "pachisi".
- `shells` (number): Number of cowrie shells (default 6). Pachisi uses 6, Chaupar uses 3 long dice.

### `piece_gallery_search` (~311 tokens)

Search and filter piece sets from the Moddable Chess piece gallery (96 sets, 2,550 SVGs across 19 game families). Filter by family, license, author, or search by name. Returns metadata for matching sets with preview URLs.

Input parameters:

- `author` (string): Filter by author name (case-insensitive partial match).
- `family` (string): Filter by game family (e.g. "chess", "shogi", "xiangqi", "janggi", "draughts", "go", "emoji", "oware", "abalone", "othello", "backgammon", "amazons", "breakthrough", "fairy-chess", "lines-of-action",…
- `license` (string): Filter by SPDX license (e.g. "MIT", "CC-BY-4.0", "CC0-1.0", "Apache-2.0", "GPL-2.0+").
- `limit` (number): Max results to return (default 20, max 96).
- `playable` (boolean): Filter to only playable sets (usable in the chess.moddable.games play UI).
- `query` (string): Search term to match against set name, author, or ID (case-insensitive).
- `recolorable` (boolean): Filter to only recolorable sets (SVGs support color theming).

### `piece_gallery_get_set` (~78 tokens)

Get full details for a specific piece set including manifest, piece file list, direct SVG URLs, and a preview image URL. Use piece_gallery_search to find set IDs first.

Input parameters:

- `id` (string, required): The piece set ID (e.g. "chessnut", "kahu-shogi-international", "fluent-emoji").

### `piece_gallery_stats` (~40 tokens)

Get aggregate statistics for the piece gallery: total sets, SVG count, breakdown by family, license distribution, author list, and playable/recolorable counts.

### `oracle_list_games` (~33 tokens)

List all supported RPG game systems with their available features (tables, entities). Returns game IDs for use in other tools.

### `oracle_list_tables` (~91 tokens)

List all available oracle/random tables for a game system, optionally filtered by category. Returns table IDs, names, and roll types.

Input parameters:

- `category` (string): Filter by category. Omit to list all.
- `game` (string): Game system ID. Defaults to "starforged". Available: cairn, dungeon-world, ironsworn, knave, maze-rats, starforged

### `oracle_roll` (~109 tokens)

Roll on a specific oracle/random table. Returns the dice roll and result text. Use oracle_list_tables to discover table IDs.

Input parameters:

- `count` (number): Number of rolls (1-5). Defaults to 1.
- `game` (string): Game system ID. Available: cairn, dungeon-world, ironsworn, knave, maze-rats, starforged
- `table` (string, required): Table ID (e.g. "action", "theme", "dungeon-themes").

### `oracle_ask` (~72 tokens)

Ask the Oracle a yes/no question with a likelihood modifier. Implements the Ironsworn/Starforged mechanic with match detection.

Input parameters:

- `likelihood` (string): How likely is "yes"? Defaults to "fifty_fifty".
- `question` (string): Optional question text (returned in response for context).

### `oracle_scene` (~127 tokens)

Generate a narrative seed by rolling on multiple oracle tables. Use a named recipe or provide a custom array of table IDs. Auto-resolves cross-references.

Input parameters:

- `game` (string): Game system ID. Available: cairn, dungeon-world, ironsworn, knave, maze-rats, starforged
- `recipe` (string): Recipe ID. Use oracle_list_recipes to see options.
- `region` (string): Region for tables with regional variants (Starforged only).
- `tables` (array): Custom table IDs to roll. Ignored if recipe is provided.

### `oracle_list_recipes` (~42 tokens)

List all predefined scene recipes — curated multi-table compositions that produce coherent narrative prompts.

Input parameters:

- `game` (string): Filter by game. Omit to see all.

### `oracle_interpret` (~106 tokens)

Resolve oracle cross-references. Given a result like "Action + Theme" or "Roll twice", follows the reference and returns expanded results.

Input parameters:

- `game` (string): Game system ID. Available: cairn, dungeon-world, ironsworn, knave, maze-rats, starforged
- `result` (string, required): Oracle result text to interpret.
- `source_table` (string): Table ID the result came from (needed for "Roll twice" re-rolls).

### `oracle_table_view` (~70 tokens)

View the complete contents of an oracle table — all entries with roll ranges and results.

Input parameters:

- `game` (string): Game system ID. Available: cairn, dungeon-world, ironsworn, knave, maze-rats, starforged
- `table` (string, required): Table ID to view.

### `oracle_encounter` (~180 tokens)

Generate a tabletop RPG encounter (D&D 5e or Pathfinder 1e). Selects CR-appropriate monsters, picks terrain, and rolls loot.

Input parameters:

- `difficulty` (string): Encounter difficulty. Defaults to "medium".
- `loot_tier` (string): Loot rarity tier. Defaults to "medium".
- `monster_type` (string): Filter monsters by type (e.g. "undead", "dragon", "beast").
- `party_level` (number): Average party level (1-20). Defaults to 5.
- `party_size` (number): Number of players (1-10). Defaults to 4.
- `system` (string): Game system. Defaults to "dnd-5e".
- `terrain` (string): Terrain type (e.g. "Forest", "Cavern"). Omit for random.

### `rpg_list_categories` (~87 tokens)

List entity categories for an RPG system (or all systems). Shows browseable content: spells, monsters, classes, equipment, skills, bestiary, etc.

Input parameters:

- `game` (string): Game system ID. Available: brp, cairn, dnd-5e, dungeon-world, fate-core, knave, pathfinder-1e. Omit for all games.

### `rpg_search` (~140 tokens)

Search RPG entities across games and categories. Full-text search over names, descriptions, and metadata.

Input parameters:

- `category` (string): Filter to a specific category (e.g. "spells", "monsters", "equipment").
- `game` (string): Filter to a specific game. Available: brp, cairn, dnd-5e, dungeon-world, fate-core, knave, pathfinder-1e
- `limit` (number): Max results (1-25). Defaults to 10.
- `query` (string, required): Search term (e.g. "fireball", "dragon", "healing", "two-handed").

### `rpg_browse` (~132 tokens)

Browse entities in a category with pagination. Good for exploring what is available in a game system.

Input parameters:

- `category` (string, required): Category ID (e.g. "spells", "monsters", "classes"). Required.
- `game` (string, required): Game system ID. Required. Available: brp, cairn, dnd-5e, dungeon-world, fate-core, knave, pathfinder-1e
- `page` (number): Page number (1-based). Defaults to 1.
- `page_size` (number): Items per page (5-50). Defaults to 20.

### `rpg_get_entity` (~116 tokens)

Get full details of a specific RPG entity by name. Supports exact and fuzzy (partial) matching.

Input parameters:

- `category` (string): Narrow search to a specific category. Optional.
- `game` (string, required): Game system ID. Required. Available: brp, cairn, dnd-5e, dungeon-world, fate-core, knave, pathfinder-1e
- `name` (string, required): Entity name to look up (e.g. "Fireball", "Ancient Red Dragon", "Longsword").

### `rpg_random` (~106 tokens)

Get random entities from an RPG system. Great for inspiration, encounter prep, or NPC generation.

Input parameters:

- `category` (string): Category to draw from. Omit for any category.
- `count` (number): Number of random picks (1-10). Defaults to 1.
- `game` (string, required): Game system ID. Required. Available: brp, cairn, dnd-5e, dungeon-world, fate-core, knave, pathfinder-1e

### `chess_list_puzzle_types` (~79 tokens)

List all available puzzle types in the pool with counts. Returns variant:type keys, total puzzles per key, and rating ranges. Use this to discover what puzzles are available before calling chess_generate_puzzle.

Input parameters:

- `variant` (string): Filter to a specific variant (e.g. "standard", "atomic"). Omit to see all variants.

### `dice_roll` (~88 tokens)

Roll dice using standard notation (e.g. "2d6+3", "4d8-1", "d20"). Supports any combination of dice, modifiers, and multiple pools.

Input parameters:

- `notation` (string, required): Dice notation (e.g. "2d6+3", "4d8", "d20+5", "3d6"). Multiple pools separated by commas.

### `ti4_random_factions` (~72 tokens)

Generate random faction assignments for a Twilight Imperium 4e game. Supports base game and Prophecy of Kings expansion.

Input parameters:

- `expansion` (string): Include Prophecy of Kings factions. Defaults to "pok".
- `players` (number): Number of players (3-8). Defaults to 6.

### `coin_flip` (~61 tokens)

Flip a coin or pick randomly from a list of options. Use for quick binary decisions or random selection.

Input parameters:

- `options` (array): Custom options to pick from (e.g. ["pizza","tacos","sushi"]). Defaults to ["heads","tails"].

### `team_split` (~51 tokens)

Randomly split a list of players into balanced teams. Handles odd numbers gracefully.

Input parameters:

- `players` (array, required): Player names to split into teams.
- `teams` (number): Number of teams (default 2).

### `jam_status` (~31 tokens)

Get the current Mod Jam status: active/inactive, theme, base game, time remaining, and submission count.

### `jam_timer` (~27 tokens)

Get the countdown timer for the current Mod Jam phase (voting, building, or judging).

### `jam_vote` (~27 tokens)

Get current vote standings for the active Mod Jam vote. Returns anonymised tallies per option.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/games-moddable-tools-moddable-games-tools/tools#diagnostics

## Score history

- 2026-08-03: 66
- 2026-08-02: 65
- 2026-08-01: 65
- 2026-07-31: 64
- 2026-07-30: 65
- 2026-07-29: 65
- 2026-07-28: 64
- 2026-07-27: 63
- 2026-07-26: 63

## Links

- Remote endpoint: https://tools.moddable.games/mcp
- Repository: https://github.com/Moddable-Games/moddable-website
- Changelog RSS feed: https://verifymcp.io/servers/games-moddable-tools-moddable-games-tools/tools/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/games-moddable-tools-moddable-games-tools/tools/changelog.json
- HTML version of this page: https://verifymcp.io/servers/games-moddable-tools-moddable-games-tools/tools
