Popular servers: Spreadsheet · Server for Invoices — Generate Invoices from Claude · Expense Tracker — Log Expenses from Claude · Recurring Invoices · Word Document Server — Create .docx from Claude · Server for Bill of Sale — Draft and Sign from Claude · Zip · Job Card
The official MCP registry's search= parameter matches the server name only,
and returns matches in strict ASCII order on the whole namespace/local-name string. Your
namespace is the first thing compared, so it decides your position before any word you chose for the
server is looked at.
Here is the measurement. The same server, published under two namespaces on 2026-09-08:
| Search token | com.bestremotetools/... | io.github.theluckystrike/... | Servers matching |
|---|---|---|---|
schedule | 3 | 15 | 22 |
delivery | 2 | 17 | 18 |
Same code, same description, same local name. Twelve places on one token and fifteen on the other, bought entirely by the two letters at the front of the namespace. Reproduce it:
curl -s 'https://registry.modelcontextprotocol.io/v0/servers?search=schedule&limit=100&version=latest' \
| python3 -c 'import json,sys; [print(i,r["server"]["name"]) for i,r in enumerate(json.load(sys.stdin)["servers"],1)]'
An ordering claim is testable in one line: read the names back and compare them to their own sorted
copy. On 2026-09-08 that returned True for every result set checked, including a
6,000-row full pagination of the whole registry.
names == sorted(names) # True on schedule, delivery, and 6,000 paginated rows
Strict ASCII means uppercase sorts before lowercase, and digits before letters. It also means the comparison never reaches your local name until the namespaces are equal.
The behaviour is not an accident of the data. From
internal/database/postgres.go in modelcontextprotocol/registry, read
2026-09-09, the match and the order are two separate lines:
conditions = append(conditions, fmt.Sprintf("server_name ILIKE $%d ESCAPE '\\'", argIndex))
...
ORDER BY server_name, version
Three facts follow, and each was checked against the live API on 2026-09-09.
ILIKE folds case, and
search=slack, search=Slack and search=SLACK each returned the
same 20 servers.ORDER BY does no folding, so a capitalised
publisher handle sorts ahead of every lowercase one in the same namespace family. That is worth
about twenty places and it has its own
page.%...%, with a comment naming the exact case it closes.
search=% returned 0 servers and search=_ returned only names containing a
literal underscore.Reversed-domain namespaces cluster by their first label. In a 6,000-row pagination on 2026-09-08 the
first label distribution was ai 3,853, app 1,204, co 349,
cloud 128, then a long tail. Sixty paginated calls of 100 rows each reached
co.pipeboard/tiktok-ads-mcp and the cursor was still set, so the registry never got past
the letter c.
So io.github.<user>, which is what the GitHub login flow grants and what most
first-time publishers use, sorts after every ai., app., com.,
dev. and io.a through io.f namespace that matches the same token.
On a token with more than about twenty matches, that is page two.
The registry derives your namespace from a domain you prove you control. Two methods are documented, and both were run from this project:
mcp-publisher login dns --domain <domain> --private-key <hex>,
an ed25519 key proved by a TXT record.mcp-publisher login http --domain <domain> --private-key <hex>,
the same key proved by serving one file at /.well-known/mcp-registry-auth whose body is
v=MCPv1; k=ed25519; p=<base64 public key>.The HTTP method needs no DNS credential at all, which matters if the account holding your domain
cannot mint a DNS-edit token. Serving that one static file from anything already attached to the
domain is enough. The granted token then carries a permission on
<reversed domain>/*, and everything you publish under it inherits the sort position
of that namespace.
/v0/servers returns one row per published version, not one per server. The
token schedule returns 63 rows and 22 servers. Add &version=latest to get
one row per server. Any count you quote without that parameter is a version count wearing a server
count's clothes.
Rank in a name-substring search is findability inside one directory, not demand. This project holds
85 active registry rows and the registry is the only channel that has demonstrably sent it humans:
9 of 22 unique visitors in fourteen days, measured in data/traffic.json. That is a real
channel and a small one. Ranking third instead of fifteenth multiplies a small number.
The comparison above worked because that one server ships a bundle and a stdio package and no
hosted endpoint. Trying to repeat it on a hosted server fails: the registry binds each
remotes[].url to exactly one server name and refuses a second name pointing at the same
URL. So for a hosted fleet there is no A/B test, only a migration.
The rule, its source and the way around it are
a page of their own.
Everything above was measured against the live API on 2026-09-08 from this repository, which
publishes its own catalogue of MCP servers and used both login methods while working it out. The two rank rows were
re-measured on 2026-09-09 and returned the same numbers: 3 against 15 of 22 servers on
schedule, 2 against 17 of 18 on delivery. The full working, including the
ranks the same servers took under six candidate namespaces, is in
docs/NAMESPACE_R1.md.
Not through search=. It matches the name. A server whose description is a perfect answer to a query and whose name does not contain the token does not come back at all, which is why the local name still matters even though the namespace outranks it.
You can publish under a new one, but the old rows do not move. Publishing the whole catalogue twice puts your own entries in competition with each other in the same sorted list, so the safer move is one server under the new namespace, measured against the old row for the same server.
The endpoint is a version log, not a catalogue. It is the right shape for a client resolving a specific version and the wrong shape for counting anything. One publisher in the sample had 739 version rows for a single server.
Close but not identical. Uppercase letters sort before all lowercase ones and digits sort before both, so a namespace starting with a digit or a capital would sort ahead of every lowercase one. Nothing stops that, and nobody appears to be doing it.
It varies by two orders of magnitude. On 2026-09-08 delivery matched 18 servers and schedule 22, while invoice filled a page of 100 with the cursor still set. Check before you name anything: the count is one API call.
All MCP servers and prices · All guides · Buy the bundle $39
Related guides: MCP protocol versions: what each one changed · Where to find MCP servers that cost money, and how you actually pay · What is actually in the MCP registry: 6,000 rows counted