
MCP 2026-07-28 업데이트 철저 해설 - 스테이트리스(Stateless)화로 무엇이 변하고 무엇이 가능해졌는가
요약
Anthropic의 MCP(Model Context Protocol)가 2026년 7월 28일 대규모 업데이트를 통해 스테이트리스(Stateless) 방식으로 전환되었습니다. 이번 업데이트로 MCP 서버는 세션 유지 없이도 서버리스, 에지, 로드 밸런싱 환경에서 효율적으로 동작할 수 있게 되었습니다.
핵심 포인트
- MCP 프로토콜이 세션 기반에서 요청/응답 방식의 스테이트리스 모델로 변경됨
- 서버리스 및 에지 컴퓨팅 환경에서의 배포와 확장이 용이해짐
- 핸드셰이크 과정이 생략되어 통신 구조가 단순화됨
- OAuth 2.0 및 OIDC를 정식 준수하여 인증 표준 강화
- 로드 밸런싱 시 스티키 세션 없이 라운드 로빈 방식 사용 가능
서론
2026년 7월 28일, Anthropic은 「Bringing MCP 2026-07-28 to Claude」를 공개하며, MCP(Model Context Protocol)의 5번째 대규모 사양 업데이트가 Claude에 도입됨을 발표했습니다. 원격 프로토콜이 등장한 지 약 1년 반 만에 이루어진 가장 큰 변경입니다.
이 기사에서는 공식 블로그와 MCP 공식 사양 블로그를 바탕으로 다음 내용을 알기 쉽게 정리합니다.
- 이번 업데이트로 무엇이 변했는가 (가장 큰 핵심은 「스테이트리스(Stateless)화」)
- 그 결과 개발자가 무엇을 할 수 있게 되었는가
- 기존 MCP 서버를 어떻게 마이그레이션해야 하는가
결론: MCP는 「스테이트리스 HTTP 워크로드(Stateless HTTP Workload)」가 되었다
세부적인 내용에 들어가기에 앞서, 이번 업데이트의 본질을 한마디로 요약합니다.
지금까지 「세션을 계속 유지하는, 상태를 가진 프로토콜」이었던 MCP가,
1개의 요청으로 완결되는 스테이트리스한 요청/응답(Request/Response) 방식으로 탈바꿈했습니다.
이로 인해 MCP 서버는 특별한 장치 없이도 서버리스(Serverless), 에지(Edge), 로드 밸런서(Load Balancer) 하부에서 동작할 수 있게 되었습니다.
| 관점 | 기존 (~2025년) | 이번 (2026-07-28) |
|---|---|---|
| 통신 모델 | 양방향·스테이트풀(Stateful)·세션 의존 | 요청/응답 방식의 스테이트리스(Stateless) |
| 세션 관리 | initialize 핸드셰이크(Handshake) + Mcp-Session-Id 필요 | 불필요 (각 요청이 자기 완결적) |
| 로드 밸런서 | 스티키 세션(Sticky Session) 필수 | 일반적인 라운드 로빈(Round Robin)으로 가능 |
| 배포 대상 | 상주 서버 전제 | 서버리스 / 에지 / Workers도 가능 |
| 라우팅 | 바디(Body, JSON)를 해석해야 함 | 헤더(Mcp-Method)로 분기 가능 |
| 목록 결과 | 매번 취득 | ttlMs로 캐싱 가능 |
| 인증 | 독자적인 운영이 되기 쉬움 | OAuth 2.0 / OIDC 정식 준수 |
규모를 나타내는 수치도 업데이트되었습니다.
- Claude의 커넥터 디렉토리에는 950개 이상의 MCP 서버가 등록되어 있으며, 매일 수백만 명이 이용하고 있습니다.
- MCP의 월간 SDK 다운로드 수는 4억 회 초과 (올해 4배 증가)
- TypeScript / Python SDK는 누적 10억 다운로드를 돌파
Anthropic은 MCP가 사실상 「AI 에이전트와 앱을 연결하는 업계 표준」이 되었다고 규정하고 있습니다.
1. 가장 큰 핵심: 스테이트리스 프로토콜 코어
이번 변경의 중심은 프로토콜 코어의 스테이트리스(Stateless)화입니다.
무엇이 사라졌는가
initialize/initialized핸드셰이크 (SEP-2575)- 세션을 식별하는
Mcp-Session-Id헤더 (SEP-2567)
지금까지는 「먼저 초기화하고, 세션 ID를 발행하여, 그것을 계속 들고 다녀야」 했습니다. 이번에는 이를 중단하고, **모든 요청이 자기 기술적(Self-describing)**이 됩니다. 프로토콜 버전, 클라이언트 정보, 기능(Capability)을 _meta 필드에 담아 매번 보내는 방식입니다.
POST /mcp HTTP/1.1
MCP-Protocol-Version: 2026-07-28
Mcp-Method: tools/call
...
왜 좋은가
각 요청이 독립적이므로, 어느 서버 인스턴스에 도착하더라도 처리가 가능합니다. 공유 스토리지나 세션 어피니티(Session Affinity, 동일한 서버로 연결하는 메커니즘)도 필요하지 않습니다.
「상태를 가질 수 없게 되는 것」은 아니다
스테이트리스화 = 앱이 상태를 가질 수 없다는 뜻은 아닙니다. **명시적인 핸들(Handle, Identifier)**을 사용합니다.
- 서버는 도구의 응답으로
basket_id와 같은 핸들을 반환합니다. - 모델은 다음 호출 시 그 핸들을 인자(Argument)로 전달합니다.
숨겨진 세션 상태 대신, 상태를 명시적으로 전달하는 설계입니다. 오히려 모델이 여러 도구를 가로질러 핸들을 조합하거나, 상태를 명시적으로 다룰 수 있다는 이점으로 설명되고 있습니다.
2. Multi Round-Trip Requests (MRTR) — 사용자에게 질문하기를 스테이트리스(Stateless)하게
지금까지 "실행 전 확인"이나 "부족한 파라미터의 추가 입력"은 서버 측에서 elicitation/create 등을 호출하고, SSE 스트림을 계속 열어두어야 했습니다. 스테이트리스(Stateless) 방식에서는 사용할 수 없습니다.
그래서 도입된 것이 MRTR (SEP-2322) 입니다.
- 서버는 처리 도중에
resultType: "input_required"를 반환하며, 필요한 입력(inputRequests)과 상태를 담은 base64 형식의requestState를 반환합니다. - 클라이언트는 답변을 수집하여, 원래의 호출에inputResponses와requestState를 붙여서 재전송합니다. - 상태가 모두 페이로드(Payload)에 들어있기 때문에, 어떤 인스턴스에서도 처리를 재개할 수 있습니다.
이를 통해 "삭제하기 전에 확인하기", "부족한 파라미터를 다시 묻기"와 같은 elicitation (질문/유도) 기능이 스테이트리스 환경에서도 구현 가능해졌습니다. Supabase 등이 "지금까지 불가능했던 기능"이라며 환영하고 있습니다.
3. 헤더 기반 라우팅 (SEP-2243)
Streamable HTTP 요청은 Mcp-Method와 Mcp-Name 헤더를 필수로 포함해야 합니다.
- 게이트웨이, 속도 제한(Rate Limiting), WAF가 JSON 바디를 분석하지 않고 헤더만으로 라우팅이나 미터링(Metering)을 할 수 있습니다. - 헤더와 바디가 일치하지 않는 요청은 서버가 거부합니다.
인프라 측면에서 보면, MCP가 마침내 "일반적인 HTTP 워크로드"로 취급될 수 있게 되었다는 것을 의미합니다.
4. 목록 결과 캐싱 (SEP-2549)
tools/list, prompts/list, resources/list, resources/read 응답에 HTTP의 Cache-Control을 참고한 **ttlMs (유효 기간) 및 cacheScope (공유 범위)**가 추가되었습니다.
- 클라이언트는 영구 스트림 없이도 캐시 전략을 결정할 수 있습니다. - 순서가 결정론적(Deterministic)으로 바뀌면서, 재연결 시에도 프롬프트 캐시가 안정적으로 유지됩니다.
5. 분산 트레이싱 (Distributed Tracing)
W3C Trace Context 전파가 정식으로 문서화되었으며, traceparent, tracestate, baggage를 _meta에 고정된 키 이름으로 실을 수 있습니다. OpenTelemetry 호환 백엔드에서 SDK와 하류(Downstream) 서비스를 가로지르는 트레이스를 상관(Correlation)시킬 수 있습니다.
6. 인증 강화: OAuth 2.0 / OIDC 정식 준수
엔터프라이즈 도입에 효과적인 변경 사항입니다. 6개의 SEP를 통해 인증이 강화되었으며, Entra나 Okta와 같은 기업의 ID 시스템에 우회책 없이 연결할 수 있게 되었습니다.
| 변경 사항 | 내용 |
|---|---|
| RFC 9207 준수 (SEP-2468) | 권한 부여 서버가 iss를 반환하며, 클라이언트는 이를 반드시 검증해야 합니다. 권한 부여 서버 혼동 공격(Confusion Attack)을 방지합니다. |
| ... |
7. 확장 프레임워크 (Extensions Framework) 정식화
"코어 사양을 변경하지 않고 새로운 기능을 추가하기" 위한 메커니즘이 정식화되었습니다.
- 확장은 역 DNS 형식의 ID로 식별하며, 클라이언트/서버의
extensions맵을 통해 협상(Negotiate)합니다. -ext-*리포지토리에서 코어 사양과 독립적으로 버전 관리됩니다. - SEP 프로세스에 Extensions Track이 신설되어, 실험적 단계에서 공식 단계로 단계적으로 승격될 수 있습니다.
대표적인 확장은 다음과 같습니다.
| 확장 | 내용 |
|---|---|
| MCP Apps | 서버가 샌드박스화된 iframe 내에서 인터랙티브한 HTML UI를 제공할 수 있다. UI 조작도 툴 호출과 동일한 JSON-RPC를 통하므로, 감사(Audit) 및 동의(Consent)의 일관성이 유지된다 |
| Tasks (SEP-2663) | 장시간 처리를 스테이트리스(Stateless)하게 다룬다. tools/call이 태스크 핸들(Task Handle)을 반환하며, tasks/get (폴링, Polling) / tasks/update / tasks/cancel로 진행을 제어한다. tasks/list는 (세션 없이 안전하게 스코프를 지정할 수 없으므로) 삭제됨 |
| EMA | Enterprise Managed Authorization. 기업 관리형 인가 |
8. 스키마와 에러 코드 업데이트
- 툴의
inputSchema/outputSchema가 JSON Schema 2020-12를 풀 서포트 (oneOf/anyOf/allOf, 조건부 유효성 검사(Conditional Validation),$ref/$defs) structuredContent는 객체에 국한되지 않고 임의의 JSON 값을 수용- 외부
$refURI의 자동 해결은 금지 (스키마의 깊이나 검증 시간도 제한해야 함) - 파괴적 변경 (Breaking Change): 리소스 부재 에러가 자체 코드
-32002에서 JSON-RPC 표준인-32602(Invalid Params)로 변경.-32002를 리터럴 일치로 확인하는 클라이언트는 수정이 필요함
9. 비권장 (12개월의 이행 기간 포함)
| 비권장 기능 | 대체 수단 |
|---|---|
| Roots | 툴 파라미터, 리소스 URI, 서버 설정 |
| ... |
모두 본 릴리스 및 공개 후 12개월 동안은 동작합니다 (SEP-2577). 삭제를 위해서는 별도의 SEP가 필요하다는 **라이프사이클 정책 (Lifecycle Policy)**이 수립되었습니다.
10. 이를 통해 '깨지지 않는' 업그레이드로
미래의 파괴적 변경을 방지하기 위한 거버넌스(Governance)도 3가지 마련되었습니다.
- 기능 라이프사이클 정책 (Feature Lifecycle Policy): Active → Deprecated → Removed. 각 전이에는 최소 12개월의 유예 기간 부여
- 확장 프레임워크 (Extension Framework): 신기능은 옵트인(opt-in) 방식의 확장으로 출시하여 독립적으로 안정화
- 적합성 요구사항 (Compliance Requirements): Standards Track의 SEP는 적합성 테스트 시나리오가 갖춰지지 않으면 Final 단계가 될 수 없음. SDK는 새로운 티어(Tier) 제도로 채점됨
목표는 2026-07-28 버전을 채택한 구현체가 트랜스포트(Transport)나 라이프사이클 코드를 다시 작성하지 않고도 미래 버전으로 올라갈 수 있도록 하는 것입니다.
11. SDK 및 대응 현황
- Tier 1 SDK (TypeScript / Python / Go / C#)는 모두 2026-07-28에 대응 완료
- Rust SDK는 베타 버전으로 대응 - 릴리스 후보는 2026년 5월 21일에 확정, 최종 사양은 7월 28일에 출하 (약 10주간의 검증 기간)
개발자로서 할 수 있게 되는 것 (요약)
이번 업데이트를 '개발자 관점의 가능해진 것'으로 번역하면 다음과 같습니다.
- 서버리스/엣지(Edge)에서 MCP 서버를 구동할 수 있음: 상주 서버나 세션 스토어를 준비하지 않아도 Cloudflare Workers나 서버리스 함수에 그대로 올릴 수 있음
- 일반 로드 밸런서로 스케일링 가능: 스티키 세션(Sticky Session) 설정이 불필요. 순수 라운드 로빈(Round Robin)으로 수평 확장 가능
- 스테이트리스 상태에서도 '확인 대화상자'를 띄울 수 있음: MRTR을 통해 파괴적인 작업 전의 확인이나 추가 입력 요청이 가능함
- 인프라 측에서 라우팅 및 제한을 걸기 쉬움:
Mcp-Method헤더를 통해 바디(Body)를 들여다보지 않고도 게이트웨이 제어 가능 - 기업의 ID와 올바르게 연결됨: OAuth 2.0 / OIDC 준수로 Entra, Okta 등에 그대로 연결
- 풍부한 UI를 안전하게 제공할 수 있음: MCP Apps를 통해 샌드박스 iframe UI를 감사 일관성을 유지하며 제공
- 장시간 작업을 처리할 수 있음: Tasks 확장을 통한 폴링 기반의 진행 관리
- 미래의 업그레이드 시 깨질 위험이 적음: 라이프사이클과 적합성 거버넌스가 정비됨
요약
- MCP 2026-07-28의 본질은
「스테이트풀 (Stateful) 세션」에서 「스테이트리스 (Stateless) 요청/응답」으로의 전환 -
initialize핸드셰이크와Mcp-Session-Id가 사라지고, 각 요청이 자기 완결적(self-contained)으로 동작합니다. 서버리스(Serverless)/에지(Edge)/라운드 로빈(Round-robin) 환경에서 작동합니다 -
MRTR을 통해 스테이트리스 상태에서도 재질의(querying back)가 가능해졌습니다. 헤더 라우팅 (Header Routing), 리스트 캐싱 (List Caching), **분산 트레이싱 (Distributed Tracing)**을 통해 인프라 친화적으로 변했습니다 -
OAuth 2.0 / OIDC 준수로 엔터프라이즈 인증에 대응합니다. 확장 프레임워크 (Extension Framework) (MCP Apps / Tasks / EMA)를 통해 기능 추가를 코어(Core)로부터 분리합니다 - 파괴적 변경(에러 코드-32002→-32602, 실험적 Tasks API의 이전)과 12개월의 권장되지 않음(Deprecated) 전환 기간에 주의하십시오 - Tier 1 SDK는 대응을 완료했습니다. 우선 공식 마이그레이션 문서를 확인하는 것부터 시작해 보세요.
수고하셨습니다!
참고 링크
Discussion

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기