MCP = Model Context Protocol
개요
MCP는 LLM(대규모 언어 모델) 애플리케이션과 외부 데이터 소스 및 도구 간의 표준화된 연결을 제공하는 오픈 프로토콜입니다. Anthropic(앤트로픽)이 주도하여 개발되었으며, AI 애플리케이션을 위한 USB-C 포트와 같은 역할을 합니다. 즉, 다양한 데이터 소스와 도구를 LLM에 표준화된 방식으로 연결해줍니다.
왜 MCP가 필요한가?
LLM은 기본적으로 정적인 지식(학습 시점 기준)만 가지고 있고, 외부 시스템에 접근하거나 실시간 데이터를 가져올 수 없습니다. 기존에는 각 애플리케이션마다 커스텀 API 통합을 직접 개발해야 했는데, 이는 M×N 문제(M개의 앱 × N개의 도구 = 엄청난 통합 작업)를 야기했습니다.
MCP는 이 문제를 M+N으로 단순화합니다. 즉, 한 번의 표준화된 연결로 모든 도구와 앱이 통신할 수 있습니다.
핵심 아키텍처
MCP는 클라이언트-서버 아키텍처를 따릅니다:
┌─────────────────────────────────┐
│ MCP Host (AI 앱) │
│ ┌─────────┐ ┌─────────┐ │
│ │Client 1 │ │Client 2 │ ... │
│ └────┬────┘ └────┬────┘ │
└───────┼─────────────┼──────────┘
│ │
┌────▼────┐ ┌────▼────┐
│Server A │ │Server B │ ... (로컬/원격)
└─────────┘ └─────────┘
구성 요소
| 구성 요소 | 설명 |
|---|---|
| Host (호스트) | Claude Desktop, VS Code, IDE 등 LLM 애플리케이션 |
| Client (클라이언트) | 호스트 내에서 각 서버와 1:1 연결을 유지하는 컴포넌트 |
| Server (서버) | 특정 기능(도구, 리소스, 프롬프트)을 노출하는 프로그램 |
3가지 핵심 프리미티브 (Primitives)
MCP 서버는 다음 세 가지 기능을 노출할 수 있습니다:
1️⃣ Tools (도구)
- LLM이 능동적으로 호출할 수 있는 실행 가능한 함수
- 예: 파일 검색, DB 쿼리, API 호출, 이메일 전송
- 프로토콜:
tools/list→tools/call
2️⃣ Resources (리소스)
- 읽기 전용 데이터 소스로, LLM에 컨텍스트를 제공
- 예: 문서 내용, DB 스키마, API 문서
- URI 기반 접근 (예:
file:///path/to/doc.md) - 프로토콜:
resources/list→resources/read
3️⃣ Prompts (프롬프트)
- 재사용 가능한 템플릿으로, 특정 작업을 위한 상호작용 패턴 정의
- 예: "휴가 계획하기", "회의 요약하기"
- 프로토콜:
prompts/list→prompts/get
통신 방식
- JSON-RPC 2.0 기반 메시지 형식 사용
- Request/Response/Notification 세 가지 메시지 타입
- 수명 주기 관리: 초기화 → 기능 협상 → 세션 유지 → 종료
- 전송 방식:
- STDIO: 로컬 프로세스 간 통신 (표준 입출력)
- Streamable HTTP: 원격 서버 통신 (HTTP POST + SSE)
클라이언트 기능 (서버 → 클라이언트)
| 기능 | 설명 |
|---|---|
| Sampling (샘플링) | 서버가 클라이언트의 LLM에 추론 요청 (에이전트 워크플로우) |
| Elicitation (정보 요청) | 서버가 사용자에게 추가 정보 요청 |
| Logging (로깅) | 디버깅 및 모니터링을 위한 로그 메시지 전송 |
보안 원칙
- 사용자 동의 및 통제: 모든 데이터 접근과 도구 실행에 명시적 동의 필요
- 데이터 프라이버시: 사용자 데이터는 동의 없이 전송 금지
- 도구 안전성: 도구 실행은 임의 코드 실행으로 간주, 주의 필요
- LLM 샘플링 통제: 사용자가 샘플링 요청을 승인해야 함
실제 사용 예시 (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}!"
단 15줄로 완전한 MCP 서버를 만들 수 있습니다!
생태계
- 공식 SDK: Python, TypeScript
- 지원 클라이언트: Claude Desktop, VS Code, Cursor, Continue 등
- 레퍼런스 서버: Filesystem, GitHub, Slack, PostgreSQL, Elasticsearch 등
- 학습 자료: Hugging Face MCP 코스, 공식 문서 (modelcontextprotocol.io)
요약
MCP는 AI 애플리케이션과 외부 도구/데이터 간의 표준화된 연결 프로토콜입니다. LSP(Language Server Protocol)가 개발 도구 생태계를 표준화한 것처럼, MCP는 AI 애플리케이션 생태계를 표준화합니다. 이를 통해 개발자는 한 번의 구현으로 다양한 AI 앱과 도구를 연결할 수 있으며, 유지보수 비용을 획기적으로 줄일 수 있습니다.