Tech Blog로 돌아가기

AI AGENT STUDY · PROTOCOLS

15

MCP, A2A, AG-UI, A2UI: 무엇이 누구와 대화하는가

이름을 외우는 대신 actor boundary를 기준으로 agent protocol과 transport, message envelope, declarative UI의 층위를 구분합니다.

하나의 Agent 교차점에서 capability, peer agent, frontend, editor로 뻗는 protocol 노선도
Protocol 이름보다 누가 누구와 무엇을 주고받는지를 먼저 보면 각 기술의 위치가 분명해집니다.원본 크기로 보기

Protocol이 늘어날 때 무엇을 기준으로 구분할까

MCP, A2A, AG-UI, A2UI를 한 줄에 놓고 기능을 외우면 층위가 금방 섞입니다. 여기에 JSON-RPC, SSE, stdio, WebSocket, JSON Schema까지 더하면 모두 비슷한 통신 기술처럼 보입니다.

먼저 이름이 아니라 actor boundary를 봅니다. 누가 누구와 관계를 맺고, 그 사이에서 어떤 의미를 표준화하는지 물으면 protocol의 자리가 드러납니다.

Actor protocol과 transport를 분리합니다

층위예시답하는 질문
Actor / semantic protocolMCP, A2A, AG-UI, ACP누가 누구와 무엇을 주고받는가?
Declarative specificationA2UIUI structure, data, action을 어떻게 표현하는가?
Message envelopeJSON-RPCRequest, response, notification을 어떤 모양으로 감싸는가?
Transport / streamingstdio, HTTP, SSE, WebSocketByte와 event를 어떻게 전달하는가?
Validation / descriptionJSON Schema, OpenAPIPayload와 HTTP API를 어떻게 기술하는가?

SSE를 쓴다고 AG-UI가 되는 것이 아니고, JSON-RPC를 쓴다고 MCP가 되는 것도 아닙니다. Lower-level mechanics가 상위 protocol의 semantics를 운반합니다.

한 장으로 보는 Agent protocol inventory

ProtocolActor boundary핵심 단위
MCPAgent host/client ↔ capability serverTools, resources, prompts, lifecycle
A2AIndependent agent ↔ independent agentAgent card, task, message, artifact
AG-UIAgent runtime ↔ user-facing appRun, text, tool, state event
A2UIAgent/server → client rendererSurface, component catalog, data, action
Agent Client ProtocolCoding agent ↔ IDE/editorSession, permission, terminal, diff

MCP와 A2A는 경쟁하지 않습니다. Peer agent는 내부에서 MCP로 tool과 data를 사용할 수 있습니다. AG-UI와 A2UI도 경쟁하지 않습니다. AG-UI event stream 안에 A2UI payload가 실릴 수 있습니다.

각 protocol이 소유하는 경계가 다릅니다

MCP: Agent와 capability provider

Host가 tools, resources, prompts를 발견하고 자신의 registry와 permission policy 아래에서 사용합니다. 핵심 단위는 peer agent의 task가 아니라 capability입니다.

A2A: 다른 Agent는 함수가 아닙니다

상대는 자신만의 model, memory, tools, workflow, policy를 가진 독립 runtime일 수 있습니다. Capability discovery와 multi-turn clarification, 장기 task state, artifact delivery가 필요합니다.

AG-UI: 실행의 시간적 흐름을 화면으로

Run lifecycle, text delta, tool call, shared state, approval과 error를 공통 event로 전달합니다. Backend adapter는 framework-native event를 product UI가 이해할 언어로 변환합니다.

Agent Client Protocol: Coding agent와 editor

Workspace context, file diff, terminal, permission, session progress를 다룹니다. MCP가 coding agent의 tool provider를 연결한다면, client protocol은 editor와 coding agent session 자체를 연결합니다.

A2UI는 code 대신 허용된 data로 UI를 설명합니다

Fixed UI는 개발자가 component를 만들고 agent가 data만 채웁니다. 반대 극단의 arbitrary React code 생성은 실행 위험과 design consistency 문제가 있습니다. A2UI는 client가 허용한 component catalog 안에서 surface, structure, binding, action을 선언하는 중간 지점을 택합니다.

TRUST BOUNDARY

Frontend owns:
- component catalog and renderer
- schema validation and design system
- unsupported-component fallback

Agent decides:
- which surface is needed
- how allowed components are composed
- which data and actions are connected
선택잘 맞는 경우
Fixed UI핵심 workflow가 안정적이고 엄격한 product control이 필요
Schema-driven UI형태는 제한적이지만 데이터 조합이 자주 변함
A2UI-style generated surface상황별 interface가 필요하고 catalog로 안전하게 제한 가능
Generated code격리된 개발 도구나 preview처럼 code 자체가 결과물

도입 전에 확인할 caveat

  • Protocol 이름과 field는 version에 따라 변하므로 사용하는 specification을 고정합니다.
  • Transport 선택이 authorization, replay, reconnect, ordering 문제를 자동으로 해결하지 않습니다.
  • Generated UI의 component catalog는 rendering API이자 security boundary입니다.
  • Protocol adapter에서 원본 runtime event의 의미가 유실되지 않도록 contract test를 둡니다.
  • 두 시스템만 연결한다면 protocol 도입 비용이 단순 adapter보다 큰지 먼저 비교합니다.