---
schema: rendered-html/v1
title: "Getting Prompts - FastMCP"
source_url: https://gofastmcp.com/clients/prompts
generated_at: 2026-06-11T19:37:22.629423+00:00
---




[FastMCP home page![light logo](images/gofastmcp__com__clients__prompts__wordmark.avif)![dark logo](images/gofastmcp__com__clients__prompts__wordmark-white.avif)](gofastmcp__com.md)







Operations

Getting Prompts

















  - [Tools](gofastmcp__com__clients__tools.md)
  - [Resources](gofastmcp__com__clients__resources.md)
  - [Prompts](/clients/prompts)
  - [Sampling](gofastmcp__com__clients__sampling.md)
  - [Elicitation](gofastmcp__com__clients__elicitation.md)
  - [Tasks

    NEW](gofastmcp__com__clients__tasks.md)
  - [Progress](gofastmcp__com__clients__progress.md)
  - [Logging](gofastmcp__com__clients__logging.md)
  - [Roots](gofastmcp__com__clients__roots.md)
  - [Notifications](gofastmcp__com__clients__notifications.md)






- [Basic Usage](#basic-usage)
- [Argument Serialization](#argument-serialization)
- [Working with Results](#working-with-results)
- [Version Selection](#version-selection)
- [Multi-Server Clients](#multi-server-clients)
- [Raw Protocol Access](#raw-protocol-access)

Operations

# Getting Prompts


Retrieve rendered message templates with automatic argument serialization.


New in 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) Basic Usage

Request a rendered prompt with `get_prompt()`:

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:

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) Argument Serialization

New in version `2.9.0`
FastMCP automatically serializes complex arguments to JSON strings as required by the MCP specification. You can pass typed objects directly:

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) Working with Results

The `get_prompt()` method returns a `GetPromptResult` containing a list of messages:

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:

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:

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) Version Selection

When a server exposes multiple versions of a prompt, you can request a specific version:

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](gofastmcp__com__servers__versioning.md) for how to discover available versions.

## [​](#multi-server-clients) Multi-Server Clients

When using multi-server clients, prompts are accessible directly without prefixing:

async with client:  # Multi-server client
    result1 = await client.get_prompt("weather_prompt", {"city": "London"})
    result2 = await client.get_prompt("assistant_prompt", {"query": "help"})

## [​](#raw-protocol-access) Raw Protocol Access

For complete control, use `get_prompt_mcp()` which returns the full MCP protocol object:

async with client:
    result = await client.get_prompt_mcp("example_prompt", {"arg": "value"})
    # result -> mcp.types.GetPromptResult

[Reading Resources

Previous](gofastmcp__com__clients__resources.md)[LLM Sampling

Next](gofastmcp__com__clients__sampling.md)






