Protocol Primitives
Summary table
Section titled “Summary table”| Primitive | Offered by | Controlled by | Key methods | Status (2026-07-28) |
|---|---|---|---|---|
| Tools | Server | Model | tools/list, tools/call |
Current |
| Resources | Server | Application (host) | resources/list, resources/read, resources/templates/list |
Current |
| Prompts | Server | User | prompts/list, prompts/get |
Current |
| Sampling | Client | — | sampling/createMessage |
Deprecated |
| Roots | Client | — | roots/list |
Deprecated |
| Elicitation | Client | — | elicitation/create |
Current |
flowchart LR SV[Server] --> T[Tools - model-controlled] SV --> R[Resources - app-controlled] SV --> P[Prompts - user-controlled] CL[Client] --> S[Sampling - deprecated] CL --> RO[Roots - deprecated] CL --> E[Elicitation]
Server primitives
Section titled “Server primitives”Executable functions the model decides to invoke (with host-mediated consent — a human should always be able to deny an invocation). Defined by name, description, and a JSON Schema inputSchema (optionally an outputSchema for structured results). See the Tool Invocation Lifecycle.
Resources
Section titled “Resources”Data the application chooses to provide as context — files, database schemas, documents. Identified by URI. Resource templates (RFC 6570 URI templates like weather://{city}/current) allow parameterized resources. Clients can receive updates on individual resources — via resources/subscribe in legacy revisions, or by opting into resource subscriptions on a subscriptions/listen stream in 2026-07-28.
Prompts
Section titled “Prompts”Reusable, parameterized message templates the user explicitly selects (e.g. slash commands). prompts/get accepts arguments and returns concrete messages ready for the model.
Client primitives
Section titled “Client primitives”Sampling Deprecated
Section titled “Sampling ”The server asks the client’s LLM for a completion (sampling/createMessage). The client controls model choice, cost, and consent — servers gain intelligence without holding API keys. The host should keep a human in the loop. Deprecated in 2026-07-28; new implementations are steered toward direct LLM provider APIs.
Roots Deprecated
Section titled “Roots ”The client communicates which directories/URIs the server should operate within (roots/list; each root must be a file:// URI). Roots are a coordination mechanism, not an enforced sandbox. Deprecated in 2026-07-28 (and the notifications/roots/list_changed notification was removed); pass paths via tool parameters, resource URIs, or server configuration instead.
Elicitation
Section titled “Elicitation”The server requests input from the user mid-operation (elicitation/create) — e.g. asking for a missing parameter or a confirmation. It supports a form mode (structured data via a flat JSON Schema) and a URL mode for sensitive out-of-band flows. The user can accept, decline, or cancel.
Memory aid
Section titled “Memory aid”Server offers T-R-P (Tools, Resources, Prompts) — controlled by Model, App, User respectively. Client offers S-R-E (Sampling, Roots, Elicitation) — with S and R deprecated in the latest revision.
Key exam points
Section titled “Key exam points”- Know every primitive’s direction (who offers it) and its control model
- In legacy revisions (2025-11-25 and earlier), sampling, roots, and elicitation are server-initiated requests to the client; in 2026-07-28 servers never initiate requests — these arrive inside an
InputRequiredResultand the client retries the original request with the answers (the MRTR pattern) - Roots inform; they do not enforce
Check your knowledge
Section titled “Check your knowledge”📝 Check your knowledge