The AI application the user interacts with (e.g. Claude Desktop, an IDE). Manages clients, enforces security policies and user consent, coordinates the model.
Client
A component inside the host that maintains a 1:1 relationship with exactly one server.
Server
A program that exposes capabilities (tools, resources, prompts) to clients. Can run locally or remotely.
flowchart LR
U[User] --> H[Host application]
H --> C1[Client 1]
H --> C2[Client 2]
H --> C3[Client 3]
C1 --> S1[Server A<br/>local process]
C2 --> S2[Server B<br/>remote service]
C3 --> S3[Server C<br/>remote service]
MCP topology: one host, many clients, one server each
Features are gated by capability negotiation — a server can only offer tools, resources, or prompts it has advertised. How capabilities are exchanged depends on the spec revision:
Legacy revisions (2025-11-25 and earlier): the connection starts with an initialize request; client and server exchange protocol version and capabilities, then the client sends notifications/initialized.
Current revision (2026-07-28): MCP is stateless — there is no handshake. Every request carries the protocol version, client info, and client capabilities in _meta fields, and servers advertise their capabilities via the server/discover request.
Tools are model-controlled, resources are application-controlled, prompts are user-controlled — this distinction is heavily tested
MCP messages use JSON-RPC 2.0
Each client has a 1:1 relationship with one server; the host runs many clients
Capability negotiation gates every feature, whether via the legacy initialize handshake or per-request metadata plus server/discover in the current stateless revision