Skip to main content
Glama

manage_system

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

Instructions

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). "resize_list" {section, size} sets the highest valid switch/variable id (MV ignores ids past it, silently). "list_backups" {file?} and "restore_backup" {file, backup?} list and restore the copies kept in .mcp-backups before every write; the newest undoes the last write. "set_starting_position" {mapId, x, y} for new games; a tile the player cannot stand on is moved to the nearest walkable one (relocated). "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 and first closes the game an earlier playtest of it started (keepRunning leaves it open); "stop_playtest" closes that game; "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.

Input 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". list_backups/restore_backup: a data file name such as "Map002.json" or "plugins.js"
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)
sizeNoresize_list: the highest valid switch or variable id (1-5000); `section` picks which
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)
forceNoresize_list: allow shrinking past names that are in use
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
backupNorestore_backup: a backup id from list_backups (default: the newest, which undoes the last write)
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
keepRunningNoplaytest: do not close the game a previous playtest started (default false)
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)

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changedv5.19.1
    • changedInput schema / properties / action / enum
      Previous 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"
      -]New value: +[
      +  "get",
      +  "set_title",
      +  "name_switch",
      +  "name_variable",
      +  "resize_list",
      +  "list_backups",
      +  "restore_backup",
      +  "set_starting_position",
      +  "create_plugin",
      +  "scaffold_project",
      +  "playtest",
      +  "stop_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 / backup
      Added value: +{
      +  "description": "restore_backup: a backup id from list_backups (default: the newest, which undoes the last write)",
      +  "type": "string"
      +}
    • changedInput schema / properties / file / description
      Previous value: -"bridge_command \"reload_database\": the data file to re-read, e.g. \"Skills.json\""New value: +"bridge_command \"reload_database\": the data file to re-read, e.g. \"Skills.json\". list_backups/restore_backup: a data file name such as \"Map002.json\" or \"plugins.js\""
    • addedInput schema / properties / force
      Added value: +{
      +  "description": "resize_list: allow shrinking past names that are in use",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / keepRunning
      Added value: +{
      +  "description": "playtest: do not close the game a previous playtest started (default false)",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / size
      Added value: +{
      +  "description": "resize_list: the highest valid switch or variable id (1-5000); `section` picks which",
      +  "type": [
      +    "number",
      +    "string"
      +  ]
      +}
  2. Changed30 schema fields changedv5.19.0
    • 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"
      +}
  3. Addedv5.8.0

TDQS

B3.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations present, the description still adds meaningful behavior: "writes are immediate", backups are "kept in .mcp-backups before every write" with "the newest undoes the last write", MV "ignores ids past it, silently", and prune can lose "assets a plugin names only at runtime". These disclose side effects and failure modes beyond the readOnly/destructive hints, though return shapes and error conditions are largely unstated.

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 definition is a single dense paragraph packing three unrelated topics into the opening sentence and then embedding all 22 actions mid-sentence without line breaks or grouping. While most content is relevant, the wall-of-text structure makes it hard to scan and the front-loaded summary sentence is muddled rather than orienting.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 22-action, 40-parameter tool with no output schema, the description covers the semantics of most actions and mentions a few return details (`section` values, `lastAuthError`, `relocated`, export file counts). But return values, error behavior and prerequisites for many actions are left unstated, so it is adequate rather than complete for a tool of this scope.

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% and there are 40 well-annotated parameters, so the schema carries the semantic load and a 3 is the baseline. The description does add a little cross-action meaning (e.g. the prune caveat, the silent MV id truncation, `relocated` on set_starting_position) but for most parameters it only restates what the schema already documents.

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 description names a specific verb+resource for each of the 22 actions (e.g. "set_title sets the game title", "scaffold_project creates a new editor-openable project at destPath"), so an agent can tell what each action does. However, the tool as a whole is a heterogeneous grab-bag and the description never distinguishes it from overlapping siblings such as `run_playtest` or the standalone `take_screenshot` tool, which it partially duplicates.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains what each action does but gives no when-to-use vs when-not guidance and no routing to alternatives. It does not say, for example, why an agent would call action "playtest" here rather than the sibling `run_playtest`, or action "take_screenshot" rather than the sibling `take_screenshot`. Selection is left entirely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.