Independent, read-only measurement of the agent tool layer.
AI agents are increasingly given the ability to call remote tools over the Model Context Protocol. A person, or an agent acting for them, picks a server from a public registry and grants it access to data and actions. There is currently no independent way to check anything about that server first: whether it is alive, who runs it, which protocol version it speaks, or whether it still behaves the way its listing says.
The public index is measurably unreliable. In a census of 10,716 registry entries across 7,726 distinct hosts (probed 2026-07-30), the registry's own metadata marked 10,711 of 10,716 as "active", while 1,942 endpoints (18.1%) did not respond at all. On re-probing, 78 of 331 re-probed broken endpoints (23.6%) had healed nine days later β so the index is not merely wrong, it is wrong differently every day. That is why this is a continuously running instrument and not a report. (Those 331 are the subset whose operators published a contact address, not a random sample of the 1,942; the healing rate for the rest is unmeasured.)
python -m mcp_observatory https://mcp.deepwiki.com/mcpLIVE https://mcp.deepwiki.com/mcp
MCP initialize succeeded (protocol 2025-06-18) [DeepWiki 2.14.3, 3 tools]
(Real output, 2026-08-18. The server name, version and tool count are whatever that server advertises on the day you run it β they are read, not asserted here.)
Add --json for machine-readable output.
These are design commitments, not current limitations:
- It never invokes a tool. The manifest is read via
tools/list;tools/callis never issued. Reading what a server offers is observation; invoking it is participation. - It never supplies credentials. A gated endpoint is recorded as gated, and its internals stay unmeasured.
- It refuses to guess. Rate limiting, TLS errors, timeouts and 5xx are recorded as
INCONCLUSIVE, never as breakage. Only an unresolvable hostname or an origin answering 404/410 counts as dead. - It voids its own run rather than report from a bad vantage point. Every run checks a reachable control and an unresolvable control first. If either misbehaves, no verdicts are produced at all.
That last group is the actual product. Anyone can write a script that calls endpoints and counts non-200s; the resulting number will be large and wrong. See docs/METHODOLOGY.md for the census where exactly that happened β a 73.9% headline that collapsed to roughly one verified defect once each category was opened by hand β and the rules adopted in response.
| verdict | meaning | counted as failure? |
|---|---|---|
LIVE |
completed an MCP initialize, or answered JSON-RPC |
no |
GATED |
alive, requires credentials we will not supply | no |
DEAD |
hostname does not resolve, or origin answered 404/410 | yes |
INCONCLUSIVE |
defended, rate-limited, timed out, redirected, or empty 200 | no |
Early. The probe and its classifier work and are tested; the longitudinal pipeline, the
conformance suite (mcp-lint) and the public dataset are not built yet.
python3 tests/run.py # no dependencies
python3 -m pytest tests/ -q # or pytest, if you have itThe 2026-07-30 census the numbers above come from is published in full and free:
census-2026-07-30.csv
β all 10,716 URLs, one row per endpoint, raw probe_class and our bucket in separate columns
so you can discard our interpretation and keep the observation. The write-up is at
State of the MCP Registry.
The continuing work around that snapshot β a daily reachability drift series since 2026-08-02, a re-probe of the full registry run on request, structured JSON, and the successor analysis for superseded endpoints β is sold as a $39 package. That is disclosed here rather than kept off the page, because a measurement instrument that earns money from what it measures should say so where it states its method.
Two other public censuses of this registry exist and are worth your time: Fetchgate (15,329 URLs probed 2026-08-27, per-server data free under CC BY 4.0) and mcpqueen (free CSV, monthly). Both are larger and fresher than our snapshot. Their 22.7% "dead, broken, or not MCP" sits 0.7 points from our 23.4% unusable on a different population a month later β independent convergence is better evidence for the method than anything either of us could assert alone.
This project is written and operated with heavy use of a generative AI system (Claude Opus 5), under human direction. That is disclosed here for the same reason the methodology above exists: an AI-operated measurement process produces confident, plausible, wrong results at a rate no human-paced process would survive, and the countermeasures are only credible if you know they were needed. Every number in this repository is re-derivable from published code and published data; none of it asks you to take anyone's word.
EUPL-1.2 β full licence text as published by the European Commission. Copyright notice in NOTICE.