SEP-414:记录 OpenTelemetry Trace Context 传播约定
社区译文;来源: MCP 29affa6b
| 字段 | 值 |
|---|---|
| SEP | 414 |
| 标题 | 记录 OpenTelemetry Trace Context 传播约定 |
| 状态 | Final |
| 类型 | 标准跟踪 |
| 创建日期 | 2025-04-25 |
| 作者 | Adrian Cole(@codefromthecrypt) |
| 发起人 | Marcelo Trylesinski(@Kludex) |
| PR | #414 |
摘要
本 SEP 记录 MCP 中 OpenTelemetry(OTel)trace context 的传播约定。
MCP 的 OTel 语义约定规定使用 _meta 作为 W3C Trace Context key 的载体。C# SDK 和其他实现已经采用这种做法。
本规范记录了 _meta 中 key 不遵循 DNS 前缀约定的例外。这使现有实现与新实现之间能够互操作,并为相关 SEP(例如 SEP-2028)奠定基础。
规范
本 SEP 在 MCP 规范中补充文档,说明:
通过
_meta传播 OTel trace context 时,traceparent、tracestate和baggagekey 遵循 W3C Trace Context 和 W3C Baggage 的值格式。提供一个非规范性示例,展示
_meta中的 trace context。添加说明,阐明为何这是
_meta中 key 使用 DNS 前缀规则的例外:为了与现有实现及 OpenTelemetry 语义约定保持兼容。
ACP 中的等效文档变更见 agentclientprotocol/agent-client-protocol#297。
非规范性示例
{
"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 也能采用它,例如 Logfire 和 ToolHive。
如果我们不记录这一共同关注点,可能会出现不同解释,例如将 traceparent 加上命名空间而写成 io.modelcontextprotocol.traceparent,这会破坏 trace 和日志关联。
相关 SEP
- SEP-1788 - 关于
_meta中保留 key;实现本 SEP 时应加入traceparent、tracestate和baggage - SEP-2028 - 在本 SEP 基础上将
_meta值转发到 HTTP header
向后兼容性
本 SEP 记录的是现有约定,因此向后兼容。
安全影响
_meta 中的 trace context 可能包含关联 ID。实现应遵循适合其环境的现有数据处理指导。
参考实现
采用此模式的现有实现: