MCP 正式标准
Issue #13 将 MCP 入口从“预览”状态转为正式的 claw-bot Agent Harness 接口。这里的“正式”只描述本仓库已冻结并可复现的协议、schema 和隔离验证标准,不表示已连接控制器或完成真机验收。
判定标准
一次候选变更只有同时满足以下条件,才能移除预览标记:
- 能力面固定:
initialize返回claw-bot,tools/list只包含robot_status、robot_configure_environment、robot_perceive、robot_act、robot_subscribe、robot_feedback六个工具;不得依赖机器人型号猜测能力。 - schema 可断言:每个工具的
inputSchema是对象 schema,必填字段与执行器一致;robot_act必须要求action。每个 dry-run case 的结果必须含结构化request,且动作与 case 的expectedAction完全匹配。 - dry-run 全覆盖:
BENCHMARK_CASES的 simple、medium、complex、recovery 四类全部执行;npm run benchmark:robot -- --runner mcp --case all --iterations 3 --json的summary.failed为 0、summary.schemaAccuracy为 1。 - 隔离:验收使用临时
HOME、合成端口或端口 0、独立:memory:Host 状态和dryRun: true。测试不得读取用户已安装配置、真实凭据或真实机器人状态,不得调用控制器;网络动作只允许明确的无效测试端点。 - 传输:stdio 每行一个 JSON-RPC 消息;stdout 只输出协议响应,诊断写 stderr;initialize、tools/list 和代表性 tools/call 在 3 秒内完成。
- 边界声明:标准通过仅证明本地 MCP 合同与安全隔离。部署、控制器、Jetson、语音和真机结果必须另行验收。
stdio 关闭时的在途请求
stdin EOF 或程序调用 runRobotMcpServer().close() 后停止接收新请求;已接收的请求继续并行完成、保存 Host 反馈并写出对应响应,之后才关闭工具集合和释放 Host writer。close() 返回的 Promise 在此时完成,重复调用不会重复关闭 Host。此行为不重放动作、不把 ACK 变成完成,也不新增并发上限或超时;控制器仍使用原有超时与结果对账规则。
回归测试使用独立临时 Host 数据库和延迟的合成控制器,验证 EOF 后 terminal result 持久化、重新打开时结果保留,以及显式关闭、工具失败和 JSON 解析错误的响应顺序。
可复现命令
TMP_HOME="$(mktemp -d)"
trap 'rm -rf "$TMP_HOME"' EXIT
HOME="$TMP_HOME" npm test
HOME="$TMP_HOME" npm run benchmark:robot -- --runner mcp --case all --iterations 3 --json
HOME="$TMP_HOME" npm run pack:check
npm test 是合并前全量门槛;benchmark 的 JSON 输出是 MCP 正式标准的直接证据。若全量测试只因 issue #9、#10、#11 的主分支修复尚未进入本分支而失败,应在 PR 中逐项注明原始失败与对应并行 PR,不得把失败写成该标准已通过。
版本与退役
正式接口通过当前 server.json 的 stdio 包声明和 package.json 的 mcpName 标识。后续协议或 schema 变化必须更新本文件、对应测试和验收命令;不得以兼容别名掩盖已移除的 v0 surface。