mirror of
https://github.com/PrefectHQ/fastmcp.git
synced 2026-08-09 07:09:11 +02:00
fastmcp.types re-exported 29 mcp_types symbols verbatim, which was pointless indirection users had to discover. It now holds only Textarea, the one type FastMCP actually defines; everything else imports from mcp_types directly. These mirrors were added during unreleased SDK v2 migration work and never shipped, so this is not a breaking change.
147 lines
4.3 KiB
Text
147 lines
4.3 KiB
Text
---
|
|
title: Getting Prompts
|
|
sidebarTitle: Prompts
|
|
description: Retrieve rendered message templates with automatic argument serialization.
|
|
icon: message-lines
|
|
---
|
|
|
|
import { VersionBadge } from '/snippets/version-badge.mdx'
|
|
|
|
<VersionBadge version="2.0.0" />
|
|
|
|
Use this when you need to retrieve server-defined message templates for LLM interactions.
|
|
|
|
Prompts are reusable message templates exposed by MCP servers. They can accept arguments to generate personalized message sequences for LLM interactions.
|
|
|
|
## Basic Usage
|
|
|
|
Request a rendered prompt with `get_prompt()`:
|
|
|
|
```python
|
|
async with client:
|
|
# Simple prompt without arguments
|
|
result = await client.get_prompt("welcome_message")
|
|
# result -> mcp_types.GetPromptResult
|
|
|
|
# Access the generated messages
|
|
for message in result.messages:
|
|
print(f"Role: {message.role}")
|
|
print(f"Content: {message.content}")
|
|
```
|
|
|
|
Pass arguments to customize the prompt:
|
|
|
|
```python
|
|
async with client:
|
|
result = await client.get_prompt("user_greeting", {
|
|
"name": "Alice",
|
|
"role": "administrator"
|
|
})
|
|
|
|
for message in result.messages:
|
|
print(f"Generated message: {message.content}")
|
|
```
|
|
|
|
## Argument Serialization
|
|
|
|
<VersionBadge version="2.9.0" />
|
|
|
|
FastMCP automatically serializes complex arguments to JSON strings as required by the MCP specification. You can pass typed objects directly:
|
|
|
|
```python
|
|
from dataclasses import dataclass
|
|
|
|
@dataclass
|
|
class UserData:
|
|
name: str
|
|
age: int
|
|
|
|
async with client:
|
|
result = await client.get_prompt("analyze_user", {
|
|
"user": UserData(name="Alice", age=30), # Automatically serialized
|
|
"preferences": {"theme": "dark"}, # Dict serialized
|
|
"scores": [85, 92, 78], # List serialized
|
|
"simple_name": "Bob" # Strings unchanged
|
|
})
|
|
```
|
|
|
|
The client handles serialization using `pydantic_core.to_json()` for consistent formatting. FastMCP servers automatically deserialize these JSON strings back to the expected types.
|
|
|
|
## Working with Results
|
|
|
|
The `get_prompt()` method returns a `GetPromptResult` containing a list of messages:
|
|
|
|
```python
|
|
async with client:
|
|
result = await client.get_prompt("conversation_starter", {"topic": "climate"})
|
|
|
|
for i, message in enumerate(result.messages):
|
|
print(f"Message {i + 1}:")
|
|
print(f" Role: {message.role}")
|
|
print(f" Content: {message.content.text if hasattr(message.content, 'text') else message.content}")
|
|
```
|
|
|
|
Prompts can generate different message types. System messages configure LLM behavior:
|
|
|
|
```python
|
|
async with client:
|
|
result = await client.get_prompt("system_configuration", {
|
|
"role": "helpful assistant",
|
|
"expertise": "python programming"
|
|
})
|
|
|
|
# Access the returned messages
|
|
message = result.messages[0]
|
|
print(f"Prompt: {message.content}")
|
|
```
|
|
|
|
Conversation templates generate multi-turn flows:
|
|
|
|
```python
|
|
async with client:
|
|
result = await client.get_prompt("interview_template", {
|
|
"candidate_name": "Alice",
|
|
"position": "Senior Developer"
|
|
})
|
|
|
|
# Multiple messages for a conversation flow
|
|
for message in result.messages:
|
|
print(f"{message.role}: {message.content}")
|
|
```
|
|
|
|
## Version Selection
|
|
|
|
<VersionBadge version="3.0.0" />
|
|
|
|
When a server exposes multiple versions of a prompt, you can request a specific version:
|
|
|
|
```python
|
|
async with client:
|
|
# Get the highest version (default)
|
|
result = await client.get_prompt("summarize", {"text": "..."})
|
|
|
|
# Get a specific version
|
|
result_v1 = await client.get_prompt("summarize", {"text": "..."}, version="1.0")
|
|
```
|
|
|
|
See [Metadata](/servers/versioning#version-discovery) for how to discover available versions.
|
|
|
|
## Multi-Server Clients
|
|
|
|
When using multi-server clients, prompts are mounted with the server name as a prefix, just like tools:
|
|
|
|
```python
|
|
async with client: # Multi-server client
|
|
result1 = await client.get_prompt("weather_weather_prompt", {"city": "London"})
|
|
result2 = await client.get_prompt("assistant_assistant_prompt", {"query": "help"})
|
|
```
|
|
|
|
## Raw Protocol Access
|
|
|
|
For complete control, use `get_prompt_mcp()` which returns the full MCP protocol object:
|
|
|
|
```python
|
|
async with client:
|
|
result = await client.get_prompt_mcp("example_prompt", {"arg": "value"})
|
|
# result -> mcp_types.GetPromptResult
|
|
```
|