{"serverId":"mcp-registry/games.moddable.tools/moddable-games-tools","tools":[{"name":"board_gallery_get","fixed":{"name":"board_gallery_get","description":"Get details of a specific board layout by ID","inputSchema":{"type":"object","required":["board"],"properties":{"board":{"type":"string","description":"Board ID or name"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":60,"tokensAfter":60},{"name":"board_gallery_search","fixed":{"name":"board_gallery_search","description":"Search the board gallery (335 rendered board layouts across 34 game families)","inputSchema":{"type":"object","properties":{"limit":{"type":"number","description":"Max results (default 10)"},"query":{"type":"string","description":"Search term (e.g. \"8x8\", \"hex\", \"shogi\")"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":92,"tokensAfter":92},{"name":"board_gallery_stats","fixed":{"name":"board_gallery_stats","description":"Get statistics about the board gallery (total boards, families, topologies)","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":48,"tokensAfter":48},{"name":"chess_analyze_position","fixed":{"name":"chess_analyze_position","description":"[DEPRECATED — use play_suggest_move] Analyse a chess position. Removal: v1.0.0.","inputSchema":{"type":"object","properties":{"depth":{"type":"number"},"variant":{"type":"string"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":64,"tokensAfter":64},{"name":"chess_get_legal_moves","fixed":{"name":"chess_get_legal_moves","description":"[DEPRECATED — use play_create_game + play_get_moves] Get legal moves for a chess position. Removal: v1.0.0.","inputSchema":{"type":"object","properties":{"variant":{"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":65,"tokensAfter":65},{"name":"chess_get_opening_book","fixed":{"name":"chess_get_opening_book","description":"[REMOVED — engine#98] Opening book resolution is broken in Worker context. No replacement.","inputSchema":{"type":"object","properties":{"variant":{"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":60,"tokensAfter":60},{"name":"chess_get_status","fixed":{"name":"chess_get_status","description":"[DEPRECATED — use play_check_status] Get chess game status. Removal: v1.0.0.","inputSchema":{"type":"object","properties":{"variant":{"type":"string"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":55,"tokensAfter":55},{"name":"chess_list_puzzle_types","fixed":{"name":"chess_list_puzzle_types","description":"List available puzzle variants, themes, and per-variant counts from the puzzle pool","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":51,"tokensAfter":51},{"name":"chess_list_variants","fixed":{"name":"chess_list_variants","description":"[DEPRECATED — use play_list_variants] List chess variants. Removal: v1.0.0.","inputSchema":{"type":"object","properties":{"group":{"type":"string"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":55,"tokensAfter":55},{"name":"chess_make_move","fixed":{"name":"chess_make_move","description":"[DEPRECATED — use play_apply_move] Apply a move to a chess game. Removal: v1.0.0.","inputSchema":{"type":"object","required":["move"],"properties":{"move":{"type":"object"},"variant":{"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":68,"tokensAfter":68},{"name":"chess_make_moves","fixed":{"name":"chess_make_moves","description":"[DEPRECATED — use play_make_moves] Apply a sequence of chess moves. Removal: v1.0.0.","inputSchema":{"type":"object","required":["moves"],"properties":{"moves":{"type":"array","items":{"type":"object"}},"variant":{"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":77,"tokensAfter":77},{"name":"chess_validate_move","fixed":{"name":"chess_validate_move","description":"[DEPRECATED — use play_validate_move] Check if a chess move is legal. Removal: v1.0.0.","inputSchema":{"type":"object","required":["move"],"properties":{"move":{"type":"object"},"variant":{"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":71,"tokensAfter":71},{"name":"game_deck_create","fixed":{"name":"game_deck_create","description":"Create, shuffle, and optionally draw/deal from a card deck","inputSchema":{"type":"object","properties":{"draw":{"type":"number","description":"Number of cards to draw"},"type":{"enum":["standard-52","bavarian-32","hanafuda-48","mahjong-136","dominoes-28","standard-dice"],"type":"string","description":"Deck type (default: standard-52)"},"hands":{"type":"number","description":"Deal into N hands"},"per_hand":{"type":"number","description":"Cards per hand (default: 5)"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":144,"tokensAfter":144},{"name":"game_deck_list_types","fixed":{"name":"game_deck_list_types","description":"List all available deck types with metadata","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":39,"tokensAfter":39},{"name":"hex_export_svg","fixed":{"name":"hex_export_svg","description":"Generate a hex map and export as SVG","inputSchema":{"type":"object","required":["game"],"properties":{"game":{"type":"string","description":"Game type"},"seed":{"type":"string","description":"Random seed"},"size":{"type":"number","description":"Map size"},"style":{"type":"string","description":"Visual style"},"hexSize":{"type":"number","description":"Hex size in pixels (default: 30)"},"players":{"type":"number","description":"Number of players"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":137,"tokensAfter":137},{"name":"hex_get_info","fixed":{"name":"hex_get_info","description":"Get info about a specific hex coordinate (terrain, neighbours, distance)","inputSchema":{"type":"object","required":["q","r"],"properties":{"q":{"type":"number","description":"Hex Q coordinate (column)"},"r":{"type":"number","description":"Hex R coordinate (row)"},"game":{"type":"string","description":"Game context for terrain lookup"},"seed":{"type":"string","description":"Map seed (to look up terrain from a generated map)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":131,"tokensAfter":131},{"name":"hex_list_games","fixed":{"name":"hex_list_games","description":"List all available hex map game types with configuration options","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":43,"tokensAfter":43},{"name":"jam_status","fixed":{"name":"jam_status","description":"Get the current Mod Jam status (active jam, deadline, submissions)","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":43,"tokensAfter":43},{"name":"nukes_setup_generator","fixed":{"name":"nukes_setup_generator","description":"Generate random territory/resource setup for a Nukes game","inputSchema":{"type":"object","properties":{"players":{"type":"number","description":"Number of players (2-6, default: 2)"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":65,"tokensAfter":65},{"name":"oracle_list_games","fixed":{"name":"oracle_list_games","description":"List all supported RPG systems with oracle tables and entity data availability","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":48,"tokensAfter":48},{"name":"oracle_list_recipes","fixed":{"name":"oracle_list_recipes","description":"List all predefined scene recipes — curated multi-table compositions that produce coherent narrative prompts","inputSchema":{"type":"object","properties":{"game":{"type":"string","description":"Filter by game system (omit for all)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":78,"tokensAfter":78},{"name":"oracle_list_tables","fixed":{"name":"oracle_list_tables","description":"List available oracle tables for a system","inputSchema":{"type":"object","required":["system"],"properties":{"system":{"type":"string","description":"RPG system slug"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":60,"tokensAfter":60},{"name":"oracle_table_view","fixed":{"name":"oracle_table_view","description":"View the complete contents of an oracle table — all entries with roll ranges","inputSchema":{"type":"object","required":["table"],"properties":{"game":{"type":"string","description":"Game system (default: starforged)"},"table":{"type":"string","description":"Table ID to view"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":90,"tokensAfter":90},{"name":"piece_gallery_get_set","fixed":{"name":"piece_gallery_get_set","description":"Get full details and piece list for a specific set","inputSchema":{"type":"object","required":["set"],"properties":{"set":{"type":"string","description":"Set name or ID"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":62,"tokensAfter":62},{"name":"piece_gallery_search","fixed":{"name":"piece_gallery_search","description":"Search the piece set gallery by name, style, or game type","inputSchema":{"type":"object","required":["query"],"properties":{"limit":{"type":"number","description":"Max results (default 10)"},"query":{"type":"string","description":"Search term (e.g. \"staunton\", \"pixel\", \"shogi\")"},"family":{"type":"string","description":"Filter by game family (chess, shogi, xiangqi, draughts, go, etc)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":124,"tokensAfter":124},{"name":"piece_gallery_stats","fixed":{"name":"piece_gallery_stats","description":"Get statistics about the piece gallery (total sets, styles, authors, game families)","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":50,"tokensAfter":50},{"name":"play_apply_move","fixed":{"name":"play_apply_move","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":{"type":"object","required":["state","move"],"properties":{"move":{"type":"object","description":"Move object from play_get_moves (e.g. {from:\"e2\",to:\"e4\"} for chess, {coord:40} for go, {action:\"pass\"})"},"state":{"type":"object","description":"Game state object from play_create_game or a previous play_apply_move"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":161,"tokensAfter":161},{"name":"play_check_status","fixed":{"name":"play_check_status","description":"Check the current game status: whose turn it is, whether the game is over, and who won.","inputSchema":{"type":"object","required":["state"],"properties":{"state":{"type":"object","description":"Game state object from play_create_game or play_apply_move"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":84,"tokensAfter":84},{"name":"play_create_game","fixed":{"name":"play_create_game","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":{"type":"object","required":["family"],"properties":{"family":{"type":"string","description":"Game family name (chess, draughts, go, reversi, shogi, xiangqi, mancala, morris, hex, landlords-game, backgammon, standard-52, bavarian-32, flower-48, double-six-dominoes, mahjong, standard-dice, agon, asalto, chaupar, dou-shou-qi, fanorona, halma, nyout, pachisi, royal-ur, senet, stern-halma, surakarta, tafl)"},"rngSeed":{"type":"number","description":"Optional RNG seed for deterministic games"},"variant":{"type":"string","description":"Variant slug, optionally with flags (e.g. \"grand\", \"grand+random\", \"standard+drops\")"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":239,"tokensAfter":239},{"name":"play_export_fen","fixed":{"name":"play_export_fen","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":{"type":"object","required":["state"],"properties":{"state":{"type":"object","description":"Game state object from play_create_game or play_apply_move"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":114,"tokensAfter":114},{"name":"play_get_definition","fixed":{"name":"play_get_definition","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":{"type":"object","required":["family"],"properties":{"family":{"type":"string","description":"Game family (chess, draughts, go, reversi, shogi, xiangqi, mancala, morris, hex, landlords-game, backgammon, standard-52, bavarian-32, flower-48, double-six-dominoes, mahjong, standard-dice, agon, asalto, chaupar, dou-shou-qi, fanorona, halma, nyout, pachisi, royal-ur, senet, stern-halma, surakarta, tafl)"},"variant":{"type":"string","description":"Variant slug (default: the family's default game)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":201,"tokensAfter":201},{"name":"play_get_moves","fixed":{"name":"play_get_moves","description":"Get all legal moves for the current position. Requires state from play_create_game or play_apply_move.","inputSchema":{"type":"object","required":["state"],"properties":{"state":{"type":"object","description":"Game state object returned by play_create_game or play_apply_move"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":89,"tokensAfter":89},{"name":"play_list_families","fixed":{"name":"play_list_families","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":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":124,"tokensAfter":124},{"name":"play_list_variants","fixed":{"name":"play_list_variants","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":{"type":"object","required":["family"],"properties":{"family":{"type":"string","description":"Game family (chess, draughts, go, reversi, shogi, xiangqi, mancala, morris, hex, landlords-game, backgammon, standard-52, bavarian-32, flower-48, double-six-dominoes, mahjong, standard-dice, agon, asalto, chaupar, dou-shou-qi, fanorona, halma, nyout, pachisi, royal-ur, senet, stern-halma, surakarta, tafl)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":174,"tokensAfter":174},{"name":"play_make_moves","fixed":{"name":"play_make_moves","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":{"type":"object","required":["state","moves"],"properties":{"moves":{"type":"array","items":{"type":"object"},"description":"Array of move objects in the format returned by play_get_moves"},"state":{"type":"object","description":"Game state object from play_create_game or play_apply_move"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":137,"tokensAfter":137},{"name":"play_suggest_move","fixed":{"name":"play_suggest_move","description":"Use AI to analyse the position and suggest the best move. Supports 5 difficulty levels across all 30 playable families.","inputSchema":{"type":"object","required":["state"],"properties":{"state":{"type":"object","description":"Game state object from play_create_game or play_apply_move"},"difficulty":{"enum":["beginner","easy","medium","hard","expert"],"type":"string","description":"AI difficulty level (default: medium)"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":131,"tokensAfter":131},{"name":"play_validate_move","fixed":{"name":"play_validate_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":{"type":"object","required":["state","move"],"properties":{"move":{"type":"object","description":"Move object to validate (same format as play_get_moves output)"},"state":{"type":"object","description":"Game state object from play_create_game or play_apply_move"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":130,"tokensAfter":130},{"name":"random_player_order","fixed":{"name":"random_player_order","description":"Randomise turn order for a list of players","inputSchema":{"type":"object","required":["players"],"properties":{"players":{"type":"array","items":{"type":"string"},"description":"Player names"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":67,"tokensAfter":67},{"name":"rpg_browse_category","fixed":{"name":"rpg_browse_category","description":"Browse entities by category with pagination","inputSchema":{"type":"object","required":["system","category"],"properties":{"game":{"type":"string","description":"Alias for system"},"page":{"type":"number","description":"Page number (default 1)"},"system":{"type":"string","description":"System slug"},"category":{"type":"string","description":"Category (spell, monster, class, item, feat, etc)"},"pageSize":{"type":"number","description":"Items per page (default 20)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":144,"tokensAfter":144},{"name":"rpg_chargen","fixed":{"name":"rpg_chargen","description":"Generate a random character for an RPG system (D&D 5e, Pathfinder, Ironsworn, Cairn, Knave, etc)","inputSchema":{"type":"object","required":["system"],"properties":{"class":{"type":"string","description":"Class preference (omit for random)"},"level":{"type":"number","description":"Character level (default: 1)"},"system":{"type":"string","description":"RPG system (dnd-5e, pathfinder-1e, ironsworn, starforged, cairn, knave, maze-rats, dungeon-world)"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":137,"tokensAfter":137},{"name":"rpg_get_entity","fixed":{"name":"rpg_get_entity","description":"Get full details of a specific RPG entity by name","inputSchema":{"type":"object","required":["name"],"properties":{"game":{"type":"string","description":"Alias for system"},"name":{"type":"string","description":"Entity name"},"system":{"type":"string","description":"System slug"},"category":{"type":"string","description":"Category filter (spells, monsters, classes, etc)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":117,"tokensAfter":117},{"name":"rpg_list_categories","fixed":{"name":"rpg_list_categories","description":"List entity categories for an RPG system (spells, monsters, classes, equipment, etc)","inputSchema":{"type":"object","properties":{"game":{"type":"string","description":"Game system slug (omit for all systems)"},"system":{"type":"string","description":"Alias for game"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":89,"tokensAfter":89},{"name":"rpg_search_entities","fixed":{"name":"rpg_search_entities","description":"Search RPG entities (spells, monsters, classes, items) across all systems","inputSchema":{"type":"object","required":["query"],"properties":{"game":{"type":"string","description":"Alias for system"},"limit":{"type":"number","description":"Max results (default 10)"},"query":{"type":"string","description":"Search term"},"system":{"type":"string","description":"Limit to system (dnd-5e, pathfinder-1e, etc)"},"category":{"type":"string","description":"Entity category (spell, monster, class, item)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":152,"tokensAfter":152},{"name":"rules_get_diagram","fixed":{"name":"rules_get_diagram","description":"Get board diagram SVG URL for a game variant. Returns the diagram path, topology, and rendering metadata.","inputSchema":{"type":"object","required":["game"],"properties":{"game":{"type":"string","description":"Game family slug (e.g. chess, go, agon)"},"variant":{"type":"string","description":"Variant slug (default: standard)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":105,"tokensAfter":105},{"name":"rules_get_game","fixed":{"name":"rules_get_game","description":"Get full rulebook content for a specific game (markdown). For metadata only, use rules_get_game_meta instead.","inputSchema":{"type":"object","required":["game"],"properties":{"game":{"type":"string","description":"Game slug (e.g. chess, dnd-5e, catan)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":83,"tokensAfter":83},{"name":"rules_get_game_meta","fixed":{"name":"rules_get_game_meta","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":{"type":"object","required":["game"],"properties":{"game":{"type":"string","description":"Game slug (e.g. chess, backgammon, cairn)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":107,"tokensAfter":107},{"name":"rules_get_page","fixed":{"name":"rules_get_page","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":{"type":"object","required":["game","page"],"properties":{"game":{"type":"string","description":"Game slug (e.g. cairn, dnd-5e)"},"page":{"type":"string","description":"Page slug (e.g. character-creation, combat-and-difficulty)"},"section":{"type":"string","description":"Section name (e.g. rules, classes, spells). Default: rules"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":151,"tokensAfter":151},{"name":"rules_get_variant","fixed":{"name":"rules_get_variant","description":"Get rules for a specific game variant","inputSchema":{"type":"object","required":["game","variant"],"properties":{"game":{"type":"string","description":"Game slug"},"variant":{"type":"string","description":"Variant slug"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":75,"tokensAfter":75},{"name":"rules_get_variant_list","fixed":{"name":"rules_get_variant_list","description":"List all variants for a game with structured metadata (players, board, playable status, topology, engine config). Much richer than parsing the rulebook.","inputSchema":{"type":"object","required":["game"],"properties":{"game":{"type":"string","description":"Game slug (e.g. chess, backgammon, draughts)"},"playable":{"type":"boolean","description":"Filter to only engine-playable variants"},"topology":{"type":"string","description":"Filter by board topology (grid, hex, track, graph, tableau)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":152,"tokensAfter":152},{"name":"rules_list_games","fixed":{"name":"rules_list_games","description":"List all available game rulebooks with metadata (players, duration, complexity, mechanics). Filterable by type, complexity, and mechanics.","inputSchema":{"type":"object","properties":{"status":{"enum":["live","alpha","playtest"],"type":"string","description":"Filter by status (default: all)"},"category":{"type":"string","description":"Filter by type (standalone, hub, classic, rpg, component, platform, mod, game)"},"mechanic":{"type":"string","description":"Filter by mechanic (e.g. dice, capture, hex, oracle, narrative)"},"complexity":{"enum":["simple","moderate","complex"],"type":"string","description":"Filter by complexity level"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":191,"tokensAfter":191},{"name":"rules_search","fixed":{"name":"rules_search","description":"Full-text search across all published rulebooks. Returns section-typed results with deep-link anchors.","inputSchema":{"type":"object","required":["query"],"properties":{"game":{"type":"string","description":"Limit to specific game slug"},"limit":{"type":"number","description":"Max results (default 10)"},"query":{"type":"string","description":"Search query"},"sectionType":{"type":"string","description":"Filter by section type (general, board, pieces, setup, movement, capture, winning, special, variants)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":154,"tokensAfter":154},{"name":"ti4_list_factions","fixed":{"name":"ti4_list_factions","description":"List all TI4 factions with colors, flags, and expansion info","inputSchema":{"type":"object","properties":{"expansions":{"type":"array","items":{"type":"string"},"description":"Filter by expansion (e.g. [\"base\",\"pok\"]). Default: all"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":79,"tokensAfter":79},{"name":"tile_gallery_get","fixed":{"name":"tile_gallery_get","description":"Get details of a specific tile set with all tile types","inputSchema":{"type":"object","required":["set"],"properties":{"set":{"type":"string","description":"Tile set ID or name"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":63,"tokensAfter":63},{"name":"tile_gallery_search","fixed":{"name":"tile_gallery_search","description":"Search hex tile sets by name, game, or terrain type","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search term (omit to list all)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":61,"tokensAfter":61},{"name":"tile_gallery_stats","fixed":{"name":"tile_gallery_stats","description":"Get statistics about available tile sets","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":38,"tokensAfter":38}],"toolsChanged":55,"tokensSaved":0,"todo":[{"tool":"chess_analyze_position","params":["depth","variant"]},{"tool":"chess_get_legal_moves","params":["variant"]},{"tool":"chess_get_opening_book","params":["variant"]},{"tool":"chess_get_status","params":["variant"]},{"tool":"chess_list_variants","params":["group"]},{"tool":"chess_make_move","params":["move","variant"]},{"tool":"chess_make_moves","params":["moves","variant"]},{"tool":"chess_render_svg","params":["variant"]},{"tool":"chess_validate_move","params":["move","variant"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}