arenapro-kit v0.2.2
Local AI access layer

把 AI 接进官方 ArenaPro

一个本地 MCP 端点 + 一份给 AI 的规范:透传官方插件的 24 个工具、 接上你本机跑的 Creator 引擎、认工程、改两端脚本、查官方 API。

0依赖包 · 不用 npm install
25316默认端口,让开官方 25315
1018官方 d.ts 成员可检索
129条断言

接上之后 AI 能干什么

  • 读你的 ArenaPro 工程,改两端脚本
  • 查官方 API 真实签名,不靠编
  • 透传插件工具:构建、上传、看地图
  • 连本机 Creator 引擎列项目、读脚本
node mcp/server.mjs --project ./my-arena
启动输出
$ node mcp/server.mjs --project ./my-arena
arenapro-kit MCP 已启动   http://127.0.0.1:25316/ap-mcp
工程目录              ./my-arena
官方插件在线          127.0.0.1:25315 · 透传 24 个工具
本地 Creator          127.0.0.1:3127 · 可达(未认证会跳登录)
apc CLI               已装 v0.7.0
本包工具              本地 16 个 · 明确不做 46 个

01它不是什么

先划边界。这三条是设计决定,不是待办事项。

不是 ArenaPro 的替代

官方插件在跑就把它的工具原样透传;没跑也不假装能做—— 返回 isError 并说清该跑什么。

不碰官方远程接口

不调 code-api-pc.dao3.fun,不读凭据文件。 连接目标只有 127.0.0.1:你自己机器上的插件与引擎。

不替你点危险的按钮

读操作默认放行;写与运行控制(上传脚本、改数据空间、停预览) 必须显式带 confirm:true。

需要出公网的工具照样出现在 tools/list 里。不列出来才会出问题:客户端按官方清单调用拿到 unknown tool,Agent 就认为契约对不上,然后开始猜接口。

02三十秒接上

默认端口 25316,故意让开官方插件的 25315。插件与引擎中途启停都会自动重探,不用重启本服务。

$ git clone https://github.com/deepseekv5/arenapro-kit && cd arenapro-kit
$ node mcp/server.mjs --project /path/to/my-arena        # 零依赖,不用 npm install
$ ./install.sh /path/to/my-arena                        # Skill 软链进那个工程
$ node skill/arenapro/scripts/arenapro.mjs info --project /path/to/my-arena
// IDE 侧 .vscode/mcp.json
{ "servers": { "arenapro-kit":
    { "type": "sse", "url": "http://localhost:25316/ap-mcp" } } }

命令行与 MCP 用的是同一份工具实现,所以"CLI 里能做的事"和"AI 通过 MCP 能做的事" 不会各说一套。默认软链安装也是同一个理由:改这份仓库,所有装了它的工程立刻跟着变。

03连你本机跑的 Creator 引擎

官方引擎的 Web 端是 Docker 部署的一组服务,端口分工固定: 3127 Creator、3125 登录、3124 玩家管理、3123 VOXA。 本包把这层做成可配置目标,默认 127.0.0.1:3127。

不猜私有端点,走官方客户端

Creator 的 HTTP 接口官方没有公开文档。硬猜路径会做出一个"看起来能用、 一升级就崩"的适配层。所以本包驱动官方 CLI apc—— 0.7.0 起全部命令支持 --json,官方明确说 "自动化只解析 JSON 标准输出,用非零退出码当失败信号"。

凭据一步都不碰

CLI Token 存在 apc 自己的 Profile 私密凭据里, 本包不读、不打印、不写盘,也拒绝代传 --token。 连不上就照实说是"没装 apc"、"没配 Profile"还是"服务没起"。

探测是怎么判断的

未登录时 127.0.0.1:3127/ 会 307 到 /projects, 再跳到 3125/?source=creator&returnUrl=…。 本包手动连跳几跳(最多 4 跳)看落点:跳到别的端口就算"服务活着、只是没会话", 而不是笼统一句"连不上"。整条跳转链原样回显,方便你自己核对。

读操作直接做,写操作要确认

