{"name":"io.github.Redseb/rpgmaker-mz-mcp","slug":"redseb-rpgmaker-mz-mcp","title":null,"description":"MCP server for RPG Maker MZ: maps, tile painting, events, database editing, and validation.","url":"https://mcp.market/server/redseb-rpgmaker-mz-mcp","rating":null,"grade":"A","score":92,"certified":false,"status":"active","category":"data","tags":["data"],"presence":{"score":33,"stars":7,"forks":2,"downloads_week":70,"last_push_at":"2026-09-23T16:07:38.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/Redseb/rpgmaker-mz-mcp","website":null,"version":"1.2.0","remotes":[],"packages":[{"registryType":"npm","identifier":"rpgmaker-mz-mcp","version":"1.2.0","transport":{"type":"stdio"},"environmentVariables":[{"description":"Default RPG Maker MZ project directory (contains game.rmmzproject). Optional: the set_project tool can set or change the project at runtime.","format":"string","name":"RPGMAKER_PROJECT_PATH"}]}],"tools":[{"name":"build_battle_processing","description":"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 }.","write_action":false,"price_micros":0,"input_schema":null},{"name":"build_change_actor","description":"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 }.","write_action":false,"price_micros":0,"input_schema":null},{"name":"build_change_gold","description":"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 }.","write_action":false,"price_micros":0,"input_schema":null},{"name":"build_change_items","description":"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 }.","write_action":false,"price_micros":0,"input_schema":null},{"name":"build_change_party_member","description":"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 }.","write_action":false,"price_micros":0,"input_schema":null},{"name":"build_character_effect","description":"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 }.","write_action":false,"price_micros":0,"input_schema":null},{"name":"build_conditional_branch","description":"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 }.","write_action":false,"price_micros":0,"input_schema":null},{"name":"build_control_switch","description":"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 }.","write_action":false,"price_micros":0,"input_schema":null},{"name":"build_control_variable","description":"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 }.","write_action":false,"price_micros":0,"input_schema":null},{"name":"build_flow_command","description":"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 }.","write_action":false,"price_micros":0,"input_schema":null},{"name":"build_name_input","description":"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 }.","write_action":false,"price_micros":0,"input_schema":null},{"name":"build_picture","description":"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 }.","write_action":false,"price_micros":0,"input_schema":null},{"name":"build_play_audio","description":"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? }.","write_action":false,"price_micros":0,"input_schema":null},{"name":"build_screen_effect","description":"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 }.","write_action":false,"price_micros":0,"input_schema":null},{"name":"build_shop_processing","description":"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 }.","write_action":false,"price_micros":0,"input_schema":null},{"name":"build_show_choices","description":"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 }.","write_action":false,"price_micros":0,"input_schema":null},{"name":"build_show_text","description":"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, warning","write_action":false,"price_micros":0,"input_schema":null},{"name":"build_transfer_player","description":"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 }.","write_action":true,"price_micros":0,"input_schema":null},{"name":"call_common_event","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"check_passability","description":"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 `","write_action":false,"price_micros":0,"input_schema":null},{"name":"create_move_route","description":"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.","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_plugin_command","description":"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 pro","write_action":true,"price_micros":0,"input_schema":null},{"name":"describe_tile","description":"Decode a raw RPG Maker MZ tile id into its tileset sheet (A1–A5, B–E), and for autotiles its kind + shape slot (0–47) and autotile geometry (floor/wall/waterfall). Read-only inspection helper — raw tile ids are opaque integers, this makes one legible. Returns { tileId, empty, sheet, sheetIndex, autotile, kind?, shape?, autotileType? }. Pass `tilesetId` to also inspect the sheet PNG and report `tra","write_action":false,"price_micros":0,"input_schema":null},{"name":"find_tile","description":"Find tiles in a tileset by a case-insensitive SUBSTRING match on their catalog name — a quick bridge from a name fragment like 'grass' or 'forest' to a paintable tile id. This is a literal substring match, NOT synonym/semantic search: 'water' matches 'Endless Waterfall' but not 'Sea' or 'Pond' (their names lack the substring). To browse the actual tile names first, use get_tile_catalog with a `she","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_database","description":"Read a database table in full: actors, classes, items, weapons, armors, skills, enemies, troops, states, or common_events. Returns the raw 1-indexed array (slot 0 is null), or — with `id` — that single record, or null if no such record exists. These are full records: prefer list_names for an id→name index, or search_actors/search_items/search_skills to find records by name, and reach for this only","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_game_title","description":"Get the game title","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_map","description":"Get map data by ID. The tile `data` array can be huge on a painted map (width*height*6 ints) and blow the MCP token limit, so pass includeData:false to omit it (you get dataTileCount instead) and read tiles with get_map_region when needed. includeData defaults to true for backward compatibility.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_map_dimensions","description":"Get the width and height (in tiles) of a map","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_map_event","description":"Get a specific event from a map","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_map_events","description":"Get all events from a specific map","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_map_infos","description":"Get information about all maps","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_map_region","description":"Read the raw tile ids in a rectangular window of one map layer — a token-cheap alternative to get_map for inspecting part of a painted map. Returns `tiles` as a 2D array (rows top→bottom, each left→right) of raw engine tile ids. The rectangle must lie fully within the map bounds (throws otherwise). layer defaults to 0 (see set_map_tile for the z-layer meanings).","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_party","description":"Get the starting party — the actor ids the game begins with. Returns `{ partyMembers }`, rhyming with set_party's input/output shape.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_project","description":"Get the project directory the server is currently operating on: its path, whether it is a valid RPG Maker MZ project, and the game title it holds.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_starting_position","description":"Get the game starting position ({ mapId, x, y })","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_switches","description":"Get all game switch names","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_system","description":"Get system data","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_terms","description":"Get the game vocabulary/terms: the `basic`, `commands`, `params` string arrays and the `messages` map (menu labels, system messages).","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_tile_catalog","description":"Get the semantic tile catalog for a tileset: the named tiles (e.g. 'Grassland A', 'Forest', 'Sea') in each of its image sheets, each with its representative tile id and a `source` ('builtin' = RPG Maker's own labels; 'project' = a draft name from the vision-bootstrap skill). Project (custom-sheet) entries also carry the skill's `description`, `confidence` ('high'/'medium'/'low'), and `manual` (tru","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_tile_flags","description":"Decode a tileset's flag word for a single tile id into a legible view: 4-direction passability (down/left/right/up — true = walkable that way), the [*] 'star' overlay bit, ladder/bush/counter/damage-floor flags, and terrain tag (0–7). Read-only inspection of data/Tilesets.json flags[]. Note passability here is for the tile in isolation; a real cell's passability layers its stacked tiles — use chec","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_tilesets","description":"List every tileset in the project with its id, name, mode (0 world / 1 area), and the image sheets it uses (labelled A1–A4, A5, B–E; empty slots omitted). Use this to discover valid tilesetId values (needed by find_tile, get_tile_catalog, paint_tiles, fill_area, place_object, get_tile_flags, set_tile_flags, check_passability) and to see which sheets each tileset is built from. For a plain id→name ","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_title_screen","description":"Get the title screen settings: title1Name/title2Name (background layers, from list_assets(\"titles1\"/\"titles2\") — title2Name draws over title1Name), titleBgm (the AudioFile that plays while it is shown), and drawTitle (whether the game title text is drawn over the art).","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_types","description":"Get one System.json type-name array — the named lists other data references by index: elements, skillTypes, weaponTypes, armorTypes, or equipTypes.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_variables","description":"Get all game variable names","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_allocated_ids","description":"Show which switch / variable / common-event IDs are already spoken for, derived from the project's own JSON (never a hand-maintained list, which would drift the moment someone edited in the RPG Maker editor). An id counts as allocated if it is declared (a System.json label, a CommonEvents row) OR referenced anywhere — event page conditions and command lists, common events, troop pages, and Common ","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_assets","description":"List the available asset filenames (extension stripped) for one asset kind — the exact names RPG Maker's data references (a sprite/face/tileset/audio name). Use it to validate a graphic or audio name before wiring it into an event; a wrong filename fails silently at runtime. Fails soft: an unused asset directory returns an empty list.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_names","description":"Cheap names-only index for a database table. Returns { id, name } entries instead of full records — use it to look up or sanity-check IDs before wiring them into events, without paying the token cost of a full get_*/search_* dump.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_plugin_commands","description":"List every plugin command create_plugin_command can validate (plugin filename → command key → args): the plugins this project actually ships, scanned from their js/plugins/*.js annotations, merged over a small built-in allowlist. Pass pluginName to narrow to one plugin. Read-only. Use scan_plugins for the richer per-project view (arg types/defaults, enabled state); an unlisted plugin command can s","write_action":false,"price_micros":0,"input_schema":null},{"name":"next_free_id","description":"Reserve the next unallocated switch / variable / common-event ID(s) instead of picking one by hand. Ids are handed out strictly above every id already declared or referenced, so two sessions editing the same project over time cannot silently claim the same switch — a collision that never crashes and only surfaces hours into a playtest as a door that is inexplicably already open. Pass `reuseGaps: t","write_action":false,"price_micros":0,"input_schema":null},{"name":"object_tiles","description":"Expand a top-left flat tile id + a width×height size into the grid of tile ids that object occupies on the sheet — feed the returned `tiles` straight into place_object. This handles the flat sheets' two-half-column layout, where the tile below id N is NOT N+16 (indices 0–127 are the left half of the sheet, 128–255 the right), which is otherwise painful to compute by hand. Get the top-left id from ","write_action":false,"price_micros":0,"input_schema":null},{"name":"scan_plugins","description":"Discover the plugin commands this project actually has, by parsing the @command/@arg annotations in js/plugins/*.js and the enabled/disabled state in js/plugins.js. Use it to find out what create_plugin_command can call and with which args — it reports every command's key, label, description and args (name/type/default), plus whether the plugin is enabled in the editor's Plugin Manager (a disabled","write_action":false,"price_micros":0,"input_schema":null},{"name":"search_actors","description":"Search actors by name or nickname","write_action":false,"price_micros":0,"input_schema":null},{"name":"search_enemies","description":"Search enemies by name (case-insensitive)","write_action":false,"price_micros":0,"input_schema":null},{"name":"search_items","description":"Search items by name or description","write_action":false,"price_micros":0,"input_schema":null},{"name":"search_map_events","description":"Search events on a map by name","write_action":false,"price_micros":0,"input_schema":null},{"name":"search_skills","description":"Search skills by name or description","write_action":false,"price_micros":0,"input_schema":null},{"name":"search_troops","description":"Search troops by name (case-insensitive)","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_project","description":"Point the server at a different RPG Maker MZ project directory for the rest of the session (overrides RPGMAKER_PROJECT_PATH until the server restarts). The directory must contain game.rmmzproject and data/System.json.","write_action":false,"price_micros":0,"input_schema":null},{"name":"validate_assets","description":"Audit asset-filename integrity across the whole project (read-only, warn-by-default): every image/audio name field — actor characterName/faceName/battlerName, enemy battlerName, tileset sheets, map bgm/bgs/parallax/battlebacks, event page graphics, event Play BGM/BGS/ME/SE / Show Picture / Show Text face / Change Actor Images, and system titles/battlebacks/default audio/vehicle graphics — is check","write_action":false,"price_micros":0,"input_schema":null},{"name":"validate_event","description":"Validate a single event's command lists against the known RPG Maker MZ command table. Read-only: reports parameter/structure warnings without changing anything.","write_action":false,"price_micros":0,"input_schema":null},{"name":"validate_project","description":"Validate the event command lists of every map in the project. Read-only: returns aggregated, map-tagged warnings for auditing before or after a batch of edits.","write_action":false,"price_micros":0,"input_schema":null},{"name":"validate_references","description":"Audit cross-file reference integrity across the whole project (read-only, warn-by-default): Transfer Player targets and starting position point at existing maps; starting party, actor classes, class/enemy skills, troop members, enemy drops, and skill/item effects (states, learned skills, common events, animations) all resolve; and the map tree has no dangling or cyclic parentId. Complements valida","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":92,"grade":"A","scanned_at":"2026-09-24T17:25:46.338Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-24T17:25:46.289Z","components":{"code":{"score":25,"max":25,"notes":["115 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":15,"max":15,"notes":["last push 1 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"rpgmaker-mz-mcp","version":"1.2.0","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":2,"publishedAt":"2026-07-29T11:50:57.657Z","repositoryUrl":"git+https://github.com/Redseb/rpgmaker-mz-mcp.git","weeklyDownloads":70}],"repo":{"found":true,"owner":"Redseb","repo":"rpgmaker-mz-mcp","archived":false,"pushedAt":"2026-09-23T16:07:38Z","stars":7,"forks":2,"openIssues":4,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/10607934?v=4","ownerCreatedAt":"2015-01-20T03:14:34Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/10607934?v=4&s=128","source":"github"},"presence":{"stars":7,"forks":2,"downloadsWeek":70,"license":"MIT","lastPushAt":"2026-09-23T16:07:38.000Z","score":33}}}},"grade_history":[],"reviews":[]}