AI Agents for Beginners - 11. Using Agentic Protocols (MCP, A2A and NLWeb)
MCP, A2A, and NLWeb — three agentic protocols for standardized tool access, agent-to-agent collaboration, and natural language interfaces on the web.
June 9, 2026
AI Agents for Beginners - 11. Using Agentic Protocols (MCP, A2A and NLWeb)
이 글은 Microsoft의 AI Agents for Beginners 강좌 Lesson 11을 기반으로 정리한 내용입니다.
AI Agent 사용이 증가하면서 표준화·보안·오픈 이노베이션을 지원하는 프로토콜의 필요성이 커지고 있습니다.
이 레슨에서는 세 가지 프로토콜을 다룹니다:
이 레슨에서는 세 가지 프로토콜을 다룹니다:
| 프로토콜 | 역할 |
|---|---|
| MCP (Model Context Protocol) | AI Agent가 외부 도구·데이터에 표준화된 방식으로 접근 |
| A2A (Agent-to-Agent) | 서로 다른 AI Agent 간 통신·협업 활성화 |
| NLWeb (Natural Language Web) | 웹사이트에 자연어 인터페이스를 추가해 AI Agent가 콘텐츠 탐색·상호작용 |
Model Context Protocol
Model Context Protocol (MCP)은 애플리케이션이 LLM에게 컨텍스트와 도구를 표준화된 방식으로 제공하는 오픈 표준입니다.
다양한 데이터 소스와 도구에 일관되게 연결할 수 있는 "범용 어댑터" 역할을 합니다.
다양한 데이터 소스와 도구에 일관되게 연결할 수 있는 "범용 어댑터" 역할을 합니다.
MCP Core Components
MCP는 클라이언트-서버 아키텍처로 동작하며 핵심 구성요소는 다음과 같습니다:
| 구성요소 | 설명 |
|---|---|
| Hosts | LLM 애플리케이션 (예: VSCode). MCP 서버에 연결을 시작 |
| Clients | Host 애플리케이션 내 컴포넌트. 서버와 1 연결 유지 |
| Servers | 특정 기능을 노출하는 경량 프로그램 |
MCP Server의 세 가지 핵심 프리미티브:
| 프리미티브 | 설명 |
|---|---|
| Tools | 에이전트가 호출할 수 있는 이산적 액션·함수 (예: "get weather", "purchase product"). 이름·설명·스키마 광고 |
| Resources | MCP 서버가 제공하는 읽기 전용 데이터 (파일 내용, DB 레코드, 로그). 텍스트 또는 바이너리 |
| Prompts | 더 복잡한 워크플로우를 위한 사전 정의 프롬프트 템플릿 |
MCP Client-Server ArchitectureMermaid%%{init: {'look': 'default'}}%% flowchart LR subgraph Host["Host Application"] direction TB LLM["LLM"] Client["MCP Client"] LLM <--> Client end subgraph Server["MCP Server"] direction TB Tools["Tools\n(Actions)"] Resources["Resources\n(Data)"] Prompts["Prompts\n(Templates)"] end Client -->|"discover capabilities"| Server Server -->|"tool list + schemas"| Client Client -->|"call_tool(name, params)"| Server Server -->|"tool result"| Client
Benefits of MCP
| 장점 | 설명 |
|---|---|
| Dynamic Tool Discovery | 에이전트가 서버에서 사용 가능한 도구 목록을 동적으로 수신. 전통적 API처럼 정적 코딩 불필요 — "한 번 통합" 접근법 |
| Interoperability Across LLMs | 다양한 LLM에서 동작해 더 나은 성능의 모델로 유연하게 전환 가능 |
| Standardized Security | 표준 인증 방법 포함 — 다양한 MCP 서버 추가 시 다른 키·인증 방식 관리 불필요 |
MCP Example
사용자가 MCP 기반 AI 어시스턴트로 항공편을 예약하는 시나리오:
-
Connection: AI 어시스턴트(MCP 클라이언트)가 항공사가 제공하는 MCP 서버에 연결합니다.
-
Tool Discovery: 클라이언트가 항공사 MCP 서버에 "어떤 도구가 있나요?"라고 묻습니다. 서버는
search_flights,book_flights같은 도구 목록을 응답합니다. -
Tool Invocation: "Portland에서 Honolulu로 가는 항공편을 검색해줘"라고 요청하면, AI 어시스턴트는 LLM을 사용해
search_flights도구를 호출해야 한다고 판단하고 관련 파라미터(출발지·목적지)를 MCP 서버에 전달합니다. -
Execution and Response: MCP 서버는 래퍼 역할을 하여 항공사 내부 예약 API를 실제로 호출합니다. 항공편 정보(JSON 데이터)를 받아 AI 어시스턴트에 반환합니다.
-
Further Interaction: AI 어시스턴트가 항공편 옵션을 제시합니다. 항공편을 선택하면 어시스턴트는 동일한 MCP 서버의
book_flight도구를 호출해 예약을 완료합니다.
MCP Example: Flight BookingMermaid%%{init: {'look': 'default'}}%% flowchart LR User(["User"]) Agent["AI\nAgent"] MCP["MCP\nServer"] API["Booking\nAPI"] User -->|"③ search_flights 요청"| Agent Agent -->|"① Connection"| MCP Agent <-->|"② Tool Discovery\nsearch_flights, book_flights"| MCP MCP -->|"④ Execution\n내부 API 호출"| API API -->|"④ Response\n항공편 JSON"| MCP MCP -->|"④ Returns\nFlight Options"| Agent Agent -->|"④ Shows\nFlight Options"| User User -->|"⑤ Selects Flight\n→ book_flight 호출"| Agent
Code: MCP-Style Tool Discovery
프로덕션에서는 MCP 서버에서 동적으로 tool을 discover합니다. 아래 예시는 MCP 연결 숙박 서비스를 시뮬레이션합니다:
setup.pypython
mcp_tools.pypython
mcp_agent.pypython
MCP Agent: Tool Discovery FlowMermaidflowchart LR User["User Query\n'Tokyo 5 nights, culture & food'"] --> Agent["AccommodationAgent\n(MCP Client)"] Agent -->|"discover tools"| MCP["MCP Server\n(Simulated)"] MCP -->|"tool list + schemas"| Agent Agent --> T1["search_accommodations\n(Tokyo, April, 2 guests)"] Agent --> T2["get_local_experiences\n(Tokyo, culture + food)"] T1 & T2 --> LLM["LLM\n결과 종합·비교"] LLM --> Response["개인화된 숙박·경험 추천"] Response --> User
Agent-to-Agent Protocol (A2A)
MCP가 LLM을 도구에 연결하는 데 집중한다면, Agent-to-Agent (A2A) 프로토콜은 서로 다른 AI Agent 간 통신·협업을 가능하게 합니다.
A2A는 서로 다른 조직·환경·기술 스택의 에이전트를 연결해 공동 태스크를 완수합니다.
A2A는 서로 다른 조직·환경·기술 스택의 에이전트를 연결해 공동 태스크를 완수합니다.
A2A Core Components
| 구성요소 | 역할 |
|---|---|
| Agent Card | 에이전트의 이름·설명·스킬 목록·엔드포인트 URL·버전·기능을 광고. 다른 에이전트가 언제·왜 호출할지 판단 |
| Agent Executor | 원격 에이전트에게 사용자 채팅 컨텍스트를 전달. 원격 에이전트는 자체 LLM으로 요청을 파싱하고 내부 도구로 실행 |
| Artifact | 원격 에이전트가 태스크를 완료한 후 생성되는 결과물. 작업 결과·설명·텍스트 컨텍스트 포함. 전송 후 연결 종료 |
| Event Queue | 업데이트 처리·메시지 전달. 태스크 완료 전 연결이 끊기지 않도록 보장. 장시간 태스크에 특히 중요 |
A2A Core ComponentsMermaidflowchart TD Orch["Orchestrator Agent\n(Travel Agent)"] Orch -->|"Agent Card 조회"| Registry["Agent Card Registry\n이름·스킬·엔드포인트"] Registry -->|"발견된 에이전트 목록"| Orch Orch -->|"컨텍스트 전달"| AE["Agent Executor\n원격 에이전트 실행"] AE -->|"태스크 완료"| Art["Artifact\n결과물·설명·텍스트"] Art --> Orch AE <-->|"진행 상황 업데이트"| EQ["Event Queue\n연결 유지·메시지 전달"]
Benefits of A2A
| 장점 | 설명 |
|---|---|
| Enhanced Collaboration | 서로 다른 벤더·플랫폼의 에이전트가 상호작용·컨텍스트 공유·협력 가능 |
| Model Selection Flexibility | 각 A2A 에이전트가 자체 LLM을 선택 — 에이전트별로 최적화·파인튜닝된 모델 사용 가능 |
| Built-in Authentication | A2A 프로토콜에 인증이 직접 통합되어 에이전트 상호작용에 견고한 보안 프레임워크 제공 |
A2A Example
여행 예약 시나리오를 A2A로 확장한 5단계:
A2A Example: Full Trip BookingMermaidflowchart TD User["User\n'Honolulu 왕복 항공+호텔+렌터카 예약'"] --> TA["Travel Agent\n(A2A Orchestrator)\nLLM으로 태스크 분석"] TA -->|"A2A Protocol"| AA["Airline Agent\n(다른 회사)\n항공편 검색·예약"] TA -->|"A2A Protocol"| HA["Hotel Agent\n(다른 회사)\n호텔 예약"] TA -->|"A2A Protocol"| CA["Car Rental Agent\n(다른 회사)\n렌터카 예약"] AA & HA & CA -->|"Artifact 반환"| TA TA -->|"결과 취합"| Response["종합 여행 확인서\n항공·호텔·렌터카 통합"] Response --> User
Code: A2A Multi-Agent Workflow
세 전문 에이전트를 A2A 메시지 패싱 방식으로 순차 연결합니다:
a2a_agents.pypython
a2a_workflow.pypython
A2A Workflow: 3-Agent PipelineMermaidflowchart LR User["User\n'Tokyo 1주일 여행\n음식·사원·기술 관심'"] --> CE["CurrencyExchangeAgent\n환율·환전 가이드\n최적 환전 시기·팁"] CE -->|"context 전달"| AP["ActivityPlannerAgent\n관광지·숙소·식당 추천\n여행자 관심사 반영"] AP -->|"context 전달"| TM["TravelManagerAgent\n전체 여행 플랜 종합\n체계적 여행 브리프 생성"] TM --> Response["최종 여행 계획\n환율+액티비티+종합 브리프"] Response --> User
A2A 프로덕션 환경에서의 핵심 기능:
| 기능 | 설명 |
|---|---|
| Cross-framework interop | 서로 다른 프레임워크로 만든 에이전트가 A2A 준수 에이전트에 태스크 위임 |
| Service boundaries | 에이전트가 별도 마이크로서비스, 클라우드 리전, 다른 조직에 위치하면서 협력 |
| Dynamic discovery | 오케스트레이터가 런타임에 Agent Card 레지스트리에서 최적 전문 에이전트 발견 |
| Streaming & push notifications | SSE(Server-Sent Events)로 실시간 진행 업데이트, 장시간 태스크에 push 알림 |
Natural Language Web (NLWeb)
웹사이트는 오랫동안 사용자가 인터넷 정보에 접근하는 주요 방법이었습니다.
NLWeb은 모든 웹사이트에 자연어 인터페이스를 추가해 AI Agent가 콘텐츠를 탐색·상호작용할 수 있게 합니다.
NLWeb은 모든 웹사이트에 자연어 인터페이스를 추가해 AI Agent가 콘텐츠를 탐색·상호작용할 수 있게 합니다.
Components of NLWeb
| 구성요소 | 역할 |
|---|---|
| NLWeb Application | 자연어 질문을 처리하는 핵심 서비스. 플랫폼의 다양한 부분을 연결해 응답 생성 — 자연어 기능의 "엔진" |
| NLWeb Protocol | 웹사이트와의 자연어 상호작용을 위한 기본 규칙 세트. JSON 형식(Schema.org 활용) 응답. HTML이 문서 공유를 가능하게 했듯이 "AI Web"의 기반 |
| MCP Server | 각 NLWeb 설정은 MCP 서버로도 동작. ask 메서드 같은 도구와 데이터를 다른 AI 시스템과 공유 — 웹사이트가 "에이전트 생태계"의 일부가 됨 |
| Embedding Models | 웹사이트 콘텐츠를 벡터(수치 표현)로 변환. 의미를 컴퓨터가 비교·검색할 수 있는 형태로 저장 |
| Vector Database | 웹사이트 콘텐츠의 임베딩 저장. 질문 입력 시 관련 정보를 신속히 검색. Qdrant·Snowflake·Milvus·Azure AI Search·Elasticsearch 지원 |
NLWeb ArchitectureMermaidflowchart TD Content["웹사이트 콘텐츠\n(Schema.org / RSS 피드)"] --> Ingest["NLWeb Application\n데이터 수집·처리"] --> Embed["Embedding Model\n콘텐츠 → 벡터 변환"] --> VDB["Vector Database\n(Qdrant / Azure AI Search 등)"] Query["자연어 쿼리\n(사용자 또는 AI Agent)"] --> NLP["LLM\n쿼리 이해·해석"] --> Search["Vector Search\n관련 임베딩 검색"] Search --> VDB VDB -->|"유사 결과 반환"| NLP NLP --> Response["자연어 응답\n(실제 DB 데이터 기반)"] NLWeb_MCP["NLWeb as MCP Server\n'ask' 메서드"] -->|"AI Agent 호출"| Search
NLWeb by Example
NLWeb이 적용된 여행 예약 웹사이트 시나리오:
-
Data Ingestion: 여행 웹사이트의 기존 상품 카탈로그(항공편 목록, 호텔 설명, 투어 패키지 등)를 Schema.org 형식으로 포맷하거나 RSS 피드로 로드합니다. NLWeb 도구가 이 구조화된 데이터를 임베딩으로 변환해 로컬 또는 원격 벡터 데이터베이스에 저장합니다.
-
Natural Language Query: 사용자가 웹사이트를 방문해 메뉴를 탐색하는 대신, 채팅 인터페이스에 입력합니다: "다음 주 호놀룰루에서 수영장 있는 가족 친화적 호텔을 찾아줘."
-
NLWeb Processing: NLWeb 애플리케이션이 쿼리를 수신합니다. LLM에 쿼리를 전송해 의미를 이해하는 동시에 벡터 데이터베이스에서 관련 호텔 목록을 검색합니다.
-
Accurate Results: LLM이 데이터베이스 검색 결과를 해석하고 "가족 친화적", "수영장", "호놀룰루" 기준으로 최적 매칭을 찾아 자연어 응답을 생성합니다. 웹사이트 실제 카탈로그의 호텔을 참조하므로 허구 정보가 없습니다.
-
AI Agent Interaction: NLWeb이 MCP 서버로도 동작하므로, 외부 AI 여행 에이전트가 이 웹사이트의 NLWeb 인스턴스에 연결할 수 있습니다.
askMCP 메서드로 직접 쿼리합니다:ask("호텔이 추천하는 호놀룰루 지역 비건 레스토랑이 있나요?")→ NLWeb이 처리해 구조화된 JSON 응답을 반환합니다.
여행 예약 웹사이트에 NLWeb을 적용한 5단계:
NLWeb Example: Travel Booking SiteMermaidflowchart TD S1["1. Data Ingestion\n항공·호텔·투어 패키지를\nSchema.org/RSS로 포맷\n임베딩 생성 → Vector DB 저장"] --> S2["2. Natural Language Query\n사용자: '수영장 있는 하와이 가족 친화 호텔'\n메뉴 탐색 없이 채팅 입력"] --> S3["3. NLWeb Processing\nLLM: 쿼리 이해\nVector DB: 관련 호텔 검색"] --> S4["4. Accurate Results\nLLM이 결과 해석·최적 매칭 선택\n실제 카탈로그 기반 응답\n(가짜 정보 없음)"] --> S5["5. AI Agent Interaction\nMCP 'ask' 메서드로 외부 AI Agent 연결\nask('하와이 비건 레스토랑?')\n→ 구조화된 JSON 응답"]
Summary
Lesson 11 Summary: Three Agentic ProtocolsMermaidflowchart LR Root["Agentic\nProtocols"] Root --> MCP["MCP\nModel Context Protocol"] Root --> A2A["A2A\nAgent-to-Agent"] Root --> NLW["NLWeb\nNatural Language Web"] MCP --> M1["표준화된 도구 접근"] MCP --> M2["Dynamic Discovery"] MCP --> M3["Tools · Resources · Prompts"] A2A --> A1["에이전트 간 협업"] A2A --> A2["Agent Card · Artifact"] A2A --> A3["Cross-framework Interop"] NLW --> N1["웹사이트 + 자연어 인터페이스"] NLW --> N2["Vector DB 기반 검색"] NLW --> N3["MCP Server로도 동작"]
- MCP는 AI Agent가 외부 도구·데이터에 표준화된 방식으로 접근하게 하는 "범용 어댑터"로, 에이전트 코드 수정 없이 새 기능을 동적으로 discover할 수 있습니다
- A2A는 서로 다른 조직·프레임워크의 에이전트가 Agent Card를 통해 서로를 발견하고 협력해 복잡한 태스크를 완수할 수 있게 합니다
- NLWeb은 웹사이트에 자연어 인터페이스를 추가하고 MCP 서버로도 동작해 외부 AI Agent가 웹 콘텐츠를
ask메서드로 직접 쿼리할 수 있습니다 - 세 프로토콜은 상호 보완적입니다: MCP는 도구 연결, A2A는 에이전트 간 협력, NLWeb은 웹 생태계와 AI Agent 연결