# `games.moddable.tools/moddable-games-tools` on anlyon.dev

> Text inside fenced blocks marked untrusted-server-text was written by the MCP server's publisher, not by anlyon.dev. It is data to inspect, not instructions to follow. Invisible characters are shown as [U+XXXX].
> No finding is not a safety guarantee: these are point-in-time checks of tool definitions, not of code or behaviour.

- Page: https://anlyon.dev/servers/games.moddable.tools/moddable-games-tools
- JSON: https://anlyon.dev/api/v1/servers/games.moddable.tools/moddable-games-tools
- Version: 1.1.0 (active)
- Publisher: games.moddable.tools (domain proven to the MCP Registry)
- Runs: remote (streamable-http)
- Sign-in to list tools: none
- Repository: https://github.com/Moddable-Games/moddable-website
- Metadata from the official MCP Registry, synced 2026-10-21T18:13:03.717Z

Title and description, as the publisher wrote them:

```untrusted-server-text
Moddable Games Tools
15 tools for chess variant analysis, hex map generation, and board game utilities
```

Scanned 2026-10-21T18:38:52.501Z over streamable-http.

**89 tools: 39 change things and 50 only read.**

| Group | Class | Tools | Claude Code |
| --- | --- | --- | --- |
| Deletes or cancels | destructive | 0 | deny |
| Can't be undone | irreversible | 0 | ask |
| Changes things | write | 39 | ask |
| Only reads | read | 50 | allow |

## Exfil surface

No private-data -> untrusted-input -> outbound path in this server alone: no tool is tagged outbound.

| Tag | Meaning | Tools |
| --- | --- | --- |
| private-data | Reads files, mail, messages, databases, secrets, calendars or repositories. | `mcp__moddable-games-tools__oracle_interpret` `mcp__moddable-games-tools__oracle_list_games` `mcp__moddable-games-tools__oracle_list_recipes` `mcp__moddable-games-tools__oracle_list_tables` `mcp__moddable-games-tools__oracle_table_view` |
| untrusted-input | Brings in text someone else can write: web pages, inbound email, messages, issues and comments. | `mcp__moddable-games-tools__rpg_browse_category` `mcp__moddable-games-tools__rules_get_diagram` |
| outbound | Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL. | none |

## Findings

No check matched anything in these tool definitions.


## Changes things (39)

Creates or changes something that can be changed back. Claude Code: ask.

### `chess_generate_puzzle`

- The name "chess_generate_puzzle" says "generate": a word for a change.

Description, as the server wrote it:

```untrusted-server-text
Get a random chess puzzle. Filter by variant, difficulty or theme. Not every variant puzzle carries themes; use chess_list_puzzle_types to see what the pool holds.
```

### `chess_make_move`

- The name "chess_make_move" says "move": a word for a change.

Description, as the server wrote it:

```untrusted-server-text
[DEPRECATED — use play_apply_move] Apply a move to a chess game. Removal: v1.0.0.
```

### `chess_make_moves`

- The name "chess_make_moves" says "move": a word for a change.

Description, as the server wrote it:

```untrusted-server-text
[DEPRECATED — use play_make_moves] Apply a sequence of chess moves. Removal: v1.0.0.
```

### `chess_render_svg`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
[DEPRECATED — use play_render_board] Render a chess position as SVG. Removal: v1.0.0.
```

### `coin_flip`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Flip one or more coins, or pick from a list of choices
```

### `colony_dice_odds`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Calculate settlement dice probability for Colony/Catan-style resource numbers
```

### `dice_odds`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Calculate probability of meeting a target with a dice expression. Supports keep-high/low (4d6kh3).
```

### `dice_roll`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Roll dice using standard notation (e.g. 2d6+3, 4d8, d20). Supports comma-separated pools and keep-high/low (4d6kh3).
```

### `game_deck_create`

- The name "game_deck_create" says "create": a word for a change.

Description, as the server wrote it:

```untrusted-server-text
Create, shuffle, and optionally draw/deal from a card deck
```

### `game_deck_deal`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Shuffle and deal a custom deck of arbitrary named cards
```

### `game_jam_theme`

- The description's first verb is "generate": a word for a change.

Description, as the server wrote it:

