WIPIVERSE

열녀문 (영화)

MCP (Model Context Protocol)

개요

MCP(Model Context Protocol)는 AI 애플리케이션(특히 대규모 언어 모델, LLM)이 외부 데이터 소스와 도구에 표준화된 방식으로 연결될 수 있도록 하는 개방형 프로토콜이다. 2024년 말 Anthropic이 발표했으며, "AI를 위한 USB-C 포트"라는 비유로 자주 설명된다. 즉, 다양한 AI 모델과 외부 시스템 간의 연결을 하나의 표준으로 통일하는 것이 핵심 목표다.

MCP는 JSON-RPC 2.0을 기반으로 하며, 클라이언트-서버 아키텍처를 따른다. AI 애플리케이션(호스트)이 MCP 클라이언트를 통해 MCP 서버에 연결하면, 서버가 제공하는 도구(Tools), 리소스(Resources), 프롬프트(Prompts) 등을 활용할 수 있다.


배경과 필요성

LLM은 본질적으로 훈련 데이터에 기반한 정적 지식을 가지며, 실시간 데이터 접근이나 외부 시스템과의 상호작용이 불가능하다. 기존에는 각 AI 애플리케이션이 외부 도구와 연결하기 위해 개별적인 커스텀 통합(Custom Integration) 을 개발해야 했다. 이는 M×N 문제(M개의 AI 앱 × N개의 도구 = M×N개의 통합 필요)를 야기했다.

MCP는 이 문제를 M+N(M개의 클라이언트 + N개의 서버) 구조로 단순화한다. 즉, 한 번 MCP 서버를 만들면 모든 MCP 호환 클라이언트에서 재사용할 수 있다.

MCP는 Language Server Protocol(LSP) 에서 영감을 받았다. LSP가 프로그래밍 언어 지원을 표준화한 것처럼, MCP는 AI 컨텍스트 통합을 표준화한다.


아키텍처

MCP는 세 가지 주요 참여자로 구성된다.

1. 호스트 (Host)

  • LLM 애플리케이션 자체 (예: Claude Desktop, Visual Studio Code, Cursor, Windsurf 등)
  • 여러 MCP 클라이언트를 생성하고 관리
  • 사용자 인증, 보안 정책, 컨텍스트 집계 등을 담당

2. 클라이언트 (Client)

  • 호스트 내부에서 각 MCP 서버와 1:1 연결을 유지하는 프로토콜 계층
  • 서버와의 핸드셰이크, 기능 협상(Capability Negotiation), 메시지 라우팅 수행
  • 하나의 호스트가 여러 클라이언트를 가질 수 있음

3. 서버 (Server)

  • 특정 기능(파일시스템, 데이터베이스, GitHub API 등)을 노출하는 경량 프로그램
  • 도구(Tools), 리소스(Resources), 프롬프트(Prompts) 를 제공
  • 로컬 프로세스(stdio) 또는 원격 서비스(HTTP)로 실행 가능
+----------------------------------------------------------+
|                      Host (호스트)                         |
|   Claude Desktop, IDE, 커스텀 에이전트 앱 등                  |
|                                                          |
|  +------------------+        +------------------+        |
|  |  MCP Client #1   |        |  MCP Client #2   |        |
|  +--------+---------+        +--------+---------+        |
+-----------|--------------------------|-------------------+
            | 1:1 연결                  | 1:1 연결
            v                          v
   +------------------+      +------------------+
   |  MCP Server A    |      |  MCP Server B    |
   |  (파일시스템)      |      |  (GitHub API)    |
   +------------------+      +------------------+

핵심 개념

데이터 계층 (Data Layer)

JSON-RPC 2.0 기반의 메시지 교환 프로토콜. 다음을 포함한다.

  • 생명주기 관리(Lifecycle Management): 연결 초기화, 기능 협상, 종료
  • 서버 기능: 도구, 리소스, 프롬프트 노출
  • 클라이언트 기능: 샘플링(Sampling), 근원(Roots), 유발(Elicitation)
  • 유틸리티: 알림(Notifications), 진행 추적(Progress), 취소(Cancellation), 로깅(Logging)

전송 계층 (Transport Layer)

두 가지 표준 전송 방식이 있다.

