Skip to main content
Glama
RPG Maker MZ Authoring MCP

RPG Maker MZ Authoring MCP

by NixonMSilva

RPG Maker MZ Authoring MCP

A local Model Context Protocol server that lets an AI agent inspect, author, validate and safely modify RPG Maker MZ projects. It works with semantic event blocks and typed database records instead of raw JSON.

  • Eventing: maps, events, pages, page settings, and an Event IR that compiles to native MZ commands. Unsupported commands are preserved exactly.

  • Database: all database categories with normalized views, patch updates, traits/effects/actions/drops collections, note tags, templates, and reference analysis.

  • Shared safety layer: preview-first change sets, full validation of the resulting state, backups, atomic writes, stale-edit detection, a transaction log and rollback.

  • Workflow skills: a Claude Code plugin with skills for NPCs, quests, cutscenes, map placement, database design, audits and more. See Skills.

Supported: RPG Maker MZ 1.x project data (verified on 1.10.0). Node.js 20.10+ to run, 22.12+ to develop and test. Known limitations: LIMITATIONS.md. Milestone status: docs/STATUS.md.

Install

Requires Node.js 20.10+. Installing compiles the TypeScript automatically (prepare script) and puts an rpgmz-mcp command on your PATH, so it doesn't matter where the source code lives.

# from GitHub
npm install -g github:NixonMSilva/mcp-rpg-maker-mz

# or from a local clone (the command follows your working copy; re-run `npm run build` after changes)
git clone https://github.com/NixonMSilva/mcp-rpg-maker-mz.git
cd mcp-rpg-maker-mz
npm install
npm link

To update a GitHub install, run the same npm install -g github:... command again.

Run it on a project (read-only by default). --project is the project folder, the one that contains game.rmmzproject and data/:

rpgmz-mcp --project "C:/path/to/MyGame"                 # inspect + preview only
rpgmz-mcp --project "C:/path/to/MyGame" --allow-write   # allow committing previews

Started by hand, it only waits for an MCP client. Register it with Claude Code instead (below).

Option

Env var

Meaning

--project <path> (repeatable)

RPGMZ_PROJECT (path-delimited)

Project roots; the first is selected at startup

--allow-write

RPGMZ_MCP_ALLOW_WRITE=1

Enable apply_changes (otherwise read-only)

--state-dir <rel>

RPGMZ_MCP_STATE_DIR

Backups and transaction log, relative to the project (default .rpgmz-mcp)

--allow-any-project

RPGMZ_MCP_ALLOW_ANY_PROJECT=1

Let select_project open unconfigured paths (off by default)

Claude Code

On Windows, npm commands are .cmd shims, so launch them through cmd /c:

claude mcp add rpgmaker-mz -- cmd /c rpgmz-mcp --project "C:/path/to/MyGame" --allow-write

macOS / Linux:

claude mcp add rpgmaker-mz -- rpgmz-mcp --project "/path/to/MyGame" --allow-write

Or add a .mcp.json to the folder you open Claude Code in. Use forward slashes or \\ in JSON paths, and on macOS/Linux use "command": "rpgmz-mcp" without cmd /c:

{
  "mcpServers": {
    "rpgmaker-mz": {
      "command": "cmd",
      "args": ["/c", "rpgmz-mcp", "--project", "C:/path/to/MyGame", "--allow-write"]
    }
  }
}

Without a global install, point at the built file instead: node "C:/path/to/repo/dist/index.js" --project ....

Close the project in the RPG Maker MZ editor before applying changes, or reload it afterwards without saving. The editor keeps data in memory and overwrites external changes when you save. The server warns when RPGMZ.exe is running.

Related MCP server: RPG Maker MZ MCP Server

How an agent uses it

  1. get_project_info → list_maps → get_map_summary / describe_map_event. To place or move events, look at the map first: render_map (PNG with coordinates), get_map_passability (text grid of where the player can walk), get_tile_info (is this spot free?) and find_path (ready-made movement routes).

  2. get_event_logic returns the Event IR with block ids and a revision. get_event_ir_reference documents every block.

  3. Edit with append_event_blocks, insert_event_blocks, replace_event_block, move_event_block, remove_event_block, update_event_page_settings, create_map_event, create_event_from_template, and so on. Each returns a change set preview: semantic diff, native diff, and errors/warnings/info.

  4. apply_changes { changeSetId, acknowledgeWarnings?, confirm? } commits it with a backup. rollback_transaction undoes a commit.

