
This page is part of our MCP specification reference, a plain-English guide to the Model Context Protocol spec (version 2026-07-28), within The MCP Guide. Building a server? See MCP development.
An MCP prompt is a reusable, server-defined message template that a user picks on purpose, often as a slash command like /code_review. The client asks the server for the prompt with prompts/get, passes any arguments, and gets back ready-to-use messages for the AI model.
Status in the 2026-07-28 spec: core. Prompts are one of the three server features, with tools and resources. A server opts in by declaring the prompts capability.
Prompts are the least known of the three features, but they are useful. They let a server owner package expert instructions once, so every user gets the same good starting point. This page is based on the 2026-07-28 Prompts page, checked on 28 October 2026.
Key Takeaways
- A prompt is a named template on the server that returns one or more messages for a model, customized by arguments.
- Prompts are "user-controlled": the user chooses when to use them, though the server writes their content.
- Clients find prompts with
prompts/listand fetch a filled-in prompt withprompts/get. - Prompt messages can hold text, images, audio, resource links and embedded resources.
- In 2026-07-28,
prompts/getcan returninput_requiredto ask for more input, and list results carry caching hints. - The spec requires careful validation of prompt inputs and outputs to prevent injection attacks.
What a prompt is
The spec says prompts let servers "provide structured messages and instructions for interacting with language models." Clients can discover them, fetch their contents and pass arguments to customize them.
A prompt definition has:
name: the unique identifier, such ascode_review.title: an optional display name.description: optional text explaining what it does.arguments: an optional list, each with aname,descriptionandrequiredflag.icons: optional images for the interface.
Why prompts exist
The three server features differ by who is in control:
| Feature | Who decides when it is used | Typical use |
|---|---|---|
| Tools | The model | Take an action |
| Resources | The host application | Supply context |
| Prompts | The user | Start a known workflow |
The spec explains that "user-controlled" refers to "who decides when the prompt is used, not who authors its content. Prompt content is defined by the server." Its main example is a slash command in the chat box.
For a business, prompts are a way to share best practice. A reporting server might offer a "weekly sales summary" prompt that already knows which data to pull and how to format it. Users do not have to write that instruction themselves.
How it works
Listing prompts
The client sends prompts/list. The result supports pagination and includes caching hints. The spec's example lists a code_review prompt with one required argument, code.
Getting a prompt
The client sends prompts/get with the prompt name and argument values. This is the spec's example response:
{
"jsonrpc": "2.0",
"id": 2,
"result": {
"resultType": "complete",
"description": "Code review prompt",
"messages": [
{
"role": "user",
"content": {
"type": "text",
"text": "Please review this Python code:\ndef hello():\n print('world')"
}
}
]
}
}
Each message has a role of user or assistant. That lets a prompt include example turns, not just one instruction. The client then sends these messages to the model.
Message content
Prompt messages support the same content types as tool results: text, images, audio, resource links and embedded resources. Images and audio must be base64-encoded with a valid MIME type. Embedded resources let a prompt pull in server-managed content, such as documentation, directly.
Auto-completing arguments
The spec says prompt arguments "may be auto-completed through the completion API." A client can suggest values as the user types. See MCP argument completion.
Asking for more input
New in 2026-07-28, a server may answer prompts/get with resultType: "input_required". The client gathers the requested input and retries with inputResponses. This is the multi-round-trip request pattern.
When prompts change
If the server declared listChanged, it should send notifications/prompts/list_changed. In 2026-07-28, that goes to clients that opened a subscriptions/listen stream with promptsListChanged: true.
What changed across spec versions
| Version | Change to prompts |
|---|---|
| 2024-11-05 | Prompts defined; messages hold text, images and embedded resources (2024-11-05 Prompts) |
| 2025-03-26 | Audio content added (changelog) |
| 2025-06-18 | title field added; completion requests gain context for earlier arguments (changelog) |
| 2025-11-25 | Icons added for prompts (changelog) |
| 2026-07-28 | Capability declared in DiscoverResult; lists must not vary per connection; caching hints; input_required; resource links documented on the Prompts page (changelog) |
The 2024-11-05 page said servers declare the prompts capability "during initialization." In 2026-07-28 there is no initialization. The capability appears in the result of server/discover. See MCP capabilities explained.
Common mistakes
- Using a prompt where a tool fits. A prompt only returns messages. It does not run anything on the server's systems by itself.
- Skipping argument checks. Servers SHOULD validate arguments. Missing required arguments or an unknown prompt name should return
-32602. - Pasting user input straight into instructions. The spec says implementations MUST validate prompt inputs and outputs "to prevent injection attacks or unauthorized access to resources." See prompt injection through MCP.
- Embedding data the user should not see. An embedded resource in a prompt is still data from your server. Apply the same access checks you use for
resources/read. - Assuming every client shows prompts. Client support varies, so do not hide core features behind prompts alone.
Our Learn MCP lesson on adding prompts shows how to build one.
Next step
Prompts become easier to use when the client can suggest argument values. Read MCP argument completion next, or return to the MCP specification reference.
Frequently asked questions
What is the difference between MCP prompts and tools?
A prompt returns messages that start a conversation, and the user chooses when to use it. A tool runs an action, and the model chooses when to call it. Prompts do not change anything on their own.
How do users run an MCP prompt?
The spec does not require a specific interface. Its main example is a slash command in the chat box. The client then calls prompts/get with any arguments the user entered.
Can an MCP prompt include images or files?
Yes. Prompt messages can include images, audio, resource links and embedded resources, as well as text. Binary data must be base64-encoded with a MIME type.
Who writes the content of an MCP prompt?
The server does. The spec says "user-controlled" refers to who decides when the prompt is used, not who authors its content.
Do prompts change in the 2026-07-28 spec?
The feature works the same way. The changes are protocol-wide: resultType on results, caching hints on lists, input_required support and capability discovery through server/discover instead of the old handshake.











