✅ MCP(Model Context Protocol)와 ADK 통합 요약
🔎 MCP란?
MCP (Model Context Protocol) 는 LLM이 외부 시스템(도구, API, 파일 등)과 표준화된 방식으로 통신할 수 있게 도와주는 프로토콜입니다.
- Client-Server 구조
- MCP 서버: 도구와 프롬프트를 등록
- MCP 클라이언트: 도구를 요청하고 실행
- ADK에서는 MCP 서버의 도구를 직접 사용할 수 있고,
반대로 ADK 자체 도구를 MCP 서버로 노출할 수도 있음.
🧩 ADK와 MCP 통합 방식 두 가지
1. 기존 MCP 서버를 ADK Agent에서 사용하는 경우
ADK Agent가 MCP 클라이언트 역할
🔧 사용 도구: MCPToolset
- 외부 MCP 서버에 연결하여 툴을 탐색하고, ADK 툴로 래핑하여 사용 가능하게 함.
✅ 특징
- 연결 자동 관리 (StdioServerParameters 또는 SseServerParams)
- 툴 자동 탐색 (list_tools)
- 툴 호출 중계 (call_tool)
- 선택적 필터링 가능: tool_filter 사용
📌 예제
- 파일 시스템 MCP 서버: 로컬 폴더 내 파일 읽기/목록 확인 등
- Google Maps MCP 서버: 경로 안내, 장소 검색 등 (Google API 키 필요)
2. ADK 툴을 MCP 서버로 노출하는 경우
ADK가 MCP 서버 역할
🧱 구성 요소
- FunctionTool(load_web_page) 등 ADK 툴을 래핑
- @app.list_tools(): ADK 툴을 MCP 포맷으로 변환하여 공개
- @app.call_tool(): 툴 호출 요청을 받아 실제 ADK 툴을 실행
- MCP Tool 포맷 변환: adk_to_mcp_tool_type 유틸리티 사용
📌 예제
- load_web_page 툴을 외부 MCP 클라이언트에서 호출 가능하도록 MCP 서버로 구성
🛠 비 adk web 환경에서 MCP 사용하는 경우
자체 UI 또는 독립 실행 환경에서 ADK + MCP 통합
주요 변경 사항
- MCP Toolset은 비동기 초기화 필요
- exit_stack 또는 명시적 .close()로 연결 종료 처리 필수
- get_agent_async() 함수 구조로 비동기 agent 생성 필요
3. MCP 통합 시 주의사항
항목 설명
도구 호출 구조 | ADK Agent → MCPToolset → MCP Server (→ ADK Tool) |
비동기 처리 | MCPToolset 및 Server 핸들러는 async def 필수 |
지속 연결 관리 | MCP는 상태 유지형 (stateless REST API와 다름) |
서버 배포 시 주의 | 서버 세션 지속 → 부하 분산/세션 유지 고려 필요 |
Stdio vs Sse | 로컬은 StdioServerParameters, 원격은 SseServerParams 사용 |
종료 처리 | MCPToolset .close() 반드시 호출하여 자원 반환 필요 |
🔐 MCP 관련 고려사항 요약
항목설명
ADK Tool vs MCP Tool | ADK는 로컬 Python 객체, MCP는 프로토콜 기반 원격 호출 도구 |
비동기 기반 | MCP/ADK 둘 다 asyncio 기반 구조 필수 |
상태 유지 | MCP는 지속적인 연결 유지 필요 (REST API와 달리) |
배포 시 고려사항 | 서버 세션 유지, 부하 분산 등 인프라 고려 필요 |
Tool 호출 흐름 | Agent → MCPToolset → MCP 서버 (→ ADK Tool) |
'ADK(Agent Development Kit) 관련' 카테고리의 다른 글
ADK Tool - 인증 도구 (1) | 2025.07.09 |
---|---|
ADK Tool - OpenAPI (2) | 2025.07.08 |
ADK Tool - Google Cloud Tools (0) | 2025.07.05 |
ADK Tool - Third-Party Tool (1) | 2025.07.04 |
ADK Tool - Built-in Tools (1) | 2025.07.03 |