win4r/openclaw-a2a-gateway
OpenClaw plugin implementing the A2A (Agent-to-Agent) protocol v0.3.0 — bidirectional agent communication gateway
OpenClaw A2A 网关插件
是什么 – 专为 OpenClaw 代理平台设计的生产就绪型插件,实现了 Google A2A(代理间)v0.3.0 协议。它使运行在不同机器上的 OpenClaw 代理能够自动发现彼此,并通过 JSON-RPC、REST 或 gRPC 交换消息(文本、文件、JSON 数据)。
核心理念
| 概念 | 插件的处理方式 |
|---|---|
| 传输 | 自动尝试 JSON-RPC → REST → gRPC;失败时自动回退。支持带心跳的 Server-Sent-Events 流式传输,用于实时状态更新。 |
| 消息部分 | 支持 A2A 的三种部分类型 – TextPart、FilePart(URI 或 base64)、DataPart。在代理回复中发现的文件 URL 会自动转换为出站 FilePart。 |
| 路由 | 基于规则(正则表达式、标签、技能) + 生物启发的“希尔方程”亲和力评分,综合权衡技能、标签、模式匹配和成功率。每条消息选择最优对等节点。 |
| 发现 | 通过 DNS-SD(_a2a._tcp SRV/TXT)、mDNS 自我广播,以及根据已知对等节点数量自适应调整间隔的共识感知探测器,实现零配置对等发现。 |
| 弹性 | 四状态电路断路器(关闭 → 敏感度降低 → 打开 → 恢复),指数恢复机制,自适应传输排序,推送通知 Webhook,以及类 Michaelis-Menten 的软并发节流。 |
| 安全 | Bearer 令牌认证(单个令牌或轮换列表)、Ed25519 设备身份、SSRF 保护(主机白名单、MIME 白名单、大小限制)、JSON-L 审计日志、可选的认证指标端点、带 TTL 清理的持久化磁盘任务存储。 |
快速入门(零配置)
# 从 npm 安装(推荐)
openclaw plugins install openclaw-a2a-gateway
# 或从源码安装
mkdir -p ~/.openclaw/workspace/plugins && cd ~/.openclaw/workspace/plugins
git clone https://github.com/win4r/openclaw-a2a-gateway.git a2a-gateway
cd a2a-gateway
npm install --production
openclaw plugins install ~/.openclaw/workspace/plugins/a2a-gateway
openclaw gateway restart
# 验证代理卡是否可达
curl -s http://localhost:18800/.well-known/agent-card.json | python3 -m json.tool
插件将以默认代理卡启动(name: "OpenClaw A2A Gateway",skills: [chat])。
添加和配置对等节点
openclaw config set plugins.entries.a2a-gateway.config.peers '[
{
"name": "PeerB",
"agentCardUrl": "http://<PEER_IP>:18800/.well-known/agent-card.json",
"auth": {"type": "bearer", "token": "<PEER_TOKEN>"}
}
]'
openclaw gateway restart
为实现双向通信,双方需互相添加对方为对等节点并重启。
发送消息
插件附带一个帮助脚本,封装了官方 @a2a-js/sdk 客户端。
node <PLUGIN_PATH>/skill/scripts/a2a-send.mjs \
--peer-url http://<PEER_IP>:18800 \
--token <PEER_TOKEN> \
--message "Hello from Server A!"
长时间或多轮交互 可以在非阻塞模式下通过轮询运行:
node <PLUGIN_PATH>/skill/scripts/a2a-send.mjs \
--peer-url http://<PEER_IP>:18800 \
--token <PEER_TOKEN> \
--non-blocking --wait --timeout-ms 600000 --poll-ms 1000 \
--message "Discuss A2A advantages in 3 rounds"
若要针对远程端的特定 OpenClaw agentId(OpenClaw 特有扩展):添加 --agent-id <ID>。
代理端工具
插件注册了一个 a2a_send_file 工具,代理可调用:
| 参数 | 必填? | 含义 |
|---|---|---|
peer |
是 | 已配置对等节点的名称 |
uri |
是 | 文件的公共 URL |
name |
否 | 文件名(如 report.pdf) |
mimeType |
否 | MIME 类型(省略时自动检测) |
text |
否 | 可选说明 |
agentId |
否 | 远程 OpenClaw 代理 ID(扩展) |
代理可通过 TOOLS.md 条目指向 a-2-a-send.mjs 脚本来学习使用此工具。
网络选项
| 选项 | 使用场景 |
|---|---|
| Tailscale(推荐) | 服务器间安全网格;无需更改防火墙。 |
| LAN | 两台机器在同一局域网;只需开放端口 18800。 |
| 公网 IP | 公网暴露;必须使用 Bearer 令牌和可选防火墙规则保护。 |
配置参考(摘录)
{
"agentCard": {
"name": "OpenClaw A2A Gateway",
"description": "A2A bridge for OpenClaw agents",
"skills": [{"id":"chat","name":"chat","description":"Chat bridge"}]
},
"server": {"host":"0.0.0.0","port":18800},
"security": {"inboundAuth":"bearer","token":"<TOKEN>"},
"routing": {"defaultAgentId":"main","rules":[]},
"peers": []
}
关键部分包括 agentCard、server、security(令牌轮换、MIME 白名单、文件大小限制)、routing(默认 agentId、规则列表)和 peers(包含 URL 和认证信息的远程代理数组)。
谁会用到?
- 多代理部署:不同 OpenClaw 实例需要通信的场景(如聊天机器人集群、社交媒体自动化机器人、分布式工具调用代理)。
- 研究人员:构建大规模代理生态系统,希望实现自动发现和生物启发式路由,而无需编写自己的网络层。
- 运维团队:已运行 OpenClaw,需要在数据中心、边缘或云节点之间建立安全、零配置的桥接。
TL;DR
OpenClaw A2A 网关 是一个即装即用的 Node.js 插件,为 OpenClaw 代理提供符合标准、自动发现、具备弹性的跨机器调用能力。它开箱即用处理传输回退、部分序列化、基于技能的路由、安全性和可观测性,仅需几条命令即可部署。
相关
- 项目
- 项目
- 项目