OpenTelemetry
See each tool call clearly.
Metrics for counts and latency. Traces for execution and downstream requests. Logs for bounded outcomes.
Signals and identity
| Signal | Contract |
|---|---|
| Counter | aroha.mcp.tool.calls |
| Duration histogram | aroha.mcp.tool.duration · seconds |
| Trace | mcp.tool.call · real SDK context |
| Log | mcp.tool.completed · correlated span context |
Service identity is aroha-mcp in namespace aroha-retreat, with actual package version and environment. Dimensions use the bounded tool name, outcome and error code. Unknown tool names are normalized.
Configure an exporter
OTEL_EXPORTER_OTLP_ENDPOINT=https://your-approved-collector/otlp OTEL_EXPORTER_OTLP_HEADERS=Authorization=Bearer%20<secret-reference>
Use your collector's real base path. For Dynatrace it normally ends in /api/v2/otlp; the SDK appends /v1/traces, /v1/metrics and /v1/logs. Supply exporter credentials through your host's secret configuration. Never embed them in the npm package or pass them as tool inputs.
Privacy and failure behavior
No tool arguments, results, contacts, notes, tokens, free-text provider errors or private URLs enter logs, metrics or spans. Real traceparent flows to the downstream API and safe request IDs return for correlation. Export queues and timeouts are bounded; telemetry failure does not reverse a successful API read.
Evidence has separate stages
Local tests, collector acceptance, tenant-searchable records and native navigation are separate results. The package's synthetic three-signal test verifies encoding and transport; it cannot certify your tenant configuration, sampling or retention.