A2A protocol bridge plugin for OpenClaw — agent card, JSON-RPC endpoint, and remote agent tools
openclaw-a2a-bridge is an early-stage JavaScript project in the AI payments / x402 ecosystem, focused on a2a, agent-to-agent, ai-agent, interoperability. It currently has 6 GitHub stars and 2 forks, and sits alongside related tools like agentanycast, voidly-pay, kudosflow.
Bridges the standard A2A protocol (Agent-to-Agent) to OpenClaw's internal chat completions endpoint. Enables bidirectional A2A communication between OpenClaw and external agents.
/.well-known/agent-card.json so external A2A agents can discover your OpenClaw instance/a2a — external agents call OpenClaw via standard JSON-RPC message/senda2a_call_remoteExternal Agent OpenClaw (:18789)
├── a2a_call("krolik") ──────→ ├── a2a-bridge plugin
│ │ ├── /.well-known/agent-card.json
│ │ ├── /a2a (JSON-RPC)
│ │ └── → /v1/chat/completions
│ ←────── │
├── A2A Server ←────── ├── a2a_call_remote tool
{
"gateway": {
"http": {
"endpoints": {
"chatCompletions": { "enabled": true }
}
}
}
}
Clone the plugin into your OpenClaw extensions directory:
cd ~/.openclaw/extensions
git clone https://github.com/anatolykoptev/openclaw-a2a-bridge a2a-bridge
Then register it in ~/.openclaw/openclaw.json:
{
"plugins": {
"allow": ["a2a-bridge"],
"entries": {
"a2a-bridge": {
"enabled": true,
"config": {
"secret": "your-bearer-token-here",
"remoteAgents": {
"example-agent": {
"url": "http://127.0.0.1:9000",
"token": "remote-agent-token",
"alias": "Example Agent"
}
}
}
}
}
}
}
Restart OpenClaw to load the plugin.
| Field | Type | Description |
|---|---|---|
secret |
string |
Bearer token for authenticating inbound A2A requests. Leave empty to disable auth. |
remoteAgents |
object |
Map of remote A2A agents keyed by ID. |
remoteAgents.<id>.url |
string |
Base URL of the remote agent (required). |
remoteAgents.<id>.token |
string |
Bearer token for calling the remote agent. |
remoteAgents.<id>.alias |
string |
Human-readable name for the agent. |
The agent card served at /.well-known/agent-card.json uses the agent name from OpenClaw config. The card advertises:
0.3.0secret is set)The plugin registers three tools:
a2a_call_remoteSend a message to a remote A2A agent and get a response.
| Parameter | Type | Description |
|---|---|---|
agent |
string |
Remote agent ID (from remoteAgents config) |
message |
string |
Message to send |
a2a_list_remote_agentsList all configured remote A2A agents. No parameters.
a2a_discover_remoteFetch the agent card (capabilities, skills) of a remote A2A agent.
| Parameter | Type | Description |
|---|---|---|
agent |
string |
Remote agent ID |
The plugin handles message/send JSON-RPC method:
{
"jsonrpc": "2.0",
"method": "message/send",
"id": 1,
"params": {
"message": {
"messageId": "uuid",
"role": "user",
"parts": [{ "kind": "text", "text": "Hello" }]
}
}
}
Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"id": "task-uuid",
"contextId": "context-uuid",
"status": { "state": "completed" },
"artifacts": [
{ "parts": [{ "kind": "text", "text": "Response from OpenClaw" }] }
]
}
}
Inbound requests are authenticated via Authorization: Bearer <token> header (or X-Webhook-Secret for compatibility). The token is compared against the configured secret using constant-time comparison.
MIT
Connect AI agents across any network — zero config, encrypted, skill-based routing
Off-chain credit ledger + hire marketplace for AI agents. Ed25519-signed envelopes, atomic settlement, hire-and-release escrow. https://voidly.ai/pay
Visual workflow editor for building node-based AI agent workflows with drag-and-drop interface, A2A integration, and real-time execution