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 的三种部分类型 – TextPartFilePart(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": []
}

关键部分包括 agentCardserversecurity(令牌轮换、MIME 白名单、文件大小限制)、routing(默认 agentId、规则列表)和 peers(包含 URL 和认证信息的远程代理数组)。


谁会用到?

  • 多代理部署:不同 OpenClaw 实例需要通信的场景(如聊天机器人集群、社交媒体自动化机器人、分布式工具调用代理)。
  • 研究人员:构建大规模代理生态系统,希望实现自动发现和生物启发式路由,而无需编写自己的网络层。
  • 运维团队:已运行 OpenClaw,需要在数据中心、边缘或云节点之间建立安全、零配置的桥接。

TL;DR

OpenClaw A2A 网关 是一个即装即用的 Node.js 插件,为 OpenClaw 代理提供符合标准、自动发现、具备弹性的跨机器调用能力。它开箱即用处理传输回退、部分序列化、基于技能的路由、安全性和可观测性,仅需几条命令即可部署。

相关

  • 项目
  • 项目
  • 项目