游戏AI桥接服务器

BotWithUs MCP Server是一个连接AI助手(如Claude Code)与游戏的协议服务器,通过管道服务器提供游戏状态查询、动作执行和缓存查找功能。

  • by BotWithUs
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 BotWithUs/BotWithUsV2RPCProtocol

使用说明

BotWithUs MCP服务器

MCP(模型上下文协议)服务器,通过管道服务器将Claude Code等AI助手连接到游戏。将游戏状态查询、操作和缓存查找作为MCP工具公开。

先决条件

  • Python 3.10+
  • 游戏运行 agentcpp 注入(创建 \\.\pipe\BotWithUs_{PID})

安装

cd mcp_server
pip install -r requirements.txt

依赖关系: mcp[cli]>=1.0.0, msgpack>=1.0.0, pywin32>=306

Claude代码配置

添加到您的Claude Code MCP配置中(.claude.json, claude_desktop_config.json,或通过 claude mcp add):

{
  "mcpServers": {
    "botwithus": {
      "command": "python",
      "args": ["C:/path/to/BotWithUs2/mcp_server/server.py"]
    }
  }
}

要在多个游戏实例运行时瞄准特定的游戏实例,请执行以下操作:

{
  "args": ["C:/path/to/BotWithUs2/mcp_server/server.py", "--pid", "12345"]
}

独立运行

# Auto-discover (fails if multiple instances running)
python server.py

# Target specific PID
python server.py --pid 12345

连接行为

服务器发现匹配的管道 \\.\pipe\BotWithUs_* 在启动时。只需一个游戏实例,它就会自动连接。对于多个实例, --pid 是必需的。管道连接在第一次工具调用时延迟建立,如果断开,则会自动重新连接。

可用工具

实体查询

工具 说明
query_npcs 按类型、名称、半径、战斗状态、移动方式查找NPC
query_players 查找具有相同筛选条件的玩家
query_locations 查找游戏对象/位置
query_ground_items 查找基础项目堆栈(将项目内联返回)
query_entities 任何实体类型的通用查询
query_obj_stacks 查找地面烟囱(仅手柄)
query_projectiles 查找活动射弹
query_spot_anims 查找活动点动画
query_hint_arrows 查找活动提示箭头

实体详细信息

工具 说明
get_entity_info 按手柄显示完整的NPC/玩家详细信息
get_entity_name 按句柄命名
get_entity_health 当前和最大健康状况
get_entity_position 瓷砖位置
get_entity_animation 当前动画ID
get_animation_length 动画序列的长度(以刻度为单位)
get_entity_hitmarks 主动伤害飞溅
get_entity_overhead_text 头顶聊天文本
get_entity_screen_positions 多个实体的屏幕位置
is_entity_valid 检查手柄是否仍然有效

UI组件和界面

工具 说明
query_components 按界面、项目、角色、文本、选项搜索
get_component_text 文本内容
get_component_item 按组件持有的项目
get_component_position 屏幕位置和大小
get_component_options 右键单击菜单选项
get_component_sprite_id 雪碧ID
get_component_type 组件类型
get_component_children 图层的子组件
is_component_valid 检查组件是否存在
get_open_interfaces 所有开放接口
is_interface_open 检查接口是否打开

库存和物品

工具 说明
query_inventories 列出所有活动库存
query_inventory_items 在库存中搜索项目
get_inventory_item 特定插槽中的项目
get_item_vars 插槽的项目变量
get_item_var_value 特定项目变量值
get_obj_stack_items 按手柄放置在地面堆中的物品

游戏状态

工具 说明
get_local_player 本地玩家信息(位置、健康、动画)
get_account_info 帐户详细信息(显示名称、成员状态、运行能量)
get_game_cycle 当前游戏滴答计数器
get_login_state 登录状态、进度、状态
get_mini_menu 当前右键菜单项
get_grand_exchange_offers 所有GE提供的插槽
get_current_world 当前世界ID
query_worlds 所有可用世界
get_player_stats 所有技能级别和XP
get_player_stat 单技能状态
query_chat_history 最近的聊天消息

游戏变量

工具 说明
get_varp 玩家变量值
get_varbit Varbit值
get_varc_int 客户端变量(int)
get_varc_string 客户端变量(字符串)
query_varbits 批量读取多个变量

缓存和配置查找

工具 说明
get_item_type 项目定义(名称、选项、价格、插槽)
get_npc_type NPC定义(名称、战斗级别、选项)
get_location_type 对象定义(名称、大小、选项)
get_enum_type 枚举键值映射
get_struct_type 结构参数包
get_sequence_type 动画序列数据
get_quest_type 任务定义
get_cache_file 原始缓存文件数据
get_cache_file_count 缓存索引中的文件计数

渲染和坐标

工具 说明
get_world_to_screen 投影瓷砖到屏幕位置
batch_world_to_screen 批量拼接到屏幕投影
get_entity_screen_positions 多个实体的屏幕位置
get_viewport_info 投影/视图矩阵和视口
get_game_window_rect 窗口位置和大小
take_screenshot 将游戏帧缓冲区捕获为PNG格式

行动(不安全)

这些工具可以修改游戏状态。它们是前缀 [UNSAFE] 在他们的描述中。

工具 说明
queue_action 排队单个游戏动作
queue_actions 以原子方式排队多个操作
clear_action_queue 清除所有待处理的操作
set_actions_blocked 阻止/取消阻止操作处理
get_action_queue_size 未决诉讼计数
get_action_history 最近的行动历史
get_last_action_time 上次操作的时间戳
are_actions_blocked 检查操作是否被阻止

登录和会话控制(不安全)

工具 说明
set_world 设置登录/跳转的目标世界
change_login_state 更改登录状态机
login_to_lobby 从登录屏幕登录大厅
get_auto_login 检查是否启用了自动登录
set_auto_login 启用/禁用自动登录
get_humanization_enabled 检查输入人性化是否启用
set_humanization_enabled 启用/禁用输入人性化
schedule_break 计划注销中断时间(毫秒)
interrupt_break 取消预定休息

脚本执行(不安全)

工具 说明
get_script_handle 获取客户端脚本的句柄
execute_script 使用int/string参数执行脚本
destroy_script_handle 释放脚本句柄
fire_key_trigger 在UI组件上按下按键输入

效用

工具 说明
ping 检查连接
list_methods 列出所有已注册的RPC方法
compute_name_hash 计算实体过滤的名称哈希

线路协议

MCP服务器通过Windows命名管道使用msgpack与管道服务器通信。每条消息的框架如下:

[4 bytes: little-endian uint32 body length] [N bytes: msgpack-encoded JSON body]

看 ../claudedocs/pipe_server_api.md 以获取完整的RPC方法参考。