Model Context Protocol
The MCP specification itself — the schema and rules every SDK implements
Overview
The document every MCP client and server is measured against: a TypeScript schema published alongside a JSON Schema, plus the prose defining what a conforming implementation must do. Anthropic donated it to the Linux Foundation's Agentic AI Foundation in December 2025, and the licence is mid-transition — new code and specification text under Apache-2.0, documentation under CC-BY-4.0, and contributions whose authors have not consented to relicensing still MIT. Read it when an SDK's behaviour surprises you, but it is a document rather than a dependency: shipping anything still means picking one of the language SDKs.
What can you do with Model Context Protocol?
- Read the schema, not the summary — The protocol is defined in TypeScript at
schema/<revision>/schema.tsand published as JSON Schema for toolchains that cannot consume it, so the authoritative answer to what fields a message carries is a file in this repository rather than any SDK's documentation. - Know which dated revision you are on — Revisions are
YYYY-MM-DDstrings that advance only when a backwards-incompatible change lands, so a compatible improvement ships without moving the version. The current revision is 2026-07-28; 2025-11-25 and earlier are the handshake-based ones. - Negotiate per request, not per session — From 2026-07-28 the version travels on every request as
io.modelcontextprotocol/protocolVersioninside_meta, and in theMCP-Protocol-Versionheader on Streamable HTTP. A server rejects each request independently withUnsupportedProtocolVersionErrorlisting what it supports, andserver/discoveris a mandatory RPC returning supported versions, capabilities and identity in one call. - Opt into extensions instead of waiting for the core — Tasks give long-running operations durable handles with polling and mid-flight input, MCP Apps render charts, forms and video players inline in a conversation, and two authorization extensions cover machine-to-machine and enterprise-managed access. Extensions are disabled by default: the client advertises support in
io.modelcontextprotocol/clientCapabilitieson every request and the server in itsserver/discoverresult, so a feature exists only once both ends have opted in. - Do not expect the protocol to enforce safety — The specification states that MCP cannot enforce its security principles at the protocol level: tool annotations are to be treated as untrusted unless the server is trusted, and consent flows are left to the host. Who may call which tool is your problem, or a gateway's.
- Find the running code in sibling repositories — This repository holds the specification and documentation only. The reference servers, the community registry and the official Python, TypeScript, Go, C#, Rust, Java, Kotlin, PHP, Swift and Ruby SDKs are separate repositories in the same organisation, each on its own release cadence — so support for a new revision arrives after the revision does, and which one you can actually speak depends on the SDK.
Documentation
Reproduced from the modelcontextprotocol/modelcontextprotocol README, published under Apache-2.0 / CC-BY-4.0. Read the original ↗
Model Context Protocol (MCP)
Just heard of MCP and not sure where to start? Check out our documentation website.
This repo contains the:
- MCP specification
- MCP protocol schema
- Official MCP documentation
The schema is defined in TypeScript first, but made available as JSON Schema as well, for wider compatibility.
The official MCP documentation is built using Mintlify and available at modelcontextprotocol.io.
Authors
The Model Context Protocol was created by David Soria Parra (@dsp) and Justin Spahr-Summers (@jspahrsummers).