Key Changes - Model Context Protocol
Blog

Key Changes - Model Context Protocol

2026.08.02
·Web·by Homin.Lee
#API#HTTP#JSON-RPC#MCP#Protocol

Key Points

  • 1The Model Context Protocol has transitioned to a stateless architecture by removing handshake procedures and session-based headers in favor of per-request protocol versioning and metadata.
  • 2Key functional updates include the introduction of a Multi Round-Trip Request pattern to handle additional client inputs, a unified subscription-based notification system, and mandatory `resultType` fields for request processing.
  • 3New governance policies establish a formal feature lifecycle and deprecation process, leading to the removal of several legacy features like server-initiated sampling and the deprecation of HTTP+SSE transport.

The provided document details significant structural, transport, and governance shifts for the Model Context Protocol (MCP) following the November 25, 2025, revision. The primary objective is to transition MCP toward a fully stateless, decentralized, and modular architecture.

Core Protocol and Transport Architecture

The protocol has fundamentally abandoned the initialize/notifications/initialized handshake in favor of a stateless request model. Every request now embeds its protocol version and client capabilities within an _meta object. To maintain identity, clients utilize io.modelcontextprotocol/clientInfo, and servers return identity via io.modelcontextprotocol/serverInfo. Protocol version mismatches now trigger an UnsupportedProtocolVersionError (code 32022-32022).

Streamable HTTP transport has been decoupled from persistent session management. Protocol-level sessions and the Mcp-Session-Id header were removed, and resource subscription management is now consolidated into a single subscriptions/listen POST-response stream. This replaces previous specific endpoints like resources/subscribe and resources/unsubscribe. The SSE-based resumability features, including Last-Event-ID, have also been discarded; broken streams now necessitate a client-side retry with a fresh request ID.

Multi Round-Trip Requests (MRTR) and State Management

A major methodology change is the introduction of the MRTR pattern (SEP-2322). Instead of server-initiated out-of-band requests, servers now return an InputRequiredResult with a resultType: "input_required". The inputRequests field captures the required data, which the client provides upon retrying the initial request. All results now strictly require a resultType field to differentiate between "complete" and "input_required" states.

Server-side state is no longer managed via persistent connections. Servers requiring cross-call state must now utilize server-minted handles passed as standard arguments, as list endpoints (tools, resources, prompts) no longer vary by connection.

Governance and Extensions

The specification formalizes a new feature lifecycle policy (Active, Deprecated, Removed) with a minimum 12-month sunset window (SEP-2596). Key changes include:
  • Logging: ping, logging/setLevel, and notifications/roots/list_changed have been removed. Log levels are now handled per-request via the io.modelcontextprotocol/logLevel meta field.
  • Tasks: Experimental tasks have been moved out of the core protocol into an official extension (io.modelcontextprotocol/tasks), utilizing a polling-based model (tasks/get) rather than blocking methods.
  • Caching: The CacheableResult interface requires ttlMs (freshness hint) and cacheScope ("public" or "private") for all list and read operations to improve performance via client-side caching.
  • Error Handling: The JSON-RPC error range is now partitioned: 32020-32020 to 32099-32099 is strictly reserved for MCP specifications, with specific codes updated accordingly (e.g., HeaderMismatch set to 32020-32020).

Deprecation and Migrations

Several core features are now deprecated, signaling an upcoming shift in implementation standards:
  • Feature Deprecation: Roots, Sampling, and Logging are deprecated (SEP-2577).
  • Transport Deprecation: The HTTP+SSE transport is formally classified as Deprecated in favor of Streamable HTTP.
  • OAuth: OAuth 2.0 Dynamic Client Registration (RFC 7591) is deprecated in favor of Client ID Metadata Documents.

The document also mandates support for OpenTelemetry trace context propagation (traceparent, tracestate, baggage) and aligns JSON schema requirements with JSON Schema 2020-12, specifically allowing more flexible keyword usage and explicit $ref resolution requirements.