MCP(Model Context Protocol)는 AI 애플리케이션(특히 LLM 기반 앱)이 외부 데이터 소스와 도구에 표준화된 방식으로 연결될 수 있도록 하는 개방형 프로토콜입니다. Anthropic에서 만들었으며, 2024년 말에 공개되었습니다.
🎯 왜 MCP가 필요한가?
LLM은 본질적으로 정적인 지식을 가지고 있습니다(훈련 데이터의 컷오프 날짜 이후의 정보는 모름). 또한 기본적으로 외부 API, 데이터베이스, 파일 시스템 등에 접근할 수 없습니다.
전통적으로는 각 애플리케이션마다 직접 커스텀 API 통합을 해야 했는데, 이는 M×N 문제를 야기합니다:
- M개의 AI 앱 × N개의 외부 도구 = M×N개의 개별 통합 필요
- 유지보수 비용 폭발, 중복 개발, 벤더 종속
MCP는 이 문제를 M+N으로 단순화합니다. 마치 USB-C 포트가 다양한 주변기기를 표준화된 방식으로 연결하듯, MCP는 AI 모델과 다양한 데이터 소스/도구 간의 연결을 표준화합니다.
MCP는 Language Server Protocol (LSP)에서 영감을 받았습니다. LSP가 개발 도구에서 프로그래밍 언어 지원을 표준화했다면, MCP는 AI 생태계에서 컨텍스트와 도구 통합을 표준화합니다.
🏗️ 아키텍처
MCP는 클라이언트-서버 아키텍처를 따릅니다:
┌─────────────────────────────────┐
│ MCP Host (AI 앱) │
│ ┌──────────┐ ┌──────────┐ │
│ │ Client 1 │ │ Client 2 │ ... │
│ └────┬─────┘ └────┬─────┘ │
└───────┼──────────────┼──────────┘
│ │
┌────▼────┐ ┌────▼────┐
│Server A │ │Server B │
│ (로컬) │ │ (원격) │
└─────────┘ └─────────┘
주요 구성 요소
| 구성 요소 | 설명 | 예시 |
|---|---|---|
| MCP Host | AI 애플리케이션. 여러 MCP 클라이언트를 생성/관리 | Claude Desktop, VS Code, Cursor |
| MCP Client | 호스트 내에서 각 서버와 1:1 연결 유지 | 프로토콜 메시지 라우팅 |
| MCP Server | 특정 기능(도구, 리소스, 프롬프트)을 노출하는 프로그램 | 파일시스템 서버, DB 서버, GitHub 서버 |
📦 3가지 핵심 프리미티브 (Primitives)
MCP 서버는 다음 세 가지 기능을 노출할 수 있습니다:
1. 🛠️ Tools (도구)
- LLM이 능동적으로 호출할 수 있는 실행 가능한 함수
- 파일 쓰기, API 호출, DB 쿼리 등 액션 수행
- JSON Schema로 입력 정의
- 프로토콜:
tools/list→tools/call
2. 📄 Resources (리소스)
- 읽기 전용 데이터 소스 - LLM에 컨텍스트 제공
- 파일 내용, DB 스키마, API 문서 등
- 고유 URI로 식별 (예:
file:///path/to/doc.md) - 템플릿 지원 (예:
weather://forecast/{city}/{date}) - 프로토콜:
resources/list→resources/read
3. 💬 Prompts (프롬프트)
- 재사용 가능한 템플릿 - 상호작용 패턴 표준화
- 도메인별 워크플로우 가이드
- 사용자가 명시적으로 호출
- 프로토콜:
prompts/list→prompts/get
🔄 통신 방식
MCP는 JSON-RPC 2.0을 기반으로 합니다:
| 메시지 타입 | 설명 |
|---|---|
| Request | 작업 요청 (고유 ID 포함) |
| Response | 요청에 대한 응답 (결과 또는 에러) |
| Notification | 응답이 필요 없는 단방향 메시지 |
수명 주기 (Lifecycle)
- 초기화(Initialize): 클라이언트-서버 간 프로토콜 버전 및 기능 협상
- 준비 완료(Initialized): 클라이언트가 준비 완료 알림 전송
- 작업 수행: 도구 호출, 리소스 읽기 등
- 종료: 세션 종료
전송 방식 (Transport)
- STDIO: 로컬 프로세스 간 표준 입출력 통신 (고성능)
- Streamable HTTP: 원격 서버 통신 (HTTP POST + SSE, OAuth 인증 지원)
🔐 보안 원칙
MCP는 프로토콜 수준에서 보안을 강제할 수 없지만, 다음과 같은 원칙을 권장합니다:
- 사용자 동의 및 통제: 모든 데이터 접근과 도구 실행에 사용자 명시적 동의 필요
- 데이터 프라이버시: 호스트는 사용자 데이터를 서버에 무단 전송 금지
- 도구 안전성: 도구는 임의 코드 실행이므로 주의 필요
- LLM 샘플링 통제: 사용자가 샘플링 요청을 승인/거부 가능
💻 코드 예시 (Python SDK)
서버 만들기 (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}!"
클라이언트에서 사용
from mcp import Client
from server import mcp
async def main():
async with Client(mcp) as client:
result = await client.call_tool("add", {"a": 1, "b": 2})
print(result.structured_content) # {'result': 3}
🌐 생태계 현황
- 공식 SDK: Python SDK, TypeScript SDK
- 지원 클라이언트: Claude Desktop, VS Code, Cursor, IntelliJ 등
- 서버 예시: 파일시스템, GitHub, Slack, PostgreSQL, Elasticsearch, Sentry 등
- Hugging Face MCP Course: 무료 온라인 강좌 제공 중
- 라이선스: MIT License (완전 오픈소스)
📊 요약
| 항목 | 내용 |
|---|---|
| 정의 | LLM 앱과 외부 도구/데이터 간 표준 통신 프로토콜 |
| 창시자 | Anthropic |
| 발표 | 2024년 11월 |
| 기반 | JSON-RPC 2.0 |
| 핵심 개념 | Tools, Resources, Prompts |
| 비유 | "AI를 위한 USB-C 포트" 또는 "AI를 위한 LSP" |
| 주요 장점 | M×N 통합 문제를 M+N으로 단순화, 벤더 종속 해소 |
MCP는 AI 에이전트 생태계의 상호운용성(interoperability)을 획기적으로 개선하여, 개발자가 각 도구마다 별도의 통합 코드를 작성할 필요 없이 한 번의 구현으로 모든 MCP 호환 클라이언트에서 사용할 수 있게 해줍니다.