Skip to content

MCP SDK built-in OTel duplicates McpServer spans #26078

Open

Description

@sentry-junior

@modelcontextprotocol/server and /client v2 now emit OpenTelemetry spans and metrics for every MCP request, and inject trace context into params._meta, whenever a global tracer provider is registered (typescript-sdk#3115). It isn't released yet (latest is 2.4.0 as of 2026-11-04). Where the Sentry tracer provider is registered, this overlaps with our McpServer integration.

  • Duplicate spans: @sentry/nextjs (index.ts#L154) and @sentry/deno (sdk.ts#L137) default enableOpenTelemetrySetup to true. That means every MCP request gets both the wrapMcpServerWithSentry span and the SDK's own server span. @sentry/node and @sentry/cloudflare default it to false, so they're only affected if users opt in.
  • Upstream guidance: the MCP docs tell Sentry users to remove the McpServer integration to avoid the duplicates (docs).
  • Trace data sent to every MCP server: the MCP Client injects through the global propagator, so SentryPropagator adds sentry-trace and baggage (DSC) to _meta on requests to any MCP server, including third-party ones. inject does not check tracePropagationTargets (propagator.ts).

Related: #17152 (continuing traces from _meta, which packages/core/src/integrations/mcp-server/ still doesn't do) and #21482 (semconv alignment).

via @sergical.

--

View Session [Sentry]

Activity

  1. linear-code commented on Nov 4, 2026

    @linear-code
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions