• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

stacklok / toolhive / 21908325847

11 Feb 2026 02:08PM UTC coverage: 61.614% (-0.002%) from 61.616%
21908325847

push

github

web-flow
Extract trace context from MCP _meta for distributed tracing (#3763)

* Fix SSE gauge leak, config bool handling, and metric error logging

- Fix SSE active connections gauge that was incremented but never
  decremented. Move increment into Handler with a defer decrement so
  the gauge correctly tracks SSE connection lifecycle.

- Fix config file `use-legacy-attributes: false` being silently ignored.
  Change UseLegacyAttributes from bool to *bool in app config so nil
  (not set) is distinguishable from explicit false. Add two test cases
  covering both scenarios.

- Log metric creation errors at debug level instead of silently
  discarding them. The OTEL SDK returns no-op instruments on error so
  there is no runtime risk, but logging aids troubleshooting.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Add mcp.protocol.version, client operation duration, span target naming, and client span kind

- Add mcp.protocol.version span attribute by reading the
  MCP-Protocol-Version header from streamable HTTP requests.

- Add mcp.client.operation.duration histogram metric to vMCP backend
  client using the OTEL MCP semconv bucket boundaries, alongside the
  existing toolhive_vmcp_backend_requests_duration custom metric.

- Include target name in span names per OTEL MCP semconv. Span names
  now follow the "{method} {target}" format, e.g. "tools/call
  github_search" instead of just "tools/call".

- Set SpanKindClient on vMCP backend call spans for proper distributed
  trace linking.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix tool counter per-request creation, omitempty config, and streamable-http version

- B3: Remove omitempty from TracingEnabled/MetricsEnabled struct tags
  so YAML `false` values are not silently dropped during serialization
- B6: Move tool call counter from per-request creation to struct
  initialization in NewHTTPMiddleware for consistency with other counters
- B10: Return empty string for streamable-htt... (continued)

8 of 8 new or added lines in 1 file covered. (100.0%)

6 existing lines in 3 files now uncovered.

42942 of 69695 relevant lines covered (61.61%)

74.6 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

79.05
/pkg/transport/proxy/httpsse/http_proxy.go


Source Not Available

STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc