modelcontextprotocol / modelcontextprotocol/registry
759 declared endpoints fail the `initialize` handshake, and 70 more are broken before it
Nobody has claimed this yet.
- Dominant language
- Go
- Stars
- 7.3k
- Forks
- 994
- Avg merge
- 4d 12h
- Merged PRs (30d)
- 19
Description
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.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the registry submission path and the supplied errata.json examples, focusing first on entries whose URLs contain unexpanded template placeholders. Use the issue's curl command to understand the reported handshake cases; done should include rejecting malformed template URLs at submission and covering the behavior with tests, though no repository file or test is named.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- go
- Domain
- api, backend
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100