一个本地 MCP 端点 + 一份给 AI 的规范:透传官方插件的 24 个工具、 接上你本机跑的 Creator 引擎、认工程、改两端脚本、查官方 API。
$ 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 个
先划边界。这三条是设计决定,不是待办事项。
官方插件在跑就把它的工具原样透传;没跑也不假装能做——
返回 isError 并说清该跑什么。
不调 code-api-pc.dao3.fun,不读凭据文件。
连接目标只有 127.0.0.1:你自己机器上的插件与引擎。
读操作默认放行;写与运行控制(上传脚本、改数据空间、停预览)
必须显式带 confirm:true。
unknown tool,Agent 就认为契约对不上,然后开始猜接口。
默认端口 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 能做的事" 不会各说一套。默认软链安装也是同一个理由:改这份仓库,所有装了它的工程立刻跟着变。
官方引擎的 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 |
接进去的前提是先认清拓扑——官方文档里它们分散在三个页面,从没被合并过。
| 来源 | 传输 | 面 | 本包怎么处理 |
|---|---|---|---|
| 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:用户、地图、评论、留存、行为 | 拒绝 要出公网 |
工程层 10 个 + 引擎层 6 个 = 本地 16 个;要出公网的一律明确不做。
project_info 认工程(bundle / env / d.ts / 脚本数)·
script_list · script_read / script_write
(钉在工程根内,被改过先拒绝)· api_search / api_class ·
dts_check · env_show(凭据只报有无)·
build_status · apc_plan
engine_status 探测 Creator 与 apc · engine_projects 列地图 ·
engine_script_get · engine_storage_get ·
engine_runtime_status · engine_run(写操作要
confirm:true,命令原文一并回显)
GameAPI.d.ts 实测 24585 行、134 个顶层类型、880 个成员;ClientAPI.d.ts 另有 48 / 145。apc map resource --type dts 拉进工程,跟着工程版本走;自带一份等于冻结,AI 会拿旧签名写新工程。@zh 单独一行、@param 后第二个 @zh、private constructor()、参数内联对象、返回值对象类型、CRLF 行尾。AI 最容易犯的错不是语法,是单位搞错和接口名编出来。
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。
$ 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。
写命令被挡时,测试会去查一个标记文件,证明进程根本没起来,而不是只看有没有报错。
endpoint 帧按规格是纯文本 URL,实现时多包了一层 JSON 引号,
结果任何真实 MCP 客户端都连不上,而本地测试全绿——因为测试客户端跟着一起错。
诚实说明:官方 ArenaPro 插件未安装在本机,"透传"是对着协议夹具验证的——它证明我们的 SSE
客户端与路由规则正确,不证明与官方实现字节级兼容。apc
那层同理用的是假 CLI 夹具;真机要自己装 @box3lab/arenapro-cli 并配好 Profile。
Creator 的连通性探测是对着本机真实 3127 验过的。