跳转至

MCP 接入

Master 在 /mcp 提供无状态的 MCP Streamable HTTP 接口,供 Codex 等 MCP Host 使用。 它与 REST 共用 Client Token、Worker 所有权、任务路由和结果关联,不会建立第二条 Worker 投递通道。

连接参数

POST https://master.example.com/mcp
Authorization: Bearer <client-token>
Content-Type: application/json
Accept: application/json, text/event-stream

只有 client 类型的 Bearer Token 可用。Web Session、管理员 Token、Worker Session 和 Worker 注册令牌都会被拒绝。端点无 MCP Session 状态,GET /mcp 不受支持;包括 initializepingtools/list 在内的每个请求都必须携带 Token。

当请求带有 Origin 时,Master 会按 public_url 检查它;非浏览器 MCP Host 通常不发送 Origin。公网部署请使用 HTTPS,并设置正确的 public_url

初始化

服务器支持 MCP 协议版本 2025-03-26

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "initialize",
  "params": {
    "protocolVersion": "2025-03-26",
    "capabilities": {},
    "clientInfo": {"name": "example-client", "version": "0.1.0"}
  }
}

随后可发送 notifications/initialized;通知返回 202 且无响应体。

工具

工具 用途
workers_list 列出当前 Client Token 可见的 Worker
worker_get 按 Worker ID 或所属名称查看节点
plugin_list 获取目标 Worker 最近上报的插件快照
plugin_call 调用在线 Worker 的一个本地插件工具
task_get 查询任务状态和结果
task_wait 在受限时长内等待任务状态变化
task_cancel 请求取消待处理或运行中的任务

plugin_callworker 参数可传精确的 worker_id 或当前用户所属的 worker_name。插件名、工具名和参数应先由 plugin_list 获取,不要假定所有 Worker 都有 相同工具。

调用示例

{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "plugin_call",
    "arguments": {
      "worker": "build-host",
      "plugin_id": "filesystem",
      "tool_name": "read_file",
      "arguments": {"path": "/workspace/README.md"},
      "timeout_seconds": 60
    }
  }
}

这个请求只会创建 plugin_call 任务。Master 入队后等待 Worker claim;Worker 再启动其 本地插件进程完成调用。MCP Handler 不会直接运行插件。若等待窗口结束仍未完成,响应会带回 任务 ID 和当前状态,后续使用 task_gettask_wait 查询。

curl 诊断

curl -fsS https://master.example.com/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "Authorization: Bearer <client-token>" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'

MCP 错误采用 JSON-RPC 形状,并保留 CapOwn 可机器读取的任务和插件错误码。REST 端点、 完整输入输出和错误码以 OpenAPI 合约为准。