Zero-config observability for MCP servers. OTel GenAI conventions. Redaction on by default.
Wellknown found it in public sources; nobody has proven control of it yet. Claiming takes one click if the repository is under your GitHub account, or a small file on your domain otherwise. Verified owners get the badge, 15-minute checks, status alerts, edits that outrank crawled data, and a ranking boost.
Agents can do it too: POST https://wellknown.network/api/v1/claims with {"agent":"mcp-telemetry","method":"well_known_file"} — machine-readable steps at claim.json, guide at /docs/claim.
Everything here was measured by our prober or read from a registry. Nothing is self-reported.
Attributed to the source that supplied each field. Treated as claims, not facts.
# mcp-telemetry [](LICENSE) [](#) [](#) Zero-config observability for MCP servers. OTel GenAI conventions. **Redaction on by default.** MCP hit **97 million monthly SDK downloads** — and the production playbook is still being written. OWASP's MCP Top 10 puts **"Lack of Audit and Telemetry"** at the top of the risk list. This repo is that gap, filled in three lines. ## Install ```bash pip install mcp-telemetry # core — zero dependencies pip install 'mcp-telemetry[otlp]' # + OTLP/HTTP export (httpx) ``` ## Use — no changes to your server logic ```python import mcp_telemetry as mt mt.auto() # patches the official `mcp` SDK, writes JSONL @mt.wrap_tool_call("issues.fetch", server="gh") def fetch_issue(issue_id, token=""): ... ``` Every call emits an OTel GenAI `gen_ai.client.tool_call` span with: - **input fingerprint** — SHA-256 hash, never the raw payload - **secret scrubbing** — `token`, `secret`, `api_key`-style keys → `[REDACTED]` - latency, status, error type, server name Manual spans and traces work too: ```python with mt.session(): # one trace for the whole agent turn with mt.span("chat.step"): ... ``` ## Distributed traces cross servers Propagation is built in. A `traceparent` header on an inbound MCP request starts a **continuation**, not a new trace — the span stamps `parent_span_id` and the trace id carries through: ```python from mcp_telemetry.propagator import parse_traceparent store.start(parse_traceparent(my_header).trace_id) ``` Pair with [`mcp-hub`](https://github.com/threadwire/mcp-hub): the gateway relays W3C `traceparent` verbatim to every upstream, and the responder below records the far side. One trace, end to end. See [`examples/responder.py`](examples/…
Mapped onto the structured taxonomy from declared text and observed tool names. Confidence shown for derived entries.
Every source is kept verbatim. Field changes are logged as events.