Sixty paginated calls of 100 rows each against
registry.modelcontextprotocol.io/v0/servers on 2026-09-08 returned 6,000 rows containing
2,211 distinct servers. The cursor was still set at row 6,000, which stood at
co.pipeboard/tiktok-ads-mcp, so this is the first 6,000 rows in ASCII order and not the
whole registry. Every figure below describes that sample and says so.
Rows are versions. 6,000 rows, 2,211 names, and exactly 2,211 of those rows carry
isLatest: true. One server, ai.bowmark/bowmark, accounted for 739 rows on its
own: 739 distinct version strings from 1.0.0 to 8.99.1, which is 12.3 percent of the entire sample from
a single publisher republishing one server.
So any count taken off this endpoint without &version=latest is inflated, and not
evenly: it is inflated by whoever has the busiest release pipeline.
Of the 2,211 latest rows:
| Declares | Servers |
|---|---|
A remote endpoint (remotes) | 1,985 |
An installable package (packages) | 311 |
| Both | 97 |
| Neither | 12 |
Six hosted servers for every installable one. That is a different registry from the one most
tutorials describe, where an MCP server is a local subprocess you launch with npx.
Across the same 2,211 latest rows, the declared remote transports were streamable-http 1,986 and sse 68. Streamable HTTP replaced HTTP+SSE in protocol version 2025-03-26, and the registry's own data now shows a 29 to 1 split. If you are building a remote server, SSE is a compatibility path, not a choice.
| Package registry | Servers (latest rows) |
|---|---|
| npm | 259 |
| PyPI | 41 |
| OCI | 15 |
| mcpb | 9 |
| NuGet | 1 |
Nine servers in the sample declare an mcpb package, the one-click Claude Desktop bundle
format. That is 0.4 percent of the sample, against 1,985 that publish a URL.
The 2,211 servers came from 1,539 distinct namespaces, so the median publisher has one server. The
concentration is at the top: ai.smithery held 213 distinct servers, app.wishpool
125 and ai.getvda 94. By row count rather than server count the picture inverts, because
of the republishing effect above: ai.bowmark 739 rows, ai.smithery 288,
ai.intuitek.the-stall 204.
18 of the 2,211 latest rows carry status deprecated, the rest active. The
registry marks them rather than removing them, so a client reading the list must filter, and a human
reading a directory built on this data may not be shown the flag at all.
Because results come back in strict ASCII order on the namespace, the first 6,000 rows are
namespaces ac. through co.. The first-label counts in the sample were
ai 3,853, app 1,204, co 349 and cloud 128. Any
namespace beginning dev., io. or me. is absent from it entirely,
including every io.github.* server, which is what the GitHub login flow grants and what
most individual publishers use. So treat these ratios as describing commercially published servers, and
expect the io.github tail to be more package-shaped and less hosted.
curl -s 'https://registry.modelcontextprotocol.io/v0/servers?limit=100' | jq '.metadata'
# {"nextCursor": "...", "count": 100}
# follow nextCursor until it is absent; add &version=latest for one row per server
Two things to know before you spend the calls. metadata.count is the size of the page
you were handed, not a total, so a count of 100 with a cursor set is a floor. And there is no totals
endpoint: /v0/stats returns 404 and /v0/health returns only a status and a
GitHub client id, both checked on 2026-09-08.
This count was run from a repository that publishes 30 MCP servers and has 85 active rows in the same registry, so the motive was practical rather than academic: knowing whether a name is contested is one API call, and knowing what the whole list looks like turned out to be sixty.
More than 2,211, and this measurement cannot say how many more. Sixty paginated calls covered namespaces ac. through co. and the cursor was still set. What the sample does establish is the shape: mostly hosted, mostly streamable HTTP, one server per publisher at the median.
The endpoint returns every published version. In this sample 6,000 rows collapsed to 2,211 servers, and a single server accounted for 739 of the extra rows. Pass version=latest to collapse them.
No. The registry records what a publisher declared, not what runs. 18 entries in the sample are marked deprecated and still returned. Nothing in the API tests an endpoint or installs a package.
No, though most directories are built on it. The registry is an API with a strict-ASCII name search. Directory sites add their own ranking, badges and editorial, which is why the same server can be prominent on one and invisible on the other.
All MCP servers and prices · All guides · Buy the bundle $39