WIPIVERSE

이와테 일보

개요

Model Context Protocol (MCP)는 LLM(대규모 언어 모델) 애플리케이션이 외부 데이터 소스와 도구에 표준화된 방식으로 연결될 수 있도록 하는 개방형 프로토콜입니다. Anthropic이 주도하여 개발되었으며, AI 애플리케이션을 위한 USB-C 포트와 같은 역할을 합니다. 즉, 다양한 데이터 소스와 도구를 LLM에 표준화된 방식으로 연결해줍니다.


핵심 아키텍처

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

┌─────────────────────────────────┐
│         MCP Host (AI App)        │
│  ┌────────┐ ┌────────┐ ┌───────┐ │
│  │Client 1│ │Client 2│ │Client3│ │
│  └───┬────┘ └───┬────┘ └───┬───┘ │
└──────┼──────────┼──────────┼──────┘
       │          │          │
  ┌────▼──┐ ┌────▼──┐ ┌────▼──┐
  │Server │ │Server │ │Server │
  │  A    │ │  B    │ │  C    │
  └───────┘ └───────┘ └───────┘

구성 요소

구성 요소 설명
MCP Host Claude Desktop, IDE, AI 도구 등 MCP를 통해 데이터에 접근하려는 프로그램
MCP Client 서버와 1:1 연결을 유지하는 프로토콜 클라이언트 (호스트가 각 서버마다 생성)
MCP Server 표준화된 MCP를 통해 특정 기능을 노출하는 경량 프로그램

주요 개념 (Primitives)

MCP는 세 가지 핵심 서버 프리미티브를 정의합니다:

1. 🛠️ Tools (도구)

  • 정의: AI 애플리케이션이 호출하여 실행할 수 있는 함수
  • 제어 주체: AI 모델 (모델이 필요에 따라 호출)
  • 예시: 파일 검색, DB 쿼리, API 호출, 이메일 전송
  • 프로토콜 메서드: tools/list, tools/call

2. 📄 Resources (리소스)

  • 정의: AI 애플리케이션에 컨텍스트 정보를 제공하는 데이터 소스
  • 제어 주체: 애플리케이션 (앱이 가져와서 모델에 전달)
  • 예시: 파일 내용, DB 스키마, API 문서, 달력 데이터
  • 프로토콜 메서드: resources/list, resources/read, resources/subscribe
  • URI 기반 접근: 예) file:///path/to/doc.md, weather://forecast/{city}

3. 💬 Prompts (프롬프트)

  • 정의: 재사용 가능한 템플릿으로, 특정 도구/리소스와 함께 작업하도록 모델에 지시
  • 제어 주체: 사용자 (명시적 호출 필요)
  • 예시: "휴가 계획 세우기", "회의 요약하기"
  • 프로토콜 메서드: prompts/list, prompts/get

클라이언트 프리미티브

기능 설명
Sampling 서버가 클라이언트의 LLM에게 완성 요청 (서버가 모델 SDK 없이도 LLM 활용 가능)
Roots 서버가 URI/파일시스템 경계를 탐색할 수 있도록 안내
Elicitation 서버가 사용자에게 추가 정보 요청

통신 계층

데이터 계층 (Data Layer)

  • JSON-RPC 2.0 기반 메시지 교환
  • 생명주기 관리: 초기화 → 기능 협상 → 연결 종료
  • 알림(Notifications): 실시간 업데이트 (예: 도구 목록 변경 시 notifications/tools/list_changed)

전송 계층 (Transport Layer)

전송 방식 설명
STDIO 표준 입출력 스트림 사용, 로컬 프로세스 간 직접 통신 (고성능)
Streamable HTTP HTTP POST + Server-Sent Events, 원격 서버 통신 지원, OAuth 인증 가능

보안 원칙

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

SDK 지원 언어

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

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

참고 서버 (Reference Servers)

공식 저장소(modelcontextprotocol/servers)에서 제공하는 참조 구현:

  • Everything - 테스트/참조 서버
  • Fetch - 웹 콘텐츠 가져오기
  • Filesystem - 파일 시스템 접근
  • Git - Git 저장소 조작
  • Memory - 지식 그래프 기반 메모리 시스템
  • Sequential Thinking - 순차적 사고
  • Time - 시간/시간대 변환

요약

MCP는 AI 애플리케이션과 외부 데이터/도구 간의 표준화된 연결 프로토콜입니다. LSP(Language Server Protocol)가 프로그래밍 언어 지원을 표준화한 것처럼, MCP는 AI 애플리케이션의 컨텍스트 통합을 표준화합니다. Tools(실행), Resources(데이터), Prompts(템플릿)라는 세 가지 핵심 프리미티브를 통해 LLM이 안전하고 표준화된 방식으로 외부 세계와 상호작용할 수 있게 해줍니다.

공식 문서: modelcontextprotocol.io

둘러보기

더 찾아볼 만한 주제

    전체 문서 보기