MCP (Model Context Protocol)은 Anthropic이 2024년 11월 25일에 발표한 개방형 프로토콜로, AI 애플리케이션(특히 LLM)이 외부 데이터 소스와 도구에 표준화된 방식으로 연결될 수 있도록 설계되었습니다. 흔히 "AI를 위한 USB-C" 라고 비유됩니다.
1. 배경 및 탄생
- 개발자: Anthropic의 엔지니어 David Soria Parra와 Justin Spahr-Summers
- 동기: AI 시스템이 다양한 데이터 소스(파일, DB, API 등)와 통합될 때마다 맞춤형 커넥터를 개발해야 하는 "N×M 데이터 통합 문제" 해결
- 영감: Language Server Protocol (LSP)의 메시지 흐름 아이디어를 차용
- 2025년 12월, Anthropic은 MCP를 Linux Foundation 산하 Agentic AI Foundation (AAIF) 에 기증
2. 핵심 아키텍처
MCP는 클라이언트-호스트-서버 3계층 구조를 따릅니다.
┌─────────────────────────────────┐
│ MCP Host (AI App) │ ← Claude Desktop, IDE, AI 도구
│ ┌──────────┐ ┌──────────┐ │
│ │ Client 1 │ │ Client 2 │ ... │ ← 각 서버와 1:1 연결
│ └────┬─────┘ └────┬─────┘ │
└───────┼────────────┼───────────┘
│ │
┌────▼────┐ ┌────▼────┐
│ Server A│ │ Server B│ ← 파일시스템, DB, GitHub, Slack 등
└─────────┘ └─────────┘
| 구성 요소 | 설명 |
|---|---|
| Host | LLM 애플리케이션 (Claude Desktop, VS Code, ChatGPT 등). 여러 Client 인스턴스를 생성/관리 |
| Client | Host 내부에서 각 Server와 1:1 연결을 유지하는 프로토콜 클라이언트 |
| Server | 특정 기능(파일 접근, DB 쿼리, API 호출 등)을 제공하는 경량 프로그램. 로컬 또는 원격 실행 가능 |
3. 전송 계층 (Transport Layer)
MCP는 두 가지 전송 방식을 지원합니다:
| 방식 | 설명 |
|---|---|
| STDIO | 표준 입출력 스트림을 통한 로컬 프로세스 간 통신 (고성능, 네트워크 오버헤드 없음) |
| Streamable HTTP | HTTP POST + Server-Sent Events(SSE)를 통한 원격 통신. OAuth, Bearer Token 등 인증 지원 |
4. 데이터 계층 (Data Layer) - 핵심 프리미티브
MCP는 JSON-RPC 2.0 기반으로 통신하며, 서버가 노출할 수 있는 3가지 핵심 프리미티브가 있습니다:
🛠️ Tools (도구)
- LLM이 능동적으로 호출할 수 있는 실행 가능한 함수
- 파일 쓰기, DB 쿼리, API 호출, 이메일 전송 등 동작 수행
tools/list→tools/call순서로 사용- 예:
searchFlights(),createCalendarEvent(),sendEmail()
📄 Resources (리소스)
- 읽기 전용 데이터 소스로, AI 애플리케이션이 컨텍스트로 활용
- 파일 내용, DB 스키마, API 문서 등
resources/list→resources/read- URI 기반 (예:
file:///path/to/doc.md,weather://forecast/{city})
💬 Prompts (프롬프트)
- 재사용 가능한 템플릿으로, 사용자가 명시적으로 호출
- 특정 도메인의 워크플로우나 상호작용 패턴 정의
prompts/list→prompts/get- 예: "Plan a vacation" 프롬프트 (목적지, 기간, 예산 입력)
클라이언트 측 프리미티브
| 기능 | 설명 |
|---|---|
| Sampling | 서버가 클라이언트의 LLM에게 완성(completion)을 요청 |
| Roots | 서버가 작업할 URI/파일시스템 경계를 질의 |
| Elicitation | 서버가 사용자에게 추가 정보 입력 요청 |
5. 생명주기 (Lifecycle)
- 초기화 (Initialize): 클라이언트-서버 간 프로토콜 버전 협상 및 Capability Negotiation (지원 기능 선언)
- 준비 완료 (Initialized Notification):
notifications/initialized전송 - 운영: Tool 호출, Resource 읽기, Notification 수신 등
- 종료: 세션 종료
6. 채택 현황
| 기업/플랫폼 | 내용 |
|---|---|
| OpenAI | 2025년 3월 MCP 채택 발표, ChatGPT 데스크톱 앱에 통합 |
| Google DeepMind | 2025년 4월 MCP 채택 |
| Microsoft | Semantic Kernel, Azure OpenAI와 통합 |
| Cloudflare | MCP 서버 배포 지원 |
| Salesforce | Headless 360 플랫폼에서 MCP 기반 라우팅 (4.5M+ 호출 처리) |
| Replit, Sourcegraph | AI 코딩 어시스턴트에 MCP 적용 |
7. SDK 지원 언어
| 언어 | 저장소 |
|---|---|
| Python | github.com/modelcontextprotocol/python-sdk |
| TypeScript | github.com/modelcontextprotocol/typescript-sdk |
| Java | github.com/modelcontextprotocol/java-sdk |
| Kotlin, C#, Go, PHP, Perl, Ruby, Rust, Swift | 커뮤니티 및 공식 지원 |
8. 보안 고려사항
MCP는 강력한 기능(임의 코드 실행, 데이터 접근)을 제공하므로 다음 원칙이 중요합니다:
- 사용자 동의 및 통제: 모든 데이터 접근과 작업에 명시적 동의 필요
- 데이터 프라이버시: 호스트는 사용자 데이터를 서버에 노출하기 전 동의 획득
- 도구 안전성: 도구는 임의 코드 실행으로 간주, 사용자 승인 필요
- LLM 샘플링 제어: 샘플링 요청 시 사용자 승인 필수
2025년 4월 보안 연구에서는 프롬프트 인젝션 및 중독된 도구를 통한 데이터 유출 가능성이 보고되었습니다.
9. 간단한 예시 (Python SDK v2)
from mcp.server import MCPServer
mcp = MCPServer("Demo")
@mcp.tool()
def add(a: int, b: int) -> int:
"""Add two numbers."""
return a + b
@mcp.resource("greeting://{name}")
def greeting(name: str) -> str:
"""Greet someone by name."""
return f"Hello, {name}!"
단 15줄로 완전한 MCP 서버 완성. 타입 힌트만으로 JSON Schema가 자동 생성됩니다.
10. 요약
MCP는 AI 애플리케이션과 외부 세계를 연결하는 표준 프로토콜로, USB-C가 다양한 주변기기를 하나의 포트로 연결하듯, AI 모델이 다양한 데이터 소스와 도구에 표준화된 방식으로 접근할 수 있게 합니다. Anthropic이 시작했지만 현재는 OpenAI, Google, Microsoft 등 주요 AI 기업들이 모두 채택한 업계 표준으로 자리잡고 있습니다.