WIPIVERSE

다비드 로페스

📌 개요

Model Context Protocol (MCP) 는 Anthropic이 2024년 11월에 발표한 개방형 프로토콜로, AI 애플리케이션(특히 LLM)이 외부 데이터 소스 및 도구와 표준화된 방식으로 통합될 수 있도록 설계되었습니다. 흔히 "AI를 위한 USB-C 포트" 라고 비유됩니다. USB-C가 다양한 주변기기를 표준화된 방식으로 연결하듯, MCP는 AI 모델을 다양한 데이터 소스와 도구에 연결하는 표준 인터페이스를 제공합니다.

2025년 12월, Anthropic은 MCP를 Agentic AI Foundation (AAIF) — Linux Foundation 산하의 기금 — 에 기부했으며, Block, OpenAI 등이 공동 창립자로 참여했습니다.


🏗️ 아키텍처

MCP는 클라이언트-서버 아키텍처를 따릅니다.

┌─────────────────────────────────┐
│   MCP Host (AI Application)     │
│  ┌──────────┐ ┌──────────┐     │
│  │Client 1  │ │Client 2  │ ...  │
│  └────┬─────┘ └────┬─────┘     │
└───────┼────────────┼───────────┘
        │            │
   ┌────▼──┐   ┌────▼──┐
   │Server A│   │Server B│
   │(로컬)  │   │(원격)  │
   └────────┘   └────────┘

주요 구성 요소

구성 요소 설명
MCP Host AI 애플리케이션 (Claude Desktop, VS Code, IDE 등). 여러 MCP Client를 생성하고 관리
MCP Client 각 MCP Server와 1:1 연결을 유지하는 프로토콜 클라이언트
MCP Server 특정 기능(도구, 리소스, 프롬프트)을 노출하는 경량 프로그램

전송 계층 (Transport Layer)

MCP는 두 가지 전송 메커니즘을 지원합니다:

  1. Stdio Transport — 로컬 프로세스 간 표준 입출력 통신 (성능 최적)
  2. Streamable HTTP Transport — HTTP POST + Server-Sent Events (SSE) 기반 원격 통신, OAuth 인증 지원

📋 핵심 개념

데이터 계층 (Data Layer)

MCP는 JSON-RPC 2.0을 기반으로 메시지를 교환합니다. 세 가지 주요 메시지 유형이 있습니다:

유형 설명
Request 요청 (ID 포함, 응답 필요)
Response 응답 (Result 또는 Error)
Notification 알림 (ID 없음, 응답 불필요)

서버 프리미티브 (Server Primitives)

MCP 서버는 세 가지 핵심 기능을 노출할 수 있습니다:

1. 🛠️ Tools (도구)

  • AI 모델이 능동적으로 호출할 수 있는 실행 가능한 함수
  • 파일 작업, API 호출, 데이터베이스 쿼리 등 동작 수행
  • tools/list로 발견 → tools/call로 실행
  • JSON Schema 기반 입력 검증

예시:

{
  "name": "searchFlights",
  "description": "항공편 검색",
  "inputSchema": {
    "type": "object",
    "properties": {
      "origin": {"type": "string"},
      "destination": {"type": "string"},
      "date": {"type": "string", "format": "date"}
    },
    "required": ["origin", "destination", "date"]
  }
}

2. 📄 Resources (리소스)

  • 읽기 전용 데이터 소스 — 파일 내용, DB 스키마, API 문서 등
  • 고유 URI로 식별 (예: file:///path/to/doc.md)
  • 직접 리소스와 동적 템플릿 리소스 지원
  • resources/list → resources/read

템플릿 예시:

weather://forecast/{city}/{date}
travel://flights/{origin}/{destination}

3. 💬 Prompts (프롬프트)

  • 재사용 가능한 템플릿 — 사용자가 명시적으로 호출
  • 도메인별 워크플로우나 상호작용 패턴 정의
  • prompts/list → prompts/get

클라이언트 프리미티브 (Client Primitives)

서버가 클라이언트에 요청할 수 있는 기능:

기능 설명
Sampling 서버가 호스트 LLM에 언어 모델 완성 요청 (sampling/createMessage)
Roots 서버가 URI/파일시스템 경계 탐색
Elicitation 서버가 사용자에게 추가 정보 요청

유틸리티

  • Tasks (실험적) — 지속적 실행 래퍼, 지연된 결과 검색 및 상태 추적
  • Notifications — 실시간 업데이트 (예: notifications/tools/list_changed)
  • Progress tracking, Cancellation, Error reporting, Logging

🔄 라이프사이클

MCP 연결은 상태 기반(stateful) 이며, 다음 단계를 거칩니다:

1. 초기화 (Initialize)

클라이언트가 initialize 요청을 보내 프로토콜 버전 협상 및 기능 협상(Capability Negotiation) 을 수행합니다.

// 클라이언트 → 서버
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "initialize",
  "params": {
    "protocolVersion": "2025-06-18",
    "capabilities": { "elicitation": {} },
    "clientInfo": { "name": "example-client", "version": "1.0.0" }
  }
}

