RPG Maker MZ Authoring MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| RPGMZ_PROJECT | Yes | Path-delimited list of project roots; the first is selected at startup. Equivalent to the repeatable --project option. Each path must be the project folder containing game.rmmzproject and data/. | |
| RPGMZ_MCP_STATE_DIR | No | Directory for backups and the transaction log, relative to the project. Equivalent to --state-dir. | .rpgmz-mcp |
| RPGMZ_MCP_ALLOW_WRITE | No | Set to 1 to enable apply_changes (writes). Otherwise the server is read-only. Equivalent to --allow-write. | 0 |
| RPGMZ_MCP_ALLOW_ANY_PROJECT | No | Set to 1 to let select_project open unconfigured paths. Off by default. Equivalent to --allow-any-project. | 0 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
RPG Maker MZ authoring server (events + database). Start with get_project_info. Read before writing: describe_map_event / get_event_logic / database_get_record. Before placing or moving events, look at the map: render_map (image) and get_map_passability (exact walkability); get_tile_info checks spots, find_path builds movement routes. Every write tool returns a PREVIEW change set (semantic + native diff, validation). Commit with apply_changes (or apply=true for clean, non-destructive edits). pageIndex is zero-based. Path-based logic edits need the list revision from get_event_logic. IDs are never renumbered. Resolve database references by name with database_resolve_reference instead of guessing IDs; pick new switches/variables with list_switches/list_variables onlyFree=true. Only set allowScript=true when the user explicitly asked for JavaScript.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_project_infoA | Project root, detected engine/editor version, write mode, available data files and plugin count. Call this first. |
| list_projectsB | Projects configured at server start (--project). The selected one is used by all tools. |
| select_projectA | Switch the active project to one of the configured projects (by index, folder name or path). |
| list_mapsA | Enumerate maps from MapInfos.json (IDs, names, tree parent and order). Map files are resolved by ID, never by display name. |
| get_map_summaryB | Map metadata (size, tileset, display name, note) and a summary of every event. |
| list_map_eventsC | Event IDs, names, coordinates, page counts and triggers on a map (paginated). |
| get_map_eventB | Event metadata and every page's settings (conditions, graphic, trigger, priority, movement), command counts, logic revisions and a short preview. |
| list_common_eventsC | Common event IDs, names and triggers (paginated). |
| get_common_eventB | A common event's trigger, condition switch and logic description (detailed=true also returns the Event IR). |
| list_pluginsB | Plugins from js/plugins.js with status and parameters (parsed as data; plugin code is never executed). |
| get_plugin_commandsA | 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. |
| list_switchesB | 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. |
| list_variablesB | 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. |
| apply_changesA | 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. |
| apply_event_changesA | 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.) |
| database_apply_changesA | 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.) |
| list_pending_changesA | Change sets previewed but not yet applied (expire after 1 hour). |
| get_change_setC | Full preview (diffs, diagnostics) of a pending change set. |
| discard_changesA | Drop a pending change set (nothing on disk is touched). |
| list_transactionsB | Committed (and failed) write transactions with changed files, revisions and backup locations, newest first. |
| rollback_transactionA | 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. |
| get_event_pageA | 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. |
| describe_event_pageA | Human-readable description of a page: conditions, graphic, trigger, priority, movement and the command flow with block ids. |
| describe_map_eventB | Human-readable description of an event and ALL its pages (page priority explained). |
| get_event_logicB | 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). |
| get_event_page_nativeB | Raw native JSON of a page / common event / troop page, for debugging. |
| search_event_commandsB | 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. |
| trace_event_dependenciesA | 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. |
| find_referencesB | 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. |
| get_event_ir_referenceB | Documentation of every Event IR block type, condition, route command and convention. |
| list_event_templatesA | Event templates usable with create_event_from_template, with their parameters. |
| validate_event_pageA | Validate a page (structure, settings, references, flow heuristics). Pass |
| validate_map_eventsB | Validate every event and page on a map (structure, settings, references, positions, page shadowing). |
| validate_project_referencesB | 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. |
| analyze_event_flowB | 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. |
| create_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. |
| update_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. |
| delete_map_eventA | 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. |
| create_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. |
| clone_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. |
| delete_event_pageA | 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. |
| update_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. |
| reorder_event_pagesA | Reorder pages: Preview-first: returns a change set (semantic + native diff, validation). Pass apply=true to commit immediately when the preview is clean. |
| update_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. |
| create_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. |
| append_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. |
| insert_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. |
| replace_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. |
| remove_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. |
| move_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. |
| replace_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. |
| preview_event_changesA | 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. |
| preview_changesA | 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. |
| render_mapA | 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. |
| get_map_passabilityA | 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. |
| get_tile_infoA | 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 |
| find_pathA | 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 |
| database_list_categoriesB | Available database categories with record counts and max IDs. |
| database_list_recordsB | Concise record summaries of a category (paginated). Blank (unnamed) slots are hidden unless includeBlank=true. |
| database_get_recordB | 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. |
| database_search_recordsC | Search records by name, note, description or note-tag metadata across one or more categories. |
| database_resolve_referenceA | 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. |
| database_find_referencesB | Every known reference to a record from events, common events, troops and other records (run before deleting or repurposing a record). |
| database_validate_categoryB | Record validation (types, enums, ranges, required native fields), reference validation and advisory design diagnostics for a category or selected IDs. |
| database_compare_recordsC | Structural differences between two records of the same category. |
| database_list_templatesA | Record templates for database_create_record (template + templateParams). |
| database_describe_schemaC | Patchable fields (with types, ranges, enums, reference kinds) and collections of a category. |
| database_create_recordA | Create a database record with the next ID (max+1). Optionally start from a template (database_list_templates) and override Preview-first: returns a change set (normalized + native diff, validation incl. reverse references). Pass apply=true to commit immediately when the preview is clean. |
| database_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. |
| database_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. |
| database_delete_recordA | 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. |
| database_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. |
| database_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. |
| database_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. |
| database_preview_changesA | 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. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| create_npc_interaction | Guided workflow to add a talking NPC with optional choices/branches. |
| create_quest_npc | Guided workflow for an NPC whose behavior depends on quest progress. |
| create_treasure_chest | Chest with a reward, self switch and opened page. |
| modify_existing_event | Minimal, safe edit of an existing event. |
| give_item_in_event | Create an event that gives a database item resolved by name. |
| design_database_entry | Create or tune an item, skill, weapon, armor, enemy or state. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| event-ir-reference | Every Event IR block type, condition and convention |
| project-info | Root, versions, write mode and map list of the active project |
TDQS
Scored across 75 tools
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.
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.
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.
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.