FastMCP Prompts Example
README.md
# š§© FastMCP Prompts Example
[](https://x.com/mcoding_off)
[]([https://wa.me/212608105946](https://whatsapp.com/channel/0029Vb7WRtT11ulGgJPp4m3y))
[](LICENSE)
[](https://www.python.org/)
[](https://gofastmcp.com/)
[](https://modelcontextprotocol.io/)
[](https://docs.astral.sh/uv/)
A small, focused tutorial showing how to build **MCP prompts** with [FastMCP](https://gofastmcp.com/) ā reusable, parameterized message templates that any MCP client (Claude Desktop, IDEs, custom agents) can discover and render.
> š Perfect as a first step into the [Model Context Protocol](https://modelcontextprotocol.io/) before diving into tools and resources.
---
## š What are MCP prompts?
While MCP **tools** let a model *do* things and **resources** let it *read* things, **prompts** are user-controlled templates: the client lists them, fills in their arguments, and injects the rendered messages into the conversation. Think of them as *slash commands for LLMs*.
## ⨠What this example covers
[main.py](main.py) demonstrates the three patterns you'll use most, from simplest to most powerful:
| # | Prompt | Pattern | Concept demonstrated |
|---|--------|---------|----------------------|
| 1 | `research_prompt` | Return a plain `str` | Simplest form ā auto-wrapped in a single `user` message |
| 2 | `summarize_prompt` | Optional + constrained args | `Literal` types & defaults become a client-visible argument schema |
| 3 | `code_review_prompt` | Return `list[Message]` | Seed a full multi-turn conversation (user + assistant messages) |
Along the way you'll also see: naming, descriptions, `tags`, and server `instructions`.
## š Quickstart
**Prerequisites:** [Python 3.12+](https://www.python.org/downloads/) and [uv](https://docs.astral.sh/uv/getting-started/installation/).
```bash
# 1. Clone and enter the project
git clone https://github.com/mohamedelamraoui1/fastMCP-2-0-example.git
cd fastMCP-2-0-example
# 2. Install dependencies
uv sync
# 3. Run the server (stdio transport)
uv run main.py
```
If everything is set up correctly, you'll see the FastMCP banner and the server waiting for a client on stdio:

## š Test with the MCP Inspector
The fastest way to explore the prompts is the **MCP Inspector** ā a web UI for poking at any MCP server. It requires [Node.js](https://nodejs.org/) (the Inspector is an npm package that FastMCP launches for you).
**Step 1 ā Launch the Inspector:**
```bash
uv run fastmcp dev inspector main.py
```
You'll see output like this, and your browser opens automatically:
```
š MCP Inspector is up and running at:
http://localhost:6274/?MCP_PROXY_AUTH_TOKEN=<session-token>
āļø Proxy server listening on localhost:6277
```
> If the browser doesn't open, copy the full URL (including the token) from the terminal.
**Step 2 ā Connect to the server.** The connection form is pre-filled (transport `STDIO`, command `fastmcp run main.py`). Just click **Connect** ā the indicator turns green when the handshake succeeds.
**Step 3 ā List the prompts.** Open the **Prompts** tab and click **List Prompts**. You should see all three: `research_prompt`, `summarize_prompt`, and `code_review_prompt`, each with its description.
**Step 4 ā Render a prompt.** Click a prompt, fill in its arguments in the form (e.g. `topic = "quantum computing"` for `research_prompt`), and click **Get Prompt**. The right panel shows the exact messages the server returns.
**Step 5 ā See the interesting cases:**
- On `summarize_prompt`, notice the `length` and `tone` fields only accept the `Literal` values from the type hints ā that's the argument schema in action.
- On `code_review_prompt`, paste any snippet as `code` and notice the result is **three messages** (`user` ā `assistant` ā `user`), not one ā a pre-seeded conversation.
When you're done, stop the Inspector with `Ctrl+C` in the terminal.
## š„ļø Use it from Claude Desktop
Add the server to your Claude Desktop config (`claude_desktop_config.json`):
```json
{
"mcpServers": {
"prompt-examples": {
"command": "uv",
"args": ["run", "--directory", "C:/absolute/path/to/fastMCP-2-0-example", "main.py"]
}
}
}
```
Restart Claude Desktop, then look for the prompts in the **+** (attachments) menu.
> š” **No API key needed.** Claude Desktop uses your Claude account, and this MCP server only serves prompt *templates* ā it never calls an LLM itself. You'd only need an Anthropic API key if you wrote your own client that sends the rendered prompts to the API.
## šļø Project structure
```
.
āāā main.py # The MCP server ā 3 prompt patterns, fully commented
āāā assets/ # Screenshots used in this README
āāā pyproject.toml # Project metadata & dependencies
āāā uv.lock # Locked dependency versions
āāā README.md
```
## š Learn more
- [FastMCP documentation](https://gofastmcp.com/) ā the framework used here
- [FastMCP: Prompts guide](https://gofastmcp.com/servers/prompts) ā deep dive on the prompt API
- [Model Context Protocol](https://modelcontextprotocol.io/) ā the open protocol specification
- [MCP: Prompts concept](https://modelcontextprotocol.io/docs/concepts/prompts) ā how clients consume prompts
## š ļø Tech stack
| Technology | Role |
|------------|------|
| [Python 3.12+](https://www.python.org/) | Language |
| [FastMCP 3.x](https://gofastmcp.com/) | MCP server framework |
| [uv](https://docs.astral.sh/uv/) | Dependency & environment management |
## š License
This project is licensed under the MIT License ā see the [LICENSE](LICENSE) file for details.
---
Made with ā¤ļø for the MCP community. Follow [@mcoding_off](https://x.com/mcoding_off) for more tutorials.
Maintenance
ActivityStale
ResponsivenessNo issues