모델 컨텍스트 프로토콜 (MCP) 자세히 알아보기
2024년 11월 Anthropic에서 소개한 MCP는 AI 모델과 외부 도구, 데이터 저장소 및 다양한 자원 간의 상호 작용을 최적화하기 위해 세심하게 설계된 개방형 표준입니다.
Anthropic은 MCP를 하드웨어 연결에서 USB-C가 가져온 표준화와 유사하게 LLM을 위한 범용 커넥터로 구상합니다. 이를 통해 개발자는 통합 프로토콜을 통해 AI 애플리케이션과 모든 도구 또는 데이터 소스를 원활하게 통합할 수 있습니다. 언어에 구애받지 않는 철학을 채택하고 Python, TypeScript, Java, Kotlin 및 C#과 같은 언어를 위한 소프트웨어 개발 키트(SDK)를 제공함으로써 MCP는 맞춤형 일회성 통합의 필요성을 없앱니다.
MCP는 도구, 리소스 및 프롬프트를 노출하는 서버와 AI 모델과 이러한 서버 간의 연결을 용이하게 하는 클라이언트라는 두 가지 주요 구성 요소를 통해 작동합니다. 통신은 동기 및 비동기 워크플로우를 모두 수용하는 HTTP를 통한 JSON-RPC를 통해 이루어집니다. 보안은 명시적 권한과 로컬 우선 설계를 통해 개인 정보 보호를 보장하는 가장 중요한 관심사입니다. MCP는 주요 AI 플랫폼의 지원을 받아 빠른 생태계 성장을 촉진하여 강력한 컨텍스트 인식 AI 에이전트를 구축하기 위한 기본 기술로 자리매김하고 있습니다.
LangChain, OpenAI Agent SDK, Google Agent Developer Kit 및 Microsoft Copilot Studio와 같은 프레임워크 및 플랫폼은 MCP를 기본적으로 지원합니다.
MCP 서버 및 클라이언트 심층 분석
에이전트 워크플로우는 자율 작동을 위해 두 가지 중요한 요소, 즉 최신 데이터와 기존 시스템에 대한 액세스에 의존합니다. 데이터는 LLM에 사실 정보를 제공하기 위한 컨텍스트로 제공되며, 이는 LLM이 정보에 입각한 결정을 내리는 데 도움이 됩니다. 조치를 취하기로 결정되면 시스템에 대한 프로그래밍 방식 액세스가 필요하며, 일반적으로 도구로 사용할 수 있게 되는 API로 노출됩니다.
MCP 서버와 클라이언트는 LLM과 독립적으로 작동할 수 있습니다. 클라이언트가 LLM과 통합되면 에이전트 워크플로우의 초석 역할을 합니다.
MCP 아키텍처에서 서버는 데이터 및 도구에 대한 액세스를 추상화합니다. 예를 들어 데이터베이스를 MCP 서버 내의 리소스로 통합할 수 있습니다. 클라이언트는 데이터 검색을 위해 이 리소스에 대한 읽기 전용 액세스 권한을 가집니다. 리소스는 또한 필터를 적용하거나 클라이언트와 공유되는 데이터를 제한하는 매개변수를 지원합니다. 예를 들어 직원 급여 정보는 리소스에 이상적인 후보입니다.
리소스 외에도 MCP 서버는 클라이언트가 단순한 데이터 검색 이상의 작업을 수행할 수 있도록 권한을 부여하는 도구를 노출합니다. 리소스는 읽기 전용 액세스를 제공하지만 도구는 데이터를 조작하거나 작업을 실행하는 API의 호출을 용이하게 합니다. Stripe API를 호출하여 결제 거래를 완료하는 것이 도구의 대표적인 예입니다.
리소스 및 도구 외에도 MCP 서버는 사전 정의된 프롬프트의 저장소 역할을 할 수 있습니다. 클라이언트는 이러한 프롬프트를 검색하여 LLM으로 보내 일관되고 표준화된 프롬프트 저장소를 보장할 수 있습니다.
MCP 서버를 쿼리하여 노출하는 리소스, 도구 및 프롬프트 목록을 얻을 수 있으며 기본적인 검색 메커니즘을 제공합니다. 요약하자면 MCP 서버는 리소스, 도구 및 프롬프트를 클라이언트에 노출할 수 있지만 클라이언트의 작업은 개발자의 재량에 달려 있습니다.
MCP 클라이언트는 챗봇 또는 에이전트와 같은 호스트 애플리케이션 내에 있습니다. 호스트 애플리케이션의 예로는 Claude Desktop 및 Cursor AI가 있습니다. 개발자는 하나 이상의 MCP 서버와 상호 작용하는 여러 클라이언트를 사용하여 에이전트 애플리케이션을 구성할 수 있습니다.
LLM과 상호 작용하지 않고 MCP 클라이언트를 만들 수 있습니다. 그러나 클라이언트는 LLM이 MCP 서버에 액세스할 수 있는 강력한 도관 역할을 할 수 있습니다.
일반적인 워크플로우에서 챗봇 또는 에이전트와 같은 호스트 애플리케이션은 MCP 서버에 연결하고 사용 가능한 리소스 및 도구를 검색하여 적절한 형식으로 LLM에 제공합니다.
프롬프트에 따라 LLM은 호스트로 돌아가 MCP 클라이언트를 통해 리소스에 액세스하거나 도구를 호출할 수 있습니다. OpenAI Agents SDK 및 Google ADK와 같은 대부분의 에이전트 프레임워크는 LLM과 호스트 애플리케이션 간의 왕복을 원활하게 만들어 이 기능을 추상화합니다.
MCP 서버와 클라이언트 간의 통신 자세히 알아보기
통신 프로토콜은 MCP 아키텍처의 기본 측면입니다. MCP 서버는 STDIO 및 Server-Sent Events (SSE)라는 두 가지 전송 프로토콜을 지원합니다.
STDIO 전송 프로토콜
STDIO를 전송 프로토콜로 사용하는 경우 MCP 클라이언트는 MCP 서버를 직접 호출하고 필요한 매개변수를 제공합니다. 그런 다음 콘솔에 기록되는 서버의 출력을 캡처하여 호스트 애플리케이션으로 전송합니다.
이 시나리오에서 클라이언트와 서버는 동일한 프로세스를 공유합니다. 서버는 명령을 실행하고 즉시 종료합니다. 이 프로세스는 클라이언트가 서버를 호출할 때마다 반복됩니다. 본질적으로 클라이언트와 서버는 원격 호출 또는 원격 프로시저 호출(RPC)을 포함하지 않고 프로세스 내에서 작동합니다. 이 접근 방식은 클라이언트와 서버가 동일한 머신에 상주하여 장기 실행 프로세스로 인한 대기 시간을 없애는 데 가장 적합합니다. 결과적으로 MCP 서버와 클라이언트는 STDIO 전송을 사용할 때 1:1 연결을 유지합니다.
Server-Sent Events (SSE) 전송 프로토콜
MCP에서 지원하는 두 번째 전송 프로토콜은 Server-Sent Events (SSE)입니다. SSE는 서버가 단일 영구 HTTP 연결을 통해 실시간 업데이트를 클라이언트에 푸시할 수 있도록 합니다. 클라이언트가 연결을 시작하면 서버는 이벤트가 발생할 때 데이터를 스트리밍하여 반복적인 폴링의 필요성을 없앱니다. 이 접근 방식은 업데이트가 주로 서버에서 클라이언트로 흐르는 라이브 뉴스 피드 또는 알림과 같은 애플리케이션에 특히 효과적입니다.
REST와 비교하여 SSE는 REST가 새 데이터에 대해 서버를 반복적으로 폴링해야 하므로 오버헤드와 대기 시간이 증가하는 반면, 낮은 대기 시간과 더 큰 효율성을 제공합니다. SSE는 또한 자동 재연결을 제공하고 대부분의 방화벽과 원활하게 통합되어 실시간 시나리오에 더 강력합니다.
MCP는 양방향 WebSocket 연결의 복잡성 없이 서버에서 클라이언트로만 스트리밍이 필요한 시나리오에 SSE가 더 간단하고 강력한 솔루션을 제공하기 때문에 원격 통신을 위해 WebSocket 대신 SSE를 활용합니다. SSE는 표준 HTTP를 통해 작동하여 방화벽 및 제한된 네트워크와의 통합을 단순화합니다. 또한 전체 이중 WebSocket 연결을 관리하는 복잡성 없이 서버가 실시간 업데이트를 클라이언트에 푸시할 수 있습니다.
MCP에서 클라이언트-서버 통신은 HTTP POST 요청으로 관리되는 반면 SSE는 AI 도구 및 리소스 알림에 대한 일반적인 상호 작용 패턴에 맞춰 서버에서 클라이언트로 스트리밍 업데이트를 처리합니다. 이 접근 방식은 특히 양방향이고 종종 더 복잡한 WebSocket 프로토콜과 비교할 때 오버헤드를 줄이고 구현을 단순화하며 기존 인프라와의 호환성을 향상시킵니다.
JSON-RPC: 와이어 프로토콜
SSE가 통신 기술 역할을 하는 반면 JSON-RPC는 MCP에서 사용되는 와이어 프로토콜입니다. JSON-RPC는 원격 프로시저 호출에 맞게 제작된 가볍고 상태 비저장 프로토콜로, AI 워크플로우에 필요한 빠르고 동적인 교환에 이상적입니다.
MCP 내에서 도구 호출, 데이터 가져오기 또는 사용 가능한 기능 나열과 같은 모든 상호 작용은 메서드 이름, 매개변수 및 응답 추적을 위한 식별자를 포함하는 JSON-RPC 메시지로 인코딩됩니다. 이 접근 방식을 통해 MCP 클라이언트와 서버는 기본 구현 언어에 관계없이 원활하게 통신할 수 있으며 모든 요청, 응답 및 알림이 예측 가능하고 상호 운용 가능한 형식을 준수하도록 보장합니다. JSON-RPC를 기반으로 구축함으로써 MCP는 통합을 단순화하고 오류 처리를 지원하며 개발자가 다양한 외부 도구 및 리소스와 상호 작용할 수 있는 유연하고 구성 가능한 에이전트 워크플로우를 만들 수 있도록 합니다.
STDIO 전송 프로토콜과 달리 SSE는 단일 MCP 서버에서 동시에 제공하는 여러 클라이언트를 지원할 수 있습니다. 이는 MCP 서버가 PaaS(Platform as a Service) 및 서버리스 런타임과 같은 환경에서 원격으로 호스팅될 때 특히 유용합니다.
MCP의 주요 장점
표준화된 통합: MCP는 다양한 도구와 데이터 소스를 AI 애플리케이션에 통합하기 위한 통합 프로토콜을 제공하여 사용자 지정 통합의 필요성을 없앱니다.
언어에 구애받지 않음: 여러 언어에 대한 SDK와 결합된 MCP의 언어에 구애받지 않는 접근 방식은 다양한 플랫폼에서 개발을 단순화합니다.
강화된 보안: MCP는 명시적 권한과 로컬 우선 설계를 통해 보안을 우선시하여 데이터 개인 정보 보호 및 보호를 보장합니다.
실시간 업데이트: SSE 지원은 서버에서 클라이언트로의 실시간 업데이트를 가능하게 하여 효율적인 데이터 흐름과 대기 시간 감소를 용이하게 합니다.
확장성: MCP의 SSE 구현을 통해 단일 서버가 여러 클라이언트를 동시에 제공하여 확장성 및 리소스 활용도를 향상시킬 수 있습니다.
단순화된 개발: 와이어 프로토콜로 JSON-RPC를 사용하면 통합이 단순화되고 오류 처리가 지원되며 유연한 워크플로우 구성이 가능합니다.
생태계 성장: 주요 AI 플랫폼에서 MCP를 채택함에 따라 빠른 생태계 성장이 이루어지고 있으며 AI 개발을 위한 기본 기술이 되고 있습니다.
MCP의 실제 응용 프로그램
챗봇: MCP를 통해 챗봇은 외부 지식 베이스, 데이터베이스 및 API에 액세스하여 보다 정보에 입각하고 관련성 높은 응답을 제공할 수 있습니다.
AI 에이전트: MCP는 AI 에이전트가 외부 시스템과 상호 작용하고 작업을 자동화하며 데이터 기반 결정을 내릴 수 있도록 합니다.
데이터 통합: MCP는 다양한 데이터 소스를 AI 애플리케이션에 통합하여 포괄적인 분석 및 통찰력을 가능하게 합니다.
도구 오케스트레이션: MCP는 AI 워크플로우 내에서 다양한 도구 및 서비스의 오케스트레이션을 용이하게 하여 성능과 효율성을 최적화합니다.
실시간 애플리케이션: MCP의 SSE 지원은 금융 분석, 사기 탐지 및 예측 유지 관리와 같은 애플리케이션을 위한 실시간 데이터 스트리밍을 가능하게 합니다.
MCP 구현: 단계별 가이드
MCP SDK 설치: 원하는 프로그래밍 언어(예: Python, TypeScript)에 대한 MCP SDK를 설치하는 것으로 시작합니다.
리소스 및 도구 정의: MCP 서버가 클라이언트에 노출할 리소스 및 도구를 식별합니다.
서버 로직 구현: 리소스 및 도구에 대한 클라이언트 요청을 처리하는 서버 측 로직을 개발합니다.
보안 구성: 데이터 및 서비스를 보호하기 위해 인증 및 권한 부여와 같은 적절한 보안 조치를 구현합니다.
MCP 클라이언트 생성: 서버에 연결하고 노출된 리소스 및 도구에 액세스하는 MCP 클라이언트를 개발합니다.
LLM과 통합: 외부 지식 및 기능에 대한 액세스를 가능하게 하기 위해 MCP 클라이언트를 LLM과 통합합니다.
테스트 및 배포: MCP 구현을 철저히 테스트하고 프로덕션 환경에 배포합니다.
MCP의 미래 트렌드
강화된 보안: 새로운 위협에 대처하고 데이터 개인 정보 보호를 보장하기 위해 MCP의 보안 기능을 강화하는 데 중점을 두고 지속적인 개발이 이루어지고 있습니다.
향상된 확장성: 점점 더 복잡해지는 AI 애플리케이션을 지원하기 위해 MCP의 확장성과 성능을 더욱 향상시키기 위한 노력이 진행 중입니다.
확장된 생태계: 새로운 도구, 리소스 및 플랫폼이 프로토콜을 채택하여 MCP 생태계가 계속 성장할 것으로 예상됩니다.
신흥 기술과의 통합: MCP는 연합 학습 및 분산 AI와 같은 신흥 기술과 통합되도록 조정되고 있습니다.
표준화 노력: 지속적인 표준화 노력은 AI 통합에 대한 업계 표준으로 MCP를 굳히는 것을 목표로 합니다.
개발자는 MCP의 원칙, 아키텍처 및 구현을 이해함으로써 AI의 잠재력을 최대한 활용하고 외부 지식, 도구 및 서비스를 활용하는 혁신적인 애플리케이션을 구축할 수 있습니다. AI 환경이 계속 진화함에 따라 MCP는 지능형 시스템의 미래를 형성하는 데 점점 더 중요한 역할을 할 것입니다. 개발자는 이 프로토콜을 채택하고 기능을 활용하여 보다 강력하고 컨텍스트 인식적이며 다재다능한 AI 솔루션을 만들어야 합니다. 커뮤니티가 성장하고 새로운 사용 사례가 등장함에 따라 MCP는 인공 지능 분야를 발전시키는 데 중추적인 기술이 될 것을 약속합니다.