Model Context Protocol 소개

Model Context Protocol (MCP) 심화 학습

프로토콜 사양40분 읽기

프로토콜 개요

Model Context Protocol (MCP)은 애플리케이션이 대규모 언어 모델(LLM)에 컨텍스트를 제공하는 방법을 표준화하는 개방형 표준입니다. MCP를 AI 애플리케이션용 USB-C 포트처럼 생각해보세요—AI 모델을 다양한 데이터 소스와 도구에 연결하는 표준화된 방법을 제공합니다.

주요 이점

  • 표준화된 통신 인터페이스
  • 안전한 데이터 전송
  • 확장 가능한 아키텍처 설계
  • 크로스 플랫폼 호환성
  • 실시간 컨텍스트 동기화
  • 플러그인 기반 확장 지원

사용 사례

  • 코드 분석 및 이해
  • 문서 생성 및 유지보수
  • 프로젝트 관리 통합
  • 데이터베이스 쿼리 및 작업
  • API 서비스 통합
  • 워크플로우 자동화

아키텍처 설계

MCP 프로토콜 계층 아키텍처 및 구성 요소 개요

MCP 호스트

AI 애플리케이션

하나 또는 여러 MCP 클라이언트를 조정하고 관리하는 AI 애플리케이션

주요 책임:

  • 여러 MCP 클라이언트 조정
  • AI 모델 상호작용 관리
  • 서버 응답 처리
  • 세션 상태 처리

MCP 클라이언트

연결 관리자

MCP 서버에 대한 연결을 유지하고 MCP 호스트가 사용할 수 있도록 MCP 서버에서 컨텍스트를 가져오는 구성 요소

주요 책임:

  • 일대일 서버 연결 유지
  • 컨텍스트 쿼리 전송
  • 서버 응답 처리
  • 연결 생명주기 관리

MCP 서버

컨텍스트 제공자

도구, 리소스 및 프롬프트를 통해 MCP 클라이언트에 컨텍스트를 제공하는 프로그램

주요 책임:

  • 클라이언트 연결 수락
  • 컨텍스트 요청 처리
  • 구조화된 데이터 반환
  • 리소스 상태 유지

전송 계층

통신 채널

클라이언트와 서버 간의 통신 채널 및 인증 관리

주요 책임:

  • 로컬 프로세스용 STDIO 전송
  • 원격 서버용 HTTP 전송
  • 메시지 프레이밍 및 직렬화
  • 인증 및 보안

데이터 계층

프로토콜 정의

클라이언트-서버 통신을 위한 JSON-RPC 기반 프로토콜 정의

주요 책임:

  • JSON-RPC 2.0 메시지 형식
  • 생명주기 관리
  • 프리미티브 정의 (도구, 리소스, 프롬프트)
  • 알림 시스템

MCP 프리미티브

클라이언트와 서버가 서로에게 제공할 수 있는 것을 정의하는 핵심 프리미티브

도구

AI 애플리케이션이 작업을 수행하기 위해 호출할 수 있는 실행 가능한 함수

예시:

  • 파일 작업 (읽기, 쓰기, 생성)
  • 외부 서비스에 대한 API 호출
  • 데이터베이스 쿼리 및 작업
  • 코드 분석 및 컴파일
  • 시스템 명령 실행

사용 가능한 메서드:

tools/listtools/call

리소스

AI 애플리케이션에 컨텍스트 정보를 제공하는 데이터 소스

예시:

  • 파일 콘텐츠 및 메타데이터
  • 데이터베이스 레코드 및 스키마
  • API 응답 및 문서
  • Git 저장소 정보
  • 구성 파일

사용 가능한 메서드:

resources/listresources/read

프롬프트

언어 모델과의 상호작용을 구조화하는 데 도움이 되는 재사용 가능한 템플릿

예시:

  • 특정 작업을 위한 시스템 프롬프트
  • 학습을 위한 Few-shot 예제
  • 코드 리뷰 템플릿
  • 문서 생성 프롬프트
  • 분석 및 요약 템플릿

사용 가능한 메서드:

prompts/listprompts/get

전송 계층

클라이언트와 서버 간의 데이터 교환을 가능하게 하는 통신 메커니즘

STDIO 전송

직접 프로세스 통신을 위해 표준 입출력 스트림 사용

사용 사례:

  • 동일한 머신의 로컬 MCP 서버
  • 직접 프로세스 통신
  • 네트워크 오버헤드 없는 최적 성능
  • 간단한 설정 및 구성

예시:

npx @modelcontextprotocol/server-filesystem /path/to/files

STDIO를 통해 파일시스템 서버 시작

HTTP 전송

선택적 Server-Sent Events와 함께 클라이언트-서버 메시지에 HTTP POST 사용

사용 사례:

  • 원격 MCP 서버
  • 클라우드 기반 서비스
  • Bearer 토큰을 사용한 인증
  • 확장 가능한 서버 배포

예시:

https://api.example.com/mcp

HTTP를 통해 원격 MCP 서버에 연결

메시지 유형

MCP 프로토콜에서 지원하는 JSON-RPC 2.0 기반 메시지 유형

initialize

연결을 초기화하고 프로토콜 버전 및 기능 협상

클라이언트 → 서버

메시지 예시:

{
  "method": "initialize",
  "params": {
    "protocolVersion": "2025-06-18",
    "capabilities": {
      "tools": {},
      "resources": {}
    },
    "clientInfo": {
      "name": "gemini-cli",
      "version": "1.0.0"
    }
  }
}

