Hello — a data-quality report, checkable one line at a time.
I sent one initialize handshake to every remote endpoint the registry
declares. Reading, not calling: no tools/call was ever issued, and no
credential was ever sent. First run 2026-09-10, repeated weekly since —
generated from the live registry on 2026-09-15:
|
|
| 304 |
404 or 410 to initialize |
| 254 |
the host no longer resolves in DNS |
| 41 |
unreachable (connection or TLS failure) |
| 96 |
server error or timeout, confirmed by a second observation |
| 56 |
answers, but is not a conformant MCP endpoint |
| 8 |
accept initialize, then reject the mandatory notifications/initialized with HTTP 400 — a client following the specification breaks here |
And separately, needing no network at all:
|
|
| 70 |
the entry's URL still contains an unexpanded template placeholder, e.g. https://host:{HAPI_PORT}/mcp |
Those 70 were never probed — they are broken on
their face, and they look like the cheapest thing to fix: they could be
rejected at submission.
What I deliberately did not count
A server answering 401 or 403 is alive, and is not in these figures at all.
56 HTTP 429s were discarded rather than recorded. A sequential re-probe, 2 s
apart, found 9 of 9 rate-limited endpoints answering on the second try — so
those were my own crawl pressure, not your data.
32 HTTP 402s were discarded too: a server demanding payment is working.
707 local-package entries were never probed. A package is not a defect, and
nothing is ever installed in order to inspect it.
Check any of it
curl -s -X POST https://<endpoint> -H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"check","version":"1"}}}'
Full list: https://errata.apidefects.workers.dev/errata.json — filter on
subject.registry == "registry.modelcontextprotocol.io": 829
confirmed records. If one is wrong it should be withdrawn, and 46
already have been.
One more measurement, free with the same pass and possibly of use to you:
405 of the 2 606 live servers — 16 % — issue an Mcp-Session-Id on
initialize that a client must capture and replay, or be rejected on
tools/list.
Hello — a data-quality report, checkable one line at a time.
I sent one
initializehandshake to every remote endpoint the registrydeclares. Reading, not calling: no
tools/callwas ever issued, and nocredential was ever sent. First run 2026-09-10, repeated weekly since —
generated from the live registry on 2026-09-15:
initializeinitialize, then reject the mandatorynotifications/initializedwith HTTP 400 — a client following the specification breaks hereAnd separately, needing no network at all:
https://host:{HAPI_PORT}/mcpThose 70 were never probed — they are broken on
their face, and they look like the cheapest thing to fix: they could be
rejected at submission.
What I deliberately did not count
A server answering 401 or 403 is alive, and is not in these figures at all.
56 HTTP 429s were discarded rather than recorded. A sequential re-probe, 2 s
apart, found 9 of 9 rate-limited endpoints answering on the second try — so
those were my own crawl pressure, not your data.
32 HTTP 402s were discarded too: a server demanding payment is working.
707 local-package entries were never probed. A package is not a defect, and
nothing is ever installed in order to inspect it.
Check any of it
Full list: https://errata.apidefects.workers.dev/errata.json — filter on
subject.registry == "registry.modelcontextprotocol.io": 829confirmed records. If one is wrong it should be withdrawn, and 46
already have been.
One more measurement, free with the same pass and possibly of use to you:
405 of the 2 606 live servers — 16 % — issue an
Mcp-Session-Idoninitializethat a client must capture and replay, or be rejected ontools/list.