Rpgmakermvultimate Mcp について
RPG Maker MV プロジェクトを扱う AI エージェント向けの MCP サーバーです。プロジェクトの編集・分析、マップ生成に加え、ゲーム内ブリッジで変更をプレイテストできます。
主な機能
- 01マップ生成とイベント設定
- 02データベースとイベントの編集
- 03参照とマップ到達性の検査
- 04イベントロジックとマップの分析
- 05プレイテストとテレメトリー収集
- 06マップのホットリロードと画面撮影
活用シーン
- 01イベントが発生しない原因の特定
- 02参照切れや到達不能マップの検出
- 03ミッション構造を持つマップの生成
- 04変更をテストしエラーとプレイヤー位置を確認
MCP 対応
互換クライアントに 18 個のツールを提供し、RPG Maker MV プロジェクトの読み書き、データ分析、プレイテストブリッジの操作を可能にします。ゲームブリッジはエラー、プレイヤー位置、スクリーンショットを返せます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y rpgmaker-mv-mcpRPGMAKER_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 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
18掲載時のツール一覧 · 3 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| x | integer|string | いいえ | |
| y | integer|string | いいえ | |
| pan | integer|string | いいえ | |
| fade | enum | いいえ | black | white | none |
| kind | enum | はい | 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 |
| name | string | いいえ | control_switch self_switch:A-D;flow label/jump_to_label:ラベルテキスト;play_audio:拡張子を除いたファイル名(空の場合はチャンネルを停止);show_picture:画像ファイル。 |
| stat | enum | いいえ | change_actor:hp は allowDeath を使用します。exp/level は showLevelUp を使用します。state は stateId と remove を使用します。hp | mp | exp | level | state | recover_all |
| text | string | いいえ | plugin_command:MV コマンド文字列全体。例:"DoorCtl open 1"。 |
| wait | boolean | いいえ | エフェクト、アニメーション、フキダシ、または移動ルートが完了するまで待機します(move_route の既定値は true)。 |
| wrap | enum | いいえ | show_text:true はすべての行を1つの段落として再配置し、"hard" は各行の改行を維持します。どちらも4行ずつのボックスに分割します。幅は約55文字、顔グラフィックがある場合は約38文字です。true | false | hard |
| blend | enum | いいえ | normal | additive | multiply | screen |
| color | array | いいえ | |
| endId | integer|string | いいえ | control_switch/control_variable:終了 ID を含みます。既定値は開始 ID です。 |
| goods | array | いいえ | shop_processing:goods を順番に指定します。price を省略するとデータベースの価格を使用します。 |
| lines | array | いいえ | show_text:メッセージの各行。MV は自動で折り返しません。wrap を設定しない場合、長すぎる行には警告が表示されます。 |
| mapId | integer|string | いいえ | |
| pitch | integer|string | いいえ | |
| power | integer|string | いいえ | |
| scope | enum | いいえ | control_switch:switch には switchId が必要です。self_switch には名前 A-D が必要です。switch | self_switch |
| speed | integer|string | いいえ | |
| steps | array | いいえ | 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 テキスト。 |
| value | enum | いいえ | control_switch:既定値は on です。on | off |
| action | enum | いいえ | flow:wait には frames が必要です。label/jump_to_label には name が必要です。wait | exit_event | label | jump_to_label |
| amount | integer|string | いいえ | change_gold/change_items/change_actor hp|mp|exp|level:定数の数量です。amount または amountVariableId を指定してください。 |
| effect | enum | いいえ | 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 |
| frames | integer|string | いいえ | |
| indent | integer|string | いいえ | 基本のインデント。既定値は 0 です。入れ子の分岐本体は、入力を変更せずにインデントを再設定します。 |
| itemId | integer|string | いいえ | |
| origin | enum | いいえ | upper_left | center |
| remove | boolean | いいえ | change_party_member、change_actor state、change_enemy_state:追加ではなく削除します。 |
| repeat | boolean | いいえ | move_route:ルートをループします。既定値は false です。 |
| scaleX | integer|string | いいえ | |
| scaleY | integer|string | いいえ | |
| volume | integer|string | いいえ | |
| actorId | integer|string | いいえ | change_party_member/name_input:actor ID。change_actor:actor ID、0 = パーティ全体(または actorVariableId を使用)。 |
| canLose | boolean | いいえ | |
| channel | enum | いいえ | play_audio。bgm | bgs | me | se |
| choices | array | いいえ | |
| opacity | integer|string | いいえ | |
| operand | object | いいえ | control_variable:{type:"constant",value};{type:"variable",variableId};{type:"random",min,max};または {type:"game_data",dataType:0..7,param1?,param2?}。MZ のゲームデータタイプ 8 は拒否されます。 |
| operand.max | integer|string | いいえ | |
| operand.min | integer|string | いいえ | |
| operand.type | enum | はい | constant | variable | random | game_data |
| operand.value | number|string | いいえ | |
| operand.param1 | integer|string | いいえ | |
| operand.param2 | integer|string | いいえ | |
| operand.dataType | integer|string | いいえ | |
| operand.variableId | integer|string | いいえ | |
| stateId | integer|string | いいえ | |
| troopId | integer|string | いいえ | battle_processing:troopId、troopVariableId、または randomEncounter: true を指定します。 |
| branches | array | いいえ | show_choices:各選択肢にコマンドフラグメントを 1 つ指定します。分岐が空の場合は省略します。 |
| decrease | boolean | いいえ | 加算ではなく減算します。デフォルトは false です。 |
| duration | integer|string | いいえ | screen_effect:フレーム数。デフォルトは 60 です。 |
| faceName | string | いいえ | show_text:顔画像のベース名。デフォルトは空です。 |
| itemType | enum | いいえ | change_items。デフォルトは item です。item | weapon | armor |
| position | enum | いいえ | show_text:top/middle/bottom。show_choices:left/middle/right。top | middle | bottom | left | right |
| switchId | integer|string | いいえ | |
| balloonId | integer|string | いいえ | エディターのリストにある 1~15(1 は感嘆符)。 |
| canEscape | boolean | いいえ | |
| condition | object | いいえ | 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.gold | number|string | いいえ | |
| condition.name | enum | いいえ | A | B | C | D |
| condition.type | enum | はい | switch | self_switch | variable | actor_in_party | gold | item |
| condition.value | enum | いいえ | on | off |
| condition.itemId | integer|string | いいえ | |
| condition.actorId | integer|string | いいえ | |
| condition.compare | enum | いいえ | >= | <= | < |
| condition.constant | number|string | いいえ | |
| condition.switchId | integer|string | いいえ | |
| condition.comparison | enum | いいえ | == | >= | <= | > | < | != |
| condition.variableId | integer|string | いいえ | |
| condition.variableOperand | integer|string | いいえ | |
| direction | enum | いいえ | retain | down | left | right | up |
| faceIndex | integer|string | いいえ | show_text:顔画像のスロット 0~7。デフォルトは 0 です。 |
| maxLength | integer|string | いいえ | name_input:1~16。デフォルトは 8 です。 |
| operation | enum | いいえ | set | add | sub | mul | div | mod |
| pictureId | integer|string | いいえ | show_picture/erase_picture:スロット 1~100。 |
| skippable | boolean | いいえ | move_route:実行できないステップをスキップします。デフォルトは false です。 |
| winBranch | array | いいえ | battle_processing:結果分岐。canEscape または canLose の場合のみ使用します。 |
| wrapWidth | integer|string | いいえ | show_text:文字数で指定する折り返し幅を上書きします。 |
| allowDeath | boolean | いいえ | |
| background | enum | いいえ | テキスト/選択肢ウィンドウの背景。window | dim | transparent |
| cancelType | integer|string | いいえ | show_choices:-1 はキャンセルを無効にします。-2 または choices.length は独立したキャンセル分岐を選択します。それ以外は 0 始まりの選択肢インデックスです。 |
| elseBranch | array | いいえ | |
| enemyIndex | integer|string | いいえ | 0 から始まる敵グループのスロット。change_enemy_state は敵グループ全体を示す -1 も受け付けます。 |
| initialize | boolean | いいえ | change_party_member:追加時にアクターをリセットします。 |
| loseBranch | array | いいえ | |
| thenBranch | array | いいえ | |
| variableId | integer|string | いいえ | |
| animationId | integer|string | いいえ | |
| characterId | integer|string | いいえ | show_animation/show_balloon/move_route:-1 はプレイヤー、0 はこのイベント(デフォルト)、n はマップイベント n です。 |
| defaultType | integer|string | いいえ | show_choices:選択された選択肢のインデックス。選択されていない場合は -1。 |
| designation | enum | いいえ | transfer_player/show_picture:座標がリテラル値か変数 ID かを指定します。direct | variable |
| showLevelUp | boolean | いいえ | |
| cancelBranch | array | いいえ | show_choices:独立したキャンセル分岐のコマンド。 |
| escapeBranch | array | いいえ | |
| includeEquip | boolean | いいえ | change_items weapon/armor:装備中の複製も削除します。 |
| purchaseOnly | boolean | いいえ | |
| commonEventId | integer|string | いいえ | |
| actorVariableId | integer|string | いいえ | |
| randomEncounter | boolean | いいえ | |
| troopVariableId | integer|string | いいえ | |
| amountVariableId | integer|string | いいえ | この変数の値を数量として使用します。 |
詳細
🎮 RPG Maker MV Copilot MCP
MV のイベントが実行されない原因を見つけ、実際のエンジンで修正を検証します
30 秒の音声なしワークフロー:検証済みの MCP 呼び出しと、実際の MV 1.6.1 のプレイテストを視覚的に再生します。エビデンスを確認してください。
クイックスタート · 最初の有用な結果 · マップ生成 · ライブブリッジ · プロジェクトインテリジェンス · ツール
Model Context Protocol サーバーです。18 個の統合ツールを通じて、AI エージェントがディスク上の実際の RPG Maker MV プロジェクトを調査、編集できます。壊れた参照やスイッチ条件を見つけ、MV 互換のコマンドでイベントを作成し、繰り返し実行できるプレイテストを行います。生成されたデータは、ゲームのタイルセットやプラグインで引き続き検証する必要があります。
通常は不足しがちな、次の 3 つの機能を備えています。
| 🏗️ 作成 | 手作りのように見えるマップを生成し、プリセットからイベントを配線し、実際の ID を使ってすべてのデータベースを編集します。架空の ID は使いません。 |
| 🧠 理解 | プロジェクト全体を読み取り、なぜドアが開かないのか、誰も到達できないマップはどれか、どのスキルがゲームを壊すのかに答えます。 |
| 👀 監視 | ゲームを実行して、例外、プレイヤーの位置、スクリーンショットを報告します。さらに、セーブデータを失わずに、編集したばかりのマップを再読み込みします。 |
⚡ クイックスタート
Node.js 20.19.0 以降をインストールし、エージェントにプロジェクトファイルを編集させる前に 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 を実行するか、Chrome の実行ファイルを RPGMAKER_MCP_CHROMIUM に設定してください。
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 — まずエージェントに中を確認させます。
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"] を指定してください。クライアントを再起動してから、最初に試す3つのレシピをお試しください。
🧭 できること
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
このループの後半部分をブリッジが担います。ブリッジがなければ、エージェントはファイルを書き出して、うまくいくことを期待するだけでした。
🗺️ マップ生成
どちらも generate_map で利用できる2つの方法があります。プロジェクトで RTP アートを使用しているかどうかで選んでください。
mode: "procedural" (デフォルト) | mode: "semantic" | |
|---|---|---|
| 方法 | 106個の同梱RTPテンプレートから、まずサイズが最も近い手作りのマップを複製します | ミッショングラフを配置してから、タイルセットプロファイルを使って描画します |
| 見た目 | 複数タイルで構成された本物らしい建物、壁、家具 | 空間の 用途 に合わせた部屋や通路 |
| タイルセット | RTP、またはそれに近いもの | 任意 — DLC、itch.io、カスタム |
| 保証 | 同じ seed → 同じマップ | 同じ seed → 同じマップ。また、鍵は必ず、開ける扉より先に到達できます |
知識を活用する方法
{ "mode": "procedural", "theme": "town", "name": "Riverbend", "width": 40, "height": 30 }
対応するテンプレートがあるテーマ — 町、村、ダンジョン、屋内、城、ワールドなど — では、タイルのノイズを描画する代わりに実際のマップを複製します。対応するテンプレートがないテーマ(ビーチ、沼地、砂漠…)では、パーリンノイズによる地形、BSP ダンジョン、セルオートマトン洞窟に切り替わります。戦闘テーマでは既存の敵グループからランダムエンカウントを自動設定し、町や村では双方向ワープ付きで、入ることのできる家の屋内マップを自動作成します。
テーマ ·
foresttownvillagecastledungeoncavebeachdesertswampruinsinteriorsnowharborvolcanosewerfortressmagic_forestmagic_interiorspace_interiorspace_exteriorworld
その他のモード:blank(空のキャンバス)、themed(シンプルなレイアウト)、template(同梱マップを1つ指定)、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/に保存されます。 - 生成では、まずミッション(入口 → 鍵 → 鍵のかかった扉 → 宝物 → ボス → 出口と、脇道の部屋)を、辺が唯一の通過経路となるグラフとして構築し、その後に描画します。ロックは辺にあり、鍵はその手前の入口側に配置されるため、マップは構造上、必ず攻略可能です。オートタイルの形状は、セルごとに推測するのではなく、完成した近傍に基づいて最後に再計算されます。
- 結果には、各ミッション上の役割のセルを示す
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を再読み込みし、パーティーの状態を失わずにシーンを再構築します。Spriteset_Mapを手動で再構築するのではなく、エンジン独自のリロード機構である_needsMapReloadを使って、プレイヤー自身の位置への移動を予約します。reload_databaseはデータファイルを1つ再読み込みします。System.jsonとTilesets.jsonは新たなプレイテストが必要なため、説明を返して処理を拒否します。 - 📸 スクリーンショット —
take_screenshot { name: "collision-proof" }は MCP プラグイン経由で実行中のプレイテストを撮影し、タイムスタンプ付きの PNG を.mcp-cache/screenshots/に保存して、確認や QA の証拠として使えるパスを返します。シェルのスクリーンショットコマンドは使いません。manage_system { action: "bridge_screenshot" }は引き続き互換性エイリアスとして使えます。 - 🎥 動画による証拠 —
record_video { action: "start", name: "npc-dialogue" }は実行中のゲームキャンバスの無音 WebM キャプチャを開始します。record_video { action: "stop" }は動画を.mcp-cache/recordings/に保存し、パスを返します。エージェントは、許可リストにある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 は読み取り専用で、完全にオフラインで動作します。プロジェクト全体を一度モデル化するため、エージェントは自分で作成していないゲームについても推論できます。
| ビュー | 内容 |
|---|---|
overview | まずこれを呼び出してください。 件数、健全性の概要、スタート地点から到達できないマップ |
validate | 整合性の問題を一度にすべて確認します — 詳細は以下をご覧ください |
explain | なぜこれは一度も起きないのでしょうか? 例:「スイッチ 12 は 3 か所で条件に使われていますが、ON に設定されていません」 |
usage | スイッチ/変数/アイテムを参照するすべてのイベント、コモンイベント、トループと、読み取り/書き込みの役割 |
graph | マップ間の移動ネットワークと到達可能な場所 |
ast | 1 つのイベントのロジックを読みやすいツリーで表示 |
plugins | プロジェクトで使われているプラグイン、そのパラメーターとコマンド |
critique | 1 つのマップに対するデザイナーの主観的な評価:使われていない空間、雑然とした配置、イベントの偏り、単調さ |
metrics | 同じマップを測定します — 詳細は以下をご覧ください |
balance | 同種の他の項目から外れているデータベース項目 — 詳細は以下をご覧ください |
refactor | イベント間でコピー&ペーストされているコマンド列。コモンイベントへの抽出が有効です |
search | 名前、会話、説明、メモを対象とするオフラインの Unicode テキスト検索。類義語や翻訳語への展開はありません |
index | 他のビューの基盤となる構造化ダイジェスト |
validate — エディターが警告しない問題
壊れた移動先、存在しないマップファイル、参照先のないコモンイベント/アイテム/トループ、重複 ID、名前が設定されているのに使われていないスイッチや変数、不正な開始位置、到達不能なマップ — さらに、台詞に \N[id] として書かれているものの、該当するアクター名を解決できないケースも検出します。
最後のケースについては、特に説明する価値があります。エンジンは \N[id] を構造化パラメーターからではなく、描画時に解決します。そのため、不正な ID は他のすべてのチェックを通過し、エディターにも問題は表示されません。ゲーム内では名前が入るはずの箇所が空白のまま描画され、あなたが気づく前にプレイヤーが見つけることになります。
metrics — 評価ではなく測定
- 到達可能性 — 実際の入口からフラッドフィルを行います。プレイヤーが決して到達できない歩行可能なタイルや、隣接するタイルから到達できないイベントは、スタイル上の指摘ではなくソフトロックです。
- デッドスペース — 長方形のうち到達不能な部分の割合を、
expected(interior/dungeon/exterior)の基準範囲と比較します。 - 形状 — 歩行可能領域を 1 マス幅の骨格に縮約してグラフとして読み取り、端点、分岐点、サイクル、クリティカルパス、直線性を算出します。直線性が 1 に近い場合、選択肢のない通路です。
- 多様性 — 5×5 タイルのウィンドウにおけるシャノンエントロピーです。測定可能な単調な床の問題を示します。
- 緊張感 — ランダムエンカウントがあるマップで、プレイヤーがショップ、宿屋、セーブポイントから何歩離れているかを測定します。
balance — 独自のしきい値ではなく、同種の項目と比較して外れているもの
ダメージが 400 のスキルは、すべてのスキルがその程度のダメージを与えるゲームでは問題ありませんが、他に 60 を超えるものがないゲームではバランスが崩れています。そのため、各項目を性能指標で評価し、カテゴリ内の他の項目と比較します。スキルは MP あたりのダメージ、武器は ATK+MAT のポイントあたりの価格、鎧は DEF+MDF あたりの価格、敵は EXP あたりの HP で比較します。
比較には除外法を用います。各項目は、その項目自身が算出に関与していない統計値と比較されます。項目自身を計算に含めると、極端にバランスの崩れた項目が平均値を自分の方へ引き寄せ、まったく異常に見えなくなってしまうためです。
ダメージ計算式は解析するだけで、実行しません(トークン化 → シャント法 → 評価)。静的に読み取れない式は、ダメージ 0 として評価するとすべての平均値が下がり、検出対象の外れ値を見えにくくしてしまうため、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 }— 1つのマップを検査し、無効なタイル 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 | タイルレイヤーの塗りつぶし、表示名の設定、マップツリーの整理、2つのマップの接続、エンカウントの設定 |
manage_map_event | 作成(プリセット:npc、chest、teleport、door、shop、inn、boss、puzzle_switch)、更新、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 | オプションの Vision-AI 画像分析、およびオフラインでのタイルセットのグリッド測定と象限の色分析 |
細分化された v4 のツール名101個も、呼び出しエイリアスとして引き続き使用できます。それらも公開するには、RPGMV_LEGACY_TOOLS=1 を設定してください。
## 🛡️ 書き込みの安全性
イベントロジックを組み立てる場合は、build_event_commands の後に
dryRun:true を指定して insert_event_commands を実行してください。プレビューには、変更前と変更後のコマンド一覧が正確に表示されます。
サポートされている種類、ネストのルール、MV 固有の違い、検証については、イベントコマンドの作成を参照してください。
- アトミックです。 すべての書き込みは一時ファイルに対して行い、対象ファイルと置き換えるため、呼び出しが中断されても JSON が中途半端に書き込まれることはありません。
- バックアップされます。
.mcp-backups/にタイムスタンプ付きのローテーションバックアップを保存します(最新 N 件。RPGMV_BACKUP_KEEP、デフォルトは 10)。バックアップに失敗した場合、置き換えは中止されます。書き込みには一意の一時ファイルとファイルごとの排他ロックを使用します。データの読み取り後に変更が検出された場合、書き込みは拒否されます。エディターを終了してください。エディターは MCP のロックを無視するため、複数ファイルの操作はトランザクションではありません。 - プレビューできます。 変更を行うツールに
dryRun: trueを渡すと、ディスクに触れずに、書き込まれる内容を正確に確認できます。
⚠️ エージェントの作業中は 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(project、database、maps、events、system、analysis)は常に有効です。その他は events(build/insert event commands)、mapgen(generate_map)、media(screenshot、video、image analysis、headless playtest)です。未設定または all の場合は、すべてを一覧表示します。core のみなら、18k トークンではなく約 11k トークンです。 |
VISION_API_URL | ビジョン機能を有効にする場合 | OpenAI 互換のビジョンエンドポイントのベース URL です。未設定の場合、ビジョン機能は無効です |
VISION_API_KEY | 省略可能 | ベアラートークンです。設定されている場合にのみ送信されます |
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 互換のプロキシで動作します。
🎓 エージェントスキル
ポータブルな エージェントスキル を使うと、どのモデルでもクラッシュを防ぐワークフローを実行できます。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.json | Scope、occasion、hitType、damageType、restriction など |
trait-effect-codes.json | 特性コード 11~64、効果コード 11~45 |
database-schemas.json | すべての MV データ型の完全なスキーマ |
image-paths.json | img/ ディレクトリ、タイルセットのスロット、命名規則 |
map-templates.json | 同梱されている 106 個の参照マップのインデックス |
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.ts | 13 個のツールとそのルーティング |
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 を作成し、エージェントに依頼した内容と実際に得られた結果をお知らせください。エクスポートしたマップ JSON やスクリーンショットがあると、とても参考になります。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。
