The three core MCP server primitives are tools, resources, and prompts. The key insight is that each primitive is controlled by a different part of your application stack. Tools are model-controlled: Claude decides when to call them. Resources are app-controlled: your application code decides when to fetch them, typically for UI elements or for adding context to conversations. Prompts are user-controlled: the user triggers them, usually through UI interactions like button clicks, menu selections, or slash commands. This split between who decides when each primitive runs is the simplest way to remember which one to reach for in any given situation.