---
original_title: "The 2026-07-28 MCP Specification Release Candidate"
creative_title: "세션을 버리자 MCP가 비로소 웹이 되었다"
url: "https://blog.modelcontextprotocol.io/posts/2026-07-28-release-candidate/"
source: "Model Context Protocol Blog"
authors: "David Soria Parra (Lead Maintainer), Den Delimarsky (Lead Maintainer)"
published: 2026-05-21
spec_version: "2026-07-28"
verified: 2026-08-18
tags: [MCP, Spec, Stateless, Extensions, MCP-Apps, Tasks, OAuth, CIMD]
---

> **문서의 목적**
> MCP 스펙 `2026-07-28` 릴리스 후보(RC) 발표문을 핵심만 정리하고, 2026년 8월 현재 확정된 최종 스펙과의 차이까지 교차 검증해 기록한다. 강의·실습 소재로서의 활용 가치를 판단하는 근거 자료로 쓴다.

원문: <https://blog.modelcontextprotocol.io/posts/2026-07-28-release-candidate/>

---

## Core Synthesis

### Core Message

MCP 리드 메인테이너 David Soria Parra와 Den Delimarsky가 발표한 `2026-07-28` 스펙은 출시 이후 가장 큰 개편으로, **프로토콜 계층에서 세션을 완전히 없앴다**. 기존에는 `initialize` 핸드셰이크와 `Mcp-Session-Id`로 클라이언트를 특정 서버 인스턴스에 묶어 두었기 때문에 sticky session과 공유 세션 저장소(Redis 등)가 필요했지만, 이제는 모든 요청이 스스로를 설명하는 독립 요청이 되어 **평범한 라운드로빈 로드밸런서 뒤에서도 그대로 돌아간다**. 여기에 Extensions 프레임워크, 인증 강화, 12개월 최소 유예를 보장하는 폐기 정책이 함께 들어가 MCP를 "개발자 편의 규약"에서 "운영 가능한 인프라"로 옮겼다.

### Core Keywords

- Stateless Protocol Core (무상태 프로토콜 코어)
- SEP (Specification Enhancement Proposal)
- `Mcp-Session-Id` 제거 / `initialize` 핸드셰이크 제거
- `server/discover`
- MRTR (Multi Round-Trip Requests)
- Explicit Handle Pattern (명시적 핸들 패턴)
- `Mcp-Method` / `Mcp-Name` 헤더 기반 라우팅
- `ttlMs` / `cacheScope` (리스트 응답 캐싱)
- Extensions Framework / MCP Apps / Tasks
- RFC 9207 `iss` 검증, DCR → CIMD 전환
- JSON Schema 2020-12
- W3C Trace Context / OpenTelemetry

---

### Key Framework/Mechanism

**프레임워크 명칭: "무상태 코어 + 확장 트랙" 5계층 재설계**
(무상태 전환만 6개의 SEP가 맞물려 완성됨)

**1계층 — 핸드셰이크 제거 (SEP-2575)**
`initialize`/`initialized` 왕복을 삭제했다. 예전에 한 번만 주고받던 프로토콜 버전·클라이언트 정보·기능 목록이 이제 **매 요청의 `_meta` 안에** 실려 다닌다. 미리 서버 기능을 알고 싶은 클라이언트는 새로 생긴 `server/discover`를 부르면 되지만, 필수는 아니다.

**2계층 — 세션 ID 제거 (SEP-2567)**
`Mcp-Session-Id` 헤더와 프로토콜 수준 세션이 사라졌다. 그 결과 **어떤 요청이든 어떤 서버 인스턴스에 떨어져도 처리 가능**해지고, 수평 확장을 위해 필요했던 고정 라우팅과 공유 저장소가 프로토콜 요구사항에서 빠졌다.

**3계층 — 명시적 핸들 패턴 (Explicit Handle Pattern)**
프로토콜이 무상태라고 해서 애플리케이션까지 무상태일 필요는 없다. 서버는 도구로 `basket_id`, `browser_id` 같은 **손잡이(handle)를 발급**하고, 모델이 다음 호출에서 그것을 평범한 인자로 되돌려 준다. 상태가 전송 계층 뒤에 숨지 않고 **모델의 눈에 보이는 값**이 되므로, 모델이 여러 도구 사이에서 핸들을 조합하고 넘길 수 있다.

