docs/python-sdk/fastmcp-telemetry.mdx
fastmcp.telemetryOpenTelemetry 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: ```python 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")
```
get_tracer <sup><a href="https://github.com/PrefectHQ/fastmcp/blob/main/src/fastmcp/telemetry.py#L38" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>get_tracer(version: str | None = None) -> Tracer
Get the FastMCP tracer for creating spans.
Args:
version: Optional version string for the instrumentationReturns:
inject_trace_context <sup><a href="https://github.com/PrefectHQ/fastmcp/blob/main/src/fastmcp/telemetry.py#L50" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>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 contextReturns:
record_span_error <sup><a href="https://github.com/PrefectHQ/fastmcp/blob/main/src/fastmcp/telemetry.py#L76" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>record_span_error(span: Span, exception: BaseException) -> None
Record an exception on a span and set error status.
extract_trace_context <sup><a href="https://github.com/PrefectHQ/fastmcp/blob/main/src/fastmcp/telemetry.py#L82" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>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: