WIPIVERSE

버나드 지역

📌 MCP(Model Context Protocol)란?

MCP는 Anthropic이 2024년 11월에 공개한 오픈소스 표준 프로토콜로, AI 애플리케이션(LLM)이 외부 시스템(데이터베이스, 파일 시스템, API 등)과 표준화된 방식으로 통신할 수 있게 해줍니다.

비유: MCP는 "AI를 위한 USB-C 포트"와 같습니다. USB-C 하나로 다양한 주변기기를 연결하듯, MCP 하나로 모든 AI 도구를 표준 방식으로 연결할 수 있습니다.

왜 MCP가 필요한가? (N×M 문제 해결)

MCP 이전에는 각 AI 서비스(Claude, GPT, Cursor 등)마다 외부 도구를 연결하는 방식이 제각각이었습니다. 예를 들어:

  • Claude용 DB 플러그인, GPT용 DB 플러그인을 각각 개발해야 했음
  • AI 서비스를 바꾸면 연동 코드를 전면 재작성해야 했음

MCP 도입 후: 하나의 MCP 서버만 만들면 MCP를 지원하는 모든 AI 호스트에서 즉시 사용 가능 → N×M 문제가 N+M으로 해결됩니다.


🏗️ MCP 아키텍처: 3계층 구조

MCP는 Host - Client - Server의 3계층 구조로 이루어집니다.

┌─────────────────────────────────────────────────────┐
│                    MCP Host                          │
│   (Claude Desktop, VS Code, Cursor, Claude Code)    │
│                                                     │
│   ┌──────────────┐     ┌──────────────┐             │
│   │ MCP Client #1 │     │ MCP Client #2 │            │
│   └──────┬───────┘     └──────┬───────┘             │
└──────────┼─────────────────────┼─────────────────────┘
           │ 1:1 연결            │ 1:1 연결
           ▼                     ▼
   ┌──────────────┐     ┌──────────────┐
   │ MCP Server A  │     │ MCP Server B  │
   │ (파일 시스템)   │     │ (GitHub)      │
   └──────────────┘     └──────────────┘
           │                     │
           ▼                     ▼
   ┌──────────────┐     ┌──────────────┐
   │  로컬 파일    │     │  GitHub API   │
   └──────────────┘     └──────────────┘

🔍 각 구성 요소 상세 설명

1️⃣ MCP Host (호스트)

항목 설명
정의 사용자가 직접 상호작용하는 AI 애플리케이션
역할 여러 MCP Client를 조정/관리하는 오케스트레이터
예시 Claude Desktop, Claude Code, VS Code(Copilot), Cursor, Amazon Q Developer, Zed
  • Host는 사용자의 입력을 받아 MCP Client를 구동하고 MCP Server와 연결합니다.
  • 하나의 Host는 여러 개의 MCP Client를 동시에 가질 수 있습니다.

2️⃣ MCP Client (클라이언트)

항목 설명
정의 Host 내부에서 MCP Server와 1:1 연결을 유지하는 컴포넌트
역할 JSON-RPC 2.0 메시지를 생성/해석하여 Server와 통신
특징 Host 내부에 내장되어 있으며, Server마다 별도의 Client가 생성됨

MCP Client의 주요 기능:

  • Server와의 연결 수립 및 세션 관리 (초기화, 기능 협상, 종료)
  • Server가 제공하는 도구(Tool) 목록 조회 (tools/list)
  • Server에 도구 실행 요청 (tools/call)
  • Server의 응답을 LLM(모델)에 전달

⚠️ 혼동 주의: MCP Client는 "요청만 하는 존재"가 아닙니다. Server가 Client에게 Sampling(LLM 호출 요청)이나 로깅을 요청할 수도 있어 양방향 통신이 가능합니다.

3️⃣ MCP Server (서버)

항목 설명
정의 MCP Client에게 컨텍스트(데이터, 도구, 프롬프트)를 제공하는 프로그램
역할 실제 데이터 소스(파일, DB, API)에 접근하여 기능 노출
실행 위치 로컬(같은 머신) 또는 원격(클라우드) 모두 가능

MCP Server가 노출하는 3가지 핵심 기능:

기능 설명 제어 주체 예시
Tools (도구) 모델이 능동적으로 호출하는 실행 가능한 함수 모델 파일 읽기/쓰기, DB 쿼리, API 호출
Resources (리소스) 모델이 읽을 수 있는 데이터 (읽기 전용) 애플리케이션 파일 내용, DB 스키마, 문서
Prompts (프롬프트) 재사용 가능한 프롬프트 템플릿 사용자 코드 리뷰 템플릿, 회의 요약 템플릿

🔄 MCP 통신 방식

JSON-RPC 2.0 기반

MCP의 모든 통신은 JSON-RPC 2.0 형식을 따릅니다.

요청 예시 (Client → Server):

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/list"
}

응답 예시 (Server → Client):

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "tools": [
      {
        "name": "get_weather",
        "description": "특정 도시의 현재 날씨를 조회합니다",
        "inputSchema": {
          "type": "object",
          "properties": {
            "city": { "type": "string", "description": "도시 이름" }
          },
          "required": ["city"]
        }
      }
    ]
  }
}

도구 실행 요청:

{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "get_weather",
    "arguments": { "city": "Seoul" }
  }
}

전송 계층 (Transport Layer)

방식 설명 사용 환경
STDIO 표준 입출력으로 JSON-RPC 메시지 교환 로컬 프로세스 간 통신
Streamable HTTP 단일 HTTP 엔드포인트로 양방향 통신 원격 서버 (권장)

🎯 전체 동작 흐름

1. 사용자: "서울 날씨 알려줘"
       ↓
2. Host (Claude Desktop)가 질문을 LLM에 전달
       ↓
3. LLM이 사용 가능한 Tool 목록 확인 (tools/list)
       ↓
4. LLM이 "get_weather" 도구가 필요하다고 판단
       ↓
5. MCP Client가 Server에 tools/call 요청 전송
       ↓
6. MCP Server가 실제 날씨 API 호출 후 결과 반환
       ↓
7. LLM이 결과를 바탕으로 최종 응답 생성
       ↓
8. 사용자: "서울의 현재 날씨는 22°C, 맑음입니다."

📊 핵심 요약

구성 요소 역할 예시
MCP Host 사용자와 상호작용하는 AI 앱 전체 Claude Desktop, VS Code
MCP Client Host 내부에서 Server와 1:1 통신 담당 Host에 내장된 통신 모듈
MCP Server 실제 데이터/기능을 표준 방식으로 노출 파일시스템 서버, DB 서버

MCP의 핵심 가치:

  • ✅ 표준화: 한 번 만든 서버를 모든 AI 도구에서 재사용
  • ✅ 확장성: 로컬/원격 모두 지원
  • ✅ 보안: OAuth 2.1 기반 인증, 최소 권한 원칙
  • ✅ 양방향 통신: Server도 Client에게 LLM 호출 요청 가능 (Sampling)

💡 참고 자료: MCP 공식 문서 | MCP Python SDK | MCP TypeScript SDK

둘러보기

더 찾아볼 만한 주제

    전체 문서 보기