Skip to main content
最终版标准轨道
字段
SEP414
标题记录 OpenTelemetry 跟踪上下文传播约定
状态最终版
类型标准轨道
创建日期2025-04-25
作者Adrian Cole (@codefromthecrypt)
发起人Marcelo Trylesinski (@Kludex)
PR#414

摘要

本 SEP 记录了 MCP 中 OpenTelemetry (OTel) 跟踪上下文传播的约定。 MCP 的 OTel 语义约定 指定使用 _meta 作为 W3C 跟踪上下文键的载体。这已经在 C# SDK 和其他实现中实践。 本规范记录了 _meta 中键的 DNS 前缀约定的一个例外。 这使得现有和新实现之间能够互操作,并为相关的 SEP(例如 SEP-2028)奠定基础。

规范

本 SEP 向 MCP 规范添加了文档,注明:
  1. 当 OTel 跟踪上下文通过 _meta 传播时,键 traceparenttracestatebaggage 遵循 W3C 跟踪上下文W3C Baggage 值格式。
  2. 一个展示 _meta 中跟踪上下文的非规范性示例。
  3. 一条说明,澄清为何这是 _meta 中 DNS 前缀键的例外:为了与现有实现和 OpenTelemetry 语义约定保持兼容。
参见 agentclientprotocol/agent-client-protocol#297 了解 ACP 中的等效文档更改。

非规范性示例

{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "get_weather",
    "arguments": {
      "location": "New York"
    },
    "_meta": {
      "traceparent": "00-0af7651916cd43dd8448eb211c80319c-00f067aa0ba902b7-01"
    }
  }
}

理由

为什么要记录这个?

目前这在其他地方有记录,但不是作为 MCP 规范。这样做可以确保依赖此模式的 SEP 能够完成,以及 MCP 组织内外的其他 SDK 也能完成,例如 LogfireToolHive 如果我们不记录这个共同关注点,可能会出现不同的解释,例如将 traceparent 命名空间化为 io.modelcontextprotocol.traceparent,这将破坏跟踪和日志关联。

相关的 SEP

  • SEP-1788 - _meta 中的保留键;当此 SEP 实施时,应使用 traceparenttracestatebaggage 进行更新
  • SEP-2028 - 在此 SEP 基础上构建,用于将 _meta 值转发到 HTTP 头

向后兼容性

本 SEP 记录了现有约定,并且是向后兼容的。

安全影响

_meta 中的跟踪上下文可能包含关联 ID。实现应遵循适用于其环境的现有数据处理指南。

参考实现

使用此模式的现有实现: