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

Streamable HTTP 전송은 MCP 클라이언트가 HTTP 연결을 통해 원격으로 호스팅되는 서버에 연결할 수 있게 해줍니다. 클라이언트와 서버가 동일한 머신에 있어야 하는 표준 I/O 전송과 달리, 이 전송 방식은 누구나 접근할 수 있는 공개 MCP 서버의 가능성을 열어줍니다.

하지만 중요한 주의사항이 있습니다: 일부 구성 설정이 MCP 서버의 기능을 크게 제한할 수 있습니다. 애플리케이션이 로컬에서 표준 I/O 전송으로는 완벽하게 작동하지만 HTTP 전송으로 배포했을 때 작동이 중단된다면, 이것이 원인일 가능성이 높습니다.

중요한 구성 설정

두 가지 핵심 설정이 streamable HTTP 전송의 동작 방식을 제어합니다:

  • stateless_http - 연결 상태 관리를 제어합니다
  • json_response - 응답 형식 처리를 제어합니다

기본적으로 두 설정 모두 false이지만, 특정 배포 시나리오에서는 이를 true로 설정해야 할 수도 있습니다. 이 설정들이 활성화되면 진행 알림, 로깅, 서버 시작 요청과 같은 핵심 기능이 중단될 수 있습니다.

HTTP 통신의 과제

이러한 제한이 존재하는 이유를 이해하기 위해서는 HTTP 통신이 어떻게 작동하는지 살펴볼 필요가 있습니다. 표준 HTTP에서는:

  • 클라이언트는 서버에 요청을 쉽게 시작할 수 있습니다 (서버는 알려진 URL을 가지고 있습니다)
  • 서버는 이러한 요청에 쉽게 응답할 수 있습니다
  • 서버는 클라이언트에 요청을 쉽게 시작할 수 없습니다 (클라이언트는 알려진 URL을 가지고 있지 않습니다)
  • 클라이언트에서 서버로 돌아가는 응답 패턴은 문제가 됩니다

영향을 받는 MCP 메시지 유형

이러한 HTTP 제한은 특정 MCP 통신 패턴에 영향을 미칩니다. 다음 메시지 유형들은 일반 HTTP로 구현하기 어렵습니다:

  • 서버 시작 요청: Create Message 요청, List Roots 요청
  • 알림: 진행 알림, 로깅 알림, 초기화 알림, 취소 알림

이것들이 바로 제한적인 HTTP 설정을 활성화할 때 중단되는 기능들입니다. 진행 표시줄이 사라지고, 로깅이 작동을 멈추며, 서버 시작 샘플링 요청이 실패합니다.

Streamable HTTP 솔루션

Streamable HTTP 전송은 HTTP의 제한을 우회하는 영리한 솔루션을 제공하지만, 이는 트레이드오프를 수반합니다. stateless_http=True 또는 json_response=True를 사용해야 하는 경우, 이는 본질적으로 전송 방식이 HTTP의 제약을 우회하는 대신 그 제약 내에서 작동하도록 지시하는 것입니다.

이러한 제한을 이해하면 다음과 같은 사항에 대해 정보에 기반한 결정을 내릴 수 있습니다:

  • 다양한 배포 시나리오에 어떤 전송 방식을 사용할지
  • HTTP 제약을 우아하게 처리하도록 MCP 서버를 설계하는 방법
  • 원격 호스팅의 이점을 위해 기능 저하를 받아들여야 할 때

핵심은 이러한 제한이 존재한다는 것을 알고 그에 맞게 MCP 서버 아키텍처를 계획하는 것입니다. 애플리케이션이 서버 시작 요청이나 실시간 알림에 크게 의존한다면, 전송 방식 선택을 재고하거나 대체 통신 패턴을 구현해야 할 수도 있습니다.