The six primitives
MCP has six building blocks. Servers offer three to clients, and clients offer three back. For each one, the key question is who decides when it's used.
Servers offer · server → client
Tools
The model decides
Functions the LLM can choose to run, like querying a database or creating an issue.
create_issue
Resources
The app decides
Read-only data with a URI that the app or user attaches as context.
file:///README.md
Prompts
The user decides
Reusable prompt templates the user picks, often shown as slash commands.
/review-pr
Clients offer back · client → server
Sampling
Server asks the model
If the host supports it, the server borrows the host’s LLM, so it needs no model or API key of its own.
Roots
Client sets the scope
The client tells local servers which folders are in scope, so they work on the right project.
Elicitation
Server asks the user
Mid-task, the server asks the user for missing input with a small form.