The Model Context Protocol

One protocolto plug them all in.

MCP is an open standard that lets AI applications connect to tools, data, and services through one consistent interface — instead of a bespoke integration for every pairing. Think USB-C, but for models.

transport JSON-RPC 2.0
created by Anthropic
open source +2,900 contributors
scroll to learn the whole stack
The one-liner

What problem does MCP actually solve?

Before MCP, wiring an AI agent to an external system meant a custom integration per source. N models × M tools = an N×M mess. MCP collapses that into N+M: build once on each side, connect anything to anything.

// the analogy

USB-C standardized how devices talk to peripherals. You don't need a unique cable per gadget. MCP does the same for LLMs and the outside world — a single shape every integration can rely on.

// the mechanism

A server exposes capabilities (tools, data, prompt templates). A client speaks a shared JSON-RPC protocol to discover and call them. The model gets context and the ability to act, safely and uniformly.

In one year MCP went from an experiment to the de-facto standard for connecting data and applications to LLMs — adopted across OpenAI, Microsoft, Google, AWS, GitHub, and thousands of servers.
The shape of it

Three roles, two layers

Every MCP setup is a conversation between a host, its clients, and one or more servers. Underneath, the protocol cleanly separates what is said (data layer) from how it travels (transport layer).

Host

The AI app

Claude, an IDE, a chat UI. Manages the model and orchestrates connections.

manages
Client

The connector

Lives inside the host. Maintains a 1:1 session with a single server.

JSON-RPC
Server

The capability

Exposes tools, resources & prompts. Local subprocess or remote service.

DATA LAYER

What is said

A JSON-RPC 2.0 protocol defining lifecycle, capability negotiation, and the core primitives — tools, resources, prompts, and notifications. Transport-independent.

TRANSPORT LAYER

How it travels

The channel that moves messages: connection setup, framing, and authorization. The same data layer rides over any transport unchanged.

The vocabulary

Server primitives: tools, resources, prompts

These three are what a server offers. Each has standard list and get/call methods, so any client can discover and use them without prior knowledge. Server concepts

01

Tools

model-controlled

Executable functions the model can invoke — run a query, send an email, create a file. Defined with a JSON Schema for their inputs.

tools/list · tools/call
02

Resources

app-controlled

Read-only data the server makes available — files, records, API responses. Context for the model, with no side effects.

resources/list · resources/read
03

Prompts

user-controlled

Reusable, parameterized instruction templates the server defines — surfaced as slash-commands or menu actions in the host.

prompts/list · prompts/get
Client features (the server can call back) — client concepts

Sampling

A server asks the host to run an LLM completion (sampling/createMessage) — enabling recursive, agentic server logic without bundling its own model.

Roots

The client tells the server which filesystem locations or URIs it's allowed to operate within — a scoping boundary for safe access.

Elicitation

A server requests structured input from the user mid-operation — confirmations, missing fields, choices — using schema-defined forms.

Notifications

One-way messages with no reply: lifecycle signals like initialized and dynamic updates like tools/list_changed.

The handshake

How a session actually runs

A connection follows a defined lifecycle so client and server agree on versions and capabilities before any real work happens — enabling backward and forward compatibility. Versioning

1 — Initialize

Version & capability negotiation

The client opens with its protocol version and what it supports. The server replies with its own. Both sides learn what's possible.

initialize { protocolVersion, capabilities }
2 — Initialized

Ready signal

The client sends a notification confirming setup is complete. The session is now live.

→ notifications/initialized
3 — Operation

Discover & call

Normal exchange: list tools/resources/prompts, call them, stream results, fire notifications when lists change.

⇄ tools/list · tools/call · resources/read · ...
4 — Shutdown

Clean teardown

The transport closes the connection. For stdio the client closes the subprocess; for HTTP the session simply ends.

× connection closed
The wire

Two official transports

