C.W.K.
Stream
Lesson 01 of 05 · published

The Six-Primitive Map

~18 min · primitives, overview, server-side, client-side

Level 0Curious Reader
0 XP0/48 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

MCP's primitives split cleanly into two trios. The server side publishes capabilities the host can use. The client side publishes capabilities the server can ask for. The symmetry is intentional and worth holding in your head before you dive into any single primitive.

Server features (server → host)Client features (host → server)
Resources — read-only data the host can fetchSampling — server asks the host's LLM to think on its behalf
Prompts — templated workflows the user can invokeRoots — server asks the host which directories/URIs are in scope
Tools — callable functions with side effectsElicitation — server asks the host to ask the user for input

The split keeps responsibility clear. Servers expose capabilities they own; clients expose capabilities only the host can fulfill. A server cannot run an LLM (it does not have one) so sampling has to be a client capability the server requests. A client cannot enumerate tables in a database it has never seen, so resources are a server capability the client fetches.

Memorize the trio split, then forget the table — what you actually want in your head is "if I have this functionality, where does it live?" Read-only data → Resource. User-invokable workflow → Prompt. Side-effectful action → Tool. LLM call requested by server → Sampling. Filesystem boundary → Roots. Pop a question to the user → Elicitation.

Code

Capability advertisement — both sides·json
// Server capabilities (what the server offers)
{
  "tools":     { "listChanged": true },
  "resources": { "listChanged": true, "subscribe": true },
  "prompts":   { "listChanged": true }
}

// Client capabilities (what the server may ask of the host)
{
  "sampling":    {},
  "roots":       { "listChanged": true },
  "elicitation": {}
}

External links

Exercise

List five capabilities a hypothetical 'project-manager' MCP server might expose. For each, decide which of the six primitives it belongs to. The interesting cases are the borderline ones (e.g. 'list pending tasks' — Resource or Tool?). Defend your call in one sentence each.

Progress

Progress is local-only — sign in to sync across devices.
Spotted a bug or have feedback on this page?Report an Issue

Comments 0

🔔 Reply notifications (sign in)
Sign inPlease sign in to comment.

No comments yet — be the first.