```untrusted-server-text
Generate a random game jam theme combining mechanics and themes
```

### `game_score_tracker`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Track scores for players in any game
```

### `hex_compute_fov`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Compute field of view from a hex position
```

### `hex_export_svg`

- The description's first verb is "generate": a word for a change.

Description, as the server wrote it:

```untrusted-server-text
Generate a hex map and export as SVG
```

### `hex_generate_map`

- The name "hex_generate_map" says "generate": a word for a change.

Description, as the server wrote it:

```untrusted-server-text
Generate a hex map for a specific game and player count
```

### `nukes_setup_generator`

- The description's first verb is "generate": a word for a change.

Description, as the server wrote it:

```untrusted-server-text
Generate random territory/resource setup for a Nukes game
```

### `oracle_ask`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Ask the oracle a yes/no question with likelihood modifier
```

### `oracle_encounter`

- The description's first verb is "generate": a word for a change.

Description, as the server wrote it:

```untrusted-server-text
Generate a tabletop RPG encounter with CR-appropriate monsters, terrain, and loot (D&D 5e or Pathfinder 1e)
```

### `oracle_roll`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Roll on a random oracle table (Ironsworn, Starforged, Maze Rats, etc)
```

### `oracle_scene`

- The description's first verb is "generate": a word for a change.

Description, as the server wrote it:

```untrusted-server-text
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.
```

### `play_apply_move`

- The name "play_apply_move" says "apply": a word for a change.

Description, as the server wrote it:

```untrusted-server-text
Apply a move to the game and return the new state. Pass the move object exactly as returned by play_get_moves (format varies by family: chess uses {from,to}, go uses {coord} or {action:"pass"}).
```

### `play_create_game`

- The name "play_create_game" says "create": a word for a change.

Description, as the server wrote it:

```untrusted-server-text
Create a new game instance for a given family. Returns initial state to pass to subsequent calls. Variant can include flags like "grand+random" or "standard+drops".
```

### `play_export_fen`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Export the current board position as a FEN-style setup string, in the form the variant's own frontmatter declares its starting position. Card, tile and dice games have no board position to export.
```

### `play_load_fen`

- The description's first verb is "create": a word for a change.

Description, as the server wrote it:

```untrusted-server-text
Create a game from a FEN-style setup string, as returned by play_export_fen. Pass the same variant the position was exported from.
```

### `play_make_moves`

- The name "play_make_moves" says "move": a word for a change.

Description, as the server wrote it:

```untrusted-server-text
Apply a sequence of moves to a game and return the final state. Stops at the first illegal move. Move objects must match play_get_moves format.
```

### `play_render_board`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Render the current board position as SVG for any playable family (chess, draughts, go, reversi, shogi, xiangqi, mancala, morris, hex, landlords-game, backgammon, standard-52, bavarian-32, flower-48, double-six-dominoes, mahjong, standard-dice, agon, asalto, chaupar, dou-shou-qi, fanorona, halma, nyout, pachisi, royal-ur, senet, stern-halma, surakarta, tafl).
```

### `play_suggest_move`

- The name "play_suggest_move" says "move": a word for a change.

Description, as the server wrote it:

```untrusted-server-text
Use AI to analyse the position and suggest the best move. Supports 5 difficulty levels across all 30 playable families.
```

### `random_player_order`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Randomise turn order for a list of players
```

### `rpg_chargen`

- The description's first verb is "generate": a word for a change.

Description, as the server wrote it:

```untrusted-server-text
Generate a random character for an RPG system (D&D 5e, Pathfinder, Ironsworn, Cairn, Knave, etc)
```

### `rpg_loot`

- The description's first verb is "generate": a word for a change.

Description, as the server wrote it:

```untrusted-server-text
Generate random loot/treasure for a system and tier
```

### `rpg_random_encounter`

- The description's first verb is "generate": a word for a change.

Description, as the server wrote it:

```untrusted-server-text
Generate a random encounter for a system and difficulty level
```

### `talisman_draw_characters`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Draw random characters from the Talisman 4e (revised) base set for a character lottery
```

### `talisman_draw_encounter`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Draw a random encounter for a Talisman ring (outer, middle, inner, crown)
```

### `team_split`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Randomly divide players into teams
```

