report · 46 137 servers · run of 2026-10-24
The state of the MCP registry, October 2026
mcpcost probes every server in the official MCP registry once a day. It connects as a client, lists the tools, and counts what the tool definitions cost in context tokens. This report reads the daily runs of October 2026, from the first full run on 2026-10-03 to the run of 2026-10-24. Package servers from npm and PyPI joined the probe on 2026-10-15. The tables say which numbers cover them.
1. The registry in numbers
The registry lists an entry per server version. mcpcost takes the latest version of each server. It probes every entry with a remote URL, and every entry whose only package is on npm or PyPI. Entries with only an OCI or MCPB package are not probed.
| Registry, 2026-10-24 | Entries | Share |
|---|---|---|
| Entries, latest versions | 49 221 | 100 % |
| With a remote URL | 32 364 | 66 % |
| With an npm or PyPI package only | 14 271 | 29 % |
| Probed | 46 137 | 94 % |
| of which remote | 32 364 | 70 % |
| of which package, in a container | 13 773 | 30 % |
| Hosts | 23 592 |
By result
Three groups. Alive: the server answers initialize and tools/list. Gated: the server is reachable, but it wants auth, a payment, an environment variable or an argument first. Down: everything else.
| Result | Group | Servers | Share of probed |
|---|---|---|---|
| Alive | alive | 25 509 | 55 % |
| Gated | gated | 11 113 | 24 % |
| Down or broken | down | 9 515 | 21 % |
| alive | alive | 25 509 | 55 % |
| needs auth | gated | 9 041 | 20 % |
| crashed on start | down | 2 599 | 6 % |
| not MCP | down | 2 025 | 4 % |
| not found | down | 1 345 | 3 % |
| needs env | gated | 928 | 2 % |
| no DNS | down | 842 | 2 % |
| timeout | down | 671 | 1 % |
| install failed | down | 651 | 1 % |
| paid (402) | gated | 472 | 1 % |
| server error | down | 469 | 1 % |
| needs args | gated | 411 | 1 % |
| TLS error | down | 307 | 1 % |
| rate limited | down | 254 | 1 % |
| no executable | down | 175 | 0 % |
| error | down | 143 | 0 % |
| newer protocol | gated | 133 | 0 % |
| needs network | gated | 128 | 0 % |
| refused | down | 34 | 0 % |
2. What changed in October
The first full run was on 2026-10-03. The table compares it with the run of 2026-10-24. The rows cover remote servers only, so the two runs measure the same thing. Package servers are in the second table.
| Remote servers | 2026-10-03 | 2026-10-24 | Change |
|---|---|---|---|
| Registry entries, latest versions | 38 942 | 49 221 | 10 279 |
| Entries with a remote URL | 24 294 | 32 364 | 8 070 |
| Alive | 12 975 | 17 197 | 4 222 |
| Alive, share of remote | 53 % | 53 % | |
| Need auth | 5 836 | 9 041 | 3 205 |
| Need auth, share of remote | 24 % | 28 % | |
| Protocol 2025-11-25, share of alive with a known version | 60 % | 65 % | |
| Hosts | 16 534 | 23 592 | 7 058 |
Token cost
Exact counts start on 2026-10-05, the first run with an API key. From 2026-10-15 the alive set also holds package servers. Their tool sets are smaller, so the median goes down as they join. The estimate row covers every run.
| Alive servers | 2026-10-03 | 2026-10-05 | 2026-10-24 |
|---|---|---|---|
| Alive servers in the set | 12 975 | 13 337 | 25 509 |
| Median tokens, Claude Opus 5.5, exact | 2 909 | 2 286 | |
| 90th percentile, exact | 13 050 | 13 046 | |
| 99th percentile, exact | 44 095 | 34 083 | |
| Median tokens, o200k estimate | 1 727 | 1 678 | 1 346 |
| Median tools per server | 8 | 8 | 7 |
Run by run
25 daily runs. A point is missing where a run could not separate remote from package servers (2026-10-15 to 2026-10-20). Hover a point for its value, or open the table.
Alive remote servers
as a table
| Run | Value |
|---|---|
| 2026-10-24 | 17 197 |
| 2026-10-23 | 17 003 |
| 2026-10-21 | 16 740 |
| 2026-10-14 | 15 097 |
| 2026-10-13 | 14 817 |
| 2026-10-12 | 14 759 |
| 2026-10-11 | 14 457 |
| 2026-10-10 | 14 288 |
| 2026-10-09 | 14 054 |
| 2026-10-08 | 13 670 |
| 2026-10-07 | 13 436 |
| 2026-10-06 | 13 661 |
| 2026-10-05 | 13 337 |
| 2026-10-05 | 13 324 |
| 2026-10-04 | 13 106 |
| 2026-10-04 | 13 092 |
| 2026-10-03 | 12 968 |
| 2026-10-03 | 12 975 |
Alive, share of remote servers
Median tokens of a tool set in Claude Opus 5.5, alive servers, exact
as a table
| Run | Value |
|---|---|
| 2026-10-24 | 2 286 |
| 2026-10-23 | 2 295 |
| 2026-10-21 | 2 342 |
| 2026-10-20 | 2 358 |
| 2026-10-19 | 2 367 |
| 2026-10-19 | 2 386 |
| 2026-10-18 | 2 420 |
| 2026-10-17 | 2 564 |
| 2026-10-16 | 2 655 |
| 2026-10-15 | 2 737 |
| 2026-10-14 | 2 909 |
| 2026-10-13 | 2 976 |
| 2026-10-12 | 2 933 |
| 2026-10-11 | 2 934 |
| 2026-10-10 | 2 935 |
| 2026-10-09 | 2 998 |
| 2026-10-08 | 2 843 |
| 2026-10-07 | 2 880 |
| 2026-10-06 | 2 790 |
| 2026-10-05 | 2 909 |
Servers that need auth, share of remote servers
as a table
| Run | Value |
|---|---|
| 2026-10-24 | 27.9 % |
| 2026-10-23 | 27.8 % |
| 2026-10-21 | 27.7 % |
| 2026-10-20 | 27.4 % |
| 2026-10-19 | 27.3 % |
| 2026-10-19 | 27.2 % |
| 2026-10-18 | 27.2 % |
| 2026-10-17 | 27.2 % |
| 2026-10-16 | 27.0 % |
| 2026-10-15 | 26.8 % |
| 2026-10-14 | 26.6 % |
| 2026-10-13 | 26.4 % |
| 2026-10-12 | 26.3 % |
| 2026-10-11 | 26.2 % |
| 2026-10-10 | 26.1 % |
| 2026-10-09 | 25.9 % |
| 2026-10-08 | 25.5 % |
| 2026-10-07 | 25.4 % |
| 2026-10-06 | 25.3 % |
| 2026-10-05 | 25.2 % |
| 2026-10-05 | 25.2 % |
| 2026-10-04 | 25.0 % |
| 2026-10-04 | 25.0 % |
| 2026-10-03 | 24.8 % |
| 2026-10-03 | 24.0 % |
Protocol 2025-11-25, share of alive servers with a known version
as a table
| Run | Value |
|---|---|
| 2026-10-24 | 64.7 % |
| 2026-10-23 | 64.5 % |
| 2026-10-21 | 62.8 % |
| 2026-10-20 | 62.5 % |
| 2026-10-19 | 62.5 % |
| 2026-10-19 | 62.3 % |
| 2026-10-18 | 62.0 % |
| 2026-10-17 | 61.6 % |
| 2026-10-16 | 61.3 % |
| 2026-10-15 | 61.5 % |
| 2026-10-14 | 60.7 % |
| 2026-10-13 | 60.3 % |
| 2026-10-12 | 60.6 % |
| 2026-10-11 | 60.6 % |
| 2026-10-10 | 60.4 % |
| 2026-10-09 | 59.7 % |
| 2026-10-08 | 60.5 % |
| 2026-10-07 | 59.8 % |
| 2026-10-06 | 60.9 % |
| 2026-10-05 | 60.1 % |
| 2026-10-05 | 60.2 % |
| 2026-10-04 | 59.6 % |
| 2026-10-04 | 59.7 % |
| 2026-10-03 | 59.4 % |
| 2026-10-03 | 59.6 % |
Registry entries, latest versions
as a table
| Run | Value |
|---|---|
| 2026-10-24 | 49 221 |
| 2026-10-23 | 48 740 |
| 2026-10-21 | 47 507 |
| 2026-10-20 | 46 824 |
| 2026-10-19 | 46 393 |
| 2026-10-19 | 46 184 |
| 2026-10-18 | 45 678 |
| 2026-10-17 | 45 123 |
| 2026-10-16 | 44 462 |
| 2026-10-15 | 43 845 |
| 2026-10-14 | 43 291 |
| 2026-10-13 | 42 797 |
| 2026-10-12 | 38 942 |
| 2026-10-11 | 41 784 |
| 2026-10-10 | 41 407 |
| 2026-10-09 | 41 051 |
| 2026-10-08 | 40 822 |
| 2026-10-07 | 40 328 |
| 2026-10-06 | 39 943 |
| 2026-10-05 | 39 614 |
| 2026-10-05 | 39 407 |
| 2026-10-04 | 39 159 |
| 2026-10-04 | 39 138 |
| 2026-10-03 | 38 988 |
| 2026-10-03 | 38 942 |
3. Token cost
A client sends the model the name, the description and the input schema of each tool. It does this in each request, also when the model calls no tool. The numbers below are the cost of the tool definitions of one server, as the Anthropic count_tokens endpoint counts them for Claude Opus 5.5. The endpoint is free and calls no model. Claude Code puts mcp__<server>__ in front of each tool name. The second column counts that variant.
| Alive servers, 15 455 counted | Claude Opus 5.5 | In Claude Code | o200k estimate |
|---|---|---|---|
| Median | 2 286 | 2 415 | 1 346 |
| 90th percentile | 13 046 | 13 387 | 7 428 |
| 99th percentile | 34 083 | 34 598 | 31 619 |
| Maximum | 529 755 | 532 593 | 699 960 |
| Sum over all counted servers | 86 597 005 | 89 046 505 | 103 984 113 |
The estimate column covers all 25 509 alive servers. 8 823 alive servers publish a schema the endpoint refuses; they have the estimate only.
Servers per cost band
How many of the counted servers fall into each band of exact tokens.
- 1 350< 500
- 2 099500 – 1k
- 3 0391k – 2k
- 4 0252k – 5k
- 1 4265k – 10k
- 3 13310k – 20k
- 29520k – 50k
- 6750k – 100k
- 21100k+
as a table
| Tokens | Servers |
|---|---|
| < 500 | 1 350 |
| 500 – 1k | 2 099 |
| 1k – 2k | 3 039 |
| 2k – 5k | 4 025 |
| 5k – 10k | 1 426 |
| 10k – 20k | 3 133 |
| 20k – 50k | 295 |
| 50k – 100k | 67 |
| 100k+ | 21 |
Exact against the estimate
The estimate serializes each tool as compact JSON and counts it with the o200k_base tokenizer. Claude renders the schemas in its own format, so the exact count is higher. The ratio is steady across servers.
| Exact count divided by the estimate | Ratio |
|---|---|
| 10th percentile | 1.64 |
| Median | 1.76 |
| 90th percentile | 1.87 |
The heaviest tool sets
Claude's context window holds 200 000 tokens. The last column says how much of it one server takes before the first prompt. 6 alive servers do not fit into the window at all.
| Server | Host | Tools | Claude Opus 5.5 | In Claude Code | Of 200k |
|---|---|---|---|---|---|
| com.mcparmory/elevenlabs | pypi.org | 258 | 529 755 | 532 593 | 265 % |
| com.mcparmory/atlassian-jira | pypi.org | 317 | 438 661 | 442 465 | 219 % |
| ai.oobeprotocol.sap.mcp/sap-mcp | mcp.sap.oobeprotocol.ai | 453 | 317 425 | 322 408 | 159 % |
| io.github.Invaro/opentax | opentax.invaro.ai | 15 | 294 076 | 294 196 | 147 % |
| com.mcparmory/klaviyo | pypi.org | 295 | 272 624 | 275 574 | 136 % |
| com.mcparmory/canvas | pypi.org | 696 | 222 223 | 227 791 | 111 % |
| io.github.getgapup/gapup-mcp | mcp.gapup.io | 279 | 188 039 | 191 387 | 94 % |
| io.github.getgapup/mcp-knowledge | mcp.gapup.io | 279 | 188 039 | 191 666 | 94 % |
| io.github.silamir/boondmanager-mcp-server | npmjs.com | 238 | 173 742 | 177 550 | 87 % |
| com.mcparmory/bitbucket | pypi.org | 261 | 164 500 | 167 110 | 82 % |
| io.github.zachshallbetter/adobe-mcp-illustrator | npmjs.com | 308 | 137 194 | 142 430 | 69 % |
| ai.intuitek.the-stall/the-stall | the-stall.intuitek.ai | 302 | 131 963 | 134 681 | 66 % |
All servers by token cost → · What a server costs, the short answer →
4. Auth
A server that answers 401 or 403 is reachable, but it does not talk to a client without credentials. The probe records the WWW-Authenticate scheme. Then it reads what the server publishes about getting in: the OAuth protected-resource metadata (RFC 9728) and the authorization server's metadata (RFC 8414). It never asks for a token.
| WWW-Authenticate scheme | Servers | Share of servers that need auth |
|---|---|---|
| Bearer | 7 876 | 87 % |
| no WWW-Authenticate header | 1 133 | 13 % |
| ApiKey | 18 | 0 % |
| AzureApiManagementKey | 6 | 0 % |
| OAuth | 2 | 0 % |
| Basic | 1 | 0 % |
| other schemes, 5 of them | 5 |
How a client gets in
Four kinds. The sentence under each one says what it means for a client.
| Kind | Servers | Share | For a client |
|---|---|---|---|
oauth-dcrOAuth, clients register themselves | 7 238 | 80 % | The authorization server registers clients itself (RFC 7591). Claude Code, Cursor or npx mcpcost auth connect with no setup. The user signs in and consents. |
oauthOAuth, the publisher issues the client id | 460 | 5 % | The server publishes OAuth metadata, but the publisher issues the client id. A client needs a registration with the publisher before it can start the flow. |
tokena key or token from the publisher | 412 | 5 % | The server wants a key or a token in a header. The publisher gives it out. A client has no standard way to get one. |
unknownno WWW-Authenticate header, no OAuth metadata | 931 | 10 % | The server answers 401 or 403 and publishes nothing a client can read: no WWW-Authenticate scheme, no OAuth metadata. A client can only read the documentation. |
5. The lumps
The registry is not flat. Most hosts publish one server. A few hosts publish thousands of entries from one template. The table lists the hosts with at least 200 entries. “Distinct tool sets” is the number of different tool lists one host serves: a host with many entries and few tool sets publishes the same server under many names.
| Host | Entries | Alive | Gated | Down | Distinct tool sets | Median tokens, estimate |
|---|---|---|---|---|---|---|
| agent-observatory-sensor.nolimit-observatory.workers.dev | 2 365 | 2 365 | 0 | 0 | 2 341 | 7 424 |
| gateway.pipeworx.io | 1 898 | 369 | 0 | 1 529 | 369 | 25 220 |
| api.mcp.ai | 1 116 | 1 116 | 0 | 0 | 1 043 | 1 241 |
| mcp.apify.com | 628 | 8 | 619 | 1 | 8 | 1 835 |
| api.m2mcent.com | 276 | 0 | 276 | 0 | 0 | |
| server.smithery.ai | 216 | 0 | 26 | 190 | 0 |
Duplicate tool sets
A hash of the sorted tool names and schema sizes marks servers that serve the same tools under different names.
| Alive servers | Servers | Share |
|---|---|---|
| Alive servers | 25 509 | 100 % |
| Distinct tool sets | 24 396 | 96 % |
| Servers that copy another server's tool set | 1 113 | 4 % |
Packages
The two package registries are the biggest hosts. A package is probed in a container with the network off and placeholder values for the environment variables the registry entry lists.
| Host | Entries | Alive | Gated | Down | Distinct tool sets | Median tokens, estimate |
|---|---|---|---|---|---|---|
| npmjs.com | 9 638 | 6 820 | 926 | 1 892 | 6 535 | 973 |
| pypi.org | 4 135 | 1 492 | 541 | 2 102 | 1 477 | 1 819 |
The 500 biggest hosts hold 22 961 of the 46 137 probed servers. The other 23 092 hosts hold the rest. All hosts →
6. Protocol versions
The version a server negotiates in initialize. The container run does not record the version of a package server, so package servers are the “unknown” row. A server that answers with a version the current SDK rejects is counted as “newer protocol” in section 1, not here.
| Negotiated version | Alive servers | Share of alive with a known version |
|---|---|---|
| 2025-11-25 | 11 093 | 65 % |
| 2025-03-26 | 3 229 | 19 % |
| 2025-06-18 | 2 240 | 13 % |
| 2024-11-05 | 586 | 3 % |
| unknown | 8 361 |
133 servers answer with a version the SDK does not support yet. They are reachable and count as gated.
7. What the registry does not catch
The registry checks who may publish under a name. It does not check that the endpoint speaks MCP, or that it still exists. These servers are listed as active, and a client that adds one gets an error. Not MCP, not found, no DNS and paid are the big ones.
| Result | What the probe saw | Servers | Share of remote |
|---|---|---|---|
| not MCP | HTTP 200, but the body is not a valid MCP reply, or a JSON-RPC error to initialize | 2 025 | 6 % |
| not found | HTTP 404, 405 or 410 on the endpoint the registry names | 1 345 | 4 % |
| no DNS | the host name does not resolve | 842 | 3 % |
| timeout | no answer in 15 seconds | 671 | 2 % |
| paid (402) | HTTP 402: the server wants a payment before it talks | 472 | 1 % |
| server error | HTTP 5xx | 469 | 1 % |
| TLS error | the certificate or the handshake fails | 307 | 1 % |
| rate limited | HTTP 429 to the first request | 254 | 1 % |
| error | another transport failure | 143 | 0 % |
| refused | the connection is refused | 34 | 0 % |
| Together | 6 562 | 20 % |
Packages that do not start
| Result | What the probe saw | Packages | Share of packages |
|---|---|---|---|
| crashed on start | the package starts and exits before it answers initialize | 2 599 | 19 % |
| install failed | npm or pip cannot install the package | 651 | 5 % |
| no executable | the package installs but has no executable to start | 175 | 1 % |
What changed since yesterday → · All servers that are down →
8. Method and limits
The probe connects to each server once a day with the official TypeScript SDK, sends initialize and tools/list, and sends no credentials. The exact token count comes from the Anthropic count_tokens endpoint: one request with the server's tools and a marker tool, one with the marker tool only, and the difference is the cost. A server is counted again only when its tool definitions change. A server that needs auth shows no tools, so its cost is not in the numbers. One probe from one network on one day can miss a server that is alive: a timeout or a rate limit on that day counts as down. Package servers run in a container with the network off, so a package that needs a real network or a real credential shows as gated, not as alive.
9. The dataset
One row per probed server from the run of 2026-10-24, with the numbers the board shows for it. The numbers of a row are the numbers the JSON API gives for that server, /api/s/<name>.json, on that day. The file is a static file of this site: it is small, and a static file costs no Worker request on the free tier, so it is the cheaper of the two ways to publish it. A GitHub release would hold a file over 10 MB.
Download mcpcost-2026-10.json.gz
The document has the licence, the run date, the field list and the citation at the top. The rows are under rows. A missing value is null.
curl -sL https://mcpcost.ulehla.dev/data/mcpcost-2026-10.json.gz | gunzip | jq '.rows[] | select(.status == "ok") | .claude_tokens' | sort -n | tail -3
Fields
| Field | Meaning |
|---|---|
name | the registry name; the server page is /s/<name> |
host | the host of the remote endpoint; npmjs.com or pypi.org for a package server |
transport | streamable-http, sse or stdio |
status | the probe result, the same words as the status filter of the board |
http_status | the HTTP status of the first response, when there was one |
auth_scheme | the WWW-Authenticate scheme of a server that needs auth |
auth_kind | how a client gets in: oauth-dcr, oauth, token or unknown |
protocol_version | the protocol version the server negotiated |
tool_count | the number of tools in tools/list |
tools_tokens | estimate: o200k_base over the compact JSON of the tool definitions |
claude_tokens | exact: the Anthropic count_tokens endpoint, claude-opus-5-5, tool names as published |
claude_tokens_cc | exact: the same with the Claude Code prefix mcp__<server>__ on each tool name |
probed_at | when the run probed the server; a package server keeps the time of its last container run |
The same run as re-check evidence for the registry
The official registry discusses a periodic re-check of its entries (issue #1715). This file is this run in the row shape agreed there, so a registry job can merge it with evidence from other sources: entry, checked_at, check (endpoint for a remote server, package for an npm or PyPI server started in a container), state and evidence. The state is one of five: alive (initialize and tools/list succeeded), auth (reachable, needs credentials or payment), transient (the endpoint exists but did not serve this run: timeout, 429, 5xx, refused), dead (no DNS, TLS failure, 404, not MCP; a package that does not install), unknown (a package that needs values or a network to start). The evidence holds the probe status by cause, the target, the HTTP status, the auth scheme and kind, the protocol version, the tool count and the first line of the error.
Download mcpcost-evidence-2026-10.json.gz (1.6 MB, CC BY 4.0, the same licence and citation)
The newest run in the same shape is always at /data/mcpcost-evidence-latest.json.gz. It changes after each daily run. Its index, mcpcost-evidence-latest.index.json, gives the run date, the number of rows, the size and the SHA-256.
Licence and citation
The dataset is published under Creative Commons Attribution 4.0. You may copy it, change it and build on it, also for commercial work. Name the source. A link to this page is enough.
Ondřej Úlehla, The state of the MCP registry, October 2026. mcpcost, run of 2026-10-24. https://mcpcost.ulehla.dev/report/2026-10. CC BY 4.0.
The code of the probe and of this site is MIT. The daily summaries since 2026-10-03 are committed in the repository as data/latest/summary.json, and the summary API serves the latest one.