WIPIVERSE

영덕 사존재

개요

MCP(Model Context Protocol)는 Anthropic이 주도하여 개발한 오픈 프로토콜로, LLM(대규모 언어 모델) 애플리케이션이 외부 데이터 소스와 도구에 표준화된 방식으로 연결될 수 있게 해줍니다. 흔히 "AI 애플리케이션을 위한 USB-C 포트" 라고 비유됩니다. USB-C가 다양한 주변기기를 표준화된 방식으로 연결하듯, MCP는 AI 모델을 다양한 데이터 소스와 도구에 연결하는 표준 인터페이스를 제공합니다.


왜 MCP가 필요한가? (배경)

LLM은 본질적으로 정적인 지식을 가지고 있으며(학습 시점에 고정됨), 외부 시스템에 접근하거나 실시간 데이터를 가져오는 기능이 없습니다. 전통적으로는 각 애플리케이션이 각 도구의 API를 직접 통합하는 M×N 문제가 있었습니다:

  • M개의 AI 애플리케이션 × N개의 데이터 소스/도구 = M×N개의 개별 커스텀 통합 필요
  • 이는 중복 개발, 유지보수 부담, 벤더 종속으로 이어짐

MCP는 이 문제를 M+N으로 단순화합니다. 즉, M개의 클라이언트와 N개의 서버만 만들면 모든 조합이 가능해집니다.


핵심 아키텍처

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

┌─────────────────────────────────┐
│   MCP Host (AI 애플리케이션)      │
│  ┌─────────┐ ┌─────────┐       │
│  │Client 1 │ │Client 2 │  ...  │
│  └────┬────┘ └────┬────┘       │
└───────┼───────────┼────────────┘
        │           │
   ┌────▼──┐  ┌─────▼───┐
   │Server A│  │Server B │  ...
   │(로컬)  │  │(원격)   │
   └────────┘  └─────────┘

주요 구성 요소

구성 요소 설명
MCP Host Claude Desktop, VS Code, IDE 등 AI 애플리케이션. 여러 MCP 클라이언트를 생성하고 관리
MCP Client 호스트 내에서 각 서버와 1:1 연결을 유지하는 컴포넌트
MCP Server 특정 기능(도구, 리소스, 프롬프트)을 노출하는 경량 프로그램. 로컬 또는 원격으로 실행 가능

전송 계층 (Transport Layer)

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

  1. Stdio Transport: 표준 입출력 스트림을 통한 로컬 프로세스 간 통신 (성능 최적)
  2. Streamable HTTP Transport: HTTP POST + Server-Sent Events를 통한 원격 통신 (OAuth 인증 지원)

3가지 핵심 프리미티브 (Primitives)

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

1. 🛠️ Tools (도구)

  • 기능: LLM이 실행할 수 있는 함수 (실행 가능한 액션)
  • 비유: POST/PUT 엔드포인트
  • 예시: 파일 검색, DB 쿼리, API 호출, 이메일 전송
  • 제어권: 모델이 언제 사용할지 결정
  • 프로토콜 메서드: tools/list, tools/call

2. 📄 Resources (리소스)

  • 기능: 읽기 전용 데이터 소스 (컨텍스트 제공)
  • 비유: GET 엔드포인트
  • 예시: 파일 내용, DB 스키마, API 문서, 날씨 정보
  • 제어권: 애플리케이션이 검색 및 제공
  • 프로토콜 메서드: resources/list, resources/read, resources/subscribe

3. 💬 Prompts (프롬프트)

  • 기능: 재사용 가능한 템플릿 (상호작용 가이드)
  • 비유: 워크플로우 레시피
  • 예시: "휴가 계획 세우기", "회의 요약하기"
  • 제어권: 사용자가 명시적으로 호출
  • 프로토콜 메서드: prompts/list, prompts/get

클라이언트 기능 (선택 사항)

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

기능 설명
Sampling 서버가 클라이언트의 LLM을 통해 추론 요청 (에이전트 워크플로우)
Roots 서버가 URI/파일시스템 경계 탐색
Elicitation 서버가 사용자에게 추가 정보 요청

통신 프로토콜

MCP는 JSON-RPC 2.0을 기반으로 합니다:

메시지 타입 설명
Request 고유 ID를 가진 요청 (작업 시작)
Response 요청에 대한 응답 (결과 또는 에러)
Notification ID 없는 단방향 메시지 (응답 불필요)

생명주기 (Lifecycle)

  1. 초기화(Initialize): 클라이언트-서버 간 capability 협상
    • 프로토콜 버전 확인
    • 지원 기능 선언 (tools, resources, prompts 등)
    • ID 교환
  2. 운영(Operation): 기능 사용 (도구 호출, 리소스 읽기 등)
  3. 종료(Termination): 연결 종료

보안 원칙

MCP는 프로토콜 수준에서 다음 원칙을 강조합니다:

  1. 사용자 동의 및 통제: 모든 데이터 접근과 작업에 명시적 동의 필요
  2. 데이터 프라이버시: 사용자 데이터는 동의 없이 서버에 전송 금지
  3. 도구 안전성: 도구 호출은 임의 코드 실행으로 간주, 주의 필요
  4. 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 및 리소스

리소스 링크
공식 문서 modelcontextprotocol.io
Python SDK github.com/modelcontextprotocol/python-sdk
TypeScript SDK github.com/modelcontextprotocol/typescript-sdk
명세서 spec.modelcontextprotocol.io
MCP Inspector 디버깅 도구
Hugging Face MCP Course huggingface.co/learn/mcp-course

요약

MCP는 AI 애플리케이션과 외부 도구/데이터 간의 표준화된 연결 프로토콜입니다. LSP(Language Server Protocol)가 개발 도구 생태계에 표준화를 가져온 것처럼, MCP는 AI 도구 생태계에 동일한 역할을 합니다. 이를 통해 개발자는 각 도구의 개별 API를 학습할 필요 없이, 표준화된 방식으로 AI 애플리케이션에 기능을 추가할 수 있습니다.

둘러보기

더 찾아볼 만한 주제

    전체 문서 보기