ice-puzzle-mcp
MCP (Model Context Protocol) server for building, validating, and publishing Ice Puzzle levels with AI assistants.
Why Use This
- Build puzzle levels quickly with solver-backed feedback after each edit.
- Keep design fun: sketch an idea, ask the AI to iterate, and immediately test solvability and quality gates.
- Compare AI (Codex vs Claude Code) models on the same level-design task with objective outputs (
solve_level,analyze_difficulty,validate_quality_gate,check_publish_readiness). - Publish with confidence using preview + readiness checks instead of one-shot blind publishing.
Quick Start (Codex / Claude)
1) Install
npm install -g ice-puzzle-mcp
Or run without global install:
npx -y ice-puzzle-mcp setup
2) Get an API key (required for remote drafts, preview, publish)
- Open https://ice-puzzle-game.web.app/settings.
- Open
Settings > Developer. - Sign in with Google.
- Click generate API key.
- Copy the key (
ipk_...) and keep it private.
3) Run setup
ice-puzzle-mcp setup
If you did not install globally, use:
npx -y ice-puzzle-mcp setup
Setup will:
- Validate your API key by exchanging it once.
- Save config to
~/.ice-puzzle-mcp/config.jsonwith0600permissions. - Register MCP in Codex and Claude when available.
- Auto-discover Codex CLI from PATH and standard app locations (including
/Applications/Codex.app/Contents/Resources/codex).
4) Verify registration
codex mcp list --json
You should see an ice-puzzle-mcp entry. Restart your AI client after setup.
What It Does
- Exposes 63 tools for level editing, solve diagnostics, design assistance, layout seeding, quality gates, campaign examples, local snapshots, preview staging, and Firebase publishing.
- Mirrors gameplay mechanics from the
ice_puzzleapp solver/runtime. - Enforces canonical publish checks:
par == shortest, timeout death atmoves >= par, warp-stop semantics, and hot coals shortcut diagnostics. - Adds design-assist workflow helpers: dry-run placement tests, reachability maps, stop-point suggestions, layout seeding, undo/redo, and revert-to-last-solvable recovery.
- Supports offline-first design (all local tools work without auth).
Install
npm install ice-puzzle-mcp
Run
npx ice-puzzle-mcp serve
Optional Auth Setup (for remote drafts + publishing)
- Open https://ice-puzzle-game.web.app/settings.
- Sign in with Google.
- Go to
Settings > Developerand generate an API key. - Run setup and paste your key when prompted:
npx ice-puzzle-mcp setup
By default, setup uses the correct exchange URL automatically and does not prompt for it. Only use advanced mode if you need to override it:
npx ice-puzzle-mcp setup --advanced
Setup stores config at ~/.ice-puzzle-mcp/config.json with mode 0600, registers ice-puzzle-mcp in Codex via codex mcp add when Codex is installed (including app-bundle fallback discovery at /Applications/Codex.app/Contents/Resources/codex), and updates your Claude MCP config (~/.claude/.mcp.json or ~/.claude/mcp.json) using a unique server key (ice-puzzle-mcp, ice-puzzle-mcp-2, ... if needed).
Firebase client config is no longer hardcoded in the package. By default, it is loaded from
https://<project-id>.web.app/__/firebase/init.json (project ID from config/env, default ice-puzzle-game),
or you can provide explicit ICE_PUZZLE_FIREBASE_* environment variables / firebase overrides in config.
AI Model Comparison Workflow
Use this project as a repeatable level-design benchmark between models.
- Give each model the same prompt and constraints.
- Require title provenance in every generated level name:
- Prefix with
[Claude]for Claude-generated levels. - Prefix with
[Codex]for Codex-generated levels. - Example:
[Codex] L14 - Warp Plate Gauntlet.
- Require the same build loop: edit one mechanic at a time and run
solve_levelafter each change. - Collect objective outputs:
solve_level(solvable, shortest path, moves)analyze_difficulty(difficulty signals, direction balance)validate_quality_gate(pass/fail checks)check_publish_readiness(publish blockers)
- Compare results on:
- Correctness (solvable, no shortcuts, par integrity)
- Design quality (path structure, mechanic integration, anti-shortcut robustness)
- Efficiency (how many edits/iterations needed to pass all checks)
- Optionally publish or preview top candidates and run playthrough feedback.
This makes AI-vs-AI comparisons concrete instead of subjective.
Tool Categories
Level Management (10)
create_levelget_levelsave_local_draftload_local_draftlist_draftsdelete_draftimport_levelexport_levelrename_levelclear_level
History + Recovery (3)
undoredorevert_to_last_solvable
Tile + Region Operations (6)
place_tileremove_tilemove_tileplace_tiles_batchfill_regionclear_region
Grid + Positions (5)
set_grid_sizeset_startset_goalset_parset_par_to_shortest
Special Elements (10)
add_warp_pairremove_warpadd_thin_iceremove_thin_iceadd_pushable_rockremove_pushable_rockset_pressure_plateremove_pressure_plateset_barrierremove_barrier
Solver + Validation (10)
solve_leveltest_placementreachable_fromsuggest_stop_pointssimulate_movesimulate_playthroughanalyze_difficultyvalidate_quality_gatecheck_publish_readinessvisualize_level
Layout Seeding (2)
seed_layout_patternsuggest_skeleton_layout
Rules + Docs (4)
get_game_rulesget_tile_typesget_level_requirementsinteraction_faq
Campaign Examples (2)
list_campaign_examplesget_campaign_example
Firebase / Publishing (11)
save_draftload_draftlist_remote_draftsdelete_remote_draftlist_my_published_levelsget_my_published_levelunpublish_levelrestore_published_levelpublish_levelpreview_levelauth_status
Canonical Rules Enforced
- Non-tutorial levels may have tied optimal paths, but shortest optimal length must equal
par. - Any path shorter than
paris a hard failure. - Timeout death is strict: if moves
>= parand goal not reached, run fails (WASTED). - Warp behavior: stepping on warp teleports to pair and ends movement.
- Hot Coals/hot tile behavior:
-5 HPon landing and-5 HP/secwhile standing. - Thin ice behavior: crossing marks tile broken; entering broken thin ice is fatal.
- Draft payload parity: thin ice and pushables must use dedicated fields (
thinIceTiles,pushableRocks).
Local + Remote Drafts
- Local snapshots are in-memory (this MCP process).
- Remote drafts/publishing use Firebase (
draftLevels,communityLevels,notifications). - Use
preview_levelfor staging links andcheck_publish_readinessbeforepublish_level. - Published level lifecycle tools are available via
list_my_published_levels,get_my_published_level,unpublish_level, andrestore_published_level.
Development
npm install
npm run build
npm test
License
MIT