Skip to main content
Glama

🎮 RPG Maker MV Ultimate

An AI copilot that builds, understands and watches your RPG Maker MV game

npm downloads CI MCP Registry node license

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 start

MCP 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 maps

Works 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"| C

The 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.

mode: "procedural" (default)

mode: "semantic"

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 seed → same map

Same seed → same map, and the key is always reachable before the door it opens

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 · forest town village castle dungeon cave beach desert swamp ruins interior snow harbor volcano sewer fortress magic_forest magic_interior space_interior space_exterior world

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 markers naming the cell of every mission role, which is where to put events with manage_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 pass peek.

  • ♻️ Hot reload — reload_map re-reads the current MapXXX.json and 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 rebuilding Spriteset_Map by hand. reload_database re-reads one data file; System.json and Tilesets.json need 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 allowlisted interact command and fixed-button press_button input—there is still no arbitrary script or eval command.

🔒 Security

The plugin returns before anything else runs unless the game is under NW.js and was launched with a test argument. A deployed build a player double-clicks never reaches the socket code, or even require('fs').

It checks every argument rather than only argv[0] the way Utils.isOptionValid does, because playtest passes the project path first. So a deployed build deliberately launched with a literal test argument would get past the guard — and then find no handshake file, and never connect.

The server binds 127.0.0.1 only, refuses any upgrade carrying a browser Origin (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 eval primitive.

🔍 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

overview

Call this first. Counts, health summary, maps unreachable from the start

validate

Every consistency problem at once — see below

explain

Why does this never happen? e.g. "Switch 12 is gated in 3 places but never set ON"

usage

Every event, common event and troop that touches a switch/variable/item, with read-write roles

graph

The map transfer network and what is reachable

ast

One event's logic as a readable tree

plugins

What plugins the project uses, their parameters and commands

critique

A designer's opinion on one map: dead space, clutter, event spread, monotony

metrics

The same map measured — see below

balance

Database entries that are out of line with their peers — see below

refactor

Command sequences copy-pasted across events, worth extracting into a Common Event

search

Find things by meaning across names, dialogue and descriptions

index

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

build_event_commands

Read-only MV dialogue, choices, conditions, switches, variables, transfers, common-event, flow, and plugin-command builders

insert_event_commands

Validated insertion into map/common/troop event lists, with before/after previews and safe nested boundaries

query_database

List / get by ID / search any database (actors, classes, skills, items, weapons, armors, enemies, states, troops, tilesets, common events, animations)

create_database_entry

Create entries, with presets: damage_skill, healing_skill, buff_skill, state_skill, boss_enemy, encounter_troop

update_database_entry

Partial updates (incl. troops & animations); append commands to common events; add enemies to troops

delete_database_entry

Delete entries with reference-breakage warnings

query_map

Map tree, full map data, events, single event, lint, offline ASCII render

generate_map

Knowledge-driven, semantic, procedural, blank, themed, template, batch or duplicate

edit_map

Fill tile layers, set display names, organize the map tree, connect two maps, set encounters

manage_map_event

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

manage_system

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

take_screenshot

Capture and name a live playtest PNG through the authenticated MCP bridge, or with mapId render a map headless as the engine draws it, no game running

run_playtest

Play a script of steps headless (load, start an event, read its text, choose, walk, battle, screenshot) and report what happened

record_video

Start or stop a named live playtest WebM recording through the authenticated MCP bridge

analyze_project

The read-only intelligence layer above

get_project_context

Project digest, asset index, per-tileset tile IDs, bundled-template catalog

set_project_path

Switch projects at runtime

analyze_image

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: true to 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

RPGMAKER_PROJECT_PATH

recommended

The project folder (the one with data/ and js/). Optional — set_project_path works at runtime

RPGMAKER_MV_INSTALL

for playtest

Engine install root, for playtest / open_editor / scaffold_project. Defaults to the standard Steam path

RPGMV_BRIDGE_PORT

optional

Loopback port for the live bridge (default 32123)

RPGMV_BACKUP_KEEP

optional

Backups kept per file (default 10)

RPGMV_LEGACY_TOOLS

optional

1 also advertises the 101 legacy tool names

RPGMAKER_MCP_CHROMIUM

optional

Chromium executable for headless renders and run_playtest. Without it the newest browser in the Playwright cache is used (npx playwright install chromium-headless-shell). Headless tools also need the optional playwright-core dependency.

RPGMV_TOOLSET

optional

Advertise only some tool groups, e.g. events,media. core (project, database, maps, events, system, analysis) is always on; the others are events (build/insert event commands), mapgen (generate_map) and media (screenshot, video, image analysis, headless playtest). Unset or all lists everything. core alone is about 11k tokens instead of 18k.

VISION_API_URL

to enable vision

Base URL of an OpenAI-compatible vision endpoint. Unset = vision disabled

VISION_API_KEY

optional

Bearer token; only sent when set

VISION_MODEL

optional

Model name (default meta/llama-3.2-90b-vision-instruct)

VISION_API_PATH

optional

Endpoint path (default /v1/chat/completions)

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 start

Works 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-mcp

Also listed in awesome-claude-skills.

📚 Knowledge base

File

Content

tile-ids.json

Tile ID ranges, autotile formula, sheet descriptions, layer meanings

passage-flags.json

Flag bits, common flags, passage check logic

event-commands.json

~140 event command codes with parameter schemas

enums.json

Scope, occasion, hitType, damageType, restriction, and the rest

trait-effect-codes.json

Trait codes 11-64, effect codes 11-45

database-schemas.json

Full schemas for every MV data type

image-paths.json

img/ directories, tileset slots, naming conventions

map-templates.json

Index of the 106 bundled reference maps

stamps.json

Mined multi-tile object stamps (trees, props) per tileset

maps/

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.

  • balance compares 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 mode

Where

What

src/server.ts

Tool handlers and MCP transport

src/toolDefinitions.ts + src/router.ts

The 13-tool surface and its routing

src/tools/*

Per-domain CRUD

src/utils/mapGenerator.ts

Template cloning and procedural generation

src/utils/graphGenerator.ts + src/utils/materialize.ts

Mission graphs and the semantic compiler

src/bridge/*

The loopback WebSocket and the in-game plugin

src/intel/*

The read-only layer behind analyze_project

knowledge/

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.

DiegoLopez0208/RpgMakerMVUltimate-MCP MCP server

MIT · Built for RPG Maker MV

Available Tools

18 tools
analyze_imageA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoai = Vision API on a project file; grid/colors = offline analysis of a provided base64 PNG. Default "ai"
promptNomode "ai": custom analysis question (default: thorough RPG-Maker-specific analysis)
base64PNGNomodes "grid"/"colors": raw base64 PNG data (no data: URL prefix)
imagePathNomode "ai": image path RELATIVE to the project root, e.g. "img/tilesets/Outside.png"; paths outside the project are rejected
resizeMaxNomode "ai": max width in px before upload (default 1024; lower = fewer tokens)

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_projectA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoviews "usage"/"explain": numeric id of the switch/variable/map/entity to inspect
kindNoview "usage": what kind of entity `id` refers to
pageNoview "ast": which page of the event (0-based, default 0)
viewNoWhich lens to apply (default "overview")
limitNoview "search": max results (default 20)
mapIdNoview "ast": the map holding the event to parse
queryNoview "search": free-text query, e.g. "the blacksmith", "dark forest"
minLenNoview "refactor": minimum shared command-run length to report (default 4)
targetNoview "explain": what `id` refers to (default "switch")
eventIdNoview "ast": the event on `mapId` to parse
categoryNoview "balance": analyse one category instead of all four (default "all")
expectedNoview "metrics": what kind of space this map is meant to be, which sets the dead-space band (default "exterior")
severityNoview "validate": keep only issues of this severity
thresholdSdNoview "balance": how many standard deviations from its peers an entry must sit before it is flagged (default 2; raise to see only the worst)
commonEventIdNoview "ast": parse this common event instead of a map event

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness2/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_commandsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNo
yNo
panNo
fadeNo
kindYes
nameNocontrol_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.
statNochange_actor: hp takes allowDeath; exp/level take showLevelUp; state takes stateId and remove.
textNoplugin_command: full MV command string, e.g. "DoorCtl open 1".
waitNoWait for the effect, animation, balloon or move route to finish (move_route default true).
wrapNoshow_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.
blendNo
colorNo
endIdNocontrol_switch/control_variable: inclusive final ID; defaults to the starting ID.
goodsNoshop_processing: goods in order; omit price to use the database price.
linesNoshow_text: message lines. MV does not wrap; long lines are warned about unless wrap is set.
mapIdNo
pitchNo
powerNo
scopeNocontrol_switch: switch requires switchId; self_switch requires name A-D.
speedNo
stepsNomove_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.
valueNocontrol_switch: default on.
actionNoflow: wait requires frames; label/jump_to_label require name.
amountNochange_gold/change_items/change_actor hp|mp|exp|level: constant amount. Give amount or amountVariableId.
effectNoscreen_effect. tint: color [r,g,b,gray] -255..255; flash: color [r,g,b,strength] 0..255; shake: power, speed 1-9.
framesNo
indentNoBase indentation, default 0. Nested branch bodies are rebased without mutating their inputs.
itemIdNo
originNo
removeNochange_party_member, change_actor state, change_enemy_state: remove instead of add.
repeatNomove_route: loop the route. Default false.
scaleXNo
scaleYNo
volumeNo
actorIdNochange_party_member/name_input: actor ID. change_actor: actor ID, 0 = entire party (or use actorVariableId).
canLoseNo
channelNoplay_audio.
choicesNo
opacityNo
operandNocontrol_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.
stateIdNo
troopIdNobattle_processing: give troopId, troopVariableId, or randomEncounter: true.
branchesNoshow_choices: one command fragment per choice. Omit for empty branches.
decreaseNoSubtract instead of add. Default false.
durationNoscreen_effect: frames, default 60.
faceNameNoshow_text: face image basename, default empty.
itemTypeNochange_items, default item.
positionNoshow_text: top/middle/bottom; show_choices: left/middle/right.
switchIdNo
balloonIdNo1-15 as in the editor list (1 exclamation).
canEscapeNo
conditionNoconditional_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.
directionNo
faceIndexNoshow_text: face slot 0-7, default 0.
maxLengthNoname_input: 1-16, default 8.
operationNo
pictureIdNoshow_picture/erase_picture: slot 1-100.
skippableNomove_route: skip a step that cannot be performed. Default false.
winBranchNobattle_processing: result branches, only when canEscape or canLose.
wrapWidthNoshow_text: override the wrap width in characters.
allowDeathNo
backgroundNoText/choice window background.
cancelTypeNoshow_choices: -1 disables cancel; -2 or choices.length selects the separate cancel branch; otherwise a zero-based choice index.
elseBranchNo
enemyIndexNoTroop slot from 0; change_enemy_state also accepts -1 for the entire troop.
initializeNochange_party_member: reset the actor when adding.
loseBranchNo
thenBranchNo
variableIdNo
animationIdNo
characterIdNoshow_animation/show_balloon/move_route: -1 player, 0 this event (default), n map event n.
defaultTypeNoshow_choices: selected choice index, or -1 for none.
designationNotransfer_player/show_picture: whether the coordinates are literal values or variable IDs.
showLevelUpNo
cancelBranchNoshow_choices: commands for a separate cancel branch.
escapeBranchNo
includeEquipNochange_items weapon/armor: also remove equipped copies.
purchaseOnlyNo
commonEventIdNo
actorVariableIdNo
randomEncounterNo
troopVariableIdNo
amountVariableIdNoUse this variable's value as the amount.

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesEntry 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
entityNoWhich database receives the new entry. Optional when preset is given (the preset implies it)
presetNoRecipe for common content; see the tool description for each preset's required data fields. Omit for a raw entry

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_entryA
DestructiveIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesID of the entry to delete (never skill 1/2 or state 1)
forceNoDelete even though something still references it (default false)
entityYesWhich database contains the entry to delete

TDQS

A4.4/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_mapA
DestructiveIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
posANoaction "connect": transfer event position on map A {x, y, trigger} (trigger 1=walk-on default, 0=action button for doors)
posBNoaction "connect": transfer event position on map B {x, y, trigger}
rectNoaction "paint": {x, y, width, height} rectangle to paint (or give cells)
cellsNoaction "paint": [[x, y], ...] cells to paint (or give rect)
layerNoactions "paint", "fill_layer": layer 0-3 tiles, 5 regions (fill_layer also 4)
mapIdNoactions "paint", "repair_autotiles", "fill_layer": map to modify
namesNoaction "set_display_names": [{mapId, name}] — name is what the player sees on map entry
actionYesWhich edit to perform; see the tool description
mapIdANoaction "connect": first map ID
mapIdBNoaction "connect": second map ID
tileIdNoactions "paint", "fill_layer": tile ID (0 = clear); on layer 5 a region id 0-255
foldersNoaction "organize_tree": [{mapId, parentId}] — parentId 0 means root level
encountersNoaction "set_encounters": [{troopId, weight?, regionSet?}] random-battle entries; troopId must exist (create via create_database_entry "troops")
encounterStepNoaction "set_encounters": average steps between random battles (default 30)

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
loopNomode "semantic": add one extra corridor so the map has a loop instead of being a tree (default true)
modeNoWhich generator to use; see the tool description. Default "procedural"
nameNoInternal map name for the editor tree (required for mode "duplicate")
noteNoFree-form note field for plugin metadata
seedNoprocedural/batch: random seed for reproducible output (omit for random; returned in the result)
batchNomode "batch" only: one spec per map [{key, name, theme, width, height, tilesetId, seed, parentId}]; key is echoed back to match returned mapIds
roomsNomode "semantic": rooms on the critical path (default 5)
themeNoRequired 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
widthNoMap width in tiles (defaults: blank/themed 17, procedural 30; template uses the template's size)
heightNoMap height in tiles (defaults: blank/themed 13, procedural 25)
lockedNomode "semantic": put a key and a locked door on the path (default true when there are 4+ rooms)
bgmNameNoAudio file from audio/bgm/ to autoplay on entry
parentIdNoMap tree folder to nest the new map under (0 = root)
addEventsNoprocedural: also place themed NPCs/chests/bosses/transfers (default true)
keepPropsNomode "semantic" with a mined templateId: paint the original decorations even onto a different tileset (they may not exist there)
sideRoomsNomode "semantic": dead-end rooms hung off the path, the first holding treasure (default 2)
tilesetIdNoTileset 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
encountersNoprocedural 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)
keepEventsNomode "template" only: also copy the template's events (default true)
templateIdNomode "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
displayNameNoLocation name briefly shown to the player on entry
sourceMapIdNomode "duplicate" only: existing map ID to copy (unchanged by the operation)
useTemplateNoprocedural: 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
enterableHousesNoprocedural 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

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_contextA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
themeNodetail "templates": filter by template theme
detailNoHow much and what kind of context; see the tool description. Default "full"
categoryNodetail "templates": filter by template category
tilesetIdNodetail "tileset": which tileset to categorize

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
mapIdNomap_event target map ID.
dryRunNoPreview the validated change without writing. Default false.
targetNoDefaults to map_event.
eventIdNomap_event target event ID.
troopIdNotroop_page target troop ID.
verboseNoInclude the full before/after command lists in the result. Default false.
commandsYesA complete fragment, typically returned by build_event_commands. A supplied final root terminator is normalized; the target always retains exactly one.
positionNoZero-based insertion index in the existing command list. Out-of-range or unsafe boundaries are rejected.
pageIndexNomap_event/troop_page: zero-based page, default 0.
commonEventIdNocommon_event target ID.

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_eventA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoTile X position (0-based; create/presets except puzzle_switch)
yNoTile Y position (0-based)
costNopreset "inn": gold charged for a full recovery (default 50)
kindNoaction "convert": what to turn the existing event into
nameNoEvent name shown in the editor
optsNoaction "populate": overrides {name, troopId, x, y}
countNoaction "populate": how many events (default 3)
destXNopreset "teleport"/"door": destination tile X (should be walkable)
destYNopreset "teleport"/"door": destination tile Y
doorXNopreset "puzzle_switch": door tile X
doorYNopreset "puzzle_switch": door tile Y
goodsNopreset "shop": wares [[type, id, priceType, price]] — priceType 1 uses the custom price, 0 the database price
itemsNopreset "chest": loot [{type: "item"|"weapon"|"armor", id, amount}]
mapIdYesMap the event lives on (always required)
pagesNoaction "create" without preset: full event page objects (optional)
actionYesWhat to do; see the tool description. Default "create"
fieldsNoaction "update": properties to overwrite, e.g. {"x": 5, "y": 9} or {"pages": [...]} (replaces all pages)
presetNoaction "create" only: ready-made event recipe; omit for a low-level empty event
commandNoaction "add_command": event command {code, indent, parameters}; e.g. 201=Transfer Player [0, mapId, x, y, dir, fade]
eventIdNoExisting event ID (update/delete/add_command); find it with query_map view "events"
optionsNoaction "convert": kind-specific settings — merchant {goods|items, greeting?}, inn {cost?}, sign {text}
switchXNopreset "puzzle_switch": floor-switch tile X
switchYNopreset "puzzle_switch": floor-switch tile Y
triggerNoHow the event activates: 0=action button, 1=player touch, 2=event touch, 3=autorun, 4=parallel
troopIdNopreset "boss" / populate boss: troop to battle (create it first via create_database_entry preset encounter_troop)
doorNameNopreset "puzzle_switch": editor name for the door event (default "Door")
destMapIdNopreset "teleport"/"door": destination map ID
dialoguesNopreset "npc": dialogue lines, each becomes one text box
eventTypeNoaction "populate": kind of events to scatter — "npc", "chest" or "boss"
pageIndexNoaction "add_command": which page receives the command (0-based, default 0)
switchNameNopreset "puzzle_switch": editor name for the switch event (default "Switch")
gameSwitchIdNopreset "puzzle_switch": game switch linking switch and door — pick an unused ID via manage_system get switches
characterNameNoSprite sheet from img/characters/ without extension; list options with get_project_context
lockedMessageNopreset "door": message shown while locked (default "It's locked.")
characterIndexNoWhich of the 8 characters in the sheet (0-7)
lockedSwitchIdNopreset "door": if set, the door shows lockedMessage until this game switch is ON, then warps

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness3/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_systemA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoset_starting_position: starting tile X (should be walkable)
yNoset_starting_position: starting tile Y
idNoname_switch/name_variable: switch or variable ID to label (1-based)
zipNoexport_web: also write <outDir>.zip with index.html at its root (default true)
bodyNocreate_plugin: custom JS body; omit for a safe generated skeleton
fileNobridge_command "reload_database": the data file to re-read, e.g. "Skills.json"
helpNocreate_plugin: @help text (multi-line allowed)
nameNoname_switch/name_variable: descriptive label. create_plugin: the plugin name (bare token — letters/digits/_/-, becomes js/plugins/<name>.js)
peekNobridge_telemetry: leave the frames in the buffer instead of consuming them
portNobridge_start/install_bridge_plugin: loopback port for the live bridge (default 32123, or RPGMV_BRIDGE_PORT)
testNoplaytest: run in playtest/test mode (default true; false runs it as a normal launch)
waitNobridge_command: wait for the game to answer (default true; false is fire-and-forget)
limitNobridge_telemetry: return at most this many of the most recent frames. mine_templates: keep at most this many layouts, largest maps first
mapIdNoset_starting_position: map where new games start (must exist)
pruneNoexport_web: drop img/audio/movies files no data or script references (default false; assets a plugin names only at runtime would be lost)
titleNoaction "set_title": new game title
typesNobridge_telemetry: only return these frame types, e.g. ["exception","log"]
actionYesWhat to do; see the tool description. Default "get"
authorNocreate_plugin: @author name
buttonNobridge_command "press_button": safe RPG Maker input to press
outDirNoexport_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.
paramsNocreate_plugin: @param definitions [{name, type?, desc?, default?}] surfaced in js/plugins.js
statusNocreate_plugin: enable the plugin in js/plugins.js (default true)
commandNobridge_command: which safe instruction to send to the running game
installNoplaytest/open_editor: RPG Maker MV install root (contains nwjs-win/ and RPGMV.exe); defaults to RPGMAKER_MV_INSTALL or the standard Steam install
sectionNoaction "get": which part of System.json to return (default "full")
commandsNocreate_plugin: plugin command names to document (@command) and wire a pluginCommand handler stub for
destPathNoscaffold_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
directionNobridge_command "teleport_player": facing after the transfer (2 down, 4 left, 6 right, 8 up)
timeoutMsNobridge_command/take_screenshot: how long to wait for the answer (default 8000, screenshots 15000)
durationMsNobridge_command "press_button": hold duration in milliseconds (default 80, range 30-1000)
sourcePathNoscaffold_project: a blank-project (NewData) folder to clone; defaults to the RPGMAKER_MV_INSTALL env var or the standard Steam install
descriptionNocreate_plugin: @plugindesc short description
screenshotNameNotake_screenshot: optional safe filename prefix (letters, numbers, _ and -, up to 64 characters)
minDistinctTilesNomine_templates: a map needs at least this many distinct tiles to count as content rather than scratch (default 10)
telemetryIntervalNoinstall_bridge_plugin: frames between player-position frames (default 30; 60 = once per second)

TDQS

A3.9/5.0
Behavior5/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_databaseA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoFetch a single entry by its database ID (1-based). Omit to list or search
queryNoCase-insensitive substring to match against entry names (and descriptions for items/weapons/armors/skills). Ignored when id is given
entityYesWhich database to read: actors, classes, skills, items (consumables), weapons, armors, enemies, states (status conditions), troops (enemy formations), tilesets, common_events, animations

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_mapA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
viewYesWhat to read; see the tool description for each view
layerNoview "ascii" only: tile layer to draw, 0=ground (default) or 2=upper decorations
mapIdNoMap ID (required for every view except "infos"); map 1 is Map001.json
queryNoview "events" only: case-insensitive substring filter on event names
eventIdNoEvent ID within the map (required for view "event")
showEventsNoview "ascii" only: overlay event markers (default true)
showRegionsNoview "ascii" only: also return the region-ID layer as a second grid (default false)

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fpsNoCapture frame rate, 1-60 (default 30)
nameNoSafe filename prefix used when stopping
actionYesStart a new capture or stop and save the active capture
timeoutMsNoHow long to wait for start/stop result (defaults 15000/60000)
bitrateKbpsNoVideo bitrate in kbps, 250-10000 (default 2500)

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
stepsYesThe script, run in order. Fields per action are listed in the tool description.
realtimeNoPlay battles at real speed (default false: fast-forwarded, about 10-20x quicker)

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_pathA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesAbsolute path to an RPG Maker MV project root (the folder containing data/System.json and img/)

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNomapId: with y, a normal screen view centred on this tile instead of the whole map
yNo
nameNoOptional safe filename prefix, e.g. boss-room or collision-proof
mapIdNoRender 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).
switchesNomapId: switch IDs to turn ON first, to see later event pages
runEventsNomapId: let autorun/parallel events run before the shot (default false)
timeoutMsNoHow long to wait for the game response in milliseconds (default 15000)
showEventsNomapId: draw event sprites (default true)
showPlayerNomapId: draw the player (default: hidden for the whole map, shown for a view)

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_entryA
DestructiveIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesID of the entry to modify (must exist; find it with query_database)
entityYesWhich database contains the entry
fieldsNoSubset of properties to overwrite, e.g. {"name": "Hero", "price": 250}. Not needed when using appendCommand/addEnemyId/addPage
addPageNotroops 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.
addEnemyIdNotroops only: enemy ID to append as a new member at an auto-computed screen position
appendCommandNocommon_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

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 11 tool updatesv5.19.0
    • Changedanalyze_project4 fields changed
      • addedInput schema / properties / category
        Added value: +{
        +  "description": "view \"balance\": analyse one category instead of all four (default \"all\")",
        +  "enum": [
        +    "skills",
        +    "weapons",
        +    "armors",
        +    "enemies",
        +    "all"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / expected
        Added 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"
        +}
      • addedInput schema / properties / thresholdSd
        Added 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"
        +  ]
        +}
      • changedInput schema / properties / view / enum
        Previous 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"
        +]
    • Addedbuild_event_commands
    • Changeddelete_database_entry2 fields changed
      • changedInput schema / properties / entity / enum
        Previous value: -[
        -  "actors",
        -  "classes",
        -  "skills",
        -  "items",
        -  "weapons",
        -  "armors",
        -  "enemies",
        -  "states"
        -]New value: +[
        +  "actors",
        +  "classes",
        +  "skills",
        +  "items",
        +  "weapons",
        +  "armors",
        +  "enemies",
        +  "states",
        +  "troops",
        +  "animations"
        +]
      • addedInput schema / properties / force
        Added value: +{
        +  "description": "Delete even though something still references it (default false)",
        +  "type": "boolean"
        +}
    • Changededit_map6 fields changed
      • changedInput schema / properties / action / enum
        Previous 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"
        +]
      • addedInput schema / properties / cells
        Added value: +{
        +  "description": "action \"paint\": [[x, y], ...] cells to paint (or give rect)",
        +  "items": {
        +    "items": {
        +      "type": "integer"
        +    },
        +    "maxItems": 2,
        +    "minItems": 2,
        +    "type": "array"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / layer / description
        Previous value: -"action \"fill_layer\": layer index 0-5"New value: +"actions \"paint\", \"fill_layer\": layer 0-3 tiles, 5 regions (fill_layer also 4)"
      • changedInput schema / properties / mapId / description
        Previous value: -"action \"fill_layer\": map to modify"New value: +"actions \"paint\", \"repair_autotiles\", \"fill_layer\": map to modify"
      • addedInput schema / properties / rect
        Added 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"
        +}
      • changedInput schema / properties / tileId / description
        Previous 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"
    • Changedgenerate_map6 fields changed
      • addedInput schema / properties / keepProps
        Added value: +{
        +  "description": "mode \"semantic\" with a mined templateId: paint the original decorations even onto a different tileset (they may not exist there)",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / locked
        Added value: +{
        +  "description": "mode \"semantic\": put a key and a locked door on the path (default true when there are 4+ rooms)",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / loop
        Added value: +{
        +  "description": "mode \"semantic\": add one extra corridor so the map has a loop instead of being a tree (default true)",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / mode / enum
        Previous value: -[
        -  "blank",
        -  "themed",
        -  "procedural",
        -  "batch",
        -  "duplicate",
        -  "template"
        -]New value: +[
        +  "blank",
        +  "themed",
        +  "procedural",
        +  "batch",
        +  "duplicate",
        +  "template",
        +  "semantic"
        +]
      • addedInput schema / properties / rooms
        Added value: +{
        +  "description": "mode \"semantic\": rooms on the critical path (default 5)",
        +  "type": [
        +    "number",
        +    "string"
        +  ]
        +}
      • addedInput schema / properties / sideRooms
        Added value: +{
        +  "description": "mode \"semantic\": dead-end rooms hung off the path, the first holding treasure (default 2)",
        +  "type": [
        +    "number",
        +    "string"
        +  ]
        +}
    • Addedinsert_event_commands
    • Changedmanage_system30 fields changed
      • changedInput schema / properties / action / enum
        Previous 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"
        +]
      • addedInput schema / properties / author
        Added value: +{
        +  "description": "create_plugin: @author name",
        +  "type": "string"
        +}
      • addedInput schema / properties / body
        Added value: +{
        +  "description": "create_plugin: custom JS body; omit for a safe generated skeleton",
        +  "type": "string"
        +}
      • addedInput schema / properties / button
        Added value: +{
        +  "description": "bridge_command \"press_button\": safe RPG Maker input to press",
        +  "enum": [
        +    "ok",
        +    "cancel",
        +    "menu",
        +    "up",
        +    "down",
        +    "left",
        +    "right"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / command
        Added 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"
        +}
      • addedInput schema / properties / commands
        Added value: +{
        +  "description": "create_plugin: plugin command names to document (@command) and wire a pluginCommand handler stub for",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / description
        Added value: +{
        +  "description": "create_plugin: @plugindesc short description",
        +  "type": "string"
        +}
      • addedInput schema / properties / destPath
        Added 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"
        +}
      • addedInput schema / properties / direction
        Added value: +{
        +  "description": "bridge_command \"teleport_player\": facing after the transfer (2 down, 4 left, 6 right, 8 up)",
        +  "type": [
        +    "number",
        +    "string"
        +  ]
        +}
      • addedInput schema / properties / durationMs
        Added value: +{
        +  "description": "bridge_command \"press_button\": hold duration in milliseconds (default 80, range 30-1000)",
        +  "type": [
        +    "number",
        +    "string"
        +  ]
        +}
      • addedInput schema / properties / file
        Added value: +{
        +  "description": "bridge_command \"reload_database\": the data file to re-read, e.g. \"Skills.json\"",
        +  "type": "string"
        +}
      • addedInput schema / properties / help
        Added value: +{
        +  "description": "create_plugin: @help text (multi-line allowed)",
        +  "type": "string"
        +}
      • addedInput schema / properties / install
        Added 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"
        +}
      • addedInput schema / properties / limit
        Added 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"
        +  ]
        +}
      • addedInput schema / properties / minDistinctTiles
        Added 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"
        +  ]
        +}
      • changedInput schema / properties / name / description
        Previous 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)"
      • addedInput schema / properties / outDir
        Added 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"
        +}
      • addedInput schema / properties / params
        Added value: +{
        +  "description": "create_plugin: @param definitions [{name, type?, desc?, default?}] surfaced in js/plugins.js",
        +  "items": {
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / peek
        Added value: +{
        +  "description": "bridge_telemetry: leave the frames in the buffer instead of consuming them",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / port
        Added value: +{
        +  "description": "bridge_start/install_bridge_plugin: loopback port for the live bridge (default 32123, or RPGMV_BRIDGE_PORT)",
        +  "type": [
        +    "number",
        +    "string"
        +  ]
        +}
      • addedInput schema / properties / prune
        Added 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"
        +}
      • addedInput schema / properties / screenshotName
        Added value: +{
        +  "description": "take_screenshot: optional safe filename prefix (letters, numbers, _ and -, up to 64 characters)",
        +  "type": "string"
        +}
      • addedInput schema / properties / sourcePath
        Added 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"
        +}
      • addedInput schema / properties / status
        Added value: +{
        +  "description": "create_plugin: enable the plugin in js/plugins.js (default true)",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / telemetryInterval
        Added value: +{
        +  "description": "install_bridge_plugin: frames between player-position frames (default 30; 60 = once per second)",
        +  "type": [
        +    "number",
        +    "string"
        +  ]
        +}
      • addedInput schema / properties / test
        Added value: +{
        +  "description": "playtest: run in playtest/test mode (default true; false runs it as a normal launch)",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / timeoutMs
        Added value: +{
        +  "description": "bridge_command/take_screenshot: how long to wait for the answer (default 8000, screenshots 15000)",
        +  "type": [
        +    "number",
        +    "string"
        +  ]
        +}
      • addedInput schema / properties / types
        Added value: +{
        +  "description": "bridge_telemetry: only return these frame types, e.g. [\"exception\",\"log\"]",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / wait
        Added value: +{
        +  "description": "bridge_command: wait for the game to answer (default true; false is fire-and-forget)",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / zip
        Added value: +{
        +  "description": "export_web: also write <outDir>.zip with index.html at its root (default true)",
        +  "type": "boolean"
        +}
    • Addedrecord_video
    • Addedrun_playtest
    • Addedtake_screenshot
    • Changedupdate_database_entry3 fields changed
      • addedInput schema / properties / addPage
        Added 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"
        +}
      • changedInput schema / properties / entity / enum
        Previous 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"
        +]
      • changedInput schema / properties / fields / description
        Previous 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. 2 tool updatesv5.12.2
    • Addedanalyze_project
    • Changedmanage_map_event3 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "create",
        -  "update",
        -  "delete",
        -  "add_command",
        -  "populate"
        -]New value: +[
        +  "create",
        +  "update",
        +  "convert",
        +  "delete",
        +  "add_command",
        +  "populate"
        +]
      • addedInput schema / properties / kind
        Added value: +{
        +  "description": "action \"convert\": what to turn the existing event into",
        +  "enum": [
        +    "merchant",
        +    "inn",
        +    "sign"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / options
        Added value: +{
        +  "description": "action \"convert\": kind-specific settings — merchant {goods|items, greeting?}, inn {cost?}, sign {text}",
        +  "type": "object"
        +}
  3. 1 tool updatev5.8.1
    • Changedgenerate_map2 fields changed
      • changedInput schema / properties / templateId / description
        Previous 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"
      • addedInput schema / properties / useTemplate
        Added 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"
        +}
  4. 109 tool updatesv5.8.0
    • Removedadd_common_event_command
    • Removedadd_enemy_to_troop
    • Removedadd_event_command
    • Addedanalyze_image
    • Removedanalyze_screenshot
    • Removedanalyze_tileset_image
    • Removedconnect_maps
    • Removedcreate_armor
    • Removedcreate_boss_enemy
    • Removedcreate_boss_event
    • Removedcreate_buff_skill
    • Removedcreate_chest
    • Removedcreate_class
    • Removedcreate_common_event
    • Removedcreate_damage_skill
    • Addedcreate_database_entry
    • Removedcreate_enemy
    • Removedcreate_healing_skill
    • Removedcreate_inn
    • Removedcreate_item
    • Removedcreate_map
    • Removedcreate_map_event
    • Removedcreate_npc
    • Removedcreate_puzzle_switch
    • Removedcreate_random_encounter_troop
    • Removedcreate_shop
    • Removedcreate_skill
    • Removedcreate_state
    • Removedcreate_state_skill
    • Removedcreate_teleport_event
    • Removedcreate_troop
    • Removedcreate_weapon
    • Removeddelete_actor
    • Removeddelete_class
    • Addeddelete_database_entry
    • Removeddelete_enemy
    • Removeddelete_item
    • Removeddelete_map_event
    • Removeddelete_skill
    • Removeddelete_state
    • Removedduplicate_map
    • Addededit_map
    • Removedfill_map_layer
    • Addedgenerate_map
    • Removedgenerate_map_batch
    • Removedgenerate_map_v3
    • Removedget_all_skills
    • Removedget_animation
    • Removedget_animations
    • Removedget_armors
    • Removedget_class
    • Removedget_classes
    • Removedget_common_events
    • Removedget_enemies
    • Removedget_enemy
    • Removedget_game_title
    • Removedget_items
    • Removedget_map
    • Removedget_map_event
    • Removedget_map_events
    • Removedget_map_infos
    • Changedget_project_context4 fields changed
      • addedInput schema / properties / category
        Added value: +{
        +  "description": "detail \"templates\": filter by template category",
        +  "type": "string"
        +}
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "How much and what kind of context; see the tool description. Default \"full\"",
        +  "enum": [
        +    "full",
        +    "summary",
        +    "assets",
        +    "tileset",
        +    "templates"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / theme
        Added value: +{
        +  "description": "detail \"templates\": filter by template theme",
        +  "type": "string"
        +}
      • addedInput schema / properties / tilesetId
        Added value: +{
        +  "description": "detail \"tileset\": which tileset to categorize",
        +  "type": [
        +    "number",
        +    "string"
        +  ]
        +}
    • Removedget_project_summary
    • Removedget_skill
    • Removedget_skills
    • Removedget_state
    • Removedget_states
    • Removedget_switches
    • Removedget_system
    • Removedget_tile_ids_for_tileset
    • Removedget_tileset
    • Removedget_tilesets
    • Removedget_troop
    • Removedget_troops
    • Removedget_variables
    • Removedget_weapons
    • Addedmanage_map_event
    • Addedmanage_system
    • Removedorganize_map_tree
    • Removedpopulate_map_events
    • Addedquery_database
    • Addedquery_map
    • Removedread_screenshot
    • Removedrender_map_ascii
    • Removedscan_project_assets
    • Removedsearch_actors
    • Removedsearch_classes
    • Removedsearch_enemies
    • Removedsearch_items
    • Removedsearch_map_events
    • Removedsearch_skills
    • Removedsearch_states
    • Removedset_map_display_names
    • Changedset_project_path1 field changed
      • changedInput schema / properties / path / description
        Previous 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/)"
    • Removedset_switch_name
    • Removedset_variable_name
    • Removedupdate_actor
    • Removedupdate_class
    • Removedupdate_common_event
    • Addedupdate_database_entry
    • Removedupdate_enemy
    • Removedupdate_game_title
    • Removedupdate_item
    • Removedupdate_map_event
    • Removedupdate_skill
    • Removedupdate_starting_position
    • Removedupdate_state
    • Removedupdate_tileset
    • Removedvalidate_map
  5. 99 tool updatesv1.0.0
    • First observedadd_common_event_command
    • First observedadd_enemy_to_troop
    • First observedadd_event_command
    • First observedanalyze_screenshot
    • First observedanalyze_tileset_image
    • First observedconnect_maps
    • First observedcreate_armor
    • First observedcreate_boss_enemy
    • First observedcreate_boss_event
    • First observedcreate_buff_skill
    • First observedcreate_chest
    • First observedcreate_class
    • First observedcreate_common_event
    • First observedcreate_damage_skill
    • First observedcreate_enemy
    • First observedcreate_healing_skill
    • First observedcreate_inn
    • First observedcreate_item
    • First observedcreate_map
    • First observedcreate_map_event
    • First observedcreate_npc
    • First observedcreate_puzzle_switch
    • First observedcreate_random_encounter_troop
    • First observedcreate_shop
    • First observedcreate_skill
    • First observedcreate_state
    • First observedcreate_state_skill
    • First observedcreate_teleport_event
    • First observedcreate_troop
    • First observedcreate_weapon
    • First observeddelete_actor
    • First observeddelete_class
    • First observeddelete_enemy
    • First observeddelete_item
    • First observeddelete_map_event
    • First observeddelete_skill
    • First observeddelete_state
    • First observedduplicate_map
    • First observedfill_map_layer
    • First observedgenerate_map_batch
    • First observedgenerate_map_v3
    • First observedget_all_skills
    • First observedget_animation
    • First observedget_animations
    • First observedget_armors
    • First observedget_class
    • First observedget_classes
    • First observedget_common_events
    • First observedget_enemies
    • First observedget_enemy
    • First observedget_game_title
    • First observedget_items
    • First observedget_map
    • First observedget_map_event
    • First observedget_map_events
    • First observedget_map_infos
    • First observedget_project_context
    • First observedget_project_summary
    • First observedget_skill
    • First observedget_skills
    • First observedget_state
    • First observedget_states
    • First observedget_switches
    • First observedget_system
    • First observedget_tile_ids_for_tileset
    • First observedget_tileset
    • First observedget_tilesets
    • First observedget_troop
    • First observedget_troops
    • First observedget_variables
    • First observedget_weapons
    • First observedorganize_map_tree
    • First observedpopulate_map_events
    • First observedread_screenshot
    • First observedrender_map_ascii
    • First observedscan_project_assets
    • First observedsearch_actors
    • First observedsearch_classes
    • First observedsearch_enemies
    • First observedsearch_items
    • First observedsearch_map_events
    • First observedsearch_skills
    • First observedsearch_states
    • First observedset_map_display_names
    • First observedset_project_path
    • First observedset_switch_name
    • First observedset_variable_name
    • First observedupdate_actor
    • First observedupdate_class
    • First observedupdate_common_event
    • First observedupdate_enemy
    • First observedupdate_game_title
    • First observedupdate_item
    • First observedupdate_map_event
    • First observedupdate_skill
    • First observedupdate_starting_position
    • First observedupdate_state
    • First observedupdate_tileset
    • First observedvalidate_map

TDQS

A4.2/5.0

Scored across 18 tools

Disambiguation4/5

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'.

Naming Consistency5/5

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.

Tool Count4/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers