기본 프로토콜

기본 프로토콜

Protocol Revision: 2024-11-05

MCP 클라이언트와 서버 간 모든 메시지는 JSON-RPC 2.0 사양을 MUST 준수해야 합니다. 이 프로토콜은 세 가지 기본 메시지 타입을 정의합니다:

타입설명요구사항
Requests작업을 시작하기 위해 보내는 메시지고유 ID와 method 이름을 포함해야 함
Responses요청에 대한 응답 메시지요청과 동일한 ID를 포함해야 함
Notifications응답이 없는 단방향 메시지ID를 포함하면 안 됨

Responses성공 결과(successful results) 또는 **오류(errors)**로 다시 분류됩니다. 결과는 어떤 JSON 객체 구조든 사용할 수 있지만, 오류는 최소한 오류 코드와 메시지를 포함해야 합니다.

프로토콜 레이어

Model Context Protocol은 함께 동작하는 여러 핵심 구성 요소로 이루어집니다:

  • 기본 프로토콜(Base Protocol): 핵심 JSON-RPC 메시지 타입
  • 라이프사이클 관리(Lifecycle Management): 연결 초기화, capability 협상, 세션 제어
  • 서버 기능(Server Features): 서버가 노출하는 리소스/프롬프트/도구
  • 클라이언트 기능(Client Features): 클라이언트가 제공하는 샘플링 및 루트 디렉터리 목록
  • 유틸리티(Utilities): 로깅, 인자 자동완성 같은 횡단 관심사

모든 구현은 기본 프로토콜과 라이프사이클 관리 구성 요소를 MUST 지원해야 합니다. 그 외 구성 요소는 애플리케이션의 요구에 따라 MAY 구현할 수 있습니다.

이 프로토콜 레이어는 관심사를 명확히 분리하면서도 클라이언트와 서버 간 풍부한 상호작용을 가능하게 합니다. 모듈형 설계 덕분에 구현체는 필요한 기능만 정확히 선택해 지원할 수 있습니다.

각 구성 요소의 자세한 내용은 다음 문서를 참고하세요:

인증

인증(authentication)과 인가(authorization)는 현재 MCP 코어 사양에 포함되어 있지 않지만, 향후 도입 방안을 검토하고 있습니다. 프로토콜의 미래를 함께 만들기 위해 GitHub Discussions에 참여해 주세요.

클라이언트와 서버는 자체적인 커스텀 인증/인가 전략을 MAY 협상할 수 있습니다.

스키마

프로토콜의 전체 사양은 TypeScript 스키마로 정의됩니다. 이는 모든 프로토콜 메시지와 구조에 대한 단일 진실 공급원(source of truth)입니다.

또한 TypeScript 소스 오브 트루스에서 자동 생성되는 JSON Schema도 제공되며, 여러 자동화 도구에서 사용할 수 있습니다.