개요
MCP(Model Context Protocol)는 2024년 11월 Anthropic이 발표한 오픈 표준 프로토콜로, AI 애플리케이션(특히 LLM)이 외부 데이터 소스 및 도구와 통합되는 방식을 표준화합니다. 흔히 "AI를 위한 USB-C" 라고 비유되며, 다양한 AI 모델과 데이터 소스 간의 연결을 하나의 표준화된 인터페이스로 통합합니다.
2025년 12월, Anthropic은 MCP를 Linux Foundation 산하 Agentic AI Foundation(AAIF)에 기부했으며, OpenAI, Block 등이 공동 창립에 참여했습니다.
배경 및 탄생
MCP 이전에는 각 AI 애플리케이션이 데이터 소스나 도구에 연결하기 위해 맞춤형 커넥터를 일일이 개발해야 했습니다. 이는 Anthropic이 표현한 "N×M 데이터 통합 문제" — N개의 AI 앱과 M개의 데이터 소스 간의 조합 폭발 — 를 야기했습니다.
- OpenAI의 2023년 function-calling API나 ChatGPT 플러그인 프레임워크도 유사한 문제를 해결했지만, 벤더 종속적이었습니다.
- MCP는 Language Server Protocol(LSP)의 메시지 흐름 아이디어를 차용하여, 언어 서버 생태계의 성공을 AI 도메인에 적용했습니다.
- MCP는 Anthropic의 엔지니어 David Soria Parra와 Justin Spahr-Summers에 의해 창안되었습니다.
아키텍처
MCP는 클라이언트-서버 아키텍처를 따르며, 세 가지 주요 참여자로 구성됩니다:
1. MCP Host (호스트)
- AI 애플리케이션 자체 (예: Claude Desktop, VS Code, AI 도구)
- 여러 개의 MCP Client 인스턴스를 생성하고 관리
- 보안 정책, 사용자 동의, 연결 수명 주기 제어
- LLM 통합 및 컨텍스트 집계 조정
2. MCP Client (클라이언트)
- 호스트가 생성하며, 각 서버와 1:1 전용 연결 유지
- 프로토콜 협상 및 기능 협상(capability negotiation) 처리
- 메시지 양방향 라우팅, 구독 및 알림 관리
- 서버 간 보안 경계 유지
3. MCP Server (서버)
- 특정 기능(도구, 리소스, 프롬프트)을 노출하는 프로그램
- 로컬 프로세스(stdio transport) 또는 원격 서비스(HTTP transport)로 실행 가능
- 각 서버는 독립적으로 작동하며, 다른 서버의 컨텍스트를 볼 수 없음
MCP Host (AI Application)
├── MCP Client 1 ──── MCP Server A (로컬: 파일시스템)
├── MCP Client 2 ──── MCP Server B (로컬: 데이터베이스)
└── MCP Client 3 ──── MCP Server C (원격: Sentry API)
프로토콜 계층
데이터 계층 (Data Layer)
- JSON-RPC 2.0 기반 메시지 교환
- 수명 주기 관리: 연결 초기화, 기능 협상, 종료 처리
- 서버 프리미티브:
- Tools (도구): AI 모델이 실행할 수 있는 함수 (파일 작업, API 호출, DB 쿼리 등)
- Resources (리소스): 읽기 전용 컨텍스트 데이터 (파일 내용, DB 스키마, API 문서 등)
- Prompts (프롬프트): 재사용 가능한 템플릿 (시스템 프롬프트, few-shot 예제 등)
- 클라이언트 프리미티브:
- Sampling: 서버가 호스트 LLM에 완성 요청
- Roots: 서버가 URI/파일시스템 경계 탐색
- Elicitation: 서버가 사용자에게 추가 정보 요청
- 유틸리티: 알림(Notifications), 진행 추적(Progress), 취소(Cancellation), 로깅(Logging)
전송 계층 (Transport Layer)
- Stdio Transport: 표준 입출력 스트림을 통한 로컬 프로세스 간 통신 (저지연, 네트워크 오버헤드 없음)
- Streamable HTTP Transport: HTTP POST + Server-Sent Events(SSE)를 통한 원격 통신 (OAuth 인증 지원)
주요 특징
기능 협상 (Capability Negotiation)
초기화 단계에서 클라이언트와 서버가 서로 지원하는 기능을 선언합니다:
- 서버: 도구 지원 여부, 리소스 구독 지원, 프롬프트 템플릿 등
- 클라이언트: 샘플링 지원, 알림 처리 등
보안 원칙
- 사용자 동의 및 통제: 모든 데이터 접근과 작업에 명시적 동의 필요
- 데이터 프라이버시: 사용자 데이터는 동의 없이 타 서버에 전송 금지
- 도구 안전성: 도구는 임의 코드 실행으로 간주, 주의 필요
- LLM 샘플링 통제: 사용자가 샘플링 발생 여부와 프롬프트 내용 통제
서버 격리
- 각 서버는 전체 대화 내용을 읽을 수 없음
- 서버 간 상호작용은 호스트가 제어
- 보안 경계는 호스트 프로세스가 강제
SDK 지원 언어
MCP는 다양한 언어의 SDK를 공식 제공합니다:
| 언어 | 저장소 |
|---|---|
| Python | python-sdk |
| TypeScript | typescript-sdk |
| Java | java-sdk |
| Kotlin | kotlin-sdk |
| C# | csharp-sdk |
| Go | go-sdk |
| Ruby | ruby-sdk |
| Rust | rust-sdk |
| Swift | swift-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:
"""Add two numbers."""
return a + b
@mcp.resource("greeting://{name}")
def greeting(name: str) -> str:
"""Greet someone by name."""
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())
레퍼런스 서버
공식 저장소(servers)에서 제공하는 레퍼런스 구현:
- Everything: 테스트/참조 서버
- Fetch: 웹 콘텐츠 가져오기 및 변환
- Filesystem: 보안 파일 작업
- Git: Git 저장소 읽기/검색/조작
- Memory: 지식 그래프 기반 영구 메모리
- Sequential Thinking: 동적 문제 해결
- Time: 시간 및 시간대 변환
도입 현황
- OpenAI (2025년 3월): MCP 공식 채택, ChatGPT 데스크톱 앱에 통합
- Google DeepMind (2025년 4월): MCP 채택 발표
- VS Code, Replit, Sourcegraph 등 IDE 및 코딩 플랫폼에서 채택
- Salesforce (2026년): Headless 360 플랫폼에서 MCP 라우팅, 4,500만+ MCP 호출 처리
- Cloudflare: MCP 서버 배포 지원
- Microsoft Semantic Kernel, Azure OpenAI와 통합 가능
보안 이슈
2025년 4월, 보안 연구진들은 MCP의 여러 미해결 보안 문제를 분석 보고했습니다:
- 프롬프트 인젝션(Prompt Injection)
- 중독된 도구(Poisoned Tools) 를 통한 데이터 유출 가능성
참고 자료
- 공식 사이트: modelcontextprotocol.io
- GitHub: github.com/modelcontextprotocol
- 위키백과: Model Context Protocol