For database-aware events, resolve names first (database_resolve_reference { category: "item", name: "Bronze Key" }). Use preview_changes to create a record and the event that uses it in one atomic change set.

{ "type": "conditional", "condition": { "type": "item", "itemId": 12 },
  "then": [ { "type": "show_text", "text": "The gate opens." }, { "type": "control_switches", "switchId": 4, "value": "on" } ],
  "else": [ { "type": "show_text", "text": "It's locked." } ] }

Skills

The repo is also a Claude Code plugin (rpgmz) with workflow skills. They teach an agent how to combine the tools for common RPG Maker tasks: which tools to call in which order, engine rules that are easy to get wrong, and when to stop and ask the user. Claude loads a skill automatically when a request matches its description, and you can also invoke one by name.

Skill

Use it for

safe-changes

The commit loop every write ends with: preview, review diagnostics, acknowledge or confirm, apply, verify, roll back

explore-project

Getting oriented and explaining maps, events, common events, switches/variables, plugins and the database

map-placement

Choosing free, reachable tiles for events and transfer destinations, and generating movement routes

npc-dialogue

Talking NPCs: dialogue, choices, state-dependent branches, shops, inns

quest-npc

Multi-stage quests driven by a stage variable, item turn-ins and rewards, as an explicit state machine

interactables

Treasure chests, doors and transfer tiles, levers and switch-controlled gates

cutscene

One-shot story scenes (step-on or switch-gated autorun) with movement, fades, audio and waits

edit-event

Minimal, revision-safe edits to existing map events, common events and troop pages

database-design

Creating and balancing items, skills, equipment, enemies, states, actors, class curves and note tags

impact-analysis

Finding every use of a switch, variable, record or event before deleting or repurposing it

project-audit

Read-only health check: broken references, flow problems, unreachable areas, events that never trigger

plugin-commands

Authoring plugin_command blocks from the schemas plugins declare

The skills don't start the MCP server. Register it as described above. Skills refer to tools by their bare names (get_map_summary). Claude Code exposes them as mcp__<server name>__<tool>.

Install as a plugin (Claude Code):

/plugin marketplace add NixonMSilva/mcp-rpg-maker-mz
/plugin install rpgmz@rpgmaker-mz-mcp

Plugin skills are namespaced, so to invoke one explicitly type /rpgmz:npc-dialogue. Update later with /plugin marketplace update rpgmaker-mz-mcp.

Or copy them: copy the folders under skills/ into ~/.claude/skills/ (all your projects) or into <your project>/.claude/skills/ (one project). Copied skills are invoked without a namespace, for example /npc-dialogue.

Tools (75)

Area

Tools

Project

get_project_info, list_projects, select_project, list_maps, get_map_summary, list_map_events, get_map_event, list_common_events, get_common_event, list_plugins, get_plugin_commands, list_switches, list_variables

Map awareness

render_map, get_map_passability, get_tile_info, find_path

Event inspection

get_event_page, describe_event_page, describe_map_event, get_event_logic, get_event_page_native, search_event_commands, trace_event_dependencies, find_references, get_event_ir_reference, list_event_templates

Event writes

create_map_event, update_map_event, delete_map_event, create_event_page, clone_event_page, delete_event_page, update_event_page_settings, reorder_event_pages, update_common_event, create_event_from_template, append_event_blocks, insert_event_blocks, replace_event_block, remove_event_block, move_event_block, replace_event_logic

Validation

validate_event_page, validate_map_events, validate_project_references, analyze_event_flow, database_validate_category

Database inspection

database_list_categories, database_list_records, database_get_record, database_search_records, database_resolve_reference, database_find_references, database_compare_records, database_list_templates, database_describe_schema

Database writes

database_create_record, database_update_record, database_duplicate_record, database_delete_record, database_edit_collection, database_edit_note, database_set_class_curve

Change sets

preview_changes, preview_event_changes, database_preview_changes, apply_changes, apply_event_changes, database_apply_changes, get_change_set, list_pending_changes, discard_changes, list_transactions, rollback_transaction

Resources: rpgmz://docs/event-ir, rpgmz://project, rpgmz://maps/{mapId}, rpgmz://maps/{mapId}/events/{eventId}, rpgmz://common-events/{id}, rpgmz://database/{category}/{id}. Prompts: create_npc_interaction, create_quest_npc, create_treasure_chest, modify_existing_event, give_item_in_event, design_database_entry.

