📋 목차
- MCP란 무엇인가?
- 핵심 아키텍처
- 프로토콜 계층
- 핵심 프리미티브(Primitives)
- 수명주기 관리
- 전송(Transport) 방식
- 보안 및 신뢰
- SDK 및 구현
- 참조 서버
- 도입 현황 및 생태계
1. MCP란 무엇인가?
Model Context Protocol (MCP) 은 Anthropic이 2024년 11월 25일에 발표한 오픈 프로토콜로, LLM(대규모 언어 모델) 애플리케이션과 외부 데이터 소스 및 도구 간의 원활한 통합을 위한 표준화된 인터페이스를 제공합니다.
비유: MCP는 AI 애플리케이션을 위한 USB-C 포트와 같습니다. USB-C가 다양한 주변기기를 표준화된 방식으로 연결하듯, MCP는 AI 모델을 다양한 데이터 소스와 도구에 연결하는 표준화된 방식을 제공합니다.
MCP는 Language Server Protocol (LSP) 에서 영감을 받았습니다. LSP가 프로그래밍 언어 지원을 표준화한 것처럼, MCP는 AI 애플리케이션에 컨텍스트와 도구를 통합하는 방식을 표준화합니다.
주요 목표
- 컨텍스트 공유: LLM 애플리케이션이 필요로 하는 컨텍스트 정보를 표준화된 방식으로 공유
- 도구 노출: AI 시스템이 실행할 수 있는 함수(도구)를 표준화된 방식으로 노출
- 구성 가능한 워크플로우: 여러 서버를 조합하여 복잡한 워크플로우 구축
2. 핵심 아키텍처
MCP는 클라이언트-서버 아키텍처를 따르며, 세 가지 주요 참여자로 구성됩니다:
┌─────────────────────────────────┐
│ MCP Host (AI App) │
│ ┌──────────┐ ┌──────────┐ │
│ │ Client 1 │ │ Client 2 │ ... │
│ └────┬─────┘ └────┬─────┘ │
└───────┼─────────────┼───────────┘
│ │
┌────▼──┐ ┌─────▼───┐
│Server A│ │Server B │
│(로컬) │ │(원격) │
└────────┘ └─────────┘
참여자
| 구성 요소 | 설명 | 예시 |
|---|---|---|
| MCP Host | AI 애플리케이션으로, 여러 MCP 클라이언트를 관리하고 조정 | Claude Desktop, VS Code, IDE |
| MCP Client | 각 MCP 서버와 1:1 연결을 유지하는 구성 요소 | Host 내부에서 인스턴스화 |
| MCP Server | 컨텍스트와 기능을 제공하는 프로그램 | 파일시스템 서버, DB 서버, GitHub 서버 |
설계 원칙
- 서버는 매우 쉽게 구축 가능 — 복잡한 오케스트레이션은 Host가 담당
- 서버는 높은 조합성(Composability) — 각 서버는 독립적으로 동작하며 여러 서버를 조합 가능
- 서버는 전체 대화를 읽을 수 없음 — 보안 경계 유지, Host가 제어
- 점진적 기능 추가 — 핵심 프로토콜은 최소 기능만 제공, 필요에 따라 확장
3. 프로토콜 계층
MCP는 두 개의 계층으로 구성됩니다:
3.1 데이터 계층 (Data Layer)
JSON-RPC 2.0 기반의 메시지 교환 프로토콜을 정의합니다.
메시지 유형
| 유형 | 설명 | ID 포함? |
|---|---|---|
| Request | 작업 요청 (클라이언트↔서버) | 필수 (string/number) |
| Response | 요청에 대한 응답 (result 또는 error) | 요청과 동일한 ID |
| Notification | 단방향 메시지, 응답 불필요 | 없음 |
포함 기능
- 수명주기 관리: 연결 초기화, 기능 협상, 종료 처리
- 서버 기능: 도구(Tools), 리소스(Resources), 프롬프트(Prompts)
- 클라이언트 기능: 샘플링(Sampling), 루트(Roots), elicitation
- 유틸리티: 알림(Notifications), 진행 추적(Progress), 취소(Cancellation), 로깅
3.2 전송 계층 (Transport Layer)
통신 채널과 인증을 관리합니다.
| 전송 방식 | 설명 | 사용처 |
|---|---|---|
| STDIO | 표준 입출력 스트림 사용, 직접 프로세스 간 통신 | 로컬 서버 (최고 성능) |
| Streamable HTTP | HTTP POST + Server-Sent Events (SSE) | 원격 서버, OAuth 인증 지원 |
4. 핵심 프리미티브 (Primitives)
MCP의 가장 중요한 개념으로, 클라이언트와 서버가 서로에게 제공할 수 있는 기능을 정의합니다.
4.1 서버 프리미티브
| 프리미티브 | 설명 | 제어 주체 | 프로토콜 메서드 |
|---|---|---|---|
| Tools (도구) | AI 모델이 실행할 수 있는 함수 (파일 작업, API 호출, DB 쿼리 등) | 모델 | tools/list, tools/call |
| Resources (리소스) | 읽기 전용 데이터 소스 (파일 내용, DB 스키마, API 문서 등) | 애플리케이션 | resources/list, resources/read, resources/subscribe |
| Prompts (프롬프트) | 재사용 가능한 템플릿 (시스템 프롬프트, few-shot 예제 등) | 사용자 | prompts/list, prompts/get |
Tools 예시
{
"name": "searchFlights",
"description": "항공편 검색",
"inputSchema": {
"type": "object",
"properties": {
"origin": { "type": "string", "description": "출발 도시" },
"destination": { "type": "string", "description": "도착 도시" },
"date": { "type": "string", "format": "date", "description": "여행 날짜" }
},
"required": ["origin", "destination", "date"]
}
}
Resources 예시
리소스는 고유 URI를 가집니다:
- 직접 리소스:
file:///path/to/document.md - 템플릿 리소스:
weather://forecast/{city}/{date}
Prompts 예시
{
"name": "plan-vacation",
"title": "휴가 계획",
"arguments": [
{ "name": "destination", "type": "string", "required": true },
{ "name": "duration", "type": "number", "description": "일수" }
]
}
4.2 클라이언트 프리미티브
| 프리미티브 | 설명 |
|---|---|
| Sampling | 서버가 클라이언트의 LLM에게 완성(completion) 요청 가능 |
| Roots | 서버가 URI/파일시스템 경계를 탐색할 수 있도록 안내 |
| Elicitation | 서버가 사용자에게 추가 정보 요청 |
5. 수명주기 관리
MCP는 상태 기반 프로토콜(Stateful Protocol) 로, 연결 수명주기를 관리합니다.
초기화 과정
클라이언트 서버
│ │
├── initialize 요청 ──────────────►│
│ (프로토콜 버전, 기능 협상) │
│ │
│◄── initialize 응답 ──────────────┤
│ (지원 기능, 서버 정보) │
│ │
├── notifications/initialized ───►│
│ (준비 완료 알림) │
│ │
│◄══════ 활성 세션 ═══════════════►│
│ (도구/리소스/프롬프트 상호작용) │
초기화의 주요 목적:
- 프로토콜 버전 협상 — 호환 가능한 버전 확인
- 기능 발견(Capability Negotiation) — 양측이 지원하는 기능 선언
- 신원 교환 — 클라이언트/서버 정보 교환
6. 전송(Transport) 방식
STDIO Transport
- 로컬 프로세스 간 통신에 최적화
- 표준 입력(stdin) / 표준 출력(stdout) 사용
- 네트워크 오버헤드 없음, 최고 성능
- 환경 변수로 자격 증명 전달
Streamable HTTP Transport
- 원격 서버 통신 지원
- HTTP POST + 선택적 SSE(Server-Sent Events)
- 표준 HTTP 인증 방식 지원 (Bearer 토큰, API 키, 커스텀 헤더)
- OAuth 2.0 인증 프레임워크 권장
7. 보안 및 신뢰
MCP는 강력한 기능(데이터 접근, 코드 실행)을 가능하게 하므로, 보안이 매우 중요합니다.
핵심 원칙
-
사용자 동의 및 통제
- 모든 데이터 접근과 작업에 사용자의 명시적 동의 필요
- 사용자는 공유되는 데이터와 수행되는 작업을 통제
-
데이터 프라이버시
- 사용자 데이터를 서버에 노출하기 전 명시적 동의 획득
- 동의 없이 리소스 데이터를 외부로 전송 금지
-
도구 안전성
- 도구는 임의 코드 실행을 의미하므로 주의 필요
- 도구 호출 전 사용자 동의 필수
-
LLM 샘플링 통제
- 사용자가 샘플링 발생 여부, 실제 프롬프트, 결과 가시성을 통제
알려진 보안 이슈
2025년 4월, 보안 연구진들은 MCP의 여러 보안 문제를 발견했습니다:
- 프롬프트 인젝션(Prompt Injection)
- 중독된 도구(Poisoned Tools) 를 통한 데이터 유출 가능성
8. SDK 및 구현
MCP는 다양한 프로그래밍 언어용 SDK를 제공합니다:
| 언어 | 저장소 | 상태 |
|---|---|---|
| TypeScript | typescript-sdk | ✅ 안정 |
| Python | python-sdk | ✅ v1.x 안정 / v2.0.0b1 프리릴리스 |
| Java | java-sdk | ✅ |
| Kotlin | kotlin-sdk | ✅ |
| C# | csharp-sdk | ✅ |
| Go | go-sdk | ✅ |
| Rust | rust-sdk | ✅ |
| Swift | swift-sdk | ✅ |
| Ruby | ruby-sdk | ✅ |
| PHP | php-sdk | ✅ |
Python SDK 예제 (v2)
서버 (15줄):
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}!"
클라이언트 (10줄):
import asyncio
from mcp import Client
from server import mcp
async def main() -> None:
async with Client(mcp) as client:
result = await client.call_tool("add", {"a": 1, "b": 2})
print(result.structured_content) # {'result': 3}
asyncio.run(main())
9. 참조 서버
공식 GitHub 저장소(modelcontextprotocol/servers)에서 제공하는 참조 구현 서버들:
현재 유지 관리 중
| 서버 | 설명 | 실행 명령어 |
|---|---|---|
| Everything | 테스트용 참조 서버 (프롬프트, 리소스, 도구) | npx -y @modelcontextprotocol/server-everything |
| Fetch | 웹 콘텐츠 가져오기 및 변환 | uvx mcp-server-fetch |
| Filesystem | 안전한 파일 작업 (접근 제어 가능) | npx -y @modelcontextprotocol/server-filesystem /path |
| Git | Git 저장소 읽기, 검색, 조작 | uvx mcp-server-git --repository /path |
| Memory | 지식 그래프 기반 영구 메모리 시스템 | npx -y @modelcontextprotocol/server-memory |
| Sequential Thinking | 동적/반영적 문제 해결 | npx -y @modelcontextprotocol/server-sequential-thinking |
| Time | 시간 및 시간대 변환 | npx -y @modelcontextprotocol/server-time |
보관됨 (별도 저장소로 이동)
GitHub, PostgreSQL, SQLite, Slack, Sentry, Brave Search, Google Drive, Google Maps, Redis, Puppeteer 등
10. 도입 현황 및 생태계
주요 도입 사례
| 기관/기업 | 내용 |
|---|---|
| Anthropic | MCP 창시자, Claude Desktop에서 기본 지원 |
| OpenAI | 2025년 3월 MCP 채택, ChatGPT 데스크톱 앱 통합 |
| Google DeepMind | 2025년 4월 MCP 채택 발표 |
| Microsoft | Semantic Kernel, Azure OpenAI와 통합 |
| Cloudflare | MCP 서버 배포 지원 |
| Replit, Sourcegraph | AI 코딩 어시스턴트에 MCP 통합 |
Agentic AI Foundation (AAIF)
2025년 12월, Anthropic은 MCP를 Linux Foundation 산하 Agentic AI Foundation (AAIF) 에 기증했습니다. AAIF는 Anthropic, Block, OpenAI가 공동 창립했으며, AI 에이전트 시대의 표준화를 목표로 합니다.
MCP Apps
MCP의 공식 확장 기능으로, 기본 MCP가 텍스트/구조화 데이터에 제한되는 반면, MCP Apps는 대시보드, 폼, 데이터 시각화 등 대화형 UI를 MCP 서버에서 호스트 애플리케이션(Claude, ChatGPT)으로 전달하는 것을 표준화합니다.
MCP Dev Summit
2026년 4월, AAIF는 뉴욕에서 첫 MCP Dev Summit North America을 개최했으며, 약 1,200명이 참석했습니다.
🔗 참고 자료
- 공식 웹사이트: modelcontextprotocol.io
- GitHub 조직: github.com/modelcontextprotocol
- 사양 문서: spec.modelcontextprotocol.io
- MCP 서버 레지스트리: registry.modelcontextprotocol.io
- Python SDK 문서: py.sdk.modelcontextprotocol.io
요약: MCP는 AI 애플리케이션과 외부 도구/데이터 소스 간의 통합을 표준화하는 오픈 프로토콜입니다. 클라이언트-서버 아키텍처, JSON-RPC 2.0 기반 통신, 도구/리소스/프롬프트라는 세 가지 핵심 프리미티브를 통해 AI 시스템이 안전하고 표준화된 방식으로 외부 세계와 상호작용할 수 있게 합니다. 2024년 11월 Anthropic이 발표한 이후 OpenAI, Google, Microsoft 등 주요 AI 기업들이 채택하며 빠르게 성장하는 생태계를 형성하고 있습니다.