HexManiacAdvance (hma-mcp) について
HexManiacAdvance (hma-mcp) は、HexManiacAdvance エンジンで GBA Pokémon ROM を編集する MCP サーバーです。MCP クライアントを使う ROM 改造者向けで、GUI 操作なしに名前ベースの編集やスクリプト処理、取り消しを行えます。
主な機能
- 01名前付きテーブルの読み書き
- 02マップとイベントの確認
- 03ゲームテキストの読み書き
- 04スクリプトの逆コンパイルとコンパイル
- 05自動リポイントとポインター更新
- 06取り消し、やり直し、バックアップ保存
活用シーン
- 01Pokémon の能力値やタイプの変更
- 02マップの NPC とトリガースクリプトの確認
- 03領域を超えるスクリプトの編集
- 04空き領域の検索と ROM 変更の保存
MCP 対応
MCP over stdio で、ROM、テーブル、マップ、テキスト、スクリプト、バイト操作、取り消し、保存のツールを公開します。MCP クライアントから HexManiacAdvance エンジンを使って ROM を確認・編集できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
GBA Pokémon ROM 改造用のMCPサーバーです。
Claude(または任意の MCP クライアント)が、HexManiacAdvanceのエンジンを通じて ROM を読み取り、編集します。
同じアンカー、テーブル、スクリプトコンパイラー、リポイント機能を使い、すべての編集を元に戻せるうえ、保存したファイルはそのまま HMA で開けます。
クイックスタート · 使用例 · ツール · 仕組み · コントリビューション
なぜ使うのか
HMA はすでに ROM の内容を理解しています。ポケモンのステータステーブルの場所や、どのバイトがタイプを表すか、スクリプトを再コンパイルしてサイズが増えた場合に移動する方法を把握しています。hma-mcp は AI アシスタントに同じ理解力を与えるため、変更内容を普段の言葉で伝えれば、正確に編集できます。
- GUI をクリックする必要はありません。 アシスタントは HMA ウィンドウを操作せず、HMA のエンジンを直接呼び出します。
- バイトではなく名前を使います。 タイプ、わざ、種族、道具は名前(
FIRE、THUNDERBOLT)で読み書きできます。入力ミスは不正なデータとして書き込まれず、候補とともに拒否されます。 - リポイントは自動処理されます。 スクリプトやテキストのサイズが増えると、HMA のエンジンが空き領域を探して移動し、すべてのポインターを更新します。
- デフォルトで安全です。
saveと指示するまではディスクに一切変更を加えません。初回保存時には元のファイルがバックアップされ、編集はすべて 1 回の取り消し操作で元に戻せます。
使用例
FireRed (U) 1.0 でのテスト実行から得られた実際の結果です。
あなた:
C:/hacks/firered.gbaを開いて、フシギダネの基本ステータスを見せてください。Claude: (
open_rom、read_table) フシギダネ:HP 45/攻撃 49/防御 49/素早さ 45/特攻 65/特防 65、くさ/どく。あなた: ヒトカゲをほのお/ドラゴンタイプにしてください。
Claude: (
write_table_field) ヒトカゲのtype2:FIRE → DRAGON。まだ保存していません。「元に戻す」と言えば取り消せます。あなた: サファリゾーンの時間切れスクリプトに、チャイムをもう 1 つ追加してください。
Claude: (
decompile_script、compile_script) スクリプトは 17 バイトから 20 バイトに増えて収まらなくなったため、HMA は1BFBC5から空き領域の71A280に移動し、1 つのポインターを更新しました。アンカーscripts.fromthumb.safari.endは移動後の位置を参照します。あなた: 保存してください。
Claude: (
save)firered.gbaとfirered.tomlを保存しました。元のファイルは.hma-mcp-backups/にバックアップされています。
クイックスタート
自分でダンプした ROM が必要です。
1. サーバーを入手する
最新のリリースをダウンロードします。ビルドは自己完結型なので、.NET をインストールする必要はありません。
| 使用するもの | ダウンロード |
|---|---|
| Claude Desktop | お使いのシステム用の .mcpb(win32、Apple Silicon 搭載 Mac 用の darwin、linux)をダウンロードし、ダブルクリックします |
| その他すべて | hma-mcp-<system>.zip/.tar.gzをダウンロードし、%LOCALAPPDATA%\hma-mcpや~/.local/share/hma-mcpなど、恒久的に使用する場所に展開します |
hma-mcp実行ファイルは、resources/フォルダーの隣に置いてください。macOS では、ダウンロードしたビルドはxattr -dr com.apple.quarantine <folder>を実行するまで隔離されています。
または、ソースからビルドする(.NET 8 SDKが必要です)
git clone --recurse-submodules https://github.com/dewayneku/hma-mcp.git
cd hma-mcp
dotnet publish src/HmaMcp -c Release -o ~/.local/share/hma-mcp
Windows では、-o %LOCALAPPDATA%\hma-mcpに出力するのがおすすめです。リポジトリの外に発行してください。MCP クライアントはサーバーを実行し続けるため、Windows では実行中の.exeを上書きできません。そのため、クライアントの接続先にbin/を指定すると、次回のビルドが失敗します。更新するには、変更をプルし、MCP クライアントを終了して(または新しいセッションを開始して)、同じpublishコマンドを再度実行してください。
2. クライアントを接続する
Claude Code:
claude mcp add --scope user hma -- "C:/Users/you/AppData/Local/hma-mcp/hma-mcp.exe"
--scope userを指定すると、すべてのプロジェクトで使用できるようになります。サーバーはセッション開始時に読み込まれるため、その後、新しいセッションを開いてください。
Claude Desktop(.mcpbを使用していない場合)およびその他の MCP クライアント:
{
"mcpServers": {
"hma": { "command": "C:/Users/you/AppData/Local/hma-mcp/hma-mcp.exe" }
}
}
あとは、たとえば次のように頼むだけです。
- 「ROM を開いて、名前に『items』を含むテーブルをすべて一覧表示して。」
- 「ピカチュウの基礎特攻を90にして、でんき/はがねタイプにして。」
- 「
scripts.newgame.setflagsを逆コンパイルして、何をするか説明して。」 - 「空き領域を512バイト見つけて。」
ツール
| ツール | 機能 | |
|---|---|---|
| 📂 | open_rom · rom_info · close_rom | .gbaを開きます。HMA の.tomlメタデータがあれば、それも読み込みます |
| 🔎 | list_anchors | 名前付きアンカーを検索します:data.pokemon.stats、scripts.…、graphics.… |
| 🧭 | resolve | アンカーまたはアドレスから、そこにあるものを特定します:データの型、テーブルの行とフィールド、ポインター数 |
| 📋 | describe_table · read_table | テーブルのレイアウトと行を JSON で表示します:列挙値は名前、フラグセットはリスト、パックフィールドはオブジェクト、技の習得リストとチームはテキストで表示します。where(bank=3, map=19)で行を絞り込めます |
| ✏️ | write_table_field | 行番号または行名(CHARMANDER)を指定してフィールドを設定します。フィールドのサイズと照合されます。技の習得リスト、わざマシンリスト、トレーナーチームにも対応します |
| 🗺️ | find_map · map_events | マップを名前で検索し(PALLET TOWN → 3.0)、その NPC、ワープ、トリガースクリプト、看板、接続先を一覧表示します。write_table_fieldですぐに使えるアドレスも表示されます |
| 💬 | read_text · write_text | アドレスにあるゲーム内テキストを扱います(スクリプトのメッセージなど)。テキストが長い場合は移動され、そこを指すポインターがすべて更新されます |
| 📜 | decompile_script · compile_script | イベント、バトル、アニメーション、トレーナー AI のスクリプトを扱います。ポインターの付け替えは自動です |
| ⌨️ | hma_edit | HMA の完全な編集言語(^anchor、<pointer>、"text")を使って、16進ビューに入力します |
| 🧱 | read_bytes · write_bytes · find_free_space | 必要に応じて、データに直接アクセスします |
| ↩️ | undo · redo | HMA が内部で複数の操作を記録した場合でも、ツール呼び出しごとに1ステップ戻す/やり直します |
| 💾 | save | ROM とその.tomlを書き込みます。初回保存時には元のファイルをバックアップします |
ゲーム
HMA は FireRed、LeafGreen、Emerald、Ruby、Sapphire と、それらの改造版に対応しています。FireRed (U) 1.0 は hma-mcp で一連のテストを実施済みで、Emerald (U) も短縮版のチェック(テーブル、マップ、スクリプト、テキスト、保存)に合格しています。Ruby、Sapphire、LeafGreen は同じエンジンを使用していますが、hma-mcp のテストはまだ実施されていません。情報提供をお待ちしています。
動作の仕組み
flowchart LR
A["Claude / any MCP client"] <-- "MCP over stdio" --> B["hma-mcp<br/>(17 tools)"]
B --> C["HexManiac.Core<br/>(HMA's engine, built from source)"]
C <--> D[("your ROM .gba<br/>+ HMA .toml metadata")]
- HMA は Git サブモジュール(
external/HexManiacAdvance)であり、そのコアライブラリはsrc/HexManiac.Core.Buildによってソースからコンパイルされるため、サーバーはエディターとまったく同じコードを実行します。 - ROM は、HMA のテストスイートが開くのと同じ方法で、ヘッドレスで開きます。
compile_scriptは、HMA のコードエディターと同じ手順で処理します。コンパイルし、サイズが大きくなった場合は移動し、ポインターを更新して、編集によって孤立したサブスクリプトを保持します。- 新しい HMA に更新するには、
git submodule update --remote external/HexManiacAdvanceを実行します。
この開発中に HMA 自体で見つかった問題とその修正については、docs/hma-upstream-notes.md で管理しています。
テスト
python tests/smoke.py <path-to-hma-mcp> [path/to/firered.gba]
- ROM がある場合: ROM を一時フォルダーにコピーし、そのコピーだけを編集します。読み取り、書き込み、列挙型の検証、元に戻す/やり直す、空き領域に移動する必要があるスクリプト、
hma_edit、および保存後に再度開く一連の処理を確認します(FireRed (U) 1.0 用に作成されています)。tests/smoke_emerald.pyは Emerald (U) で短縮版を実行します。 - ROM がない場合: MCP のハンドシェイクとツール一覧を確認し、HMA が参照データをすべて読み込めるよう、空の ROM を開きます。CI は Windows、Linux、macOS でこれを実行します。
法的事項
hma-mcp は ROM を含めたり、ダウンロードしたり、配布したりすることはなく、今後もその予定はありません。ご自身が所有するゲームからダンプした ROM でご利用ください。Pokémon は Nintendo、Creatures Inc. および GAME FREAK inc. の商標です。このプロジェクトはこれらの企業と提携しておらず、承認も受けていません。
クレジット
- HexManiacAdvance は haven1433 およびコントリビューターによるものです(MIT)。ここにある ROM に関する知識は、すべて HMA に由来します。
- MCP C# SDK。
MIT ライセンスです。詳細は LICENSE をご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。