An MCP server can offer three kinds of things, called primitives. Knowing the difference tells you exactly what a server can do.
Tools — actions the AI can take. Sending a message, creating a record, running a query. Tools are model-controlled: the AI decides when to call them based on your request and the tool's description.
Resources — data the AI can read. File contents, database records, API responses. Resources are application-controlled: the host or user decides when to pull them into context. This keeps the AI's working memory manageable.
Prompts — reusable prompt templates the server offers, like a ready-made multi-step workflow. Prompts are user-controlled: they show up as options you can pick.
A Concrete Example
A GitHub MCP server might expose a tool ("create an issue"), a resource ("read the contents of this file"), and a prompt ("run a standard code-review workflow"). The AI can act with the tool, read with the resource, and follow a template with the prompt — three different kinds of capability, each with a different level of control over when it's used.
Tools act, resources read, prompts template — that's the whole toolkit a server can offer.