139,477 servers, 80% listed in one registry
What the MCP server ecosystem looks like once 5 registries are deduplicated against each other: how much they overlap, how much of it the Official MCP Registry covers, how many servers are actively maintained, what they declare they need, and how many public endpoints actually answer an MCP handshake. Every figure below states the definition it was computed under. Data as of 2026-10-09; computed Oct 9, 2026.
Adding up registry catalogs overcounts by 42,134
The 5 registries list 181,611 servers between them, but only 139,477 distinct servers once the same project listed in several places is counted once. 111,073 servers (79.6%) appear in exactly one registry; 28,393 appear in two or more. The largest exclusive catalog is Glama with 71,026 servers found nowhere else.
Servers by number of registries listing them
Listed and exclusive, per registry
| Registry | Listed | Only here | Share only here |
|---|---|---|---|
| Glama | 97,578 | 71,026 | 72.8% |
| Official MCP Registry | 38,002 | 19,922 | 52.4% |
| PulseMCP | 22,252 | 6,226 | 28.0% |
| mcp.so | 18,668 | 9,722 | 52.1% |
| Smithery | 5,111 | 4,177 | 81.7% |
Pairwise overlap: share of the row registry's servers also listed on the column registry
| of ↓ also on → | Glama | Official MCP Registry | PulseMCP | mcp.so | Smithery |
|---|---|---|---|---|---|
| Glama | — | 17% | 15% | 8% | 1% |
| Official MCP Registry | 44% | — | 24% | 7% | 1% |
| PulseMCP | 65% | 42% | — | 22% | 2% |
| mcp.so | 43% | 15% | 27% | — | 2% |
| Smithery | 17% | 7% | 7% | 6% | — |
Definition
For each pair (A, B): the share of A's servers that are also listed in B. Rows are A, columns are B; the diagonal is 1.
Definition
One canonical server: the cross-registry merge group formed by COALESCE(canonical_server_key, server_key) over dim_server, excluding the bulk-listing flood namespaces the site does not publish. A server is active when at least one of its listings is live: listings on delta-synced registries (the Official MCP Registry) are live unless the registry reports them deleted; listings on full-crawl registries are live while seen within 30 days of that registry's own newest crawl. Every number here is over active servers.
The Official MCP Registry lists 27.3% of the ecosystem
38,002 of 139,477 active servers have a listing on the Official MCP Registry. The rest are known only through community registries and crawls, which is why a directory that reads one source undercounts by a wide margin.
Definition
Share of all active servers that are listed in the Official MCP Registry.
29% of servers with a repository had a commit in the last 30 days
Definition
Among active servers with a GitHub repository: active30d = the latest repo sync of that repository saw at least one default-branch commit in the 30 days before the sync (raw_repo_signal.commits_30d > 0 on the freshest row per repository); active90d = any sync in the 60 days before the report date saw a commit in its 30-day window, or any sync recorded a last_commit_at within 90 days of the report date; archived = GitHub reports the repository archived or disabled (dim_server.is_repo_archived). Shares divide by servers with a repository.
What registries say servers need before first use
Registry metadata declares whether a server needs credentials (required environment variables) or an authenticated hosted endpoint. These are the publisher's declarations, not installs MCP Toplist has run; 17%of servers have no declaration at all, and their pages say “Requirements not verified”.
Definition
Mechanical setup-cost classification from declared registry metadata, taking the cheapest class across the merge group: runs_out_of_the_box (no credentials needed), needs_credentials (declared required environment variables), hosted_remote_auth (remote endpoint behind authentication). unknown = no registry supplied the signal.
27.2% of probed public endpoints completed the MCP handshake
MCP Toplist probes declared public endpoints with MCP initialize and tools/list, never tools/call. Of 19,806 servers probed in the last 60 days, 5,386 answered with a tool list. The most common failure is an endpoint that speaks HTTP but not MCP.
Definition
Among active servers with at least one probe of a public remote endpoint in the 60 days before the report date, the latest probe per server. The prober sends initialize and tools/list only, never tools/call. shareOk = probes whose tools/list succeeded / probed servers; byStatus counts the latest probe's status.
19,218 servers entered the catalog in the last 30 days
Cumulative active servers at each month end. This measures registry intake — when a registry first listed a server — not adoption or usage, and a registry crawl catching up shows as a step, not an ecosystem event.
Definition
Cumulative active servers at each month end over the last 12 months. A server is dated by its earliest registry publish date (dim_server_version.published_at), falling back to when this pipeline first saw it (dim_server.first_seen_at), floored at 2024-11-01. newLast30d = servers dated within the 30 days before the report date.
How to read, and reproduce, these numbers
- Union vs homepage total: both count active servers only (delisted servers are kept for history but never counted or ranked). This report groups by canonical_server_key, the key the export writes back from its repo-based merge, so the two can differ by a small number of servers whose merge group changed between the write-back and this run.
- PulseMCP: its public API caps the catalog it exposes, and its crawl has been stalled since 2026-09-01; its listings are frozen at that snapshot under the feed-anchored liveness rule (never mass-delisted), so PulseMCP figures are a floor on its real catalog.
- The Official MCP Registry is delta-synced: a listing is live until the registry reports it deleted; staleness of last_seen_at is never used as a delisting signal there.
- Bulk-listing floods (namespaces that generate hundreds of near-identical servers from one host) are excluded exactly as on the site; on 2026-09-21 one namespace matched (~2.3k listings).
- Repo activity is only as fresh as the repo-sync rotation: most repositories are re-synced within a week, a few within a month; archived repositories are not re-synced.
- Probe coverage is partial: the prober visits a rotating slice of public endpoints, so the probed population is a sample of servers with a reachable remote, not all of them. jsonrpc_error mostly means the endpoint answered HTTP but did not speak MCP (auth challenge, HTML page, or a different protocol).
- Growth is dated by the registries' own publish dates where available (98% of servers; the rest, PulseMCP listings without a date, fall back to when this pipeline first saw them, which cannot predate 2025-09). A registry's publish date is when that registry listed the server - for a crawler such as Glama that is its crawl date - so the series shows when servers entered the registries, not when their code was written. Recent growth is dominated by Glama's GitHub crawl and the Official MCP Registry's intake.
- Reconciliation on 2026-10-09: 143,619 canonical servers exist including delisted ones (2,365 flood listings already removed); 139,477 of them are active and form this report's population.
- 9,382 of 122,696 servers with a GitHub repository have no repo-sync row yet; they count as not active and not archived unless dim_server already flags the repo archived.
The report is computed by scripts/ecosystem_report.py in the mcp-stats repository from the same BigQuery tables that produce the leaderboard, and committed as JSON so a re-run for the same period reproduces the page. The underlying catalog is published on Hugging Face (CC BY 4.0). Live registry freshness is on the Registry Observatory; the ranking method is on the methodology page.
- server
- One canonical server: the cross-registry merge group formed by COALESCE(canonical_server_key, server_key) over dim_server, excluding the bulk-listing flood namespaces the site does not publish. A server is active when at least one of its listings is live: listings on delta-synced registries (the Official MCP Registry) are live unless the registry reports them deleted; listings on full-crawl registries are live while seen within 30 days of that registry's own newest crawl. Every number here is over active servers.
- registry
- A registry_source in dim_server_registry_listing. The five core registries (Official MCP Registry, Glama, Smithery, mcp.so, PulseMCP) take part in the overlap statistics; servers submitted directly to MCP Toplist and the GitHub modelcontextprotocol org are reported separately and excluded from overlap.
- listed
- A server counts as listed in a registry when any of its live member listings comes from that registry.
- registryCount
- Servers listed in exactly n core registries; n is the number of distinct core registries among a server's live listings.
- overlap
- For each pair (A, B): the share of A's servers that are also listed in B. Rows are A, columns are B; the diagonal is 1.
- exclusive
- Servers listed in that registry and in no other core registry; exclusiveShare divides by the registry's listed servers.
- listingsSum
- The naive total: the sum of the five core registries' listed-server counts. totals.servers is the distinct union after deduplication.
- officialCoverage
- Share of all active servers that are listed in the Official MCP Registry.
- maintenance
- Among active servers with a GitHub repository: active30d = the latest repo sync of that repository saw at least one default-branch commit in the 30 days before the sync (raw_repo_signal.commits_30d > 0 on the freshest row per repository); active90d = any sync in the 60 days before the report date saw a commit in its 30-day window, or any sync recorded a last_commit_at within 90 days of the report date; archived = GitHub reports the repository archived or disabled (dim_server.is_repo_archived). Shares divide by servers with a repository.
- setup
- Mechanical setup-cost classification from declared registry metadata, taking the cheapest class across the merge group: runs_out_of_the_box (no credentials needed), needs_credentials (declared required environment variables), hosted_remote_auth (remote endpoint behind authentication). unknown = no registry supplied the signal.
- probes
- Among active servers with at least one probe of a public remote endpoint in the 60 days before the report date, the latest probe per server. The prober sends initialize and tools/list only, never tools/call. shareOk = probes whose tools/list succeeded / probed servers; byStatus counts the latest probe's status.
- growth
- Cumulative active servers at each month end over the last 12 months. A server is dated by its earliest registry publish date (dim_server_version.published_at), falling back to when this pipeline first saw it (dim_server.first_seen_at), floored at 2024-11-01. newLast30d = servers dated within the 30 days before the report date.
- extraSources
- Active servers with a live listing from the two non-registry sources: direct submissions to MCP Toplist and the GitHub modelcontextprotocol org.
Sources reported separately from the overlap figures: user submitted (7), github org (13).