TECH 으로 돌아가기
TECH HACKER NEWS 오늘 7분 읽기 24 READS

MCP가 상태 없는 프로토콜로: 2026-07-28 명세가 바꾸는 것들

MCP가 상태 없는 프로토콜로: 2026-07-28 명세가 바꾸는 것들
SOURCE IMAGE · HACKER NEWS

모델 컨텍스트 프로토콜(MCP)의 새 명세 2026-07-28이 공개됐다. 이번 개정의 핵심은 프로토콜 코어를 '상태 유지(stateful) 양방향' 구조에서 '상태 없는(stateless) 요청/응답' 구조로 전환한 점이다. 지난해 11월 릴리스 이후 MCP는 에이전트 워크플로의 데이터·상호작용 기반으로 빠르게 자리 잡았고, Tier 1 SDK 기준 월 다운로드가 5억 건에 육박한다. 특히 타입스크립트와 파이썬 SDK는 누적 다운로드 10억 건을 각각 넘어섰다. 그만큼 서버를 안정적이고 확장성 있게 운영하려는 요구가 커졌고, 상태 없는 코어는 개발자들이 가장 많이 요청한 기능 중 하나였다.

세션이 사라진다는 것의 의미

가장 눈에 띄는 변화는 initialize/initialized 교환과 Mcp-Session-Id 헤더의 공식 폐기다(SEP-2575, SEP-2567). 기존 MCP는 연결 초기에 클라이언트와 서버가 능력(capabilities)을 협상하고, 세션 식별자로 이후 요청들을 하나의 맥락에 묶었다. 새 명세에서는 모든 요청이 독립적으로 오간다. 각 요청이 프로토콜 버전, 클라이언트 신원, 클라이언트 능력을 _meta에 담아 스스로 전달하기 때문이다. 서버 능력을 먼저 알고 싶다면 새로 추가된 server/discover RPC를 호출하면 되지만, 이는 필수가 아니다.

실무적으로 이 변화가 중요한 이유는 인프라 구성이 단순해지기 때문이다. 세션이 없으니 어떤 요청이든 평범한 라운드로빈 로드밸런서 뒤의 아무 서버 인스턴스에나 도달할 수 있고, 인스턴스 간 공유 스토리지가 필요 없다. 세션 어피니티(sticky session)를 맞추거나 세션 상태를 외부 저장소에 복제하던 부담이 사라진다는 뜻이다. 이는 무상태 웹 서비스를 다뤄본 팀이라면 익숙한 확장 모델이며, MCP 서버를 컨테이너 오케스트레이션 환경에서 수평 확장하기가 훨씬 수월해진다.

다만 프로토콜이 상태를 버렸다고 해서 애플리케이션까지 무상태가 되어야 하는 것은 아니다. 호출 간에 상태를 이어가야 한다면, 도구가 명시적인 핸들(handle)을 발급하고 모델이 이를 인자로 다시 넘기도록 설계하라는 것이 명세의 권고다. 전송 계층에 숨겨진 세션 상태보다 이 방식이 더 낫다고 본 이유는, 모델이 핸들을 직접 볼 수 있어 여러 도구 사이에서 명시적으로 엮을 수 있기 때문이다. 상태 관리 책임을 전송 계층에서 애플리케이션 설계로 옮긴 셈이다.

무상태에서 대화형 흐름을 살리는 MRTR

상태를 버리면 서버가 호출 도중 사용자에게 무언가를 요청하던 기존 패턴이 문제가 된다. 확인을 받거나 누락된 파라미터를 물어보려면 예전에는 스트림을 열어둔 채 서버가 elicitation/create, sampling/createMessage, roots/list 같은 요청을 보내야 했다. 새 명세는 이를 Multi Round-Trip Requests(MRTR, SEP-2322)로 대체한다. 서버가 resultType을 "input_required"로 응답하며 필요한 요청들을 함께 돌려주면, 클라이언트가 답변을 inputResponses에 담아 원래 호출을 다시 시도하는 방식이다. 열린 스트림 없이도 중간 사용자 개입을 왕복 요청으로 처리할 수 있게 됐다.

라우팅과 캐싱을 겨냥한 변화도 실무에 직접 와닿는다. Streamable HTTP 요청은 이제 Mcp-Method와 Mcp-Name 헤더를 반드시 포함해야 한다(SEP-2243). 게이트웨이, 레이트 리미터, WAF가 JSON 본문을 파싱하지 않고도 이 헤더만으로 라우팅과 계측을 할 수 있다. 또한 tools/list, prompts/list, resources/list, resources/read 응답에는 ttlMs와 cacheScope가 실린다(SEP-2549). 클라이언트가 응답별로 캐싱 전략을 판단해 불필요한 재조회를 줄일 수 있게 하려는 것이다.

인증 강화와 이관 일정

지난 1년간 구현자들과 논의해 보니 통합 시간의 대부분이 인증(authorization)에 쓰였다고 한다. 이번 개정은 MCP의 인증·보안 태세를 계속 다듬었다. 구조 재편도 있다. Tasks는 실험적 코어에서 io.modelcontextprotocol/tasks 확장으로 빠져나가 폴링 기반 tasks/get과 새 tasks/update를 갖게 됐고(SEP-2663), 변경 알림은 기존 HTTP GET 엔드포인트에서 클라이언트가 알림 유형별로 옵트인하는 단일 subscriptions/listen 스트림으로 이동했다. 명세는 확장(extensions)을 정식 프레임워크로 다루기 시작했다.

Roots, Sampling, Logging은 폐기 예정으로 표시됐다(SEP-2577). 계속 동작하며 최소 12개월은 유지되지만 새 구현에서는 채택하지 않는 것이 좋다. 레거시 HTTP+SSE 전송 역시 공식적으로 폐기 대상이며 1년의 이관 기간이 주어진다. 타입스크립트·파이썬·Go·C#의 네 Tier 1 SDK는 오늘부터 2026-07-28을 지원하고, Rust SDK는 베타로 새 명세를 지원한다. 세션 식별자에 의존하던 개발자에게는 마이그레이션 비용이 발생하는데, 초기 테스트 피드백을 반영해 이 과정을 한결 수월하게 만들었다는 설명이다. 정리하자면 이번 릴리스는 MCP 서버를 일반적인 무상태 웹 서비스처럼 다루게 해주는 대신, 상태 유지와 대화형 흐름의 책임을 애플리케이션 설계로 옮긴다. 세션에 의존해 온 팀이라면 폐기 유예 기간 안에 핸들 기반 설계와 MRTR로의 전환을 미리 검토해 둘 필요가 있다.

SOURCE · HACKER NEWS
원문 전체 보기 → https://blog.modelcontextprotocol.io/posts/2026-07-28/
SHARE
처리 중...