# io.github.SerifeusStudio/rpgmaker-xp-mcp (npm · rpgmaker-xp-mcp)

Author RPG Maker XP games in natural language: read, write and render RGSS1 .rxdata.

- Trust score: 69/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-18

## Components

- npm · `rpgmaker-xp-mcp`: 69/100 (this document), [markdown](https://verifymcp.io/servers/serifeusstudio-rpgmaker-xp-mcp/rpgmaker-xp-mcp.md), [page](https://verifymcp.io/servers/serifeusstudio-rpgmaker-xp-mcp/rpgmaker-xp-mcp)

## Channel facts

- Registry: `npm`
- Package: `rpgmaker-xp-mcp`
- Version: `1.1.3`
- Transport: `stdio`

## Trust breakdown

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. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-18.

- **Supply Chain Security**: 98/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - 31 of 96 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 6 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 82/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 7331 tokens (~106/item across 69 items; 65 tools + 4 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 89/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 66% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

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

## Install

### Claude

```bash
claude mcp add serifeusstudio-rpgmaker-xp-mcp -- npx -y rpgmaker-xp-mcp
```

### Codex

```bash
codex mcp add serifeusstudio-rpgmaker-xp-mcp -- npx -y rpgmaker-xp-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "serifeusstudio-rpgmaker-xp-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "rpgmaker-xp-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add serifeusstudio-rpgmaker-xp-mcp --command npx --arg -y --arg rpgmaker-xp-mcp
```

### Hermes

```yaml
mcp_servers:
  serifeusstudio-rpgmaker-xp-mcp:
    command: "npx"
    args: ["-y", "rpgmaker-xp-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "serifeusstudio-rpgmaker-xp-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "rpgmaker-xp-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-17 (score 69, 0)

- [functional regression] Security disclosure: unverified → fail

### 2026-08-16 (score 69, 0)

- [functional regression] Security disclosure: fail → unverified

### 2026-08-12 (score 69)

First indexed and scored.

## MCP tools (65)

### `get_actors` (~23 tokens)

Get all actors from the RPG Maker XP project (parameter tables omitted)

### `get_actor` (~57 tokens)

Get a specific actor by ID, including its 6x100 parameters table (MaxHP, MaxSP, STR, DEX, AGI, INT per level)

Input parameters:

- `actorId` (number, required): The ID of the actor to retrieve

### `update_actor` (~103 tokens)

Update an actor's properties (XP fields: name, class_id, initial_level, final_level, exp_basis, exp_inflation, character_name, character_hue, battler_name, battler_hue, weapon_id, armor1_id..armor4_id, weapon_fix, armor1_fix..armor4_fix, parameters)

Input parameters:

- `actorId` (number, required): The ID of the actor to update
- `updates` (object, required): Object containing properties to update

### `create_actor` (~211 tokens)

Create a new actor with RMXP defaults (linear stat growth curves unless a parameters Table is provided)

Input parameters:

- `armor1_id` (number): Shield ID
- `armor2_id` (number): Helmet ID
- `armor3_id` (number): Body armor ID
- `armor4_id` (number): Accessory ID
- `battler_hue` (number)
- `battler_name` (string): Battler graphic filename (Graphics/Battlers)
- `character_hue` (number)
- `character_name` (string): Character graphic filename (Graphics/Characters)
- `class_id` (number)
- `exp_basis` (number): EXP curve basis (valid range 10-50, default 30)
- `exp_inflation` (number): EXP curve inflation (valid range 10-50, default 30)
- `final_level` (number)
- `initial_level` (number)
- `name` (string, required)
- `weapon_id` (number)

### `search_actors` (~28 tokens)

Search actors by name

Input parameters:

- `searchTerm` (string, required): The search term to find actors

### `get_items` (~15 tokens)

Get all items from the project

### `get_weapons` (~16 tokens)

Get all weapons from the project

### `get_armors` (~17 tokens)

Get all armors from the project

### `get_skills` (~16 tokens)

Get all skills from the project

### `get_skill` (~30 tokens)

Get a specific skill by ID

Input parameters:

- `skillId` (number, required): The ID of the skill to retrieve

### `create_skill` (~441 tokens)

Create a new skill with full control over RPG::Skill fields. XP has no damage formulas: damage = power scaled by stat influence rates (atk_f/str_f for physical, int_f for magical). Negative power heals.

Input parameters:

- `agi_f` (number): AGI influence rate 0-100
- `animation1_id` (number): User animation ID
- `animation2_id` (number): Target animation ID
- `atk_f` (number): ATK influence rate 0-200 (physical)
- `common_event_id` (number): Common event to call
- `description` (string): Skill description
- `dex_f` (number): DEX influence rate 0-100
- `element_set` (array): Element IDs (see System elements list)
- `eva_f` (number): Evasion influence rate 0-100
- `hit` (number): Hit rate percentage (0-100)
- `icon_name` (string): Icon filename (Graphics/Icons)
- `int_f` (number): INT influence rate 0-100 (magical)
- `mdef_f` (number): Target MDEF influence rate 0-100
- `minus_state_set` (array): State IDs to remove
- `name` (string, required): Skill name
- `occasion` (number): 0=always, 1=only battle, 2=only menu, 3=never
- `pdef_f` (number): Target PDEF influence rate 0-100
- `plus_state_set` (array): State IDs to add (see States)
- `power` (number): Base power (positive=damage, negative=healing)
- `scope` (number): Target scope (0=none, 1=one enemy, 2=all enemies, 3=one ally, 4=all allies, 5=one ally HP 0, 6=all allies HP 0, 7=user)
- `sp_cost` (number): SP cost
- `str_f` (number): STR influence rate 0-100
- `variance` (number): Damage variance percentage

### `create_damage_skill` (~226 tokens)

Create a damage-dealing skill (simplified). Set physical=true for ATK/PDEF based damage, otherwise INT/MDEF based (magic). Engine formula: damage = (power + ATK*atk_f/100 - PDEF*pdef_f/200 - MDEF*mdef_f/200) * (20 + STR*str_f/100 + DEX*dex_f/100 + AGI*agi_f/100 + INT*int_f/100) / 20. Reference: default-DB Fire is power 140, sp 75.

Input parameters:

- `description` (string): Skill description
- `elementId` (number): Element ID from the System elements list (0=none)
- `name` (string, required): Skill name
- `physical` (boolean): true=physical (ATK/PDEF), false=magical (INT/MDEF, default)
- `power` (number, required): Base damage power
- `scope` (number, required): Target scope (1=one enemy, 2=all enemies)
- `spCost` (number, required): SP cost

### `create_healing_skill` (~151 tokens)

Create a healing skill (simplified). In XP healing is negative power. Amount healed = power * (20 + INT*int_f/100) / 20 with int_f=50 (default-DB convention), so it scales with the caster's INT. Reference: default-DB Heal is power 150, sp 80.

Input parameters:

- `description` (string): Skill description
- `name` (string, required): Skill name
- `power` (number, required): Base heal power (positive number; actual healing scales up with caster INT)
- `scope` (number, required): Target scope (3=one ally, 4=all allies, 7=user)
- `spCost` (number, required): SP cost

### `create_state_skill` (~145 tokens)

Create a state-inflicting skill (poison, sleep, etc.). State IDs come from States.rxdata (XP defaults: 3=poison, 5=blind, 6=silence, 7=confuse, 8=sleep, 9=paralyze).

Input parameters:

- `description` (string): Skill description
- `hit` (number, required): Hit/success rate percentage (0-100)
- `name` (string, required): Skill name
- `scope` (number, required): Target scope (1=one enemy, 2=all enemies)
- `spCost` (number, required): SP cost
- `stateId` (number, required): State ID to inflict

### `update_skill` (~37 tokens)

Update a skill's properties

Input parameters:

- `skillId` (number, required): The skill ID to update
- `updates` (object, required): Properties to update

### `search_skills` (~26 tokens)

Search skills by name or description

Input parameters:

- `searchTerm` (string, required): Search term

### `update_item` (~71 tokens)

Update an item's properties (XP fields: name, icon_name, description, scope, occasion, price, consumable, recover_hp, recover_sp, parameter_type, parameter_points, element_set, plus_state_set, minus_state_set, ...)

Input parameters:

- `itemId` (number, required)
- `updates` (object, required)

### `search_items` (~28 tokens)

Search items, weapons and armors by name or description

Input parameters:

- `searchTerm` (string, required)

### `create_weapon` (~181 tokens)

Create a new weapon (appended to Weapons.rxdata). Defaults match the RMXP editor; override any field. Equippable in the weapon slot.

Input parameters:

- `agi_plus` (number)
- `animation1_id` (number)
- `animation2_id` (number)
- `atk` (number): Attack power
- `description` (string)
- `dex_plus` (number)
- `element_set` (array): Element ids this weapon carries
- `icon_name` (string): Icon filename (Graphics/Icons)
- `int_plus` (number)
- `mdef` (number)
- `minus_state_set` (array)
- `name` (string, required)
- `pdef` (number)
- `plus_state_set` (array)
- `price` (number)
- `str_plus` (number)

### `create_armor` (~201 tokens)

Create a new armor (appended to Armors.rxdata). kind: 0=shield, 1=helmet, 2=body, 3=accessory. Defaults match the RMXP editor; override any field.

Input parameters:

- `agi_plus` (number)
- `auto_state_id` (number)
- `description` (string)
- `dex_plus` (number)
- `eva` (number)
- `guard_element_set` (array)
- `guard_state_set` (array)
- `icon_name` (string): Icon filename (Graphics/Icons)
- `int_plus` (number)
- `kind` (number): 0=shield, 1=helmet, 2=body, 3=accessory
- `mdef` (number)
- `name` (string, required)
- `pdef` (number)
- `price` (number)
- `str_plus` (number)

### `get_map` (~62 tokens)

Get map data by ID (Data/MapXXX.rxdata). Tile data is summarized unless includeTiles is true.

Input parameters:

- `includeTiles` (boolean): Include the full tile data Table (large!)
- `mapId` (number, required): The ID of the map to retrieve

### `get_map_infos` (~21 tokens)

Get information about all maps (names, parent, order)

### `get_map_events` (~25 tokens)

Get all events from a specific map

Input parameters:

- `mapId` (number, required)

### `get_map_event` (~33 tokens)

Get a specific event from a map

Input parameters:

- `eventId` (number, required)
- `mapId` (number, required)

### `update_map_event` (~47 tokens)

Update a map event's properties (name, x, y, pages)

Input parameters:

- `eventId` (number, required)
- `mapId` (number, required)
- `updates` (object, required)

### `create_map_event` (~72 tokens)

Create a new event on a map. If pages are omitted, a default empty page is created.

Input parameters:

- `mapId` (number, required)
- `name` (string, required)
- `pages` (array): Optional RPG::Event::Page objects
- `x` (number, required)
- `y` (number, required)

### `search_map_events` (~33 tokens)

Search events on a map by name

Input parameters:

- `mapId` (number, required)
- `searchTerm` (string, required)

### `add_event_command` (~219 tokens)

Add a single command to an event page (for Show Text prefer add_show_text). Common XP codes: 101=Show Text first line (401=continuation lines), 102=Show Choices [[texts...],cancelType] (each 402 branch repeats its choice text and must stay in sync), 111=Conditional Branch, 121=Control Switches, 122=Control Variables, 123=Control Self Switch [ch,0=on/1=off], 125=Change Gold, 126=Change Items, 201=Transfer Player, 209=Set Move Route (509=continuation), 223=Change Screen Color Tone, 355=Script. indent must increase by 1 inside branch blocks; the trailing code-0 terminator is preserved automatically.

Input parameters:

- `command` (object, required)
- `eventId` (number, required)
- `mapId` (number, required)
- `pageIndex` (number, required)
- `position` (number): Insert position in the command list (default: end)

### `add_show_text` (~125 tokens)

Add a Show Text message to an event page. Handles XP's 101/401 structure automatically: first line of each box is code 101, continuation lines are 401, and text longer than 4 lines is split into multiple message boxes. Use \n for line breaks.

Input parameters:

- `eventId` (number, required)
- `mapId` (number, required)
- `pageIndex` (number, required)
- `position` (number): Insert position in the command list (default: end)
- `text` (string, required): Message text; newlines split lines (4 per box)

### `create_transfer_event` (~301 tokens)

Wire two maps together: create a Transfer Player (command 201) event at (x,y) on a map that warps the player to (targetX,targetY) on targetMapId. trigger 0 = action button (a door — give it a graphic); trigger 1 = player touch (an edge teleport — leave it invisible). Validates both endpoints exist and are in-bounds before writing. Use validate_connectivity afterwards to check the whole world graph.

Input parameters:

- `direction` (number): Facing after transfer: 0 retain, 2 down, 4 left, 6 right, 8 up (default 0)
- `fade` (boolean): Fade through black during transfer (default true)
- `graphic` (object): Optional event appearance (for a visible door). Omit for an invisible touch teleport.
- `mapId` (number, required): Map the event is placed on
- `name` (string): Event name (default transfer_to_<targetMapId>)
- `targetMapId` (number, required): Destination map id
- `targetX` (number, required): Destination x (tile)
- `targetY` (number, required): Destination y (tile)
- `trigger` (number): 0 action button (door), 1 player touch (edge teleport, default), 2 event touch
- `x` (number, required): Event x (tile) on this map
- `y` (number, required): Event y (tile) on this map

### `validate_connectivity` (~122 tokens)

Build and validate the world transfer graph. Scans every map's events for Transfer Player (201) commands, checks each targets a real map at in-bounds coords, computes reachability from System.start_map_id, and flags orphan maps (no inbound transfer) and unreachable maps. Variable-designated transfers are reported as dynamic (runtime destination, unverifiable). Returns nodes, edges, errors, warnings, and a summary; set diagram=true for a Mermaid flowchart.

Input parameters:

- `diagram` (boolean): Also return a Mermaid flowchart of the world graph (default false)

### `get_map_design_guide` (~74 tokens)

Return the level/map design guide (MAP-DESIGN.md): layer roles (z0 terrain / z1 ground clutter / z2 overhead), tile priority & passability, the multi-tile-object no-overlap rule, composition principles, and the authoring workflow. Load this before authoring or editing maps.

### `create_map` (~298 tokens)

Create a new map. SIZE IS THE FIRST DESIGN DECISION: a map is N screens of 20x15 tiles, so pass a `purpose` (interior/room/town/dungeon/overworld/region) to get a sensible default size, or set width/height explicitly. Returns the new map id and a size_advisory (screens, target focal-point count, scatter density, oversize warnings) plus the design guide. Writes the next-free MapXXX.rxdata (blank Table[w,h,3]) + MapInfos entry. Paint with apply_autotile / scatter_tiles / set_map_tiles, preview with render_map.

Input parameters:

- `height` (number): Height in tiles. Omit to use the purpose default. Clamped to 15..500.
- `name` (string, required): Display name in the map tree
- `parentId` (number): Parent map id in the tree (default 0 = root)
- `purpose` (string): What the map is for. Picks a default size if width/height are omitted, and tunes the size advisory. interior=20x15 one screen; town~40x35; dungeon~45x40; overworld~100x90 (segment).
- `tilesetId` (number): Tileset id (default 1)
- `width` (number): Width in tiles. Omit to use the purpose default. Clamped to 20..500.

### `get_map_size_advisory` (~116 tokens)

Size advisory for an EXISTING map: screens (ceil(w/20)*ceil(h/15)), target focal-point and path-junction counts, recommended scatter density, approx clutter tile budget, and oversize/purpose-mismatch warnings. Use this first when editing a map so size and tile budget guide the design. Optionally pass a purpose to check the size against its sweet spot.

Input parameters:

- `mapId` (number, required)
- `purpose` (string): Optional: check the map size against this purpose's sweet spot.

### `get_map_tiles` (~123 tokens)

Read a map's tile ids as a 2D grid (rows top-to-bottom). Returns one layer if `layer` is given, else all three. Tile id 0 = empty, 48..383 = autotiles, >=384 = regular tiles. Use `region` to crop and avoid large payloads.

Input parameters:

- `layer` (number): Layer 0=ground, 1=detail, 2=overhead (omit for all)
- `mapId` (number, required)
- `region` (object): Crop in tiles (default whole map)

### `set_map_tiles` (~126 tokens)

Stamp a 2D block of tile ids into a layer with its top-left at (x, y). `grid` is rows of ids (0 clears a cell). Cells outside the map are skipped. Preview with render_map.

Input parameters:

- `grid` (array, required): 2D array of tile ids (rows)
- `layer` (number, required): 0=ground, 1=detail, 2=overhead
- `mapId` (number, required)
- `x` (number, required): Left tile of the block
- `y` (number, required): Top tile of the block

### `fill_region` (~119 tokens)

Fill a rectangle of a layer with one tile id (or the whole layer if `rect` is omitted). Tile id 0 clears. For autotiles this places the base variant (P1) — smart edges come with apply_autotile.

Input parameters:

- `layer` (number, required): 0=ground, 1=detail, 2=overhead
- `mapId` (number, required)
- `rect` (object): Rectangle in tiles (default whole layer)
- `tileId` (number, required): Tile id to fill with (0 = clear)

### `apply_autotile` (~355 tokens)

Paint an autotile (slot 0..6 = tileset autotile_names index) and compute the correct edge variant per cell from 8-neighbour connectivity (seamless coastlines/paths/cliffs). Supply ONE of: `blob` (organic roundish shape — USE for ponds/lakes/forest patches); `path` (autotile-safe road/trail/river through waypoints, width >=2); `cells` (arbitrary [x,y] list); or `region` (rect — only for rectangular floors). All shapes are auto-sanitized to be autotile-safe (4-connected, no diagonal pinches or 1-cell holes) so they never render broken/pinched. The border ring of existing same-autotile cells is recomputed so it blends. Preview with render_map.

Input parameters:

- `autotileSlot` (number, required): Autotile slot 0..6 (index into the tileset autotile_names)
- `blob` (object): Organic blob: ellipse (rx,ry) around (cx,cy) with wobbly edges. Best for ponds/lakes/forest patches.
- `cells` (array): Explicit [x,y] cells (custom shapes; auto-sanitized)
- `edgeMode` (string): Map-border connectivity (default same)
- `layer` (number, required): 0=ground, 1=detail, 2=overhead
- `mapId` (number, required)
- `path` (object): Autotile-safe road/trail/river through waypoints (orthogonal, never diagonal). width >= 2 recommended.
- `region` (object): Rectangle (only for rectangular things; use blob/cells for nature)

### `scatter_tiles` (~186 tokens)

Scatter clutter tile ids over a region with natural random distribution at a target density (fraction of cells), skipping occupied cells. Optional focal point with falloff for a density gradient (denser near a landmark). Use for flowers/bushes/rocks/tall grass instead of hand-placing lone tiles — fixes sparse/corner-clustered decoration. Deterministic given seed.

Input parameters:

- `avoidOccupied` (boolean): Skip non-empty cells (default true)
- `density` (number): Fraction of cells to fill, 0..1 (default 0.12)
- `focal` (object): Density gradient toward a point
- `layer` (number, required): Usually 1 (ground clutter)
- `mapId` (number, required)
- `region` (object, required)
- `seed` (number)
- `tileIds` (array, required): Tile ids to scatter (picked at random per cell)

### `get_database` (~68 tokens)

List all entries of a database file. Kinds: classes, states, enemies, troops, common_events, tilesets, animations (also actors/skills/items/weapons/armors). Tables and command lists are summarized; use get_database_entry for full data.

Input parameters:

- `kind` (string, required)

### `get_database_entry` (~65 tokens)

Get one full database entry by ID, including Tables (tileset passages/priorities/terrain_tags, enemy element_ranks, class element_ranks) and event command lists (common events, troop pages)

Input parameters:

- `id` (number, required)
- `kind` (string, required)

### `update_database_entry` (~130 tokens)

Update any database entry's properties (e.g. a class's weapon_set, a state's rates, an enemy's stats, tileset passability Tables). Tables must be written as { "_class": "Table", dim, xsize, ysize, zsize, data: [...] }. Tileset passages: value 0=passable, 1/2/4/8 = down/left/right/up blocked, 15=impassable, +64 bush, +128 counter.

Input parameters:

- `id` (number, required)
- `kind` (string, required)
- `updates` (object, required)

### `get_scripts` (~25 tokens)

List all RGSS scripts in Scripts.rxdata (index, name, source length)

### `get_script` (~32 tokens)

Get an RGSS script's Ruby source code by index

Input parameters:

- `index` (number, required): Script index from get_scripts

### `update_script` (~53 tokens)

Replace an RGSS script's source code and/or name

Input parameters:

- `code` (string): New Ruby source code
- `index` (number, required): Script index from get_scripts
- `name` (string): New script name

### `create_script` (~67 tokens)

Create a new RGSS script. By default it is inserted just above "Main" (the conventional slot for custom scripts).

Input parameters:

- `code` (string, required): Ruby source code
- `name` (string, required): Script name
- `position` (number): Insert position (default: just above Main)

### `search_scripts` (~41 tokens)

Search all RGSS script sources with a regex pattern; returns matching lines with script name and line number

Input parameters:

- `pattern` (string, required): Regular expression to search for

### `get_system` (~32 tokens)

Get system data (System.rxdata: party, elements, switches, variables, vocabulary, start position, audio settings)

### `get_variables` (~19 tokens)

Get all game variable names (index = variable ID)

### `set_variable_name` (~29 tokens)

Set a variable name

Input parameters:

- `name` (string, required)
- `variableId` (number, required)

### `get_switches` (~20 tokens)

Get all game switch names (index = switch ID)

### `set_switch_name` (~29 tokens)

Set a switch name

Input parameters:

- `name` (string, required)
- `switchId` (number, required)

### `get_game_title` (~18 tokens)

Get the game title (from Game.ini)

### `update_game_title` (~25 tokens)

Update the game title (in Game.ini)

Input parameters:

- `title` (string, required)

### `update_starting_position` (~47 tokens)

Update the party starting position (map ID and coordinates in System.rxdata)

Input parameters:

- `mapId` (number, required)
- `x` (number, required)
- `y` (number, required)

### `validate_assets` (~128 tokens)

Scan all data files for referenced graphic/audio filenames (tilesets, autotiles, panoramas, fogs, battlebacks, character/battler/icon graphics, animations, windowskin/title/gameover/transition, BGM/BGS/ME, and map event sprites) and report any with no matching file on disk. Checks the project Graphics/ and Audio/ first, then the RTP (RPGMAKER_RTP_PATH). Catches broken references that are otherwise silent until runtime.

Input parameters:

- `includeMaps` (boolean): Also scan every map's BGM/BGS and event sprites (default true)

### `classify_asset` (~150 tokens)

Inspect a PNG before import and report whether it is a native RMXP asset. Goes beyond canvas dimensions: fingerprints the filename ($/! object sprites, MV/MZ A1-A5 autotile sheets, 48px-divisible MV dimensions) AND detects the true CONTENT tile size via edge-periodicity (16/24/32/48/64px). Catches assets that look fine by size but render 1.5x/2x too large in RMXP's 32px grid, and assets that are not tilesets at all. Returns tier, recommended conversion op, target category, and flags. No writes.

Input parameters:

- `filePath` (string, required): Absolute path to the PNG to classify

### `verify_tileset` (~172 tokens)

Render an asset with two overlaid grids — the RMXP 32px grid (red) and the detected content grid (cyan) — and write a preview PNG for multimodal review. If a tile motif fills a 2x2 block of red cells the art is 64px (too big); if red and cyan coincide it is native 32px. Returns the preview path, detected tile size, and an alignment verdict. Read the returned preview_png to confirm visually before registering.

Input parameters:

- `filePath` (string, required): Absolute path to the tileset PNG
- `outDir` (string): Output directory for the preview PNG (default %TEMP%/rmxp-verify)
- `scale` (number): Integer upscale for legibility (1-4; default 2 for <=256px wide)

### `register_tileset` (~164 tokens)

Create a Tilesets.rxdata entry for a graphic already in Graphics/Tilesets, sizing the passability/priority/terrain Tables to the image (384 + height/4). GUARDED: refuses object sprites, MV A-series sheets, non-256px-wide, or non-32px-content assets (pass force:true to override). This is the gate that keeps mis-classified art out of the database.

Input parameters:

- `autotileNames` (array): Up to 7 autotile graphic names (optional)
- `force` (boolean): Override the native-asset guard (default false)
- `graphicName` (string, required): PNG base name in Graphics/Tilesets (with or without .png)
- `name` (string): Database display name (default = graphicName)

### `render_tileset_atlas` (~138 tokens)

Render a labeled atlas of a tileset to a PNG: the tileset graphic scaled with a grid, each regular tile's id burned in, passability indicators, and the 7 autotile slots. This is a quick numeric reference, not semantic proof; use create_tileset_identification_harness before assigning map-design roles.

Input parameters:

- `outPath` (string): Output PNG path (default Data/.mcp-preview/tilesetNNN-atlas.png)
- `scale` (number): Integer upscale for legibility (default 2)
- `tilesetId` (number, required): Tileset id (a map's tileset_id)

### `create_tileset_identification_harness` (~143 tokens)

Create a review bundle for one tileset that separates engine facts from semantic claims. Produces the exact source sheet, isolated transparent tile images, source-row strips, manifest.json (priority, passage flags, alpha bounds), catalog templates, and an interactive index.html for identifying single tiles and rectangular multi-tile objects. Use this before assigning map-design roles to an uncataloged tileset.

Input parameters:

- `outDir` (string): Output directory (default Data/.mcp-tilecatalog/<tileset-id>/)
- `scale` (number): Integer review-image scale (default 4)
- `tilesetId` (number, required): Tileset id to inspect

### `get_tileset_catalog` (~58 tokens)

Read the structured semantic catalog for a tileset together with its generated engine-fact manifest and validation summary. Absence from the catalog means unreviewed, not safe to infer.

Input parameters:

- `tilesetId` (number, required): Tileset id

### `save_tileset_catalog` (~142 tokens)

Validate and save reviewed semantic findings for a tileset. Accepts incremental tile/object/autotile arrays or the complete catalog JSON exported by the review page. Generated engine facts cannot be overwritten by catalog claims.

Input parameters:

- `autotiles` (array): Reviewed autotile-slot semantics
- `catalog` (object): Complete catalog JSON exported by the review page; replaces semantic maps while preserving trusted tileset identity
- `entries` (array): Reviewed regular-tile semantic entries
- `objects` (array): Reviewed rectangular multi-tile object definitions
- `replace` (boolean): Replace instead of merge (default false)
- `tilesetId` (number, required): Tileset id

### `validate_tileset_catalog` (~86 tokens)

Validate a tileset catalog against its engine manifest. Reports invalid ids, malformed object grids, contradictory layer/priority choices, transparent z0 placement, and unreviewed tiles. strict=true requires every regular tile to have a reviewed entry.

Input parameters:

- `strict` (boolean): Require every regular tile to be reviewed (default false)
- `tilesetId` (number, required): Tileset id

### `render_map` (~323 tokens)

Render a map's tile layers to a flat top-down PNG preview (outside the editor) and return the file path. Composites all 3 tile layers using the tileset graphic and autotiles. Use this to SEE a map you built/edited and self-check it. Layout preview only: no priority/overhead draw-order, fog/panorama/weather, autotile animation (frame 0), or event sprites. Reads project Graphics/ then falls back to the RTP (override base with RPGMAKER_RTP_PATH). Writes to Data/.mcp-preview/ by default; Read the returned path to view it.

Input parameters:

- `drawEvents` (boolean): Draw events (page-0 sprite/tile, else a marker) and return an event legend (default false)
- `drawGrid` (boolean): Overlay a 32px tile grid (default false)
- `layers` (array): Which z-layers (0=ground,1=detail,2=overhead) to draw, in order. Default [0,1,2]
- `mapId` (number, required): Map ID to render
- `outPath` (string): Output PNG path (default Data/.mcp-preview/map<NNN>.png)
- `passability` (boolean): Tint cells by passability: red=blocked, orange=partial. Approximate, uses the topmost tile (default false)
- `region` (object): Crop in tiles (default: whole map)
- `scale` (number): Integer nearest-neighbour upscale for legibility (default 1)

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/serifeusstudio-rpgmaker-xp-mcp/rpgmaker-xp-mcp#diagnostics

## Score history

- 2026-08-18: 69
- 2026-08-17: 69
- 2026-08-16: 69
- 2026-08-15: 69
- 2026-08-14: 69
- 2026-08-13: 69
- 2026-08-12: 69

## Links

- npm package: https://www.npmjs.com/package/rpgmaker-xp-mcp
- Socket report: https://socket.dev/npm/package/rpgmaker-xp-mcp
- Repository: https://github.com/SerifeusStudio/rpgmaker-xp-mcp
- Changelog RSS feed: https://verifymcp.io/servers/serifeusstudio-rpgmaker-xp-mcp/rpgmaker-xp-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/serifeusstudio-rpgmaker-xp-mcp/rpgmaker-xp-mcp.json
- HTML version of this page: https://verifymcp.io/servers/serifeusstudio-rpgmaker-xp-mcp/rpgmaker-xp-mcp
