Sign in to save your progressYou can keep reading without an account, but completed lessons won't be saved.
Sign in

MCP(Model Context Protocol)는 클라이언트와 서버 간의 통신을 처리하기 위해 JSON 메시지를 사용합니다. 이러한 메시지 유형을 이해하는 것은 MCP로 작업할 때, 특히 streamable HTTP transport와 같은 다양한 전송 방식을 다룰 때 매우 중요합니다.

메시지 형식

모든 MCP 통신은 JSON 메시지를 통해 이루어집니다. 각 메시지 유형은 도구를 호출하거나, 사용 가능한 리소스를 나열하거나, 시스템 이벤트에 대한 알림을 보내는 등 특정한 목적을 수행합니다.

다음은 일반적인 예시입니다: Claude가 MCP 서버가 제공하는 도구를 호출해야 할 때, 클라이언트는 "Call Tool Request" 메시지를 보냅니다. 서버는 이 요청을 처리하고, 도구를 실행한 다음, 출력을 포함한 "Call Tool Result" 메시지로 응답합니다.

MCP 명세

전체 메시지 유형 목록은 GitHub의 공식 MCP 명세 저장소에 정의되어 있습니다. 이 명세는 다양한 SDK 저장소(Python 또는 TypeScript SDK 등)와는 별개이며, MCP가 어떻게 작동해야 하는지에 대한 권위 있는 출처로 사용됩니다.

메시지 유형은 편의를 위해 TypeScript로 작성되어 있습니다 - TypeScript 코드로 실행되기 때문이 아니라, TypeScript가 데이터 구조와 유형을 명확하게 설명하는 방법을 제공하기 때문입니다.

메시지 범주

MCP 메시지는 두 가지 주요 범주로 나뉩니다:

요청-결과 메시지

이러한 메시지는 항상 쌍으로 제공됩니다. 요청을 보내고 결과를 받을 것으로 예상합니다:

  • Call Tool RequestCall Tool Result
  • List Prompts Request → List Prompts Result
  • Read Resource Request → Read Resource Result
  • Initialize Request → Initialize Result

알림 메시지

이는 이벤트에 대해 알려주지만 응답을 요구하지 않는 단방향 메시지입니다:

  • Progress Notification - 장시간 실행되는 작업에 대한 업데이트
  • Logging Message Notification - 시스템 로그 메시지
  • Tool List Changed Notification - 사용 가능한 도구가 변경될 때
  • Resource Updated Notification - 리소스가 수정될 때

클라이언트 메시지 vs 서버 메시지

MCP 명세는 누가 메시지를 보내는지에 따라 메시지를 구성합니다:

클라이언트 메시지에는 클라이언트가 서버로 보내는 요청(도구 호출 등)과 클라이언트가 보낼 수 있는 알림이 포함됩니다.

서버 메시지에는 서버가 클라이언트로 보내는 요청과 서버가 브로드캐스트하는 알림이 포함됩니다.

이것이 중요한 이유

서버가 클라이언트로 메시지를 보낼 수 있다는 점을 이해하는 것은 다양한 전송 방식으로 작업할 때 특히 중요합니다. streamable HTTP transport와 같은 일부 전송 방식은 어떤 방향으로 어떤 유형의 메시지가 흐를 수 있는지에 제한이 있습니다.

핵심은 MCP가 양방향 프로토콜로 설계되었다는 것입니다 - 클라이언트와 서버 모두 통신을 시작할 수 있습니다. 이는 특정 사용 사례에 맞는 올바른 전송 방식을 선택해야 할 때 매우 중요해집니다.