개요
MCP(Model Context Protocol)는 Anthropic이 개발한 오픈 프로토콜로, LLM(대규모 언어 모델) 애플리케이션과 외부 데이터 소스 및 도구 간의 원활한 통합을 가능하게 합니다. 마치 USB-C 포트가 다양한 주변기기를 표준화된 방식으로 연결하듯, MCP는 AI 모델을 다양한 데이터 소스와 도구에 연결하는 표준화된 인터페이스를 제공합니다.
왜 MCP가 필요한가?
AI 애플리케이션(M)이 다양한 외부 데이터 소스와 도구(N)에 접근해야 하는 상황에서, 표준화된 프로토콜이 없다면 M×N 개의 개별 통합이 필요합니다. MCP는 이를 M+N으로 단순화하여 개발자들이 매번 새로운 API를 배우고 유지보수할 필요 없이, 한 번의 구현으로 모든 호환 시스템과 연결할 수 있게 합니다.
핵심 아키텍처
MCP는 클라이언트-서버 아키텍처를 따릅니다:
┌─────────────────────────────────┐
│ MCP Host (AI 앱) │
│ ┌──────────┐ ┌──────────┐ │
│ │ MCP │ │ MCP │ │
│ │ Client 1 │ │ Client 2 │ ... │
│ └────┬─────┘ └────┬─────┘ │
└───────┼──────────────┼──────────┘
│ │
┌───────▼─────┐ ┌─────▼────────┐
│ MCP Server A│ │ MCP Server B │
│ (로컬 파일) │ │ (원격 API) │
└─────────────┘ └──────────────┘
주요 구성 요소
| 구성 요소 | 설명 |
|---|---|
| MCP Host | Claude Desktop, VS Code, IDE 등 AI 애플리케이션 |
| MCP Client | 호스트 내에서 각 서버와 1:1 연결을 유지하는 프로토콜 클라이언트 |
| MCP Server | 특정 기능(파일 접근, DB 쿼리, API 호출 등)을 제공하는 경량 프로그램 |
3대 핵심 프리미티브 (Primitives)
MCP 서버는 다음 세 가지 기능을 노출할 수 있습니다:
1. 🛠️ Tools (도구)
- LLM이 능동적으로 호출할 수 있는 실행 가능한 함수
- 파일 쓰기, DB 쿼리, API 호출 등 액션 수행
- 예:
searchFlights(),createCalendarEvent(),sendEmail()
2. 📄 Resources (리소스)
- 읽기 전용 데이터 소스로 AI에 컨텍스트 제공
- 파일 내용, DB 스키마, API 문서 등
- 고정 URI(
file:///doc.md) 또는 동적 템플릿(weather://{city}) 지원
3. 💬 Prompts (프롬프트)
- 재사용 가능한 템플릿으로 상호작용 구조화
- 특정 도메인에 최적화된 워크플로우 제공
- 예: "여행 계획 세우기", "회의 요약하기"
통신 방식
MCP는 JSON-RPC 2.0을 기반으로 하며, 두 가지 전송 방식을 지원합니다:
| 전송 방식 | 설명 |
|---|---|
| STDIO | 표준 입출력 스트림을 통한 로컬 프로세스 간 통신 (고성능) |
| Streamable HTTP | HTTP POST + SSE를 통한 원격 서버 통신 (OAuth 인증 지원) |
주요 특징
- 표준화된 통합: 모든 MCP 호환 클라이언트가 모든 MCP 서버와 통신 가능
- 보안 중심: 사용자 동의 기반, 데이터 프라이버시 보호, 도구 실행 승인 절차
- 확장성: 필요에 따라 기능을 점진적으로 추가 가능
- 양방향 통신: 서버가 클라이언트에 샘플링 요청, 사용자 입력 요청 가능
- 실시간 업데이트: 알림(Notification)을 통한 동적 변경 사항 전파
공식 SDK
| 언어 | 저장소 |
|---|---|
| Python | modelcontextprotocol/python-sdk |
| TypeScript | modelcontextprotocol/typescript-sdk |
간단한 예제 (Python SDK)
from mcp.server import MCPServer
mcp = MCPServer("Demo")
@mcp.tool()
def add(a: int, b: int) -> int:
"""두 숫자를 더합니다."""
return a + b
@mcp.resource("greeting://{name}")
def greeting(name: str) -> str:
"""이름으로 인사합니다."""
return f"Hello, {name}!"
활용 사례
- AI 기반 IDE (VS Code, Cursor 등)에서 코드베이스 접근
- 데이터베이스 쿼리 도구
- GitHub, Slack, Notion 등 서드파티 서비스 연동
- 파일 시스템 접근 및 관리
- 검색 엔진 (Elasticsearch 등) 통합
참고 자료
- 공식 문서: https://modelcontextprotocol.io
- GitHub 조직: https://github.com/modelcontextprotocol
- Hugging Face MCP 강좌: https://huggingface.co/learn/mcp-course