WIPIVERSE

나카무라 슌스케

개요

MCP(Model Context Protocol)는 Anthropic이 2024년 11월에 발표한 개방형 프로토콜(open protocol)로, AI 애플리케이션(특히 LLM)이 외부 데이터 소스 및 도구와 표준화된 방식으로 연결될 수 있게 해주는 규격입니다. 흔히 "AI를 위한 USB-C 포트"에 비유됩니다.

2025년 12월, Anthropic은 MCP를 Linux Foundation 산하의 Agentic AI Foundation(AAIF)에 기부했습니다.


배경 및 필요성

LLM은 강력하지만, 외부 데이터(파일, DB, API 등)에 접근하거나 실제 행동(코드 실행, 메일 발송 등)을 수행하는 데 한계가 있습니다. MCP 이전에는 각 데이터 소스마다 맞춤형 커넥터를 개발해야 하는 N×M 데이터 통합 문제가 존재했습니다. MCP는 이 문제를 해결하기 위해 Language Server Protocol(LSP)의 메시지 흐름 아이디어를 차용하여 만들어졌습니다.


아키텍처

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

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

주요 구성 요소

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

전송 계층 (Transport Layer)

MCP는 두 가지 전송 방식을 지원합니다:

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

핵심 프리미티브 (Primitives)

MCP 서버는 세 가지 핵심 기능을 제공합니다:

1. Tools (도구)

  • 정의: AI 모델이 능동적으로 호출할 수 있는 실행 가능한 함수
  • 예시: 파일 검색, DB 쿼리, API 호출, 이메일 전송, 비행기 검색
  • 제어 주체: AI 모델 (모델이 필요에 따라 호출 결정)
  • 프로토콜 메서드: tools/list, tools/call

2. Resources (리소스)

  • 정의: AI 애플리케이션이 컨텍스트로 활용할 수 있는 읽기 전용 데이터 소스
  • 예시: 파일 내용, DB 스키마, API 문서, 날씨 정보
  • 제어 주체: 애플리케이션 (앱이 리소스를 선택하여 모델에 제공)
  • 프로토콜 메서드: resources/list, resources/read, resources/subscribe
  • 특징: URI 기반 접근 (file://, weather://forecast/{city} 등), 템플릿 지원

3. Prompts (프롬프트)

  • 정의: 재사용 가능한 템플릿. 특정 도메인 작업을 위한 구조화된 상호작용 패턴
  • 예시: "휴가 계획 세우기", "회의 요약하기"
  • 제어 주체: 사용자 (명시적 호출 필요)
  • 프로토콜 메서드: prompts/list, prompts/get

클라이언트 측 프리미티브

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

기능 설명
Sampling 서버가 클라이언트의 LLM에게 메시지 생성을 요청
Roots 서버가 작업할 URI/파일시스템 경계를 문의
Elicitation 서버가 사용자에게 추가 정보 입력 요청

프로토콜 상세

메시지 형식

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

  • Request: id, method, params 포함
  • Response: id, result 또는 error 포함
  • Notification: id 없음 (응답 불필요)

생명주기 (Lifecycle)

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

기능 협상 (Capability Negotiation)

초기화 단계에서 클라이언트와 서버는 서로 지원하는 기능을 선언합니다:

  • 서버: tools, resources, prompts, listChanged 등
  • 클라이언트: sampling, elicitation 등

보안 및 신뢰 원칙

MCP는 강력한 기능(데이터 접근, 코드 실행)을 제공하므로 다음과 같은 보안 원칙을 강조합니다:

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

SDK 지원 언어

언어 저장소
Python modelcontextprotocol/python-sdk
TypeScript modelcontextprotocol/typescript-sdk
Java/Kotlin modelcontextprotocol/java-sdk
C# modelcontextprotocol/csharp-sdk
Go modelcontextprotocol/go-sdk

채택 현황

  • OpenAI (2025년 3월): MCP 공식 채택, ChatGPT 데스크톱 앱에 통합
  • Google DeepMind (2025년 4월): MCP 채택 발표
  • Microsoft: Semantic Kernel, Azure OpenAI와 통합
  • Cloudflare: MCP 서버 배포 지원
  • Salesforce: Headless 360 플랫폼에서 MCP 활용
  • IDE/코딩 도구: VS Code, Replit, Sourcegraph 등에서 채택

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

요약

MCP는 AI 애플리케이션이 외부 세계와 소통하는 표준화된 인터페이스입니다. USB-C가 다양한 주변기기를 하나의 포트로 연결하듯, MCP는 다양한 데이터 소스와 도구를 하나의 프로토콜로 AI에 연결합니다. JSON-RPC 2.0 기반의 상태 저장 프로토콜로, 도구(Tools), 리소스(Resources), 프롬프트(Prompts)라는 세 가지 핵심 프리미티브를 통해 AI의 컨텍스트 접근과 행동 실행을 가능하게 합니다.

둘러보기

더 찾아볼 만한 주제

    전체 문서 보기