전송 방식 통신 채널 적합한 용도 인증
STDIO 표준 입출력(stdin/stdout) 로컬 프로세스 간 통신 환경변수
Streamable HTTP HTTP POST + 선택적 SSE 원격 서버, 다중 클라이언트 OAuth 2.1

세 가지 핵심 프리미티브 (Primitives)

1. 도구 (Tools)

  • LLM이 능동적으로 호출할 수 있는 실행 가능한 함수
  • 파일 쓰기, API 호출, 데이터베이스 쿼리, 이메일 전송 등 동작(Action) 수행
  • JSON Schema로 입력 정의, 실행 결과 반환
  • 프로토콜 메서드: tools/list, tools/call

2. 리소스 (Resources)

  • 읽기 전용 데이터 소스로, AI 애플리케이션이 컨텍스트로 활용
  • 파일 내용, 데이터베이스 스키마, API 응답 등
  • 고유 URI로 식별 (예: file:///path/to/doc.md)
  • 프로토콜 메서드: resources/list, resources/read, resources/subscribe

3. 프롬프트 (Prompts)

  • 재사용 가능한 템플릿으로 사용자나 모델의 상호작��을 구조화
  • 특정 작업(예: "휴가 계획", "코드 리뷰")을 위한 미리 작성된 워크플로우
  • 프로토콜 메서드: prompts/list, prompts/get

보안 원칙

MCP는 프로토콜 수준에서 보안을 강제할 수 없으므로, 구현체가 다음 원칙을 따라야 한다.

  1. 사용자 동의와 통제: 모든 데이터 접근과 도구 실행에 명시적 동의 필요
  2. 데이터 프라이버시: 호스트는 사용자 데이터를 서버에 무단 전송 금지
  3. 도구 안전성: 도구 호출은 임의 코드 실행으로 간주, 사용자 승인 필수
  4. LLM 샘플링 통제: 서버의 샘플링 요청은 사용자 승인 필요

SDK 및 구현 언어

MCP는 다양한 언어로 SDK를 제공한다.

언어 SDK 저장소 상태
Python python-sdk v1.x 안정, v2.0.0b1 프리릴리스
TypeScript typescript-sdk 안정
Java java-sdk Spring AI 기반
Kotlin kotlin-sdk 안정
Go go-sdk 안정
Rust rust-sdk 안정
C# (.NET) csharp-sdk 안정
Ruby ruby-sdk 안정
Swift swift-sdk 안정
PHP php-sdk 안정

주요 사용 사례

파일시스템 접근

AI가 로컬 파일을 읽고, 쓰고, 검색할 수 있게 한다. @modelcontextprotocol/server-filesystem 패키지 사용.

GitHub 통합

리포지토리 관리, 이슈 생성/조회, PR 관리, 파일 푸시 등. @modelcontextprotocol/server-github 사용.

데이터베이스 쿼리

SQLite, PostgreSQL 등 데이터베이스의 스키마 조회 및 쿼리 실행. 읽기 전용 또는 쓰기 가능.

웹 검색 및 콘텐츠 페치

웹 페이지 콘텐츠를 가져와 LLM 컨텍스트로 제공.

사내 시스템 연동

위키, Jira, Confluence, Slack 등 사내 도구를 MCP 서버로 래핑하여 AI 에이전트가 활용.


생태계와 현황

  • 공식 레퍼런스 서버: modelcontextprotocol/servers 저장소 (약 88,000 스타)에 파일시스템, Git, 메모리, 순차적 사고 등 참조 구현 제공
  • MCP 레지스트리: registry.modelcontextprotocol.io에서 공개 서버 검색 및 설치 가능
  • 지원 클라이언트: Claude Desktop, Claude Code, Visual Studio, VS Code, Cursor, Windsurf, Zed, GitHub Copilot 등
  • Hugging Face MCP 코스: Hugging Face와 Anthropic 협력으로 무료 MCP 교육 과정 제공
  • Linux Foundation 참여: MCP는 오픈 표준으로 Linux Foundation과 협력 중

간단한 서버 예제 (Python)

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("weather")

@mcp.tool()
async def get_forecast(city: str) -> str:
    """Get weather forecast for a city."""
    return f"Weather in {city}: Sunny, 72°F"

if __name__ == "__main__":
    mcp.run(transport="stdio")

참고 자료

둘러보기

더 찾아볼 만한 주제

    전체 문서 보기