WIPIVERSE

Grafana

개요

MCP(Model Context Protocol)는 2024년 11월 Anthropic이 발표한 오픈 표준 프로토콜로, AI 애플리케이션(특히 LLM)이 외부 데이터 소스 및 도구와 통합되는 방식을 표준화합니다. 흔히 "AI를 위한 USB-C" 라고 비유되며, 다양한 AI 모델과 데이터 소스 간의 연결을 하나의 표준화된 인터페이스로 통합합니다.

2025년 12월, Anthropic은 MCP를 Linux Foundation 산하 Agentic AI Foundation(AAIF)에 기부했으며, OpenAI, Block 등이 공동 창립에 참여했습니다.


배경 및 탄생

MCP 이전에는 각 AI 애플리케이션이 데이터 소스나 도구에 연결하기 위해 맞춤형 커넥터를 일일이 개발해야 했습니다. 이는 Anthropic이 표현한 "N×M 데이터 통합 문제" — N개의 AI 앱과 M개의 데이터 소스 간의 조합 폭발 — 를 야기했습니다.

  • OpenAI의 2023년 function-calling API나 ChatGPT 플러그인 프레임워크도 유사한 문제를 해결했지만, 벤더 종속적이었습니다.
  • MCP는 Language Server Protocol(LSP)의 메시지 흐름 아이디어를 차용하여, 언어 서버 생태계의 성공을 AI 도메인에 적용했습니다.
  • MCP는 Anthropic의 엔지니어 David Soria Parra와 Justin Spahr-Summers에 의해 창안되었습니다.

아키텍처

MCP는 클라이언트-서버 아키텍처를 따르며, 세 가지 주요 참여자로 구성됩니다:

1. MCP Host (호스트)

  • AI 애플리케이션 자체 (예: Claude Desktop, VS Code, AI 도구)
  • 여러 개의 MCP Client 인스턴스를 생성하고 관리
  • 보안 정책, 사용자 동의, 연결 수명 주기 제어
  • LLM 통합 및 컨텍스트 집계 조정

2. MCP Client (클라이언트)

  • 호스트가 생성하며, 각 서버와 1:1 전용 연결 유지
  • 프로토콜 협상 및 기능 협상(capability negotiation) 처리
  • 메시지 양방향 라우팅, 구독 및 알림 관리
  • 서버 간 보안 경계 유지

3. MCP Server (서버)

  • 특정 기능(도구, 리소스, 프롬프트)을 노출하는 프로그램
  • 로컬 프로세스(stdio transport) 또는 원격 서비스(HTTP transport)로 실행 가능
  • 각 서버는 독립적으로 작동하며, 다른 서버의 컨텍스트를 볼 수 없음
MCP Host (AI Application)
  ├── MCP Client 1 ──── MCP Server A (로컬: 파일시스템)
  ├── MCP Client 2 ──── MCP Server B (로컬: 데이터베이스)
  └── MCP Client 3 ──── MCP Server C (원격: Sentry API)

프로토콜 계층

데이터 계층 (Data Layer)

  • JSON-RPC 2.0 기반 메시지 교환
  • 수명 주기 관리: 연결 초기화, 기능 협상, 종료 처리
  • 서버 프리미티브:
    • Tools (도구): AI 모델이 실행할 수 있는 함수 (파일 작업, API 호출, DB 쿼리 등)
    • Resources (리소스): 읽기 전용 컨텍스트 데이터 (파일 내용, DB 스키마, API 문서 등)
    • Prompts (프롬프트): 재사용 가능한 템플릿 (시스템 프롬프트, few-shot 예제 등)
  • 클라이언트 프리미티브:
    • Sampling: 서버가 호스트 LLM에 완성 요청
    • Roots: 서버가 URI/파일시스템 경계 탐색
    • Elicitation: 서버가 사용자에게 추가 정보 요청
  • 유틸리티: 알림(Notifications), 진행 추적(Progress), 취소(Cancellation), 로깅(Logging)

전송 계층 (Transport Layer)

  • Stdio Transport: 표준 입출력 스트림을 통한 로컬 프로세스 간 통신 (저지연, 네트워크 오버헤드 없음)
  • Streamable HTTP Transport: HTTP POST + Server-Sent Events(SSE)를 통한 원격 통신 (OAuth 인증 지원)

주요 특징

기능 협상 (Capability Negotiation)

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

  • 서버: 도구 지원 여부, 리소스 구독 지원, 프롬프트 템플릿 등
  • 클라이언트: 샘플링 지원, 알림 처리 등

보안 원칙

  1. 사용자 동의 및 통제: 모든 데이터 접근과 작업에 명시적 동의 필요
  2. 데이터 프라이버시: 사용자 데이터는 동의 없이 타 서버에 전송 금지
  3. 도구 안전성: 도구는 임의 코드 실행으로 간주, 주의 필요
  4. LLM 샘플링 통제: 사용자가 샘플링 발생 여부와 프롬프트 내용 통제

서버 격리

  • 각 서버는 전체 대화 내용을 읽을 수 없음
  • 서버 간 상호작용은 호스트가 제어
  • 보안 경계는 호스트 프로세스가 강제

SDK 지원 언어

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

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

레퍼런스 서버

공식 저장소(servers)에서 제공하는 레퍼런스 구현:

  • Everything: 테스트/참조 서버
  • Fetch: 웹 콘텐츠 가져오기 및 변환
  • Filesystem: 보안 파일 작업
  • Git: Git 저장소 읽기/검색/조작
  • Memory: 지식 그래프 기반 영구 메모리
  • Sequential Thinking: 동적 문제 해결
  • Time: 시간 및 시간대 변환

도입 현황

  • OpenAI (2025년 3월): MCP 공식 채택, ChatGPT 데스크톱 앱에 통합
  • Google DeepMind (2025년 4월): MCP 채택 발표
  • VS Code, Replit, Sourcegraph 등 IDE 및 코딩 플랫폼에서 채택
  • Salesforce (2026년): Headless 360 플랫폼에서 MCP 라우팅, 4,500만+ MCP 호출 처리
  • Cloudflare: MCP 서버 배포 지원
  • Microsoft Semantic Kernel, Azure OpenAI와 통합 가능

보안 이슈

2025년 4월, 보안 연구진들은 MCP의 여러 미해결 보안 문제를 분석 보고했습니다:

  • 프롬프트 인젝션(Prompt Injection)
  • 중독된 도구(Poisoned Tools) 를 통한 데이터 유출 가능성

참고 자료

둘러보기

더 찾아볼 만한 주제

    전체 문서 보기