WIPIVERSE

망사

📌 개요

MCP(Model Context Protocol)는 Anthropic이 주도하여 개발한 오픈 프로토콜로, LLM(대규모 언어 모델) 애플리케이션이 외부 데이터 소스 및 도구와 원활하게 통합될 수 있도록 표준화된 방법을 제공합니다. 마치 USB-C 포트가 다양한 주변기기를 표준화된 방식으로 연결하듯, MCP는 AI 모델을 다양한 데이터 소스와 도구에 연결하는 표준 인터페이스 역할을 합니다.

공식 사이트: modelcontextprotocol.io GitHub: github.com/modelcontextprotocol


🏗️ 아키텍처

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

주요 구성 요소

구성 요소 설명
MCP Host AI 애플리케이션 (Claude Desktop, IDE 등). 여러 MCP 클라이언트를 생성하고 관리
MCP Client 각 MCP 서버와 1:1 연결을 유지하는 프로토콜 클라이언트
MCP Server 특정 기능(도구, 리소스, 프롬프트)을 노출하는 경량 프로그램
MCP Host (AI Application)
  ├── MCP Client 1 ──── MCP Server A (로컬: 파일시스템)
  ├── MCP Client 2 ──── MCP Server B (로컬: 데이터베이스)
  └── MCP Client 3 ──── MCP Server C (원격: Sentry API)

설계 원칙

  1. 서버는 매우 쉽게 구축 가능해야 함 — 호스트가 복잡한 조정을 담당
  2. 서버는 높은 조합성(composability)을 가져야 함 — 여러 서버를 원활하게 결합 가능
  3. 서버는 전체 대화를 읽을 수 없음 — 보안 경계 유지
  4. 점진적 기능 추가 가능 — 핵심 프로토콜은 최소 기능만 제공

📡 전송 계층 (Transport Layer)

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

전송 방식 설명
Stdio 표준 입출력 스트림 사용. 로컬 프로세스 간 직접 통신. 네트워크 오버헤드 없음
Streamable HTTP HTTP POST + Server-Sent Events(SSE). 원격 서버 통신 지원. OAuth 인증 권장

🧩 데이터 계층 (Data Layer) — 핵심 프리미티브

MCP는 JSON-RPC 2.0을 기반으로 하며, 다음과 같은 핵심 프리미티브를 정의합니다.

서버 측 프리미티브

프리미티브 설명 주요 메서드
Tools (도구) AI 모델이 호출하여 실행할 수 있는 함수 (파일 작업, API 호출, DB 쿼리 등) tools/list, tools/call
Resources (리소스) AI 애플리케이션에 컨텍스트를 제공하는 데이터 소스 (파일 내용, DB 레코드 등) resources/list, resources/read, resources/subscribe
Prompts (프롬프트) 언어 모델과의 상호작용을 구조화하는 재사용 가능한 템플릿 prompts/list, prompts/get

클라이언트 측 프리미티브

프리미티브 설명
Sampling 서버가 클라이언트의 LLM에게 완성(completion)을 요청
Roots 서버가 작업할 URI/파일시스템 경계를 질의
Elicitation 서버가 사용자에게 추가 정보를 요청

🔄 라이프사이클

  1. 초기화(Initialize): 클라이언트가 서버에 initialize 요청을 보내 프로토콜 버전과 지원 기능(capabilities)을 협상
  2. 준비 완료(Initialized): 클라이언트가 notifications/initialized 알림 전송
  3. 활성 세션: 기능 협상 완료 후 실제 데이터 교환
  4. 종료: 세션 종료

🛠️ 공식 SDK

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

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

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

서버 설명
Everything 테스트용 서버 (프롬프트, 리소스, 도구 모두 포함)
Fetch 웹 콘텐츠 가져오기 및 변환
Filesystem 설정 가능한 접근 제어로 안전한 파일 작업
Git Git 저장소 읽기, 검색, 조작
Memory 지식 그래프 기반 영구 메모리 시스템
Sequential Thinking 동적이고 반성적인 문제 해결
Time 시간 및 시간대 변환

🔒 보안 원칙

  1. 사용자 동의 및 통제: 모든 데이터 접근과 작업에 명시적 동의 필요
  2. 데이터 프라이버시: 사용자 데이터 보호
  3. 도구 안전성: 도구는 임의 코드 실행을 의미하므로 주의 필요
  4. LLM 샘플링 제어: 사용자가 샘플링 발생 여부와 프롬프트 내용을 통제

🎓 학습 자료


💡 요약

MCP는 AI 애플리케이션과 외부 도구/데이터 간의 표준화된 통신 프로토콜입니다. LSP(Language Server Protocol)가 개발 도구 생태계에 표준화를 가져온 것처럼, MCP는 AI 애플리케이션 생태계에 표준화된 컨텍스트 통합 방식을 제공합니다. Anthropic이 주도하지만 완전한 오픈 소스로 운영되며, 커뮤니티 기여를 환영합니다.

둘러보기

더 찾아볼 만한 주제

    전체 문서 보기