toolcall() ← all concepts

// concept · mcp primitives

Tools, resources, prompts: who's in control.

An MCP server exposes three primitives, not one — and most people cram everything into tools. The real distinction is who decides when each one runs.

// the "who controls it" axis

This isn't ToolCall's framing — it's straight from the MCP spec, which has a literal "Who controls it" column. That one axis tells you which primitive to reach for.

toolsmodel decides
for actions — the model invokes them itself to do something: run a query, call an API. Can change real state. (think: POST)
resourcesapp decides
for data — read-only context the host app pulls in: a file, a database schema, docs. No side effects. (think: GET)
promptsuser decides
for intent — templated workflows the user triggers, usually as a slash command.

"GET/POST" is a teaching analogy, not spec wording. The spec's enforceable side-effect hints (readOnlyHint etc.) actually live on tools; resources are described as read-only/passive in the docs.

One server, all three

The spec's own example: a single database server can expose every primitive at once.

# the same MCP server exposes… tool run_query(sql) # model calls it to act resource db://schema # app loads it as context prompt /analyze-table # user triggers the workflow

Tools are for actions. Resources are for data. Prompts are for intent. Match each thing your server offers to who should decide when it runs.

The catch: client support

Here's the real reason everyone defaults to tools — uneven client support. Tools are near-universal; resources are the least supported. Claude Code doesn't support resources at all; Cursor and VS Code Copilot are tools-only. So a tool "works everywhere" today, while a resource may simply be ignored.

So: design by the control axis — but if it must work in every client right now, a tool is the safe bet. (Client support changes; check the matrix before you build.)

Sources: MCP — server concepts ("who controls it") · Tools spec · Resources spec · Prompts spec · Client support matrix

One concept a week. Free.

The deeper, copy-paste version of each ToolCall short — MCP, RAG, agents, caching — in your inbox.

// total: 0.00 · spam: void · unsubscribe: one click