tools/list

서버에서 사용 가능한 도구 발견

클라이언트 → 서버

메시지 예시:

{
  "method": "tools/list",
  "params": {}
}

tools/call

제공된 인수로 특정 도구 실행

클라이언트 → 서버

메시지 예시:

{
  "method": "tools/call",
  "params": {
    "name": "com.example.weather/current",
    "arguments": {
      "location": "San Francisco",
      "units": "imperial"
    }
  }
}

resources/list

사용 가능한 리소스 목록 가져오기

클라이언트 → 서버

메시지 예시:

{
  "method": "resources/list",
  "params": {}
}

resources/read

특정 리소스 콘텐츠 읽기

클라이언트 → 서버

메시지 예시:

{
  "method": "resources/read",
  "params": {
    "uri": "file:///path/to/file.ts"
  }
}

prompts/list

사용 가능한 프롬프트 템플릿 가져오기

클라이언트 → 서버

메시지 예시:

{
  "method": "prompts/list",
  "params": {}
}

notifications/tools/list_changed

사용 가능한 도구가 변경될 때 클라이언트에 알림

서버 → 클라이언트

메시지 예시:

{
  "method": "notifications/tools/list_changed"
}

도구 정의 예시

MCP 프로토콜에서 도구가 정의되는 방법의 예

날씨 도구 정의

이 예시는 적절한 입력 스키마 검증과 문서화를 포함한 날씨 도구가 어떻게 정의되는지 보여줍니다.

// MCP 工具定义示例
{
  "name": "com.example.weather/current",
  "title": "Get Current Weather",
  "description": "Get current weather information for a specified location",
  "inputSchema": {
    "type": "object",
    "properties": {
      "location": {
        "type": "string",
        "description": "The location to get weather for"
      },
      "units": {
        "type": "string",
        "enum": ["metric", "imperial"],
        "description": "Temperature units",
        "default": "metric"
      },
      "include_forecast": {
        "type": "boolean",
        "description": "Whether to include forecast data",
        "default": false
      }
    },
    "required": ["location"]
  }
}

주요 구성 요소:

  • name: 도구의 고유 식별자
  • title: 사람이 읽을 수 있는 표시 이름
  • description: 기능에 대한 자세한 설명
  • inputSchema: 입력 검증을 위한 JSON Schema

모범 사례:

  • 네임스페이스가 있는 도구 이름 사용 (예: com.example.weather/current)
  • 명확하고 설명적인 문서 제공
  • 포괄적인 입력 스키마 정의
  • 적절한 곳에 기본값 포함

통신 흐름

MCP 클라이언트와 서버 간의 완전한 통신 흐름

1

연결 초기화

클라이언트가 연결을 설정하고 서버와 기능을 협상

세부 단계:

  • 클라이언트가 프로토콜 버전과 함께 초기화 요청 전송
  • 서버가 지원되는 기능으로 응답
  • 양측이 통신 매개변수 협상
  • 합의된 프로토콜 버전으로 연결 설정
2

기능 발견

클라이언트가 사용 가능한 도구, 리소스 및 프롬프트 발견

세부 단계:

  • 사용 가능한 도구 목록 요청 (tools/list)
  • 사용 가능한 리소스 요청 (resources/list)
  • 사용 가능한 프롬프트 요청 (prompts/list)
  • 효율적인 액세스를 위해 기능 정보 캐시
3

컨텍스트 교환

클라이언트가 리소스에서 컨텍스트 데이터를 요청하고 수신

세부 단계:

  • 리소스 읽기 요청 전송 (resources/read)
  • 다양한 형식의 구조화된 데이터 수신
  • 필요에 따라 데이터 형식 변환 처리
  • 수신된 정보로 로컬 컨텍스트 업데이트
4

도구 실행

클라이언트가 작업을 수행하기 위해 서버 도구를 호출

세부 단계:

  • 도구 호출 요청 구성 (tools/call)
  • 적절한 검증과 함께 필수 매개변수 전달
  • 서버에서 실행 결과 대기
  • 반환된 데이터 처리 및 오류 처리
5

실시간 업데이트

알림을 통해 동기화 유지

세부 단계:

  • 리소스 변경 알림 수신
  • 도구 목록 업데이트를 동적으로 처리
  • 연결 중단을 우아하게 처리
  • 필요시 연결 재설정

보안 기능

MCP 프로토콜의 보안 메커니즘 및 보호 조치

인증

여러 인증 메커니즘 지원

지원되는 방법:

  • API 키 인증
  • OAuth 2.0 플로우
  • Bearer 토큰
  • 사용자 정의 인증 헤더

권한 부여

세밀한 권한 관리

지원되는 방법:

  • 리소스 수준 권한
  • 작업 유형 제한
  • 시간 기반 액세스 제어
  • 속도 제한 및 할당량

데이터 보호

엔드투엔드 데이터 보안

지원되는 방법:

  • TLS/SSL 전송 암호화
  • 메시지 콘텐츠 암호화
  • 민감한 데이터 마스킹
  • 보안 키 관리

감사 및 모니터링

포괄적인 작업 추적

지원되는 방법:

  • 요청/응답 로깅
  • 권한 확인 기록
  • 오류 및 예외 추적
  • 성능 메트릭 수집

시작하기

Gemini CLI와 함께 MCP 사용을 시작할 준비가 되셨나요? 이러한 리소스를 탐색해보세요