
This page is part of our MCP specification reference, a plain-English guide to the Model Context Protocol spec (version 2026-07-28), within The MCP Guide. Building a server? See MCP development.
The 2025-11-25 version of the Model Context Protocol specification was released on 25 November 2025, MCP's first anniversary. It added Client ID Metadata Documents for sign-in, experimental tasks for long-running work, URL mode elicitation, icons, tool calling inside sampling, and OpenID Connect Discovery support. Maintainers described it as backward compatible.
Status in the 2026-07-28 spec: superseded (2025-11-25 is a Final revision; the current version is 2026-07-28)
It was the last MCP version built around the initialize handshake and sessions. This page lists the changes in the official 2025-11-25 changelog, drawing on the anniversary release post, and says what survived into 2026-07-28. Checked on 28 October 2026.
Key Takeaways
- 2025-11-25 followed 2025-06-18 and was the current spec until 2026-07-28 replaced it.
- It introduced Client ID Metadata Documents as a recommended way for AI apps to register with authorization servers.
- It added experimental tasks, URL mode elicitation, icons, and tool calling in sampling.
- It formalized governance, working groups and an SDK tier system.
- In 2026-07-28, tasks moved to an extension, URL elicitation's completion notification was removed, and Sampling was deprecated.
Why this release mattered
The release post says plainly: "This release is backward compatible. Your existing implementations keep working." That set it apart from 2026-07-28, which removed the handshake.
Much of the release was about sign-in. It made Client ID Metadata Documents the recommended registration path. The release post also announced the first two authorization extensions: OAuth client credentials (SEP-1046) and enterprise IdP policy controls (SEP-990).
The nine major changes
- OpenID Connect Discovery. Authorization server discovery now supports OpenID Connect Discovery 1.0 as well as OAuth metadata.
- Icons. Servers can attach icons to tools, resources, resource templates and prompts.
- Incremental scope consent. Servers can ask for more scopes through
WWW-Authenticate, so users approve permissions step by step. - Tool name guidance. SEP-986 set rules for tool names. See MCP tool names and descriptions.
- Better elicitation schemas.
ElicitResultandEnumSchemagained titled, untitled, single-select and multi-select enums. - URL mode elicitation. A server can send the user to a web page. The release post says it "lets you send users to a proper OAuth flow" so the client never sees their credentials.
- Tool calling in sampling. Sampling requests could include
toolsandtoolChoice. - Client ID Metadata Documents. Added "as a recommended client registration mechanism." See Client ID Metadata Documents in MCP.
- Experimental tasks. Tasks let clients track "durable requests with polling and deferred result retrieval."
Minor changes worth knowing
| Change | What it means |
|---|---|
| stderr for all logging on stdio | Servers may log any level to stderr, not just errors |
description on Implementation | Aligns with the MCP Registry's server.json format |
403 for invalid Origin | Streamable HTTP servers must reject bad origins with 403 |
| Input validation errors as tool errors | Lets the model see and fix its mistake |
| SSE polling | Servers may disconnect streams at will; clients poll and resume |
| RFC 9728 alignment | WWW-Authenticate header optional, with .well-known fallback |
| Defaults in elicitation schemas | Primitive fields can carry default values |
| JSON Schema 2020-12 default | Set as the default dialect for MCP schemas |
How it looked: a tool in 2025-11-25
This tool definition is from the 2025-11-25 tools page. It shows two new fields: icons and the task-related execution setting.
{
"name": "get_weather",
"title": "Weather Information Provider",
"description": "Get current weather information for a location",
"inputSchema": {
"type": "object",
"properties": {
"location": { "type": "string", "description": "City name or zip code" }
},
"required": ["location"]
},
"icons": [
{ "src": "https://example.com/weather-icon.png", "mimeType": "image/png", "sizes": ["48x48"] }
],
"execution": { "taskSupport": "optional" }
}
Governance and process
The changelog lists four governance updates: a formal governance structure (SEP-932), community communication guidelines (SEP-994), working groups and interest groups (SEP-1302), and an SDK tiering system (SEP-1730). For the SDK tiers, see the official MCP SDKs. For who runs MCP today, see who owns MCP.
What still holds in 2026-07-28
| 2025-11-25 change | Status in 2026-07-28 |
|---|---|
| Client ID Metadata Documents | Kept, now preferred; Dynamic Client Registration deprecated |
| OpenID Connect Discovery | Kept; clients must support both discovery methods |
| Icons, tool name guidance | Kept |
| Experimental tasks | Moved out of core into the io.modelcontextprotocol/tasks extension |
| URL mode elicitation | Kept, but notifications/elicitation/complete and elicitationId removed |
| Tool calling in sampling | Sampling deprecated as a whole |
includeContext soft-deprecation | Reclassified as Deprecated |
| SSE polling and resumption | Removed; broken streams mean re-issuing the request |
Sessions and initialize | Removed |
These come from the 2026-07-28 changelog. The tasks extension page covers how tasks work now.
Migrating from 2025-11-25
Under the 2026-07-28 versioning page, 2025-11-25 is the newest "Legacy" version. Servers can support it and 2026-07-28 at the same time, as "dual-era" implementations. The 2026-07-28 release post warns of "some migration cost, especially for developers that did depend on session identifiers."
Start with what changed in the July 2026 spec for the full list.
Common mistakes
- Building on experimental tasks from 2025-11-25. The design changed when tasks became an extension.
- Relying on
elicitationIdto match URL elicitations. It was removed; servers encode their own identifier inrequestState. - Adding new Sampling features. Sampling is deprecated in 2026-07-28.
- Assuming 2026-07-28 is also backward compatible. It is not; plan the handshake and session changes.
Next step
See how the protocol changed next in what changed in the July 2026 MCP specification, or browse the MCP specification reference.
Frequently asked questions
When was the 2025-11-25 MCP spec released?
On 25 November 2025, MCP's first anniversary. The release post and the GitHub release tag are both dated that day.
Was 2025-11-25 backward compatible?
Yes, according to the maintainers. The release post says "Your existing implementations keep working." The next version, 2026-07-28, was not fully backward compatible.
Did 2025-11-25 deprecate Dynamic Client Registration?
No. It changed DCR from "SHOULD" to "MAY" and added Client ID Metadata Documents as recommended. The formal deprecation came in 2026-07-28.
Are 2025-11-25 tasks the same as today's Tasks extension?
No. Tasks were experimental and in core in 2025-11-25. In 2026-07-28 they moved to an extension that uses tasks/get polling, adds tasks/update, and removes tasks/list and the blocking tasks/result.
Can a server support 2025-11-25 and 2026-07-28 together?
Yes. The 2026-07-28 spec calls these "dual-era" implementations and documents how clients and servers detect which version the other side speaks.











