MCP(Model Context Protocol)는 AI 애플리케이션(특히 LLM 기반 앱)이 외부 데이터 소스와 도구에 표준화된 방식으로 연결될 수 있게 해주는 오픈 프로토콜입니다.
🎯 핵심 개념
MCP는 마치 AI 애플리케이션을 위한 USB-C 포트와 같습니다. USB-C가 다양한 주변기기를 표준화된 방식으로 연결하듯, MCP는 AI 모델을 다양한 데이터 소스와 도구에 표준화된 방식으로 연결합니다.
왜 필요한가?
- LLM은 기본적으로 정적인 지식(학습 시점 기준)만 가지고 있음
- 실시간 데이터, 파일, DB, API 등 외부 시스템과 연결하려면 매번 커스텀 코드가 필요
- MCP는 이 "M×N 통합 문제"(M개의 앱 × N개의 도구)를 "M+N"으로 단순화
🏗️ 아키텍처
MCP는 클라이언트-서버 아키텍처를 따릅니다:
┌─────────────────────────────────┐
│ MCP Host (AI 애플리케이션) │
│ ┌─────────┐ ┌─────────┐ │
│ │ Client 1│ │ Client 2│ ... │
│ └────┬────┘ └────┬────┘ │
└───────┼────────────┼────────────┘
│ │
┌────▼───┐ ┌───▼────┐
│ Server │ │ Server │ ...
│ A │ │ B │
└────────┘ └────────┘
3가지 주요 참여자:
- Host (호스트) - Claude Desktop, VS Code, IDE 등 AI 애플리케이션
- Client (클라이언트) - 호스트 내에서 각 서버와 1:1 연결을 유지하는 컴포넌트
- Server (서버) - 특정 기능(파일시스템, DB, API 등)을 노출하는 프로그램
📦 3가지 핵심 프리미티브 (Primitives)
MCP 서버는 다음 세 가지 기능을 제공할 수 있습니다:
| 프리미티브 | 설명 | 비유 |
|---|---|---|
| Tools (도구) | LLM이 실행할 수 있는 함수 (파일 쓰기, API 호출, DB 쿼리 등) | POST/PUT 엔드포인트 |
| Resources (리소스) | LLM이 읽을 수 있는 데이터 (파일 내용, DB 스키마, 문서 등) | GET 엔드포인트 |
| Prompts (프롬프트) | 재사용 가능한 템플릿 (워크플로우 가이드) | 워크플로우 레시피 |
🔌 통신 방식
- JSON-RPC 2.0 기반 메시지 형식 사용
- Stdio transport: 로컬 프로세스 간 통신 (표준 입출력)
- Streamable HTTP transport: 원격 서버 통신 (HTTP POST + SSE)
💡 실제 예시
Python SDK로 만든 간단한 MCP 서버 (15줄):
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}!"
🔐 보안 원칙
- 사용자 동의 및 통제 - 모든 데이터 접근과 도구 실행은 사용자 승인 필요
- 데이터 프라이버시 - 사용자 데이터는 명시적 동의 없이 외부로 전송 금지
- 도구 안전성 - 도구 호출은 임의 코드 실행이므로 주의 필요
- LLM 샘플링 통제 - LLM 샘플링 요청은 사용자 승인 필요
🌐 생태계
- 공식 SDK: Python SDK, TypeScript SDK
- 지원 클라이언트: Claude Desktop, VS Code, Cursor 등 다양한 AI 도구
- 참고: modelcontextprotocol.io - 공식 문서
- Hugging Face MCP 코스도 무료로 제공 중
MCP는 Anthropic이 주도하여 개발 중인 오픈 프로토콜로, AI 애플리케이션과 외부 세계를 연결하는 표준 인터페이스를 제공합니다.