**4계층 — MRTR: 서버→클라이언트 요청 재설계 (SEP-2260, SEP-2322)**
서버가 중간에 사용자 확인을 받아야 할 때, SSE 스트림을 열어 두는 대신 `resultType: "input_required"` 결과와 `requestState`를 돌려준다. 클라이언트는 답을 모아 `inputResponses`와 함께 **원래 호출을 다시 보낸다.** 필요한 모든 정보가 페이로드에 담겨 있으니 어느 인스턴스가 이어받아도 된다. 또한 서버발 요청은 **클라이언트 요청을 처리하는 중에만** 보낼 수 있어(권고 → 필수), 사용자에게 난데없는 팝업이 뜨는 일이 없다.

**5계층 — 운영·확장·거버넌스**
- **라우팅**: Streamable HTTP에 `Mcp-Method`, `Mcp-Name` 헤더 필수화(SEP-2243) → 게이트웨이가 본문을 뜯지 않고 라우팅·인증·레이트리밋 수행. 헤더와 본문이 다르면 서버가 거부.
- **캐싱**: 리스트/리소스 응답에 `ttlMs`, `cacheScope` 추가(SEP-2549). HTTP `Cache-Control` 모델을 따름.
- **추적**: `_meta`의 `traceparent`/`tracestate`/`baggage` 키 이름 고정(SEP-414) → OpenTelemetry 백엔드에서 하나의 span tree로 연결.
- **확장**: Extensions가 정식 제도화(SEP-2133). reverse-DNS ID, `ext-*` 저장소, 독립 버전. 공식 확장으로 **MCP Apps**(샌드박스 iframe에 서버가 UI 렌더링)와 **Tasks**(장시간 작업)가 편입.
- **폐기**: Roots·Sampling·Logging은 표기상 폐기. **Active → Deprecated → Removed** 생애주기와 **최소 12개월** 유예 확정. 도구 스키마는 JSON Schema 2020-12 전면 지원(`oneOf`, `$ref` 등), 리소스 없음 오류는 `-32002` → `-32602`로 변경.

**Why This Works**
- 상태를 없앤 게 아니라 **숨은 상태를 보이는 값으로 옮겼다** → 모델이 직접 다룰 수 있다.
- 라우팅 정보를 헤더로 올렸다 → 기존 웹 인프라(LB, WAF, 게이트웨이)를 **개조 없이 재사용**한다.
- 실험 기능을 스펙 본문이 아닌 **확장 트랙**에 둔다 → 코어를 깨지 않고 실험할 수 있다.
- 폐기에 12개월 하한을 걸었다 → 구현자가 **반응이 아닌 계획**으로 업그레이드한다.
- Standards Track SEP는 **적합성 테스트(conformance suite) 시나리오 없이는 Final이 못 된다** → 문서와 구현의 괴리를 구조적으로 막는다.

---

### Why This Matters

