Provides a suite of tools for managing remote level data via Firebase, including operations for saving, loading, and listing remote drafts, as well as publishing and unpublishing levels to the community platform.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ice-puzzle-mcpAnalyze the difficulty of my current level and check if it's ready to publish."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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
Or run without global install:
2) Get an API key (required for remote drafts, preview, publish)
Open
Settings > Developer.Sign in with Google.
Click generate API key.
Copy the key (
ipk_...) and keep it private.
3) Run setup
If you did not install globally, use:
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
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
Run
Optional Auth Setup (for remote drafts + publishing)
Sign in with Google.
Go to
Settings > Developerand generate an API key.Run setup and paste your key when prompted:
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:
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
License
MIT