An npm keyword is not a directory

Searching npm for 'mcp' returns libraries, adapters, proxies, and a few things that are not servers at all. Here is how we tell them apart, and what we refuse to list.

2026-11-02 2 min read The avbbc desk mcpmethodologynpm

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.

Keep reading

All notes