- **운영 비용의 직접 절감**: sticky session, 공유 Redis, 게이트웨이 패킷 검사가 프로토콜 요구에서 빠졌다. MCP 서버를 serverless·edge에 올릴 수 있게 되어 인프라 난도가 한 단계 내려갔다.
- **인지 부하 감소**: 개발자가 "세션 수명 관리"라는 별도 정신 모델을 유지할 필요가 없다. 요청 하나가 곧 완결된 단위이므로 디버깅 대상이 요청 단위로 좁아진다.
- **확장성**: Tier 1 SDK 4종(TypeScript, Python, Go, C#)이 최종 발행일 당일 대응했고, TypeScript·Python은 누적 다운로드 10억 건을 넘겼다. 월 다운로드는 4~5억 건 규모다. 규격이 흔들리면 파급이 큰 단계라 안정성 확보가 곧 생태계 방어다.
- **기존 가정 반박**: "에이전트 프로토콜은 양방향 상시 연결이 필요하다"는 전제를 뒤집었다. MRTR이 증명한 것은, 사용자 확인 같은 대화형 흐름조차 **요청/응답 왕복**으로 표현 가능하다는 점이다.
- **학습 가능성**: 세션·SSE 스트림 개념 없이 "HTTP 요청 한 번 = 도구 호출 한 번"으로 가르칠 수 있다. 실습 진입 장벽이 낮아져 짧은 강의 단위로 쪼개기 쉬워졌다.
- **파괴적 변경 비용**: 이번 릴리스는 breaking change다. 세션 ID에 의존한 코드는 마이그레이션이 필요하고, `2025-11-25` 실험판 Tasks API를 쓴 구현은 새 생애주기로 옮겨야 한다.

---

### What to Remember

- **버전 문자열을 날짜로 오해하지 말 것.** `2026-07-28`은 "역호환이 깨진 마지막 날짜"를 뜻하는 **버전 라벨**이다. 이 RC 글의 실제 발행일은 2026년 5월 21일이다.
- **RC가 아니라 최종본을 보고 작업할 것.** 최종 스펙은 예정대로 2026년 7월 28일에 발행됐다. 실무 기준 문서는 `modelcontextprotocol.io/specification/2026-07-28`이다.
- **세션 대신 핸들을 설계할 것.** 상태가 필요하면 도구가 ID를 발급하고 모델이 인자로 되돌려 주는 구조로 바꾼다. 전송 메타데이터에 상태를 숨기지 않는다.
- **게이트웨이 설정을 헤더 기준으로 다시 잡을 것.** `Mcp-Method`, `Mcp-Name`으로 라우팅·미터링하고, 본문 파싱 로직은 걷어낸다.
- **오류 코드와 캐시 정책을 점검할 것.** `-32002`를 문자열로 비교하는 클라이언트는 `-32602`로 수정하고, `tools/list` 결과는 `ttlMs`만큼 캐시한다.
- **Roots·Sampling·Logging은 신규 채택하지 말 것.** 최소 12개월은 동작하지만 대체 경로(도구 파라미터, LLM API 직접 호출, stderr·OpenTelemetry)로 설계한다.

---

### Bottom Line

MCP는 "상태를 관리해 주는 프로토콜"에서 "**상태를 애플리케이션에 되돌려 주는 프로토콜**"로 바뀌었다. 이 한 번의 파괴적 변경으로 MCP 서버는 특별한 인프라가 아니라 **평범한 HTTP 워크로드**가 되었고, 대신 세션에 의존했던 모든 코드가 마이그레이션 대상이 되었다. 지금 해야 할 일은 명확하다 — 운영 중인 서버에서 세션 의존 지점을 목록화하고, 그 자리를 명시적 핸들로 치환하고, 게이트웨이 라우팅을 `Mcp-Method` 헤더 기준으로 다시 세워라. 유예 기간은 12개월이지만, Tier 1 SDK가 이미 전부 새 스펙을 말하고 있으므로 **이번 주에 착수하라.**

---

### Expert Opinion

이 글 자체는 기술적으로 정확하지만, **2026년 8월 현재 기준으로는 이미 한 단계 지난 문서**라는 점을 분명히 해야 한다. 사용자가 준 URL은 2026년 5월 21일 잠긴 릴리스 후보 발표문이고, 최종 스펙은 예정대로 **2026년 7월 28일에 발행 완료**되었다(교차 검증: MCP 공식 블로그 최종 발표문, Anthropic Claude 블로그, Google Developers Blog). RC와 최종본 사이에 실무에 영향을 주는 변경이 최소 네 가지 추가됐다. 첫째, 모든 결과에 `resultType` 필드가 **필수**가 되었다(`complete` 또는 `input_required`). 둘째, MRTR이 `elicitation/create`뿐 아니라 **`sampling/createMessage`와 `roots/list`까지** 대체하게 확정됐다. 셋째, RC 문서에는 전혀 없던 내용으로 **Dynamic Client Registration(DCR) 자체가 CIMD(Client ID Metadata Documents)로 가는 방향에서 공식 폐기**됐고, **레거시 HTTP+SSE 전송도 1년 유예로 폐기** 처리됐다 — RC만 읽으면 DCR을 여전히 정공법으로 오해하게 되므로 이 격차가 가장 위험하다. 넷째, 공식 확장에 **EMA(Enterprise Managed Authorization)**가 추가되고 Tasks 변경 알림이 `subscriptions/listen` 스트림으로 통합됐다. 강의 소재로서의 판단은 이렇다: 무상태 전환·핸들 패턴·헤더 라우팅은 **개념적으로 오래 살아남을 프레임워크**여서 실습 재현성이 높고 유지보수 부담이 낮다. 반면 SEP 번호와 인증 세부 절차는 지금도 움직이는 영역이라 강의 본문에 박아 넣으면 곧 부채가 된다. 인용 수치 중 월 다운로드는 출처 간 편차가 있다(Anthropic 4억 건, MCP 블로그 "5억 건에 가까움") — 강의에서는 "월 4~5억 건 규모"처럼 범위로 표현하는 편이 안전하다.

**자기 평가: 93/100**
근거 — 원문 전량 확보(+), 최종 스펙 발행 여부 및 RC↔최종 차이 4건을 1차 출처로 교차 검증(+), 수치 출처 편차를 명시(+). 감점 요인: `2026-07-28` 최종 changelog 원문을 직접 열어 전체 변경 목록을 대조하지는 않았으므로, 위 4건 외에 추가 변경이 존재할 가능성을 배제하지 못함(-5). 강의 적용 판단이 정성 평가에 머물러 있음(-2).
