Your MCP traces break at the client→server boundary. Fixed it with W3C trace context
If you instrument an MCP server with OTel, you get a clean trace of what happened inside the server. But it's an orphan — it doesn't connect to the agent trace that called it. You end up with two disconnected trees and no way to answer "which agent turn caused this slow tool call."
The fix is W3C traceparent propagation through the MCP request, so the server span becomes a child of the agent span. Shipped that in opentel-mcp v0.11.0.
Also in this release:
- Per-model pricing overrides — the built-in table covers 19 models, but if you're on a negotiated rate or a model I haven't added, you can override it instead of getting wrong cost numbers
- Embedding model pricing, which was previously just missing
Still the only Node library I know of that catches CallToolResult.isError=true inside an HTTP 200 and marks the span as ERROR rather than success. That one silently ruins error-rate dashboards.
npm: https://www.npmjs.com/package/opentel-mcp
Docs and setup: https://opentel-mcp-site.pages.dev/
Happy to answer anything about the tracing model — the two-axis ToolOutcome × ObservationIntegrity contract in particular took a few iterations to get right.