Skip to content

Commit 6abe9aa

Browse files
RFD Draft: Meta Field Propagation Conventions
Document `params._meta` as the convention for propagating metadata from clients to agents, such as trace identifiers or correlation IDs. This aligns with MCP, enabling shared instrumentation since both protocols use stdio JSON-RPC transports.
1 parent 55f5bea commit 6abe9aa

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

docs/rfds/meta-propagation.mdx

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
---
2+
title: "Meta Field Propagation Conventions"
3+
---
4+
5+
Author(s): [Adrian Cole](https://github.com/codefromthecrypt)
6+
7+
## Elevator pitch
8+
9+
Document `params._meta` as the convention for propagating metadata from clients to agents, such as trace identifiers or correlation IDs. This aligns with [MCP](https://modelcontextprotocol.io/), enabling shared instrumentation since both protocols use stdio JSON-RPC transports.
10+
11+
## Status quo
12+
13+
ACP clients already propagate context to agents via `_meta`. For example, `requestId` is used for request correlation in [AionUi](https://github.com/iOfficeAI/AionUi/blob/main/src/common/codex/types/eventData.ts#L12-L16).
14+
15+
However, the [extensibility](../protocol/extensibility) documentation does not specify the `_meta` type or document its use for propagation. Without documentation, parties must coordinate ad hoc, which can lead to portability accidents (such as one side using `_meta.traceparent` and the other `_meta.otel.traceparent`). Documenting that propagated fields are root keys in `_meta` prevents this.
16+
17+
## What we propose to do about it
18+
19+
Update the [extensibility](../protocol/extensibility#the-_meta-field) documentation with two changes:
20+
21+
1. Add the type `{ [key: string]: unknown }` to the existing summary sentence. This type is compatible with MCP SDKs.
22+
2. Add a new paragraph after the JSON example about propagation conventions.
23+
24+
## Shiny future
25+
26+
- Same instrumentation (OpenInference, etc.) works for both ACP and MCP.
27+
- Observability tools can correlate traces across protocols.
28+
29+
## Implementation details
30+
31+
**Change 1**: Update the existing summary sentence in [extensibility](../protocol/extensibility#the-_meta-field):
32+
33+
```diff
34+
-All types in the protocol include a `_meta` field that implementations can use to attach custom information.
35+
+All types in the protocol include a `_meta` field with type `{ [key: string]: unknown }` that implementations can use to attach custom information.
36+
```
37+
38+
**Change 2**: After the JSON example, before "Implementations **MUST NOT**", add this paragraph:
39+
40+
> Clients may propagate fields to the agent for correlation purposes, such as `requestId`. [OpenTelemetry SDKs](https://opentelemetry.io/docs/languages/sdk-configuration/general/#otel_propagators) default to propagating W3C `traceparent`, `tracestate`, and `baggage` fields as root keys in `_meta`.
41+
42+
## FAQ
43+
44+
### Why document this now?
45+
46+
Clients already propagate context via `_meta`. Documenting prevents incompatible drift and enables shared tooling with MCP.
47+
48+
### Why reference MCP?
49+
50+
ACP and MCP are the two core agentic protocols, both using stdio JSON-RPC. Where `_meta` types are compatible, instrumentation code can be abstracted and reused for both:
51+
52+
Here are several MCP SDKs that propagate W3C trace-context in `_meta`:
53+
- [MCP C# SDK](https://github.com/modelcontextprotocol/csharp-sdk) - native W3C trace-context propagation
54+
- [OpenInference](https://github.com/Arize-ai/openinference) - Python and TypeScript MCP instrumentation (collaboration between Arize and Elastic)
55+
- [curioswitch/mcp-go-sdk-otel](https://github.com/curioswitch/mcp-go-sdk-otel) - Go MCP instrumentation
56+
57+
## Revision history
58+
59+
- 2025-11-28: Initial draft

0 commit comments

Comments
 (0)