blob: 3f3f2b2127e4e7501fc3825eccf99e57ebec5d22 [file] [view]
# EventMesh A2A (Agent-to-Agent Communication Protocol)
## Overview
The **EventMesh A2A (Agent-to-Agent) Protocol** is a specialized, high-performance protocol plugin designed to enable asynchronous communication, collaboration, and task coordination between autonomous agents.
With the release of v2.0, A2A adopts the **MCP (Model Context Protocol)** architecture, transforming EventMesh into a robust **Agent Collaboration Bus**. It bridges the gap between synchronous LLM-based tool calls (JSON-RPC 2.0) and asynchronous Event-Driven Architectures (EDA), enabling scalable, distributed, and decoupled agent systems.
## Core Features
### 1. MCP over CloudEvents
- **Standard Compliance**: Fully supports standard methods defined by **MCP (Model Context Protocol)**, such as `tools/call`, `resources/read`.
- **Event-Driven**: Maps synchronous RPC calls to asynchronous **Request/Response Event Streams**, leveraging EventMesh's high-concurrency processing capabilities.
- **Transport Agnostic**: All MCP messages are encapsulated within standard **CloudEvents** envelopes, running over any transport layer supported by EventMesh (HTTP, TCP, gRPC, Kafka).
### 2. Dual-Mode Support (Hybrid Architecture)
A2A Protocol features a unique **Dual-Mode** architecture that simultaneously supports:
1. **JSON-RPC 2.0 (MCP Mode)**:
* **Target**: LLMs, Scripts (Python/JS), LangChain integration.
* **Benefit**: Extremely low barrier to entry. Clients send simple JSON objects; the adaptor automatically wraps them in CloudEvents.
2. **Native CloudEvents (Power Mode)**:
* **Target**: EventMesh native apps, Knative, Serverless functions.
* **Benefit**: Full control over event metadata. Allows pass-through of custom or binary data.
**Mechanism**: The `EnhancedA2AProtocolAdaptor` intelligently detects the payload format. If `jsonrpc: "2.0"` is present, it engages the MCP translation engine; otherwise, it treats the payload as a standard CloudEvent (delegating to the underlying CloudEvents adaptor).
### 3. Native Pub/Sub Semantics
- **O(1) Broadcast**: Publishers send messages once to a Topic, and EventMesh efficiently fans out to all subscribers.
- **Decoupling**: Solves the scalability issues of traditional P2P Webhook callbacks.
- **Isolation**: Provides backpressure isolation between publishers and subscribers.
### 3. High Performance & Routing
- **Batch Processing**: Natively supports JSON-RPC Batch requests. EventMesh automatically splits them into parallel event streams.
- **Intelligent Routing**: Extracts routing hints (`_agentId` for P2P, `_topic` for Pub/Sub) from MCP parameters and injects them into CloudEvents attributes for zero-decoding routing.
### 4. Streaming Support
- **Sequencing**: Preserves message order for streaming operations (`message/sendStream`) using sequence IDs.
## Architecture
### Core Components
```
┌─────────────────────────────────────────────────────────────┐
│ EventMesh A2A Protocol v2.0 │
│ (MCP over CloudEvents Architecture) │
├─────────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ MCP/JSON-RPC│ │ Native │ │ Protocol │ │
│ │ Handler │ │ Pub/Sub │ │ Delegator │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ ┌───────────────────────────────────────────────────────┐ │
│ │ Enhanced A2A Protocol Adaptor │ │
│ │ (Intelligent Parsing & CloudEvent Mapping) │ │
│ └───────────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ EventMesh Protocol Infrastructure │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ CloudEvents │ │ HTTP │ │ gRPC │ │
│ │ Protocol │ │ Protocol │ │ Protocol │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────┘
```
### Asynchronous RPC Pattern
To support the MCP Request/Response model within an event-driven architecture, A2A defines the following mapping rules:
| MCP Concept | CloudEvent Mapping | Description |
| :--- | :--- | :--- |
| **Request** (`tools/call`) | `type`: `org.apache.eventmesh.a2a.tools.call.req` <br> `mcptype`: `request` | Request event. |
| **Response** (`result`) | `type`: `org.apache.eventmesh.a2a.common.response` <br> `mcptype`: `response` | Response event. |
| **Correlation** (`id`) | `extension`: `collaborationid` / `id` | Links Response to Request. |
| **P2P Target** | `extension`: `targetagent` | Routing target Agent ID. |
| **Pub/Sub Topic** | `subject`: `<topic_name>` | Broadcast Topic. |
## Protocol Message Format
### 1. MCP Request (P2P)
```json
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "get_weather",
"_agentId": "weather-service" // P2P Routing
},
"id": "req-123"
}
```
### 2. MCP Request (Pub/Sub)
```json
{
"jsonrpc": "2.0",
"method": "market/update",
"params": {
"price": 50000,
"_topic": "market.btc" // Pub/Sub Routing
}
}
```
## Usage Guide
### 1. Initiate Call (Client)
```java
// 1. Construct MCP Request JSON
String mcpRequest = "{" +
"\"jsonrpc\": \"2.0\"," +
"\"method\": \"tools/call\"," +
"\"params\": { \"name\": \"weather\", \"_agentId\": \"weather-agent\" }," +
"\"id\": \"req-001\"" +
"}";
// 2. Send via EventMesh SDK
eventMeshProducer.publish(new A2AProtocolTransportObject(mcpRequest));
```
### 2. Handle Request (Server)
Subscribe to the topic `org.apache.eventmesh.a2a.tools.call.req`, process logic, and send back response with matching `id`.
## Version History
- **v2.0.0**: Fully Embraced MCP (Model Context Protocol)
- Introduced `EnhancedA2AProtocolAdaptor` supporting JSON-RPC 2.0.
- Implemented Async RPC over CloudEvents pattern.
- Added **Native Pub/Sub** support via `_topic` parameter.
- Added **Streaming** support via `_seq` parameter.
## Contribution
Welcome to contribute code and documentation!
## License
Apache License 2.0
## Contact
- Project Homepage: https://eventmesh.apache.org
- Issues: https://github.com/apache/eventmesh/issues
- Mailing List: dev@eventmesh.apache.org