chess_generate_puzzle
Get a random chess puzzle. Filter by variant, difficulty or theme. Not every variant puzzle carries themes; use chess_list_puzzle_types to see what the pool holds.
themevariantdifficulty
games.moddable.toolsPublished by tools.moddable.gamesOfficial publisherv1.1.0Updated Oct 24, 2026
15 tools for chess variant analysis, hex map generation, and board game utilities
Lets an assistant create and play many chess and board game variants, generate hex maps, and look up board game rules and variants.
Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.
Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.
Read https://sourceweft.com/mcp/games.moddable.tools%2Fmoddable-games-tools/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.Add this to your client's mcpServers config.
{
"mcpServers": {
"moddable-games-tools": {
"type": "http",
"url": "https://tools.moddable.games/mcp"
}
}
}Creating games you already own.
A multi-page marketing site and tools platform for an open-source board game modding workshop. Ten mods. Three original games. Two open-source engines. One Discord.
Modular JS architecture: one loader (js/mg-loader.js) loads 12 shared modules + page-specific scripts. Zero inline scripts or styles.
Open http://localhost:8000/. Clean URLs, no .html extensions.
main branch, root folder<meta name="mg-base"> tag across pages to match your deploy path:Rules: No drop shadows. Pill buttons only. One RGB primary per surface. Hex grid SVG overlay on all dark heroes.
Pages load mg-loader.js (shared modules) + their own page script. Data is fetched via MG.data.get('mods') → Promise, or MG.data.get('mod', 'slug') for single items. Legacy MG.data.load(['mods','news']).then(store => {...}) still works.
tool_name custom dimension in GA4 for per-MCP-tool breakdowns.game-card__logo CSS for logo thumbnails in game/mod cards/tools/dice/ — dice roller + battle simulators for Risk, TI4, Axis & Allies, X-Wing, Blood Bowl, Memoir '44, Custom (#67)/tools/dice/#risk) for sharing/tools/nukes/, /tools/talisman/, /tools/ti/ (#62)js/mg-hexmap-embed.js) + CSS (css/tools-hexmaps.css)/engines/ section: top-level nav item, index page, Moddable Chess + Moddable Hexmaps pagesMods | Games | Engines | Tools | News | About/games/moddable-chess/ → /engines/moddable-chess/ (old URL redirects)/engines/moddable-hexmaps/ showcase page (green accent, no embed yet — pending hexmaps#7)data/engines.json as data source for engine listingsteamSlug field to all news posts — author rendered from team.json, not hardcodedbuild/gen-mod-og.py (reads mods.json), build/gen-tools-og.pylogo field to mods.json, logos display on cards, detail heroes, and OG imagesgen-team-og.py, gen-mod-og.py, gen-tools-og.py, gen-remaining-og.pymg-game-dungeon-chess-page.js — orphaned file not loaded anywhere (closes #52)style="display:none" on chess tools page → CSS class with classList togglestyle:{} objects to dedicated CSS filescss/navbar.css, css/footer.css, css/cards.css (63 rules total)document.write — no per-page HTML changes neededbuild/stamp-meta.py (closes #35)Moddable-Games/moddable-chess repo — shared chess engine with 14 variantsModdable-Games/dungeon-chessmg-base meta tag neededbump.sh single-source from version.txt, footer displays version?v= on all CSS/JS loads across 52 HTML filestheme=light, boardonly=1, bg=, accent=, radius=MG.data to Promise-based API: get(name) → Promise, get(type, slug) → single item lookupready() method (unused); load() kept for backward compatdata/articles/{slug}.html partialsdata/news.jsondata/mods.json, games.json, news.json, team.json)MG.data fetch layer in mg-core.js — async load()/get() patternmg-mods-data.js, mg-games-data.js, mg-news-data.js, mg-team-data.js)MG.data.load().then() patterntext-wrap: pretty to global CSS resets for orphan preventionmg-mod-page.js + mg-mods-content.js)mg-news-article-page.js with data-toc)mg-team-data.js<script> blocks (matches no inline styles)mg-mods-data.js, mg-games-data.js)_mg.js into semantic modules (core, components, animations)MIT
Source: README.md at commit 13c0c23
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.
themevariantdifficultyList available puzzle variants, themes, and per-variant counts from the puzzle pool
Takes no parameters.
[DEPRECATED — use play_list_variants] List chess variants. Removal: v1.0.0.
group[DEPRECATED — use play_create_game + play_get_moves] Get legal moves for a chess position. Removal: v1.0.0.
variant[DEPRECATED — use play_suggest_move] Analyse a chess position. Removal: v1.0.0.
depthvariant[DEPRECATED — use play_apply_move] Apply a move to a chess game. Removal: v1.0.0.
moverequiredvariant[DEPRECATED — use play_validate_move] Check if a chess move is legal. Removal: v1.0.0.
moverequiredvariant[DEPRECATED — use play_check_status] Get chess game status. Removal: v1.0.0.
variant[DEPRECATED — use play_render_board] Render a chess position as SVG. Removal: v1.0.0.
fenvarianthighlights[DEPRECATED — use play_make_moves] Apply a sequence of chess moves. Removal: v1.0.0.
movesrequiredvariant[REMOVED — engine#98] Opening book resolution is broken in Worker context. No replacement.
variantList all available hex map game types with configuration options
Takes no parameters.
Generate a hex map for a specific game and player count
gamerequiredseedsizeplayersGenerate a hex map and export as SVG
gamerequiredseedsizestylehexSizeplayersGet info about a specific hex coordinate (terrain, neighbours, distance)
qrequiredrrequiredgameseedCompute field of view from a hex position
qrequiredrrequiredgameseedrangerequiredFind shortest path between two hex coordinates
endQrequiredendRrequiredgameseedstartQrequiredstartRrequiredList 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)
Takes no parameters.
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".
familyrequiredGet 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.
familyrequiredvariantCreate 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".
familyrequiredrngSeedvariantGet all legal moves for the current position. Requires state from play_create_game or play_apply_move.
staterequiredApply 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"}).
moverequiredstaterequiredCheck the current game status: whose turn it is, whether the game is over, and who won.
staterequiredUse AI to analyse the position and suggest the best move. Supports 5 difficulty levels across all 30 playable families.
staterequireddifficultyRender 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).
sizestaterequiredhighlightsExport 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.
staterequiredCreate a game from a FEN-style setup string, as returned by play_export_fen. Pass the same variant the position was exported from.
fenrequiredfamilyrequiredvariantCheck 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.
moverequiredstaterequiredApply 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.
movesrequiredstaterequiredList all available game rulebooks with metadata (players, duration, complexity, mechanics). Filterable by type, complexity, and mechanics.
statuscategorymechaniccomplexityGet full rulebook content for a specific game (markdown). For metadata only, use rules_get_game_meta instead.
gamerequiredGet 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.
gamerequiredGet a specific page/section from a game rulebook (e.g. character creation, combat rules, marketplace). Use rules_get_game_meta to see available pages.
gamerequiredpagerequiredsectionList all variants for a game with structured metadata (players, board, playable status, topology, engine config). Much richer than parsing the rulebook.
gamerequiredplayabletopologyGet board diagram SVG URL for a game variant. Returns the diagram path, topology, and rendering metadata.
gamerequiredvariantGet rules for a specific game variant
gamerequiredvariantrequiredFull-text search across all published rulebooks. Returns section-typed results with deep-link anchors.
gamelimitqueryrequiredsectionTypeGet a random game suggestion from the library
playersmaxDurationSearch the board gallery (335 rendered board layouts across 34 game families)
limitqueryGet details of a specific board layout by ID
boardrequiredSearch hex tile sets by name, game, or terrain type
queryGet details of a specific tile set with all tile types
setrequiredGet statistics about available tile sets
Takes no parameters.
Get statistics about the board gallery (total boards, families, topologies)
Takes no parameters.
Search the piece set gallery by name, style, or game type
limitqueryrequiredfamilyGet full details and piece list for a specific set
setrequiredGet statistics about the piece gallery (total sets, styles, authors, game families)
Takes no parameters.
List all supported RPG systems with oracle tables and entity data availability
Takes no parameters.
Generate a random character for an RPG system (D&D 5e, Pathfinder, Ironsworn, Cairn, Knave, etc)
classlevelsystemrequiredRoll on a random oracle table (Ironsworn, Starforged, Maze Rats, etc)
tablesystemrequiredList available oracle tables for a system
systemrequiredAsk the oracle a yes/no question with likelihood modifier
questionrequiredlikelihoodGenerate 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.
typereciperegionsystemSearch RPG entities (spells, monsters, classes, items) across all systems
gamelimitqueryrequiredsystemcategoryGet full details of a specific RPG entity by name
gamenamerequiredsystemcategoryGenerate a random encounter for a system and difficulty level
typesystemdifficultyBrowse entities by category with pagination
gamepagesystemrequiredcategoryrequiredpageSizeGenerate random loot/treasure for a system and tier
tiercountsystemList all predefined scene recipes — curated multi-table compositions that produce coherent narrative prompts
gameResolve oracle cross-references. Given a result like "Action + Theme", follows references and returns expanded results
gameresultrequiredsource_tableView the complete contents of an oracle table — all entries with roll ranges
gametablerequiredGenerate a tabletop RPG encounter with CR-appropriate monsters, terrain, and loot (D&D 5e or Pathfinder 1e)
systemterraindifficultyparty_sizeparty_levelmonster_typeList entity categories for an RPG system (spells, monsters, classes, equipment, etc)
gamesystemGet random entities from an RPG system for inspiration or encounter prep
gamerequiredcountsystemcategoryGenerate random faction assignments for Twilight Imperium 4th Edition
playersrequiredexpansionsMilty-style TI4 draft with pick pools per player
choicesplayersexpansionsList all TI4 factions with colors, flags, and expansion info
expansionsDraw random public objectives for TI4
countstageexpansionsDraw random agenda cards for TI4 political phase
typecountexpansionsGenerate random territory/resource setup for a Nukes game
playersResolve a Nukes combat encounter between units
terrainattackerrequireddefenderrequiredCalculate settlement dice probability for Colony/Catan-style resource numbers
numbersrequiredCreate, shuffle, and optionally draw/deal from a card deck
drawtypehandsper_handList all available deck types with metadata
Takes no parameters.
Shuffle and deal a custom deck of arbitrary named cards
drawcardsrequiredhandsper_handTrack scores for players in any game
gamescoresplayersrequiredDraw random characters from the Talisman 4e (revised) base set for a character lottery
countDraw a random encounter for a Talisman ring (outer, middle, inner, crown)
ringGet the current Mod Jam status (active jam, deadline, submissions)
Takes no parameters.
Get time remaining in the current Mod Jam
Takes no parameters.
Get voting status for the current Mod Jam
Takes no parameters.
Roll dice using standard notation (e.g. 2d6+3, 4d8, d20). Supports comma-separated pools and keep-high/low (4d6kh3).
countnotationexpressionFlip one or more coins, or pick from a list of choices
countchoicesRandomly divide players into teams
countteamsmembersplayersrequiredRandomise turn order for a list of players
playersrequiredSuggest time controls for a game based on player count and complexity
gamerequiredplayersGenerate a random game jam theme combining mechanics and themes
countCalculate probability of meeting a target with a dice expression. Supports keep-high/low (4d6kh3).
targetrequiredcomparisonexpressionrequired90% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
Declare a license in the repository or the registry entry.
HTML + Vanilla JS + Zero dependencies + Zero build steppython3 -m http.server 8000#d11a1a red Total conversion / Nukes#3a9928 green Rebalance / Mongo / Endless Skies#0c4f8d blue Reskin / TI tools#0a0d2a cosmicDeep Hero backgrounds#f5f4ef canvasLight Warm off-white sections (not pure white)#14161c ink Primary text on lightjs/├── mg-loader.js ← entry point, loads all modules├── mg-core.js ← tokens, el(), url(), MG.data (fetch layer)├── mg-buttons.js ← btn(), linkBtn()├── mg-cards.js ← modCard(), pageHero()├── mg-navbar.js ← navbar()├── mg-footer.js ← footer()├── mg-search.js ← global Cmd+K search├── mg-animations.js ← scroll reveal + TOC spy├── mg-mods-content.js ← mod page content (rules, components, etc.)├── mg-mod-page.js ← data-driven mod detail renderer├── mg-news-article-page.js ← shared news article renderer└── mg-*-page.js ← page-specific scripts (home, tools, etc.)
data/├── mods.json ← mod library (10 entries)├── games.json ← games (3 entries)├── engines.json ← engine listings (2 entries)├── mcp-tools.json ← MCP tool registry (50 tools, 7 namespaces)├── news.json ← news posts (13 entries)└── team.json ← team members (4 entries)