Skip to main content

Documentation Index

Fetch the complete documentation index at: https://gofastmcp.com/llms.txt

Use this file to discover all available pages before exploring further.

fastmcp.telemetry

OpenTelemetry instrumentation for FastMCP. This module provides native OpenTelemetry integration for FastMCP servers and clients. It uses only the opentelemetry-api package, so telemetry is a no-op unless the user installs an OpenTelemetry SDK and configures exporters. Example usage with SDK:
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import ConsoleSpanExporter, SimpleSpanProcessor

# Configure the SDK (user responsibility)
provider = TracerProvider()
provider.add_span_processor(SimpleSpanProcessor(ConsoleSpanExporter()))
trace.set_tracer_provider(provider)

# Now FastMCP will emit traces
from fastmcp import FastMCP
mcp = FastMCP("my-server")

Functions

get_tracer

get_tracer(version: str | None = None) -> Tracer
Get the FastMCP tracer for creating spans. Args:
  • version: Optional version string for the instrumentation
Returns:
  • A tracer instance. Returns a no-op tracer if no SDK is configured.

inject_trace_context

inject_trace_context(meta: dict[str, Any] | None = None) -> dict[str, Any] | None
Inject current trace context into a meta dict for MCP request propagation. Args:
  • meta: Optional existing meta dict to merge with trace context
Returns:
  • A new dict containing the original meta (if any) plus trace context keys,
  • or None if no trace context to inject and meta was None

record_span_error

record_span_error(span: Span, exception: BaseException) -> None
Record an exception on a span and set error status.

extract_trace_context

extract_trace_context(meta: dict[str, Any] | None) -> Context
Extract trace context from an MCP request meta dict. If already in a valid trace (e.g., from HTTP propagation), the existing trace context is preserved and meta is not used. Args:
  • meta: The meta dict from an MCP request (ctx.request_context.meta)
Returns:
  • An OpenTelemetry Context with the extracted trace context,
  • or the current context if no trace context found or already in a trace