Not three, not five — two. This intentional minimalism keeps the ecosystem interoperable. The same JSON-RPC data layer rides over both. Architecture & transports

LOCAL

stdio

standard input / output
  • Client launches the server as a child process
  • JSON-RPC flows over stdin / stdout, newline-delimited
  • Logs go to stderr — never stdout (it corrupts the stream)
  • No ports, URLs, TLS, or CORS. Zero network overhead
  • Ideal for desktop apps & local CLI tooling
REMOTE

Streamable HTTP

one endpoint, POST + GET
  • Single URL (e.g. /mcp) accepts both POST and GET
  • Client POSTs JSON-RPC; server returns JSON or upgrades to SSE
  • Server-Sent Events stream long-running results & updates
  • Standard HTTP auth: bearer tokens, OAuth, API keys
  • Built for cloud, multi-client, enterprise deployments
⚠ DEPRECATED — The original HTTP+SSE transport (two endpoints, a separate /sse channel) was retired in March 2025 and replaced by Streamable HTTP's single-endpoint design. If you see SSE-only servers, they're on the old model.
# A tool call over Streamable HTTP POST /mcp HTTP/1.1 Content-Type: application/json Accept: application/json, text/event-stream Mcp-Session-Id: 1d3f…e7c2 Authorization: Bearer eyJhbGciOi… { "jsonrpc": "2.0", "id": 7, "method": "tools/call", "params": { "name": "search", "arguments": { … } } }
The locks

Authorization, simplified

Remote servers are treated as OAuth 2.1 resource servers. The hard part has always been registering an unbounded number of clients with an unbounded number of servers — and the latest spec finally fixes it. Authorization guide

// the old pain — DCR

Dynamic Client Registration let clients self-register, but only worked if the auth server supported it. Otherwise developers had to build a fragile OAuth proxy, or push every user through IT to mint their own registration.

// the fix — CIMD

Client ID Metadata Documents (SEP-991): a client's ID is a URL pointing to a JSON document it controls describing itself. No pre-registration dance — the server fetches and trusts the metadata.

Also new in 2025-11-25: OpenID Connect Discovery 1.0 for finding auth servers, incremental scope consent via WWW-Authenticate, and a formal Cross-App Access authorization extension for enterprise identity.
▲ LATEST RELEASE · 2025-11-25

What's new in the November 2025 spec

Shipped on MCP's first birthday — a batch of production-driven features that make the protocol more scalable and reliable. The headliners:

01

Tasks SEP-1686EXPERIMENTAL

A new abstraction for long-running work. Any request can return a task handle — "call now, fetch later." Clients poll status and retrieve results within a server-defined window. Built for deep research, code migrations, multi-agent runs.

workinginput_requiredcompletedfailedcancelled
02

Client ID Metadata Documents SEP-991

URL-based client registration that finally untangles OAuth at ecosystem scale — no more building proxies or per-user IT registrations.

03

Sampling with Tools SEP-1577

Sampling requests can now pass tools and toolChoice — letting servers drive genuinely agentic LLM calls through the host.

04

URL Mode Elicitation SEP-1036

Servers can hand off to a secure out-of-band web interaction (e.g. a hosted form or payment page) instead of cramming everything into inline fields.

05

Richer Elicitation Schemas SEP-1330

A standards-based EnumSchema supporting titled, untitled, single-select, and multi-select enums — far better structured user prompts.

06

Icons & Metadata SEP-973

Tools, resources, templates, and prompts can expose icons — so hosts can render connectors and capabilities with proper visual identity.

07

Extensions & Governance

A formal extension mechanism (including authorization extensions like Cross-App Access), plus OIDC discovery and tool-naming guidance — the protocol maturing for enterprise.

One year in

The numbers

Pulled from the first-anniversary release notes. Browse the index yourself in the MCP Registry.

~2k
registry entries
407%
registry growth
2,900+
Discord contributors
67
maintainers (9 core)