Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

loenn-mcp

MCPB · LOENN-MCP-7.2.0.MCPB

Celeste map editor for AI agents: read, edit, validate, preview and generate .bin maps.

0 this week 42 Trust /100

Last scanned (2 hours ago)

Scores higher than 73% of MCPB servers

Category Entertainment and Games

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security12
  • No malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.Unverified
  • Known CVEs were checked across the 15 of 15 dependencies we could resolve, so this covers what we could see, not the whole tree.Partial
  • Install-script risk not yet assessed.Unverified
  • 1 of 15 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency45
Schema Quality & AI Usability71
  • AI-judged instruction clarity (good).Pass
  • Tool/resource definitions use about 7885 tokens (~88/item across 89 items; 89 tools + 0 resources), lean.Pass
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
  • Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 99% of tool parameters carry a description.Partial
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 6 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "remove_entity" implies "remove" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
  • An AI judge read all 90 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass

Unverified: 1 category

A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 23 Oct 26 42

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Analysed mcpb/https://github.com/Magedeline/loenn-mcp/releases/download/v7.2.0/loenn-mcp-7.2.0.mcpb@7.2.0

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem mcpb
Reason No attestation published

Background: How many MCP packages publish verified provenance →

Dependencies 15 packages
Packages resolved 15
Stale 1
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 89 exposed · ~7,588 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
merge_json_into_map ~131

Add entities, triggers and rooms from authoring JSON to an existing map.

NameTypeReqDescription
allow_problemsboolean–Write even when placement checks fail
allow_unknownboolean–Place objects with no Lönn definition anyway
authoring_jsonstringyesInline JSON or a path to a .json file (see check_authoring_json)
dry_runboolean–Only show the diff (default). Set false to write.
map_pathstringyesPath to the .bin file
previewboolean–Also render an HTML preview with the additions highlighted
NameTypeReqDescription
resultstringyes–

No examples provided.

move_entity ~76

Move an entity to a new position.

NameTypeReqDescription
entity_idintegeryesID of the entity to move.
map_pathstringyesPath to the .bin file.
room_namestringyesRoom containing the entity.
xintegeryesNew X position.
yintegeryesNew Y position.
NameTypeReqDescription
resultstringyes–

No examples provided.

move_room ~66

Move a room to a new world-space position.

NameTypeReqDescription
map_pathstringyesPath to the .bin file
room_namestringyesRoom name
xintegeryesNew X position in pixels
yintegeryesNew Y position in pixels
NameTypeReqDescription
resultstringyes–

No examples provided.

pcg_generate_room ~335

Generate a gray-box room with the shared C# PCG core and write it into a map (dry run first).

