OpenClaw admin-http-rpc 插件:用 HTTP 管理 Gateway

> 来源: OpenClaw v2026.5.18 内置插件

> 日期: 2026-05-19

> 评分: ★★★★☆ (4/5) — 小巧、安全设计到位,但使用场景有限

一句话版本

admin-http-rpc 是 OpenClaw v2026.5.18 新增的内置插件,让你可以用 HTTP POST 请求调用 Gateway 的管理方法——查状态、改配置、启停频道、管理 Agent、操作审批流、跑 cron 任务、管理设备节点等,适合脚本和自动化场景。默认关闭,需要手动启用。

项目概况

指标数据
插件 ID`admin-http-rpc`
版本2026.5.18(随 OpenClaw 内置发布)
语言TypeScript
许可证同 OpenClaw(专有)
路由`POST /api/v1/admin/rpc`
激活方式`onStartup: false`,显式 enable 后触发
代码规模~350 行(4 个文件)

为什么需要这个插件

OpenClaw 的管理接口(RPC)默认走 WebSocket 协议。这对交互式客户端很好,但有些场景用不了 WebSocket:

admin-http-rpc 就是给这些场景用的——纯 HTTP 请求/响应,无状态,随调随走。

启用方式


# 启用
openclaw plugins enable admin-http-rpc
openclaw gateway restart

# 停用
openclaw plugins disable admin-http-rpc
openclaw gateway restart

或者直接在配置文件里加:


{
  plugins: {
    entries: {
      "admin-http-rpc": { enabled: true },
    },
  },
}

可用方法(13 类,50+ 个)

分类方法用途
**discovery**`commands.list`查询这个插件支持哪些方法
**gateway**`health`, `status`, `logs.tail`Gateway 健康/状态/日志
`usage.status`, `usage.cost`用量统计
`gateway.restart.request`请求重启 Gateway
**config**`config.get`, `config.schema`, `config.schema.lookup`查配置
`config.set`, `config.patch`, `config.apply`**写配置**(危险)
**channels**`channels.status`, `channels.start`通道启停
`channels.stop`, `channels.logout`
**web**`web.login.start`, `web.login.wait`**Web QR 扫码登录**(新功能)
**models**`models.list`, `models.authStatus`模型/供应商状态
**agents**`agents.list`, `agents.create`Agent 管理
`agents.update`, `agents.delete`
**approvals**`exec.approvals.get/set`审批流管理
`exec.approvals.node.get/set`节点审批
**cron**`cron.status/list/get/runs`cron 查询
`cron.add/update/remove/run`cron 管理
**devices**`device.pair.list/approve/reject/remove`设备配对
**nodes**`node.list/describe/rename`节点管理
`node.pair.list/approve/reject/remove`节点配对
**tasks**`tasks.list/get/cancel`任务管理
**diagnostics**`doctor.memory.status`, `update.status`诊断信息

使用示例

最简单的请求——查健康


curl -sS http://localhost:8080/api/v1/admin/rpc \
  -H 'Authorization: Bearer <gateway-token>' \
  -H 'Content-Type: application/json' \
  -d '{"method":"health"}'

响应:


{
  "id": "自动生成的UUID",
  "ok": true,
  "payload": { "status": "ok" }
}

查支持的 method 列表


curl -sS http://localhost:8080/api/v1/admin/rpc \
  -H 'Authorization: Bearer <token>' \
  -H 'Content-Type: application/json' \
  -d '{"method":"commands.list"}'

改配置并重启


curl -sS http://localhost:8080/api/v1/admin/rpc \
  -H 'Authorization: Bearer <token>' \
  -H 'Content-Type: application/json' \
  -d '{"method":"config.set", "params": {"model": "gpt-4"}}'

请求/响应格式

请求

POST /api/v1/admin/rpc + JSON body:


{
  "id": "可选,不传自动UUID",
  "method": "health",
  "params": {}
}

Body 大小限制:1MB。

响应

成功:


{
  "id": "请求ID",
  "ok": true,
  "payload": {}
}

失败:


{
  "id": "请求ID",
  "ok": false,
  "error": {
    "code": "INVALID_REQUEST",
    "message": "bad params"
  }
}

HTTP Status 映射:

Error CodeHTTP Status
`INVALID_REQUEST`400
`APPROVAL_NOT_FOUND`404
`UNAVAILABLE`503
`AGENT_TIMEOUT`504
`NOT_LINKED` / `NOT_PAIRED`409
其他500

插件禁用时路由不存在 → 404

安全模型

认证

三种方式,取决于 gateway.auth.mode

模式认证方式
`token` / `password``Authorization: Bearer `(全权限)
`trusted-proxy`信任上游代理注入的 identity header(支持 scope 限制)
`none`不经认证(**只有在内网且你完全信任时才用**)