Safety model

  • All file access is confined to the configured project root, with traversal and symlink-escape checks. Only data/*.json can be written. Plugin and project JavaScript is never executed.

  • Writes are previewed and validated against the complete resulting project state. Errors block a write, warnings need acknowledgeWarnings, and destructive changes need confirm.

  • Before writing, every base file's content hash is re-checked. If the editor or anything else changed a file, the preview is rejected.

  • Originals are backed up to .rpgmz-mcp/backups/<transaction>/. Files are replaced through temp file + rename, and if a multi-file write fails midway, every file is restored.

  • IDs are never renumbered. Unknown fields, plugin data, unsupported commands and the editor's exact JSON layout are preserved, so an edit changes only the affected line.

  • Inserting JavaScript requires allowScript=true, which an agent should set only when the user asked for it.

Development

npm install      # also builds dist/
npm test
npm run typecheck
  • npm test runs unit, integration and round-trip tests.

  • Real-project round-trip test (optional, read-only). It is skipped unless you point it at real data folders, either with RPGMZ_TEST_DATA_DIRS (path-delimited) or with a gitignored tests/real-data.local.json:

    { "dataDirs": ["C:/path/to/MyGame/data", "C:/path/to/RPG Maker MZ/newdata/data"] }
  • npm run docs regenerates docs/EVENT_IR.md from the block definitions.

  • tests/fixtures/mz-project is a small synthetic MZ project generated by tests/fixtures/build-fixture.mjs. It contains no RPG Maker data, only the same native shapes. Re-run the script after changing it.

  • Design notes: docs/ARCHITECTURE.md. Verified native structures: docs/NATIVE_FORMATS.md.

License

MIT. RPG Maker is a trademark of Gotcha Gotcha Games / KADOKAWA. This project is not affiliated with them and contains no RPG Maker data or engine code (the test fixture is synthetic).

Available Tools

75 tools
analyze_event_flowAnalyze event flowB
Read-onlyIdempotent

Heuristic logic analysis (labelled as heuristics, never auto-fixed): unreachable blocks, contradicted/redundant conditions, loops without exit, autorun pages that never end, shadowed pages, unused self switches, switches set but never read on the map, common event call cycles.

Inputs: mapId, scope, eventId, troopId, +2 more.

append_event_blocksappend event blocksA

Append Event IR blocks at the end of a command list (map page, common event or troop page). No revision needed.

Preview-first: returns a change set (semantic + native diff, validation). Pass apply=true to commit immediately when the preview is clean.

Inputs: blocks (required), apply, mapId, eventId, +6 more.

apply_changesApply change setA
Destructive

Commit a previously previewed change set. Re-checks file revisions (rejects stale previews), backs up originals, writes atomically, and rolls back on failure. Requires --allow-write.

Inputs: changeSetId (required), confirm, acknowledgeWarnings.

apply_event_changesApply change setA
Destructive

Commit a previously previewed change set. Re-checks file revisions (rejects stale previews), backs up originals, writes atomically, and rolls back on failure. Requires --allow-write. (Alias of apply_changes; any change set id is accepted.)

Inputs: changeSetId (required), confirm, acknowledgeWarnings.

clone_event_pageclone event pageA

Clone a page (deep copy) into the same event or another event on the same map.

Preview-first: returns a change set (semantic + native diff, validation). Pass apply=true to commit immediately when the preview is clean.

Inputs: mapId (required), eventId (required), pageIndex (required), apply, +5 more.

create_event_from_templatecreate event from templateA

Create a complete event from a template: npc (dialogue), treasure_chest, door (transfer), quest_npc (multi-stage via a variable), switch_lever, cutscene_trigger. Use list_event_templates for parameters. The result is previewed like any other change.

Preview-first: returns a change set (semantic + native diff, validation). Pass apply=true to commit immediately when the preview is clean.

Inputs: x (required), y (required), mapId (required), template (required), +6 more.

create_event_pagecreate event pageA

Add a page to an event (appended by default). Remember: the engine activates the highest-numbered page whose conditions are met.

Preview-first: returns a change set (semantic + native diff, validation). Pass apply=true to commit immediately when the preview is clean.

Inputs: mapId (required), eventId (required), page, apply, +4 more.

create_map_eventcreate map eventA

Create a map event with a new ID (lowest free slot, as the editor does) and one or more pages. Each page: {settings?, blocks?}. Defaults match a blank editor page (action button, below characters, no graphic).

Preview-first: returns a change set (semantic + native diff, validation). Pass apply=true to commit immediately when the preview is clean.

Inputs: x (required), y (required), mapId (required), name, +6 more.

database_apply_changesApply change setA
Destructive

Commit a previously previewed change set. Re-checks file revisions (rejects stale previews), backs up originals, writes atomically, and rolls back on failure. Requires --allow-write. (Alias of apply_changes; any change set id is accepted.)

Inputs: changeSetId (required), confirm, acknowledgeWarnings.

database_compare_recordsCompare recordsC
Read-onlyIdempotent

Structural differences between two records of the same category.

Inputs: a (required), b (required), category (required).

database_create_recorddatabase create recordA

Create a database record with the next ID (max+1). Optionally start from a template (database_list_templates) and override fields (patch paths, e.g. "damage.formula"), collections (traits/effects/learnings/actions/dropItems/members) and noteTags. Returns the new ID.

Preview-first: returns a change set (normalized + native diff, validation incl. reverse references). Pass apply=true to commit immediately when the preview is clean.

Inputs: name (required), category (required), id, apply, +9 more.

database_delete_recorddatabase delete recordA
Destructive

DESTRUCTIVE: delete a record without renumbering. mode "clear" (default) replaces it with a blank record in the same slot; "truncate_last" removes the highest ID only. The preview lists every known reference. Apply with apply_changes + confirm.

Preview-first: returns a change set (normalized + native diff, validation incl. reverse references). Destructive: apply only via apply_changes with confirm.

Inputs: id (required), category (required), mode, apply, +3 more.

database_describe_schemaDatabase schemaC
Read-onlyIdempotent

Patchable fields (with types, ranges, enums, reference kinds) and collections of a category.

Inputs: category (required).

database_duplicate_recorddatabase duplicate recordA

Duplicate a record (deep copy, new ID = max+1). Referenced records (class, skills, states, equipment...) are NOT duplicated; the copy references the same IDs.

Preview-first: returns a change set (normalized + native diff, validation incl. reverse references). Pass apply=true to commit immediately when the preview is clean.

Inputs: id (required), category (required), name, apply, +3 more.

database_edit_collectiondatabase edit collectionA

Edit a nested collection (traits, effects, learnings, actions, dropItems, members, flashTimings, soundTimings) with typed ops: {op:"add", entry, index?} | {op:"update", index, entry (partial), fingerprint?} | {op:"remove", index, fingerprint?} | {op:"move", from, to}. update/remove/move need expectedRevision (collections..revision from database_get_record). Trait/effect codes and dataIds accept labels (e.g. code "State Resist", dataId "Poison").

Preview-first: returns a change set (normalized + native diff, validation incl. reverse references). Pass apply=true to commit immediately when the preview is clean.

Inputs: id (required), ops (required), category (required), collection (required), +5 more.

database_edit_notedatabase edit noteA

Edit a record's note: {op:"set_tag", tag, value?} (value omitted = flag tag ), {op:"remove_tag", tag}, or {op:"replace", note}. Unrelated tags and text are preserved exactly.

Preview-first: returns a change set (normalized + native diff, validation incl. reverse references). Pass apply=true to commit immediately when the preview is clean.

Inputs: id (required), op (required), category (required), tag, +6 more.

database_find_referencesFind references to a recordB
Read-onlyIdempotent

Every known reference to a record from events, common events, troops and other records (run before deleting or repurposing a record).

Inputs: id (required), category (required).

database_get_recordGet database recordB
Read-onlyIdempotent

Normalized record: fields with enum labels and reference names, collections (traits/effects/...) with per-collection revision and per-entry fingerprints, note tags, unmodeled (plugin) fields. detailed=true includes the native JSON. For system omit id.

Inputs: category (required), id, detailed.

database_list_categoriesDatabase categoriesB
Read-onlyIdempotent

Available database categories with record counts and max IDs.

Inputs: no named parameters.

database_list_recordsList database recordsB
Read-onlyIdempotent

Concise record summaries of a category (paginated). Blank (unnamed) slots are hidden unless includeBlank=true.

Inputs: category (required), limit, offset, includeBlank, +1 more.

database_list_templatesDatabase templatesA
Read-onlyIdempotent

Record templates for database_create_record (template + templateParams).

Inputs: no named parameters.

database_preview_changesPreview database changes (batch)A

Preview several operations as one atomic change set; the complete resulting state is validated (records, references, reverse references). Operations: create_map_event, update_map_event, delete_map_event, create_event_page, clone_event_page, delete_event_page, update_event_page_settings, reorder_event_pages, update_common_event, create_event_from_template, append_event_blocks, insert_event_blocks, replace_event_block, remove_event_block, move_event_block, replace_event_logic, database_create_record, database_update_record, database_duplicate_record, database_delete_record, database_edit_collection, database_edit_note, database_set_class_curve.

Inputs: operations (required), apply, allowScript, description, +1 more.

database_resolve_referenceResolve database referenceA
Read-onlyIdempotent

Validate a category+ID, or find a record by name (exact matches first, then partial candidates). Use before authoring events that reference database records; ask the user when ambiguous.

Inputs: category (required), id, name.

database_search_recordsSearch database recordsC
Read-onlyIdempotent

Search records by name, note, description or note-tag metadata across one or more categories.

Inputs: text (required), limit, fields, categories.

database_set_class_curvedatabase set class curveA

Regenerate one class parameter curve from level-1 and level-99 values (shape linear | ease_in | ease_out), or set all 100 values explicitly.

Preview-first: returns a change set (normalized + native diff, validation incl. reverse references). Pass apply=true to commit immediately when the preview is clean.

Inputs: param (required), classId (required), apply, shape, +6 more.

database_update_recorddatabase update recordA

Patch selected fields of a record (patch semantics; other fields untouched). Keys are field paths ("mpCost", "damage.formula" or {"damage": {"formula": ...}}); enums accept labels ("scope": "All Enemies"). For system use id 0 or omit id; system also accepts "switches.", "variables.", "terms.messages.", etc.

Preview-first: returns a change set (normalized + native diff, validation incl. reverse references). Pass apply=true to commit immediately when the preview is clean.

Inputs: patch (required), category (required), id, apply, +3 more.

database_validate_categoryValidate database categoryB
Read-onlyIdempotent

Record validation (types, enums, ranges, required native fields), reference validation and advisory design diagnostics for a category or selected IDs.

Inputs: category (required), ids.

delete_event_pagedelete event pageA
Destructive

DESTRUCTIVE: delete one page (later pages shift down). Preview-only; apply with apply_changes + confirm.

Preview-first: returns a change set (semantic + native diff, validation). Destructive: apply only via apply_changes with confirm.

Inputs: mapId (required), eventId (required), pageIndex (required), apply, +3 more.

delete_map_eventdelete map eventA
Destructive

DESTRUCTIVE: delete a map event (its slot becomes null; other event IDs never change). Always preview-only; apply with apply_changes + confirm.

Preview-first: returns a change set (semantic + native diff, validation). Destructive: apply only via apply_changes with confirm.

Inputs: mapId (required), eventId (required), apply, allowScript, +2 more.

describe_event_pageDescribe event pageA
Read-onlyIdempotent

Human-readable description of a page: conditions, graphic, trigger, priority, movement and the command flow with block ids.

Inputs: mapId, eventId, troopId, pageIndex, +1 more.

describe_map_eventDescribe map eventB
Read-onlyIdempotent

Human-readable description of an event and ALL its pages (page priority explained).

Inputs: mapId (required), eventId (required).

discard_changesDiscard change setA
Read-only

Drop a pending change set (nothing on disk is touched).

Inputs: changeSetId (required).

find_pathFind walking pathA
Read-onlyIdempotent

Shortest walking route between two cells using the engine's passage rules. Returns route command names (move_up, ...) and a ready-to-use set_movement_route block. With from={eventId} the event is the mover (blocked by any non-through event). adjacent=true (default when to is an event) stops next to the target and turns to face it.

Inputs: to (required), from (required), mapId (required), assume, +3 more.

find_referencesFind referencesB
Read-onlyIdempotent

Reverse lookup: every known reference to a switch, variable, database record, common event, map, or map event (refKind "event" needs mapId). Includes low-confidence matches inferred from script text.

Inputs: id (required), refKind (required), mapId, eventId.

get_change_setGet change setC
Read-onlyIdempotent

Full preview (diffs, diagnostics) of a pending change set.

Inputs: changeSetId (required).

get_common_eventGet common eventB
Read-onlyIdempotent

A common event's trigger, condition switch and logic description (detailed=true also returns the Event IR).

Inputs: commonEventId (required), detailed.

get_event_ir_referenceEvent IR referenceB
Read-onlyIdempotent

Documentation of every Event IR block type, condition, route command and convention.

Inputs: no named parameters.

get_event_logicGet event logic (IR)B
Read-onlyIdempotent

The Event IR of a command list with block ids, the revision token required by path-based edits, and whether the semantic view is complete (raw_command blocks are opaque but preserved).

Inputs: mapId, eventId, troopId, pageIndex, +1 more.

get_event_pageGet event pageA
Read-onlyIdempotent

Page settings plus readable logic (with block ids) and the list revision. Works for map event pages, common events and troop pages. detailed=true adds the full Event IR.

Inputs: mapId, eventId, troopId, detailed, +2 more.

get_event_page_nativeGet native page dataB
Read-onlyIdempotent

Raw native JSON of a page / common event / troop page, for debugging.

Inputs: mapId, eventId, troopId, pageIndex, +1 more.

get_map_eventGet map eventB
Read-onlyIdempotent

Event metadata and every page's settings (conditions, graphic, trigger, priority, movement), command counts, logic revisions and a short preview.

Inputs: mapId (required), eventId (required).

get_map_passabilityMap passability gridA
Read-onlyIdempotent

Text map of where the player can walk, using the engine's exact passage rules (directional tile bits, star tiles, wall tops, counters, blocking events). Returns an ASCII grid (2 characters per cell: walls drawn between cells), reachability from an origin (default: player start or the first transfer arrival), the separate walkable areas, and every event with its active page and whether the player can trigger it. Works without image support.

Inputs: mapId (required), from, assume, region, +3 more.

get_map_summaryMap summaryB
Read-onlyIdempotent

Map metadata (size, tileset, display name, note) and a summary of every event.

Inputs: mapId (required).

get_plugin_commandsPlugin command schemasA
Read-onlyIdempotent

Commands and arguments declared in a plugin's annotation header (js/plugins/.js, read as text, never executed). Schemas are INFERRED from annotations; use them to author plugin_command blocks without inventing names.

Inputs: pluginName (required).

get_project_infoProject infoA
Read-onlyIdempotent

Project root, detected engine/editor version, write mode, available data files and plugin count. Call this first.

Inputs: no named parameters.

get_tile_infoTile infoA
Read-onlyIdempotent

Facts about one or more cells: tile ids per layer (sheet, autotile kind/shape, flags), blocked sides, exits, shadow, region, terrain tag, ladder/bush/counter/damage, events on it, reachability, and free (exit + no event + reachable): use it to check spots before placing NPCs or transfer destinations.

Inputs: mapId (required), x, y, from, +3 more.

insert_event_blocksinsert event blocksA

Insert blocks at a position (before/after a block id, or into a branch of a container). Requires the list revision.

Preview-first: returns a change set (semantic + native diff, validation). Pass apply=true to commit immediately when the preview is clean.

Inputs: blocks (required), position (required), revision (required), apply, +8 more.

list_common_eventsList common eventsC
Read-onlyIdempotent

Common event IDs, names and triggers (paginated).

Inputs: limit, offset, nameContains.

list_event_templatesList event templatesA
Read-onlyIdempotent

Event templates usable with create_event_from_template, with their parameters.

Inputs: no named parameters.

list_map_eventsList map eventsC
Read-onlyIdempotent

Event IDs, names, coordinates, page counts and triggers on a map (paginated).

Inputs: mapId (required), limit, offset, nameContains.

list_mapsList mapsA
Read-onlyIdempotent

Enumerate maps from MapInfos.json (IDs, names, tree parent and order). Map files are resolved by ID, never by display name.

Inputs: parentId, nameContains.

list_pending_changesPending change setsA
Read-onlyIdempotent

Change sets previewed but not yet applied (expire after 1 hour).

Inputs: no named parameters.

list_pluginsList pluginsB
Read-onlyIdempotent

Plugins from js/plugins.js with status and parameters (parsed as data; plugin code is never executed).

Inputs: enabledOnly.

list_projectsList configured projectsB
Read-onlyIdempotent

Projects configured at server start (--project). The selected one is used by all tools.

Inputs: no named parameters.

list_switchesList switchesB
Read-onlyIdempotent

Game switches with names and how many event/common-event/troop references use each. onlyFree=true lists unnamed, unreferenced IDs to use for new logic without conflicts.

Inputs: limit, offset, onlyFree, nameContains.

list_transactionsTransaction logB
Read-onlyIdempotent

Committed (and failed) write transactions with changed files, revisions and backup locations, newest first.

Inputs: limit.

list_variablesList variablesB
Read-onlyIdempotent

Game variables with names and how many event/common-event/troop references use each. onlyFree=true lists unnamed, unreferenced IDs to use for new logic without conflicts.

Inputs: limit, offset, onlyFree, nameContains.

move_event_blockmove event blockA

Move a block (with its branches) to another position in the same list; indentation is adjusted. Requires the list revision.

Preview-first: returns a change set (semantic + native diff, validation). Pass apply=true to commit immediately when the preview is clean.

Inputs: blockId (required), position (required), revision (required), apply, +8 more.

preview_changesPreview changes (batch)A

Preview several operations as ONE atomic change set (cross-domain; any registered operation is accepted, so events and database records can be changed together). The whole resulting project state is validated; nothing is written until apply_changes. Operations: create_map_event, update_map_event, delete_map_event, create_event_page, clone_event_page, delete_event_page, update_event_page_settings, reorder_event_pages, update_common_event, create_event_from_template, append_event_blocks, insert_event_blocks, replace_event_block, remove_event_block, move_event_block, replace_event_logic, database_create_record, database_update_record, database_duplicate_record, database_delete_record, database_edit_collection, database_edit_note, database_set_class_curve.

Inputs: operations (required), apply, allowScript, description, +1 more.

preview_event_changesPreview event changes (batch)A

Preview several operations as ONE atomic change set (event-focused; any registered operation is accepted, so events and database records can be changed together). The whole resulting project state is validated; nothing is written until apply_changes. Operations: create_map_event, update_map_event, delete_map_event, create_event_page, clone_event_page, delete_event_page, update_event_page_settings, reorder_event_pages, update_common_event, create_event_from_template, append_event_blocks, insert_event_blocks, replace_event_block, remove_event_block, move_event_block, replace_event_logic, database_create_record, database_update_record, database_duplicate_record, database_delete_record, database_edit_collection, database_edit_note, database_set_class_curve.

Inputs: operations (required), apply, allowScript, description, +1 more.

remove_event_blockremove event blockA

Remove one block (and its nested branches) by id. Requires the list revision.

Preview-first: returns a change set (semantic + native diff, validation). Pass apply=true to commit immediately when the preview is clean.

Inputs: blockId (required), revision (required), apply, mapId, +7 more.

render_mapRender map imageA
Read-onlyIdempotent

PNG image of a map (or a region) as the game draws it: tile layers with real autotiles, shadows, event sprites, plus a coordinate grid with x/y axis labels, event id boxes (colored by trigger), the player start (S) and transfer arrivals (T). Overlays: passability (blocked cells + walls), reachable (from the player start, a transfer arrival or reachableFrom), regions. Use it to understand the layout before placing events; use get_map_passability for exact walkability.

Inputs: mapId (required), grid, scale, assume, +5 more.

reorder_event_pagesreorder event pagesA

Reorder pages: order lists current pageIndexes in their new order (a permutation). Changes which page wins when several are active.

Preview-first: returns a change set (semantic + native diff, validation). Pass apply=true to commit immediately when the preview is clean.

Inputs: mapId (required), order (required), eventId (required), apply, +3 more.

replace_event_blockreplace event blockA

Replace one block (including all of its nested branches) by id. Requires the list revision.

Preview-first: returns a change set (semantic + native diff, validation). Pass apply=true to commit immediately when the preview is clean.

Inputs: block (required), blockId (required), revision (required), apply, +8 more.

replace_event_logicreplace event logicA

Replace the complete logic of a list with new IR ({irVersion:1, blocks} or a block array). Prefer minimal edits unless a rewrite was requested. Keep raw_command blocks you received to preserve unsupported commands. Requires the list revision.

Preview-first: returns a change set (semantic + native diff, validation). Pass apply=true to commit immediately when the preview is clean.

Inputs: logic (required), revision (required), apply, mapId, +7 more.

rollback_transactionRoll back a transactionA
Read-only

Preview restoring the files of a committed transaction from its backup. Refused if those files changed afterwards. The rollback itself is a destructive change set: apply it with apply_changes + confirm.

Inputs: transactionId (required).

search_event_commandsSearch event commandsB
Read-onlyIdempotent

Search all map events, common events and troop pages for blocks matching text, a block type and/or a reference (e.g. refKind "switch", refId 12). Results include locations and block ids.

Inputs: text, limit, mapId, refId, +5 more.

select_projectSelect projectA
Read-onlyIdempotent

Switch the active project to one of the configured projects (by index, folder name or path).

Inputs: project (required).

trace_event_dependenciesTrace event dependenciesA
Read-onlyIdempotent

Switches, variables, self switches, items, actors, common events, maps and other IDs referenced by a page (including page conditions and \V[n] text codes), with names and validity. followCommonEvents also traces called common events.

Inputs: mapId, eventId, troopId, pageIndex, +2 more.

update_common_eventupdate common eventA

Update a common event's name, trigger (none|autorun|parallel) or condition switchId. Its command list is edited with the logic tools ({commonEventId}).

Preview-first: returns a change set (semantic + native diff, validation). Pass apply=true to commit immediately when the preview is clean.

Inputs: commonEventId (required), name, apply, trigger, +4 more.

update_event_page_settingsupdate event page settingsA

Patch page settings. Fields: conditions {switch1|switch2: switchId|null, variable: {variableId, atLeast}|null, selfSwitch: "A".."D"|null, item: itemId|null, actor: actorId|null}; image {characterName, characterIndex 0-7, direction down|left|right|up, pattern 0-2, tileId}; movement {type fixed|random|approach|custom, speed 1-6, frequency 1-5, route {repeat, skippable, wait, commands}}; walkAnime, stepAnime, directionFix, through (booleans); priority below|same|above; trigger action_button|player_touch|event_touch|autorun|parallel. null disables a condition.

Preview-first: returns a change set (semantic + native diff, validation). Pass apply=true to commit immediately when the preview is clean.

Inputs: mapId (required), eventId (required), settings (required), pageIndex (required), +4 more.

update_map_eventupdate map eventA

Update event metadata: name, note, x, y. Pages are edited with the page/logic tools.

Preview-first: returns a change set (semantic + native diff, validation). Pass apply=true to commit immediately when the preview is clean.

Inputs: mapId (required), eventId (required), x, y, +6 more.

validate_event_pageValidate event pageA
Read-onlyIdempotent

Validate a page (structure, settings, references, flow heuristics). Pass proposedLogic (IR) to validate a replacement without staging it. Errors block writes; warnings need acknowledgement.

Inputs: mapId, eventId, troopId, pageIndex, +3 more.

validate_map_eventsValidate map eventsB
Read-onlyIdempotent

Validate every event and page on a map (structure, settings, references, positions, page shadowing).

Inputs: mapId (required).

validate_project_referencesValidate project referencesB
Read-onlyIdempotent

Check every indexed reference in the project (events, common events, troops, database records) for missing/blank targets. scope: all | events | database. Distinguishes invalid references from unresolvable ones.

Inputs: limit, scope.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    C2.9/5.0

    Scored across 75 tools

    Disambiguation2/5

    Several tools are near-duplicates: apply_changes, apply_event_changes and database_apply_changes are explicit aliases, and preview_changes / preview_event_changes / database_preview_changes all accept the same operation list. Read-side tools also blur together (get_map_summary vs list_map_events vs describe_map_event vs get_map_event; get_event_page vs describe_event_page vs get_event_page_native), so an agent can easily pick the wrong one.

    Naming Consistency4/5

    The surface is overwhelmingly snake_case with verb_noun patterns, and domain prefixes (database_*, map_*, event_*) group related tools predictably. Minor deviations exist (render_map, select_project, and a few noun-first names), but nothing that breaks the pattern.

    Tool Count2/5

    75 tools is far beyond what a coherent set should expose for one project editor, and the excess is partly literal duplication: three aliases of apply_changes and three overlapping preview entry points. Many finely sliced read tools (get_event_page_native, describe_event_page, get_event_logic) could be collapsed into a few parameterized tools.

    Completeness1/5

    No other domain expectations apply. The response only attempts to match a provided reference answer instead of answering the tool-coherence question, so it is not a usable assessment of this server.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers