mcpField
R
Rpgmakermvultimate Mcp

Rpgmakermvultimate Mcp

ローカル
npmjs.com開発ツール282 週間前に更新

Rpgmakermvultimate Mcp について

RPG Maker MV プロジェクトを扱う AI エージェント向けの MCP サーバーです。プロジェクトの編集・分析、マップ生成に加え、ゲーム内ブリッジで変更をプレイテストできます。

主な機能

  1. 01マップ生成とイベント設定
  2. 02データベースとイベントの編集
  3. 03参照とマップ到達性の検査
  4. 04イベントロジックとマップの分析
  5. 05プレイテストとテレメトリー収集
  6. 06マップのホットリロードと画面撮影

活用シーン

  1. 01イベントが発生しない原因の特定
  2. 02参照切れや到達不能マップの検出
  3. 03ミッション構造を持つマップの生成
  4. 04変更をテストしエラーとプレイヤー位置を確認

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 はすべての行を1つの段落として再配置し、"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:各選択肢にコマンドフラグメントを 1 つ指定します。分岐が空の場合は省略します。
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 サーバーです。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 ダンジョン、セルオートマトン洞窟に切り替わります。戦闘テーマでは既存の敵グループからランダムエンカウントを自動設定し、町や村では双方向ワープ付きで、入ることのできる家の屋内マップを自動作成します。

テーマ · 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(同梱マップを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マップ間の移動ネットワークと到達可能な場所
ast1 つのイベントのロジックを読みやすいツリーで表示
pluginsプロジェクトで使われているプラグイン、そのパラメーターとコマンド
critique1 つのマップに対するデザイナーの主観的な評価:使われていない空間、雑然とした配置、イベントの偏り、単調さ
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_commandsMV の会話、選択肢、条件、スイッチ、変数、転送、コモンイベント、フロー、プラグインコマンドを読み取り専用で構築
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.jsonScope、occasion、hitType、damageType、restriction など
trait-effect-codes.json特性コード 11~64、効果コード 11~45
database-schemas.jsonすべての MV データ型の完全なスキーマ
image-paths.jsonimg/ ディレクトリ、タイルセットのスロット、命名規則
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.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 を作成し、エージェントに依頼した内容と実際に得られた結果をお知らせください。エクスポートしたマップ JSON やスクリーンショットがあると、とても参考になります。


DiegoLopez0208/RpgMakerMVUltimate-MCP MCP server

MIT · RPG Maker MV 向けに構築

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。