개요
MCP(Model Context Protocol)는 LLM(대규모 언어 모델) 애플리케이션이 외부 데이터 소스와 도구에 연결될 수 있도록 하는 개방형 표준 프로토콜입니다. Anthropic에서 만들었으며, 2024년 11월에 오픈소스로 공개되었습니다.
비유하자면, MCP는 AI 애플리케이션을 위한 USB-C 포트와 같습니다. USB-C가 다양한 주변기기를 표준화된 방식으로 연결하듯, MCP는 AI 모델이 다양한 데이터 소스와 도구에 표준화된 방식으로 연결되게 합니다.
왜 MCP가 필요한가? (M×N 문제 해결)
AI 애플리케이션(M)이 여러 외부 데이터 소스와 도구(N)에 접근해야 하는 상황에서, 표준 프로토콜 없이는 M×N 개의 커스텀 통합이 필요합니다. 이는 다음과 같은 문제를 야기합니다:
- 중복된 개발 노력
- 복잡한 통합 계층
- 유지보수 부담
MCP는 이를 M+N으로 단순화합니다. 즉, 애플리케이션용 M개의 클라이언트와 도구용 N개의 서버만 만들면 됩니다.
핵심 아키텍처
MCP는 클라이언트-서버 아키텍처를 따릅니다:
┌─────────────────────────────────┐
│ MCP Host (AI Application) │
│ ┌──────────┐ ┌──────────┐ │
│ │Client 1 │ │Client 2 │ ...│
│ └────┬─────┘ └────┬─────┘ │
└───────┼─────────────┼─────────┘
│ │
┌────▼────┐ ┌────▼────┐
│Server A │ │Server B │ ...
│(로컬) │ │(원격) │
└─────────┘ └─────────┘
주요 구성 요소
| 구성 요소 | 설명 |
|---|---|
| MCP Host | AI 애플리케이션 (Claude Desktop, VS Code, IDE 등). 여러 MCP 클라이언트를 생성하고 관리 |
| MCP Client | 호스트 내부에서 각 서버와 1:1 연결을 유지하는 컴포넌트 |
| MCP Server | 특정 기능(도구, 리소스, 프롬프트)을 노출하는 프로그램. 로컬 또는 원격으로 실행 가능 |
3가지 핵심 프리미티브(Primitives)
MCP 서버는 다음 세 가지 기능을 노출할 수 있습니다:
1. 🛠️ Tools (도구)
- 기능: AI 모델이 실행할 수 있는 함수
- 비유: POST/PUT 엔드포인트
- 예시: 파일 검색, DB 쿼리, API 호출, 이메일 전송
- 제어 주체: 모델 (AI가 필요에 따라 호출 결정)
2. 📄 Resources (리소스)
- 기능: 읽기 전용 데이터 소스
- 비유: GET 엔드포인트
- 예시: 파일 내용, DB 스키마, API 문서
- 제어 주체: 애플리케이션 (호스트가 데이터를 가져와서 모델에 제공)
3. 💬 Prompts (프롬프트)
- 기능: 재사용 가능한 템플릿
- 비유: 워크플로우 레시피
- 예시: "휴가 계획 세우기", "회의 요약하기"
- 제어 주체: 사용자 (명시적 호출 필요)
통신 방식
MCP는 JSON-RPC 2.0을 기반으로 합니다:
| 메시지 타입 | 설명 |
|---|---|
| Request | 작업 요청 (고유 ID 포함) |
| Response | 요청에 대한 응답 (결과 또는 에러) |
| Notification | 응답이 필요 없는 단방향 메시지 |
주요 메서드
| 메서드 | 목적 |
|---|---|
tools/list |
사용 가능한 도구 목록 조회 |
tools/call |
특정 도구 실행 |
resources/list |
리소스 목록 조회 |
resources/read |
리소스 내용 읽기 |
prompts/list |
프롬프트 목록 조회 |
prompts/get |
프롬프트 상세 정보 조회 |
전송 계층 (Transport Layer)
MCP는 두 가지 전송 방식을 지원합니다:
- Stdio Transport: 표준 입출력 스트림 사용 (로컬 프로세스 간 통신, 성능 최적)
- Streamable HTTP Transport: HTTP POST + Server-Sent Events (원격 서버 통신, OAuth 인증 지원)
보안 원칙
MCP는 프로토콜 수준에서 다음 원칙을 강조합니다:
- 사용자 동의 및 통제: 모든 데이터 접근과 작업에 명시적 동의 필요
- 데이터 프라이버시: 사용자 데이터는 동의 없이 서버에 전송 금지
- 도구 안전성: 도구 호출은 임의 코드 실행이므로 주의 필요
- LLM 샘플링 제어: 샘플링 요청 시 사용자 승인 필수
공식 SDK
| 언어 | 저장소 |
|---|---|
| Python | modelcontextprotocol/python-sdk |
| TypeScript | modelcontextprotocol/typescript-sdk |
| C# | modelcontextprotocol/csharp-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"안녕하세요, {name}님!"
단 15줄로 완전한 MCP 서버를 만들 수 있습니다. 타입 힌트만으로 JSON 스키마가 자동 생성됩니다.
현재 생태계
- GitHub Stars: Python SDK 23,500+ ⭐
- 공식 문서: modelcontextprotocol.io
- Hugging Face MCP 코스: 무료 온라인 강좌 제공
- 지원 클라이언트: Claude Desktop, VS Code, Cursor, Continue 등
- 주요 통합: Elasticsearch, GitHub, Slack, Sentry, Cloudflare 등
요약
MCP는 AI 애플리케이션과 외부 도구/데이터 간의 표준화된 연결 프로토콜입니다. LSP(Language Server Protocol)가 개발 도구 생태계에 가져온 혁신을 AI 생태계에 적용한 것으로, 개발자는 단 한 번의 MCP 서버 구현으로 모든 MCP 호환 클라이언트에서 사용할 수 있게 됩니다.