What are prompts in MCP, and what problem do they solve?
Quick Answer
A prompt in MCP is a named, reusable, parameterized message template a server exposes, meant to be explicitly selected by a user — commonly surfaced in a host's UI as a slash command or menu item, e.g. /summarize-pr number=482. They solve the problem of encoding a domain expert's best-practice interaction pattern once, on the server, instead of every user having to remember and hand-type the right multi-step instructions or the right framing for a task the server author already understands well (like "here's exactly how you should ask an LLM to review a pull request against our team's standards"). Unlike tools (model-controlled) and resources (application-controlled), prompts are explicitly user-controlled — a person deliberately invokes one rather than the model deciding to on its own.
Detailed Answer
Prompts fill a gap tools and resources don't. They let the server author package expertise about how to ask for something, not just data or actions to ask for.
A prompt from prompts/list
{
"name": "summarize-pr",
"description": "Summarize a pull request's changes and flag potential risks.",
"arguments": [
{"name": "pr_number", "description": "Pull request number", "required": true},
{"name": "focus", "description": "Optional area to focus on, e.g. 'security'", "required": false}
]
}
Why this is a distinct primitive from tools
A tool called summarize_pr would let the model decide, mid-conversation, to summarize a PR. That's useful, but the exact instructions and framing baked into the request are whatever the model improvises from the tool's description. A prompt instead lets the server ship a carefully engineered template — one that instructs the model to check for missing tests, flag breaking API changes, and format output to match the team's review checklist, say. A user explicitly invokes that exact, curated interaction, instead of relying on the model to reconstruct it from a short tool description every time.
Where this shows up in practice
In a host with slash-command support, a user might type /summarize-pr 482. The host resolves that to a prompts/get call against the server that registered summarize-pr. It retrieves the fully rendered messages and injects them into the conversation as if the user had typed that much longer, more carefully worded prompt themselves.
The underlying idea
Prompts turn a server author's expertise about how to phrase a request into something reusable and shareable. No end user has to independently discover or write good prompts for a given task.