WIPIVERSE

하마마쓰 홍보관

MCP

개요

MCP(Model Context Protocol)는 LLM(대규모 언어 모델) 애플리케이션이 외부 데이터 소스와 도구에 표준화된 방식으로 연결될 수 있게 해주는 개방형 프로토콜입니다. Anthropic에서 만들었으며, AI 애플리케이션을 위한 USB-C 포트와 같은 역할을 한다고 비유됩니다. USB-C가 다양한 주변기기를 표준화된 방식으로 연결하듯, MCP는 AI 모델을 다양한 데이터 소스와 도구에 연결하는 표준 방법을 제공합니다.


왜 MCP가 필요한가?

M×N 문제 해결

AI 애플리케이션(M)이 다양한 외부 데이터 소스와 도구(N)에 접근해야 하는 상황에서, 표준 프로토콜이 없으면 개발자는 모든 애플리케이션-소스 쌍마다 개별적인 커스텀 통합을 구축해야 합니다(M×N 문제). MCP는 이를 M+N으로 단순화합니다:

  • MCP 이전: 각 AI 앱이 각 도구의 API를 개별적으로 학습하고 통합해야 함
  • MCP 이후: 한 번의 MCP 서버 구현으로 모든 MCP 호환 클라이언트가 사용 가능

LSP에서 영감을 받음

MCP는 개발 도구 생태계를 표준화한 Language Server Protocol (LSP)에서 영감을 받았습니다. LSP가 하나의 언어 서버로 모든 편집기에서 코드 지원을 가능하게 한 것처럼, MCP는 하나의 MCP 서버로 모든 AI 앱에서 도구/데이터 접근을 가능하게 합니다.


핵심 아키텍처

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

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

세 가지 주요 참여자

구성 요소 설명 예시
MCP Host 연결을 시작하는 LLM 애플리케이션 Claude Desktop, VS Code, Cursor
MCP Client 호스트 내에서 서버와 1:1 연결을 유지하는 컴포넌트 호스트가 각 서버마다 생성
MCP Server 특정 기능(도구, 리소스, 프롬프트)을 노출하는 프로그램 파일시스템 서버, DB 서버, GitHub 서버

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

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

1. 🛠️ Tools (도구)

  • LLM이 능동적으로 호출할 수 있는 실행 가능한 함수
  • 파일 작업, API 호출, DB 쿼리 등 액션 수행
  • 프로토콜 메서드: tools/list, tools/call
  • 예: searchFlights(), sendEmail(), createCalendarEvent()

2. 📄 Resources (리소스)

  • AI 애플리케이션에 컨텍스트 정보를 제공하는 데이터 소스
  • 읽기 전용 데이터 접근 (파일 내용, DB 스키마, API 문서 등)
  • 고유 URI로 식별 (예: file:///path/to/doc.md)
  • 프로토콜 메서드: resources/list, resources/read
  • 리소스 템플릿 지원: 동적 URI (예: weather://forecast/{city}/{date})

3. 💬 Prompts (프롬프트)

  • 재사용 가능한 템플릿으로 상호작용 구조화
  • 사용자가 명시적으로 호출
  • 프로토콜 메서드: prompts/list, prompts/get
  • 예: "휴가 계획하기" 프롬프트 (목적지, 기간, 예산 입력)

클라이언트 기능 (서버 → 클라이언트)

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

기능 설명
Sampling 서버가 클라이언트의 LLM에게 추론(완성) 요청
Elicitation 서버가 사용자에게 추가 정보 요청
Logging 서버가 클라이언트에 로그 메시지 전송

통신 방식

전송 계층 (Transport Layer)

방식 설명 사용처
STDIO 표준 입출력 스트림 사용 로컬 MCP 서버 (동일 머신)
Streamable HTTP HTTP POST + Server-Sent Events 원격 MCP 서버

메시지 형식

모든 통신은 JSON-RPC 2.0 기반:

// 요청 (Request)
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_weather",
    "arguments": { "city": "Seoul" }
  }
}

// 응답 (Response)
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      { "type": "text", "text": "Weather in Seoul: Sunny, 22°C" }
    ]
  }
}

생명주기 (Lifecycle)

  1. 초기화(Initialize): 클라이언트-서버 간 프로토콜 버전 및 기능 협상
  2. 준비 완료(Initialized): 클라이언트가 notifications/initialized 전송
  3. 운영: 도구 호출, 리소스 읽기, 알림 등 정상 통신
  4. 종료: 세션 종료

실제 코드 예시

Python SDK로 MCP 서버 만들기 (v2)

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}!"

Python SDK로 MCP 클라이언트 만들기

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())

보안 원칙

MCP는 강력한 기능(임의 데이터 접근, 코드 실행)을 가능하게 하므로 다음 원칙이 중요합니다:

  1. 사용자 동의 및 통제: 모든 데이터 접근과 작업에 명시적 동의 필요
  2. 데이터 프라이버시: 사용자 데이터 보호
  3. 도구 안전성: 도구 호출 전 사용자 승인 필요
  4. LLM 샘플링 제어: 샘플링 요청 시 사용자 승인 필수

생태계 및 현황

공식 SDK

  • Python SDK: mcp 패키지 (PyPI)
  • TypeScript SDK: @modelcontextprotocol/sdk (npm)

MCP를 지원하는 주요 클라이언트 (호스트)

  • Claude Desktop (Anthropic)
  • VS Code (GitHub Copilot)
  • Cursor, Windsurf 등 AI IDE
  • Continue (VS Code/JetBrains 플러그인)

주요 MCP 서버 예시

  • 파일시스템: 로컬 파일 읽기/쓰기
  • GitHub: 저장소 관리, 이슈/PR 생성
  • Slack: 메시지 전송, 채널 관리
  • Elasticsearch: 검색 및 데이터 분석
  • Sentry: 에러 모니터링
  • PostgreSQL/MySQL: 데이터베이스 쿼리

요약

MCP는 AI 애플리케이션과 외부 도구/데이터 간의 표준화된 통신 프로토콜입니다. USB-C가 다양한 기기를 연결하는 표준이 된 것처럼, MCP는 AI 생태계에서 "AI를 위한 표준 연결 방식"을 목표로 합니다. JSON-RPC 2.0 기반으로 도구(Tools), 리소스(Resources), 프롬프트(Prompts)라는 세 가지 핵심 프리미티브를 통해 LLM이 외부 세계와 상호작용할 수 있게 해줍니다.

더 알아보기: modelcontextprotocol.io | Python SDK | GitHub 저장소

둘러보기

더 찾아볼 만한 주제

    전체 문서 보기