WIPIVERSE

Manassas

개요

MCP(Model Context Protocol)는 Anthropic이 주도하여 개발한 오픈 프로토콜로, LLM 애플리케이션(호스트)이 외부 데이터 소스와 도구에 안전하고 표준화된 방식으로 연결될 수 있도록 설계되었습니다. JSON-RPC 2.0을 기반으로 하며, 클라이언트-서버 아키텍처를 따릅니다.


1. MCP Server

MCP Server는 AI 애플리케이션(호스트)에 컨텍스트(맥락)를 제공하는 프로그램입니다. 서버는 특정 기능에 집중하며, 독립적으로 실행됩니다.

서버가 제공하는 핵심 기능 (3대 프리미티브)

프리미티브 설명 예시
Tools (도구) LLM이 능동적으로 호출할 수 있는 실행 가능한 함수. 쓰기 작업 가능. 파일 검색, DB 쿼리, API 호출, 이메일 전송
Resources (리소스) 읽기 전용 데이터 소스. AI 애플리케이션이 컨텍스트로 활용. 문서 내용, DB 스키마, API 문서
Prompts (프롬프트) 재사용 가능한 템플릿. 특정 도구/리소스 사용법을 안내. "휴가 계획 세우기", "회의 요약하기"

서버의 주요 프로토콜 메서드

메서드 목적
tools/list 사용 가능한 도구 목록 조회
tools/call 특정 도구 실행
resources/list 리소스 목록 조회
resources/read 리소스 내용 읽기
prompts/list 프롬프트 목록 조회
prompts/get 특정 프롬프트 내용 조회

서버 구현 예시 (Python - FastMCP)

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("weather")

@mcp.tool()
async def get_forecast(latitude: float, longitude: float) -> str:
    """Get weather forecast for a location."""
    # ... API 호출 및 결과 반환

@mcp.resource("greeting://{name}")
def greeting(name: str) -> str:
    return f"Hello, {name}!"

서버 실행 방식

  • STDIO Transport: 로컬 프로세스 간 통신 (표준 입출력 사용)
  • Streamable HTTP Transport: 원격 서버 통신 (HTTP POST + SSE)

2. MCP Client

MCP Client는 호스트 애플리케이션 내에서 각 MCP Server와 1:1 연결을 유지하는 컴포넌트입니다. 호스트(예: Claude Desktop, VS Code)는 여러 개의 클라이언트를 생성하여 각각 다른 서버와 통신합니다.

클라이언트가 서버에 제공하는 기능

기능 설명 예시
Elicitation (정보 요청) 서버가 사용자에게 추가 정보를 요청 "좌석 선호도를 알려주세요"
Roots (루트) 서버가 접근할 파일 시스템 범위 지정 작업 디렉토리 경로 전달
Sampling (샘플링) 서버가 클라이언트의 LLM을 통해 AI 응답 생성 요청 "이 항공편 중 최적을 골라줘"

클라이언트 구현 예시 (Python)

import asyncio
from mcp import Client
from server import mcp  # 위에서 만든 서버

async def main():
    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())

3. 전체 아키텍처

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

연결 수명주기

  1. 초기화(Initialization): 클라이언트가 initialize 요청 → 서버가 프로토콜 버전과 capabilities 응답
  2. 메시지 교환: 요청-응답(Request-Response) 또는 단방향 알림(Notification)
  3. 종료(Termination): 연결 종료

4. 주요 SDK 및 언어 지원

언어 SDK 저장소
Python python-sdk
TypeScript typescript-sdk
Java java-sdk
Kotlin kotlin-sdk
Go go-sdk
Rust rust-sdk
C# csharp-sdk
Ruby ruby-sdk

5. 참고 서버 (Reference Implementations)

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

  • Filesystem — 안전한 파일 작업
  • Git — Git 저장소 읽기/검색/조작
  • Memory — 지식 그래프 기반 메모리 시스템
  • Fetch — 웹 콘텐츠 가져오기
  • Time — 시간 및 시간대 변환
  • Sequential Thinking — 단계적 사고 프로세스

6. 핵심 설계 원칙

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

요약

  • MCP Server = AI 애플리케이션에 도구(Tools), 데이터(Resources), 템플릿(Prompts)을 제공하는 프로그램
  • MCP Client = 호스트 내에서 각 서버와 1:1 연결을 관리하는 프로토콜 컴포넌트
  • MCP Host = 사용자가 직접 상호작용하는 AI 애플리케이션 (Claude Desktop, IDE 등)
  • MCP는 JSON-RPC 2.0 기반의 상태 저장(stateful) 프로토콜로, capability negotiation을 통해 기능을 협상합니다.
둘러보기

더 찾아볼 만한 주제

    전체 문서 보기