核心安全原则

> 别暴露到公网。永远。

文档用了大幅篇幅强调这三点:

1. 只用在本机、tailnet 或私有可信 ingress

2. 共享 token 的 WebSocket 客户端本来不能自行声明 admin scope,但 HTTP RPC 走的是不同的信任模型——有 token = 全权限操作

3. gateway.auth.mode="none" + 开了这个插件 = 路由无认证。这种配置只适合在你完全信任的私有内网背后

白名单限制

methods.ts 里有一个硬编码的 ADMIN_HTTP_RPC_ALLOWED_METHODS 白名单 Set。只有写在这的 50+ 个方法能通过 HTTP 调用。其他 Gateway RPC 方法被拦截,需要手动扩增。

代码架构


extensions/admin-http-rpc/
├── openclaw.plugin.json    # 插件清单(onStartup: false, contracts配置)
├── package.json            # 包定义
├── tsconfig.json           # TypeScript 配置
├── index.ts                # 插件入口:路由注册到 /api/v1/admin/rpc
├── index.test.ts           # 测试(验证路由注册、activation 开关)
└── src/
    ├── handler.ts          # HTTP 请求处理(JSON 解析、校验、分发)
    └── methods.ts          # 白名单列表(13 类 50+ 方法)

核心流程


HTTP POST → readJsonBody(解析JSON, 1MB限制)
         → readRpcRequestBody(校验method字段)
         → isAdminHttpRpcAllowedMethod(白名单检查)
         → commands.list? 直接返回列表
         → dispatchGatewayMethod(转发给Gateway处理器)
         → rpcHttpStatus(错误码→HTTP status)
         → sendJson(返回RPC响应)

认证在 registerHttpRoute({ auth: "gateway" }) 阶段由 Gateway 框架处理,插件层只处理业务逻辑。

和 Control UI 的关系

Control UI 用的是 WebSocket RPC,不是 admin-http-rpc

OpenClaw 的 Control UI(Web 管理界面)不用 admin-http-rpc 插件。Control UI 的 GatewayBrowserClientui/src/ui/gateway.ts)直接通过 WebSocket 连接 Gateway:


浏览器 → new WebSocket("ws://gateway:port") → 发送 connect 帧(含设备签名/nonce)
       → Gateway 认证通过 → 双向通信
       → client.request("health", {}) → 发 {type:"req", id, method, params} 帧
       → Gateway 返回 {type:"res", id, ok, payload} 帧

每个控制器(health.ts, agents.ts, config.ts…)都调 client.request() 走这个 WebSocket 通道,同时还能收 event 推送(presence、health 变更等)。

两者的对比如下

维度Control UIadmin-http-rpc
传输协议**WebSocket**(长连接)HTTP POST(请求/响应)
启动方式内置于 Gateway,默认启用插件,默认关闭,需手动 enable
认证方式设备签名 + nonce + 可选 BearerGateway HTTP auth(Bearer / trusted-proxy / none)
调用端浏览器 JS脚本/curl/CI/CD
可用方法无白名单限制(全量 Gateway RPC)白名单限制(50+ 个方法)
推送能力✅ 支持服务端 event 推送❌ 无推送,只能轮询
重连逻辑✅ 内置自动重连(背压/设备认证)❌ 无状态,无重连必要
路由WebSocket 握手路径`POST /api/v1/admin/rpc`

管理界面登录(Web QR)

有趣的是,admin-http-rpc 中有一个 web.login.startweb.login.wait 方法,用于Web QR 扫码登录流程——这个功能是 Control UI 的 WebSocket 通道做不到的,因为 QR 流转需要:

1. 用户在浏览器打开二维码页面 → 调用 web.login.start 获取 QR 码

2. 手机扫描 QR → Gateway 收到登录确认

3. 浏览器轮询/长轮询 → web.login.wait 直到登录完成

这个场景不适合 WebSocket(用户在扫码前可能还没连上 Gateway),所以通过 HTTP RPC 做反而是自然的。

小结

适用场景

✅ 适合用

❌ 不适合用

评分表

维度评分说明
功能完整性★★★★☆覆盖了 Gateway 核心管理方法,13 类 50+ 方法
安全设计★★★★★默认关闭、白名单、文档强调内网使用、HTTP status 映射仔细
代码质量★★★★★小巧清晰(~350 行),TypeScript,完整测试覆盖
实用性★★★☆☆场景窄(主要是非 WebSocket 自动化),但对有需求的人很关键
文档★★★★★文档极其详细,含启用/认证/安全/对比/故障排查
**综合****★★★★☆**设计精良的"内部工具"型插件,在它该做的事情上做得很到位

资源链接