RPG-MAKER-MV-MCP
An MCP server that lets an AI agent read, build, edit, and analyze a real RPG Maker MV project on disk (database, maps, events, system settings) entirely through validated tool calls.
Query the database (
query_database) — list, fetch by ID, or name-search actors, classes, skills, items, weapons, armors, enemies, states, troops, tilesets, common events, animations.Create / update / delete database entries — raw entries or presets (
damage_skill,healing_skill,buff_skill,state_skill,boss_enemy,encounter_troop); partial updates, append event commands to common events, add enemies to troops, or null-out entries (with reference-breakage warnings).Inspect maps offline (
query_map) — map tree, full map data, event lists/single events, lint (invalid tiles, broken transfers, missing terminators), and an ASCII render for picking coordinates.Generate maps (
generate_map) — procedural (RTP template cloning or Perlin/BSP/cave generation), themed, blank, template, batch, or duplicate; reproducible via seed, auto-wires encounters and enterable house interiors.Edit maps (
edit_map) — fill tile layers, set display names, reorganize the map tree, connect two maps with two-way transfers, set random encounters.Manage events (
manage_map_event) — create presets (npc, chest, teleport, door, shop, inn, boss, puzzle_switch), update, convert an NPC in place into merchant/inn/sign, delete, append commands, or bulk-populate.Manage system settings (
manage_system) — read System.json sections, set the title, name switches/variables, set the new-game starting position.Get project context (
get_project_context) — digest of IDs/names/sprites, asset index, per-tileset usable tile IDs, and the bundled template catalog; intended as the first call so nothing is invented.Switch projects at runtime (
set_project_path).Analyze images (
analyze_image) — optional external Vision API on project images, or offline tileset grid measurement and quadrant color checks.Analyze the whole project (
analyze_project) — read-only intelligence with views for overview, index, validate, transfer graph, usage, explain (why an event never fires), event AST, plugins, map critique, refactor hints, and semantic search.
Enables AI-driven analysis of project images (tilesets, screenshots, etc.) using NVIDIA's vision models via the analyze_screenshot tool.
Enables AI-driven analysis of project images (tilesets, screenshots, etc.) using Ollama's vision models via the analyze_screenshot tool.
Enables AI-driven analysis of project images (tilesets, screenshots, etc.) using OpenAI's vision models via the analyze_screenshot tool.
🎮 RPG Maker MV Ultimate
An AI copilot that builds, understands and watches your RPG Maker MV game
Quick start · What it does · Map generation · Live bridge · Intelligence · Tools
A Model Context Protocol server that lets an AI agent work on a real RPG Maker MV project on disk — database, maps, events, plugins, system — through 17 consolidated tools validated against the actual engine, so what comes out is coherent and playable.
It does three things that are usually missing:
🏗️ Builds | Generates maps that look hand-made, wires events from presets, and edits every database with real IDs instead of invented ones. |
🧠 Understands | Reads the whole project and answers why the door never opens, which map nobody can reach, which skill breaks the game. |
👀 Watches | Runs the game and reports back: exceptions, player position, screenshots — and reloads a map you just edited without losing the save. |
⚡ Quick start
1 — Add it to your MCP client. No clone needed; the package ships an executable.
{
"mcpServers": {
"rpgmaker-mv": {
"command": "npx",
"args": ["-y", "rpgmaker-mv-mcp"],
"env": {
"RPGMAKER_PROJECT_PATH": "C:/path/to/your/RPGMakerMV/project"
}
}
}
}# Claude Code, user scope
claude mcp add rpgmaker --scope user \
--env RPGMAKER_PROJECT_PATH="C:/path/to/project" \
-- npx -y rpgmaker-mv-mcp# From source
git clone https://github.com/DiegoLopez0208/RpgMakerMVUltimate-MCP
cd RpgMakerMVUltimate-MCP
npm install && npm run build
RPGMAKER_PROJECT_PATH=/path/to/your/project npm startMCP clients load tool definitions once at startup, so restart the client after adding or upgrading the server.
2 — Point it at a project. RPGMAKER_PROJECT_PATH is the folder containing data/, js/ and index.html. The server starts without it; call set_project_path at runtime instead if you prefer.
3 — Let the agent look around first.
get_project_context { detail: "full" } → what exists, with real IDs
analyze_project { view: "overview" } → health, counts, unreachable mapsWorks with Claude Desktop, Claude Code, opencode, and any MCP-compatible client.
Related MCP server: RPG Maker MZ MCP Server
🧭 What it does
flowchart LR
A["🤖 Agent"] -->|"generate_map · manage_map_event"| B["📁 Project on disk"]
B -->|"validate · balance · metrics"| A
B -->|"playtest"| C["🎮 Running game"]
C -->|"exceptions · position · screenshots"| A
A -->|"reload_map"| CThe bottom half of that loop is what the bridge adds. Before it, the agent wrote files and hoped.
🗺️ Map generation
Two paths, both behind generate_map. Pick by whether your project uses RTP art.
|
| |
How | Clones a hand-authored map from the 106 bundled RTP templates, closest size first | Lays out a mission graph, then paints it through a tileset profile |
Looks like | Real multi-tile buildings, walls, furniture | Rooms and corridors shaped by what the space is for |
Tilesets | RTP, or close to it | Any — DLC, itch.io, custom |
Guarantees | Same | Same |
The knowledge-driven path
{ "mode": "procedural", "theme": "town", "name": "Riverbend", "width": 40, "height": 30 }Themes with a matching template — town, village, dungeon, interior, castle, world and more — clone a real map instead of painting tile noise. Themes without one (beach, swamp, desert…) fall back to Perlin terrain, BSP dungeons and cellular caves. Combat themes auto-wire random encounters from your existing troops; town and village auto-create enterable house interiors with two-way warps.
Themes ·
foresttownvillagecastledungeoncavebeachdesertswampruinsinteriorsnowharborvolcanosewerfortressmagic_forestmagic_interiorspace_interiorspace_exteriorworld
Other modes: blank (empty canvas), themed (simple layout), template (one specific bundled map), batch (many at once), duplicate (copy an existing map).
The tileset-independent path
The bundled templates are raw MV map JSON, so their tile IDs only mean anything on RTP sheets. Change the tileset and the map turns to noise. semantic keeps the layout abstract until the last moment:
manage_system { action: "mine_templates" } # learn from THIS project
generate_map { mode: "semantic", tilesetId: 5, rooms: 6, seed: 42 }Mining reads every map you already made and derives semantic layouts (ground / wall / water / prop / door, multi-tile props kept whole), a tileset profile naming the concrete tile your project uses for each role, and token adjacency counts. Nothing in the project is modified — everything lands in
.mcp-cache/.Generating builds the mission first — entrance → key → locked door → treasure → boss → exit, plus side rooms — as a graph whose edges are the only ways through, then paints it. Because the lock is an edge and the key sits on the entrance side of it, the map is solvable by construction. Autotile shapes are recomputed at the end from the finished neighbourhood, never guessed cell by cell.
The result includes
markersnaming the cell of every mission role, which is where to put events withmanage_map_event.Pass a mined
templateId(e.g."mined-3") to re-materialise one of your own maps onto a different tileset.
🔌 The live bridge
playtest on its own is fire-and-forget: the game opens and nothing comes back. The bridge closes the loop.
manage_system { action: "install_bridge_plugin" } # once per project
manage_system { action: "bridge_start" } # opens ws://127.0.0.1:32123
manage_system { action: "playtest" } # the game connects on its own
manage_system { action: "bridge_telemetry", types: ["exception", "log"] }sequenceDiagram
participant A as 🤖 Agent
participant S as 🖥️ MCP server
participant G as 🎮 Game (nwjs)
A->>S: edit_map
S->>S: atomic write to Map002.json
A->>S: bridge_command reload_map
S->>G: reload_map
G->>G: reserveTransfer + _needsMapReload
G-->>S: reload_complete
A->>S: take_screenshot
S->>G: capture_screenshot
G-->>S: PNG in base64
S-->>A: path for analyze_image
A->>S: record_video start / stop
S->>G: MediaRecorder on the game canvas
G-->>S: WebM in base64
S-->>A: path for video evidence📡 Telemetry — exceptions with stack traces,
console.error/warn, scene changes, player position, which event command is executing (so a hung event can be pinpointed), FPS and heap. Frames are consumed as you read them unless you passpeek.♻️ Hot reload —
reload_mapre-reads the currentMapXXX.jsonand rebuilds the scene without losing party state: it reserves a transfer to the player's own position with_needsMapReload, the engine's own reload seam, rather than rebuildingSpriteset_Mapby hand.reload_databasere-reads one data file;System.jsonandTilesets.jsonneed a fresh playtest and are refused with an explanation.📸 Screenshots —
take_screenshot { name: "collision-proof" }captures the live playtest through the MCP plugin, saves a timestamped PNG under.mcp-cache/screenshots/, and returns its path for inspection or QA evidence. No shell screenshot command is involved.manage_system { action: "bridge_screenshot" }remains as a compatibility alias.🎥 Video evidence —
record_video { action: "start", name: "npc-dialogue" }begins a silent WebM capture of the live game canvas;record_video { action: "stop" }saves it under.mcp-cache/recordings/and returns its path. Agents can stage repeatable scenes with the allowlistedinteractcommand and fixed-buttonpress_buttoninput—there is still no arbitrary script orevalcommand.
🔒 Security
The plugin returns before anything else runs unless the game is under NW.js and was launched with a
testargument. A deployed build a player double-clicks never reaches the socket code, or evenrequire('fs').It checks every argument rather than only
argv[0]the wayUtils.isOptionValiddoes, becauseplaytestpasses the project path first. So a deployed build deliberately launched with a literaltestargument would get past the guard — and then find no handshake file, and never connect.The server binds
127.0.0.1only, refuses any upgrade carrying a browserOrigin(cross-site WebSocket hijacking), and requires the session token from.mcp-bridge.json— compared in constant time — within 5 seconds or the connection is dropped.The command surface is a fixed allowlist with no
evalprimitive.
🔍 Project intelligence
analyze_project is read-only and fully offline. It models the whole project once, so an agent can reason about a game it did not build.
View | Answers |
| Call this first. Counts, health summary, maps unreachable from the start |
| Every consistency problem at once — see below |
| Why does this never happen? e.g. "Switch 12 is gated in 3 places but never set ON" |
| Every event, common event and troop that touches a switch/variable/item, with read-write roles |
| The map transfer network and what is reachable |
| One event's logic as a readable tree |
| What plugins the project uses, their parameters and commands |
| A designer's opinion on one map: dead space, clutter, event spread, monotony |
| The same map measured — see below |
| Database entries that are out of line with their peers — see below |
| Command sequences copy-pasted across events, worth extracting into a Common Event |
| Find things by meaning across names, dialogue and descriptions |
| The structured digest the other views are built on |
Broken transfers, missing map files, dangling common-event/item/troop references, duplicate IDs, named-but-unused switches and variables, a bad starting position, unreachable maps — and actor names written into dialogue as \N[id] that do not resolve.
That last one is worth its own sentence: the engine resolves \N[id] at draw time, not from any structural parameter, so a bad id passes every other check and the editor shows nothing wrong. The line just renders in-game with a hole where the name should be, and a player finds it before you do.
Reachability — flood fill from the real entry point. Walkable tiles the player can never get to, and events with no reachable tile beside them, are softlocks rather than style notes.
Dead space — the unreachable share of the rectangle, against a band for
expected(interior/dungeon/exterior).Shape — the walkable area thinned to a one-cell skeleton and read as a graph: endpoints, junctions, cycles, critical path, linearity. Linearity near 1 is a corridor with no choice to make.
Variety — Shannon entropy over 5×5 tile windows: the monotonous-floor problem, measured.
Tension — for maps with random encounters, how many steps the player is from a shop, inn or save point.
A skill dealing 400 damage is fine in a game where everything does, and broken in one where nothing else breaks 60. So each entry is scored on a power metric and compared against the others in its category: damage per MP for skills, gold per point of ATK+MAT for weapons, gold per DEF+MDF for armors, HP per EXP for enemies.
The comparison is leave-one-out — an entry is judged against statistics it had no hand in creating. Included in its own numbers, a badly broken entry drags the mean toward itself until it stops looking unusual at all.
Damage formulas are parsed, never executed (tokenise → shunting-yard → evaluate). One that cannot be read statically is listed under unreadableFormulas rather than scored as zero damage, which would pull every average down and hide the very outliers you were looking for.
Narrow with category, loosen or tighten with thresholdSd (default 2).
Offline map inspection
query_map { view: "ascii", mapId }— render a map as a character grid with event markers. The cheapest way to see a layout and pick coordinates.query_map { view: "validate", mapId }— lint one map for invalid tile IDs, broken transfers and missing event terminators.
🧰 The 18 tools
Tool | Purpose |
| Read-only MV dialogue, choices, conditions, switches, variables, transfers, common-event, flow, and plugin-command builders |
| Validated insertion into map/common/troop event lists, with before/after previews and safe nested boundaries |
| List / get by ID / search any database (actors, classes, skills, items, weapons, armors, enemies, states, troops, tilesets, common events, animations) |
| Create entries, with presets: |
| Partial updates (incl. troops & animations); append commands to common events; add enemies to troops |
| Delete entries with reference-breakage warnings |
| Map tree, full map data, events, single event, lint, offline ASCII render |
| Knowledge-driven, semantic, procedural, blank, themed, template, batch or duplicate |
| Fill tile layers, set display names, organize the map tree, connect two maps, set encounters |
| Create (presets: npc, chest, teleport, door, shop, inn, boss, puzzle_switch), update, convert an NPC into a merchant/inn/sign in place, delete, add commands, bulk-populate |
| Title, switch/variable names, starting position, author a plugin, scaffold an editor-openable project, playtest, open/repair in editor, mine templates, and the live bridge |
| Capture and name a live playtest PNG through the authenticated MCP bridge, or with |
| Play a script of steps headless (load, start an event, read its text, choose, walk, battle, screenshot) and report what happened |
| Start or stop a named live playtest WebM recording through the authenticated MCP bridge |
| The read-only intelligence layer above |
| Project digest, asset index, per-tileset tile IDs, bundled-template catalog |
| Switch projects at runtime |
| Optional Vision-AI image analysis, plus offline tileset grid measurement and quadrant colors |
The 101 fine-grained v4 tool names still work as call aliases. Set RPGMV_LEGACY_TOOLS=1 to advertise them too.
🛡️ Write safety
For composed event logic, use build_event_commands followed by
insert_event_commands with dryRun:true. The preview includes the exact old and
proposed command lists. See Event command authoring for
the supported kinds, nesting rules, MV-specific differences, and verification.
Atomic. Every write goes to a temp file and is renamed over the target, so an interrupted call can never leave half-written JSON.
Backed up. Rotated timestamped copies under
.mcp-backups/(last N,RPGMV_BACKUP_KEEP, default 10).Previewable. Pass
dryRun: trueto any mutating tool to see exactly what it would write, without touching disk.
⚠️ Close the RPG Maker editor while an agent is working. The editor holds the project in memory and will overwrite changes when it saves.
⚙️ Configuration
Variable | Required | Description |
| recommended | The project folder (the one with |
| for playtest | Engine install root, for |
| optional | Loopback port for the live bridge (default |
| optional | Backups kept per file (default |
| optional |
|
| optional | Chromium executable for headless renders and |
| optional | Advertise only some tool groups, e.g. |
| to enable vision | Base URL of an OpenAI-compatible vision endpoint. Unset = vision disabled |
| optional | Bearer token; only sent when set |
| optional | Model name (default |
| optional | Endpoint path (default |
analyze_image { mode: "ai" } sends a project image (tileset, sprite, screenshot, battler) to any OpenAI-compatible endpoint. Nothing is sent anywhere unless you configure it; the grid and colors modes and every other tool work fully offline.
# OpenAI
VISION_API_URL=https://api.openai.com VISION_API_KEY=sk-... VISION_MODEL=gpt-4o npm start
# Ollama (local, no key)
VISION_API_URL=http://localhost:11434 VISION_MODEL=llava npm startWorks with OpenAI, Ollama, LocalAI, NVIDIA NIM, vLLM, LiteLLM, or any OpenAI-compatible proxy.
🎓 Agent Skill
A portable Agent Skill teaches any model the crash-free workflow — build maps with generate_map, add content with manage_map_event presets, never hand-paint tiles or guess IDs. It lives at skill/rpgmaker-mv-mcp/SKILL.md.
# Claude Code / Claude.ai
npx degit DiegoLopez0208/RpgMakerMVUltimate-MCP/skill/rpgmaker-mv-mcp ~/.claude/skills/rpgmaker-mv-mcp
# opencode
npx degit DiegoLopez0208/RpgMakerMVUltimate-MCP/skill/rpgmaker-mv-mcp ~/.opencode/skills/rpgmaker-mv-mcpAlso listed in awesome-claude-skills.
📚 Knowledge base
File | Content |
| Tile ID ranges, autotile formula, sheet descriptions, layer meanings |
| Flag bits, common flags, passage check logic |
| ~140 event command codes with parameter schemas |
| Scope, occasion, hitType, damageType, restriction, and the rest |
| Trait codes 11-64, effect codes 11-45 |
| Full schemas for every MV data type |
|
|
| Index of the 106 bundled reference maps |
| Mined multi-tile object stamps (trees, props) per tileset |
| The 106 RTP reference map JSONs used for template cloning |
🚧 Known limitations & roadmap
Decoration semantics are best-effort in the RTP-template path; rare multi-tile objects may land as single tiles. The mined path keeps multi-tile props whole.
Town and dungeon layouts keep improving — planned: a central plaza or well as a landmark, houses in rows facing roads, fences and yards, richer road networks, more room variety.
mode: "semantic"currently generates dungeon-shaped missions. Town and open-world mission grammars are next, as is using the mined adjacency counts to decorate rather than only to describe.balancecompares like with like inside a category, so a boss will legitimately look like an outlier next to random encounters. Read the flag, not the verdict.The bridge is Windows/nwjs playtest only and needs its plugin installed in the project.
Vision AI requires your own endpoint.
🛠️ Development
npm install
npm run build # tsc compile (+ copies knowledge/ into dist/)
npm test # vitest
npm run typecheck
npm run dev # tsx watch modeWhere | What |
| Tool handlers and MCP transport |
| The 13-tool surface and its routing |
| Per-domain CRUD |
| Template cloning and procedural generation |
| Mission graphs and the semantic compiler |
| The loopback WebSocket and the in-game plugin |
| The read-only layer behind |
| Static reference data and bundled maps |
💬 Feedback
Actively developed, and feedback is very welcome — bug reports, weird maps, missing tools, ideas. Open a GitHub Issue with what you asked the agent to do and what you got; an exported map JSON or a screenshot helps a lot.
MIT · Built for RPG Maker MV
Available Tools
18 toolsanalyze_imageARead-onlyIdempotent
Analyze images related to the project. mode "ai" sends a project image file (tileset, character sheet, map screenshot, battler) to an external OpenAI-compatible Vision API and returns {analysis, model, tokens_used} — NETWORK SIDE EFFECT: the resized JPEG leaves your machine to the endpoint configured via VISION_API_URL / VISION_API_KEY / VISION_MODEL env vars; fails if the path escapes the project, the file is missing, or the API is unreachable/times out (120 s). mode "grid" measures a base64 PNG tileset offline and returns its 48px grid {cols, rows, totalTiles}. mode "colors" returns the average RGB of a base64 PNG's four quadrants offline (a crude what-is-on-screen check). For precise offline map layout, query_map view "ascii" is usually better than any image analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | ai = Vision API on a project file; grid/colors = offline analysis of a provided base64 PNG. Default "ai" | |
| prompt | No | mode "ai": custom analysis question (default: thorough RPG-Maker-specific analysis) | |
| base64PNG | No | modes "grid"/"colors": raw base64 PNG data (no data: URL prefix) | |
| imagePath | No | mode "ai": image path RELATIVE to the project root, e.g. "img/tilesets/Outside.png"; paths outside the project are rejected | |
| resizeMax | No | mode "ai": max width in px before upload (default 1024; lower = fewer tokens) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses network side effects (image sent to external API), required env vars, and failure modes. Annotations already state readOnly, safe, idempotent, open-world; description adds critical behavioral context without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is fairly long but well-structured with clear mode breakdowns. Every sentence provides necessary info; minor verbosity in the 'ai' mode explanation but overall earns its space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with three modes, network side effects, and offline analysis, the description covers all important aspects: return values, failure modes, environment dependencies, and alternatives. No output schema but return format is described per mode.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover all 5 parameters, but the description adds significant value by explaining mode-specific usage, defaults (resizeMax=1024), and constraints (base64PNG must be raw). This goes beyond the schema's basic descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool analyzes images with three distinct modes (ai, grid, colors), each with specific functionality. It distinguishes itself from sibling tool query_map by noting that query_map's 'ascii' view is better for precise map layout.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance for each mode, including failure conditions (path escapes, missing file, API timeout) and a clear alternative (query_map for map layout). This helps the agent decide correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_projectARead-onlyIdempotent
Read-only project intelligence over an in-memory model of the whole project, cached until data files change. Nothing is written. view selects the lens: "overview" (default) title, counts, a health summary with the top issues, and maps unreachable from the start map; "index" maps with event counts, common events, named switches/variables; "validate" every consistency check (transfers to missing maps, missing map files, references to missing common events/items/weapons/armors/troops/animations, duplicate IDs, unused named switches/variables, bad start position, unreachable maps, autotiles the engine cannot draw) as {issueCount, bySeverity, issues[]}, filter with severity; "graph" the map transfer network and reachability; "usage" every event, common event and troop that uses kind (switch/variable/common_event/item/weapon/armor/troop/animation/actor/state/map) id, with read/write roles; "explain" target "switch"/"variable" + id: whether it is set, read, gated, a dead write or never set (why a door never opens); target "map" + id: incoming transfers and what becomes unreachable without it; "ast" one event page (mapId, eventId, page?) or common event (commonEventId) as a logical tree with an outline; "plugins" js/plugins.js merged with each plugin's header (@plugindesc/@param/@command/@help), flagging missing files; "critique" a designer's review of one map (mapId) with suggestions and a rough score; "metrics" measurements of one map (mapId): reachability from the real entry (unreachable tiles and events are softlocks), dead space against expected (interior/dungeon/exterior), walkable skeleton (loops, critical path, linearity), tile entropy, and steps to a shop/inn/save when the map has encounters; "balance" each skill/weapon/armor/enemy against its peers (damage per MP, gold per stat point, HP per EXP), leaving each out of its own statistics; category, thresholdSd (default 2); formulas are parsed, never executed, and unreadable ones are listed; "refactor" command sequences copy-pasted across events, to extract into a common event; "search" ranks names, dialogue, descriptions and notes against a free-text query.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | views "usage"/"explain": numeric id of the switch/variable/map/entity to inspect | |
| kind | No | view "usage": what kind of entity `id` refers to | |
| page | No | view "ast": which page of the event (0-based, default 0) | |
| view | No | Which lens to apply (default "overview") | |
| limit | No | view "search": max results (default 20) | |
| mapId | No | view "ast": the map holding the event to parse | |
| query | No | view "search": free-text query, e.g. "the blacksmith", "dark forest" | |
| minLen | No | view "refactor": minimum shared command-run length to report (default 4) | |
| target | No | view "explain": what `id` refers to (default "switch") | |
| eventId | No | view "ast": the event on `mapId` to parse | |
| category | No | view "balance": analyse one category instead of all four (default "all") | |
| expected | No | view "metrics": what kind of space this map is meant to be, which sets the dead-space band (default "exterior") | |
| severity | No | view "validate": keep only issues of this severity | |
| thresholdSd | No | view "balance": how many standard deviations from its peers an entry must sit before it is flagged (default 2; raise to see only the worst) | |
| commonEventId | No | view "ast": parse this common event instead of a map event |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds useful behavioral context beyond that: it operates over an in-memory model cached until data files change, formulas are parsed but never executed, and unreadable formulas are listed. This is meaningful extra detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, but it then becomes a dense, semicolon-chained wall of text enumerating thirteen views in a single run-on sentence. While each view entry carries information, the lack of formatting or paragraph breaks makes it difficult to scan and violates conciseness and structure expectations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 15 parameters, 13 views, no output schema, and annotations already covering safety, the description is remarkably complete. It explains what each view does and even sketches output shapes (e.g., validate as {issueCount, bySeverity, issues[]}, ast as a logical tree with outline), leaving little that an agent would need to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the per-parameter descriptions already carry the baseline. The description goes further by explaining how parameters combine with views—for example, `severity` filters the validate view, `expected` sets the dead-space band for metrics, and `thresholdSd` controls balance flagging. It adds contextual meaning beyond the schema's field-level notes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific read-only analysis capability over the whole project model, and 'Nothing is written' distinguishes it from write-oriented siblings. However, it does not explicitly differentiate itself from other read-only query tools such as query_database, query_map, or get_project_context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides extensive guidance for the `view` parameter, effectively telling the agent which lens to use for each analysis task. It does not, however, say when to use analyze_project instead of sibling tools or when not to use it, leaving tool-level selection implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_event_commandsARead-onlyIdempotent
Build a validated RPG Maker MV event-command fragment without writing files or requiring a selected project. Returns {commands, warnings?}; feed commands to insert_event_commands, or nest them in a choice/conditional builder. kind selects the command; only fields belonging to that kind are accepted. Troop-only kinds: enemy_appear, change_enemy_state, abort_battle. Fragments omit the root end marker; complete branches include their required nested end markers. MV Show Text has four parameters (no MZ speakerName); plugin_command emits MV code 356, never MZ 357. IDs accept integers or whole decimal integer strings; constants accept finite numbers. Supported game references are checked when inserting into a project.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| pan | No | ||
| fade | No | ||
| kind | Yes | ||
| name | No | control_switch self_switch: A-D; flow label/jump_to_label: label text; play_audio: file name without extension (empty stops the channel); show_picture: picture file. | |
| stat | No | change_actor: hp takes allowDeath; exp/level take showLevelUp; state takes stateId and remove. | |
| text | No | plugin_command: full MV command string, e.g. "DoorCtl open 1". | |
| wait | No | Wait for the effect, animation, balloon or move route to finish (move_route default true). | |
| wrap | No | show_text: true reflows all lines as one paragraph, "hard" keeps each line as a break; both split into 4-line boxes. Width ~55 chars, ~38 with a face. | |
| blend | No | ||
| color | No | ||
| endId | No | control_switch/control_variable: inclusive final ID; defaults to the starting ID. | |
| goods | No | shop_processing: goods in order; omit price to use the database price. | |
| lines | No | show_text: message lines. MV does not wrap; long lines are warned about unless wrap is set. | |
| mapId | No | ||
| pitch | No | ||
| power | No | ||
| scope | No | control_switch: switch requires switchId; self_switch requires name A-D. | |
| speed | No | ||
| steps | No | move_route: steps in order; times repeats one. toward/away are relative to the player. Parameters: jump x,y; wait frames; switch_on/off switchId; change_speed value 1-6; change_freq value 1-5; change_image name,index; change_opacity value 0-255; change_blend_mode value 0-3; play_se name,volume?,pitch?,pan?; script text. | |
| value | No | control_switch: default on. | |
| action | No | flow: wait requires frames; label/jump_to_label require name. | |
| amount | No | change_gold/change_items/change_actor hp|mp|exp|level: constant amount. Give amount or amountVariableId. | |
| effect | No | screen_effect. tint: color [r,g,b,gray] -255..255; flash: color [r,g,b,strength] 0..255; shake: power, speed 1-9. | |
| frames | No | ||
| indent | No | Base indentation, default 0. Nested branch bodies are rebased without mutating their inputs. | |
| itemId | No | ||
| origin | No | ||
| remove | No | change_party_member, change_actor state, change_enemy_state: remove instead of add. | |
| repeat | No | move_route: loop the route. Default false. | |
| scaleX | No | ||
| scaleY | No | ||
| volume | No | ||
| actorId | No | change_party_member/name_input: actor ID. change_actor: actor ID, 0 = entire party (or use actorVariableId). | |
| canLose | No | ||
| channel | No | play_audio. | |
| choices | No | ||
| opacity | No | ||
| operand | No | control_variable: {type:"constant",value}; {type:"variable",variableId}; {type:"random",min,max}; or {type:"game_data",dataType:0..7,param1?,param2?}. MZ game-data type 8 is rejected. | |
| stateId | No | ||
| troopId | No | battle_processing: give troopId, troopVariableId, or randomEncounter: true. | |
| branches | No | show_choices: one command fragment per choice. Omit for empty branches. | |
| decrease | No | Subtract instead of add. Default false. | |
| duration | No | screen_effect: frames, default 60. | |
| faceName | No | show_text: face image basename, default empty. | |
| itemType | No | change_items, default item. | |
| position | No | show_text: top/middle/bottom; show_choices: left/middle/right. | |
| switchId | No | ||
| balloonId | No | 1-15 as in the editor list (1 exclamation). | |
| canEscape | No | ||
| condition | No | conditional_branch: switch {type,switchId,value?}; self_switch {type,name,value?}; variable {type,variableId,comparison,constant? OR variableOperand?}; actor_in_party {type,actorId}; gold {type,gold,compare?}; item {type,itemId}. Only keys for the selected type are allowed. | |
| direction | No | ||
| faceIndex | No | show_text: face slot 0-7, default 0. | |
| maxLength | No | name_input: 1-16, default 8. | |
| operation | No | ||
| pictureId | No | show_picture/erase_picture: slot 1-100. | |
| skippable | No | move_route: skip a step that cannot be performed. Default false. | |
| winBranch | No | battle_processing: result branches, only when canEscape or canLose. | |
| wrapWidth | No | show_text: override the wrap width in characters. | |
| allowDeath | No | ||
| background | No | Text/choice window background. | |
| cancelType | No | show_choices: -1 disables cancel; -2 or choices.length selects the separate cancel branch; otherwise a zero-based choice index. | |
| elseBranch | No | ||
| enemyIndex | No | Troop slot from 0; change_enemy_state also accepts -1 for the entire troop. | |
| initialize | No | change_party_member: reset the actor when adding. | |
| loseBranch | No | ||
| thenBranch | No | ||
| variableId | No | ||
| animationId | No | ||
| characterId | No | show_animation/show_balloon/move_route: -1 player, 0 this event (default), n map event n. | |
| defaultType | No | show_choices: selected choice index, or -1 for none. | |
| designation | No | transfer_player/show_picture: whether the coordinates are literal values or variable IDs. | |
| showLevelUp | No | ||
| cancelBranch | No | show_choices: commands for a separate cancel branch. | |
| escapeBranch | No | ||
| includeEquip | No | change_items weapon/armor: also remove equipped copies. | |
| purchaseOnly | No | ||
| commonEventId | No | ||
| actorVariableId | No | ||
| randomEncounter | No | ||
| troopVariableId | No | ||
| amountVariableId | No | Use this variable's value as the amount. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safe pure-function profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower, yet the description still adds substantial context beyond them: no file writes, no project selection needed, the return shape {commands, warnings?}, the end-marker convention for fragments vs branches, and that game-reference validation is deferred to insert time.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Appropriately sized for an 83-parameter tool and front-loaded with the core purpose and routing before the finer MV/MZ semantics. It is a dense single paragraph with no wasted sentence, though the lack of any structural breaks makes the later constraints harder to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the description does explain the return value ({commands, warnings?}), which is the key gap it needed to close. Combined with the fragment/branch nesting rules and MV-vs-MZ caveats, it is largely complete for this complexity, though the 46% of undocumented parameters leave some functional territory uncovered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 54% across 83 parameters, so the description must compensate, and it does add real cross-parameter semantics: 'kind selects the command; only fields belonging to that kind are accepted,' the troop-only kind list, the MV Show Text four-parameter rule, plugin_command emitting code 356, and the integer-or-decimal-string ID rule. It still leaves many individual parameters undocumented, so not a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (build an RPG Maker MV event-command fragment) and immediately scopes it against the sibling that actually writes ('without writing files or requiring a selected project'). An agent can distinguish this from insert_event_commands without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: 'feed commands to insert_event_commands, or nest them in a choice/conditional builder,' which names the downstream alternative and the compose-vs-insert choice. It does not state any when-not condition or prerequisites for this tool itself, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_database_entryA
Create a new entry in an RPG Maker MV database with the next free ID; the data file is written immediately. Returns the complete created object including its new id. Two forms: with entity + data it creates a raw entry (omitted fields get engine defaults; data.name is expected); with preset it builds a ready-to-use entry from a recipe — damage_skill {name, mpCost, scope, formula, element?, animationId?}, healing_skill {name, mpCost, scope, formula}, buff_skill {name, mpCost, scope, paramId 0-7, turns}, state_skill {name, mpCost, scope, stateId, chance 0-1}, boss_enemy {name, battlerName?, specialSkillId?, params?}, encounter_troop {name, enemyIds[]}. Presets validate their required fields and fail with a validation error when missing. Class entries: data.params accepts 8 stat seeds [HP,MP,ATK,DEF,MAT,MDF,AGI,LUK] expanded to full level 1-99 curves automatically. Not supported for tilesets/animations (author those in the editor). Referenced IDs (classId, stateId, enemyIds...) are NOT validated — confirm them with query_database first.
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | Entry fields. Raw entries: same properties as the RPG Maker database (name, note, traits, params...; effects for items/skills, members [{enemyId,x,y}] for troops, trigger/switchId/list for common_events). Presets: the recipe fields listed in the description | |
| entity | No | Which database receives the new entry. Optional when preset is given (the preset implies it) | |
| preset | No | Recipe for common content; see the tool description for each preset's required data fields. Omit for a raw entry |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behaviors: immediate file write, return of complete object, preset validation with error on missing fields, automatic curve expansion for class params, and non-validation of referenced IDs. This adds substantial value beyond the annotations, which only mark read/write safety.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is comprehensive but well-structured: core function and return in first sentence, then forms, presets, special cases, and limitations. While lengthy, each sentence adds necessary detail, and the front-loading of key info aids quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (two modes, presets, special handling) and no output schema, the description fully covers return values, validation behavior, unsupported types, and ID validation warnings, providing complete guidance for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the description still enriches understanding by clarifying raw vs preset usage, listing exact preset required fields, explaining class param expansion, and detailing expected data structures (e.g., effects for items, members for troops). This goes well beyond the schema's basic property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a new entry with the next free ID in an RPG Maker MV database. It distinguishes itself from sibling tools like query_database and delete_database_entry by detailing two creation forms (raw and preset) and specifying the returned object.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use each form: raw entity+data for custom entries, presets for common types. It explicitly excludes tilesets/animations (use the editor) and advises confirming referenced IDs with query_database, providing clear usage context and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_database_entryADestructiveIdempotent
DESTRUCTIVE: delete a database entry by nulling it out in its data file (written immediately; not undoable — re-create it if needed; IDs are never reused). The delete is refused while anything still references the entry, listing every place: events, common events, troop pages, page conditions, map encounters, the starting party, actor classes and starting equipment, class learnings, enemy actions and drops, troop members, traits, item and skill effects, animations. Fix those first, pass dryRun:true to preview the list, or force:true to delete anyway (the result then lists brokenReferences). References are never cleaned up automatically. NEVER delete skill 1 (Attack), skill 2 (Guard) or state 1 (KO); the engine uses them directly. Supported entities: actors, classes, skills, items, weapons, armors, enemies, states, troops, animations. Returns the deleted object for reference; fails with an error if the ID does not exist.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ID of the entry to delete (never skill 1/2 or state 1) | |
| force | No | Delete even though something still references it (default false) | |
| entity | Yes | Which database contains the entry to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint=true, readOnlyHint=false), it discloses that the change is written immediately, not undoable, that IDs are never reused, that references are never cleaned up automatically, and that the delete is refused while references exist. It also enumerates every reference category checked and lists the result shape on forced deletes. This is unusually rich behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the DESTRUCTIVE warning and every sentence carries substantive information with no filler. However, it is a single dense paragraph for a complex topic, and itemizing the reference list or options would have improved scanability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description supplies the return shape ('Returns the deleted object') and the error behavior ('fails with an error if the ID does not exist'), and it covers the auth/safety profile through both annotations and explicit warnings. An agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description mostly restates schema semantics for id, force, and entity, and it introduces a 'dryRun:true' parameter that does not appear anywhere in the input schema, which is a potential inconsistency rather than added clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise verb and resource ('delete a database entry'), names the mechanism ('nulling it out in its data file'), and lists the exact supported entity types. This clearly distinguishes it from siblings like update_database_entry and create_database_entry without the agent needing to open any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit conditions for use and non-use: refusal while references exist, fixing references first, using dryRun to preview, or force to override. It also names hard exclusions (never skill 1/2 or state 1). It does not, however, direct the agent to any sibling tool as an alternative, which keeps it short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_mapADestructiveIdempotent
Modify existing maps; the affected map files / MapInfos.json are written immediately. action selects the edit: "fill_layer" overwrites an ENTIRE tile layer with one tile ID (destructive, not undoable; layers: 0-1 ground, 2-3 upper, 4 shadow bits 0-15, 5 region IDs 0-255; tileId 0 clears; find valid IDs with get_project_context detail "tileset"); "set_display_names" sets the player-visible displayName of several maps at once (entries whose map file is missing are reported in skipped, not errors); "organize_tree" re-parents maps in the editor tree (purely organizational, gameplay unaffected); "connect" creates a bidirectional pair of transfer events between two maps so the player can walk both ways; "set_encounters" sets the map's random-battle list so enemies appear while walking — encounters is [{troopId, weight?, regionSet?}] (weight default 5; regionSet [] = whole map; troopId must exist) plus optional encounterStep. WITHOUT encounters set, a map has no random battles. Returns a per-action summary. Fails with an error if a referenced map does not exist (except set_display_names, which skips). "paint" writes one tile into cells or a rect of one layer; an autotile is written as its kind and the painted cells and their neighbours get the shapes the editor would give them, so shorelines and walls join up, while the rest of the map keeps its saved shapes. "repair_autotiles" fixes only autotile cells whose shape the engine cannot draw (analyze_project validate reports them as invalid-autotile). For event-level work use manage_map_event.
| Name | Required | Description | Default |
|---|---|---|---|
| posA | No | action "connect": transfer event position on map A {x, y, trigger} (trigger 1=walk-on default, 0=action button for doors) | |
| posB | No | action "connect": transfer event position on map B {x, y, trigger} | |
| rect | No | action "paint": {x, y, width, height} rectangle to paint (or give cells) | |
| cells | No | action "paint": [[x, y], ...] cells to paint (or give rect) | |
| layer | No | actions "paint", "fill_layer": layer 0-3 tiles, 5 regions (fill_layer also 4) | |
| mapId | No | actions "paint", "repair_autotiles", "fill_layer": map to modify | |
| names | No | action "set_display_names": [{mapId, name}] — name is what the player sees on map entry | |
| action | Yes | Which edit to perform; see the tool description | |
| mapIdA | No | action "connect": first map ID | |
| mapIdB | No | action "connect": second map ID | |
| tileId | No | actions "paint", "fill_layer": tile ID (0 = clear); on layer 5 a region id 0-255 | |
| folders | No | action "organize_tree": [{mapId, parentId}] — parentId 0 means root level | |
| encounters | No | action "set_encounters": [{troopId, weight?, regionSet?}] random-battle entries; troopId must exist (create via create_database_entry "troops") | |
| encounterStep | No | action "set_encounters": average steps between random battles (default 30) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: files are written immediately, fill_layer is destructive and not undoable, missing-map entries are reported in `skipped` rather than erroring for set_display_names, and connect creates bidirectional transfer events. The idempotentHint=true is slightly at odds with event-appending actions like connect, but the description's disclosure quality is high.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the key mutation warning (immediate write) and then organizes each action as a labeled clause. Dense but every clause carries an action-specific fact; the enumeration could be tighter but little is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-action, 14-parameter mutation tool with no output schema, the description covers each action's semantics, error behavior, and return shape (per-action summary). Nothing critical for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: layer numbering (0-1 ground, 2-3 upper, 4 shadow, 5 region 0-255), tileId 0 clears, weight default 5, regionSet [] = whole map, and posA trigger semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Modify) and resource (existing maps) and then enumerates each action with its exact effect. It explicitly differentiates from siblings by routing event-level work to manage_map_event.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Per-action guidance is concrete: it names which action to use for which goal, points to get_project_context detail "tileset" for valid tile IDs, and directs event work to manage_map_event. It also states an exclusion (maps have no random battles without set_encounters).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_mapA
Create a new map file (next free map ID, registered in MapInfos.json; both files written immediately). mode selects the generator: "blank" makes an empty map you paint later (edit_map fill_layer); "themed" generates a simple tile layout for a theme using the tileset's real tiles; "procedural" is the full generator — for themes with matching RTP reference templates (town, dungeon, interior, castle, world, etc.) it CLONES a hand-authored template from the 106 bundled maps (real 3D buildings, walls, furniture), auto-picking the closest size; for themes without templates (beach, swamp, etc.) it generates procedurally (Perlin terrain, BSP dungeons, cellular caves). Same seed + params = same map. Pass templateId to force a specific template, or useTemplate:false to force procedural. 21 themes incl. snow, volcano, sewer, space_interior; "batch" generates several procedural maps in one call from batch specs; "duplicate" copies an existing map (transfer events still point at their ORIGINAL destinations — review them); "template" instantiates one of the 106 bundled reference maps by templateId (list them with get_project_context detail "templates"); "semantic" is the tileset-independent generator — it lays out a MISSION (entrance, key, locked door, treasure, boss, exit, side rooms) as a graph and only then paints it, asking the tileset profile which tile plays each role, so the layout works on ANY tileset including DLC and third-party packs, and the key is always reachable before the door it opens. It returns markers naming the cell of every mission role, which is where to place events next. Run manage_system action "mine_templates" first so the profile comes from tiles this project actually uses; pass a mined templateId (like "mined-3") to re-materialise one of the project OWN maps onto a different tileset instead of generating a new mission. Returns {mapId, ...} — procedural also returns the seed; batch returns all mapIds keyed for edit_map "connect". Fails with an error on unknown theme/template or unwritable files.
| Name | Required | Description | Default |
|---|---|---|---|
| loop | No | mode "semantic": add one extra corridor so the map has a loop instead of being a tree (default true) | |
| mode | No | Which generator to use; see the tool description. Default "procedural" | |
| name | No | Internal map name for the editor tree (required for mode "duplicate") | |
| note | No | Free-form note field for plugin metadata | |
| seed | No | procedural/batch: random seed for reproducible output (omit for random; returned in the result) | |
| batch | No | mode "batch" only: one spec per map [{key, name, theme, width, height, tilesetId, seed, parentId}]; key is echoed back to match returned mapIds | |
| rooms | No | mode "semantic": rooms on the critical path (default 5) | |
| theme | No | Required for themed/procedural. themed: forest, dungeon, town, castle, cave, village, swamp, desert, ruins, interior, beach. procedural adds: snow, harbor, volcano, sewer, fortress, magic_forest, magic_interior, space_interior, space_exterior, world | |
| width | No | Map width in tiles (defaults: blank/themed 17, procedural 30; template uses the template's size) | |
| height | No | Map height in tiles (defaults: blank/themed 13, procedural 25) | |
| locked | No | mode "semantic": put a key and a locked door on the path (default true when there are 4+ rooms) | |
| bgmName | No | Audio file from audio/bgm/ to autoplay on entry | |
| parentId | No | Map tree folder to nest the new map under (0 = root) | |
| addEvents | No | procedural: also place themed NPCs/chests/bosses/transfers (default true) | |
| keepProps | No | mode "semantic" with a mined templateId: paint the original decorations even onto a different tileset (they may not exist there) | |
| sideRooms | No | mode "semantic": dead-end rooms hung off the path, the first holding treasure (default 2) | |
| tilesetId | No | Tileset to render with. Defaults to the one matching the theme (Outside=2, Inside=3, Dungeon=4, Overworld=1), so you normally omit it — only set it to override. A mismatched tileset renders the map as garbage | |
| encounters | No | procedural combat themes (dungeon/cave/world/fortress/sewer/volcano): auto-populate the map's random encounters from the project's existing troops so enemies appear while walking. Default true (no-op if the project has no troops yet) | |
| keepEvents | No | mode "template" only: also copy the template's events (default true) | |
| templateId | No | mode "template": bundled template ID. mode "procedural": OPTIONAL — force a specific template ID (from get_project_context detail "templates") instead of auto-picking by theme+size | |
| displayName | No | Location name briefly shown to the player on entry | |
| sourceMapId | No | mode "duplicate" only: existing map ID to copy (unchanged by the operation) | |
| useTemplate | No | procedural: when true (default), clone an RTP template for themes that have one (town, dungeon, interior, etc.) instead of generating procedurally. Set false to force procedural generation even when templates exist | |
| enterableHouses | No | procedural town/village only: also auto-generate an interior map per house with a two-way warp (action-button door outside → interior, walk-on mat inside → back to the street). Default true; the new interior map IDs are returned in interiorMapIds |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare non-read-only, non-destructive, non-idempotent behavior, but the description adds substantial context: files are written immediately, registration in MapInfos.json, seed reproducibility, template cloning behavior, transfer-event caveat in duplicate mode, and specific failure conditions. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and then efficiently details modes and parameters. It is dense and long, but the length is justified by the seven modes and 24 parameters; a few thematic examples could be trimmed without loss.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still explains return shapes for each mode (mapId, seed, batch mapIds, markers, interiorMapIds) and specifies error behavior. Combined with annotations and the complete input schema, an agent has enough to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds some cross-parameter meaning and defaults beyond the schema, especially around mode semantics and reproducibility, but much of the per-parameter detail is already covered by the rich schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Create a new map file,' with seven generator modes clearly differentiated. It explicitly names sibling tools for related tasks (edit_map fill_layer, get_project_context templates, manage_system mine_templates), so an agent can select it over alternatives without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit mode-selection conditions and alternatives: blank maps are painted later with edit_map, template listing uses get_project_context, and mine_templates should run first for semantic generation. It also explains when to override defaults (templateId, useTemplate:false) and when procedural fallback applies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_contextARead-onlyIdempotent
Read-only: pre-digested project knowledge — CALL THIS FIRST in a session. detail selects the depth: "full" (default) returns id+name lists for every database, switch/variable names, starting position, and available sprite filenames per img/ folder — everything needed to create content without inventing broken references; "summary" is a cheap health check (entry counts per data file); "assets" scans img/ and Tilesets.json into a complete index (sheet dimensions, autotile kinds, categorized usable tiles, all PNG names); "tileset" returns the categorized usable tile IDs of ONE tileset (ground/water/walls/roof/decoration) for edit_map "fill_layer" — guessing tile IDs produces glitched maps; "templates" lists the 106 bundled reference maps (id, category, theme) usable with generate_map mode "template", optionally filtered by category/theme. Returns one structured object (or array for templates). GOLDEN RULES for good results: (1) build whole maps with generate_map (it stamps real houses/trees and wires encounters) and add content with the manage_map_event presets — do NOT hand-paint tiles or place decorations one tile at a time; (2) never invent tile IDs or sprite/troop/skill IDs — take them from this tool; (3) for enemies to appear, create troops then set encounters (edit_map "set_encounters"), which generate_map does automatically for combat themes.
| Name | Required | Description | Default |
|---|---|---|---|
| theme | No | detail "templates": filter by template theme | |
| detail | No | How much and what kind of context; see the tool description. Default "full" | |
| category | No | detail "templates": filter by template category | |
| tilesetId | No | detail "tileset": which tileset to categorize |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, destructiveHint=false, idempotentHint=true. Description adds valuable behavioral context: warns against inventing tile IDs ('guessing tile IDs produces glitched maps'), explains return types, and details what each mode outputs. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear ordering: main purpose, detail modes, golden rules. Every sentence adds value, though the description is lengthy due to the tool's complexity. Could be slightly tighter, but still efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Completely covers all aspects: explains every detail mode, parameters, return types, and golden rules for correct usage. Even without an output schema, the description makes it clear what to expect. No gaps for an agent to misuse the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% coverage, but description adds meaning beyond schema: explains what each enum value of 'detail' returns, and for tilesetId, category, theme, it specifies their role in filtering. Schema defers to description for full semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Explicitly states it is 'read-only: pre-digested project knowledge' and advises 'CALL THIS FIRST'. Clearly distinguishes each detail mode (full, summary, assets, tileset, templates) with specific use cases, differentiating it from sibling tools like query_map and generate_map.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use instructions: 'CALL THIS FIRST'. Golden rules guide proper usage: use generate_map for maps, never invent IDs, set encounters correctly. Details when to use each detail mode (e.g., 'tileset' for edit_map 'fill_layer').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
insert_event_commandsA
Insert a complete event-command fragment into a map event page, common event, or troop battle page. Validates the fragment, insertion boundary, resulting list, and supported references before writing. Invalid data refuses the write. Omit position to append before the root end marker; an explicit position must be a safe command boundary (not inside a text continuation or between a block header and its branches). Fragments are rebased to the target indentation. dryRun:true validates and previews without writing or creating backups. Normal writes use the existing atomic backup-protected project writer. Returns target identity, insertion count, the resulting list length and its command codes (listCodes), and warnings; pass verbose:true to also get the full before/after lists. Existing unknown extension commands are advisory; known MZ-only commands are rejected.
| Name | Required | Description | Default |
|---|---|---|---|
| mapId | No | map_event target map ID. | |
| dryRun | No | Preview the validated change without writing. Default false. | |
| target | No | Defaults to map_event. | |
| eventId | No | map_event target event ID. | |
| troopId | No | troop_page target troop ID. | |
| verbose | No | Include the full before/after command lists in the result. Default false. | |
| commands | Yes | A complete fragment, typically returned by build_event_commands. A supplied final root terminator is normalized; the target always retains exactly one. | |
| position | No | Zero-based insertion index in the existing command list. Out-of-range or unsafe boundaries are rejected. | |
| pageIndex | No | map_event/troop_page: zero-based page, default 0. | |
| commonEventId | No | common_event target ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses pre-write validation, that invalid data refuses the write, safety rules for explicit positions, fragment rebasing to target indentation, atomic backup-protected writing, unknown vs MZ-only extension command handling, and exactly what the result contains. This is unusually rich behavioral disclosure for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Content is front-loaded with purpose and validation, then flows into position semantics, dryRun, writer behavior, and return values. It is dense and slightly long, but nearly every sentence carries distinct information and no sentence is pure filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description enumerates the return payload (target identity, insertion count, resulting list length, listCodes, warnings, and verbose before/after lists), so an agent knows what to expect. Combined with the validation and safety rules, nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema lacks: the safe-boundary constraint on position, the append-before-root-end behavior when position is omitted, dryRun's write-and-backup suppression, and verbose's effect on the result shape.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Insert) and resource (event-command fragment) with explicit scope across three target types (map event page, common event, troop battle page). It also implicitly distinguishes itself from build_event_commands by noting fragments are 'typically returned by build_event_commands', so an agent can tell the two apart without opening the schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operational context: omit position to append before the root end marker, use dryRun:true to preview without writing, and pass verbose:true for full lists. It does not explicitly state when to prefer this over sibling writers like edit_map or manage_map_event, which keeps it out of 5 territory.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_map_eventADestructive
Create, change or remove map events; the map file is written immediately. action "create" without preset makes a bare event at x/y (empty page unless pages; then use add_command or insert_event_commands). With preset it builds a ready event: "npc" {name, dialogues[], characterName?, characterIndex?}; "chest" one-time loot {items: [{type item|weapon|armor, id, amount}]}; "teleport" walk-on transfer {destMapId, destX, destY, trigger?}; "door" action-button warp {destMapId, destX, destY, characterName?, characterIndex?, trigger?, lockedSwitchId?, lockedMessage?}, locked until that switch is ON; "shop" {goods: [[type 0 item/1 weapon/2 armor, id, priceType 0 standard/1 custom, price]]}; "inn" {cost?}; "boss" {troopId} one-time battle, game over on loss; "puzzle_switch" {switchX, switchY, doorX, doorY, gameSwitchId, switchName?, doorName?} makes two linked events. IDs and destinations are not validated (check with query_database and query_map). "update" overwrites only fields. "convert" keeps an event's id, position, name and sprite but replaces its behaviour via kind: "merchant" (options.goods, or options.items [{type, id}], options.greeting?), "inn" (options.cost?), "sign" (options.text). "delete" removes it (destructive). "add_command" appends one command before a page's end. "populate" scatters N npc/chest/boss events at random positions (walkability not checked; check with query_map "ascii"). Returns the event(s) with ids; fails if the map or event does not exist.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | Tile X position (0-based; create/presets except puzzle_switch) | |
| y | No | Tile Y position (0-based) | |
| cost | No | preset "inn": gold charged for a full recovery (default 50) | |
| kind | No | action "convert": what to turn the existing event into | |
| name | No | Event name shown in the editor | |
| opts | No | action "populate": overrides {name, troopId, x, y} | |
| count | No | action "populate": how many events (default 3) | |
| destX | No | preset "teleport"/"door": destination tile X (should be walkable) | |
| destY | No | preset "teleport"/"door": destination tile Y | |
| doorX | No | preset "puzzle_switch": door tile X | |
| doorY | No | preset "puzzle_switch": door tile Y | |
| goods | No | preset "shop": wares [[type, id, priceType, price]] — priceType 1 uses the custom price, 0 the database price | |
| items | No | preset "chest": loot [{type: "item"|"weapon"|"armor", id, amount}] | |
| mapId | Yes | Map the event lives on (always required) | |
| pages | No | action "create" without preset: full event page objects (optional) | |
| action | Yes | What to do; see the tool description. Default "create" | |
| fields | No | action "update": properties to overwrite, e.g. {"x": 5, "y": 9} or {"pages": [...]} (replaces all pages) | |
| preset | No | action "create" only: ready-made event recipe; omit for a low-level empty event | |
| command | No | action "add_command": event command {code, indent, parameters}; e.g. 201=Transfer Player [0, mapId, x, y, dir, fade] | |
| eventId | No | Existing event ID (update/delete/add_command); find it with query_map view "events" | |
| options | No | action "convert": kind-specific settings — merchant {goods|items, greeting?}, inn {cost?}, sign {text} | |
| switchX | No | preset "puzzle_switch": floor-switch tile X | |
| switchY | No | preset "puzzle_switch": floor-switch tile Y | |
| trigger | No | How the event activates: 0=action button, 1=player touch, 2=event touch, 3=autorun, 4=parallel | |
| troopId | No | preset "boss" / populate boss: troop to battle (create it first via create_database_entry preset encounter_troop) | |
| doorName | No | preset "puzzle_switch": editor name for the door event (default "Door") | |
| destMapId | No | preset "teleport"/"door": destination map ID | |
| dialogues | No | preset "npc": dialogue lines, each becomes one text box | |
| eventType | No | action "populate": kind of events to scatter — "npc", "chest" or "boss" | |
| pageIndex | No | action "add_command": which page receives the command (0-based, default 0) | |
| switchName | No | preset "puzzle_switch": editor name for the switch event (default "Switch") | |
| gameSwitchId | No | preset "puzzle_switch": game switch linking switch and door — pick an unused ID via manage_system get switches | |
| characterName | No | Sprite sheet from img/characters/ without extension; list options with get_project_context | |
| lockedMessage | No | preset "door": message shown while locked (default "It's locked.") | |
| characterIndex | No | Which of the 8 characters in the sheet (0-7) | |
| lockedSwitchId | No | preset "door": if set, the door shows lockedMessage until this game switch is ON, then warps |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (destructiveHint, non-idempotent), and the description adds substantial context beyond them: the map file is written immediately, IDs/destinations/walkability are not validated, chest and boss are one-time, boss loss causes game over, delete is destructive, and it fails when the map or event doesn't exist. That is exactly the extra layer annotations can't express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action/preset overview, which is good, but it then becomes a single ~340-word paragraph mixing actions, presets, and inline parameter schemas that partly restate the input schema (e.g., the goods and items tuples). Dense and hard to scan for a 36-param tool; tightening would help.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-action, 8-preset, 36-parameter tool with no output schema, the description covers every action, every preset's required inputs, cross-tool dependencies (create_database_entry, manage_system, query_map), the immediate-write side effect, and the return/error contract ("Returns the event(s) with ids; fails if the map or event does not exist"). Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real value the schema lacks: it groups which parameters belong to which preset, explains cross-parameter coupling (puzzle_switch links two events via gameSwitchId; door stays locked until lockedSwitchId is ON), and states defaults. It duplicates some field docs (goods/items) rather than adding, keeping it at 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb triad plus resource ("Create, change or remove map events") and immediately distinguishes its scope from structural siblings like edit_map or insert_event_commands. An agent can tell what this tool owns without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives per-action routing: bare create vs preset create, when to fall back to add_command/insert_event_commands for empty pages, when to use convert vs update, and pre-flight checks (query_database/query_map, query_map "ascii" for walkability). No explicit top-level "don't use this for X" exclusions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_systemAIdempotent
Project-wide settings in data/System.json (writes are immediate), project lifecycle, and the live playtest bridge. action "get" returns section: "full" (large), "switches"/"variables" (names by ID; empty means free) or "title". "set_title" sets the game title. "name_switch"/"name_variable" label one by ID (names only). "set_starting_position" {mapId, x, y} for new games (not validated; check with query_map "infos"). "create_plugin" writes js/plugins/.js with a proper header (and a pluginCommand hook when commands are given) and registers it in js/plugins.js (order is load order); the same name replaces it. "scaffold_project" creates a new editor-openable project at destPath from NewData (never overwrites; does not switch the active project). "playtest" runs the active project in the bundled nwjs; "open_editor" opens it in RPGMV.exe, repairing a missing Game.rpgproject (Windows; engine from install, RPGMAKER_MV_INSTALL or the Steam path). "mine_templates" learns layouts and tile roles from this project for semantic generation. "export_web" builds an HTML5 folder and zip for itch.io (see outDir, zip, prune). Live bridge: "install_bridge_plugin" writes js/plugins/McpBridge.js (active only in playtest); "bridge_start" opens the loopback socket and its handshake; "bridge_status" says whether the game is connected, and why not in lastAuthError; "bridge_telemetry" drains exceptions, logs, scene changes, player position and executing commands (filter types, peek keeps them); "bridge_command" sends reload_map, reload_database, get_state, teleport_player, interact, press_button or ping; "take_screenshot" captures the live game ("bridge_screenshot" is an alias); "bridge_stop" closes it.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | set_starting_position: starting tile X (should be walkable) | |
| y | No | set_starting_position: starting tile Y | |
| id | No | name_switch/name_variable: switch or variable ID to label (1-based) | |
| zip | No | export_web: also write <outDir>.zip with index.html at its root (default true) | |
| body | No | create_plugin: custom JS body; omit for a safe generated skeleton | |
| file | No | bridge_command "reload_database": the data file to re-read, e.g. "Skills.json" | |
| help | No | create_plugin: @help text (multi-line allowed) | |
| name | No | name_switch/name_variable: descriptive label. create_plugin: the plugin name (bare token — letters/digits/_/-, becomes js/plugins/<name>.js) | |
| peek | No | bridge_telemetry: leave the frames in the buffer instead of consuming them | |
| port | No | bridge_start/install_bridge_plugin: loopback port for the live bridge (default 32123, or RPGMV_BRIDGE_PORT) | |
| test | No | playtest: run in playtest/test mode (default true; false runs it as a normal launch) | |
| wait | No | bridge_command: wait for the game to answer (default true; false is fire-and-forget) | |
| limit | No | bridge_telemetry: return at most this many of the most recent frames. mine_templates: keep at most this many layouts, largest maps first | |
| mapId | No | set_starting_position: map where new games start (must exist) | |
| prune | No | export_web: drop img/audio/movies files no data or script references (default false; assets a plugin names only at runtime would be lost) | |
| title | No | action "set_title": new game title | |
| types | No | bridge_telemetry: only return these frame types, e.g. ["exception","log"] | |
| action | Yes | What to do; see the tool description. Default "get" | |
| author | No | create_plugin: @author name | |
| button | No | bridge_command "press_button": safe RPG Maker input to press | |
| outDir | No | export_web: folder for the HTML5 build, outside the project (absolute, or relative to it). It must be new, empty, or a previous export_web folder; <outDir>.zip is written beside it unless zip:false. Copies js, fonts, data and assets, keeps encrypted assets as they are, never copies saves or backups. Returns file counts, bytes and the screen size for an itch.io embed. | |
| params | No | create_plugin: @param definitions [{name, type?, desc?, default?}] surfaced in js/plugins.js | |
| status | No | create_plugin: enable the plugin in js/plugins.js (default true) | |
| command | No | bridge_command: which safe instruction to send to the running game | |
| install | No | playtest/open_editor: RPG Maker MV install root (contains nwjs-win/ and RPGMV.exe); defaults to RPGMAKER_MV_INSTALL or the standard Steam install | |
| section | No | action "get": which part of System.json to return (default "full") | |
| commands | No | create_plugin: plugin command names to document (@command) and wire a pluginCommand handler stub for | |
| destPath | No | scaffold_project: directory for the NEW project (must be empty of a project). title/mapId/x/y set the new game's title and start position | |
| direction | No | bridge_command "teleport_player": facing after the transfer (2 down, 4 left, 6 right, 8 up) | |
| timeoutMs | No | bridge_command/take_screenshot: how long to wait for the answer (default 8000, screenshots 15000) | |
| durationMs | No | bridge_command "press_button": hold duration in milliseconds (default 80, range 30-1000) | |
| sourcePath | No | scaffold_project: a blank-project (NewData) folder to clone; defaults to the RPGMAKER_MV_INSTALL env var or the standard Steam install | |
| description | No | create_plugin: @plugindesc short description | |
| screenshotName | No | take_screenshot: optional safe filename prefix (letters, numbers, _ and -, up to 64 characters) | |
| minDistinctTiles | No | mine_templates: a map needs at least this many distinct tiles to count as content rather than scratch (default 10) | |
| telemetryInterval | No | install_bridge_plugin: frames between player-position frames (default 30; 60 = once per second) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only supply readOnlyHint=false, idempotentHint=true and destructiveHint=false; the description goes well beyond them by disclosing that writes are immediate, that re-using a plugin `name` replaces it, that scaffold_project never overwrites, that outDir must be new/empty, and that prune can lose runtime-only assets. These are exactly the mutation and risk details an agent needs and the annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is one dense run-on paragraph covering 19 actions with no bullets, headings, or grouping; every clause is informative but the lack of structure makes scanning for a single action slow. Front-loading is only partial since it opens with the settings section rather than a scope statement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 19-action, 36-parameter tool with no output schema, the description covers essentially every action's effect and several return details (lastAuthError, drained frames, export file counts/bytes/screen size). Minor gaps remain, e.g. return shape of get full vs. switches and what bridge_start's handshake yields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description adds real meaning: it ties parameters to actions (body/help/params/commands for create_plugin, section values for get, types/peek/limit for bridge_telemetry) and explains consequences such as load order for plugin registration and zip placement beside outDir.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Despite bundling three domains (project settings, project lifecycle, live bridge) into one tool, the description enumerates each of the 19 actions with a specific verb and resource, so an agent can tell what 'export_web' or 'bridge_telemetry' does without opening the schema. It differentiates from a sibling like query_map by pointing there for validation, though the heterogeneous scope keeps it short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Some operational conditions are given ('not validated; check with query_map "infos"', 'never overwrites', 'active only in playtest'), which is useful context. However there is no systematic when-to-use vs. when-not guidance, and notably no explanation of how this tool's take_screenshot action relates to the sibling tool of the same name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_databaseARead-onlyIdempotent
Read-only: query any RPG Maker MV database (data/*.json). Three forms depending on arguments: no id/query lists every non-null entry of the entity; id fetches one entry (returns null, not an error, if it does not exist); query does a case-insensitive name search (items/weapons/armors/skills also match descriptions). Returns an array (list/search) or a single object/null (id). Use this to discover valid IDs before create/update/delete or before wiring references (class learnings, troop members, chest loot). For maps use query_map; for a digest of everything at once use get_project_context.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Fetch a single entry by its database ID (1-based). Omit to list or search | |
| query | No | Case-insensitive substring to match against entry names (and descriptions for items/weapons/armors/skills). Ignored when id is given | |
| entity | Yes | Which database to read: actors, classes, skills, items (consumables), weapons, armors, enemies, states (status conditions), troops (enemy formations), tilesets, common_events, animations |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive, idempotent. Description adds key behaviors: returns null for missing id (not error), case-insensitive search, description matching for certain entities. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise and well-structured: starts with read-only safety emphasis, then enumerates three usage forms, provides usage guidance, and ends with sibling differentiation. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, description explains return types (array vs single object/null) and covers all three modes. Provides complete context for usage, parameter interactions, and relationship to sibling tools. Fully sufficient for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
100% schema coverage with descriptions, but description adds crucial semantics: explains that omitting id and query lists all entries, id returns null on missing, query is case-insensitive and also matches descriptions for items/weapons/armors/skills. Significantly enriches understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool queries RPG Maker MV database files, specifies three forms (list, fetch by id, search), and distinguishes from siblings (query_map, get_project_context). Verb 'query' and resource 'database' are explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises using before create/update/delete operations to discover IDs, and directs to query_map for maps and get_project_context for a full digest. Provides clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_mapARead-onlyIdempotent
Read-only: inspect maps. view selects what you get: "infos" lists the map tree from MapInfos.json (ids, names, folder parentIds — no mapId needed); "full" returns one complete MapNNN.json (dimensions, 6-layer tile data, events — can be large); "events" lists a map's events (with query, filters by name, case-insensitive); "event" returns one event by eventId (null if absent); "validate" lints a map (invalid tile IDs per layer, missing page terminators, transfers to map 0, Self Switch OFF where ON was likely meant) returning {issueCount, issues[]}; "ascii" renders the map as a character grid with event markers and a legend — the cheapest way to "see" a layout and pick coordinates, entirely offline. Fails with an error if the map file does not exist. For player-visible images use analyze_image instead.
| Name | Required | Description | Default |
|---|---|---|---|
| view | Yes | What to read; see the tool description for each view | |
| layer | No | view "ascii" only: tile layer to draw, 0=ground (default) or 2=upper decorations | |
| mapId | No | Map ID (required for every view except "infos"); map 1 is Map001.json | |
| query | No | view "events" only: case-insensitive substring filter on event names | |
| eventId | No | Event ID within the map (required for view "event") | |
| showEvents | No | view "ascii" only: overlay event markers (default true) | |
| showRegions | No | view "ascii" only: also return the region-ID layer as a second grid (default false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint and idempotentHint; description adds specifics like failure on missing file, offline nature of ascii view, and validation behavior, adding value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Efficient and front-loaded with 'Read-only: inspect maps.' Each sentence serves a purpose, but the description is somewhat dense; could be slightly shorter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters, 1 required, and no output schema, the description thoroughly explains each view's return format, failure cases, and even provides a cheap way to 'see' layout via ASCII. Complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While schema has 100% coverage, the description adds meaning by explaining what each view returns (e.g., 'full' returns dimensions and tile data, 'validate' returns issueCount and issues). This compensates for the lack of output schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a read-only tool to inspect maps, with specific verbs like 'inspect' and lists each view. It distinguishes itself from siblings like edit_map and generate_map by emphasizing read-only nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use for each view and mentions an alternative tool (analyze_image) for player-visible images. Could be more explicit about when not to use, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_videoA
Start or stop recording the live RPG Maker MV playtest canvas through the authenticated MCP bridge. action:"start" begins a silent WebM capture inside the game runtime; action:"stop" saves it under .mcp-cache/recordings/ and returns {path, bytes, mimeType, durationMs, name}. This captures only the game canvas, not the desktop or credentials. Requires the bridge plugin, a running bridge, and a connected playtest. Optional name, fps (default 30), and bitrateKbps (default 2500) control the artifact.
| Name | Required | Description | Default |
|---|---|---|---|
| fps | No | Capture frame rate, 1-60 (default 30) | |
| name | No | Safe filename prefix used when stopping | |
| action | Yes | Start a new capture or stop and save the active capture | |
| timeoutMs | No | How long to wait for start/stop result (defaults 15000/60000) | |
| bitrateKbps | No | Video bitrate in kbps, 250-10000 (default 2500) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the mutation profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false), yet the description adds real value: capture scope ('only the game canvas, not the desktop or credentials'), the output path, the returned payload shape, and required runtime preconditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences with no filler; purpose and the start/stop semantics are front-loaded, and the return payload and defaults follow the core intent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the description compensates by naming the returned fields and save location, and it lists the runtime prerequisites for a non-read-only operation. Minor gaps remain, such as behavior when a capture is already active or how timeoutMs interacts with the defaults.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all five parameters with ranges and defaults. The description restates name/fps/bitrate defaults but says nothing extra about timeoutMs, so it sits at the baseline for full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Start or stop recording the live RPG Maker MV playtest canvas') and scopes it precisely via the action enum. It is clearly distinguishable from siblings like take_screenshot or run_playtest.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the two modes and lists prerequisites (bridge plugin, running bridge, connected playtest). It does not explicitly contrast with the sibling take_screenshot, so the alternative-selection guidance stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_playtestA
Play the game headless from a script of steps and report what happened: does the door transfer, does the NPC say the right line, does the choice branch, is a tile blocked. Boots the project in Chromium with the real engine; no editor or running game needed, and project data is never changed (screenshots go to .mcp-cache/renders/). Steps by action: load {mapId,x,y,direction?,party?,level?,gold?,switches?,variables?,selfSwitches?,items?,equip?,encounters?} starts a fresh game there; startEvent {eventId} runs a map event until it shows text or goes idle; advanceText {maxMs?} presses OK until idle, stopping at choices or battle, and returns the lines shown; choose {index}; walk {direction,steps?} reports where the player ended or which tile blocked; press {button,times?}; wait {ms}; autoBattle {troopId?,canEscape?,canLose?,maxMs?} fights on auto until the battle ends; screenshot {name?}; eval {script} returns a JS expression evaluated in the game page. The result lists each step with ok, a finalState and page problems (errors, missing files). Runs can take minutes: send a progressToken to get progress notifications. Needs the optional playwright-core and a cached Chromium (npx playwright install chromium-headless-shell, or RPGMAKER_MCP_CHROMIUM).
| Name | Required | Description | Default |
|---|---|---|---|
| steps | Yes | The script, run in order. Fields per action are listed in the tool description. | |
| realtime | No | Play battles at real speed (default false: fast-forwarded, about 10-20x quicker) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, and the description adds genuinely non-obvious behavior: project data is never changed, screenshots land in .mcp-cache/renders/, runs can take minutes, a progressToken is needed for progress, and optional chromium/playwright prerequisites are required. This is exactly the added context annotations cannot carry, and it is consistent with (not contradictory to) the annotation set.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and safety/execution notes are front-loaded, and the dense semicolon-delimited action catalogue is information-dense rather than padded. The single long step sentence is heavy but each clause earns its place by defining a distinct action; it is appropriately sized for the tool's complexity, if somewhat unwieldy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite covering a complex, multi-action tool with no output schema, the description explains the result shape (each step with ok, a finalState, page problems such as errors and missing files), the prerequisites, and the timing/progress mechanisms. An agent has everything it needs to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description goes further by mapping which fields belong to which action (e.g. load {mapId,x,y,direction?,party?...}, advanceText {maxMs?}, walk {direction,steps?}), a correlation the schema's flat property list does not express. It adds real meaning for a polymorphic steps array, though it does not document every field exhaustively.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Play the game headless from a script of steps') and concretely frames the outcome ('report what happened'), even giving example assertions like door transfers, NPC lines, and choice branches. This clearly distinguishes it from siblings such as take_screenshot, record_video, and analyze_project.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives strong context for when to use it ('no editor or running game needed', headless Chromium boot) and enumerates the exact action vocabulary an agent must choose from. It stops short of naming alternatives or explicit when-not-to-use cases, so it is clear but not fully routing-aware.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_project_pathAIdempotent
Switch this server to a DIFFERENT RPG Maker MV project directory for all subsequent tool calls (session-wide side effect; persists until changed again or the server restarts). Validates that the path contains data/System.json and fails with an error otherwise, leaving the previous project active. Returns the new active path. Without this tool, the RPGMAKER_PROJECT_PATH environment variable set at startup applies.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path to an RPG Maker MV project root (the folder containing data/System.json and img/) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide idempotentHint=true, readOnlyHint=false, destructiveHint=false. The description adds behavioral details: session-wide side effect, path validation (checks for data/System.json), error behavior (fails leaving previous active), and return value (new active path). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences front-load the purpose, then side effect, then return/alternative. No wasted words; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no output schema), the description covers purpose, side effects, validation, return value, and the alternative (environment variable). No missing critical details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with a clear description. The description adds validation context (must contain data/System.json) and emphasizes absolute path, which enhances understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: switching to a different RPG Maker MV project directory. It specifies the action (switch), the resource (project directory), and distinguishes from the startup environment variable, making it unique among siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool (to change the project directory) and notes the alternative (environment variable at startup). It implies persistence until changed or restart, but doesn't explicitly mention when not to use it or compare with other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
take_screenshotA
Capture the current RPG Maker MV playtest frame through the authenticated MCP bridge and save it as a PNG under .mcp-cache/screenshots/. Returns {path, bytes, mimeType, name} so the image can be inspected or attached as QA evidence without shell commands. Requires manage_system actions install_bridge_plugin, bridge_start, and playtest first. Optional name becomes a safe filename prefix; each capture keeps a timestamp. manage_system {action:"bridge_screenshot"} remains available as a compatibility alias.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | mapId: with y, a normal screen view centred on this tile instead of the whole map | |
| y | No | ||
| name | No | Optional safe filename prefix, e.g. boss-room or collision-proof | |
| mapId | No | Render this map headless as the engine draws it, with no game running (PNG under .mcp-cache/renders/). Needs the optional playwright-core and a cached Chromium (npx playwright install chromium-headless-shell, or RPGMAKER_MCP_CHROMIUM). | |
| switches | No | mapId: switch IDs to turn ON first, to see later event pages | |
| runEvents | No | mapId: let autorun/parallel events run before the shot (default false) | |
| timeoutMs | No | How long to wait for the game response in milliseconds (default 15000) | |
| showEvents | No | mapId: draw event sprites (default true) | |
| showPlayer | No | mapId: draw the player (default: hidden for the whole map, shown for a view) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (which only declare readOnly/idempotent/destructive=false), the description discloses the save location, the exact return shape {path, bytes, mimeType, name}, and that each capture keeps a timestamp so repeated calls accumulate files — consistent with idempotentHint=false. It does not cover failure modes when the bridge is not running.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences with the core action and destination front-loaded, followed by prerequisites and then the alias. Every sentence carries information, though the alias sentence could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 9 optional parameters and no output schema, the description compensates by explaining the return object and naming conventions. The notable gap is that `mapId` switches the tool into a headless map-render mode (different output dir, no running game, Playwright dependency) that the description's 'requires playtest first' framing does not acknowledge.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 89%, so the schema already carries most parameter meaning. The description only adds that `name` is a filename prefix and that timestamps are appended — useful but marginal, and it never reconciles the `mapId` headless-render mode that writes to a different directory.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Capture the current RPG Maker MV playtest frame ... save it as a PNG') and names the destination directory. It is readily distinguishable from siblings like record_video (still frame) and manage_system, and it explicitly names the compatibility alias.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete prerequisites ('Requires manage_system actions install_bridge_plugin, bridge_start, and playtest first') and points to an alternative invocation path (bridge_screenshot alias). It does not, however, state when a still capture is preferable to record_video, so an agent still infers the choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_database_entryADestructiveIdempotent
Partially update an existing database entry: only the keys in fields are overwritten (arrays like traits/learnings/actions are replaced wholesale, not merged); the data file is written immediately and there is no undo, so fetch current values with query_database first if you may revert. Returns the full entry after the update. Fails with an error if the ID does not exist. Special append forms that do not need fields: common_events + appendCommand inserts one event command before the list terminator; troops + addEnemyId adds a member at an auto-computed battle position; troops + addPage inserts one battle-event page from a compact trigger. Troops and animations also support plain fields updates now (e.g. rename a troop, replace its members/pages, or relabel an animation). Class params in fields accept 8 seeds (expanded to full curves) or 8 arrays of 100 per-level values. Editing tilesets affects every map using them; malformed flags break passability project-wide.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ID of the entry to modify (must exist; find it with query_database) | |
| entity | Yes | Which database contains the entry | |
| fields | No | Subset of properties to overwrite, e.g. {"name": "Hero", "price": 250}. Not needed when using appendCommand/addEnemyId/addPage | |
| addPage | No | troops only: append a battle-event page without resending the others. when (at least one, ANDed): turn [a, b] = turn a + b*X (b 0: only turn a); enemyHpBelow [troopSlot from 0, pct]; actorHpBelow [actorId, pct]; switchId; turnEnd true. span battle|turn|moment (default battle). commands: event commands, e.g. from build_event_commands. position: page index to insert at. | |
| addEnemyId | No | troops only: enemy ID to append as a new member at an auto-computed screen position | |
| appendCommand | No | common_events only: one event command {code, indent, parameters} appended before the terminator. Common codes: 101+401=Show Text, 121=Control Switches, 122=Control Variables |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations: immediate write, no undo, replace-not-merge for arrays, error on nonexistent ID, full-entry return, and cross-cutting side effects (tilesets affect every map; malformed flags break passability project-wide). However, it conflicts mildly with idempotentHint=true, since appendCommand/addEnemyId/addPage are explicitly additive and would duplicate on repeat calls.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core partial-update and no-undo semantics, and every sentence carries weight for a 6-param, nested-object tool. It is dense to the point of being a wall of text, mixing core behavior with edge cases in one paragraph, which slightly hurts scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, it states the return ('the full entry after the update') and the failure mode (error if the ID does not exist), and covers all three special append modes plus entity-specific caveats. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the 3 baseline applies, but the description genuinely adds meaning: that `fields` is unnecessary with the append parameters, that appendCommand picks up build_event_commands output, and that class params accept 8 seeds or 8 arrays of 100 per-level values. This goes beyond restating the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource+scope: 'Partially update an existing database entry', with the partial/overwrite semantics spelled out (only keys in `fields` are overwritten; arrays replaced wholesale). An agent can immediately distinguish this from create_database_entry, delete_database_entry, and query_database without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use guidance ('fetch current values with query_database first if you may revert') and routes the special append workflows by entity ('common_events + appendCommand', 'troops + addEnemyId/addPage'). It never states a when-not-to-use condition (e.g. use create_database_entry for new entries), so it stops short of the top band.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
11 tool updates
v5.19.0- Changed
analyze_project4 fields changed- added
Input schema / properties / categoryAdded value: +{ + "description": "view \"balance\": analyse one category instead of all four (default \"all\")", + "enum": [ + "skills", + "weapons", + "armors", + "enemies", + "all" + ], + "type": "string" +} - added
Input schema / properties / expectedAdded value: +{ + "description": "view \"metrics\": what kind of space this map is meant to be, which sets the dead-space band (default \"exterior\")", + "enum": [ + "interior", + "dungeon", + "exterior" + ], + "type": "string" +} - added
Input schema / properties / thresholdSdAdded value: +{ + "description": "view \"balance\": how many standard deviations from its peers an entry must sit before it is flagged (default 2; raise to see only the worst)", + "type": [ + "number", + "string" + ] +} - changed
Input schema / properties / view / enumPrevious value: -[ - "overview", - "index", - "validate", - "graph", - "usage", - "explain", - "ast", - "plugins", - "critique", - "refactor", - "search" -]New value: +[ + "overview", + "index", + "validate", + "graph", + "usage", + "explain", + "ast", + "plugins", + "critique", + "metrics", + "balance", + "refactor", + "search" +]
- Added
build_event_commands - Changed
delete_database_entry2 fields changed- changed
Input schema / properties / entity / enumPrevious value: -[ - "actors", - "classes", - "skills", - "items", - "weapons", - "armors", - "enemies", - "states" -]New value: +[ + "actors", + "classes", + "skills", + "items", + "weapons", + "armors", + "enemies", + "states", + "troops", + "animations" +] - added
Input schema / properties / forceAdded value: +{ + "description": "Delete even though something still references it (default false)", + "type": "boolean" +}
- Changed
edit_map6 fields changed- changed
Input schema / properties / action / enumPrevious value: -[ - "fill_layer", - "set_display_names", - "organize_tree", - "connect", - "set_encounters" -]New value: +[ + "paint", + "repair_autotiles", + "fill_layer", + "set_display_names", + "organize_tree", + "connect", + "set_encounters" +] - added
Input schema / properties / cellsAdded value: +{ + "description": "action \"paint\": [[x, y], ...] cells to paint (or give rect)", + "items": { + "items": { + "type": "integer" + }, + "maxItems": 2, + "minItems": 2, + "type": "array" + }, + "type": "array" +} - changed
Input schema / properties / layer / descriptionPrevious value: -"action \"fill_layer\": layer index 0-5"New value: +"actions \"paint\", \"fill_layer\": layer 0-3 tiles, 5 regions (fill_layer also 4)" - changed
Input schema / properties / mapId / descriptionPrevious value: -"action \"fill_layer\": map to modify"New value: +"actions \"paint\", \"repair_autotiles\", \"fill_layer\": map to modify" - added
Input schema / properties / rectAdded value: +{ + "description": "action \"paint\": {x, y, width, height} rectangle to paint (or give cells)", + "properties": { + "height": { + "type": "integer" + }, + "width": { + "type": "integer" + }, + "x": { + "type": "integer" + }, + "y": { + "type": "integer" + } + }, + "type": "object" +} - changed
Input schema / properties / tileId / descriptionPrevious value: -"action \"fill_layer\": tile ID to write into every cell (0 = clear)"New value: +"actions \"paint\", \"fill_layer\": tile ID (0 = clear); on layer 5 a region id 0-255"
- Changed
generate_map6 fields changed- added
Input schema / properties / keepPropsAdded value: +{ + "description": "mode \"semantic\" with a mined templateId: paint the original decorations even onto a different tileset (they may not exist there)", + "type": "boolean" +} - added
Input schema / properties / lockedAdded value: +{ + "description": "mode \"semantic\": put a key and a locked door on the path (default true when there are 4+ rooms)", + "type": "boolean" +} - added
Input schema / properties / loopAdded value: +{ + "description": "mode \"semantic\": add one extra corridor so the map has a loop instead of being a tree (default true)", + "type": "boolean" +} - changed
Input schema / properties / mode / enumPrevious value: -[ - "blank", - "themed", - "procedural", - "batch", - "duplicate", - "template" -]New value: +[ + "blank", + "themed", + "procedural", + "batch", + "duplicate", + "template", + "semantic" +] - added
Input schema / properties / roomsAdded value: +{ + "description": "mode \"semantic\": rooms on the critical path (default 5)", + "type": [ + "number", + "string" + ] +} - added
Input schema / properties / sideRoomsAdded value: +{ + "description": "mode \"semantic\": dead-end rooms hung off the path, the first holding treasure (default 2)", + "type": [ + "number", + "string" + ] +}
- Added
insert_event_commands - Changed
manage_system30 fields changed- changed
Input schema / properties / action / enumPrevious value: -[ - "get", - "set_title", - "name_switch", - "name_variable", - "set_starting_position" -]New value: +[ + "get", + "set_title", + "name_switch", + "name_variable", + "set_starting_position", + "create_plugin", + "scaffold_project", + "playtest", + "open_editor", + "mine_templates", + "install_bridge_plugin", + "bridge_start", + "bridge_stop", + "bridge_status", + "bridge_telemetry", + "bridge_command", + "take_screenshot", + "bridge_screenshot", + "export_web" +] - added
Input schema / properties / authorAdded value: +{ + "description": "create_plugin: @author name", + "type": "string" +} - added
Input schema / properties / bodyAdded value: +{ + "description": "create_plugin: custom JS body; omit for a safe generated skeleton", + "type": "string" +} - added
Input schema / properties / buttonAdded value: +{ + "description": "bridge_command \"press_button\": safe RPG Maker input to press", + "enum": [ + "ok", + "cancel", + "menu", + "up", + "down", + "left", + "right" + ], + "type": "string" +} - added
Input schema / properties / commandAdded value: +{ + "description": "bridge_command: which safe instruction to send to the running game", + "enum": [ + "ping", + "get_state", + "reload_map", + "reload_database", + "capture_screenshot", + "teleport_player", + "interact", + "press_button" + ], + "type": "string" +} - added
Input schema / properties / commandsAdded value: +{ + "description": "create_plugin: plugin command names to document (@command) and wire a pluginCommand handler stub for", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / descriptionAdded value: +{ + "description": "create_plugin: @plugindesc short description", + "type": "string" +} - added
Input schema / properties / destPathAdded value: +{ + "description": "scaffold_project: directory for the NEW project (must be empty of a project). title/mapId/x/y set the new game's title and start position", + "type": "string" +} - added
Input schema / properties / directionAdded value: +{ + "description": "bridge_command \"teleport_player\": facing after the transfer (2 down, 4 left, 6 right, 8 up)", + "type": [ + "number", + "string" + ] +} - added
Input schema / properties / durationMsAdded value: +{ + "description": "bridge_command \"press_button\": hold duration in milliseconds (default 80, range 30-1000)", + "type": [ + "number", + "string" + ] +} - added
Input schema / properties / fileAdded value: +{ + "description": "bridge_command \"reload_database\": the data file to re-read, e.g. \"Skills.json\"", + "type": "string" +} - added
Input schema / properties / helpAdded value: +{ + "description": "create_plugin: @help text (multi-line allowed)", + "type": "string" +} - added
Input schema / properties / installAdded value: +{ + "description": "playtest/open_editor: RPG Maker MV install root (contains nwjs-win/ and RPGMV.exe); defaults to RPGMAKER_MV_INSTALL or the standard Steam install", + "type": "string" +} - added
Input schema / properties / limitAdded value: +{ + "description": "bridge_telemetry: return at most this many of the most recent frames. mine_templates: keep at most this many layouts, largest maps first", + "type": [ + "number", + "string" + ] +} - added
Input schema / properties / minDistinctTilesAdded value: +{ + "description": "mine_templates: a map needs at least this many distinct tiles to count as content rather than scratch (default 10)", + "type": [ + "number", + "string" + ] +} - changed
Input schema / properties / name / descriptionPrevious value: -"name_switch/name_variable: descriptive label, e.g. \"BridgeRepaired\""New value: +"name_switch/name_variable: descriptive label. create_plugin: the plugin name (bare token — letters/digits/_/-, becomes js/plugins/<name>.js)" - added
Input schema / properties / outDirAdded value: +{ + "description": "export_web: folder for the HTML5 build, outside the project (absolute, or relative to it). It must be new, empty, or a previous export_web folder; <outDir>.zip is written beside it unless zip:false. Copies js, fonts, data and assets, keeps encrypted assets as they are, never copies saves or backups. Returns file counts, bytes and the screen size for an itch.io embed.", + "type": "string" +} - added
Input schema / properties / paramsAdded value: +{ + "description": "create_plugin: @param definitions [{name, type?, desc?, default?}] surfaced in js/plugins.js", + "items": { + "type": "object" + }, + "type": "array" +} - added
Input schema / properties / peekAdded value: +{ + "description": "bridge_telemetry: leave the frames in the buffer instead of consuming them", + "type": "boolean" +} - added
Input schema / properties / portAdded value: +{ + "description": "bridge_start/install_bridge_plugin: loopback port for the live bridge (default 32123, or RPGMV_BRIDGE_PORT)", + "type": [ + "number", + "string" + ] +} - added
Input schema / properties / pruneAdded value: +{ + "description": "export_web: drop img/audio/movies files no data or script references (default false; assets a plugin names only at runtime would be lost)", + "type": "boolean" +} - added
Input schema / properties / screenshotNameAdded value: +{ + "description": "take_screenshot: optional safe filename prefix (letters, numbers, _ and -, up to 64 characters)", + "type": "string" +} - added
Input schema / properties / sourcePathAdded value: +{ + "description": "scaffold_project: a blank-project (NewData) folder to clone; defaults to the RPGMAKER_MV_INSTALL env var or the standard Steam install", + "type": "string" +} - added
Input schema / properties / statusAdded value: +{ + "description": "create_plugin: enable the plugin in js/plugins.js (default true)", + "type": "boolean" +} - added
Input schema / properties / telemetryIntervalAdded value: +{ + "description": "install_bridge_plugin: frames between player-position frames (default 30; 60 = once per second)", + "type": [ + "number", + "string" + ] +} - added
Input schema / properties / testAdded value: +{ + "description": "playtest: run in playtest/test mode (default true; false runs it as a normal launch)", + "type": "boolean" +} - added
Input schema / properties / timeoutMsAdded value: +{ + "description": "bridge_command/take_screenshot: how long to wait for the answer (default 8000, screenshots 15000)", + "type": [ + "number", + "string" + ] +} - added
Input schema / properties / typesAdded value: +{ + "description": "bridge_telemetry: only return these frame types, e.g. [\"exception\",\"log\"]", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / waitAdded value: +{ + "description": "bridge_command: wait for the game to answer (default true; false is fire-and-forget)", + "type": "boolean" +} - added
Input schema / properties / zipAdded value: +{ + "description": "export_web: also write <outDir>.zip with index.html at its root (default true)", + "type": "boolean" +}
- Added
record_video - Added
run_playtest - Added
take_screenshot - Changed
update_database_entry3 fields changed- added
Input schema / properties / addPageAdded value: +{ + "additionalProperties": false, + "description": "troops only: append a battle-event page without resending the others. when (at least one, ANDed): turn [a, b] = turn a + b*X (b 0: only turn a); enemyHpBelow [troopSlot from 0, pct]; actorHpBelow [actorId, pct]; switchId; turnEnd true. span battle|turn|moment (default battle). commands: event commands, e.g. from build_event_commands. position: page index to insert at.", + "properties": { + "commands": { + "items": { + "type": "object" + }, + "type": "array" + }, + "position": { + "type": "integer" + }, + "span": { + "enum": [ + "battle", + "turn", + "moment" + ], + "type": "string" + }, + "when": { + "additionalProperties": false, + "properties": { + "actorHpBelow": { + "items": { + "type": "integer" + }, + "maxItems": 2, + "minItems": 2, + "type": "array" + }, + "enemyHpBelow": { + "items": { + "type": "integer" + }, + "maxItems": 2, + "minItems": 2, + "type": "array" + }, + "switchId": { + "type": "integer" + }, + "turn": { + "items": { + "type": "integer" + }, + "maxItems": 2, + "minItems": 2, + "type": "array" + }, + "turnEnd": { + "type": "boolean" + } + }, + "type": "object" + } + }, + "required": [ + "when" + ], + "type": "object" +} - changed
Input schema / properties / entity / enumPrevious value: -[ - "actors", - "classes", - "skills", - "items", - "weapons", - "armors", - "enemies", - "states", - "tilesets", - "common_events", - "troops" -]New value: +[ + "actors", + "classes", + "skills", + "items", + "weapons", + "armors", + "enemies", + "states", + "tilesets", + "common_events", + "troops", + "animations" +] - changed
Input schema / properties / fields / descriptionPrevious value: -"Subset of properties to overwrite, e.g. {\"name\": \"Hero\", \"price\": 250}. Not needed when using appendCommand/addEnemyId"New value: +"Subset of properties to overwrite, e.g. {\"name\": \"Hero\", \"price\": 250}. Not needed when using appendCommand/addEnemyId/addPage"
2 tool updates
v5.12.2- Added
analyze_project - Changed
manage_map_event3 fields changed- changed
Input schema / properties / action / enumPrevious value: -[ - "create", - "update", - "delete", - "add_command", - "populate" -]New value: +[ + "create", + "update", + "convert", + "delete", + "add_command", + "populate" +] - added
Input schema / properties / kindAdded value: +{ + "description": "action \"convert\": what to turn the existing event into", + "enum": [ + "merchant", + "inn", + "sign" + ], + "type": "string" +} - added
Input schema / properties / optionsAdded value: +{ + "description": "action \"convert\": kind-specific settings — merchant {goods|items, greeting?}, inn {cost?}, sign {text}", + "type": "object" +}
1 tool update
v5.8.1- Changed
generate_map2 fields changed- changed
Input schema / properties / templateId / descriptionPrevious value: -"mode \"template\" only: bundled template ID from get_project_context detail \"templates\""New value: +"mode \"template\": bundled template ID. mode \"procedural\": OPTIONAL — force a specific template ID (from get_project_context detail \"templates\") instead of auto-picking by theme+size" - added
Input schema / properties / useTemplateAdded value: +{ + "description": "procedural: when true (default), clone an RTP template for themes that have one (town, dungeon, interior, etc.) instead of generating procedurally. Set false to force procedural generation even when templates exist", + "type": "boolean" +}
109 tool updates
v5.8.0- Removed
add_common_event_command - Removed
add_enemy_to_troop - Removed
add_event_command - Added
analyze_image - Removed
analyze_screenshot - Removed
analyze_tileset_image - Removed
connect_maps - Removed
create_armor - Removed
create_boss_enemy - Removed
create_boss_event - Removed
create_buff_skill - Removed
create_chest - Removed
create_class - Removed
create_common_event - Removed
create_damage_skill - Added
create_database_entry - Removed
create_enemy - Removed
create_healing_skill - Removed
create_inn - Removed
create_item - Removed
create_map - Removed
create_map_event - Removed
create_npc - Removed
create_puzzle_switch - Removed
create_random_encounter_troop - Removed
create_shop - Removed
create_skill - Removed
create_state - Removed
create_state_skill - Removed
create_teleport_event - Removed
create_troop - Removed
create_weapon - Removed
delete_actor - Removed
delete_class - Added
delete_database_entry - Removed
delete_enemy - Removed
delete_item - Removed
delete_map_event - Removed
delete_skill - Removed
delete_state - Removed
duplicate_map - Added
edit_map - Removed
fill_map_layer - Added
generate_map - Removed
generate_map_batch - Removed
generate_map_v3 - Removed
get_all_skills - Removed
get_animation - Removed
get_animations - Removed
get_armors - Removed
get_class - Removed
get_classes - Removed
get_common_events - Removed
get_enemies - Removed
get_enemy - Removed
get_game_title - Removed
get_items - Removed
get_map - Removed
get_map_event - Removed
get_map_events - Removed
get_map_infos - Changed
get_project_context4 fields changed- added
Input schema / properties / categoryAdded value: +{ + "description": "detail \"templates\": filter by template category", + "type": "string" +} - added
Input schema / properties / detailAdded value: +{ + "description": "How much and what kind of context; see the tool description. Default \"full\"", + "enum": [ + "full", + "summary", + "assets", + "tileset", + "templates" + ], + "type": "string" +} - added
Input schema / properties / themeAdded value: +{ + "description": "detail \"templates\": filter by template theme", + "type": "string" +} - added
Input schema / properties / tilesetIdAdded value: +{ + "description": "detail \"tileset\": which tileset to categorize", + "type": [ + "number", + "string" + ] +}
- Removed
get_project_summary - Removed
get_skill - Removed
get_skills - Removed
get_state - Removed
get_states - Removed
get_switches - Removed
get_system - Removed
get_tile_ids_for_tileset - Removed
get_tileset - Removed
get_tilesets - Removed
get_troop - Removed
get_troops - Removed
get_variables - Removed
get_weapons - Added
manage_map_event - Added
manage_system - Removed
organize_map_tree - Removed
populate_map_events - Added
query_database - Added
query_map - Removed
read_screenshot - Removed
render_map_ascii - Removed
scan_project_assets - Removed
search_actors - Removed
search_classes - Removed
search_enemies - Removed
search_items - Removed
search_map_events - Removed
search_skills - Removed
search_states - Removed
set_map_display_names - Changed
set_project_path1 field changed- changed
Input schema / properties / path / descriptionPrevious value: -"Absolute path to the new RPG Maker MV project directory"New value: +"Absolute path to an RPG Maker MV project root (the folder containing data/System.json and img/)"
- Removed
set_switch_name - Removed
set_variable_name - Removed
update_actor - Removed
update_class - Removed
update_common_event - Added
update_database_entry - Removed
update_enemy - Removed
update_game_title - Removed
update_item - Removed
update_map_event - Removed
update_skill - Removed
update_starting_position - Removed
update_state - Removed
update_tileset - Removed
validate_map
99 tool updates
v1.0.0- First observed
add_common_event_command - First observed
add_enemy_to_troop - First observed
add_event_command - First observed
analyze_screenshot - First observed
analyze_tileset_image - First observed
connect_maps - First observed
create_armor - First observed
create_boss_enemy - First observed
create_boss_event - First observed
create_buff_skill - First observed
create_chest - First observed
create_class - First observed
create_common_event - First observed
create_damage_skill - First observed
create_enemy - First observed
create_healing_skill - First observed
create_inn - First observed
create_item - First observed
create_map - First observed
create_map_event - First observed
create_npc - First observed
create_puzzle_switch - First observed
create_random_encounter_troop - First observed
create_shop - First observed
create_skill - First observed
create_state - First observed
create_state_skill - First observed
create_teleport_event - First observed
create_troop - First observed
create_weapon - First observed
delete_actor - First observed
delete_class - First observed
delete_enemy - First observed
delete_item - First observed
delete_map_event - First observed
delete_skill - First observed
delete_state - First observed
duplicate_map - First observed
fill_map_layer - First observed
generate_map_batch - First observed
generate_map_v3 - First observed
get_all_skills - First observed
get_animation - First observed
get_animations - First observed
get_armors - First observed
get_class - First observed
get_classes - First observed
get_common_events - First observed
get_enemies - First observed
get_enemy - First observed
get_game_title - First observed
get_items - First observed
get_map - First observed
get_map_event - First observed
get_map_events - First observed
get_map_infos - First observed
get_project_context - First observed
get_project_summary - First observed
get_skill - First observed
get_skills - First observed
get_state - First observed
get_states - First observed
get_switches - First observed
get_system - First observed
get_tile_ids_for_tileset - First observed
get_tileset - First observed
get_tilesets - First observed
get_troop - First observed
get_troops - First observed
get_variables - First observed
get_weapons - First observed
organize_map_tree - First observed
populate_map_events - First observed
read_screenshot - First observed
render_map_ascii - First observed
scan_project_assets - First observed
search_actors - First observed
search_classes - First observed
search_enemies - First observed
search_items - First observed
search_map_events - First observed
search_skills - First observed
search_states - First observed
set_map_display_names - First observed
set_project_path - First observed
set_switch_name - First observed
set_variable_name - First observed
update_actor - First observed
update_class - First observed
update_common_event - First observed
update_enemy - First observed
update_game_title - First observed
update_item - First observed
update_map_event - First observed
update_skill - First observed
update_starting_position - First observed
update_state - First observed
update_tileset - First observed
validate_map
TDQS
Scored across 18 tools
Most tools target clearly distinct resources/actions (generate_map vs edit_map vs manage_map_event vs query_map; create/update/delete/query_database_entry), and descriptions explicitly cross-reference to steer selection. Some genuine overlap remains: manage_system is a catch-all that duplicates take_screenshot (bridge_screenshot alias) and offers a live 'playtest' action alongside the separate run_playtest tool, and analyze_project 'validate' overlaps query_map 'validate'.
All 18 tools use snake_case with a predictable verb_noun pattern (generate_map, edit_map, query_database, create_database_entry, run_playtest, take_screenshot). Minor generic verbs (manage_system, manage_map_event) still fit the pattern without breaking it, and no camelCase/mixed conventions appear.
18 tools is well within a reasonable range for a full RPG Maker MV authoring, analysis, and playtest server, and each tool maps to a real capability. It leans slightly heavy because a few tools (manage_system, generate_map, analyze_project) are mega-tools with many sub-actions rather than a flatter surface.
Coverage is strong: full CRUD for database entries, map generate/edit/event/query, project context, analysis, headless and live playtesting, screenshots and video. Minor gaps exist — notably no tool to delete a map, and tilesets/animations must be authored in the editor rather than created through the MCP surface.
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP Server for Slima - AI Writing IDE for Novel Authors with AI Beta Reader.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to control Unreal E…
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables AI agents to directly manipulate RPG Maker MZ projects through natural language commands, allowing creation and modification of game assets like items, weapons, enemies, maps, and plugins without manually editing game files.36140 npm2MIT
- AlicenseCqualityDmaintenanceEnables AI models to develop and automate RPG Maker MZ projects by creating maps, events, and plugins through natural language commands. It provides comprehensive tools for database management, asset integrity checks, and direct map tile manipulation.2810 npm1ISC
- FlicenseCqualityDmaintenanceA Model Context Protocol server that enables management of RPG Maker MZ and MV project data, including actors, items, maps, and events. It allows users to create, update, and search game assets through natural language integration with MCP-compatible clients.371-
- AlicenseNot gradedqualityCmaintenanceA local, file-based bridge that lets an AI client read, draft, validate, and safely write content into an RPG Maker MV project.2MIT