Tech Signal2026-07-29

MCP가 세션 핸드셰이크를 버렸다: 월 5억 다운로드 프로토콜이 상태를 떼고 서버리스로 올라간다

어제 나온 MCP 2026-07-28 규격은 프로토콜에서 세션을 통째로 걷어냈다. 에이전트 서버를 Cloudflare Workers나 Netlify 같은 서버리스에 그냥 얹을 수 있게 됐다는 뜻이다.

어제 MCP의 새 규격 2026-07-28이 나왔다. 지난 1년 반 동안 에이전트가 도구와 데이터에 붙는 사실상의 표준이 된 프로토콜이고, Tier 1 SDK 다운로드가 월 5억 건에 육박한다. TypeScript와 Python SDK는 각각 누적 10억 건을 넘겼다. 이번 버전의 핵심은 하나다. 상태를 유지하던(stateful) 양방향 프로토콜을 무상태(stateless) 요청/응답으로 갈아엎었다.

구체적으로 initialize/initialized 핸드셰이크와 Mcp-Session-Id 헤더를 정식으로 폐기했다. 예전엔 클라이언트가 서버에 처음 붙을 때 악수를 나누고 세션을 열었다. 이 세션이 클라이언트를 특정 서버 인스턴스에 못박았다. 이제는 요청 하나하나가 자기 정보를 다 들고 다닌다. 프로토콜 버전, 클라이언트 신원, 기능 목록이 _meta에 실린다. 그래서 어떤 요청이든 라운드로빈 로드밸런서 뒤의 아무 인스턴스에나 떨어져도 된다. 공유 스토리지가 필요 없다.

한 줄 정리

항목 내용
규격 버전 2026-07-28 (전날인 어제 정식 릴리스)
SDK 다운로드 월 약 5억 건, TypeScript·Python 각 누적 10억 건 돌파
핵심 변화 상태 유지 양방향 → 무상태 요청/응답 (initialize·세션 ID 폐기)
라우팅 도구명이 Mcp-Method·Mcp-Name HTTP 헤더로 이동
폐기 유예 공식 정책으로 최소 12개월 확보

세션을 없앤 게 왜 혼자 만드는 사람에게 중요한가

지금까지 원격 MCP 서버를 제대로 굴리려면 성가신 짐이 따라왔다. 세션이 클라이언트를 한 인스턴스에 묶으니 트래픽이 늘면 sticky session을 설정하거나 세션 상태를 Redis 같은 공유 저장소에 빼야 했다. 1인 SaaS 개발자에게 이건 서버 한 대로 끝날 일을 인프라 한 겹 더 쌓는 일로 바꿔놨다.

무상태로 바뀌면서 그 겹이 사라진다. 규격을 만든 팀이 직접 예시로 든 게 Cloudflare WorkersNetlify다. Cloudflare는 Agents SDK로 첫날부터 지원해 Workers 안에서 MCP 서버를 그냥 돌린다. Netlify는 "MCP를 플랫폼의 나머지만큼 단순하게" 만들었다고 했다. 세션 관리 코드가 통째로 빠지니 서버리스에 얹기가 정적 함수 배포 수준으로 내려온다. 프레임워크 FastMCP 4.0을 만든 쪽은 클라이언트/서버 분리 덕에 패키지 크기를 약 83% 줄이고 속도를 25% 올렸다고 밝혔다.

상태가 정말 필요하면 방법도 바뀌었다. 전송 계층에 숨겨두는 대신 도구가 명시적 핸들을 발급하고 모델이 그 값을 인자로 다시 넘긴다. 규격 문서는 이 방식이 더 낫다고 못박는다. 모델이 핸들을 눈으로 보고 도구 사이로 직접 실어 나르기 때문이다.

무상태에서 대화가 끊기지 않게: MRTR

무상태로 가면 잃는 게 하나 있다. 도구가 실행 도중 사용자에게 뭔가 물어보는 흐름이다. 확인을 받거나 빠진 값을 채우는 경우다. 예전엔 이걸 서버가 스트림을 열어둔 채 처리했다. 새 규격은 이걸 MRTR(Multi Round-Trip Requests)로 다시 짰다. 서버가 input_required와 필요한 질문을 돌려주면 클라이언트가 답을 붙여 원래 호출을 재시도한다.

이게 추상적인 개선이 아니다. Supabase는 자기 MCP가 무상태로 돌아서 사용자 확인 절차를 넣기 어려웠는데 MRTR로 풀렸다고 했다. 새 프로젝트를 만들기 전 비용을 확인하거나 데이터를 지우는 쿼리를 승인받는, 실무에서 사고를 막는 바로 그 단계다. 도구 목록 응답에는 ttlMscacheScope가 붙어 클라이언트가 도구 카탈로그를 캐시할 수 있게 됐다. 재접속마다 다시 긁어오는 낭비가 준다.

깨지는 변화라는 신호

이번 릴리스는 편한 업그레이드가 아니다. 가장 큰 변경들이 하위 호환을 깨는 것들이다. 세션 ID에 기대 짠 코드는 마이그레이션 비용을 치른다. Roots·Sampling·Logging은 폐기 예정이고 레거시 HTTP+SSE 전송도 마찬가지다. 대신 처음으로 12개월 최소 유예를 규격에 박은 공식 폐기 정책이 생겼다. 급하게 대응하지 말고 계획해서 옮기라는 뜻이다. 인증 쪽도 손봤다. RFC 9207 발급자 검증을 넣고 동적 클라이언트 등록(DCR)을 걷어내 CIMD(Client ID Metadata Documents)로 옮긴다.

Tasks 확장은 실험 단계를 벗어나 정식 확장으로 승격됐다. 몇 시간씩 도는 긴 작업을 폴링으로 관리한다. Amazon Bedrock AgentCore, Microsoft Foundry, Google Cloud가 나란히 지원을 발표했다. Honeycomb은 자사 월간 대화형 쿼리의 약 20%를 이미 에이전트가 던진다고 밝혔다.

anyAX 관점

이 릴리스가 겨눈 건 "프로덕션급"이라는 단어다. 큰 변경이 전부 하위 호환을 깨는 쪽으로 갔다는 건, 이 표준을 실제 서비스에 얹는 팀이 충분히 많아졌다는 신호다. 혼자 에이전트 백엔드를 굴리는 사람에게 실익은 분명하다. sticky session도 공유 Redis도 없이, MCP 서버를 Workers나 Netlify에 붙여 라운드로빈 뒤에서 그냥 스케일시킨다. 어제까지 인프라 엔지니어 한 명 몫이던 일이 배포 명령 한 줄로 접힌다.

동시에 방향을 잡아준다. 세션에 상태를 숨기지 말고 도구가 발급한 핸들을 모델이 들고 다니게 하라는 설계 결정은, 에이전트를 짤 때 "무엇을 프로토콜에 맡기고 무엇을 내 도구 로직에 둘지"를 다시 긋게 만든다. 12개월 폐기 유예가 붙었으니 지금 Roots·Sampling에 새로 기대 짜는 건 손해다. 새로 시작하는 AI 우선 팀이라면 처음부터 무상태 요청/응답과 MRTR 위에 얹는 편이, 반년 뒤 마이그레이션 청구서를 피하는 길이다.

참고