MCP가 세션을 버렸다
핸드셰이크·세션ID 제거 — 원격 MCP 서버가 평범한 HTTP 서비스가 된다
모델 컨텍스트 프로토콜(MCP)이 세션 개념을 버린다. 7월 28일 공개된 개정 명세에서 초기화 핸드셰이크와 세션 식별자가 사라지고, 요청 하나하나가 필요한 정보를 스스로 들고 다니는 구조로 바뀐다. 원격 MCP 서버가 상태를 들고 있지 않는 평범한 HTTP 서비스가 된다는 뜻이다.
무슨 일인가
MCP는 앤트로픽(Anthropic)이 2024년 말 공개한 뒤 AI 에이전트를 외부 도구·API·데이터에 연결하는 사실상의 표준으로 자리 잡았다. 150개가 넘는 조직이 이 위에서 무언가를 만들고 있고, 주요 클라우드 세 곳이 기본 지원한다.
문제는 운영이었다. 기존 명세에서는 클라이언트가 초기화 요청을 보내면 서버가 세션 식별자를 발급하고, 이후 모든 요청에 그 값이 따라붙었다. 서버가 한 대일 때는 아무 문제가 없다. 그러나 로드밸런서 뒤에 여러 대를 띄우는 순간 상황이 달라진다. 핸드셰이크를 처리한 인스턴스와 다음 요청을 받은 인스턴스가 다르면, 두 번째 인스턴스는 난생처음 보는 식별자를 받고 404를 돌려준다. 무엇이 잘못됐는지 알려 주는 메시지도 없다.
우회책은 있었다. 클라이언트를 같은 서버에 고정하는 방식, 세션을 아는 로드밸런서, 공용 세션 저장소, 배포 때마다 세션을 비워 내는 절차. 통합을 단순하게 만들자던 프로토콜이 어느새 인프라를 복잡하게 만드는 이유가 돼 있었다.
핵심 짚어보기
개정안은 세션 식별자 대신 매 요청에 프로토콜 버전·클라이언트 정체·기능 정보를 함께 실어 보낸다. 어느 인스턴스가 받아도 처리할 수 있다. 대가는 요청 크기가 조금 커진다는 점인데, 호출량이 많은 서비스라면 무시해도 될 수준인지 실제로 재 보는 편이 좋다.
라우팅 방식도 달라진다. 요청 헤더에 호출 종류와 대상 도구 이름이 실려, 게이트웨이가 본문을 뜯어보지 않고도 특정 도구만 호출량을 제한하거나 비용이 큰 호출만 별도 백엔드로 넘기는 정책을 인프라 계층에서 걸 수 있다.
여러 호출에 걸친 상태가 필요할 때는 서버가 참조용 식별자를 돌려주고 에이전트가 다음 호출에 인자로 되돌려준다. 상태가 서버 메모리 속에 숨는 대신 요청 안에 드러나므로 로그로 감사할 수 있고, 새벽에 장애가 났을 때 실제로 디버깅이 된다. 자체 로깅 채널을 오픈텔레메트리(OpenTelemetry)로 대체한 것도 같은 맥락이다.
1인기업 실전 적용 포인트
- 자체 MCP 서버를 운영 중이라면 세션 저장용 캐시 서버나 고정 세션 설정을 걷어낼 수 있는지 먼저 확인하라. 서버 한 대 값이 매달 굳는다.
- 노트북에서만 도는 로컬 MCP 도구는 이번 변화의 영향이 거의 없다. 급히 손댈 이유가 없으니 우선순위에서 내려도 된다.
- 도구별 호출량 제한을 게이트웨이에 걸어 두면 에이전트가 폭주해도 청구서가 터지지 않는다. 비용 상한을 코드가 아니라 인프라에 두는 방식이다.
- 오픈텔레메트리 표준화에 맞춰 도구 호출 로그를 한곳에 모아 두면, 어떤 자동화가 돈값을 하는지 월말에 숫자로 확인할 수 있다.
전망 / 주의점
명세가 바뀌었다고 기존 서버가 당장 멈추지는 않는다. 다만 SDK와 호스팅 서비스가 새 방식으로 정렬되면 옛 구조를 유지하는 쪽이 점점 비싸진다. 에이전트 인프라 비용은 모델 요금이 아니라 이런 운영 복잡도에서 새는 경우가 많다. 지금 손댈 것은 새 기능이 아니라, 없어도 되는데 계속 붙어 있던 세션 관리 장치들이다.
출처: 뉴렐릭 블로그 (https://newrelic.com/blog/ai/mcp-is-going-stateless)