개요
MCP(Model Context Protocol)는 Anthropic이 2024년 11월 25일에 발표한 오픈 표준 프로토콜로, 대규모 언어 모델(LLM) 애플리케이션이 외부 데이터 소스 및 도구와 원활하게 통합될 수 있도록 하는 규격입니다. 흔히 "AI를 위한 USB-C 포트"에 비유되며, 다양한 AI 애플리케이션과 외부 시스템 간의 표준화된 연결 방식을 제공합니다.
2025년 12월, Anthropic은 MCP를 Linux Foundation 산하 AAIF(Agentic AI Foundation)에 기부했으며, Block, OpenAI 등이 공동 창립에 참여했습니다.
배경 및 필요성
LLM은 본질적으로 강력한 추론 엔진이지만, 학습 데이터의 시점에 종속되어 정적인 지식만 가지고 있으며, 실시간 데이터 접근이나 외부 시스템에서의 작업 실행 능력이 부족합니다. 전통적으로는 각 애플리케이션마다 외부 도구의 API를 직접 통합하는 방식(Custom API Integration)이 사용되었는데, 이는 M×N 문제를 야기했습니다:
- M개의 AI 애플리케이션 × N개의 데이터 소스 = M×N개의 개별 커넥터 필요
- 중복 개발, 유지보수 부담, 취약한 통합 구조
MCP는 이를 M+N 구조로 단순화합니다. 즉, M개의 클라이언트와 N개의 서버만 구축하면 모든 조합이 가능해집니다.
아키텍처
MCP는 클라이언트-서버 아키텍처를 따르며, 세 가지 주요 참여자로 구성됩니다:
1. MCP Host (호스트)
- LLM 애플리케이션 자체 (예: Claude Desktop, VS Code, Cursor, IDE 등)
- 여러 MCP 클라이언트 인스턴스를 생성하고 관리
- 보안 정책, 사용자 동의, 컨텍스트 집계를 조정
2. MCP Client (클라이언트)
- 호스트 내에서 각 MCP 서버와 1:1 연결을 유지하는 컴포넌트
- 프로토콜 협상, 기능 협상, 메시지 라우팅 처리
- 각 서버 연결 간 보안 경계 유지
3. MCP Server (서버)
- 특정 기능(파일 시스템, 데이터베이스, API 등)을 노출하는 경량 프로그램
- Tools, Resources, Prompts 등의 프리미티브를 통해 기능 제공
- 로컬 프로세스(stdio transport) 또는 원격 서비스(HTTP transport)로 동작 가능
┌─────────────────────────────────┐
│ MCP Host (AI App) │
│ ┌────────┐ ┌────────┐ ┌──────┐ │
│ │Client 1│ │Client 2│ │Client3│ │
│ └───┬────┘ └───┬────┘ └──┬───┘ │
└──────┼──────────┼──────────┼─────┘
│ │ │
┌────▼──┐ ┌───▼────┐ ┌──▼────┐
│Server │ │Server │ │Server │
│ A │ │ B │ │ C │
│(Local)│ │(Local) │ │(Remote)│
└───────┘ └────────┘ └───────┘
프로토콜 계층
MCP는 두 가지 계층으로 구성됩니다:
데이터 계층 (Data Layer)
- JSON-RPC 2.0 기반 메시지 교환
- 생명주기 관리(초기화, 기능 협상, 종료)
- 핵심 프리미티브(Tools, Resources, Prompts)
- 알림(Notifications) 시스템
전송 계층 (Transport Layer)
두 가지 전송 메커니즘 지원:
- Stdio Transport: 표준 입출력 스트림을 통한 로컬 프로세스 간 통신 (저지연, 네트워크 오버헤드 없음)
- Streamable HTTP Transport: HTTP POST + Server-Sent Events(SSE)를 통한 원격 통신, OAuth 인증 지원
핵심 프리미티브 (Core Primitives)
MCP 서버는 세 가지 핵심 기능을 노출할 수 있습니다:
1. Tools (도구)
| 항목 | 설명 |
|---|---|
| 기능 | LLM이 능동적으로 호출하여 실행할 수 있는 함수 |
| 비유 | HTTP POST/PUT 엔드포인트 |
| 예시 | 파일 쓰기, DB 쿼리, API 호출, 이메일 전송, 검색 |
| 제어 주체 | 모델(LLM) - 필요시 자동 호출 결정 |
| 프로토콜 메서드 | tools/list (도구 목록 조회), tools/call (도구 실행) |
2. Resources (리소스)
| 항목 | 설명 |
|---|---|
| 기능 | LLM이 참조할 수 있는 읽기 전용 데이터 |
| 비유 | HTTP GET 엔드포인트 |
| 예시 | 파일 내용, DB 스키마, API 문서, FAQ |
| 제어 주체 | 애플리케이션 - 컨텍스트 제공 방식 결정 |
| 프로토콜 메서드 | resources/list, resources/read, resources/subscribe |
리소스는 직접 리소스(고정 URI)와 리소스 템플릿(동적 URI, 예: weather://forecast/{city}/{date})으로 구분됩니다.
3. Prompts (프롬프트)
| 항목 | 설명 |
|---|---|
| 기능 | 재사용 가능한 상호작용 템플릿 |
| 비유 | 워크플로우 레시피 |
| 예시 | "휴가 계획 세우기", "회의 요약", "이메일 초안 작성" |
| 제어 주체 | 사용자 - 명시적 호출 필요 |
| 프로토콜 메서드 | prompts/list, prompts/get |
클라이언트 측 프리미티브
서버가 클라이언트에 요청할 수 있는 기능도 있습니다:
- Sampling: 서버가 클라이언트의 LLM을 통해 추론(completion)을 요청 (에이전트적 동작)
- Roots: 서버가 URI/파일시스템 경계를 탐색할 수 있도록 클라이언트가 정보 제공
- Elicitation: 서버가 사용자에게 추가 정보를 요청
생명주기 (Lifecycle)
MCP는 상태 저장 프로토콜(stateful protocol)로, 연결 초기화 시 기능 협상(Capability Negotiation)이 이루어집니다:
- 클라이언트 → 서버:
initialize요청 (프로토콜 버전, 지원 기능, 클라이언트 정보) - 서버 → 클라이언트:
initialize응답 (프로토콜 버전, 서버 기능) - 클라이언트 → 서버:
notifications/initialized(준비 완료 알림)
이 과정에서 양측이 지원하는 기능(Tools, Resources, Prompts, 알림 등)을 명시적으로 선언합니다.
보안 및 신뢰 원칙
MCP는 강력한 기능(임의 데이터 접근, 코드 실행)을 가능하게 하므로, 다음과 같은 보안 원칙을 강조합니다:
- 사용자 동의 및 통제: 모든 데이터 접근과 작업 실행에 명시적 동의 필요
- 데이터 프라이버시: 사용자 데이터는 동의 없이 외부로 전송 금지
- 도구 안전성: 도구 호출은 임의 코드 실행에 해당하므로 주의 필요
- LLM 샘플링 통제: 샘플링 요청 시 사용자의 명시적 승인 필요
SDK 및 구현
Anthropic은 공식 SDK를 제공합니다:
| 언어 | 저장소 |
|---|---|
| Python | modelcontextprotocol/python-sdk |
| TypeScript | modelcontextprotocol/typescript-sdk |
| Java/Kotlin | modelcontextprotocol/java-sdk |
| C# | modelcontextprotocol/csharp-sdk |
| Go | Community SDK |
| Rust | Community SDK |
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}!"
채택 현황
- OpenAI (2025년 3월): MCP 공식 채택, ChatGPT 데스크톱 앱에 통합
- Google DeepMind (2025년 4월): MCP 채택 발표
- VS Code, Cursor, Replit, Sourcegraph 등 주요 IDE 및 개발 도구에서 채택
- Cloudflare: MCP 서버 배포 지원
- Microsoft Semantic Kernel, Azure OpenAI: MCP 통합
- Elasticsearch: 자체 MCP 서버 제공 (버전 9.3+)
- Salesforce Headless 360: MCP 기반 라우팅 (2026년 4월 기준 450만 건의 MCP 호출 처리)
MCP Apps (공식 확장)
MCP Apps는 MCP의 공식 확장으로, 텍스트 및 구조화된 데이터를 넘어 대화형 UI(대시보드, 폼, 데이터 시각화)를 MCP 서버에서 호스트 애플리케이션(Claude, ChatGPT 등)으로 전달할 수 있게 합니다.
한계 및 보안 이슈
- 프롬프트 인젝션(Prompt Injection): 악의적인 프롬프트를 통한 데이터 유출 가능성
- 중독된 도구(Poisoned Tools): 신뢰할 수 없는 서버의 도구 설명이 악용될 위험
- 프로토콜 자체가 보안을 강제할 수 없으므로, 구현체 차원의 주의가 필요
요약
MCP는 AI 애플리케이션 생태계에서 표준화된 통합 계층을 제공하여, 개발자가 각 도구/데이터 소스마다 개별 커넥터를 만들 필요 없이 한 번의 구현으로 모든 호환 클라이언트와 연결될 수 있게 합니다. 이는 LSP(Language Server Protocol)가 개발 도구 생태계에 가져온 혁신을 AI 도메인에 적용한 것으로 평가받고 있습니다.