### `ti4_draft_factions`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Milty-style TI4 draft with pick pools per player
```

### `ti4_draw_agendas`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Draw random agenda cards for TI4 political phase
```

### `ti4_draw_objectives`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Draw random public objectives for TI4
```

### `ti4_random_factions`

- The description's first verb is "generate": a word for a change.

Description, as the server wrote it:

```untrusted-server-text
Generate random faction assignments for Twilight Imperium 4th Edition
```

### `timer_suggest`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Suggest time controls for a game based on player count and complexity
```

## Only reads (50)

Looks things up and changes nothing. Claude Code: allow.

### `board_gallery_get`

- The name "board_gallery_get" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Get details of a specific board layout by ID
```

### `board_gallery_search`

- The name "board_gallery_search" says "search": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Search the board gallery (335 rendered board layouts across 34 game families)
```

### `board_gallery_stats`

- The description's first verb is "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Get statistics about the board gallery (total boards, families, topologies)
```

### `chess_analyze_position`

- The name "chess_analyze_position" says "analyze": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
[DEPRECATED — use play_suggest_move] Analyse a chess position. Removal: v1.0.0.
```

### `chess_get_legal_moves`

- The name "chess_get_legal_moves" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
[DEPRECATED — use play_create_game + play_get_moves] Get legal moves for a chess position. Removal: v1.0.0.
```

### `chess_get_opening_book`

- The name "chess_get_opening_book" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
[REMOVED — engine#98] Opening book resolution is broken in Worker context. No replacement.
```

### `chess_get_status`

- The name "chess_get_status" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
[DEPRECATED — use play_check_status] Get chess game status. Removal: v1.0.0.
```

### `chess_list_puzzle_types`

- The name "chess_list_puzzle_types" says "list": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
List available puzzle variants, themes, and per-variant counts from the puzzle pool
```

### `chess_list_variants`

- The name "chess_list_variants" says "list": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
[DEPRECATED — use play_list_variants] List chess variants. Removal: v1.0.0.
```

### `chess_validate_move`

- The name "chess_validate_move" says "validate": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
[DEPRECATED — use play_validate_move] Check if a chess move is legal. Removal: v1.0.0.
```

### `game_deck_list_types`

- The name "game_deck_list_types" says "list": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
List all available deck types with metadata
```

### `game_nukes_combat`

- The description's first verb is "resolve": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Resolve a Nukes combat encounter between units
```

### `hex_get_info`

- The name "hex_get_info" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Get info about a specific hex coordinate (terrain, neighbours, distance)
```

### `hex_list_games`

- The name "hex_list_games" says "list": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
List all available hex map game types with configuration options
```

### `hex_pathfind`

- The description's first verb is "find": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Find shortest path between two hex coordinates
```

### `jam_status`

- The name "jam_status" says "status": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Get the current Mod Jam status (active jam, deadline, submissions)
```

### `jam_timer`

- The description's first verb is "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Get time remaining in the current Mod Jam
```

### `jam_vote`

- The description's first verb is "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Get voting status for the current Mod Jam
```

### `oracle_interpret`

- The description's first verb is "resolve": a word for reading.
- Tag private-data: The input names a table (input.source_table), and the tool reads: it reads databases.

Description, as the server wrote it:

```untrusted-server-text
Resolve oracle cross-references. Given a result like "Action + Theme", follows references and returns expanded results
```

### `oracle_list_games`

- The name "oracle_list_games" says "list": a word for reading.
- Tag private-data: The description's first sentence says "list" and "table": it reads databases.

Description, as the server wrote it:

```untrusted-server-text
List all supported RPG systems with oracle tables and entity data availability
```

### `oracle_list_recipes`

- The name "oracle_list_recipes" says "list": a word for reading.
- Tag private-data: The description's first sentence says "list" and "table": it reads databases.

Description, as the server wrote it:

```untrusted-server-text
List all predefined scene recipes — curated multi-table compositions that produce coherent narrative prompts
```

### `oracle_list_tables`

- The name "oracle_list_tables" says "list": a word for reading.
- Tag private-data: The name "oracle_list_tables" says "list" and "table": it reads databases. The description's first sentence says "list" and "table": it reads databases.

Description, as the server wrote it:

