addrbookFor publishers
← The evidence ledger

Evidence row 568000

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint 4bb431a5-3820-4e6f-8652-d8a5e7a8843f
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
4d2e2818c9bb04362d558e8c974c3f2e78bce52627836a96d3427730b4c67f5f
Leaf
0xe1ff85dcfe702b6188de3942211a1c9191c5b9ee9dcbaa67b393d786f172f6a4

What was observed

{
  "count": 89,
  "tools": [
    {
      "description": "Get details of a specific board layout by ID",
      "inputSchema": {
        "properties": {
          "board": {
            "description": "Board ID or name",
            "type": "string"
          }
        },
        "required": [
          "board"
        ],
        "type": "object"
      },
      "name": "board_gallery_get"
    },
    {
      "description": "Search the board gallery (335 rendered board layouts across 34 game families)",
      "inputSchema": {
        "properties": {
          "limit": {
            "description": "Max results (default 10)",
            "type": "number"
          },
          "query": {
            "description": "Search term (e.g. \"8x8\", \"hex\", \"shogi\")",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "board_gallery_search"
    },
    {
      "description": "Get statistics about the board gallery (total boards, families, topologies)",
      "inputSchema": {
        "properties": {},
        "type": "object"
      },
      "name": "board_gallery_stats"
    },
    {
      "description": "[DEPRECATED — use play_suggest_move] Analyse a chess position. Removal: v1.0.0.",
      "inputSchema": {
        "properties": {
          "depth": {
            "type": "number"
          },
          "variant": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "chess_analyze_position"
    },
    {
      "description": "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.",
      "inputSchema": {
        "properties": {
          "difficulty": {
            "description": "Puzzle difficulty by rating: easy under 1200, medium 1200-1799, hard 1800 and above",
            "enum": [
              "easy",
              "medium",
              "hard"
            ],
            "type": "string"
          },
          "theme": {
            "description": "Puzzle theme (fork, pin, skewer, mateIn2, etc). Not every variant puzzle carries themes.",
            "type": "string"
          },
          "variant": {
            "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.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "chess_generate_puzzle"
    },
    {
      "description": "[DEPRECATED — use play_create_game + play_get_moves] Get legal moves for a chess position. Removal: v1.0.0.",
      "inputSchema": {
        "properties": {
          "variant": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "chess_get_legal_moves"
    },
    {
      "description": "[REMOVED — engine#98] Opening book resolution is broken in Worker context. No replacement.",
      "inputSchema": {
        "properties": {
          "variant": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "chess_get_opening_book"
    },
    {
      "description": "[DEPRECATED — use play_check_status] Get chess game status. Removal: v1.0.0.",
      "inputSchema": {
        "properties": {
          "variant": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "chess_get_status"
    },
    {
      "description": "List available puzzle variants, themes, and per-variant counts from the puzzle pool",
      "inputSchema": {
        "properties": {},
        "type": "object"
      },
      "name": "chess_list_puzzle_types"
    },
    {
      "description": "[DEPRECATED — use play_list_variants] List chess variants. Removal: v1.0.0.",
      "inputSchema": {
        "properties": {
          "group": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "chess_list_variants"
    },
    {
      "description": "[DEPRECATED — use play_apply_move] Apply a move to a chess game. Removal: v1.0.0.",
      "inputSchema": {
        "properties": {
          "move": {
            "type": "object"
          },
          "variant": {
            "type": "string"
          }
        },
        "required": [
          "move"
        ],
        "type": "object"
      },
      "name": "chess_make_move"
    },
    {
      "description": "[DEPRECATED — use play_make_moves] Apply a sequence of chess moves. Removal: v1.0.0.",
      "inputSchema": {
        "properties": {
          "moves": {
            "items": {
              "type": "object"
            },
            "type": "array"
          },
          "variant": {
            "type": "string"
          }
        },
        "required": [
          "moves"
        ],
        "type": "object"
      },
      "name": "chess_make_moves"
    },
    {
      "description": "[DEPRECATED — use play_render_board] Render a chess position as SVG. Removal: v1.0.0.",
      "inputSchema": {
        "properties": {
          "fen": {
            "description": "FEN position string",
            "type": "string"
          },
          "highlights": {
            "description": "Squares to highlight (e.g. [\"e2\",\"e4\"])",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "variant": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "chess_render_svg"
    },
    {
      "description": "[DEPRECATED — use play_validate_move] Check if a chess move is legal. Removal: v1.0.0.",
      "inputSchema": {
        "properties": {
          "move": {
            "type": "object"
          },
          "variant": {
            "type": "string"
          }
        },
        "required": [
          "move"
        ],
        "type": "object"
      },
      "name": "chess_validate_move"
    },
    {
      "description": "Flip one or more coins, or pick from a list of choices",
      "inputSchema": {
        "properties": {
          "choices": {
            "description": "Comma-separated options to pick from (overrides coin flip)",
            "type": "string"
          },
          "count": {
            "description": "Number of coins (default 1)",
            "type": "number"
          }
        },
        "type": "object"
      },
      "name": "coin_flip"
    },
    {
      "description": "Calculate settlement dice probability for Colony/Catan-style resource numbers",
      "inputSchema": {
        "properties": {
          "numbers": {
            "description": "Settlement numbers, comma-separated (e.g. \"5,6,8,9\")",
            "type": "string"
          }
        },
        "required": [
          "numbers"
        ],
        "type": "object"
      },
      "name": "colony_dice_odds"
    },
    {
      "description": "Calculate probability of meeting a target with a dice expression. Supports keep-high/low (4d6kh3).",
      "inputSchema": {
        "properties": {
          "comparison": {
            "description": "Comparison (default >=)",
            "enum": [
              ">=",
              ">",
              "<=",
              "<",
              "="
            ],
            "type": "string"
          },
          "expression": {
            "description": "Dice expression (e.g. 2d6, 4d6kh3)",
            "type": "string"
          },
          "target": {
            "description": "Target number to meet or exceed",
            "type": "number"
          }
        },
        "required": [
          "expression",
          "target"
        ],
        "type": "object"
      },
      "name": "dice_odds"
    },
    {
      "description": "Roll dice using standard notation (e.g. 2d6+3, 4d8, d20). Supports comma-separated pools and keep-high/low (4d6kh3).",
      "inputSchema": {
        "properties": {
          "count": {
            "description": "Number of times to roll (default 1)",
            "type": "number"
          },
          "expression": {
            "description": "Alias for notation",
            "type": "string"
          },
          "notation": {
            "description": "Dice notation (e.g. 2d6+3, 4d6kh3, 3d8,1d12+2)",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "dice_roll"
    },
    {
      "description": "Create, shuffle, and optionally draw/deal from a card deck",
      "inputSchema": {
        "properties": {
          "draw": {
            "description": "Number of cards to draw",
            "type": "number"
          },
          "hands": {
            "description": "Deal into N hands",
            "type": "number"
          },
          "per_hand": {
            "description": "Cards per hand (default: 5)",
            "type": "number"
          },
          "type": {
            "description": "Deck type (default: standard-52)",
            "enum": [
              "standard-52",
              "bavarian-32",
              "hanafuda-48",
              "mahjong-136",
              "dominoes-28",
              "standard-dice"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "game_deck_create"
    },
    {
      "description": "Shuffle and deal a custom deck of arbitrary named cards",
      "inputSchema": {
        "properties": {
          "cards": {
            "description": "Cards in the deck (name + optional quantity)",
            "items": {
              "properties": {
                "name": {
                  "type": "string"
                },
                "quantity": {
                  "default": 1,
                  "type": "number"
                }
              },
              "required": [
                "name"
              ],
              "type": "object"
            },
            "type": "array"
          },
          "draw": {
            "description": "Draw N cards from the top instead of dealing hands",
            "type": "number"
          },
          "hands": {
            "description": "Deal into N hands (default: 1 = draw pile only)",
            "type": "number"
          },
          "per_hand": {
            "description": "Cards per hand (default: 5)",
            "type": "number"
          }
        },
        "required": [
          "cards"
        ],
        "type": "object"
      },
      "name": "game_deck_deal"
    },
    {
      "description": "List all available deck types with metadata",
      "inputSchema": {
        "properties": {},
        "type": "object"
      },
      "name": "game_deck_list_types"
    },
    {
      "description": "Generate a random game jam theme combining mechanics and themes",
      "inputSchema": {
        "properties": {
          "count": {
            "description": "Number of themes to generate (default 3)",
            "type": "number"
          }
        },
        "type": "object"
      },
      "name": "game_jam_theme"
    },
    {
      "description": "Resolve a Nukes combat encounter between units",
      "inputSchema": {
        "properties": {
          "attacker": {
            "description": "Attacking unit type",
            "type": "string"
          },
          "defender": {
            "description": "Defending unit type",
            "type": "string"
          },
          "terrain": {
            "description": "Terrain type (plains, forest, mountain, urban)",
            "type": "string"
          }
        },
        "required": [
          "attacker",
          "defender"
        ],
        "type": "object"
      },
      "name": "game_nukes_combat"
    },
    {
      "description": "Track scores for players in any game",
      "inputSchema": {
        "properties": {
          "game": {
            "description": "Game name",
            "type": "string"
          },
          "players": {
            "description": "Player names",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "scores": {
            "description": "Scores (default: all 0)",
            "items": {
              "type": "number"
            },
            "type": "array"
          }
        },
        "required": [
          "players"
        ],
        "type": "object"
      },
      "name": "game_score_tracker"
    },
    {
      "description": "Compute field of view from a hex position",
      "inputSchema": {
        "properties": {
          "game": {
            "description": "Game context for obstacle lookup",
            "type": "string"
          },
          "q": {
            "description": "Origin Q coordinate",
            "type": "number"
          },
          "r": {
            "description": "Origin R coordinate",
            "type": "number"
          },
          "range": {
            "description": "Vision range in hexes",
            "type": "number"
          },
          "seed": {
            "description": "Map seed",
            "type": "string"
          }
        },
        "required": [
          "q",
          "r",
          "range"
        ],
        "type": "object"
      },
      "name": "hex_compute_fov"
    },
    {
      "description": "Generate a hex map and export as SVG",
      "inputSchema": {
        "properties": {
          "game": {
            "description": "Game type",
            "type": "string"
          },
          "hexSize": {
            "description": "Hex size in pixels (default: 30)",
            "type": "number"
          },
          "players": {
            "description": "Number of players",
            "type": "number"
          },
          "seed": {
            "description": "Random seed",
            "type": "string"
          },
          "size": {
            "description": "Map size",
            "type": "number"
          },
          "style": {
            "description": "Visual style",
            "type": "string"
          }
        },
        "required": [
          "game"
        ],
        "type": "object"
      },
      "name": "hex_export_svg"
    },
    {
      "description": "Generate a hex map for a specific game and player count",
      "inputSchema": {
        "properties": {
          "game": {
            "description": "Game type (nukes, colony, catan, age-of-steam, eclipse, twilight-imperium)",
            "type": "string"
          },
          "players": {
            "description": "Number of players (default: 2)",
            "type": "number"
          },
          "seed": {
            "description": "Random seed for reproducibility",
            "type": "string"
          },
          "size": {
            "description": "Map size (default: game default)",
            "type": "number"
          }
        },
        "required": [
          "game"
        ],
        "type": "object"
      },
      "name": "hex_generate_map"
    },
    {
      "description": "Get info about a specific hex coordinate (terrain, neighbours, distance)",
      "inputSchema": {
        "properties": {
          "game": {
            "description": "Game context for terrain lookup",
            "type": "string"
          },
          "q": {
            "description": "Hex Q coordinate (column)",
            "type": "number"
          },
          "r": {
            "description": "Hex R coordinate (row)",
            "type": "number"
          },
          "seed": {
            "description": "Map seed (to look up terrain from a generated map)",
            "type": "string"
          }
        },
        "required": [
          "q",
          "r"
        ],
        "type": "object"
      },
      "name": "hex_get_info"
    },
    {
      "description": "List all available hex map game types with configuration options",
      "inputSchema": {
        "properties": {},
        "type": "object"
      },
      "name": "hex_list_games"
    },
    {
      "description": "Find shortest path between two hex coordinates",
      "inputSchema": {
        "properties": {
          "endQ": {
            "description": "End Q",
            "type": "number"
          },
          "endR": {
            "description": "End R",
            "type": "number"
          },
          "game": {
            "description": "Game context for movement costs",
            "type": "string"
          },
          "seed": {
            "description": "Map seed",
            "type": "string"
          },
          "startQ": {
            "description": "Start Q",
            "type": "number"
          },
          "startR": {
            "description": "Start R",
            "type": "number"
          }
        },
        "required": [
          "startQ",
          "startR",
          "endQ",
          "endR"
        ],
        "type": "object"
      },
      "name": "hex_pathfind"
    },
    {
      "description": "Get the current Mod Jam status (active jam, deadline, submissions)",
      "inputSchema": {
        "properties": {},
        "type": "object"
      },
      "name": "jam_status"
    },
    {
      "description": "Get time remaining in the current Mod Jam",
      "inputSchema": {
        "properties": {},
        "type": "object"
      },
      "name": "jam_timer"
    },
    {
      "description": "Get voting status for the current Mod Jam",
      "inputSchema": {
        "properties": {},
        "type": "object"
      },
      "name": "jam_vote"
    },
    {
      "description": "Generate random territory/resource setup for a Nukes game",
      "inputSchema": {
        "properties": {
          "players": {
            "description": "Number of players (2-6, default: 2)",
            "type": "number"
          }
        },
        "type": "object"
      },
      "name": "nukes_setup_generator"
    },
    {
      "description": "Ask the oracle a yes/no question with likelihood modifier",
      "inputSchema": {
        "properties": {
          "likelihood": {
            "description": "How likely is yes? (default: even)",
            "enum": [
              "certain",
              "likely",
              "even",
              "unlikely",
              "impossible"
            ],
            "type": "string"
          },
          "question": {
            "description": "Yes/no question",
            "type": "string"
          }
        },
        "required": [
          "question"
        ],
        "type": "object"
      },
      "name": "oracle_ask"
    },
    {
      "description": "Generate a tabletop RPG encounter with CR-appropriate monsters, terrain, and loot (D&D 5e or Pathfinder 1e)",
      "inputSchema": {
        "properties": {
          "difficulty": {
            "description": "Encounter difficulty (default: medium)",
            "enum": [
              "easy",
              "medium",
              "hard",
              "deadly"
            ],
            "type": "string"
          },
          "monster_type": {
            "description": "Filter by type (undead, dragon, beast, etc)",
            "type": "string"
          },
          "party_level": {
            "description": "Average party level 1-20 (default: 5)",
            "type": "number"
          },
          "party_size": {
            "description": "Number of players 1-10 (default: 4)",
            "type": "number"
          },
          "system": {
            "description": "Game system (default: dnd-5e)",
            "enum": [
              "dnd-5e",
              "pathfinder-1e"
            ],
            "type": "string"
          },
          "terrain": {
            "description": "Terrain type (omit for random)",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "oracle_encounter"
    },
    {
      "description": "Resolve oracle cross-references. Given a result like \"Action + Theme\", follows references and returns expanded results",
      "inputSchema": {
        "properties": {
          "game": {
            "description": "Game system (default: starforged)",
            "type": "string"
          },
          "result": {
            "description": "Oracle result text to interpret",
            "type": "string"
          },
          "source_table": {
            "description": "Table ID the result came from",
            "type": "string"
          }
        },
        "required": [
          "result"
        ],
        "type": "object"
      },
      "name": "oracle_interpret"
    },
    {
      "description": "List all supported RPG systems with oracle tables and entity data availability",
      "inputSchema": {
        "properties": {},
        "type": "object"
      },
      "name": "oracle_list_games"
    },
    {
      "description": "List all predefined scene recipes — curated multi-table compositions that produce coherent narrative prompts",
      "inputSchema": {
        "properties": {
          "game": {
            "description": "Filter by game system (omit for all)",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "oracle_list_recipes"
    },
    {
      "description": "List available oracle tables for a system",
      "inputSchema": {
        "properties": {
          "system": {
            "description": "RPG system slug",
            "type": "string"
          }
        },
        "required": [
          "system"
        ],
        "type": "object"
      },
      "name": "oracle_list_tables"
    },
    {
      "description": "Roll on a random oracle table (Ironsworn, Starforged, Maze Rats, etc)",
      "inputSchema": {
        "properties": {
          "system": {
            "description": "RPG system slug (ironsworn, starforged, maze-rats, cairn, knave, fate-core)",
            "type": "string"
          },
          "table": {
            "description": "Specific table name (omit for random)",
            "type": "string"
          }
        },
        "required": [
          "system"
        ],
        "type": "object"
      },
      "name": "oracle_roll"
    },
    {
      "description": "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.",
      "inputSchema": {
        "properties": {
          "recipe": {
            "description": "Recipe ID (from oracle_list_recipes) — rolls each table in the recipe",
            "type": "string"
          },
          "region": {
            "description": "Region for Starforged region-aware recipes",
            "enum": [
              "terminus",
              "outlands",
              "expanse"
            ],
            "type": "string"
          },
          "system": {
            "description": "RPG system slug (default: ironsworn)",
            "type": "string"
          },
          "type": {
            "description": "Scene type for random mode (default: event)",
            "enum": [
              "location",
              "npc",
              "event",
              "combat"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "oracle_scene"
    },
    {
      "description": "View the complete contents of an oracle table — all entries with roll ranges",
      "inputSchema": {
        "properties": {
          "game": {
            "description": "Game system (default: starforged)",
            "type": "string"
          },
          "table": {
            "description": "Table ID to view",
            "type": "string"
          }
        },
        "required": [
          "table"
        ],
        "type": "object"
      },
      "name": "oracle_table_view"
    },
    {
      "description": "Get full details and piece list for a specific set",
      "inputSchema": {
        "properties": {
          "set": {
            "description": "Set name or ID",
            "type": "string"
          }
        },
        "required": [
          "set"
        ],
        "type": "object"
      },
      "name": "piece_gallery_get_set"
    },
    {
      "description": "Search the piece set gallery by name, style, or game type",
      "inputSchema": {
        "properties": {
          "family": {
            "description": "Filter by game family (chess, shogi, xiangqi, draughts, go, etc)",
            "type": "string"
          },
          "limit": {
            "description": "Max results (default 10)",
            "type": "number"
          },
          "query": {
            "description": "Search term (e.g. \"staunton\", \"pixel\", \"shogi\")",
            "type": "string"
          }
        },
        "required": [
          "query"
        ],
        "type": "object"
      },
      "name": "piece_gallery_search"
    },
    {
      "description": "Get statistics about the piece gallery (total sets, styles, authors, game families)",
      "inputSchema": {
        "properties": {},
        "type": "object"
      },
      "name": "piece_gallery_stats"
    },
    {
      "description": "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\"}).",
      "inputSchema": {
        "properties": {
          "move": {
            "description": "Move object from play_get_moves (e.g. {from:\"e2\",to:\"e4\"} for chess, {coord:40} for go, {action:\"pass\"})",
            "type": "object"
          },
          "state": {
            "description": "Game state object from play_create_game or a previous play_apply_move",
            "type": "object"
          }
        },
        "required": [
          "state",
          "move"
        ],
        "type": "object"
      },
      "name": "play_apply_move"
    },
    {
      "description": "Check the current game status: whose turn it is, whether the game is over, and who won.",
      "inputSchema": {
        "properties": {
          "state": {
            "description": "Game state object from play_create_game or play_apply_move",
            "type": "object"
          }
        },
        "required": [
          "state"
        ],
        "type": "object"
      },
      "name": "play_check_status"
    },
    {
      "description": "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\".",
      "inputSchema": {
        "properties": {
          "family": {
            "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)",
            "type": "string"
          },
          "rngSeed": {
            "description": "Optional RNG seed for deterministic games",
            "type": "number"
          },
          "variant": {
            "description": "Variant slug, optionally with flags (e.g. \"grand\", \"grand+random\", \"standard+drops\")",
            "type": "string"
          }
        },
        "required": [
          "family"
        ],
        "type": "object"
      },
      "name": "play_create_game"
    },
    {
      "description": "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.",
      "inputSchema": {
        "properties": {
          "state": {
            "description": "Game state object from play_create_game or play_apply_move",
            "type": "object"
          }
        },
        "required": [
          "state"
        ],
        "type": "object"
      },
      "name": "play_export_fen"
    },
    {
      "description": "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.",
      "inputSchema": {
        "properties": {
          "family": {
            "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)",
            "type": "string"
          },
          "variant": {
            "description": "Variant slug (default: the family's default game)",
            "type": "string"
          }
        },
        "required": [
          "family"
        ],
        "type": "object"
      },
      "name": "play_get_definition"
    },
    {
      "description": "Get all legal moves for the current position. Requires state from play_create_game or play_apply_move.",
      "inputSchema": {
        "properties": {
          "state": {
            "description": "Game state object returned by play_create_game or play_apply_move",
            "type": "object"
          }
        },
        "required": [
          "state"
        ],
        "type": "object"
      },
      "name": "play_get_moves"
    },
    {
      "description": "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)",
      "inputSchema": {
        "properties": {},
        "type": "object"
      },
      "name": "play_list_families"
    },
    {
      "description": "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\".",
      "inputSchema": {
        "properties": {
          "family": {
            "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)",
            "type": "string"
          }
        },
        "required": [
          "family"
        ],
        "type": "object"
      },
      "name": "play_list_variants"
    },
    {
      "description": "Create a game from a FEN-style setup string, as returned by play_export_fen. Pass the same variant the position was exported from.",
      "inputSchema": {
        "properties": {
          "family": {
            "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)",
            "type": "string"
          },
          "fen": {
            "description": "Position string in FEN-style notation for the family",
            "type": "string"
          },
          "variant": {
            "description": "Optional variant slug (default: the family's default game)",
            "type": "string"
          }
        },
        "required": [
          "family",
          "fen"
        ],
        "type": "object"
      },
      "name": "play_load_fen"
    },
    {
      "description": "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.",
      "inputSchema": {
        "properties": {
          "moves": {
            "description": "Array of move objects in the format returned by play_get_moves",
            "items": {
              "type": "object"
            },
            "type": "array"
          },
          "state": {
            "description": "Game state object from play_create_game or play_apply_move",
            "type": "object"
          }
        },
        "required": [
          "state",
          "moves"
        ],
        "type": "object"
      },
      "name": "play_make_moves"
    },
    {
      "description": "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).",
      "inputSchema": {
        "properties": {
          "highlights": {
            "description": "Optional cells to highlight (e.g. [{key: 52, color: \"#ff0\"}])",
            "items": {
              "properties": {
                "color": {
                  "type": "string"
                },
                "key": {
                  "type": "integer"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "size": {
            "description": "Board width in pixels for PNG output (default: 480, max: 2048)",
            "type": "integer"
          },
          "state": {
            "description": "Game state object from play_create_game or play_apply_move",
            "type": "object"
          }
        },
        "required": [
          "state"
        ],
        "type": "object"
      },
      "name": "play_render_board"
    },
    {
      "description": "Use AI to analyse the position and suggest the best move. Supports 5 difficulty levels across all 30 playable families.",
      "inputSchema": {
        "properties": {
          "difficulty": {
            "description": "AI difficulty level (default: medium)",
            "enum": [
              "beginner",
              "easy",
              "medium",
              "hard",
              "expert"
            ],
            "type": "string"
          },
          "state": {
            "description": "Game state object from play_create_game or play_apply_move",
            "type": "object"
          }
        },
        "required": [
          "state"
        ],
        "type": "object"
      },
      "name": "play_suggest_move"
    },
    {
      "description": "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.",
      "inputSchema": {
        "properties": {
          "move": {
            "description": "Move object to validate (same format as play_get_moves output)",
            "type": "object"
          },
          "state": {
            "description": "Game state object from play_create_game or play_apply_move",
            "type": "object"
          }
        },
        "required": [
          "state",
          "move"
        ],
        "type": "object"
      },
      "name": "play_validate_move"
    },
    {
      "description": "Randomise turn order for a list of players",
      "inputSchema": {
        "properties": {
          "players": {
            "description": "Player names",
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "players"
        ],
        "type": "object"
      },
      "name": "random_player_order"
    },
    {
      "description": "Browse entities by category with pagination",
      "inputSchema": {
        "properties": {
          "category": {
            "description": "Category (spell, monster, class, item, feat, etc)",
            "type": "string"
          },
          "game": {
            "description": "Alias for system",
            "type": "string"
          },
          "page": {
            "description": "Page number (default 1)",
            "type": "number"
          },
          "pageSize": {
            "description": "Items per page (default 20)",
            "type": "number"
          },
          "system": {
            "description": "System slug",
            "type": "string"
          }
        },
        "required": [
          "system",
          "category"
        ],
        "type": "object"
      },
      "name": "rpg_browse_category"
    },
    {
      "description": "Generate a random character for an RPG system (D&D 5e, Pathfinder, Ironsworn, Cairn, Knave, etc)",
      "inputSchema": {
        "properties": {
          "class": {
            "description": "Class preference (omit for random)",
            "type": "string"
          },
          "level": {
            "description": "Character level (default: 1)",
            "type": "number"
          },
          "system": {
            "description": "RPG system (dnd-5e, pathfinder-1e, ironsworn, starforged, cairn, knave, maze-rats, dungeon-world)",
            "type": "string"
          }
        },
        "required": [
          "system"
        ],
        "type": "object"
      },
      "name": "rpg_chargen"
    },
    {
      "description": "Get full details of a specific RPG entity by name",
      "inputSchema": {
        "properties": {
          "category": {
            "description": "Category filter (spells, monsters, classes, etc)",
            "type": "string"
          },
          "game": {
            "description": "Alias for system",
            "type": "string"
          },
          "name": {
            "description": "Entity name",
            "type": "string"
          },
          "system": {
            "description": "System slug",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "name": "rpg_get_entity"
    },
    {
      "description": "List entity categories for an RPG system (spells, monsters, classes, equipment, etc)",
      "inputSchema": {
        "properties": {
          "game": {
            "description": "Game system slug (omit for all systems)",
            "type": "string"
          },
          "system": {
            "description": "Alias for game",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "rpg_list_categories"
    },
    {
      "description": "Generate random loot/treasure for a system and tier",
      "inputSchema": {
        "properties": {
          "count": {
            "description": "Number of items (default 3)",
            "type": "number"
          },
          "system": {
            "description": "System slug (default: dnd-5e)",
            "type": "string"
          },
          "tier": {
            "description": "Loot tier (default: minor)",
            "enum": [
              "minor",
              "major",
              "legendary"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "rpg_loot"
    },
    {
      "description": "Get random entities from an RPG system for inspiration or encounter prep",
      "inputSchema": {
        "properties": {
          "category": {
            "description": "Category to draw from (omit for any)",
            "type": "string"
          },
          "count": {
            "description": "Number of random picks 1-10 (default: 1)",
            "type": "number"
          },
          "game": {
            "description": "Game system slug",
            "type": "string"
          },
          "system": {
            "description": "Alias for game",
            "type": "string"
          }
        },
        "required": [
          "game"
        ],
        "type": "object"
      },
      "name": "rpg_random"
    },
    {
      "description": "Generate a random encounter for a system and difficulty level",
      "inputSchema": {
        "properties": {
          "difficulty": {
            "description": "Encounter difficulty",
            "enum": [
              "easy",
              "medium",
              "hard",
              "deadly"
            ],
            "type": "string"
          },
          "system": {
            "description": "System slug (default: dnd-5e)",
            "type": "string"
          },
          "type": {
            "description": "Monster type filter (beast, undead, fiend, dragon, etc)",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "rpg_random_encounter"
    },
    {
      "description": "Search RPG entities (spells, monsters, classes, items) across all systems",
      "inputSchema": {
        "properties": {
          "category": {
            "description": "Entity category (spell, monster, class, item)",
            "type": "string"
          },
          "game": {
            "description": "Alias for system",
            "type": "string"
          },
          "limit": {
            "description": "Max results (default 10)",
            "type": "number"
          },
          "query": {
            "description": "Search term",
            "type": "string"
          },
          "system": {
            "description": "Limit to system (dnd-5e, pathfinder-1e, etc)",
            "type": "string"
          }
        },
        "required": [
          "query"
        ],
        "type": "object"
      },
      "name": "rpg_search_entities"
    },
    {
      "description": "Get board diagram SVG URL for a game variant. Returns the diagram path, topology, and rendering metadata.",
      "inputSchema": {
        "properties": {
          "game": {
            "description": "Game family slug (e.g. chess, go, agon)",
            "type": "string"
          },
          "variant": {
            "description": "Variant slug (default: standard)",
            "type": "string"
          }
        },
        "required": [
          "game"
        ],
        "type": "object"
      },
      "name": "rules_get_diagram"
    },
    {
      "description": "Get full rulebook content for a specific game (markdown). For metadata only, use rules_get_game_meta instead.",
      "inputSchema": {
        "properties": {
          "game": {
            "description": "Game slug (e.g. chess, dnd-5e, catan)",
            "type": "string"
          }
        },
        "required": [
          "game"
        ],
        "type": "object"
      },
      "name": "rules_get_game"
    },
    {
      "description": "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.",
      "inputSchema": {
        "properties": {
          "game": {
            "description": "Game slug (e.g. chess, backgammon, cairn)",
            "type": "string"
          }
        },
        "required": [
          "game"
        ],
        "type": "object"
      },
      "name": "rules_get_game_meta"
    },
    {
      "description": "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.",
      "inputSchema": {
        "properties": {
          "game": {
            "description": "Game slug (e.g. cairn, dnd-5e)",
            "type": "string"
          },
          "page": {
            "description": "Page slug (e.g. character-creation, combat-and-difficulty)",
            "type": "string"
          },
          "section": {
            "description": "Section name (e.g. rules, classes, spells). Default: rules",
            "type": "string"
          }
        },
        "required": [
          "game",
          "page"
        ],
        "type": "object"
      },
      "name": "rules_get_page"
    },
    {
      "description": "Get rules for a specific game variant",
      "inputSchema": {
        "properties": {
          "game": {
            "description": "Game slug",
            "type": "string"
          },
          "variant": {
            "description": "Variant slug",
            "type": "string"
          }
        },
        "required": [
          "game",
          "variant"
        ],
        "type": "object"
      },
      "name": "rules_get_variant"
    },
    {
      "description": "List all variants for a game with structured metadata (players, board, playable status, topology, engine config). Much richer than parsing the rulebook.",
      "inputSchema": {
        "properties": {
          "game": {
            "description": "Game slug (e.g. chess, backgammon, draughts)",
            "type": "string"
          },
          "playable": {
            "description": "Filter to only engine-playable variants",
            "type": "boolean"
          },
          "topology": {
            "description": "Filter by board topology (grid, hex, track, graph, tableau)",
            "type": "string"
          }
        },
        "required": [
          "game"
        ],
        "type": "object"
      },
      "name": "rules_get_variant_list"
    },
    {
      "description": "List all available game rulebooks with metadata (players, duration, complexity, mechanics). Filterable by type, complexity, and mechanics.",
      "inputSchema": {
        "properties": {
          "category": {
            "description": "Filter by type (standalone, hub, classic, rpg, component, platform, mod, game)",
            "type": "string"
          },
          "complexity": {
            "description": "Filter by complexity level",
            "enum": [
              "simple",
              "moderate",
              "complex"
            ],
            "type": "string"
          },
          "mechanic": {
            "description": "Filter by mechanic (e.g. dice, capture, hex, oracle, narrative)",
            "type": "string"
          },
          "status": {
            "description": "Filter by status (default: all)",
            "enum": [
              "live",
              "alpha",
              "playtest"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "rules_list_games"
    },
    {
      "description": "Get a random game suggestion from the library",
      "inputSchema": {
        "properties": {
          "maxDuration": {
            "description": "Maximum game duration in minutes",
            "type": "number"
          },
          "players": {
            "description": "Number of players available",
            "type": "number"
          }
        },
        "type": "object"
      },
      "name": "rules_random"
    },
    {
      "description": "Full-text search across all published rulebooks. Returns section-typed results with deep-link anchors.",
      "inputSchema": {
        "properties": {
          "game": {
            "description": "Limit to specific game slug",
            "type": "string"
          },
          "limit": {
            "description": "Max results (default 10)",
            "type": "number"
          },
          "query": {
            "description": "Search query",
            "type": "string"
          },
          "sectionType": {
            "description": "Filter by section type (general, board, pieces, setup, movement, capture, winning, special, variants)",
            "type": "string"
          }
        },
        "required": [
          "query"
        ],
        "type": "object"
      },
      "name": "rules_search"
    },
    {
      "description": "Draw random characters from the Talisman 4e (revised) base set for a character lottery",
      "inputSchema": {
        "properties": {
          "count": {
            "description": "Number of characters to draw (2-6, default: 4)",
            "type": "number"
          }
        },
        "type": "object"
      },
      "name": "talisman_draw_characters"
    },
    {
      "description": "Draw a random encounter for a Talisman ring (outer, middle, inner, crown)",
      "inputSchema": {
        "properties": {
          "ring": {
            "description": "Ring to draw from (default: outer)",
            "enum": [
              "outer",
              "middle",
              "inner",
              "crown"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "talisman_draw_encounter"
    },
    {
      "description": "Randomly divide players into teams",
      "inputSchema": {
        "properties": {
          "count": {
            "description": "Number of teams (default 2)",
            "type": "number"
          },
          "members": {
            "description": "Comma-separated names (alternative to array)",
            "type": "string"
          },
          "players": {
            "description": "Player names",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "teams": {
            "description": "Alias for count",
            "type": "number"
          }
        },
        "required": [
          "players"
        ],
        "type": "object"
      },
      "name": "team_split"
    },
    {
      "description": "Milty-style TI4 draft with pick pools per player",
      "inputSchema": {
        "properties": {
          "choices": {
            "description": "Factions per player to choose from (default: 3)",
            "type": "number"
          },
          "expansions": {
            "description": "Expansion filter (e.g. [\"base\",\"pok\"]). Default: all",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "players": {
            "description": "Number of players (3-8, default: 6)",
            "type": "number"
          }
        },
        "type": "object"
      },
      "name": "ti4_draft_factions"
    },
    {
      "description": "Draw random agenda cards for TI4 political phase",
      "inputSchema": {
        "properties": {
          "count": {
            "description": "Number to draw (default: 2)",
            "type": "number"
          },
          "expansions": {
            "description": "Expansion filter",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "type": {
            "description": "Filter by type",
            "enum": [
              "law",
              "directive"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "ti4_draw_agendas"
    },
    {
      "description": "Draw random public objectives for TI4",
      "inputSchema": {
        "properties": {
          "count": {
            "description": "Number to draw (default: 5)",
            "type": "number"
          },
          "expansions": {
            "description": "Expansion filter",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "stage": {
            "description": "Stage 1 or 2 (default: both)",
            "enum": [
              1,
              2
            ],
            "type": "number"
          }
        },
        "type": "object"
      },
      "name": "ti4_draw_objectives"
    },
    {
      "description": "List all TI4 factions with colors, flags, and expansion info",
      "inputSchema": {
        "properties": {
          "expansions": {
            "description": "Filter by expansion (e.g. [\"base\",\"pok\"]). Default: all",
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "name": "ti4_list_factions"
    },
    {
      "description": "Generate random faction assignments for Twilight Imperium 4th Edition",
      "inputSchema": {
        "properties": {
          "expansions": {
            "description": "Expansion filter (e.g. [\"base\",\"pok\"]). Default: all",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "players": {
            "description": "Number of players (3-8)",
            "type": "number"
          }
        },
        "required": [
          "players"
        ],
        "type": "object"
      },
      "name": "ti4_random_factions"
    },
    {
      "description": "Get details of a specific tile set with all tile types",
      "inputSchema": {
        "properties": {
          "set": {
            "description": "Tile set ID or name",
            "type": "string"
          }
        },
        "required": [
          "set"
        ],
        "type": "object"
      },
      "name": "tile_gallery_get"
    },
    {
      "description": "Search hex tile sets by name, game, or terrain type",
      "inputSchema": {
        "properties": {
          "query": {
            "description": "Search term (omit to list all)",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "tile_gallery_search"
    },
    {
      "description": "Get statistics about available tile sets",
      "inputSchema": {
        "properties": {},
        "type": "object"
      },
      "name": "tile_gallery_stats"
    },
    {
      "description": "Suggest time controls for a game based on player count and complexity",
      "inputSchema": {
        "properties": {
          "game": {
            "description": "Game name",
            "type": "string"
          },
          "players": {
            "description": "Number of players",
            "type": "number"
          }
        },
        "required": [
          "game"
        ],
        "type": "object"
      },
      "name": "timer_suggest"
    }
  ]
}

What the leaf hashes

{"body":"4d2e2818c9bb04362d558e8c974c3f2e78bce52627836a96d3427730b4c67f5f","id":568000,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793138893230442,"prev":null,"subject":"4bb431a5-3820-4e6f-8652-d8a5e7a8843f","subject_kind":"endpoint"}

Proof

Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (273461 rows).

  1. 0xe1ffd73111c64a1fd773fb5afcc1781add0ab0cbeb513a0228ab18e3499abd16
  2. 0xa6d1feb3cc377a760b12e8a340ac4d17b5261cdcaf84076c598fc5a4bb4a1f69
  3. 0xd774c09a9180024f69fd65805966b384ab6546c2e9570175d38ec61d31892995
  4. 0x7b627fcdd26bcccb9904559f1c8052b0664a53a12157955a059df855f09acfde
  5. 0x3c353cbf5408b0feba8916557c9347bc7204bcd0dfb6b3fc8e48f0b4c11ae1d9
  6. 0x69e047e8102bdc82ae30b8d994fdd0a01077b0b1d3efbc14fe93388220fb069f
  7. 0xde44648c3fb7b1b6b45e6068effd70d15ea3b292e2ba7a3e1f21f80a31206f44
  8. 0x22149605595324ea9bd4456d6ee19fba9147e13a197d2c4586c3c070ea0f4c3a
  9. 0xb0415bfee170fcac495400b459249991ebda3b484a9591bcfb94dd190a431ad4
  10. 0x9f13d093f46ebcfa68f1c0fba8bd7e50babde259291e3165e02e92d9d5d97ee9
  11. 0x685edc20eef134e9053b5f48e92fbcfdce3625c2c28f68c4ec9232819c669574
  12. 0xa7bf7b9cc7b39dca708cf0cc5d77059435823b975a1b485d07bbb69188527cb0
  13. 0x979156f4f0a1ab811055c0a4d2b45bfa74d4bef619c176540454ee8d15e5bebc
  14. 0xf72dee7a0c7534cb19ede4959b957b00c0a8285c36ad49dd2ce1c1092bf60d93
  15. 0x24e3e2bb8ee1e8d20756de35f0e0c4ec8eb1f193bd2cf3f077ee1f92f211c34d
  16. 0x8745bd887f5ce9f7a49558fd2b04cdcd97a05ea9f8a23f62d0e80cb13d328b0f
  17. 0xdf1105afdc109de3c09a98fc8a3864159ad964e6f49b635c105a27a1e1f14310
  18. 0x2bf8151e5f157dd183b9de6fa00469551932a7a6e3f33a694895000ac9061197
  19. 0x9fc354c0ea3efc3f1b6548bb77ea902a50f2c9647647ea61592efce2bd795699
Day root
0xdd77e5e99da32c3f154180d63e3c3e6fe11e896a2c6896412ef6b5c4bcf7e795
Chained
0x23bb4dfd09f55c15ac3962f53578e02c6114d5bfd9bb451cf8794fb6e2817ef4
Published
On Arc Testnet, block 69414147: 0xb2ebd83aafeb765a0ce66e76aefb133ed06606c98038fd56191e2bcd1dcb77b4

How to check it · This row as JSON