// 서버 → 클라이언트
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "protocolVersion": "2025-06-18",
    "capabilities": {
      "tools": { "listChanged": true },
      "resources": {}
    },
    "serverInfo": { "name": "example-server", "version": "1.0.0" }
  }
}

2. 준비 완료 알림

{ "jsonrpc": "2.0", "method": "notifications/initialized" }

3. 활성 세션

  • 클라이언트가 도구/리소스/프롬프트 요청
  • 서버가 샘플링 요청 가능
  • 양방향 알림

4. 종료


🔒 보안 및 신뢰 원칙

MCP는 강력한 기능을 제공하지만, 그만큼 보안이 중요합니다:

  1. 사용자 동의 및 통제 — 모든 데이터 접근과 작업에 명시적 동의 필요
  2. 데이터 프라이버시 — 사용자 데이터는 동의 없이 외부로 전송 금지
  3. 도구 안전성 — 도구는 임의 코드 실행을 의미하므로 주의 필요
  4. LLM 샘플링 통제 — 사용자가 프롬프트 내용과 결과 가시성 통제

⚠️ 2025년 4월, 보안 연구원들은 MCP의 프롬프트 인젝션 및 중독된 도구를 통한 데이터 유출 가능성을 보고했습니다.


🚀 실제 사용 예시

여행 계획 시나리오

세 개의 MCP 서버가 협력하는 예시:

  1. Travel Server — 항공편, 호텔, 여정 관리
  2. Weather Server — 기후 데이터 및 예보
  3. Calendar/Email Server — 일정 및 커뮤니케이션

흐름:

  1. 사용자가 plan-vacation 프롬프트 호출 (목적지: 바르셀로나, 기간: 7일)
  2. AI가 캘린더 리소스, 여행 선호도, 과거 여행 기록 읽기
  3. AI가 searchFlights(), checkWeather() 도구 실행
  4. bookHotel(), createCalendarEvent(), sendEmail() 실행
  5. 사용자 승인 후 전체 여행 예약 완료

📦 SDK 및 구현

MCP는 다양한 언어로 SDK를 제공합니다:

언어 저장소
Python python-sdk
TypeScript typescript-sdk
Java java-sdk
Kotlin kotlin-sdk
C# csharp-sdk
Go go-sdk
Rust rust-sdk
Swift swift-sdk
PHP php-sdk
Ruby ruby-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():
    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())

🌐 채택 현황

기관/기업 내용
OpenAI 2025년 3월 MCP 채택, ChatGPT 데스크톱 앱에 통합
Google DeepMind 2025년 4월 MCP 채택 발표
Microsoft Semantic Kernel 및 Azure OpenAI와 통합
Cloudflare MCP 서버 배포 지원
Replit, Sourcegraph AI 코딩 도우미에 MCP 통합
AAIF 2026년 4월 MCP Dev Summit North America 개최 (약 1,200명 참석)

📚 참고 자료


💡 요약

MCP는 AI 애플리케이션과 외부 데이터/도구 간의 표준화된 통신 프로토콜입니다. JSON-RPC 2.0 기반으로, 서버는 Tools(실행), Resources(데이터), Prompts(템플릿)를 노출하고, 클라이언트는 Sampling, Roots, Elicitation 기능을 제공합니다. LSP(Language Server Protocol)에서 영감을 받았으며, Anthropic이 시작하여 현재는 Linux Foundation 산하 AAIF에서 관리하는 개방형 표준입니다.

둘러보기

더 찾아볼 만한 주제

    전체 문서 보기