Protocol
Model Context Protocol Specification
The MCP specification lives at modelcontextprotocol.io/specification. It
defines a JSON-RPC 2.0 wire protocol, three server-side primitives, three client-side
capabilities, and three transport variants. The schema ships as TypeScript
(schema.ts) under LF AAIF governance.
Spec organization
Base Protocol
JSON-RPC 2.0 message shapes (Requests, Responses, Notifications), the initialize handshake, capability negotiation, stateful connections.
Server Features
Resources (URIs with content-type metadata), Tools (JSON-Schema-defined verbs with structured output), Prompts (parameterized message templates).
Client Features
Sampling (server-requested LLM completions), Roots (filesystem boundaries advertised to servers), Elicitation (server-requested user input).
Architecture
Three actors: Host, Client, Server. Three transport variants: stdio, SSE, HTTP. The session lifecycle from handshake through cleanup.
Utilities
Configuration, progress tracking, cancellation, error reporting, logging. Cross-cutting concerns that any implementation can adopt.
The deliberate gaps
The spec specifies a wire protocol. It does not specify authentication or authorization at the protocol layer. Servers and transports handle auth themselves: OAuth 2.1 with PKCE for HTTP, OS process isolation for stdio.
The spec also does not include sandboxing. A server runs with the host process's privileges. Trust is the host application's responsibility; the protocol defines only the wire contract.
There is no central trust authority. No PKI, no signed-publisher tier at the spec level. Per-publisher trust is delegated to the implementing client or to third-party services like MCPowered.
The _meta extension mechanism
Both Requests and Responses carry an optional _meta property. Servers and
clients use it to attach out-of-band metadata without breaking the JSON-RPC schema. The
MCP Apps extension (rich UI delivery from servers) builds on this through the
_meta.ui.resourceUri field.
Versioning
The spec versions by date (current at writing: 2025-06-18). Backward
compatibility commitments fall under LF AAIF governance. Each major version corresponds
to a stable schema snapshot in the schema.ts source.