Register the W3CTraceContextPropagator and W3CBaggagePropagator (or CompositePropagator) on the global propagator at SDK initialization
On the sending side call propagator.inject(context.active(), carrier, setter) where carrier is the outgoing headers object
On the receiving side call propagator.extract(context.ROOT_CONTEXT, carrier, getter) to restore trace context from incoming headers
Wrap subsequent work in context.with(extractedContext, ...) so spans created during request handling are children of the upstream span
Use Baggage.setValue / Baggage.getEntry to attach and read request-scoped metadata (tenant ID, feature flag) without span attributes
Known gotchas
Mixing B3 single-header and W3C TraceContext propagators between services produces orphaned traces unless both sides register the same propagators
Baggage is not automatically added to span attributes; explicit code is required to copy baggage entries into spans for querying in a backend
When using async frameworks the context may not flow through callback chains automatically; use the SDK's async context manager or explicit context passing
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp