
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.
Status in the 2026-07-28 spec: core (this page is about the specification document itself)
To read the Model Context Protocol (MCP) specification, start at the current version, 2026-07-28, read the overview and architecture pages first, and treat capitalized words like MUST and SHOULD as the actual rules. Everything else is explanation, examples or history.
The spec is long, but it is well organized. Once you know which pages are rules, which are guides and which are historical records, you can answer most questions in a few minutes.
This guide is a map. It is written for technical managers and developers who are new to MCP, and it reflects the spec as of October 2026.
Key Takeaways
- The current MCP specification is version 2026-07-28; older versions stay online and are easy to land on by mistake.
- The TypeScript schema file is the official source of truth for every message and field.
- Capitalized keywords (MUST, SHOULD, MAY) follow the IETF's standard meanings and are the binding rules.
- Every implementation must support the base protocol, versioning and message patterns; most other features are optional.
- Final SEPs (proposals) are historical records; the current spec wins if they disagree.
- Extensions such as Tasks and MCP Apps are documented outside the core spec and are opt-in.
What the MCP specification is
The MCP specification defines "the authoritative protocol requirements" for how AI apps talk to MCP servers. It is published on modelcontextprotocol.io and maintained in the modelcontextprotocol GitHub repository.
The prose pages are not the final word. The overview says the spec is "based on the TypeScript schema in schema.ts," and the base protocol page calls that schema "the source of truth for all protocol messages and structures." A JSON Schema version is generated from it automatically for tooling.
If you want our plain-English overview of the whole protocol first, read how MCP works.
Why it is written the way it is
The spec has to serve many independent builders: AI app makers, server authors, SDK maintainers and gateway vendors. They all need the same precise rules, so the spec uses formal language borrowed from internet standards.
The key words "MUST", "SHOULD", "MAY" and their negatives are "to be interpreted as described in BCP 14," the IETF convention, "when, and only when, they appear in all capitals." In plain English:
| Keyword | What it means for you |
|---|---|
| MUST / MUST NOT | Required. Break it and you are not compliant. |
| SHOULD / SHOULD NOT | Strongly expected. Skip it only with a good, understood reason. |
| MAY | Truly optional. Both choices are compliant. |
A lowercase "should" in a sentence is ordinary English, not a rule.
How the spec is organized
The base protocol overview lists the building blocks. It also says which ones are mandatory: "All implementations MUST support the base protocol, versioning, and the message patterns. Other components MAY be implemented based on the specific needs of the application."
| Section | What you will find | Required? |
|---|---|---|
| Architecture | Hosts, clients, servers and design principles | Read first |
| Base protocol | JSON-RPC messages, _meta, error codes, statelessness | Yes |
| Versioning | Per-request versions, server/discover, old-version compatibility | Yes |
| Message patterns | Request/response, multi round-trip requests, subscriptions | Yes |
| Transports | stdio and Streamable HTTP | Pick what you use |
| Authorization | OAuth-based sign-in for HTTP servers | Should, for HTTP |
| Server features | Tools, resources, prompts, utilities | Optional |
| Client features | Elicitation, plus deprecated roots and sampling | Optional |
| Schema | Every type, generated from schema.ts | Reference |
| Changelog and deprecated registry | What changed and what is on its way out | Reference |
Most pages also show small JSON examples. Here is the kind you will see everywhere in 2026-07-28: a request carrying its own version and capabilities in _meta, adapted from the discovery page.
{
"jsonrpc": "2.0",
"id": "discover-1",
"method": "server/discover",
"params": {
"_meta": {
"io.modelcontextprotocol/protocolVersion": "2026-07-28",
"io.modelcontextprotocol/clientInfo": { "name": "ExampleClient", "version": "1.0.0" },
"io.modelcontextprotocol/clientCapabilities": {}
}
}
}
Some examples are labeled "non-normative." Those illustrate a rule; they are not the rule.
A reading order that works
- Overview and architecture. Learn the three roles and the security principles. See MCP hosts, clients and servers.
- Base protocol. Learn the message shapes. See JSON-RPC in MCP.
- Versioning. Learn how a request declares its version. See MCP server discovery.
- Message patterns. Especially multi round-trip requests.
- The features you actually use. Usually tools first, then resources and prompts.
- Transports and authorization, if you run a remote server.
- Changelog and deprecated registry, before any upgrade.
Versions, drafts and other documents
The site keeps every version online: 2024-11-05, 2025-03-26, 2025-06-18, 2025-11-25, 2026-07-28 and a draft. The versioning guide explains the labels. A revision is Draft (in progress), Current (ready for use, may still get backward-compatible fixes) or Final (complete and frozen). As of October 2026, 2026-07-28 is Current.
Version names are dates. The guide says a version identifier marks "the last date backwards incompatible changes were made." Our specification changelog summarizes each one.
Three other document types sit next to the spec:
- Learn and develop docs explain concepts and walk through code. They are helpful, but the spec is binding.
- SEPs (Specification Enhancement Proposals) record why a change was made. The SEP guidelines say Final SEPs "are not updated after finalization" and that "the current specification is authoritative."
- Extensions live in separate pages and repositories. The extensions overview says they are "always disabled by default." See how MCP extensions work.
What changed across versions in how you read it
Before 2026-07-28, you read the spec through the lens of a "lifecycle": an initialize handshake, then a session. The 2025-11-25 lifecycle page said initialization "MUST be the first interaction."
In 2026-07-28 that page is gone. Its replacement is the versioning and compatibility page, which says plainly: "There is no negotiation handshake." If a tutorial starts with initialize, it describes a legacy version.
The 2026-07-28 release also added a deprecated features registry. Check it before you build on any feature.
Common mistakes
- Reading the wrong version. Search engines often land on 2025-06-18 or 2025-11-25 pages. Check the date in the URL.
- Treating a SEP as current rules. SEPs are frozen once Final. One example: SEP-2567 mentions a
messages/listenchannel, but the shipped spec usessubscriptions/listen. - Ignoring capitalization. "Should" and "SHOULD" are not the same thing.
- Assuming extensions are core. Tasks, MCP Apps and Skills over MCP are opt-in on both sides.
- Trusting one sentence over the schema. Small leftovers happen. As of 28 October 2026, the 2026-07-28 overview page still says extensions are "negotiated during initialization," while the versioning page and the extensions overview describe per-request negotiation. When pages disagree, check
schema.tsand the more specific page.
Next step
Now that you know how the document is laid out, read the first technical layer: JSON-RPC requests, responses and notifications in MCP. You can also browse every topic from the MCP specification hub.
Frequently asked questions
Where is the official MCP specification?
It is at modelcontextprotocol.io under /specification/. The address /specification/latest points to the current version, which is 2026-07-28 as of October 2026. The source files are in the modelcontextprotocol repository on GitHub.
Do I need to read the whole MCP spec to build a server?
No. Every implementation must handle the base protocol, versioning and message patterns, and an official SDK does most of that for you. Then read only the feature pages you use, usually tools first.
What is the difference between the spec and the MCP docs?
The spec states the rules, using MUST, SHOULD and MAY. The learn and develop docs explain concepts and show code. If they ever disagree, the spec and its schema win.
What is a SEP?
A Specification Enhancement Proposal is the formal way to propose a change to MCP. Each one explains the motivation and design. Once a SEP is Final, it is kept as a historical record, and the current spec is authoritative.
Is the 2025-11-25 spec still valid?
It is a past revision that stays documented on the site. The 2026-07-28 spec calls handshake-based versions like it "legacy" and explains how servers and clients can support both. New work should target 2026-07-28.











