---
schema: rendered-html/v1
title: "LLM Sampling - FastMCP"
source_url: https://gofastmcp.com/clients/sampling
generated_at: 2026-06-11T19:37:26.193065+00:00
---




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







Operations

LLM Sampling

















  - [Tools](gofastmcp__com__clients__tools.md)
  - [Resources](gofastmcp__com__clients__resources.md)
  - [Prompts](gofastmcp__com__clients__prompts.md)
  - [Sampling](/clients/sampling)
  - [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)






- [Handler Template](#handler-template)
- [Handler Parameters](#handler-parameters)
- [Built-in Handlers](#built-in-handlers)
  - [OpenAI Handler](#openai-handler)
  - [Anthropic Handler](#anthropic-handler)
  - [Google Gemini Handler](#google-gemini-handler)
- [Sampling Capabilities](#sampling-capabilities)
- [Tool Execution](#tool-execution)

Operations

# LLM Sampling


Handle server-initiated LLM completion requests.


New in version `2.0.0`
Use this when you need to respond to server requests for LLM completions.
MCP servers can request LLM completions from clients during tool execution. This enables servers to delegate AI reasoning to the client, which controls which LLM is used and how requests are made.

## [​](#handler-template) Handler Template

from fastmcp.client.sampling import SamplingMessage, SamplingParams, RequestContext

async def sampling_handler(
    messages: list[SamplingMessage],
    params: SamplingParams,
    context: RequestContext
) -> str:
    """
    Handle server requests for LLM completions.

    Args:
        messages: Conversation messages to send to the LLM
        params: Sampling parameters (temperature, max_tokens, etc.)
        context: Request context with metadata

    Returns:
        Generated text response from your LLM
    """
    # Extract message content
    conversation = []
    for message in messages:
        content = message.content.text if hasattr(message.content, 'text') else str(message.content)
        conversation.append(f"{message.role}: {content}")

    # Use the system prompt if provided
    system_prompt = params.systemPrompt or "You are a helpful assistant."

    # Integrate with your LLM service here
    return "Generated response based on the messages"

client = Client(
    "my_mcp_server.py",
    sampling_handler=sampling_handler,

## [​](#handler-parameters) Handler Parameters

## SamplingMessage

[​](#param-role)

role

Literal["user", "assistant"]

The role of the message

[​](#param-content)

content

TextContent | ImageContent | AudioContent

The content of the message. TextContent has a `.text` attribute.

## SamplingParams

[​](#param-system-prompt)

systemPrompt

str | None

Optional system prompt the server wants to use

[​](#param-model-preferences)

modelPreferences

ModelPreferences | None

Server preferences for model selection (hints, cost/speed/intelligence priorities)

[​](#param-temperature)

temperature

float | None

Sampling temperature

[​](#param-max-tokens)

maxTokens

int

Maximum tokens to generate

[​](#param-stop-sequences)

stopSequences

list[str] | None

Stop sequences for sampling

[​](#param-tools)

tools

list[Tool] | None

Tools the LLM can use during sampling

[​](#param-tool-choice)

toolChoice

ToolChoice | None

Tool usage behavior (`auto`, `required`, or `none`)

## [​](#built-in-handlers) Built-in Handlers

FastMCP provides built-in handlers for OpenAI, Anthropic, and Google Gemini APIs that support the full sampling API including tool use.

### [​](#openai-handler) OpenAI Handler

New in version `2.11.0`

from fastmcp.client.sampling.handlers.openai import OpenAISamplingHandler

client = Client(
    "my_mcp_server.py",
    sampling_handler=OpenAISamplingHandler(default_model="gpt-4o"),

For OpenAI-compatible APIs (like local models):

from openai import AsyncOpenAI

client = Client(
    "my_mcp_server.py",
    sampling_handler=OpenAISamplingHandler(
        default_model="llama-3.1-70b",
        client=AsyncOpenAI(base_url="http://localhost:8000/v1"),

Install the OpenAI handler with `pip install fastmcp[openai]`.

### [​](#anthropic-handler) Anthropic Handler

New in version `2.14.1`

from fastmcp.client.sampling.handlers.anthropic import AnthropicSamplingHandler

client = Client(
    "my_mcp_server.py",
    sampling_handler=AnthropicSamplingHandler(default_model="claude-sonnet-4-5"),

Install the Anthropic handler with `pip install fastmcp[anthropic]`.

### [​](#google-gemini-handler) Google Gemini Handler

New in version `3.1.0`

from fastmcp.client.sampling.handlers.google_genai import GoogleGenaiSamplingHandler

client = Client(
    "my_mcp_server.py",
    sampling_handler=GoogleGenaiSamplingHandler(default_model="gemini-2.0-flash"),

Install the Google Gemini handler with `pip install fastmcp[gemini]`.

## [​](#sampling-capabilities) Sampling Capabilities

When you provide a `sampling_handler`, FastMCP automatically advertises full sampling capabilities to the server, including tool support. To disable tool support for simpler handlers:

from mcp.types import SamplingCapability

client = Client(
    "my_mcp_server.py",
    sampling_handler=basic_handler,
    sampling_capabilities=SamplingCapability(),  # No tool support

## [​](#tool-execution) Tool Execution

Tool execution happens on the server side. The client’s role is to pass tools to the LLM and return the LLM’s response (which may include tool use requests). The server then executes the tools and may send follow-up sampling requests with tool results.

To implement a custom sampling handler, see the [handler source code](https://github.com/PrefectHQ/fastmcp/tree/main/fastmcp_slim/fastmcp/client/sampling/handlers) as a reference.

[Getting Prompts

Previous](gofastmcp__com__clients__prompts.md)[User Elicitation

Next](gofastmcp__com__clients__elicitation.md)