动作命令本包策略
引擎连不连得上apc profile test --json自动
列本机地图 / 项目apc map list --json自动
看工程绑定与健康apc project info --json自动
读地图上的脚本apc script get <entry> --side …自动
读数据空间apc storage list / get自动
上传脚本apc script upload …要 confirm
写 / 删数据空间apc storage set / delete要 confirm
启停预览运行apc runtime start / stop / restart要 confirm
引擎是内部部署,所以本包不打包它的任何私有端点,也不假设版本号—— 没装 apc、没配 Profile、服务没起,会分别说清楚。

04官方 MCP 其实是三个东西

接进去的前提是先认清拓扑——官方文档里它们分散在三个页面,从没被合并过。

来源传输面本包怎么处理
ArenaPro 插件
VS Code 扩展
SSE :25315/ap-mcp 24 个工具:账号 userCenterTool_*、构建上传 file_*、地图 map_*、知识库 透传 插件提供的名字以插件为准
@box3lab/engine-openapi-mcp stdio 6 tool + 5 prompt,写脚本与存储(/open 前缀) 拒绝 要出公网,指向 apc script upload
@box3lab/statistics-mcp stdio 19 个只读 GET:用户、地图、评论、留存、行为 拒绝 要出公网
官方插件那 24 个工具的参数 schema 没有公开。所以本包不猜形状、只做转发—— 猜出来的入参比没有更危险。

05工具面

工程层 10 个 + 引擎层 6 个 = 本地 16 个;要出公网的一律明确不做。

工程层 10 个

project_info 认工程(bundle / env / d.ts / 脚本数)· script_list · script_read / script_write (钉在工程根内,被改过先拒绝)· api_search / api_class · dts_check · env_show(凭据只报有无)· build_status · apc_plan

引擎层 6 个

engine_status 探测 Creator 与 apc · engine_projects 列地图 · engine_script_get · engine_storage_get · engine_runtime_status · engine_run(写操作要 confirm:true,命令原文一并回显)

API 规范读的是工程自带的 d.ts

06三条会咬人的规范

AI 最容易犯的错不是语法,是单位搞错和接口名编出来。

单位是「格 / tick」

TICK_MS = 64 → 15.625 tick/秒,不是 20 TPS。 walkSpeed 0.22 ≈ 3.4 格/秒。当成格/秒,人物慢 15 倍。

四元数是 xyzw

实测官方 432 个实体朝向:276 个 [0,0,0,1]、0 个 [1,0,0,0]。反了不报错,只在非零旋转上暴露。

两端全局不是一套

服务端独占 storage voxels resources 与全部 Game*;客户端独占 ui input 与全部 Ui*。 写错端不报错,是 undefined。

查不到就输出:这通常意味着官方没有这个接口——不要凭印象编一个出来。 假接口比空实现危险得多:能过语法检查、能跑起来、然后运行时静默什么都不做。

07验证

$ node test/parser.test.mjs
parser: 20 passed, 0 failed     # d.ts 解析器 vs 独立实现
$ node test/engine.test.mjs
engine: 24 passed, 0 failed     # Creator 探测、只读白名单、confirm 闸门
$ node test/kit.test.mjs
kit: 50 passed, 0 failed        # MCP 契约、透传优先级、脱敏、写边界
$ node test/example.test.mjs
example: 11 passed, 0 failed     # 示例代码逐个成员对官方 d.ts
$ node test/site.mjs
site: 25 passed, 0 failed       # 文档里的数字必须等于代码里的数字

测试里自己实现了一个最小 MCP 客户端(开 SSE、按 JSON-RPC 走 initialize → tools/list → tools/call),不 import 被测的 bridge—— 自己测自己等于自己给自己打分。另外起了两个夹具:假插件与假 apc。 写命令被挡时,测试会去查一个标记文件,证明进程根本没起来,而不是只看有没有报错。

这条踩过一次:MCP 的 endpoint 帧按规格是纯文本 URL,实现时多包了一层 JSON 引号, 结果任何真实 MCP 客户端都连不上,而本地测试全绿——因为测试客户端跟着一起错。

诚实说明:官方 ArenaPro 插件未安装在本机,"透传"是对着协议夹具验证的——它证明我们的 SSE 客户端与路由规则正确,不证明与官方实现字节级兼容。apc 那层同理用的是假 CLI 夹具;真机要自己装 @box3lab/arenapro-cli 并配好 Profile。 Creator 的连通性探测是对着本机真实 3127 验过的。