The naive way to build an MCP directory is to query npm for the keyword and publish what comes back. That produces a directory where a third of the entries are not servers, and the first user who installs one of them learns not to trust the rest.
What the keyword actually returns
Four categories, in roughly equal measure.
**Servers.** A package that speaks the protocol and exposes tools. This is what the directory is for.
**SDKs and adapters.** Libraries that let you *write* a server: HTTP adapters, framework bindings, middleware. They carry the keyword honestly and are not servers.
**Proxies and gateways.** Tools that sit between a client and another server. Useful, and a different category from what they proxy.
**Clients.** Packages for connecting to servers. The inverse of what we list, and the one that catches people out because the name often looks identical.
The filter we apply
Two mechanical rules, both checkable without reading source:
A package must declare a `bin` (an executable). That rules out most libraries, which are imported rather than run.
Its description must not be primarily about being an SDK, adapter, framework, or client — unless it also explicitly describes itself as a server. This is a heuristic, and heuristics are wrong sometimes, which is why the second tier exists.
Two tiers, because the filter is imperfect
Mechanical filtering gets you a long way and not all the way. So the directory labels every entry: **reviewed** means a person read the documentation, wrote the description, and dated the check; **listed** means the package exists, declares an executable, and carries the keyword.
The listed tier never appears in comparisons or best-of pages. That is the whole point of having tiers: it lets us include the long tail without pretending we vouch for it.
What we refuse to list
Proxies, clients, and SDKs, even when they are popular. A directory that lists a client as a server sends people to install the wrong thing, and the cost of that mistake is not paid by us — it is paid by whoever spends an afternoon debugging a connection that was never going to work.
The filter is not a matter of taste. It is the difference between a directory and a keyword search.