← Back to all projects

Model Context Protocol

The MCP specification itself — the schema and rules every SDK implements

OfficialApache-2.0 / CC-BY-4.0
Stars
9k
Forks
1.7k
Open issues
175
Last commit
14 Aug 2026

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 summaryThe protocol is defined in TypeScript at schema/<revision>/schema.ts and 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 onRevisions are YYYY-MM-DD strings 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 sessionFrom 2026-07-28 the version travels on every request as io.modelcontextprotocol/protocolVersion inside _meta, and in the MCP-Protocol-Version header on Streamable HTTP. A server rejects each request independently with UnsupportedProtocolVersionError listing what it supports, and server/discover is a mandatory RPC returning supported versions, capabilities and identity in one call.
  • Opt into extensions instead of waiting for the coreTasks 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/clientCapabilities on every request and the server in its server/discover result, so a feature exists only once both ends have opted in.
  • Do not expect the protocol to enforce safetyThe 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 repositoriesThis 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).