```untrusted-server-text
List available oracle tables for a system
```

### `oracle_table_view`

- The name "oracle_table_view" says "view": a word for reading.
- Tag private-data: The name "oracle_table_view" says "view" and "table": it reads databases. The description's first sentence says "view" and "table": it reads databases. The input names a table (input.table), and the tool reads: it reads databases.

Description, as the server wrote it:

```untrusted-server-text
View the complete contents of an oracle table — all entries with roll ranges
```

### `piece_gallery_get_set`

- The name "piece_gallery_get_set" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Get full details and piece list for a specific set
```

### `piece_gallery_search`

- The name "piece_gallery_search" says "search": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Search the piece set gallery by name, style, or game type
```

### `piece_gallery_stats`

- The description's first verb is "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Get statistics about the piece gallery (total sets, styles, authors, game families)
```

### `play_check_status`

- The name "play_check_status" says "status": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Check the current game status: whose turn it is, whether the game is over, and who won.
```

### `play_get_definition`

- The name "play_get_definition" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Get the full engine definition (topology, render config, pieces, setup FEN) for a game variant. Returns the resolved frontmatter used to render and play the game.
```

### `play_get_moves`

- The name "play_get_moves" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Get all legal moves for the current position. Requires state from play_create_game or play_apply_move.
```

### `play_list_families`

- The name "play_list_families" says "list": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
List all playable game families supported by the engine (chess, draughts, go, reversi, shogi, xiangqi, mancala, morris, hex, landlords-game, backgammon, standard-52, bavarian-32, flower-48, double-six-dominoes, mahjong, standard-dice, agon, asalto, chaupar, dou-shou-qi, fanorona, halma, nyout, pachisi, royal-ur, senet, stern-halma, surakarta, tafl)
```

### `play_list_variants`

- The name "play_list_variants" says "list": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
List available variants for a game family. Each variant can be passed to play_create_game. Variants with flags (e.g. +random) can be requested as "slug+flag".
```

### `play_validate_move`

- The name "play_validate_move" says "validate": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
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.
```

### `rpg_browse_category`

- The name "rpg_browse_category" says "browse": a word for reading.
- Tag untrusted-input: The name "rpg_browse_category" says "browse": it reads web pages, which anyone can write. The description's first sentence says "browse": it reads web pages, which anyone can write.

Description, as the server wrote it:

```untrusted-server-text
Browse entities by category with pagination
```

### `rpg_get_entity`

- The name "rpg_get_entity" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Get full details of a specific RPG entity by name
```

### `rpg_list_categories`

- The name "rpg_list_categories" says "list": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
List entity categories for an RPG system (spells, monsters, classes, equipment, etc)
```

### `rpg_random`

- The description's first verb is "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Get random entities from an RPG system for inspiration or encounter prep
```

### `rpg_search_entities`

- The name "rpg_search_entities" says "search": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Search RPG entities (spells, monsters, classes, items) across all systems
```

### `rules_get_diagram`

- The name "rules_get_diagram" says "get": a word for reading.
- Tag untrusted-input: The description's first sentence says "get" and "url": it reads web pages, which anyone can write.

Description, as the server wrote it:

```untrusted-server-text
Get board diagram SVG URL for a game variant. Returns the diagram path, topology, and rendering metadata.
```

### `rules_get_game`

- The name "rules_get_game" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Get full rulebook content for a specific game (markdown). For metadata only, use rules_get_game_meta instead.
```

### `rules_get_game_meta`

- The name "rules_get_game_meta" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Get structured metadata for a game: players, duration, complexity, mechanics, how_to_play, variant list, page list, related games. Lightweight alternative to fetching the full rulebook.
```

### `rules_get_page`

- The name "rules_get_page" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Get a specific page/section from a game rulebook (e.g. character creation, combat rules, marketplace). Use rules_get_game_meta to see available pages.
```

### `rules_get_variant`

- The name "rules_get_variant" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Get rules for a specific game variant
```

### `rules_get_variant_list`

- The name "rules_get_variant_list" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
List all variants for a game with structured metadata (players, board, playable status, topology, engine config). Much richer than parsing the rulebook.
```

### `rules_list_games`

