关于 HexManiacAdvance (hma-mcp)
HexManiacAdvance (hma-mcp) 是通过 HexManiacAdvance 引擎编辑 GBA Pokémon ROM 的 MCP 服务,面向使用 MCP 客户端的 ROM 修改者。它支持按数据名称操作,并处理脚本重定位、指针更新和撤销,无需驱动 HMA 图形界面。
主要功能
- 01读取和编辑具名表格
- 02查看地图与事件
- 03读取和写入游戏文本
- 04反编译与编译脚本
- 05自动重定位并更新指针
- 06撤销、重做与备份保存
适用场景
- 01修改 Pokémon 属性与类型
- 02查看地图 NPC 和触发脚本
- 03编辑扩展后无法容纳的脚本
- 04查找空闲空间并保存 ROM 修改
MCP 相关
通过 MCP stdio 暴露 ROM、表格、地图、文本、脚本、字节、撤销和保存等工具。MCP 客户端可借助 HexManiacAdvance 引擎检查和编辑 ROM。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
一个用于修改 GBA Pokémon ROM 的 MCP 服务。
Claude(或任何 MCP 客户端)通过 HexManiacAdvance 背后的引擎读取和编辑你的 ROM:
使用相同的锚点、表格、脚本编译器和重指向功能,每项编辑都可撤销,保存的文件也能直接在 HMA 中打开。
为什么要用
HMA 已经能理解 ROM:它知道 Pokémon 属性表的位置、哪些字节代表属性类型,以及如何重新编译脚本并在脚本变长时移动它。hma-mcp 让 AI 助手也拥有同样的理解能力,因此你可以用日常语言描述修改,并让它正确完成:
- 无需点击 GUI。 助手直接调用 HMA 引擎,无需操作 HMA 窗口。
- 使用名称,而非字节。 类型、招式、物种和道具均以名称读取和写入(
FIRE、THUNDERBOLT)。输入错误时会提供建议并拒绝写入,而不是写入无效数据。 - 自动处理重指向。 脚本或文本变长时,HMA 引擎会找到空闲空间、移动内容并更新所有指针。
- 默认安全。 你发出
save指令前,不会有任何内容写入磁盘;首次保存时会备份原文件,每项编辑也都能一步撤销。
效果示例
以下是 FireRed (U) 1.0 测试运行中的真实结果:
你: 打开
C:/hacks/firered.gba,并显示妙蛙种子的基础属性。Claude: (
open_rom、read_table) BULBASAUR:45 HP / 49 Atk / 49 Def / 45 Spe / 65 SpA / 65 SpD,GRASS/POISON。你: 把小火龙改成火/龙属性。
Claude: (
write_table_field) CHARMANDER 的type2:FIRE → DRAGON。尚未保存;说“撤销”即可还原。你: 在狩猎地带时间结束脚本中再加一声提示音。
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’ 的所有表。”
- “将 Pikachu 的基础 Sp. Atk 设为 90,并将属性改为 Electric/Steel。”
- “反编译
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)设置字段;会根据字段大小进行检查;也支持学习集、TM 列表、训练家队伍 |
| 🗺️ | 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")在十六进制视图中输入内容 |
| 🧱 | read_bytes · write_bytes · find_free_space | 原始数据访问,按需使用 |
| ↩️ | undo · redo | 每次工具调用撤销或重做一步,即使 HMA 在内部记录了多个步骤 |
| 💾 | 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 自己的测试套件打开 ROM 的方式相同。
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 握手和工具列表,并打开一个空白 ROM,以便 HMA 加载其所有参考数据。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 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。