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.

5 / 28