- The name "rules_list_games" says "list": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
List all available game rulebooks with metadata (players, duration, complexity, mechanics). Filterable by type, complexity, and mechanics.
```

### `rules_random`

- The description's first verb is "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Get a random game suggestion from the library
```

### `rules_search`

- The name "rules_search" says "search": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Full-text search across all published rulebooks. Returns section-typed results with deep-link anchors.
```

### `ti4_list_factions`

- The name "ti4_list_factions" says "list": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
List all TI4 factions with colors, flags, and expansion info
```

### `tile_gallery_get`

- The name "tile_gallery_get" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Get details of a specific tile set with all tile types
```

### `tile_gallery_search`

- The name "tile_gallery_search" says "search": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Search hex tile sets by name, game, or terrain type
```

### `tile_gallery_stats`

- The description's first verb is "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Get statistics about available tile sets
```

## Claude Code permissions

For `.claude/settings.json`, assuming the server is installed as `moddable-games-tools`:

```json
{
  "permissions": {
    "allow": [
      "mcp__moddable-games-tools__chess_list_puzzle_types",
      "mcp__moddable-games-tools__chess_list_variants",
      "mcp__moddable-games-tools__chess_get_legal_moves",
      "mcp__moddable-games-tools__chess_analyze_position",
      "mcp__moddable-games-tools__chess_validate_move",
      "mcp__moddable-games-tools__chess_get_status",
      "mcp__moddable-games-tools__chess_get_opening_book",
      "mcp__moddable-games-tools__hex_list_games",
      "mcp__moddable-games-tools__hex_get_info",
      "mcp__moddable-games-tools__hex_pathfind",
      "mcp__moddable-games-tools__play_list_families",
      "mcp__moddable-games-tools__play_list_variants",
      "mcp__moddable-games-tools__play_get_definition",
      "mcp__moddable-games-tools__play_get_moves",
      "mcp__moddable-games-tools__play_check_status",
      "mcp__moddable-games-tools__play_validate_move",
      "mcp__moddable-games-tools__rules_list_games",
      "mcp__moddable-games-tools__rules_get_game",
      "mcp__moddable-games-tools__rules_get_game_meta",
      "mcp__moddable-games-tools__rules_get_page",
      "mcp__moddable-games-tools__rules_get_variant_list",
      "mcp__moddable-games-tools__rules_get_diagram",
      "mcp__moddable-games-tools__rules_get_variant",
      "mcp__moddable-games-tools__rules_search",
      "mcp__moddable-games-tools__rules_random",
      "mcp__moddable-games-tools__board_gallery_search",
      "mcp__moddable-games-tools__board_gallery_get",
      "mcp__moddable-games-tools__tile_gallery_search",
      "mcp__moddable-games-tools__tile_gallery_get",
      "mcp__moddable-games-tools__tile_gallery_stats",
      "mcp__moddable-games-tools__board_gallery_stats",
      "mcp__moddable-games-tools__piece_gallery_search",
      "mcp__moddable-games-tools__piece_gallery_get_set",
      "mcp__moddable-games-tools__piece_gallery_stats",
      "mcp__moddable-games-tools__oracle_list_games",
      "mcp__moddable-games-tools__oracle_list_tables",
      "mcp__moddable-games-tools__rpg_search_entities",
      "mcp__moddable-games-tools__rpg_get_entity",
      "mcp__moddable-games-tools__rpg_browse_category",
      "mcp__moddable-games-tools__oracle_list_recipes",
      "mcp__moddable-games-tools__oracle_interpret",
      "mcp__moddable-games-tools__oracle_table_view",
      "mcp__moddable-games-tools__rpg_list_categories",
      "mcp__moddable-games-tools__rpg_random",
      "mcp__moddable-games-tools__ti4_list_factions",
      "mcp__moddable-games-tools__game_nukes_combat",
      "mcp__moddable-games-tools__game_deck_list_types",
      "mcp__moddable-games-tools__jam_status",
      "mcp__moddable-games-tools__jam_timer",
      "mcp__moddable-games-tools__jam_vote"
    ],
    "ask": [
      "mcp__moddable-games-tools__chess_generate_puzzle",
      "mcp__moddable-games-tools__chess_make_move",
      "mcp__moddable-games-tools__chess_render_svg",
      "mcp__moddable-games-tools__chess_make_moves",
      "mcp__moddable-games-tools__hex_generate_map",
      "mcp__moddable-games-tools__hex_export_svg",
      "mcp__moddable-games-tools__hex_compute_fov",
      "mcp__moddable-games-tools__play_create_game",
      "mcp__moddable-games-tools__play_apply_move",
      "mcp__moddable-games-tools__play_suggest_move",
      "mcp__moddable-games-tools__play_render_board",
      "mcp__moddable-games-tools__play_export_fen",
      "mcp__moddable-games-tools__play_load_fen",
      "mcp__moddable-games-tools__play_make_moves",
      "mcp__moddable-games-tools__rpg_chargen",
      "mcp__moddable-games-tools__oracle_roll",
      "mcp__moddable-games-tools__oracle_ask",
      "mcp__moddable-games-tools__oracle_scene",
      "mcp__moddable-games-tools__rpg_random_encounter",
      "mcp__moddable-games-tools__rpg_loot",
      "mcp__moddable-games-tools__oracle_encounter",
      "mcp__moddable-games-tools__ti4_random_factions",
      "mcp__moddable-games-tools__ti4_draft_factions",
      "mcp__moddable-games-tools__ti4_draw_objectives",
      "mcp__moddable-games-tools__ti4_draw_agendas",
      "mcp__moddable-games-tools__nukes_setup_generator",
      "mcp__moddable-games-tools__colony_dice_odds",
      "mcp__moddable-games-tools__game_deck_create",
      "mcp__moddable-games-tools__game_deck_deal",
      "mcp__moddable-games-tools__game_score_tracker",
      "mcp__moddable-games-tools__talisman_draw_characters",
      "mcp__moddable-games-tools__talisman_draw_encounter",
      "mcp__moddable-games-tools__dice_roll",
      "mcp__moddable-games-tools__coin_flip",
      "mcp__moddable-games-tools__team_split",
      "mcp__moddable-games-tools__random_player_order",
      "mcp__moddable-games-tools__timer_suggest",
      "mcp__moddable-games-tools__game_jam_theme",
      "mcp__moddable-games-tools__dice_odds"
    ],
    "deny": []
  }
}
```

Capability tags behind the rules (a read tagged outbound is asked about):

- `mcp__moddable-games-tools__rules_get_diagram`: untrusted-input
- `mcp__moddable-games-tools__oracle_list_games`: private-data
- `mcp__moddable-games-tools__oracle_list_tables`: private-data
- `mcp__moddable-games-tools__rpg_browse_category`: untrusted-input
- `mcp__moddable-games-tools__oracle_list_recipes`: private-data
- `mcp__moddable-games-tools__oracle_interpret`: private-data
- `mcp__moddable-games-tools__oracle_table_view`: private-data

## Remote posture

What an anonymous client saw at the remote endpoint, last 2026-10-22T14:48:29.608Z, unchanged since 2026-10-22T14:48:29.608Z. No credentials were sent and no tool was called. Values are shown as the endpoint returned them. Method: https://anlyon.dev/methodology#remote-posture

| Fact | Observed |
| --- | --- |
| Reachable | `yes` |
| HTTP status of an anonymous initialize | `200` |
| tools/list served without credentials | `yes` |
| Tools that change things, listed without credentials | `39` |
| Protocol version | `2025-03-26` |
| WWW-Authenticate on 401 | `not observed` |
| resource_metadata in WWW-Authenticate | `none` |
| RFC 9728 protected resource metadata | `none` |
| Authorization servers | `none` |
| Legacy HTTP+SSE transport | `no` |
| Dynamic client registration | `not observed` |
| Client ID metadata documents | `not observed` |

- **warn** Tools that change things, listed to anyone ([unauth-remote-writes](https://anlyon.dev/methodology#unauth-remote-writes))

```untrusted-server-text
The endpoint served tools/list without credentials, and the list has 39 tools that change things (39 write). Whether a call also works without credentials was not tested: tools are never called.

https://tools.moddable.games/mcp: tools/list returned 89 tools to an anonymous client, including chess_generate_puzzle (write), chess_make_move (write), chess_render_svg (write), chess_make_moves (write), hex_generate_map (write) and 34 more
```
