mcpField
R
Rpgmakermvultimate Mcp

Rpgmakermvultimate Mcp

本地服务
npmjs.com开发工具282 周前更新

关于 Rpgmakermvultimate Mcp

面向 RPG Maker MV 项目的 MCP 服务,让 AI Agent 检查并编辑磁盘上的游戏数据、验证项目并运行测试。它结合地图与事件生成、全项目分析和游戏内遥测,帮助定位问题并验证修改。

主要功能

  1. 01生成地图并设置事件
  2. 02编辑数据库与事件
  3. 03检查引用及地图可达性
  4. 04分析事件逻辑与地图
  5. 05运行测试并收集遥测
  6. 06热重载地图并截取画面

适用场景

  1. 01查找事件不触发的原因
  2. 02发现损坏引用和无法到达的地图
  3. 03为项目生成带任务结构的地图
  4. 04测试修改并查看异常与玩家位置

MCP 相关

作为 MCP 服务向兼容客户端提供 18 个工具,用于读取和编辑 RPG Maker MV 项目、分析数据并控制测试桥接。游戏桥接可返回异常、位置和截图等信息。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"rpgmakermvultimate": {
"command": "npx",
"args": [
"-y",
"rpgmaker-mv-mcp"
],
"env": {
"RPGMAKER_PROJECT_PATH": "<RPGMAKER_PROJECT_PATH>",
"VISION_API_URL": "<VISION_API_URL>",
"VISION_API_KEY": "<VISION_API_KEY>",
"VISION_MODEL": "<VISION_MODEL>",
"RPGMV_LEGACY_TOOLS": "<RPGMV_LEGACY_TOOLS>"
}
}
}
}
启动命令npx -y rpgmaker-mv-mcp
需要配置的环境变量
RPGMAKER_PROJECT_PATHAbsolute path to the RPG Maker MV project to edit (the folder with data/ and js/). The server starts without it; needed for real editing, or call set_project_path at runtime.
VISION_API_URLBase URL of an OpenAI-compatible vision endpoint to enable analyze_image mode "ai" (e.g. https://api.openai.com or http://localhost:11434). Unset = vision disabled; every other tool works offline.
VISION_API_KEY密钥Bearer token for the vision endpoint (only sent when set).
VISION_MODELVision model name to request (e.g. gpt-4o, llava). Defaults to meta/llama-3.2-90b-vision-instruct.
RPGMV_LEGACY_TOOLSSet to 1 to also advertise the 101 legacy v4 tool names (they remain callable regardless of this flag).

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmrpgmaker-mv-mcp5.21.0

工具

18

收录的工具列表 · 更新于 3 周前

参数类型必填说明
xinteger|string否
yinteger|string否
paninteger|string否
fadeenum否black | white | none
kindenum是show_text | show_choices | conditional_branch | control_switch | control_variable | transfer_player | common_event | flow | plugin_command | change_gold | change_items | change_party_member | change_actor | play_audio | screen_effect | show_picture | erase_picture | show_animation | show_balloon | battle_processing | shop_processing | name_input | enemy_appear | change_enemy_state | abort_battle | move_route
namestring否control_switch self_switch:A-D;flow label/jump_to_label:标签文本;play_audio:不含扩展名的文件名(为空时停止频道);show_picture:图片文件。
statenum否change_actor:hp 使用 allowDeath;exp/level 使用 showLevelUp;state 使用 stateId 和 remove。hp | mp | exp | level | state | recover_all
textstring否plugin_command:完整的 MV 命令字符串,例如 "DoorCtl open 1"。
waitboolean否等待效果、动画、气球或移动路线完成(move_route 默认值为 true)。
wrapenum否show_text:true 会将所有行重新排版为一个段落,"hard" 会保留每行的换行;两者都会拆分为每框 4 行。宽度约为 55 个字符,有头像时约为 38 个字符。true | false | hard
blendenum否normal | additive | multiply | screen
colorarray否
endIdinteger|string否control_switch/control_variable:包含末尾 ID;默认与起始 ID 相同。
goodsarray否shop_processing:按顺序排列的 goods;省略 price 时使用数据库价格。
linesarray否show_text:消息行。MV 不会自动换行;除非设置 wrap,否则会对过长的行发出警告。
mapIdinteger|string否
pitchinteger|string否
powerinteger|string否
scopeenum否control_switch:switch 需要 switchId;self_switch 需要名称 A-D。switch | self_switch
speedinteger|string否
stepsarray否move_route:按顺序排列的 steps;times 表示重复次数。toward/away 相对于玩家。参数:jump x,y;wait 帧数;switch_on/off switchId;change_speed 值 1-6;change_freq 值 1-5;change_image name,index;change_opacity 值 0-255;change_blend_mode 值 0-3;play_se name,volume?,pitch?,pan?;script 文本。
valueenum否control_switch:默认值为 on。on | off
actionenum否flow:wait 需要 frames;label/jump_to_label 需要 name。wait | exit_event | label | jump_to_label
amountinteger|string否change_gold/change_items/change_actor hp|mp|exp|level:固定数量。指定 amount 或 amountVariableId。
effectenum否screen_effect。tint:颜色 [r,g,b,gray],范围 -255..255;flash:颜色 [r,g,b,strength],范围 0..255;shake:power、speed,范围 1-9。fadeout | fadein | tint | flash | shake
framesinteger|string否
indentinteger|string否基础缩进,默认值为 0。嵌套分支主体会重新设定缩进,不会修改其输入。
itemIdinteger|string否
originenum否upper_left | center
removeboolean否change_party_member、change_actor state、change_enemy_state:移除而非添加。
repeatboolean否move_route:循环执行路线。默认值为 false。
scaleXinteger|string否
scaleYinteger|string否
volumeinteger|string否
actorIdinteger|string否change_party_member/name_input:actor ID。change_actor:actor ID,0 = 整个队伍(或使用 actorVariableId)。
canLoseboolean否
channelenum否play_audio。bgm | bgs | me | se
choicesarray否
opacityinteger|string否
operandobject否control_variable:{type:"constant",value};{type:"variable",variableId};{type:"random",min,max};或 {type:"game_data",dataType:0..7,param1?,param2?}。不接受 MZ 的游戏数据类型 8。
operand.maxinteger|string否
operand.mininteger|string否
operand.typeenum是constant | variable | random | game_data
operand.valuenumber|string否
operand.param1integer|string否
operand.param2integer|string否
operand.dataTypeinteger|string否
operand.variableIdinteger|string否
stateIdinteger|string否
troopIdinteger|string否battle_processing:提供 troopId、troopVariableId,或 randomEncounter: true。
branchesarray否show_choices:每个选项对应一个命令片段。分支为空时省略。
decreaseboolean否改为减去而非相加。默认值为 false。
durationinteger|string否screen_effect:帧数,默认值为 60。
faceNamestring否show_text:脸图文件名(不含扩展名),默认值为空。
itemTypeenum否change_items,默认值为 item。item | weapon | armor
positionenum否show_text:top/middle/bottom;show_choices:left/middle/right。top | middle | bottom | left | right
switchIdinteger|string否
balloonIdinteger|string否使用编辑器列表中的 1-15(1 为感叹号)。
canEscapeboolean否
conditionobject否conditional_branch:switch {type,switchId,value?};self_switch {type,name,value?};variable {type,variableId,comparison,constant? OR variableOperand?};actor_in_party {type,actorId};gold {type,gold,compare?};item {type,itemId}。仅允许使用所选类型对应的键。
condition.goldnumber|string否
condition.nameenum否A | B | C | D
condition.typeenum是switch | self_switch | variable | actor_in_party | gold | item
condition.valueenum否on | off
condition.itemIdinteger|string否
condition.actorIdinteger|string否
condition.compareenum否>= | <= | <
condition.constantnumber|string否
condition.switchIdinteger|string否
condition.comparisonenum否== | >= | <= | > | < | !=
condition.variableIdinteger|string否
condition.variableOperandinteger|string否
directionenum否retain | down | left | right | up
faceIndexinteger|string否show_text:脸图槽位 0-7,默认值为 0。
maxLengthinteger|string否name_input:1-16,默认值为 8。
operationenum否set | add | sub | mul | div | mod
pictureIdinteger|string否show_picture/erase_picture:槽位 1-100。
skippableboolean否move_route:跳过无法执行的步骤。默认值为 false。
winBrancharray否battle_processing:结果分支,仅在 canEscape 或 canLose 时使用。
wrapWidthinteger|string否show_text:覆盖字符数形式的换行宽度。
allowDeathboolean否
backgroundenum否文本/选项窗口背景。window | dim | transparent
cancelTypeinteger|string否show_choices:-1 禁用取消;-2 或 choices.length 表示使用单独的取消分支;其他值表示从 0 开始的选项索引。
elseBrancharray否
enemyIndexinteger|string否从 0 开始的队伍槽位;change_enemy_state 也接受 -1,表示整个队伍。
initializeboolean否change_party_member:添加时重置角色。
loseBrancharray否
thenBrancharray否
variableIdinteger|string否
animationIdinteger|string否
characterIdinteger|string否show_animation/show_balloon/move_route:-1 为玩家,0 为当前事件(默认值),n 为地图事件 n。
defaultTypeinteger|string否show_choices:所选选项的索引;若未选择则为 -1。
designationenum否transfer_player/show_picture:坐标是字面值还是变量 ID。direct | variable
showLevelUpboolean否
cancelBrancharray否show_choices:单独取消分支的命令。
escapeBrancharray否
includeEquipboolean否change_items weapon/armor:同时移除已装备的副本。
purchaseOnlyboolean否
commonEventIdinteger|string否
actorVariableIdinteger|string否
randomEncounterboolean否
troopVariableIdinteger|string否
amountVariableIdinteger|string否使用此变量的值作为数量。

详细介绍

🎮 RPG Maker MV Copilot MCP

找出 MV 事件为何始终不触发,然后在真实引擎中验证修复

npm downloads CI MCP Registry node license

找到未设置的门开关,预览修复,并在 RPG Maker MV 1.6.1 中验证事件页面

30 秒静音工作流:重放已验证的 MCP 调用,并在真实的 MV 1.6.1 中进行游戏测试。查看证据。

快速入门 · 首次获得有效结果 · 地图生成 · 实时桥接 · 智能分析 · 工具


一个 Model Context Protocol 服务,可让 AI Agent 通过 18 个整合工具检查和编辑磁盘上的真实 RPG Maker MV 项目。查找损坏的引用和开关条件,使用 MV 兼容的指令构建事件,并执行可重复的游戏测试。生成的数据仍需在游戏的图块集和插件中验证。

它提供了通常缺少的三项功能:

🏗️ 构建生成看起来像手工制作的地图,使用预设配置事件,并以真实 ID 而非虚构 ID 编辑所有数据库。
🧠 理解读取整个项目并回答门为什么打不开、哪些地图无人可达、哪个技能会破坏游戏。
👀 监控运行游戏并报告异常、玩家位置和截图;还能重新加载你刚编辑的地图,同时保留存档。

⚡ 快速入门

安装 Node.js 20.19.0 或更高版本,并在让 Agent 编辑项目文件前关闭 MV 编辑器。请从项目副本开始操作。

如需了解容器和目录托管,请参阅 Docker 和 Glama 构建配置。

**Windows x64 MCPB 包:**为兼容的 MCPB 客户端下载 v5.21.0。请参阅软件包要求和验证。下面的 npm 配置适用于受支持的各种操作系统。

在 itch.io 和 Smithery 上查找该项目。

添加服务前先检查环境(Windows 上使用 PowerShell):

npx.cmd -y rpgmaker-mv-mcp --doctor "C:/path/to/your/RPGMakerMV/project"

coreReady: true 表示 Node 和 System 数据检查已通过。headlessReady: true 还表示 Playwright 和 Chromium 已就绪。该检查不会启动浏览器,也不会验证资源或插件。桥接警告不会阻止离线查询。若缺少 Chromium,请运行 npx.cmd playwright install chromium-headless-shell,或将 RPGMAKER_MCP_CHROMIUM 设置为 Chrome 可执行文件的路径。

1 — 将它添加到 MCP 客户端。 无需克隆;此软件包自带可执行文件。

配置
{
  "mcpServers": {
    "rpgmaker-mv": {
      "command": "npx",
      "args": ["-y", "rpgmaker-mv-mcp"],
      "env": {
        "RPGMAKER_PROJECT_PATH": "C:/path/to/your/RPGMakerMV/project"
      }
    }
  }
}
Claude Code 单行命令,以及从源代码运行
# 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 客户端会在启动时加载工具定义,因此添加或升级服务后,请重启客户端。

2 — 指定一个项目。 RPGMAKER_PROJECT_PATH 是包含 data/、js/ 和 index.html 的文件夹。服务无需此路径也能启动;如果愿意,也可以在运行时调用 set_project_path。

3 — 先让 Agent 四处查看。

get_project_context { detail: "full" }        → what exists, with real IDs
analyze_project     { view: "overview" }      → health, counts, unreachable maps

兼容 Claude Desktop、Claude Code、opencode 以及任何兼容 MCP 的客户端。

对于 Codex CLI,请使用 codex mcp add rpgmaker --env RPGMAKER_PROJECT_PATH=C:/path/to/project -- npx -y rpgmaker-mv-mcp。在无法启动 npx 的 Windows 客户端中,请使用命令 cmd,并传入参数 ["/c", "npx", "-y", "rpgmaker-mv-mcp"]。重启客户端,然后尝试三个首次生成配方。


🧭 功能

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

桥接器补上了这个循环的后半部分。在此之前,Agent 只能写入文件,然后寄希望于结果正确。


🗺️ 地图生成

generate_map 提供两种路径。根据项目是否使用 RTP 美术资源来选择。

mode: "procedural" (默认)mode: "semantic"
方式从 106 个内置 RTP 模板中克隆手工制作的地图,优先选择尺寸最接近的模板先构建任务图,再通过图块集配置绘制地图
效果真实的多图块建筑、墙壁和家具根据空间的用途构造房间和走廊
图块集RTP 或与其接近的图块集任意图块集——DLC、itch.io、自定义图块集
保证相同的 seed → 相同的地图相同的 seed → 相同的地图,且钥匙始终可在其开启的门之前取得
知识驱动路径
{ "mode": "procedural", "theme": "town", "name": "Riverbend", "width": 40, "height": 30 }

有匹配模板的主题——town、village、dungeon、interior、castle、world 等——会克隆真实地图,而不是绘制杂乱的图块。没有匹配模板的主题(beach、swamp、desert…)则会回退到 Perlin 地形、BSP 地牢和细胞洞穴。战斗主题会自动为现有部队配置随机遇敌;town 和 village 会自动创建可进入的房屋内部,并设置双向传送。

主题 · 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

其他模式:blank(空白画布)、themed(简单布局)、template(指定一个内置地图)、batch(一次生成多张地图)、duplicate(复制现有地图)。

与图块集无关的路径

内置模板是原始 MV 地图 JSON,因此其中的图块 ID 只在 RTP 图块表上有意义。更换图块集后,地图就会变成杂乱的图块。semantic 会让布局保持抽象,直到最后一步才进行具体绘制:

manage_system { action: "mine_templates" }               # learn from THIS project
generate_map  { mode: "semantic", tilesetId: 5, rooms: 6, seed: 42 }
  • 挖掘会读取你已创建的所有地图,并推导出语义布局(地面/墙壁/水域/道具/门,保持多图块道具的完整性)、图块集配置(标明项目中各角色所用的具体图块),以及令牌相邻计数。不会修改项目中的任何内容——所有数据都会写入 .mcp-cache/。
  • 生成会先构建任务——入口 → 钥匙 → 锁门 → 宝藏 → Boss → 出口,以及侧边房间——将其表示为一张图,图中的边是通行的唯一路径,然后再绘制地图。由于锁是图中的一条边,而钥匙位于该边的入口一侧,因此地图在构造时就保证可通关。最后会根据完成后的邻近图块重新计算自动图块形状,而不是逐格猜测。
  • 结果包含 markers,用于标明每个任务角色所在的格子;这些位置就是使用 manage_map_event 放置事件的地方。
  • 传入挖掘得到的 templateId(例如 "mined-3"),即可将你自己的地图重新绘制到另一种图块集上。

## 🔌 实时桥接

playtest 本身是发后即忘:游戏会启动,但不会返回任何信息。桥接让整个流程闭环。

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
  • 📡 遥测 — 异常及其堆栈跟踪、console.error/warn、场景变更、玩家位置、当前正在执行的事件指令(可据此定位卡住的事件)、FPS 和堆内存。读取帧时会同时将其消费,除非传入 peek。
  • ♻️ 热重载 — reload_map 会重新读取当前的 MapXXX.json 并重建场景,且不会丢失队伍状态:它通过引擎自身的重载接口 _needsMapReload,预留一次转移到玩家当前位置的操作,而不是手动重建 Spriteset_Map。reload_database 会重新读取一个数据文件;需要重新启动 playtest 的 System.json 和 Tilesets.json 会被拒绝,并附上说明。
  • 📸 截图 — take_screenshot { name: "collision-proof" } 通过 MCP 插件捕获实时 playtest 画面,将带时间戳的 PNG 保存到 .mcp-cache/screenshots/,并返回其路径,供检查或作为 QA 证据。此操作不涉及 shell 截图命令。manage_system { action: "bridge_screenshot" } 仍作为兼容别名保留。
  • 🎥 视频证据 — record_video { action: "start", name: "npc-dialogue" } 开始无声录制实时游戏画布,并生成 WebM;record_video { action: "stop" } 会将视频保存到 .mcp-cache/recordings/ 并返回其路径。Agent 可以通过允许列表中的 interact 命令和固定按钮输入 press_button,搭建可重复的场景——仍然没有任意脚本或 eval 命令。
🔒 安全性

除非游戏运行在 NW.js 下,并且启动时带有 test 参数,否则插件会在运行任何其他代码之前立即返回。玩家双击启动的已部署版本永远不会执行套接字代码,甚至不会执行 require('fs')。

它会检查每个参数,而不只是像 Utils.isOptionValid 那样检查 argv[0],因为 playtest 会先传入项目路径。因此,如果有人刻意用字面值 test 参数启动已部署版本,它会通过这一检查——但随后找不到握手文件,也永远不会连接。

服务仅绑定到 127.0.0.1,拒绝任何携带浏览器 Origin 的升级请求(防止跨站 WebSocket 劫持),并要求在 5 秒内提供来自 .mcp-bridge.json 的会话令牌(通过恒定时间比较),否则会断开连接。

命令接口采用固定的允许列表,不包含 eval 原语。


## 🔍 项目智能分析

analyze_project 只读且完全离线。它会对整个项目建模一次,让 Agent 能够分析自己并未制作的游戏。

视图回答的问题
overview先调用此视图。 统计数据、健康状况摘要、从起点无法抵达的地图
validate一次列出所有一致性问题——见下文
explain为什么这永远不会发生? 例如:“开关 12 在 3 处设有门控,但从未设为 ON”
usage所有涉及开关、变量或物品的事件、公共事件和敌群,以及读写角色
graph地图传送网络及可抵达范围
ast将单个事件的逻辑显示为易读的树
plugins项目使用的插件及其参数和命令
critique设计师对单张地图的看法:空置区域、杂乱程度、事件分布、单调性
metrics对同一张地图进行测量——见下文
balance与同类条目相比偏离常态的数据库条目——见下文
refactor多个事件中重复粘贴的命令序列,值得提取为公共事件
search离线 Unicode 文本匹配,搜索名称、对话、描述和备注;不会扩展同义词或翻译
index其他视图基于其构建的结构化摘要
validate — 编辑器从不提醒的问题

传送目标损坏、地图文件缺失、公共事件/物品/敌群引用悬空、ID 重复、已命名但未使用的开关和变量、错误的起始位置、无法抵达的地图,以及对话中无法解析的角色名称引用 \N[id]。

最后一项值得单独说明:引擎会在绘制时解析 \N[id],而不是从任何结构化参数中读取,因此错误的 ID 能通过其他所有检查,编辑器也不会显示异常。游戏中那一行只会在名字应出现的位置留下空缺,玩家会比你更早发现问题。

metrics — 测量,不评判
  • 可达性 — 从实际入口开始进行洪水填充。玩家永远无法抵达的可通行地块,以及旁边没有可达地块的事件,属于软锁,而不是风格问题。
  • 空置区域 — 矩形范围内无法抵达的区域所占比例,并与 expected(interior / dungeon / exterior)对应的范围比较。
  • 形状 — 将可通行区域细化为单格骨架,再作为图读取:端点、交叉点、环路、关键路径、线性度。线性度接近 1,意味着这是一条没有选择余地的走廊。
  • 多样性 — 对 5×5 地块窗口计算香农熵,量化单调地板问题。
  • 紧张度 — 对有随机遇敌的地图,计算玩家距离商店、旅店或存档点的步数。
balance — 与同类条目比较的异常值,而非相对于臆造阈值

在一款所有技能都造成 400 点伤害的游戏里,这很正常;但如果其他技能造成的伤害都不超过 60 点,那就不平衡。因此,每个条目都会根据一项强度指标评分,并与其类别中的其他条目比较:技能看每 MP 的伤害,武器看每点 ATK+MAT 的金币数,护甲看每点 DEF+MDF 的金币数,敌人看每点 EXP 的 HP。

比较采用留一法——每个条目都只与自己未参与生成的统计数据进行比较。如果把条目自身也纳入统计,一个严重失衡的条目就会将平均值拉向自己,最终看起来一点也不异常。

伤害公式只会解析,绝不执行(分词 → 调度场算法 → 求值)。无法静态读取的公式会列在 unreadableFormulas 中,而不会被计为零伤害;否则就会拉低所有平均值,掩盖你要找的异常值。

使用 category 缩小范围,使用 thresholdSd 调整宽严度(默认为 2)。

### 搜索无结果时

搜索会返回 searchMode: "lexical"、complete、indexedFiles、skippedFiles 和 warnings。complete: false 表示部分数据无法读取;这并不意味着游戏中没有匹配内容。空结果会包含 noResultsReason。请使用项目中实际存在的名称或短语:herrero 不会翻译成 Blacksmith。支持包括日语在内的 Unicode 名称。查询不存在的 ID 时,数据库可能会返回 null;使用该 ID 前请先检查。

索引、概览、验证、图谱、用法、解释和重构也会报告输入不完整。无法读取的文件会显示为验证错误。

离线地图检查
  • query_map { view: "ascii", mapId } — 将地图渲染为带事件标记的字符网格。这是查看布局并选择坐标的最简便方式。
  • query_map { view: "validate", mapId } — 检查单张地图中的无效图块 ID、失效的传送设置以及缺失的事件终止符。

工具

该服务提供 18 个整合工具。旧版别名为可选项。

点击展开完整列表
工具用途
build_event_commands只读地构建 MV 对话、选项、条件、开关、变量、传送、公共事件、流程和插件命令
insert_event_commands经验证后插入地图/公共事件/战斗事件列表,并提供前后预览和安全的嵌套边界
query_database列出/按 ID 获取/搜索任意数据库(角色、职业、技能、物品、武器、防具、敌人、状态、战斗队伍、图块集、公共事件、动画)
create_database_entry创建条目,提供预设:damage_skill、healing_skill、buff_skill、state_skill、boss_enemy、encounter_troop
update_database_entry部分更新(包括战斗队伍和动画);向公共事件追加命令;向战斗队伍添加敌人
delete_database_entry删除条目并发出引用失效警告
query_map地图树、完整地图数据、事件、单个事件、检查、离线 ASCII 渲染
generate_map基于知识、语义、程序生成、空白、主题、模板、批量生成或复制地图
edit_map填充图块层、设置显示名称、整理地图树、连接两张地图、设置遭遇战
manage_map_event创建(预设:npc、宝箱、传送、门、商店、旅店、Boss、谜题开关)、更新、就地将 NPC 转换为商人/旅店/告示牌、删除、添加命令、批量填充
manage_system标题、开关/变量名称、初始位置、编写插件、搭建可在编辑器中打开的项目、试玩、在编辑器中打开/修复、挖掘模板以及实时桥接
take_screenshot通过经过身份验证的 MCP 桥接捕获并命名实时试玩 PNG;也可使用 mapId 在无游戏运行时以无头模式按引擎的绘制方式渲染地图
run_playtest无头模式下运行一系列试玩步骤(加载、开始事件、读取事件文本、选择、行走、战斗、截图),并报告发生的情况
record_video通过经过身份验证的 MCP 桥接开始或停止命名的实时试玩 WebM 录制
analyze_project上述只读智能分析层
get_project_context项目摘要、资源索引、各图块集的图块 ID、捆绑模板目录
set_project_path在运行时切换项目
analyze_image可选的视觉 AI 图像分析,以及离线图块集网格测量和象限颜色分析

101 个细粒度的 v4 工具名称仍可用作调用别名。设置 RPGMV_LEGACY_TOOLS=1 也会将它们公布出来。


## 🛡️ 写入安全

对于组合事件逻辑,请先使用 build_event_commands,然后使用 insert_event_commands 并设置 dryRun:true。预览会显示完整的旧命令列表和拟写入的命令列表。有关支持的类型、 嵌套规则、MV 专属差异和验证方法,请参阅事件命令编写。

  • 原子性。 每次写入都会先写入临时文件,再将其重命名覆盖目标文件,因此调用中断也不会留下只写入一半的 JSON。
  • 有备份。 在 .mcp-backups/ 下保留带时间戳的轮换副本(最近 N 份,RPGMV_BACKUP_KEEP,默认值为 10)。备份失败时会中止替换。写入使用唯一临时文件和每个文件独占的锁;如果检测到自读取数据后发生了更改,则会拒绝写入。请关闭编辑器:它不会遵守 MCP 锁,而且多文件操作并非事务。
  • 可预览。 对任何会修改数据的工具传入 dryRun: true,即可准确查看它将写入的内容,而不会触碰磁盘。

⚠️ Agent 工作期间请关闭 RPG Maker 编辑器。 编辑器会将项目保存在内存中,并在保存时覆盖更改。


⚙️ 配置

变量必需描述
RPGMAKER_PROJECT_PATH建议设置项目文件夹(包含 data/ 和 js/ 的文件夹)。可选 — set_project_path 可在运行时设置
RPGMAKER_MV_INSTALL运行游戏测试时需要引擎安装根目录,用于 playtest / open_editor / scaffold_project。默认使用标准 Steam 路径
RPGMV_BRIDGE_PORT可选实时桥接的环回端口(默认值为 32123)
RPGMV_BACKUP_KEEP可选每个文件保留的备份数(默认值为 10)
RPGMV_LEGACY_TOOLS可选1 还会公布 101 个旧版工具名称
RPGMAKER_MCP_CHROMIUM可选用于无头渲染和 run_playtest 的 Chromium 可执行文件。未设置时会使用 Playwright 缓存中最新的浏览器(npx playwright install chromium-headless-shell)。无头工具还需要可选依赖 playwright-core。
RPGMV_TOOLSET可选仅公布部分工具组,例如 events,media。core(项目、数据库、地图、事件、系统、分析)始终启用;其他工具组包括 events(构建/插入事件命令)、mapgen(generate_map)和 media(截图、视频、图像分析、无头游戏测试)。未设置或设置为 all 时会列出所有工具。仅使用 core 约占 11k 个 token,而非 18k。
VISION_API_URL启用视觉功能时需要与 OpenAI 兼容的视觉端点基础 URL。未设置 = 禁用视觉功能
VISION_API_KEY可选Bearer 令牌;仅在设置后发送
VISION_MODEL可选模型名称(默认值为 meta/llama-3.2-90b-vision-instruct)
VISION_API_PATH可选端点路径(默认值为 /v1/chat/completions)
视觉 AI 为可选启用

analyze_image { mode: "ai" } 会将项目图像(图块集、精灵、截图、战斗角色)发送到任意与 OpenAI 兼容的端点。除非你进行配置,否则不会向任何地方发送数据;grid 和 colors 模式以及其他所有工具均可完全离线运行。

# 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

兼容 OpenAI、Ollama、LocalAI、NVIDIA NIM、vLLM、LiteLLM 或任何与 OpenAI 兼容的代理。


🎓 Agent 技能

便携式 Agent 技能可教会任何模型无崩溃工作流——使用 generate_map 构建地图,使用 manage_map_event 预设添加内容,绝不手动绘制图块或猜测 ID。文件位于 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

也已收录于 awesome-claude-skills。


## 📚 知识库
从 MV 核心脚本提取的静态参考数据
文件内容
tile-ids.json图块 ID 范围、自自动图块公式、图块表说明、图层含义
passage-flags.json标志位、常见标志、通行检查逻辑
event-commands.json约 140 个事件指令代码及其参数架构
enums.jsonScope、occasion、hitType、damageType、restriction 等
trait-effect-codes.json特性代码 11-64、效果代码 11-45
database-schemas.json每种 MV 数据类型的完整架构
image-paths.jsonimg/ 目录、图块集插槽、命名约定
map-templates.json106 张内置参考地图的索引
stamps.json按图块集整理的挖掘所得多图块物件印章(树木、道具)
maps/用于模板克隆的 106 个 RTP 参考地图 JSON 文件

🚧 已知限制与路线图

  • RTP 模板路径中的装饰语义尽力而为;少数多图块物件可能会以单个图块的形式放置。挖掘路径会保留多图块道具的整体结构。
  • 城镇和地牢布局会持续改进——计划包括:以中央广场或水井作为地标、房屋成排并朝向道路、添加围栏和庭院、构建更丰富的道路网络,以及增加更多房间类型。
  • mode: "semantic" 目前会生成地牢形状的任务。接下来将支持城镇和开放世界任务语法,并使用挖掘所得的邻接计数来进行装饰,而不只是描述。
  • balance 会在同一类别中比较相似对象,因此,与随机遭遇相比,首领理应显得像个离群值。请查看标志,而非结论。
  • 桥接功能仅支持在 Windows/nwjs 上进行游戏测试,并且需要在项目中安装其插件。
  • 视觉 AI 需要使用你自己的端点。

🛠️ 开发

npm install
npm run build      # tsc compile (+ copies knowledge/ into dist/)
npm test           # vitest
npm run typecheck
npm run dev        # tsx watch mode
位置内容
src/server.ts工具处理器和 MCP 传输
src/toolDefinitions.ts + src/router.ts13 个工具的接口及其路由
src/tools/*各领域的 CRUD
src/utils/mapGenerator.ts模板克隆和程序化生成
src/utils/graphGenerator.ts + src/utils/materialize.ts任务图和语义编译器
src/bridge/*环回 WebSocket 和游戏内插件
src/intel/*analyze_project 背后的只读层
knowledge/静态参考数据和内置地图

💬 反馈

项目正在积极开发中,非常欢迎反馈——无论是错误报告、奇怪的地图、缺少的工具,还是各种想法。请提交 GitHub Issue,说明你让 Agent 执行了什么,以及实际得到的结果;导出的地图 JSON 或截图会很有帮助。


DiegoLopez0208/RpgMakerMVUltimate-MCP MCP server

MIT · 为 RPG Maker MV 打造

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。