ice-puzzle-mcp
# 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
```bash
npm install -g ice-puzzle-mcp
```
Or run without global install:
```bash
npx -y ice-puzzle-mcp setup
```
### 2) Get an API key (required for remote drafts, preview, publish)
1. Open [https://ice-puzzle-game.web.app/settings](https://ice-puzzle-game.web.app/settings).
2. Open `Settings > Developer`.
3. Sign in with Google.
4. Click generate API key.
5. Copy the key (`ipk_...`) and keep it private.
### 3) Run setup
```bash
ice-puzzle-mcp setup
```
If you did not install globally, use:
```bash
npx -y ice-puzzle-mcp setup
```
Setup will:
- Validate your API key by exchanging it once.
- Save config to `~/.ice-puzzle-mcp/config.json` with `0600` permissions.
- 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
```bash
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_puzzle` app solver/runtime.
- Enforces canonical publish checks: `par == shortest`, timeout death at `moves >= 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
```bash
npm install ice-puzzle-mcp
```
## Run
```bash
npx ice-puzzle-mcp serve
```
## Optional Auth Setup (for remote drafts + publishing)
1. Open [https://ice-puzzle-game.web.app/settings](https://ice-puzzle-game.web.app/settings).
2. Sign in with Google.
3. Go to `Settings > Developer` and generate an API key.
4. Run setup and paste your key when prompted:
```bash
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:
```bash
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.
1. Give each model the same prompt and constraints.
2. 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`.
3. Require the same build loop: edit one mechanic at a time and run `solve_level` after each change.
4. 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)
5. 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)
6. 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_level`
- `get_level`
- `save_local_draft`
- `load_local_draft`
- `list_drafts`
- `delete_draft`
- `import_level`
- `export_level`
- `rename_level`
- `clear_level`
### History + Recovery (3)
- `undo`
- `redo`
- `revert_to_last_solvable`
### Tile + Region Operations (6)
- `place_tile`
- `remove_tile`
- `move_tile`
- `place_tiles_batch`
- `fill_region`
- `clear_region`
### Grid + Positions (5)
- `set_grid_size`
- `set_start`
- `set_goal`
- `set_par`
- `set_par_to_shortest`
### Special Elements (10)
- `add_warp_pair`
- `remove_warp`
- `add_thin_ice`
- `remove_thin_ice`
- `add_pushable_rock`
- `remove_pushable_rock`
- `set_pressure_plate`
- `remove_pressure_plate`
- `set_barrier`
- `remove_barrier`
### Solver + Validation (10)
- `solve_level`
- `test_placement`
- `reachable_from`
- `suggest_stop_points`
- `simulate_move`
- `simulate_playthrough`
- `analyze_difficulty`
- `validate_quality_gate`
- `check_publish_readiness`
- `visualize_level`
### Layout Seeding (2)
- `seed_layout_pattern`
- `suggest_skeleton_layout`
### Rules + Docs (4)
- `get_game_rules`
- `get_tile_types`
- `get_level_requirements`
- `interaction_faq`
### Campaign Examples (2)
- `list_campaign_examples`
- `get_campaign_example`
### Firebase / Publishing (11)
- `save_draft`
- `load_draft`
- `list_remote_drafts`
- `delete_remote_draft`
- `list_my_published_levels`
- `get_my_published_level`
- `unpublish_level`
- `restore_published_level`
- `publish_level`
- `preview_level`
- `auth_status`
## Canonical Rules Enforced
- Non-tutorial levels may have tied optimal paths, but shortest optimal length must equal `par`.
- Any path shorter than `par` is a hard failure.
- Timeout death is strict: if moves `>= par` and goal not reached, run fails (`WASTED`).
- Warp behavior: stepping on warp teleports to pair and ends movement.
- Hot Coals/hot tile behavior: `-5 HP` on landing and `-5 HP/sec` while 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_level` for staging links and `check_publish_readiness` before `publish_level`.
- Published level lifecycle tools are available via `list_my_published_levels`, `get_my_published_level`, `unpublish_level`, and `restore_published_level`.
## Development
```bash
npm install
npm run build
npm test
```
## License
MIT
TDQS
Scored across 63 tools
Most tools have distinct purposes, but some overlap exists, such as 'clear_level' and 'clear_region' both clearing elements, and 'place_tile' and 'place_tiles_batch' differing only in batch size. Descriptions help differentiate, but minor confusion could occur in selection.
Tool names follow a highly consistent snake_case pattern with clear verb_noun structures, such as 'add_pushable_rock', 'remove_tile', and 'simulate_move'. This predictability aids agent understanding and reduces errors.
With 63 tools, the count is excessive for an ice puzzle level editor, leading to potential overwhelm and redundancy. A more focused set of 15-30 tools would better suit the domain without sacrificing functionality.
The toolset provides comprehensive coverage for ice puzzle level creation, including CRUD operations (e.g., create, edit, delete), simulation, solving, publishing, and validation. No obvious gaps exist for the intended purpose.