Skip to main content

摘要

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

规范

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

非规范性示例

理由

为何记录这一点?

这目前记录在别处,但并未作为 MCP 规范。将其纳入规范可确保依赖此模式的 SEP 能够完成,同时也让 MCP 组织内外的其他 SDK 得以完成,例如 LogfireToolHive 如果我们不记录这一共同关切,可能会出现不同的解释,例如将 traceparent 命名空间化为 io.modelcontextprotocol.traceparent,这会破坏跟踪(trace)和日志关联。

相关 SEP

  • SEP-1788 —— _meta 中的保留键;本 SEP 实现时应更新,加入 traceparenttracestatebaggage
  • SEP-2028 —— 在本 SEP 基础上,将 _meta 值转发到 HTTP 头部

向后兼容性

本 SEP 记录既有约定,向后兼容。

安全影响

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

参考实现

使用此模式的既有实现: