RE引擎MCP服务器
一 MCP(模型上下文协议) 该服务器为AI代理提供实时、编程访问任何正在运行的RE引擎游戏的权限,包括《生化危机》、《怪物猎人》、《鬼泣》、《龙的教条》等。
- 检查一切。 100000多种类型,每个单例,每个字段,每个方法——可以从正在运行的游戏中搜索和导航。调用任何方法,在对象图上链接多步查询,在单个请求中执行批处理操作。
- 读写实时状态。 玩家健康、敌人AI、库存、位置、装备——代理人实时看到游戏中看到的内容。
- 在对话中构建模组。 编写C#插件,将它们热加载到正在运行的游戏中,读取编译错误,修复,重新部署——完整的开发循环,中间没有人。
- 跨游戏工作。 同样的工具适用于RE2、怪物猎人荒野、RE9、DMC5、DD2和任何其他RE引擎游戏。每个游戏端点(X先生追踪器、怪物HP、自适应难度)会自动亮起。
这 网络仪表盘 --玩家统计数据、敌人名单、库存、X先生实时跟踪器——完全由人工智能代理使用这些MCP工具在单个对话中构建,而无需事先了解每个游戏的内部。
设置
先决条件
- REFramework夜间构建 为您的游戏安装。 您必须使用夜间构建 --稳定版本不包括。NET支持。
csharp-api.zip从 相同的夜间发布页面.将其提取到游戏中reframework/文件夹以获取。NET运行时和插件所需的引用程序集。- .NET 10运行时和SDK --由C#API和MCP服务器所要求。如果要从源代码构建MCP服务器,请安装SDK,如果使用预构建版本,则只需安装运行时。
1.安装游戏插件
复制 reframework/ 将文件夹放入游戏目录。它反映了REFramework期望的确切文件夹结构:
/reframework/plugins/source/TestWebAPI.cs
/reframework/plugins/source/WebAPI/REFramework将在下次游戏发布时热编译插件。你应该看看 [WebAPI] Listening on http://localhost:8899/ 在REF框架日志中。
2.连接MCP客户端
回购根包含 .mcp.json --支持工作区级MCP配置(Claude Code、Cursor等)的代理将在您打开项目时自动检测到它。
要在任何MCP客户端手动注册,请将以下内容添加到您的MCP配置中:
{
"mcpServers": {
"reframework": {
"command": "dotnet",
"args": ["run", "--project", "/path/to/mcp-server"],
"env": {
"REFRAMEWORK_API_URL": "http://localhost:8899"
}
}
}
}或者使用中的辅助脚本 mcp-server/ (install.cmd / install.sh)通过注册 claude CLI。
3.启动游戏
加载REFramework开始游戏。插件会自动编译并启动HTTP服务器。MCP服务器在第一次工具调用时连接到它。
Web仪表板
打开 http://localhost:8899 在游戏运行时在浏览器中。仪表板会自动检测正在运行的游戏并显示相关卡片:
- 玩家 --带有滑块、位置、状态徽章(毒药、战斗等)的HP栏
- 敌人 --带有HP栏、距离、杀伤追踪的活动敌人列表
- 库存 --带有武器弹药/耐久性条、装备武器、物品数量的物品袋
- X先生追踪器 (RE2)——实时人工智能状态(追逐/搜索/眩晕/遥信)、距离接近栏、位置、杀死/眩晕计时器、屏幕检测
- 游戏信息 --场景、难度、自适应难度等级以及伤害/中断倍数、保存计数
- 怪物 (MH Wilds)--大型怪物HP、种类、位置、距离
- 天气 (MH Wilds)-当前/下一个天气、混合率、游戏内时钟
- 设备 --武器属性、护甲、装饰
- 对象资源管理器 --浏览单例、浏览对象图、交互式检查字段和方法
不适用于当前游戏的卡片会自动隐藏。相同的插件二进制文件,相同的仪表板代码——它只是适应。
整个仪表板——每张卡、每个端点、每一行CSS——都是由AI代理使用此仓库中的MCP工具构建的。没有人写玩家HP栏、敌人列表、库存渲染器或X先生跟踪器。
过程:一个代理探索了实时游戏的对象图,以发现可用的数据。它编写了API端点来公开数据,编写了HTML/JS/CSS来呈现数据,针对正在运行的游戏进行了测试,并进行了迭代,直到它工作为止。完整的RE2仪表板——玩家、敌人、库存、游戏信息、X先生追踪器——大约需要30分钟。
每场比赛检测、自适应卡片可见性、RE2特定功能——所有这些都是通过回购提供的相同工具自主构建的。仪表板既是一个有用的功能,也是MCP服务器使之成为可能的证明。
运作原理
游戏插件使用REFramework.NET访问RE引擎的托管对象系统。每个游戏对象、单例、类型、字段和方法都可以通过类型数据库(TDB)访问。插件将其公开为REST API:
- 键入查询 直接转到TDB——不需要实时实例
- 物体检查 从游戏托管堆中的活动对象读取字段值
- 方法调用 通过REFramework的托管互操作层调用游戏方法
- 链查询 在服务器端遍历对象图,在单个请求中展开字段、调用方法、过滤和收集结果
MCP服务器是一个精简的翻译层。每个MCP工具都映射到一个HTTP端点。命名管道通道为编译/日志操作提供了一个辅助通信路径,这些操作必须在加载HTTP插件之前工作。
建筑
三个组件,每个组件都独立有用:
AI Agent / MCP Client
|
| MCP protocol (stdio)
v
+-----------------+
| MCP Server | mcp-server/ .NET console app
| (stdio bridge) | Translates MCP tool calls -> HTTP
+-----------------+
|
| HTTP (localhost:8899)
v
+-----------------+
| Game Plugin | plugin/ C# REFramework.NET plugin
| (HTTP server) | Runs inside the game process
+-----------------+
|
| REFramework.NET API
v
+-----------------+
| RE Engine | The actual game
| Game Process |
+-----------------+reframework/plugins/source/TestWebAPI.cs --加载的C#插件 重构框架 游戏内部。它在上启动HTTP服务器 localhost:8899,暴露 /api/* 通过REFramework.NET的托管API调用游戏引擎的端点,并从 WebAPI/ 文件夹。
reframework/plugins/source/WebAPI/ --一个带有实时对象浏览器和玩家仪表板的静态web前端。打开 http://localhost:8899 在游戏运行时在浏览器中。
mcp-server/ --一个独立的。NET 10控制台应用程序,通过stdio与MCP通信。它将MCP工具调用转换为对游戏插件的HTTP请求。还有一个命名的管道通道,用于带外操作(编译状态、日志、错误),这些操作甚至在HTTP插件加载之前就可以工作。
支持的游戏
REFramework支持的任何RE引擎标题:
| 游戏 | 便利性端点 |
|---|---|
| 怪物猎人:荒野 | 玩家、装备、怪物、地图、天气、大厅、库存、palico、材料、聊天、狩猎日志 |
| 生化危机2 | 玩家、敌人、库存、游戏信息(场景/难度/自适应等级)、X先生跟踪器(AI状态、距离、计时器) |
| 生化危机9 | 玩家、装备、敌人、地图、库存 |
| 《鬼泣5》、《龙的教条2》、RE 3/4/7/8、MH Rise、SF6。.. | 核心浏览器端点(适用于任何RE引擎游戏) |
该插件在预处理器符号后面有每个游戏的便利端点(#if MHWILDS, #elif RE9, #elif RE2).核心资源管理器端点——类型搜索、对象检查、字段读/写、方法调用——无需修改即可在任何RE引擎游戏中工作。
50+MCP工具
| 类别 | 工具 | 它们的作用 |
|---|---|---|
| 游戏状态 | get_player, get_equipment, get_map, get_monsters, get_inventory, get_stalker, get_weather, get_lobby, get_camera | 阅读玩家数据、装备、敌人、库存、X先生追踪器、天气、大厅 |
| 类型数据库 | search_types, get_type, get_tdb | 搜索和检查100k+类型数据库 |
| 对象资源管理器 | get_singleton, get_singletons, inspect_object, summary, read_field, call_method, get_array | 导航、检查和读取内存中的任何活动对象 |
| 突变 | invoke_method, write_field, set_health, set_position | 写入字段、调用方法、修改游戏状态 |
| 遍历 | chain, batch | 多步对象图导航和批处理操作 |
| 材料 | get_materials, set_material_visibility | 检查并切换网格材料可见性 |
| 本地化 | localize_guid | 将邮件GUID解析为本地化文本 |
| 开发工具 | compile_status, wait_compile, get_errors, clear_errors, get_log, clear_log | 监控热重载、读取编译错误、尾部日志 |
| 系统 | get_game_info, get_plugins, help | 游戏路径、加载的插件、代理导航指南 |
使用示例
连接后,您可以向您的代理询问以下问题:
- *“我目前的健康状况和职位是什么?”*
- *“找到管理天气的类型,并向我展示它的字段。”*
- *“将我的健康设置为最大。”*
但真正的力量在于开放式的请求。你不需要知道游戏的内部——代理会弄清楚的:
- *“弄清楚保存系统是如何工作的,并编写一个模块,将其扩展到90个保存槽。”*
- *“找出控制物品掉落率的因素,并制作一个将其加倍的插件。”*
- *“对损伤公式的工作原理进行逆向工程,然后编写一个添加损伤日志覆盖的C#插件。”*
- *“我想改变天气,让它永远阳光明媚。找到合适的单身汉,弄清楚田地,然后实现它。”*
现实世界示例:查询地图上的每个大型怪物(怪物猎人荒野,约7分钟)
一位用户问: *“当前加载了哪些大型怪物?请告诉我每个怪物的种类、生命值、最大生命值、位置以及与角色的距离。”*
该代理对游戏的敌方系统一无所知。它找到了敌人管理器单例,导航了一个多步骤对象图 chain 查询,并过滤到boss类型的敌人。它通过GUID定位解析怪物名称,读取HP和位置,并计算3D距离。在此过程中,它发现并纠正了一个不明显的枚举偏移错误 SPECIES_Fixed 和 SPECIES 变体。输入15个单词的问题,格式化表格。
| 怪物 | 物种 | 生命值 | 最大生命值 | 距离 |
|---|---|---|---|---|
| Doshaguma | 尖牙野兽 | 14400 | 14400 | 512米 |
| 拉拉·巴里纳 | 滕诺克兰 | 10483 | 10483 | 348米 |
| 拉提安 | 飞天飞人 | 11772 | 11794 | 207米 |
| Rathalos | 飞禽 | 13500 | 13500 | 309米 |
| 乌思·杜纳 | 利维坦 | 20196 | 20196 | 607米 |
Full step-by-step breakdown
- 获取玩家的位置 通过
get_player--稍后需要进行距离计算。 - 找到敌方经理 --
get_singleton("app.EnemyManager")获取敌方对象图的根。 - 浏览敌人名单 --多步骤
chain查询:EnemyManager->_EnemyList一cManagedArray) ->get_Array()->展开数组->过滤get_CharacterValid=True->get_Context()->get_Em()->Basic->过滤条件get_IsBoss=True。这从全部敌人池中产生了5个boss类型的敌人。 - 解析怪物名称 --呼叫
EnemyDef.EnemyName(ID)让每个老板都获得一个GUID,然后通过批量解析这些GUIDlocalize_guid以获取本地化名称。 - 阅读HP --导航每个敌人的
Context->Chara->HealthManager并致电get_Health()/get_MaxHealth(). - 读取位置 --呼叫
get_Pos()每个敌人的ManageInfo对象以获取世界坐标。 - 解析物种名称 --
EnemyDef.Species(ID)返回aSPECIES_Fixed枚举,但是EnemyDef.EmSpeciesName()期望非固定SPECIES枚举。这些看起来是相同的(相同的成员名称),但具有不同的底层整数值——_Fixed变量从0开始,而非固定变量从-1开始,将每个值移动1。代理通过比较数据对象上的支持字段、推断偏移模式、更正枚举值并获得正确的物种名称来发现这一点。 - 计算距离 --从每个怪物的位置到玩家的欧几里德3D距离。
现实世界示例:为《生化危机2》构建X先生跟踪器(约5分钟)
一位用户问: *“将Mr.X跟踪器添加到仪表板。”*
特工从未见过RE2的敌方系统。它探索 EnemyManager,发现 Em6200ChaserController 列表(生成X先生时计数=1),并导航到 Em6200Think AI大脑及其状态标志和计时器。
在那里,它编写了完整的功能:API端点,具有优雅的缺席处理,带有彩色状态徽章和距离接近条的仪表板卡,CSS和MCP工具注册。所有这些都是通过热重新加载部署的,并在运行中的游戏中进行了测试。
{
"active": true,
"status": "Chasing (Aggressive)",
"state": "Move",
"location": "RPD",
"playerDistance": 3.19,
"ai": { "isSleeping": false, "isEncounting": true, "isKillingMode": true, "isGhostMode": false },
"timers": { "killingTimer": 19.8, "sleepTimer": 0 }
}Full step-by-step breakdown
- 找到入口点 --
get_singleton("app.ropeway.EnemyManager"),然后发现get_Em6200ChaserController()返回aList(当X先生出生时,计数=1,当他不在当前场景中时,计数为0)。 - 绘制控制器地图 --检查了控制器对象:运动状态(停止/移动/等待/开门/过门/鬼门开门)、鬼门模式、位置ID、安全室检测、带禁用定时器的始终追踪模式。
- 导航到AI大脑 --
get_Think()控制器上的产量Em6200Think,它持有真实的AI状态:IsSleeping,IsEncounting,IsKillingMode,IsGhostMode,IsScreenTarget,加上距离跟踪(PlayerDistanceSq)、击杀/眩晕计时器和攻击视线计时器。 - 处理缺席案件 --当X先生未被生成时,追逐控制器列表为空。端点返回
{ active: false, reason: "Mr. X not spawned" }而不是崩溃。 - 写入端点 --作者
GetStalkerRE2()在插件中,注册了路由,通过热重载部署。 - 构建仪表板卡 --颜色编码的状态徽章(红色=追逐,黄色=搜索,绿色=震惊,紫色=遥信),随着X先生靠近而变为红色的距离接近栏,AI标志徽章和非零计时器显示。
自主发展
代理不仅可以读取游戏状态,还可以对实时游戏运行完整的开发循环:
- 发现。 在类型数据库中搜索相关单例。检查它们的字段和方法,探测活动对象以了解数据布局。代理扇出并行查询,以找到正确形状的填充集合。
- 写。 编写一个C#插件(或修改现有插件)并将其保存到游戏的
reframework/plugins/source/目录。 - 建造。 插件会自动进行热编译。代理通过MCP服务器读取编译状态和错误,无需手动检查。
- 测试。 部署执行特定行为的测试插件,从游戏日志中读取结果,并验证正确性。如果出现故障,代理会读取错误,修复代码并重新编译——所有这些都不需要人为干预。
- 迭代。 重复直到测试通过。代理可以定位候选对象,编写目标测试,修复错误输出中的字段名或类型不匹配,并自主收敛到工作代码。
例如:给定一个具有中断的集合迭代的C++API,代理会实时探测 Dictionary, HashSet, List,以及 Array 在多个游戏单例中使用对象来表征失败。它读取C++源代码以确定根本原因,编写修复程序并构建它。
然后它需要测试数据。它查询类型数据库并检查活动单例,以找到每种类型的已填充集合—— Dictionary 共有37个条目,a HashSet 共有113个条目,a Dictionary 使用结构键实现多样性。它组装了一个22测试回归套件,将其部署为热编译插件,读回日志,修复错误输出中的错误字段名,重新部署,并收敛为22 PASS,0 FAIL。在“修复损坏的枚举器”和最终结果之间,没有人触摸键盘。
代理商指南(help 工具)提供了详细的导航路径、链示例和提示——在任何新会话中都要先调用它。
许可证
麻省理工学院