NameTypeReqDescription
allow_problemsboolean–Write even when placement checks fail
bgstring–Background tileset character
difficultyinteger–1 (gentle) to 10 (hard): hop length, spikes, jump-throughs, refills
dry_runboolean–Only show the result (default)
entryinteger–Index in exits of the exit the player enters by (must be left or right)
exitsstring–Comma list of side:offset:size in tiles (side left/right/top/bottom; offset = first row or column)
fgstring–Foreground tileset character for solid tiles
heightinteger–Room height in tiles (23 = one screen)
map_pathstringyesMap to write into (the base when output_path is set)
output_pathstring–Write to this .bin instead of map_path
replaceboolean–Replace an existing room's tiles and entities (solid cells keep their tileset)
roomstringyesRoom name (lvl_ is added if the map's rooms use it)
seed––Seed; default derived from the map path and room name
widthinteger–Room width in tiles (40 = one screen)
x––Room x in pixels for a new room; default: right of the existing rooms
y––Room y in pixels for a new room
NameTypeReqDescription
resultstringyes–

No examples provided.

preview_map_section ~112

Generate an ASCII preview of a map section, like a Lönn mini-map.

NameTypeReqDescription
center_roomstring–Center the view on this room name
colsinteger–Terminal width for the preview (default 140)
map_pathstringyesPath to the .bin file
prefixstring–Only show rooms whose name starts with this (e.g. "g-", "h-")
rowsinteger–Terminal height for the preview (default 60)
NameTypeReqDescription
resultstringyes–

No examples provided.

read_map_metadata ~36

Read high-level metadata from a map without listing all room contents.

NameTypeReqDescription
map_pathstringyesPath to the .bin file.
NameTypeReqDescription
resultstringyes–

No examples provided.

read_map_overview ~45

Parse a .bin map file and return a summary of rooms and structure.

NameTypeReqDescription
map_pathstringyesPath to the .bin file (relative to workspace or absolute)
NameTypeReqDescription
resultstringyes–

No examples provided.

read_room ~54

Get detailed data for a specific room: tiles, entities, triggers.

NameTypeReqDescription
map_pathstringyesPath to the .bin file
room_namestringyesRoom name (with or without 'lvl_' prefix)
NameTypeReqDescription
resultstringyes–

No examples provided.

remove_decal ~68

Remove a decal by index.

NameTypeReqDescription
indexintegeryesDecal index (from list_decals output).
layerstring–"fg" or "bg".
map_pathstringyesPath to the .bin file.
room_namestringyesRoom name.
NameTypeReqDescription
resultstringyes–

No examples provided.

remove_entity ~54

Remove an entity from a room by its ID.

NameTypeReqDescription
entity_idintegeryesEntity ID to remove
map_pathstringyesPath to the .bin file
room_namestringyesRoom name
NameTypeReqDescription
resultstringyes–

No examples provided.

remove_room ~41

Remove a room from a map.

NameTypeReqDescription
map_pathstringyesPath to the .bin file
room_namestringyesRoom name to remove
NameTypeReqDescription
resultstringyes–

No examples provided.

remove_styleground ~76

Remove a styleground from a map by its index in the layer.

NameTypeReqDescription
indexintegeryes0-based index of the styleground in that layer
layerstringyes"fg"/"foregrounds" or "bg"/"backgrounds"
map_pathstringyesPath to the .bin file
NameTypeReqDescription
resultstringyes–

No examples provided.

remove_trigger ~54

Remove a trigger from a room by its ID.

NameTypeReqDescription
map_pathstringyesPath to the .bin file
room_namestringyesRoom name
trigger_idintegeryesTrigger ID to remove
NameTypeReqDescription
resultstringyes–

No examples provided.

rename_room ~59

Rename a room in a map.

NameTypeReqDescription
map_pathstringyesPath to the .bin file
new_namestringyesNew room name (lvl_ prefix added automatically if missing)
room_namestringyesCurrent room name
NameTypeReqDescription
resultstringyes–

No examples provided.

render_map_html ~212

Render an interactive HTML map preview with zoom, pan, search, and detail panel.

NameTypeReqDescription
detailboolean–Draw each room's solid/background tiles and entity markers (hazards red, collectibles gold, spawns green, refills light green). False draws room boxes only.
map_pathstringyesPath to a .bin file, or to a typed JSON dump made by map_to_json
output_filestring–Output HTML filename (default: map_preview.html in Temp/)
overlaystring–Authoring JSON (inline, or a path to a .json file) to preview as a merge: it is applied in memory only, and every object it would add is ringed in magenta (red when a placement check failed). Nothing…
prefixstring–Only show rooms matching this prefix (e.g. "g-", "w-"); works whether or not the map's room names carry 'lvl_'
NameTypeReqDescription
resultstringyes–

No examples provided.

replace_audio_event ~113

Find and replace an FMOD audio event path anywhere in a map.

NameTypeReqDescription
dry_runboolean–If true, report what would change without writing the file
map_pathstringyesPath to the .bin file
new_eventstringyesReplacement substring, e.g. "DZ"
old_eventstringyesSubstring to find, e.g. "pusheen" or a full event path like "event:/music/pusheen/lvl2/beginning"
NameTypeReqDescription
resultstringyes–

No examples provided.

resize_room ~93

Resize a room (snaps to 8-pixel grid, preserves tile data).

NameTypeReqDescription
heightintegeryesNew height in pixels (must be multiple of 8, min 40)
map_pathstringyesPath to the .bin file
room_namestringyesRoom name
widthintegeryesNew width in pixels (must be multiple of 8, min 40)
NameTypeReqDescription
resultstringyes–

No examples provided.

run_author_script ~126

Run a JavaScript authoring script (js/ package, lucid-dream style) and use its output.

NameTypeReqDescription
allow_problemsboolean–See merge_json_into_map
allow_unknownboolean–See merge_json_into_map
dry_runboolean–Only show the diff when merging (default)
map_pathstring–Map to merge into (optional)
output_jsonstring–Where to save the generated authoring JSON (default: Export/<script>.authoring.json)
script_pathstringyesThe .js file
NameTypeReqDescription
resultstringyes–

No examples provided.

search_entities ~126

Search for entities across all rooms (or a specific room) by type and/or position.

NameTypeReqDescription
entity_typestring–Filter by entity type name (substring match). Empty = all.
map_pathstringyesPath to the .bin file.
max_xinteger–Maximum X position filter.
max_yinteger–Maximum Y position filter.
min_xinteger–Minimum X position filter.
min_yinteger–Minimum Y position filter.
room_namestring–Search only in this room. Empty = all rooms.
NameTypeReqDescription
resultstringyes–

No examples provided.

search_triggers ~69

Search for triggers across all rooms by type.

NameTypeReqDescription
map_pathstringyesPath to the .bin file.
room_namestring–Search only in this room. Empty = all rooms.
trigger_typestring–Filter by trigger type (substring match). Empty = all.
NameTypeReqDescription
resultstringyes–

No examples provided.

selecte_generate ~323

Generate a whole level with seleCte (rooms sampled from a Markov model of the vanilla maps), encode it with Julia and validate the .bin.

NameTypeReqDescription
allow_problemsboolean–Copy to output_path even when the checklist reports problems
heightinteger–Room height in tiles (14 is quick, 23 = one screen)
modelstring–Probability-estimation dictionary (file stem in seleCte's probability_estimation_dicts); default pe_d5_full
namestringyesLevel name: the .bin file stem and the work folder (letters, digits, - and _)
nb_roomsinteger–Number of rooms
output_pathstring–Also copy the validated .bin to this map path in the workspace (backup, protected maps, open editors apply)
probanumber–Layout shape: 0 is a straight corridor, values near 1 a labyrinth
reset_skeletonboolean–Redraw the whole layout when a room never comes out playable
seed––Seed for reproducible runs (needs the patched seleCte clone)
timeoutinteger–Seconds allowed for each of the two steps
tries_limitinteger–Resample attempts per room before it is kept as it is
widthinteger–Room width in tiles (22 is quick, 40 = one screen but slow)
work_dirstring–Folder for the level's files; default <state dir>/selecte/<name>
NameTypeReqDescription
resultstringyes–

No examples provided.

set_map_dependencies ~112

Write or update the mod dependency list in the map's everest.yaml.

NameTypeReqDescription
dependenciesstringyesJSON array of dependency objects, each with "Name" and "Version" fields. Use "Celeste" and "Everest" as base deps. Example: '[{"Name":"Everest","Version":"1.0.0"},…
map_pathstringyesPath to the .bin file
NameTypeReqDescription
resultstringyes–

No examples provided.

set_map_metadata ~133

Set map-level metadata properties (Everest meta block).

NameTypeReqDescription
map_pathstringyesPath to the .bin file
settingsstringyesJSON object of meta key/value pairs to set, e.g. '{"Wipe": "Mountain", "Dreaming": true}'
subpathstring–Optional '/'-separated path to a nested element under meta to target instead of meta itself, e.g. "mode/audiostate" for '{"Music": "event:/music/DZ/lvl2/beginning"}'. Missing intermedi…
NameTypeReqDescription
resultstringyes–

No examples provided.

set_room_tiles ~92

Set tile data for a room. Each row is a line of characters ('0'=air).

NameTypeReqDescription
layerstring–"fg" for foreground (solids), "bg" for background
map_pathstringyesPath to the .bin file
room_namestringyesRoom name
tilesstringyesTile data (newline-separated rows, 1 char per tile)
NameTypeReqDescription
resultstringyes–

No examples provided.

sf_import ~249

Import a Sprite Fusion JSON export (map.zip) as a Celeste room: solid/bg tiles plus gray-box entities.

NameTypeReqDescription
allow_problemsboolean–Write even when placement checks fail
allow_unknownboolean–Place names with no Lönn definition
dry_runboolean–Only show the result (default)
export_pathstringyesmap.zip, its folder, or map.json (any absolute path)
legend_pathstring–Custom legend JSON; default: the built-in gray-box legend
map_pathstringyesMap to import into (the base when output_path is set)
output_pathstring–Write to this .bin instead of map_path (created from map_path if missing)
replaceboolean–Replace an existing room's fg/bg tiles and entities (triggers, decals, settings stay; solid cells keep their tileset)
roomstringyesRoom name (lvl_ is added if the map's rooms use it)
x––Room x in pixels for a new room; default: right of the existing rooms
y––Room y in pixels for a new room
NameTypeReqDescription
resultstringyes–

No examples provided.

sf_make_tileset ~54

Write the Celeste gray-box tileset for Sprite Fusion (PNG, legend JSON, README).

NameTypeReqDescription
out_dirstring–Folder to write to (any absolute path); default <state dir>/sprite-fusion
NameTypeReqDescription
resultstringyes–

No examples provided.

summer_export_room ~244

Turn a Summer room scene into a Celeste room (new, or replace=true). Same checks and safe write as sf_import.

NameTypeReqDescription
allow_problemsboolean–Write even when placement checks fail
allow_unknownboolean–Place marker entities with no Lönn definition
dry_runboolean–Only show the result (default)
map_pathstringyesMap to write into (the base when output_path is set)
output_pathstring–Write to this .bin instead of map_path
project_dirstring–Project folder; default ~/Documents/CEL-Graybox
replaceboolean–Replace an existing room's fg/bg tiles and entities (solid cells keep their tileset)
roomstring–Celeste room name; default: the scene's celeste_room metadata, else the scene name
scenestringyesRoom name, rooms/x.tscn or res:// path in the Summer project
x––Room x in pixels for a new room; default: right of the existing rooms
y––Room y in pixels for a new room
NameTypeReqDescription
resultstringyes–

No examples provided.

summer_from_sprite_fusion ~121

Turn a Sprite Fusion export (map.zip) into a Summer room scene, to refine it in Summer before export.

NameTypeReqDescription
export_pathstringyesmap.zip, its folder, or map.json
legend_pathstring–Custom legend JSON; default: the built-in gray-box legend
overwriteboolean–Replace an existing scene
project_dirstring–Project folder; default ~/Documents/CEL-Graybox
scenestringyesRoom/scene name to create (rooms/<scene>.tscn)
NameTypeReqDescription
resultstringyes–

No examples provided.

summer_import_room ~105

Copy a Celeste room into the Summer project as a scene (fg/bg tiles, gray-box entities as tiles, others as markers).

NameTypeReqDescription
map_pathstringyesMap holding the room
overwriteboolean–Replace an existing scene
project_dirstring–Project folder; default ~/Documents/CEL-Graybox
roomstringyesRoom name
scenestring–Scene to write; default rooms/<room>.tscn
NameTypeReqDescription
resultstringyes–

No examples provided.

summer_init ~56

Create or refresh the Summer Engine gray-box project (tileset with collision, room template, bridge scripts).

NameTypeReqDescription
project_dirstring–Project folder; default ~/Documents/CEL-Graybox (LOENN_MCP_SUMMER_PROJECT)
NameTypeReqDescription
resultstringyes–

No examples provided.

summer_open ~71

Open the gray-box project in Summer Engine, optionally on a room scene.

NameTypeReqDescription
project_dirstring–Project folder; default ~/Documents/CEL-Graybox
scenestring–Room name, project path (rooms/x.tscn) or res:// path; empty = just the project
NameTypeReqDescription
resultstringyes–

No examples provided.

summer_rooms ~38

List the room scenes in the Summer gray-box project.

NameTypeReqDescription
project_dirstring–Project folder; default ~/Documents/CEL-Graybox
NameTypeReqDescription
resultstringyes–

No examples provided.

update_entity ~93

Update properties of an existing entity by ID.

NameTypeReqDescription
entity_idintegeryesID of the entity to update.
map_pathstringyesPath to the .bin file.
properties_jsonstringyesJSON object of properties to set/update. Example: '{"x": 100, "y": 50, "width": 16}'
room_namestringyesRoom containing the entity.
NameTypeReqDescription
resultstringyes–

No examples provided.

update_room ~82

Update room-level properties (music, dark, wind, etc.).

NameTypeReqDescription
map_pathstringyesPath to the .bin file.
properties_jsonstringyesJSON object of properties to update. Example: '{"dark": true, "windPattern": "Left"}'
room_namestringyesRoom name (with or without lvl_ prefix).
NameTypeReqDescription
resultstringyes–

No examples provided.

update_room_settings ~91

Update room settings (music, physics, wind, camera, flags) by merging a JSON object.

NameTypeReqDescription
map_pathstringyesPath to the .bin file
room_namestringyesRoom name
settingsstringyesJSON object of key/value pairs to update, e.g. '{"music": "event:/music/lvl2/beginning", "dark": true}'
NameTypeReqDescription
resultstringyes–

No examples provided.

update_styleground ~87

Merge properties into an existing styleground without replacing it.

NameTypeReqDescription
indexintegeryes0-based index of the styleground in that layer
layerstringyes"fg"/"foregrounds" or "bg"/"backgrounds"
map_pathstringyesPath to the .bin file
propertiesstringyesJSON object of properties to merge in
NameTypeReqDescription
resultstringyes–

No examples provided.

validate_audio ~34

Check every audio event a map references against the sound banks.

NameTypeReqDescription
map_pathstringyesPath to the .bin file.
NameTypeReqDescription
resultstringyes–

No examples provided.

validate_map ~59

Validate an entire map for playability issues.

NameTypeReqDescription
auto_fixboolean–If True, automatically fix issues where possible (adds spawns, floor tiles, clamps entities).
map_pathstringyesPath to the .bin file.
NameTypeReqDescription
resultstringyes–

No examples provided.

validate_room ~49

Check a room for common playability problems.

NameTypeReqDescription
map_pathstringyesPath to the .bin file.
room_namestringyesRoom name (with or without 'lvl_' prefix).
NameTypeReqDescription
resultstringyes–

No examples provided.

Install

How do I install the loenn-mcp server?

loenn-mcp ships as an MCPB bundle, a single file you download and open in an MCP host that supports MCPB bundles, such as Claude Desktop. The host reads the launch command from the bundle's own manifest, so there is no command to copy. Before opening it, check the file's SHA-256 matches the one the MCP registry declares for it, 99aa5f3cd18d0bcc9fc9016683aa7a10b29beaa868161cb40f45f640fe2a90f5; the commands to do that are on this page. If it does not match, do not open it.

mcpb · loenn-mcp-7.2.0.mcpb

Download bundle

Check the download matches the SHA-256 the MCP registry declares before you open it. If it does not match, do not open the file.

SHA-256

99aa5f3cd18d0bcc9fc9016683aa7a10b29beaa868161cb40f45f640fe2a90f5

macOS / Linux

echo "99aa5f3cd18d0bcc9fc9016683aa7a10b29beaa868161cb40f45f640fe2a90f5  loenn-mcp-7.2.0.mcpb" | shasum -a 256 -c

Windows (PowerShell)

(Get-FileHash -Algorithm SHA256 .\loenn-mcp-7.2.0.mcpb).Hash -eq "99aa5f3cd18d0bcc9fc9016683aa7a10b29beaa868161cb40f45f640fe2a90f5"

Run it in the folder you saved the bundle to, then open the file with an MCPB-capable host such as Claude Desktop.

Common questions

What is the loenn-mcp server?

loenn-mcp is listed in the public MCP registry as io.github.Magedeline/loenn-mcp. Celeste map editor for AI agents: read, edit, validate, preview and generate .bin maps. This page covers its MCPB bundle (https://github.com/Magedeline/loenn-mcp/releases/download/v7.2.0/loenn-mcp-7.2.0.mcpb).

Is the loenn-mcp server safe to use?

loenn-mcp scores 42 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the loenn-mcp server expose?

loenn-mcp exposes 89 tools: list_maps, read_map_overview, read_room, get_room_tiles, add_entity, and 84 more. Their descriptions and schemas cost roughly 7,588 tokens of context every time the server is loaded.

What licence is the loenn-mcp server under?

loenn-mcp declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.