ITADN
Kong/kong/Issues

Support for OpenTelemetry Context Propagation for MCP via _meta field

#14843Openpunitmahes 创建于 2026-03-11
P
punitmahescommented
## Description I am looking to implement end-to-end distributed tracing for an AI agent architecture using the **Model Context Protocol (MCP)**. Currently, the MCP Auto Instrumentation SDK propagates OpenTelemetry context via a reserved `_meta` field within the JSON-RPC message body, rather than standard HTTP headers. As the **AI MCP Proxy** plugin acts as a protocol bridge, I am proposing a feature to extract tracing context from this `_meta` field to ensure trace continuity through the Kong Gateway. ## Background: Why `_meta`? The Model Context Protocol (MCP) standardized the use of the `_meta` property bag for several reasons: * **Transport Agnosticism:** MCP is designed to work over `stdio`, WebSockets, and SSE. Since `stdio` lacks HTTP headers, transport-independent propagation is required. * **Multiplexing:** Over Streamable HTTP (SSE), multiple tool calls can occur within one long-lived HTTP request. Header-based tracing only captures the connection, whereas `_meta` allows each tool call to have its own unique trace/span parentage. * **Specification:** This convention is formalized in the MCP specification (referencing [PR #414](https://github.com/modelcontextprotocol/specification/pull/414)), reserving keys like `traceparent`, `tracestate`, and `baggage` within the `_meta` object. ## Proposed Capability Since the **AI MCP Proxy** plugin already parses the request body to perform protocol translation, it would be highly beneficial if the plugin could: 1. **Extract** the `traceparent` (and `tracestate`/`baggage`) from `$.params._meta`. 2. **Map** this to the gateway's internal OpenTelemetry span as a remote parent. 3. **Inject** the updated context into the outgoing headers for the upstream service. ### Example Payload ```json { "jsonrpc": "2.0", "id": "1", "method": "tools/call", "params": { "name": "get_weather", "arguments": { "location": "San Francisco" }, "_meta": { "traceparent": "00-0af7651916cd43dd8448eb211c80319c-00f067aa0ba902b7-01", "tracestate": "...", "baggage": "..." } } } ``` ## Questions / Discussion * **Existing Hooks:** Does the current **AI MCP Proxy** plugin (or the core OpenTelemetry plugin) have an existing hook or configuration option to extract OTel context from the request body rather than headers? * **Roadmap:** Is body-based context extraction on the formal roadmap for Kong’s AI Gateway observability features, especially given the rising adoption of the MCP standard? ## References * [MCP Specification: Basic _meta](https://modelcontextprotocol.io/specification/draft/basic#_meta) * [OpenTelemetry Semantic Conventions for GenAI MCP](https://opentelemetry.io/docs/specs/semconv/gen-ai/mcp/) **Happy to implment a solution if needed.**
1 条评论