Skip to content

Releases: Magedeline/loenn-mcp

v7.2.0 - seleCte levels in one call

Choose a tag to compare

@Magedeline Magedeline released this 23 Oct 00:36

seleCte levels in one call

selecte_generate(name, nb_rooms, proba, width, height, seed, ...) runs seleCte's Markov-chain level generator (through uv), its Julia/Maple encoder and pcgscene's readiness checklist in one call. output_path copies the validated .bin into the mod through the guarded write (backup, protected maps, open editors) and is refused when the checklist finds problems unless allow_problems is set. The level's data.json, room csvs, logs and .bin stay in <state dir>/selecte/<name>.

loenn_mcp/selecte.py finds the clone at SELECTE_DIR, a seleCte folder next to the repository, or ~/seleCte; UV_EXE and JULIA_EXE override the executables. seed and model need the patched clone (upstream seleCte has no --seed and always uses pe_d5_full); the tool reports when a clone lacks them.

First release of everything on cel-upgrades since 7.0.0

  • Safety: timestamped backups outside the mod folder, writes refused while a map is open in an editor, LOENN_MCP_PROTECT, map_copy / map_commit / map_backups / map_restore, semantic map_diff.
  • Editors: editor_open / editor_wait / editor_status / editor_close for Lönn and Rysy, with room preselect and isolated storage.
  • Assets: check_sprites_xml, check_assets.
  • Sprite Fusion and Summer Engine gray-box rooms: sf_make_tileset, sf_import, summer_*.
  • Shared PCG core (csharp/CelPcg.*) and pcg_generate_room with a reach check.
  • Lossless map writes, typed JSON round trip (map_to_json / json_to_map), authoring JSON and merge_json_into_map, the loenn-mcp-author JS package and loenn-json CLI.
  • Live game link over Everest's debug server: game_status, game_reload_map, game_teleport, game_log, game_play_tas.
  • Detailed render_map_html, generated README tool reference, hidden extra tools unless LOENN_MCP_TOOLS=all.

Full notes: RELEASE_NOTES.txt.

Install

MCPB bundle (no PyPI, no Python setup): loenn-mcp-7.2.0.mcpb below is a bundle for hosts that support MCPB, such as Claude Desktop. It uses the uv runtime, so the host installs Python and the dependencies itself; only uv has to be on the machine. Open it in the host and point its "Celeste mod folder" setting at your mod. This is the package the MCP Registry entry io.github.Magedeline/loenn-mcp points to (SHA-256 99aa5f3cd18d0bcc9fc9016683aa7a10b29beaa868161cb40f45f640fe2a90f5).

Python package: the attached wheel installs directly:

pip install https://github.com/Magedeline/loenn-mcp/releases/download/v7.2.0/loenn_mcp-7.2.0-py3-none-any.whl

🤖 Generated with Claude Code

v7.0.0 - Remove AI tools, harden map.bin writes, add pcgscene CLI

Choose a tag to compare

@Magedeline Magedeline released this 22 Jul 06:57

v7.0.0 — Remove AI tools, harden map.bin writes, add the pcgscene CLI

AI removal (breaking)

  • Removed ai_analyze_map, ai_describe_room, ai_suggest_entities, and the ai_analyzer.py module.
  • Dropped the anthropic dependency. Every remaining tool is deterministic/procedural — no API key needed, no calls to any AI/LLM service.
  • Disclaimer: this project was developed with the assistance of Claude (Anthropic) as a coding tool, implementing the algorithms published in Robinet et al., "Towards a Celeste AI Framework" (FDG '25, DOI 10.1145/3723498.3723796). All output has been human-tested.

map.bin write safety

  • write_map now serializes to memory, round-trip validates the bytes by re-parsing them, writes to a temp file, rotates rolling .bak1–.bak3 backups of the existing file, and atomically replaces the target. A crashed or invalid write can no longer destroy a map.
  • Added serialize_map() and read_map_bytes() helpers.

New: pcgscene CLI (console script), batch-first for big maps:

  • scan — score every room (interestingness, difficulty, exit connectivity, spawn presence, fairness gate) plus map-wide reachability from the start room.
  • score — single-room deep report.
  • validate — in-game readiness checklist, exit code 0/1 for CI.
  • fix — safe auto-repairs (missing spawns, bad room names, fake golden berries), with --dry-run and --only, always going through the hardened write_map.
  • diff — room/entity/tile changes between two maps.
  • generate — preset-driven generation (quick/simple_fair/explore/challenge) with reproducible --seed; requires the pcg_helper module from the full build and refuses gracefully without it.
  • Every command supports --json/--out for editor integration.
pip install --upgrade loenn-mcp

v5.2.1 - Documentation and Module Exports Update

Choose a tag to compare

@Magedeline Magedeline released this 29 Jun 21:45

Documentation and module exports update

v5.2.0 - PCGHelper Integration

Choose a tag to compare

@Magedeline Magedeline released this 29 Jun 00:50

PCGHelper integration: MdMC/WFC tile generation, skeleton layout, end-to-end PCG pipeline. 5 new MCP tools (87 total). No new dependencies. See RELEASE_NOTES.txt for full details.

Updated with major bug fixes

Choose a tag to compare

@Magedeline Magedeline released this 13 May 04:32

loenn-mcp v5.1.0 — AI-Powered Analysis

Celeste map editing meets Claude AI. This release adds intelligent design assistance powered by Anthropic's Claude API, giving you AI feedback on your maps, narrative room descriptions, and smart entity placement suggestions.


✨ What's New

3 New AI-Powered MCP Tools

Tool What It Does
ai_analyze_map Get Claude's expert feedback on your map's design, difficulty curve, visuals, or flow
ai_describe_room Generate atmospheric, technical, story, or brief descriptions of any room
ai_suggest_entities Receive specific entity placement recommendations with exact coordinates

🤖 AI Analysis in Action

Analyze Your Map Design

# General design assessment
ai_analyze_map(map_path="Maps/MyMod/1-City.bin", analysis_type="general")
# → "Strengths: Good checkpoint distribution. Suggestions: Add more 
#     strawberries in rooms 3-5, consider a difficulty ramp before the boss..."

# Difficulty curve analysis
ai_analyze_map(map_path="Maps/MyMod/1-City.bin", analysis_type="difficulty")
# → "Room a-01: Easy (2/10). Room a-05: Hard spike (8/10). Consider 
#     adding a checkpoint between a-04 and a-05..."

# Visual design feedback
ai_analyze_map(map_path="Maps/MyMod/1-City.bin", analysis_type="visual")
# → "Good use of dark rooms for atmosphere. Consider varying room sizes
#     more — 70% of rooms are 320x184px..."

Generate Room Descriptions

# Atmospheric narrative
ai_describe_room(map_path="Maps/MyMod/1-City.bin", room_name="lvl_a-03", style="atmospheric")
# → "A windswept precipice where ancient stone meets howling gales. 
#     The path forward hangs suspended over void, each jump a prayer 
#     to the mountain's indifferent heart."

# Technical breakdown
ai_describe_room(map_path="Maps/MyMod/1-City.bin", room_name="lvl_a-03", style="technical")
# → "Vertical climb section with 4 wallbounce opportunities. 
#     Spike hazards on alternating sides create timing challenge. 
#     Refill crystal at midpoint prevents softlock."

# Story snippet
ai_describe_room(map_path="Maps/MyMod/1-City.bin", room_name="lvl_a-03", style="story")
# → "Madeline found the old climber's note here: 'The mountain 
#     doesn't care if you're ready.' She almost turned back."

Get Entity Placement Suggestions

# Add challenge
ai_suggest_entities(map_path="Maps/MyMod/1-City.bin", room_name="lvl_a-03", goal="add_challenge")
# → "1. Add trigger spikes at (120, 80) - forces precise timing
#     2. Replace refill at (200, 100) with double-dash variant
#     3. Add crumble block platform at (160, 120) - no return"

# Improve flow
ai_suggest_entities(map_path="Maps/MyMod/1-City.bin", room_name="lvl_a-03", goal="improve_flow")
# → "1. Add jump-through at (80, 140) - clearer upward path
#     2. Place coin at (240, 80) - rewards risky jump
#     3. Add feather to bypass difficult section (optional path)"

# Add secrets
ai_suggest_entities(map_path="Maps/MyMod/1-City.bin", room_name="lvl_a-03", goal="add_secrets")
# → "1. Hidden strawberry behind fake wall at (300, 160)
#     2. Secret room access via spring at (40, 100) - requires 
#        dash-through-spring tech"

⚙️ Setup

1. Install the update

pip install -U loenn-mcp

2. Get your Claude API key

3. Configure your environment

# Windows (PowerShell)
$env:ANTHROPIC_API_KEY="sk-ant-api03-..."

# Windows (Command Prompt)
set ANTHROPIC_API_KEY=sk-ant-api03-...

# macOS/Linux
export ANTHROPIC_API_KEY="sk-ant-api03-..."

4. Add to VS Code / Claude Desktop config

{
  "mcpServers": {
    "loenn-mcp": {
      "command": "python",
      "args": ["-m", "loenn_mcp.server"],
      "env": {
        "LOENN_MCP_WORKSPACE": "/path/to/your/mod",
        "ANTHROPIC_API_KEY": "sk-ant-api03-..."
      }
    }
  }
}

🛡️ Graceful Degradation

Don't have an API key? No problem. The AI tools will return helpful error messages explaining what's needed:

Claude API Error: ANTHROPIC_API_KEY environment variable not set. 
Set it to your Claude API key from console.anthropic.com

All existing 60+ tools continue to work exactly as before.


📊 Tool Count

Total MCP tools: 63

  • Map Reading: 8 tools
  • Map Editing: 14 tools
  • Room Settings: 5 tools
  • Map Metadata: 4 tools
  • Stylegrounds: 4 tools
  • Decals: 3 tools
  • Entity Catalog: 6 tools
  • Analysis: 12 tools
  • Wiki/Cache: 4 tools
  • Mod Project: 2 tools
  • Import/Export: 2 tools
  • Diff & Fix: 2 tools
  • Procedural Generation: 4 tools
  • Image/Terrain: 3 tools
  • AI Analysis: 3 tools ← NEW!
  • Lönn Manager: 2 tools

📝 Technical Details

  • New dependency: anthropic>=0.40.0 (optional — only needed for AI features)
  • Default model: claude-3-5-sonnet-20241022 (configurable per-call)
  • New module: loenn_mcp/ai_analyzer.py — handles all Claude API interactions
  • Token limits: Map analysis up to 2000 tokens, room descriptions up to 500 tokens

🙏 Credits

AI analysis powered by Anthropic Claude. Built for the Celeste modding community.


Full Changelog: Compare with v5.0.0

Full Changelog: 5.0.0...5.1.0

Updated the Loenn Mcp

Choose a tag to compare

@Magedeline Magedeline released this 03 May 20:14
8959e23

What's Changed

  • Add image-to-map conversion and seeded Perlin+Voronoi terrain generation (v4.0.0) by @devin-ai-integration[bot] in #6
  • Add 32 gdep-inspired analysis and editing tools — expand to 60 MCP tools (v5.0.0) by @devin-ai-integration[bot] in #7

Full Changelog: v3.0.1...5.0.0

v3.0.1 — Drop unused pygame + pytmx deps

Choose a tag to compare

@devin-ai-integration devin-ai-integration released this 03 May 03:50
ccab7f5

loenn-mcp v3.0.1

Patch release: drop unused pygame + pytmx dependencies.

These were added by an earlier PR but never imported anywhere in the
package. They blocked installation on Pythons that don't have prebuilt
pygame wheels (e.g. Windows + Python 3.14), where pip would fall back to
building pygame from source and fail with:

ModuleNotFoundError: No module named
'setuptools._distutils.msvccompiler'

After this release, pip install loenn-mcp only pulls in fastmcp.

v3.0.0 — Stylegrounds & triggers

Choose a tag to compare

@devin-ai-integration devin-ai-integration released this 03 May 03:19
a4164a9

loenn-mcp v3.0.0

Closes the styleground / trigger gap reported by users — previously you could
add entities and rooms via MCP, but stylegrounds and triggers required opening
Lönn manually. Now everything is reachable from the agent.

WHAT'S NEW IN v3.0

6 new MCP tools (28 tools total):

Triggers (room-level, mirror add_entity / remove_entity):
add_trigger — place a trigger in a room with width/height
and optional path nodes; auto-assigns a unique
ID across both entities and triggers.
remove_trigger — delete a trigger by ID.

Stylegrounds (map-level, under Style/Foregrounds and Style/Backgrounds):
list_stylegrounds — numbered listing of FG + BG effects (and the
children of any apply groups).
add_styleground — add a parallax, custom Lua effect (e.g.
2.5DHelper/VoidBg), or an apply group to FG
or BG. Auto-creates Style/Foregrounds/
Backgrounds if missing.
remove_styleground — remove an effect by index.
update_styleground — merge property changes into an existing effect
(set keys, or pass null to clear them).

No new runtime dependencies.

v1.0.0

Choose a tag to compare

@Magedeline Magedeline released this 07 Mar 05:24

loenn-mcp v1.0.0

Celeste map editor for AI agents - read, edit, analyze, and preview Celeste
.bin map files directly from GitHub Copilot, Claude Desktop, or any MCP
client. No Loenn installation required.

INSTALL

pip install loenn-mcp

WHAT'S INCLUDED

  • 18 MCP tools across 5 categories:
    Map Reading - list_maps, read_map_overview, read_room, get_room_tiles
    Map Editing - add_entity, remove_entity, set_room_tiles, add_room,
    remove_room, create_map
    Entity Catalog - list_entity_definitions, get_entity_definition,
    list_trigger_definitions, list_effect_definitions
    Analysis - analyze_map, visualize_map_layout, preview_map_section
    Rendering - render_map_html (interactive HTML, zoom/pan/search)

  • celeste_bin.py -- pure-Python .bin parser, full read/write round-trip
    (no Loenn or Everest required)

  • preview_map.py -- one-command HTML map preview that opens in the browser

  • Works with maps created by Loenn or Ahorn

CONNECT TO GITHUB COPILOT (VS Code)

Add to .vscode/mcp.json:

{
"servers": {
"loenn-mcp": {
"type": "stdio",
"command": "python",
"args": ["-m", "loenn_mcp.server"],
"env": { "LOENN_MCP_WORKSPACE": "${workspaceFolder}" }
}
}
}

CONNECT TO CLAUDE DESKTOP

Add to claude_desktop_config.json:

{
"mcpServers": {
"loenn-mcp": {
"command": "python",
"args": ["-m", "loenn_mcp.server"],
"env": { "LOENN_MCP_WORKSPACE": "/path/to/your/mod" }
}
}
}

REQUIREMENTS

Python 3.9+
fastmcp >= 3.0.0

LICENSE

MIT -- https://github.com/Maggy-Studio/loenn-mcp/blob/main/LICENSE