io.github.Redseb/rpgmaker-mz-mcp
NPM · RPGMAKER-MZ-MCP · SCANNED SEP 20
MCP server for RPG Maker MZ: maps, tile painting, events, database editing, and validation.
Available components
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 Security98
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- No install/post-install scripts declared.Pass
- 31 of 95 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency45
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 47 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability68
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 19486 tokens (~163/item across 119 items; 119 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management87
- Stability observed for 26 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage99
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 97% of tool parameters carry a description.Partial
Tool Safety75
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- 0 of 4 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "delete_map" implies "delete" 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 119 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
How do I install the io.github.Redseb/rpgmaker-mz-mcp server?
io.github.Redseb/rpgmaker-mz-mcp runs locally as an npm package, launched with npx -y rpgmaker-mz-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · rpgmaker-mz-mcp
claude mcp add redseb-rpgmaker-mz-mcp -- npx -y rpgmaker-mz-mcp
{
"mcpServers": {
"redseb-rpgmaker-mz-mcp": {
"command": "npx",
"args": [
"-y",
"rpgmaker-mz-mcp"
]
}
}
} {
"servers": {
"redseb-rpgmaker-mz-mcp": {
"command": "npx",
"args": [
"-y",
"rpgmaker-mz-mcp"
]
}
}
} codex mcp add redseb-rpgmaker-mz-mcp -- npx -y rpgmaker-mz-mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"redseb-rpgmaker-mz-mcp": {
"type": "local",
"command": [
"npx",
"-y",
"rpgmaker-mz-mcp"
],
"enabled": true
}
}
} openclaw mcp add redseb-rpgmaker-mz-mcp --command npx --arg -y --arg rpgmaker-mz-mcp
mcp_servers:
redseb-rpgmaker-mz-mcp:
command: "npx"
args: ["-y", "rpgmaker-mz-mcp"] {
"McpServers": {
"redseb-rpgmaker-mz-mcp": {
"Transport": "stdio",
"Command": "npx",
"Arguments": [
"-y",
"rpgmaker-mz-mcp"
]
}
}
} assistant mcp add redseb-rpgmaker-mz-mcp -t stdio -c npx -a -y rpgmaker-mz-mcp
{
"mcpServers": {
"redseb-rpgmaker-mz-mcp": {
"command": "npx",
"args": [
"-y",
"rpgmaker-mz-mcp"
]
}
}
} 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.
- 19 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.
- 18 Sept 26 −3
- Stability: pass → 0.80 functional
- 17 Sept 26 0
- Stability: 0.97 → pass security
- 16 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.
- 14 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 87 to 90. That category is still filling its 30-day observation window: 26 days of observed history at the previous scan, 27 at this one. The score rises as the window fills, whether or not the server changes.
- 12 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.
- 11 Sept 26 −3
- Stability: pass → 0.80 functional
- 10 Sept 26 0
- Stability: 0.97 → pass security
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 20 Sept 2026 · Analysed npm/rpgmaker-mz-mcp@1.2.0
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | npm |
Background: How many MCP packages publish verified provenance →
Dependencies 95 packages
| Packages resolved | 95 |
|---|---|
| Stale | 31 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
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 →
add_class_learning ~199
Add a "learn skill at level" entry to a class (replaces the hack of attaching skills to an actor via an Add-Skill trait). Validates the skillId exists and keeps the learnings sorted by level. Warns (never blocks) when the skill's stypeId is not covered by an Add Skill Type trait ({ code: 41, dataId: stypeId, value: 1 }) on the class — without it the skill-type command never appears and actors cannot use the skill.
| Name | Type | Req | Description |
|---|---|---|---|
| classId | integer | yes | The ID of the class to add the learning to |
| dryRun | boolean | – | Preview only: return a diff of what would change without writing to disk. |
| level | integer | yes | Level at which the skill is learned |
| note | string | – | Optional note for the learning entry |
| skillId | integer | yes | The skill learned (must exist in data/Skills.json) |
No output schema declared.
No examples provided.
add_event_command ~189
Add a command to an event page. Refuses the write (nothing is saved) if the resulting page is structurally invalid — e.g. the command has the wrong parameter count for its code. Pass force: true to override.
| Name | Type | Req | Description |
|---|---|---|---|
| command | object | yes | The event command to insert |
| dryRun | boolean | – | Preview only: return a diff of what would change without writing to disk. |
| eventId | integer | yes | The ID of the event |
| force | boolean | – | Write even if validation finds structural problems (wrong parameter count, unterminated command list). Off by default: such a write is refused and nothing is written. Advisory warnings never block re… |
| mapId | integer | yes | The ID of the map |
| pageIndex | integer | yes | Zero-based page index |
| position | integer | – | Insertion index; defaults to end of the list |
No output schema declared.
No examples provided.
batch_create ~260
Create many database records of one type in a single call and a single file write — the batch sibling of create_actor/create_item/create_weapon/create_armor/create_skill/create_enemy/create_state/create_class. Each entry in `records` takes the same fields its single create_* tool accepts (only `name` is required for most; omitted fields use the editor's defaults). Ids are allocated sequentially from the current max, so a record can reference a sibling created earlier in the same batch. Use this instead of N sequential create_* calls when authoring a cast, a loot table, or a skill list. Returns `{ type, count, created, warnings? }` (classes are summarized like create_class; enemy battlerName misses are warnings, never blocked). Throws — writing nothing at all — if any record references a database id that does not exist, naming the offending records[i].
| Name | Type | Req | Description |
|---|---|---|---|
| dryRun | boolean | – | Preview only: return a diff of what would change without writing to disk. |
| records | array | yes | The records to create, each shaped like the matching create_* tool's arguments (e.g. for type "actor": { name, classId?, ... }) |
| type | string | yes | Which database the records are appended to |
No output schema declared.
No examples provided.
build_battle_processing ~154
Build a Battle Processing (301) event command for insertion via insert_event_commands — start a battle against a troop (direct id, a variable holding the id, or "random" like the map encounters). canEscape/canLose gate the battle result branches. Read-only: returns { command }.
| Name | Type | Req | Description |
|---|---|---|---|
| canEscape | boolean | – | Allow the party to escape (default false) |
| canLose | boolean | – | Continue the event if the party loses (default false) |
| indent | integer | – | Indentation level (default 0) |
| troop | string | – | How the troop is chosen (default direct) |
| troopId | integer | – | direct: the troop id; variable: the variable id holding it |
No output schema declared.
No examples provided.
build_change_actor ~261
Build an actor stat-change scene command for insertion via insert_event_commands: hp (311), mp (312), state (313), recover_all (314), exp (315), or level (316). Targets a fixed actor (0 = whole party) or a variable. hp/mp/exp/level take an increase/decrease `operand` (constant or variable); state takes add/remove + `stateId`; recover_all takes nothing extra. Read-only: returns { command }.
| Name | Type | Req | Description |
|---|---|---|---|
| allowKnockout | boolean | – | hp: allow the change to reduce HP to 0/death (default false) |
| indent | integer | – | Indentation level (default 0) |
| kind | string | yes | Which actor change to build |
| operand | object | – | hp/mp/exp/level: the amount (constant/variable) |
| operation | string | – | hp/mp/exp/level: gain or lose (default increase) |
| showLevelUp | boolean | – | exp/level: show the level-up message (default false) |
| stateId | integer | – | state: the state id |
| stateOperation | string | – | state: add or remove the state |
| target | object | yes | Which actor(s) the change applies to |
No output schema declared.
No examples provided.
build_change_gold ~87
Build a Change Gold (125) event command for insertion via insert_event_commands — increase or decrease party gold by a constant or variable amount. Read-only: returns { command }.
| Name | Type | Req | Description |
|---|---|---|---|
| indent | integer | – | Indentation level (default 0) |
| operand | object | yes | The amount to gain/lose (constant or variable) |
| operation | string | yes | Gain or lose gold |
No output schema declared.
No examples provided.
build_change_items ~161
Build a Change Items (126), Change Weapons (127), or Change Armors (128) event command for insertion via insert_event_commands — gain/lose an item/weapon/armor by a constant or variable amount. includeEquip (weapon/armor only) also counts equipped copies when removing. Read-only: returns { command }.
| Name | Type | Req | Description |
|---|---|---|---|
| id | integer | yes | The item/weapon/armor id |
| includeEquip | boolean | – | weapon/armor: also count equipped copies (default false) |
| indent | integer | – | Indentation level (default 0) |
| kind | string | yes | Which inventory to change |
| operand | object | yes | The amount to gain/lose (constant or variable) |
| operation | string | yes | Gain or lose |
No output schema declared.
No examples provided.
build_change_party_member ~116
Build a Change Party Member (129) event command for insertion via insert_event_commands — add or remove an actor from the party. initialize (add only) resets the actor to their initial state. Read-only: returns { command }.
| Name | Type | Req | Description |
|---|---|---|---|
| actorId | integer | yes | The actor id |
| indent | integer | – | Indentation level (default 0) |
| initialize | boolean | – | add only: reset the actor to their initial state (default false) |
| operation | string | yes | Add to or remove from the party |
No output schema declared.
No examples provided.
build_character_effect ~160
Build a Show Animation (212) or Show Balloon Icon (213) event command for insertion via insert_event_commands, played over a character (characterId: -1 player, 0 this event, N event id). Read-only: returns { command }.
| Name | Type | Req | Description |
|---|---|---|---|
| characterId | integer | yes | Target character: -1 player, 0 this event, N event id on the current map |
| id | integer | yes | animation: the animation id; balloon: the balloon id (1 exclamation, 2 question, …) |
| indent | integer | – | Indentation level (default 0) |
| kind | string | yes | Play an animation or a balloon icon |
| wait | boolean | – | Hold the event until it finishes (default false) |
No output schema declared.
No examples provided.
build_conditional_branch ~161
Build a Conditional Branch block (111 condition + then-branch + optional 411 Else + 412 closer, each branch terminated like the editor) for insertion via insert_event_commands. Condition types: switch, self_switch, variable, actor_in_party, gold, item. Provide thenBranch/elseBranch as EventCommand[] (e.g. from other builders). Read-only: returns { commands }.
| Name | Type | Req | Description |
|---|---|---|---|
| condition | object | yes | Conditional branch condition |
| elseBranch | array | – | Commands for the Else branch; presence (even empty) adds the 411 Else block |
| indent | integer | – | Indentation level of the block (default 0) |
| thenBranch | array | – | Commands to run when the condition is true (default empty) |
No output schema declared.
No examples provided.
build_control_switch ~187
Build a Control Switches (121) or Control Self Switch (123) event command for insertion via insert_event_commands. scope "switch": set a switch (or the inclusive switchId..endId range) on/off. scope "self_switch": set the current event's self switch A–D. Read-only: returns { command }.
| Name | Type | Req | Description |
|---|---|---|---|
| endId | integer | – | switch: inclusive range end (default = switchId, a single switch) |
| indent | integer | – | Indentation level (default 0) |
| name | string | – | self_switch: which self switch |
| scope | string | yes | "switch" (global, by id/range) or "self_switch" (this event, A–D) |
| switchId | integer | – | switch: the switch id (range start) |
| value | string | – | Set on (default) or off |
No output schema declared.
No examples provided.
build_control_variable ~165
Build a Control Variables (122) event command for insertion via insert_event_commands. Applies operation (set/add/sub/mul/div/mod) to a variable (or the inclusive variableId..endId range) using an operand: constant, another variable, a random range, or game_data (item/actor/party/… readouts). Read-only: returns { command }.
| Name | Type | Req | Description |
|---|---|---|---|
| endId | integer | – | Inclusive range end (default = variableId, a single variable) |
| indent | integer | – | Indentation level (default 0) |
| operand | object | yes | The right-hand operand of the Control Variables command |
| operation | string | – | Arithmetic applied to the target (default set) |
| variableId | integer | yes | The target variable id (range start) |
No output schema declared.
No examples provided.
build_flow_command ~119
Build a single flow-control event command for insertion via insert_event_commands: wait (230, N frames), exit_event (115), label (118, a named jump target), or jump_to_label (119). Read-only: returns { command }.
| Name | Type | Req | Description |
|---|---|---|---|
| frames | integer | – | wait: number of frames (60 = 1 second) |
| indent | integer | – | Indentation level (default 0) |
| kind | string | yes | Which flow command to build |
| name | string | – | label/jump_to_label: the label name |
No output schema declared.
No examples provided.
build_name_input ~86
Build a Name Input Processing (303) event command for insertion via insert_event_commands — open the name-entry screen for an actor. Read-only: returns { command }.
| Name | Type | Req | Description |
|---|---|---|---|
| actorId | integer | yes | The actor whose name is entered |
| indent | integer | – | Indentation level (default 0) |
| maxLength | integer | – | Max name length (default 8) |
No output schema declared.
No examples provided.
build_picture ~242
Build a Show Picture (231) or Erase Picture (235) event command for insertion via insert_event_commands. show: display `name` in slot `pictureId` with origin/position/scale/opacity/blend; erase: clear the slot. Read-only: returns { command }.
| Name | Type | Req | Description |
|---|---|---|---|
| blend | string | – | show: blend mode (default normal) |
| indent | integer | – | Indentation level (default 0) |
| kind | string | yes | Show a picture or erase a slot |
| name | string | – | show: picture basename (from list_assets("pictures")) |
| opacity | number | – | show: opacity 0–255 (default 255) |
| origin | string | – | show: anchor point (default upper_left) |
| pictureId | integer | yes | Picture slot 1–100 |
| scaleX | number | – | show: horizontal scale % (default 100) |
| scaleY | number | – | show: vertical scale % (default 100) |
| x | number | – | show: screen x in pixels (default 0) |
| y | number | – | show: screen y in pixels (default 0) |
No output schema declared.
No examples provided.
build_play_audio ~162
Build a Play BGM/BGS/ME/SE (241/245/249/250) event command for insertion via insert_event_commands. Warns (never blocks) when `name` is not a known audio asset for that channel (checked against list_assets). Returns { command, warnings? }.
| Name | Type | Req | Description |
|---|---|---|---|
| indent | integer | – | Indentation level (default 0) |
| kind | string | yes | Which audio channel to play on |
| name | string | yes | Audio basename (from list_assets, extension stripped) |
| pan | number | – | Pan -100–100 (default 0) |
| pitch | number | – | Pitch 50–150 (default 100) |
| volume | number | – | Volume 0–100 (default 90) |
No output schema declared.
No examples provided.
build_screen_effect ~234
Build a screen transition/effect event command for insertion via insert_event_commands: fadeout (221) / fadein (222) — no params; tint (223) & flash (224) — an [r,g,b,a] color over `duration` frames; shake (225) — power/speed over `duration`. `wait` holds the event until it finishes. Read-only: returns { command }.
| Name | Type | Req | Description |
|---|---|---|---|
| color | array | – | tint: [red,green,blue,gray] (−255…255); flash: [red,green,blue,intensity] (0…255) |
| duration | number | – | tint/flash/shake: frames (default 60) |
| indent | integer | – | Indentation level (default 0) |
| kind | string | yes | Which screen effect to build |
| power | number | – | shake: strength 1–9 (default 5) |
| speed | number | – | shake: speed 1–9 (default 5) |
| wait | boolean | – | tint/flash/shake: hold the event until it finishes (default true) |
No output schema declared.
No examples provided.
build_shop_processing ~112
Build a Shop Processing (302 + one 605 row per extra good) event-command sequence for insertion via insert_event_commands. Each good sells an item/weapon/armor at its database price, or a specified `price`. purchaseOnly hides the sell tab. Read-only: returns { commands }.
| Name | Type | Req | Description |
|---|---|---|---|
| goods | array | yes | The goods offered (at least one) |
| indent | integer | – | Indentation level (default 0) |
| purchaseOnly | boolean | – | Hide the sell tab (default false) |
No output schema declared.
No examples provided.
build_show_choices ~250
Build a Show Choices block (102 opener + a 402 branch per choice + optional 403 When-Cancel branch + 404 closer, each branch terminated like the editor) for insertion via insert_event_commands. Pass per-choice `branches` (each an EventCommand[] — e.g. from build_show_text) to fill the branch bodies. Read-only: returns { commands }.
| Name | Type | Req | Description |
|---|---|---|---|
| background | string | – | Choice window background (default window) |
| branches | array | – | Commands per choice (same order as choices); omitted/short = empty branches |
| cancelBranch | array | – | Commands for a "When Cancel" branch (adds a 403 block; cancel routes here) |
| cancelType | integer | – | Without a cancelBranch: 0-based choice index the Cancel button maps to, or -1 Disallow (default -1) |
| choices | array | yes | The choice labels shown to the player |
| defaultType | integer | – | 0-based default (highlighted) choice, or -1 none (default 0) |
| indent | integer | – | Indentation level of the block (default 0) |
| position | string | – | Choice window position (default right) |
No output schema declared.
No examples provided.
build_show_text ~214
Build a Show Text event-command sequence (101 setup + one 401 line per text line) for insertion via insert_event_commands. Supports face image (from list_assets("faces")), window background/position, and the MZ name-box speaker. MZ does NOT word-wrap: keep each line under ~55 chars (~38 with a face) or it is cut off at the window edge (warned, never blocked). Read-only: returns { commands, warnings? }, writes nothing.
| Name | Type | Req | Description |
|---|---|---|---|
| background | string | – | Window background (default window) |
| faceIndex | integer | – | Face index 0–7 in the sheet (default 0) |
| faceName | string | – | Face image basename ("" = none, default) |
| indent | integer | – | Indentation level (default 0) |
| lines | array | yes | Message lines (one entry per visual line) |
| position | string | – | Window position (default bottom) |
| speakerName | string | – | MZ name-box speaker name (default "") |
No output schema declared.
No examples provided.
build_transfer_player ~176
Build a Transfer Player (201) event command for insertion via insert_event_commands — move the party to (x, y) on a map. With designation "variable", mapId/x/y are variable ids resolved at runtime. Read-only: returns { command }.
| Name | Type | Req | Description |
|---|---|---|---|
| designation | string | – | direct: mapId/x/y are literal; variable: they are variable ids (default direct) |
| direction | string | – | Facing after transfer (default retain) |
| fade | string | – | Fade style (default black) |
| indent | integer | – | Indentation level (default 0) |
| mapId | integer | yes | Destination map id (or a variable id if designation=variable) |
| x | integer | yes | Destination tile x (or a variable id) |
| y | integer | yes | Destination tile y (or a variable id) |
No output schema declared.
No examples provided.
call_common_event ~115
Build a "Common Event" event command (code 117) that calls the given common event, for insertion into an event page via insert_event_commands. Validates the common event exists. Read-only: returns `{ command }` (matching the build_* tools, so it composes into a thenBranch/commands array); writes nothing.
| Name | Type | Req | Description |
|---|---|---|---|
| commonEventId | integer | yes | The ID of the common event to call (must exist) |
| indent | integer | – | Indentation level in the target list (default 0) |
No output schema declared.
No examples provided.
check_passability ~173
Check whether a map cell can be walked onto, reproducing the engine's layered passage rule: the stacked tiles at (x, y) are examined upper-layer first, and the first non-[*] tile decides each direction. Reads the map's tileset flags. Returns per-direction passability (down/left/right/up — true = a character can walk off the cell that way), the cell's terrain tag, the stacked tile ids, and — when `direction` is given — a single `passable` boolean for that direction. Read-only.
| Name | Type | Req | Description |
|---|---|---|---|
| direction | string | – | Optional: also report a single passable boolean for this direction |
| mapId | integer | yes | The map id to inspect |
| x | integer | yes | Tile x coordinate |
| y | integer | yes | Tile y coordinate |
No output schema declared.
No examples provided.
create_actor ~265
Create a new actor in data/Actors.json. Only `name` is required; omitted fields use the editor's new-actor defaults (class 1, level 1-99, five empty equip slots, no traits). Allocates and returns the next unused actor id. NOTE: an actor's physical accuracy comes from its class + own traits — a class/actor with no Hit Rate trait (xparam id 0: trait { code: 22, dataId: 0, value: 0.95 }) always misses physical actions. The built-in class 1 has one; a custom class needs it added.
| Name | Type | Req | Description |
|---|---|---|---|
| battlerName | string | – | – |
| characterIndex | integer | – | – |
| characterName | string | – | – |
| classId | integer | – | – |
| dryRun | boolean | – | Preview only: return a diff of what would change without writing to disk. |
| equips | array | – | – |
| faceIndex | integer | – | – |
| faceName | string | – | – |
| initialLevel | number | – | – |
| maxLevel | number | – | – |
| name | string | yes | – |
| nickname | string | – | – |
| note | string | – | – |
| profile | string | – | – |
| traits | array | – | – |
No output schema declared.
No examples provided.
create_armor ~269
Create a new armor in data/Armors.json. Only `name` is required; omitted fields use the editor's new-armor defaults (Shield equip slot, no stat bonuses). `params` is a flat 8-length stat bonus; `etypeId` is the equip slot (System.json equipTypes: 2 Shield, 3 Head, 4 Body, 5 Accessory). Allocates and returns the next unused armor id.
| Name | Type | Req | Description |
|---|---|---|---|
| atypeId | integer | – | Armor type id (System.json armorTypes) |
| description | string | – | In-game description text |
| dryRun | boolean | – | Preview only: return a diff of what would change without writing to disk. |
| etypeId | integer | – | Equip slot (equipTypes: 2 Shield, 3 Head, 4 Body, 5 Accessory) |
| iconIndex | integer | – | Icon index (IconSet.png) |
| name | string | yes | Armor name |
| note | string | – | Note field |
| params | array | – | 8 flat stat bonuses [maxHP, maxMP, atk, def, mat, mdf, agi, luk] |
| price | integer | – | Buy price |
| traits | array | – | Trait objects { code, dataId, value } |
No output schema declared.
No examples provided.
create_buff_skill ~134
Create a buff skill (simplified)
| Name | Type | Req | Description |
|---|---|---|---|
| buffType | integer | yes | Buff type (2=ATK, 3=DEF, 4=MAT, 5=MDF, 6=AGI) |
| description | string | – | Skill description |
| dryRun | boolean | – | Preview only: return a diff of what would change without writing to disk. |
| mpCost | number | yes | MP cost |
| name | string | yes | Skill name |
| scope | integer | yes | Target scope (7=ally all, 11=user) |
| turns | number | yes | Number of turns the buff lasts |
No output schema declared.
No examples provided.
create_chest ~496
Create a complete, placed treasure chest on a map in one call — the two-page self-switch idiom done correctly, so the chest can never be looted twice. Page 1 (closed) is an action-button, priority-`same` event that optionally shows `text`, gives the contents, then flips its self switch; page 2 (opened) is gated on that self switch, shows the opened graphic and does nothing. `kind` picks the payout: item/weapon/armor (needs `id`) or gold. On the RTP `!Chest` sheet the open/closed states are the *direction* rows of one character block (down = closed, up = open), which is what closedDirection/openedDirection default to. Throws if the item/weapon/armor `id` does not exist; warns (never blocks) on an unknown characterName or a chest with no graphic.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | integer | – | How many (or how much gold) to give; default 1 |
| characterIndex | integer | – | Which chest in the sheet (0-7); default 0 |
| characterName | string | – | Chest sprite basename from list_assets("characters"), e.g. "!Chest" |
| closedDirection | string | – | Direction row showing the CLOSED chest; default "down" |
| dryRun | boolean | – | Preview only: return a diff of what would change without writing to disk. |
| force | boolean | – | Write even if validation finds structural problems (wrong parameter count, unterminated command list). Off by default: such a write is refused and nothing is written. Advisory warnings never block re… |
| id | integer | – | The item/weapon/armor ID to give (omit for kind "gold") |
| kind | string | yes | What the chest gives; item/weapon/armor require `id` |
| mapId | integer | yes | The ID of the map to place the chest on |
| name | string | – | Event name (editor label); default "Chest" |
| openedDirection | string | – | Direction row showing the OPENED chest; default "up" |
| selfSwitch | string | – | Self switch channel marking the chest looted; default "A" |
| text | array | – | Optional message shown on opening, e.g. ["Found a Potion!"] |
| x | integer | yes | X tile position |
| y | integer | yes | Y tile position |
No output schema declared.
No examples provided.
create_class ~333
Create a new character class in data/Classes.json. Only `name` is required; omitted fields use the editor's new-class defaults (EXP curve [30,20,30,30], no traits/learnings, a linear param curve to maxLevel). Allocates and returns the next unused class id. NOTE: a class with no Hit Rate trait (xparam id 0: trait { code: 22, dataId: 0, value: 0.95 }) makes its actors always miss physical actions — pass one in `traits` for a combat-ready class. Likewise every learned skill's stypeId needs an Add Skill Type trait ({ code: 41, dataId: stypeId, value: 1 }) or the skill-type command never appears (warned, never blocked).
| Name | Type | Req | Description |
|---|---|---|---|
| dryRun | boolean | – | Preview only: return a diff of what would change without writing to disk. |
| expParams | array | – | EXP curve: [basis, extra, accelerationA, accelerationB] |
| learnings | array | – | Learned-skill entries { level, skillId, note } |
| maxLevel | integer | – | Highest level the param curve covers (default 99); sizes the params matrix |
| name | string | yes | Class name shown in the database |
| note | string | – | Note field |
| params | array | – | 8 param growth curves, each maxLevel+1 long: [maxHP,maxMP,atk,def,mat,mdf,agi,luk] |
| traits | array | – | Trait objects { code, dataId, value } |
No output schema declared.
No examples provided.
create_common_event ~247
Create a new common event (reusable event-command list) in data/CommonEvents.json. Only `name` is required; omitted fields use the editor's new-slot defaults (empty command list, trigger 0 = call-only, switchId 1). Allocates and returns the next unused id. A structurally invalid command list refuses the write (nothing is saved) — pass force: true to override.
| Name | Type | Req | Description |
|---|---|---|---|
| dryRun | boolean | – | Preview only: return a diff of what would change without writing to disk. |
| force | boolean | – | Write even if validation finds structural problems (wrong parameter count, unterminated command list). Off by default: such a write is refused and nothing is written. Advisory warnings never block re… |
| list | array | – | Event-command list { code, indent, parameters }; must end with code 0 |
| name | string | yes | Common event name shown in the database |
| switchId | integer | – | Switch that gates an Autorun/Parallel trigger (ignored when trigger is 0) |
| trigger | integer | – | How it runs on its own: 0 None (call-only), 1 Autorun, 2 Parallel |
No output schema declared.
No examples provided.
create_damage_skill ~139
Create a damage-dealing skill (simplified)
| Name | Type | Req | Description |
|---|---|---|---|
| damageFormula | string | yes | Damage formula (e.g., "a.mat * 4") |
| description | string | – | Skill description |
| dryRun | boolean | – | Preview only: return a diff of what would change without writing to disk. |
| elementId | integer | – | Element ID (0=none, 2=fire, 3=ice, 4=thunder) |
| mpCost | number | yes | MP cost |
| name | string | yes | Skill name |
| scope | integer | yes | Target scope (1=enemy single, 2=enemy all) |
No output schema declared.
No examples provided.
create_enemy ~370
Create a new enemy in data/Enemies.json. Only `name` is required; omitted fields use the editor's new-enemy defaults (100 HP, one Attack action, no drops). Allocates the next unused enemy id and returns `{ enemy, warnings? }` (warn-by-default: a `battlerName` not found in img/enemies is flagged, never blocked). Throws if an `actions[].skillId` or a `dropItems[].dataId` (item/weapon/armor by `kind`) references a record that does not exist. NOTE: an enemy with no Hit Rate trait (xparam id 0: trait { code: 22, dataId: 0, value: 0.95 }) always misses physical actions — pass one in `traits` if the enemy should land basic attacks.
| Name | Type | Req | Description |
|---|---|---|---|
| actions | array | – | Action patterns { skillId, conditionType, conditionParam1, conditionParam2, rating } |
| battlerHue | integer | – | Battler hue rotation 0-360 |
| battlerName | string | – | Battler graphic filename (img/enemies) |
| dropItems | array | – | Drop-item objects { kind, dataId, denominator } |
| dryRun | boolean | – | Preview only: return a diff of what would change without writing to disk. |
| exp | integer | – | EXP granted when defeated |
| gold | integer | – | Gold granted when defeated |
| name | string | yes | Enemy name shown in battle and the database |
| note | string | – | Note field |
| params | array | – | 8 base params: [maxHP, maxMP, atk, def, mat, mdf, agi, luk] |
| traits | array | – | Trait objects { code, dataId, value } |
No output schema declared.
No examples provided.
create_healing_skill ~109
Create a healing skill (simplified)
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | Skill description |
| dryRun | boolean | – | Preview only: return a diff of what would change without writing to disk. |
| healFormula | string | yes | Heal formula (e.g., "a.mat * 3 + 100") |
| mpCost | number | yes | MP cost |
| name | string | yes | Skill name |
| scope | integer | yes | Target scope (7=ally all, 11=user) |
No output schema declared.
No examples provided.
create_item ~373
Create a new item in data/Items.json. Only `name` is worth passing; omitted fields use the editor's new-item defaults (Regular Item, consumable, no effects). Allocates and returns the next unused item id. An effect referencing a missing record throws: Add/Remove State (code 21/22) → state, Learn Skill (43) → skill, Common Event (44) → common event.
| Name | Type | Req | Description |
|---|---|---|---|
| animationId | integer | – | Animation id shown on use |
| consumable | boolean | – | Consumed on use |
| damage | object | – | Damage object { type, elementId, formula, variance, critical } |
| description | string | – | In-game description text |
| dryRun | boolean | – | Preview only: return a diff of what would change without writing to disk. |
| effects | array | – | Effect objects { code, dataId, value1, value2 } |
| hitType | integer | – | 0 certain, 1 physical, 2 magical |
| iconIndex | integer | – | Icon index (IconSet.png) |
| itypeId | integer | – | Item type: 1 Regular, 2 Key Item, 3 Hidden A, 4 Hidden B |
| name | string | yes | Item name |
| note | string | – | Note field |
| occasion | integer | – | Usable: 0 always, 1 battle, 2 menu, 3 never |
| price | integer | – | Buy price (sells for half) |
| repeats | integer | – | Number of hits/repeats |
| scope | integer | – | Target scope (0 none, 1 one enemy, 7 one ally, …) |
| successRate | integer | – | Success rate percent |
| tpGain | integer | – | User TP gained on use |
No output schema declared.
No examples provided.
create_map ~183
Create a new blank map: writes a new data/MapNNN.json (all tiles unpainted) and registers it in the map tree (MapInfos.json). Allocates the next unused map id and returns it. Paint tiles afterward with paint_tiles/fill_area (autotile-aware) and add events with create_map_event/create_npc.
| Name | Type | Req | Description |
|---|---|---|---|
| dryRun | boolean | – | Preview only: return a diff of what would change without writing to disk. |
| height | integer | – | Height in tiles (default 13) |
| name | string | yes | Map name shown in the editor map tree |
| parentId | integer | – | Parent map id in the tree; 0 (default) = top level |
| tilesetId | integer | – | Tileset id (default 1) |
| width | integer | – | Width in tiles (default 17) |
No output schema declared.
No examples provided.
create_map_event ~477
Create a new event on a map. Each page is merged onto a blank "New Event" page (trigger 0 action-button, priority 0 below characters, no graphic, empty command list, standing move type), so you only supply the fields that differ — pass e.g. `{ image: { characterName: 'Actor1', characterIndex: 0 }, trigger: 3, list: [...] }` and the rest is filled in. Nested `image`/`conditions` deep-merge; an omitted `list` becomes a valid empty (code-0-terminated) list. Omit `pages` entirely for a bare one-page event. For the common "talking NPC" case prefer create_npc. An action-button page meant to fire from facing (doors, entrances, signs) needs `priorityType: 1` — with the default 0 (below) it only fires when stood on, so on an impassable tile it can never trigger (this is refused, not written; pass force: true to override). A structurally invalid command list is refused the same way. Page fields: `image` { characterName, characterIndex, direction (2 down/4 left/6 right/8 up), pattern, tileId }, `trigger` (0 action-button/1 player-touch/2 event-touch/3 autorun/4 parallel), `priorityType` (0 below/1 same/2 above), `moveType` (0 fixed/1 random/2 approach/3 custom), `conditions`, `list`.
| Name | Type | Req | Description |
|---|---|---|---|
| dryRun | boolean | – | Preview only: return a diff of what would change without writing to disk. |
| force | boolean | – | Write even if validation finds structural problems (wrong parameter count, unterminated command list). Off by default: such a write is refused and nothing is written. Advisory warnings never block re… |
| mapId | integer | yes | The ID of the map |
| name | string | yes | Event name |
| note | string | – | Event note field |
| pages | array | – | Event pages; each is merged onto a blank page so you can pass only the differing fields. Omit for one blank page. |
| x | integer | yes | X tile position |
| y | integer | yes | Y tile position |
No output schema declared.
No examples provided.
create_move_route ~224
Build a movement route from a named pattern (patrol/approach/flee/wander/custom) instead of raw move-command codes. Read-only: returns { moveRoute, warnings? }. Use the route as an event page’s autonomous moveRoute (update_map_event with moveType 3), or feed it to set_movement_route for a forced route in an event command list.
| Name | Type | Req | Description |
|---|---|---|---|
| commands | array | – | custom only: raw move commands { code, parameters } |
| direction | string | – | patrol only: primary direction, walked out and back (default right) |
| pattern | string | yes | patrol (walk a direction and back), approach (toward player), flee (away from player), wander (random), or custom (your own move commands) |
| repeat | boolean | – | Loop the route (patterns loop by default) |
| skippable | boolean | – | Skip a step when movement is blocked |
| steps | integer | – | patrol only: steps per leg (default 3) |
| wait | boolean | – | Wait for the route to finish before continuing |
No output schema declared.
No examples provided.
create_npc ~458
Create a complete, placed NPC event on a map in one call — a graphic + trigger + a talk list. Provide `text` (built into a Show Text sequence, with optional face/speaker) or an explicit `commands` array (commands wins if both given). Defaults to a solid, action-button NPC facing down. Warns (never blocks) on an unknown characterName, and on NO graphic at all (an NPC with no characterName is invisible in-game — use create_map_event for an intentionally-invisible trigger). The one-shot "make a talking NPC that says X" primitive.
| Name | Type | Req | Description |
|---|---|---|---|
| characterIndex | integer | – | Sprite index 0–7 in the sheet |
| characterName | string | – | Sprite sheet basename (from list_assets("characters")) |
| commands | array | – | Explicit command list (from the build_* tools); overrides `text` if given |
| direction | string | – | Facing direction (default down) |
| dryRun | boolean | – | Preview only: return a diff of what would change without writing to disk. |
| faceIndex | integer | – | text: face index 0–7 |
| faceName | string | – | text: face image basename (from list_assets("faces")) |
| force | boolean | – | Write even if validation finds structural problems (wrong parameter count, unterminated command list). Off by default: such a write is refused and nothing is written. Advisory warnings never block re… |
| mapId | integer | yes | The ID of the map to place the NPC on |
| name | string | yes | Event name (editor label) |
| pattern | integer | – | Sprite frame 0–2 (default 1 = idle when a sprite is set) |
| priority | string | – | Stacking vs. the player (default same = solid) |
| speakerName | string | – | text: MZ name-box speaker name |
| text | array | – | Dialogue lines shown when the NPC is triggered (built as Show Text) |
| through | boolean | – | Let the player pass through (default false) |
| trigger | string | – | What starts the event (default action_button) |
| x | integer | yes | X tile position |
| y | integer | yes | Y tile position |
No output schema declared.
No examples provided.
create_plugin_command ~225
Build an RPG Maker MZ plugin command (event command code 357) for insertion into an event page via add_event_command. Validates against the plugins this project actually ships (scanned from their js/plugins/*.js @command/@arg annotations) merged over a small built-in allowlist — warn-by-default: an unknown plugin/command, a stray arg, or a plugin that is installed but disabled in js/plugins.js produces a warning but never blocks. Args are normalized to the editor’s string-valued shape. Read-only: returns { command, warnings? }, writes nothing.
| Name | Type | Req | Description |
|---|---|---|---|
| args | object | – | Command arguments as { name: value }; values are stored as strings on disk |
| commandName | string | yes | The command key the plugin registered (event command parameters[1]) |
| indent | integer | – | Indentation level in the target list (default 0) |
| label | string | – | Editor display label (parameters[2]); defaults to the command key |
| pluginName | string | yes | Plugin filename without .js (event command parameters[0]) |
No output schema declared.
No examples provided.
create_skill ~229
Create a new skill with custom properties. An effect referencing a missing record throws: Add/Remove State (code 21/22) → state, Learn Skill (43) → skill, Common Event (44) → common event.
| Name | Type | Req | Description |
|---|---|---|---|
| animationId | integer | – | Animation ID |
| damage | object | – | Damage configuration |
| description | string | – | Skill description |
| dryRun | boolean | – | Preview only: return a diff of what would change without writing to disk. |
| effects | array | – | Skill effects (buffs, debuffs, states, etc.) |
| iconIndex | integer | – | Icon index (0-1000+) |
| message1 | string | – | Battle message |
| mpCost | number | – | MP cost |
| name | string | yes | Skill name |
| scope | integer | – | Target scope (1=enemy single, 2=enemy all, 7=ally all, etc.) |
| stypeId | integer | – | Skill type (1=magic, 2=special, etc.) |
| tpCost | number | – | TP cost |
No output schema declared.
No examples provided.
create_state ~492
Create a new state (status condition like Poison/Sleep) in data/States.json. Only `name` is required; omitted fields use the editor's new-state defaults (no restriction, priority 50, no auto-removal, 1-turn duration). Allocates and returns the next unused state id.
| Name | Type | Req | Description |
|---|---|---|---|
| autoRemovalTiming | integer | – | Auto-removal timing: 0 none, 1 at action end, 2 at turn end |
| chanceByDamage | integer | – | Chance (%) of removal per damage instance when removeByDamage |
| dryRun | boolean | – | Preview only: return a diff of what would change without writing to disk. |
| iconIndex | integer | – | Icon shown on the battler/status (0 = none) |
| maxTurns | integer | – | Maximum duration in turns when auto-removed |
| message1 | string | – | Message when an actor gains the state |
| message2 | string | – | Message when an enemy gains the state |
| message3 | string | – | Message when the state persists |
| message4 | string | – | Message when the state is removed |
| messageType | integer | – | Engine's message routing form |
| minTurns | integer | – | Minimum duration in turns when auto-removed |
| motion | integer | – | SV-actor motion (0 normal, 2 sleep, 3 dead, …) |
| name | string | yes | State name shown in the database and battle messages |
| note | string | – | Note field |
| overlay | integer | – | Overlay animation index (0 = none) |
| priority | integer | – | Icon-slot display priority 0-100 (default 50) |
| releaseByDamage | boolean | – | Whether damage can release the state |
| removeAtBattleEnd | boolean | – | Remove automatically when the battle ends |
| removeByDamage | boolean | – | Remove when the battler takes damage |
| removeByRestriction | boolean | – | Remove when the battler's restriction changes |
| removeByWalking | boolean | – | Remove after walking a number of steps |
| restriction | integer | – | Behavior restriction: 0 none, 1 attack enemy, 2 attack anyone, 3 attack ally, 4 cannot move |
| stepsToRemove | integer | – | Steps to walk off the state when removeByWalking |
| traits | array | – | Trait objects { code, dataId, value } |
No output schema declared.
No examples provided.
create_state_skill ~165
Create a state-inflicting skill (poison, sleep, etc.). Throws if `stateId` does not exist in States.json (create the state first with create_state).
| Name | Type | Req | Description |
|---|---|---|---|
| chance | number | yes | Success chance (0.0-1.0) |
| description | string | – | Skill description |
| dryRun | boolean | – | Preview only: return a diff of what would change without writing to disk. |
| mpCost | number | yes | MP cost |
| name | string | yes | Skill name |
| scope | integer | yes | Target scope (1=enemy single, 2=enemy all) |
| stateId | integer | yes | State ID (4=poison, 5=blind, 6=silence, 8=confusion, etc.) |
No output schema declared.
No examples provided.
create_transfer ~428
Create a complete, placed map-transfer event in one call, using whichever of the two working idioms you pick. `idiom: "action_button"` (default) makes a priority-`same` event the player faces and presses — the right shape for a solid landmark (building, dungeon mouth, door); `idiom: "player_touch"` makes an invisible priority-`below` doormat the player walks onto — for interior exits and map-edge gaps. `direction` is the facing the player lands with, `fade` the screen transition. Throws if the destination map does not exist; warns if the destination tile is outside that map, if the characterName is unknown, or if the event can never fire from where it sits.
| Name | Type | Req | Description |
|---|---|---|---|
| characterIndex | integer | – | Sprite index 0-7 in the sheet |
| characterName | string | – | Optional sprite basename (a doormat is normally left invisible) |
| direction | string | – | Facing after the transfer; default "retain" |
| dryRun | boolean | – | Preview only: return a diff of what would change without writing to disk. |
| fade | string | – | Screen fade during the transfer; default "black" |
| force | boolean | – | Write even if validation finds structural problems (wrong parameter count, unterminated command list). Off by default: such a write is refused and nothing is written. Advisory warnings never block re… |
| idiom | string | – | action_button = face a solid landmark and press (priority same, default); player_touch = walk onto a doormat (priority below) |
| mapId | integer | yes | The ID of the map the trigger is placed on |
| name | string | – | Event name (editor label); default "Transfer" |
| targetMapId | integer | yes | The ID of the destination map |
| targetX | integer | yes | X tile the player lands on |
| targetY | integer | yes | Y tile the player lands on |
| x | integer | yes | X tile position of the trigger |
| y | integer | yes | Y tile position of the trigger |
No output schema declared.
No examples provided.
create_troop ~201
Create a new troop (enemy battle group) in data/Troops.json. `name` is required; `members` defaults to empty and `pages` to one blank battle-event page. Every member.enemyId must reference an existing enemy. A structurally invalid battle-event page refuses the write (nothing is saved) — pass force: true to override.
| Name | Type | Req | Description |
|---|---|---|---|
| dryRun | boolean | – | Preview only: return a diff of what would change without writing to disk. |
| force | boolean | – | Write even if validation finds structural problems (wrong parameter count, unterminated command list). Off by default: such a write is refused and nothing is written. Advisory warnings never block re… |
| members | array | – | Placed enemies; each references an existing enemyId |
| name | string | yes | Troop name shown in the database |
| pages | array | – | Battle-event pages { conditions, list, span }; defaults to one blank page |
No output schema declared.
No examples provided.
create_weapon ~236
Create a new weapon in data/Weapons.json. Only `name` is required; omitted fields use the editor's new-weapon defaults (Weapon equip slot, no stat bonuses). `params` is a flat 8-length stat bonus [maxHP, maxMP, atk, def, mat, mdf, agi, luk]. Allocates and returns the next unused weapon id.
| Name | Type | Req | Description |
|---|---|---|---|
| animationId | integer | – | Attack animation id |
| description | string | – | In-game description text |
| dryRun | boolean | – | Preview only: return a diff of what would change without writing to disk. |
| iconIndex | integer | – | Icon index (IconSet.png) |
| name | string | yes | Weapon name |
| note | string | – | Note field |
| params | array | – | 8 flat stat bonuses [maxHP, maxMP, atk, def, mat, mdf, agi, luk] |
| price | integer | – | Buy price |
| traits | array | – | Trait objects { code, dataId, value } |
| wtypeId | integer | – | Weapon type id (System.json weaponTypes) |
No output schema declared.
No examples provided.
delete_map ~106
Delete a map: remove its entry from the map tree (MapInfos.json) and delete its data/MapNNN.json file. The deleted map's direct children are reparented onto its parent (not deleted), so removing one node doesn't wipe a whole sub-tree. Does not touch System.json.
| Name | Type | Req | Description |
|---|---|---|---|
| dryRun | boolean | – | Preview only: return a diff of what would change without writing to disk. |
| mapId | integer | yes | The ID of the map to delete |
No output schema declared.
No examples provided.
delete_map_event ~66
Delete an event from a map by ID
| Name | Type | Req | Description |
|---|---|---|---|
| dryRun | boolean | – | Preview only: return a diff of what would change without writing to disk. |
| eventId | integer | yes | The ID of the event |
| mapId | integer | yes | The ID of the map |
No output schema declared.
No examples provided.
What is the io.github.Redseb/rpgmaker-mz-mcp server?
io.github.Redseb/rpgmaker-mz-mcp is listed in the public MCP registry as io.github.Redseb/rpgmaker-mz-mcp. MCP server for RPG Maker MZ: maps, tile painting, events, database editing, and validation. This page covers its npm package (rpgmaker-mz-mcp).
Is the io.github.Redseb/rpgmaker-mz-mcp server safe to use?
io.github.Redseb/rpgmaker-mz-mcp scores 79 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. It declares no install or post-install scripts. 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 io.github.Redseb/rpgmaker-mz-mcp server expose?
io.github.Redseb/rpgmaker-mz-mcp exposes 119 tools: get_project, set_project, update_actor, create_actor, search_actors, and 114 more. Their descriptions and schemas cost roughly 19,486 tokens of context every time the server is loaded.
Is the io.github.Redseb/rpgmaker-mz-mcp server still maintained?
io.github.Redseb/rpgmaker-mz-mcp is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the io.github.Redseb/rpgmaker-mz-mcp server under?
io.github.Redseb/rpgmaker-mz-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.