A2A · SPEC
프로토콜 스펙
A2A 설계 철학, JSON-RPC 기반 메시지 구조, HTTP 엔드포인트 목록, MCP와의 역할 차이를 정확히 이해합니다.
A2A란 무엇인가
A2A(Agent-to-Agent)는 2025년 4월 Google이 오픈소스로 공개한 멀티에이전트 통신 프로토콜입니다. 서로 다른 프레임워크나 벤더로 만들어진 AI Agent가 네트워크를 통해 직접 협력할 수 있도록 표준 인터페이스를 정의합니다.
💡 MCP vs A2A 한 줄 정의
- MCP — LLM ↔ 외부 도구 연결 표준 (AI가 도구를 사용하는 인터페이스)
- A2A — Agent ↔ Agent 통신 표준 (AI가 다른 AI에게 작업을 위임하는 인터페이스)
기본 정보
| 항목 | 내용 |
|---|---|
| 공개 시기 | 2025년 4월 (Google 오픈소스) |
| 메시지 포맷 | JSON-RPC 2.0 over HTTP |
| 전송 방식 | HTTP POST (동기) + HTTP+SSE (스트리밍) |
| 탐색 방식 | Agent Card — /.well-known/agent.json |
| 공식 SDK | Python (a2a-sdk), TypeScript |
| 라이선스 | Apache 2.0 |
| 스펙 저장소 | github.com/google-a2a/a2a-samples |
전체 아키텍처
그림 1. A2A 전체 구조 — Orchestrator가 원격 Agent에게 Task를 위임
HTTP 엔드포인트 레퍼런스
| 엔드포인트 | 메서드 | 설명 |
|---|---|---|
| /.well-known/agent.json | GET | Agent Card 반환. 에이전트 탐색의 시작점 |
| / (또는 /tasks) | POST | JSON-RPC 요청 수신 (tasks/send, tasks/get 등) |
JSON-RPC 메서드 목록
| 메서드 | 방향 | 설명 |
|---|---|---|
| tasks/send | Client → Agent | 새 Task 전송. 완료 시 Task 객체 반환 (동기) |
| tasks/sendSubscribe | Client → Agent | Task 전송 + SSE 스트림으로 진행 상황 실시간 수신 |
| tasks/get | Client → Agent | Task ID로 현재 상태 조회 |
| tasks/cancel | Client → Agent | 진행 중인 Task 취소 요청 |
| tasks/pushNotification/set | Client → Agent | Task 완료 시 Webhook URL 등록 |
| tasks/pushNotification/get | Client → Agent | 등록된 Push Notification 설정 조회 |
| tasks/resubscribe | Client → Agent | 끊어진 SSE 스트림 재연결 |
MCP vs A2A 비교
| 항목 | MCP | A2A |
|---|---|---|
| 목적 | LLM ↔ 도구/리소스 연결 | Agent ↔ Agent 협력 |
| 상대방 | 외부 서비스, DB, 파일시스템 | 다른 AI Agent |
| 통신 단위 | Tool 호출 (단발성 요청) | Task (상태 있는 작업) |
| 상태 관리 | 서버 측 Stateless 권장 | Task 상태 머신 내장 |
| 스트리밍 | Notification으로 부분 지원 | tasks/sendSubscribe (SSE 표준) |
| 다중 턴 | 지원 없음 | input-required 상태로 중간 입력 요청 |
| 만든 곳 | Anthropic |
🔧 MCP + A2A 함께 쓰기
실무에서 두 프로토콜은 상호 배타적이지 않습니다. 일반적인 패턴: 각 Agent 내부에서 MCP로 도구를 사용하고, Agent 간 협력은 A2A로 처리합니다. Orchestrator가 A2A로 Sub-Agent를 호출하고, Sub-Agent는 내부적으로 MCP 도구를 사용합니다.