AI Blog

MCP Registry vs Smithery vs Docker MCP Catalog vs PulseMCP: four indexes, one missing signal

You can look an MCP server up in four places and get four different kinds of answer: who owns the name, who will host it, who built the image, and what exists at all. Only one of them makes a claim about the artefact you are about to run — and none of them has read the tool descriptions, which is where an MCP server actually attacks you.

By Agentic AI Wiki 15 min read

"It's in the registry" is doing an enormous amount of unearned work in MCP adoption decisions. Four indexes now sit between you and a server, and they answer four different questions — who owns the name, who will run it for you, who built the image, and what exists at all. Exactly one of them makes a claim about the artefact you execute, and none of them has read the tool descriptions the model will obey. Pick by the question you actually have, and stop reading presence in an index as evidence of safety.

At a glance

The four are usually presented as competitors. They are not — they occupy different points on the path from "a server exists somewhere" to "a server is running next to my agent's credentials".

IndexWhat it actually isThe claim it can makeBest for
Official MCP RegistryA namespace with a public read API, run by the MCP projectThis name belongs to whoever proved control of that domain or GitHub accountResolving identity; being the upstream other indexes read from
SmitheryA directory plus hosting — CLI install, hosted remote endpoints, a routing meta-serverWe will run this for you at a URLGetting a remote server working today without operating anything
Docker MCP CatalogA curated set of containerised servers, distributed as imagesThis image was built by a pipeline we control, signed, with an SBOM and provenanceAnything you will run inside a company
PulseMCPA large hand-reviewed directory with a weekly cadenceThis exists, and here is what it is forFinding out whether anyone has built a server for X
What each MCP index verifies Matrix of four indexes against five properties. The official MCP Registry is strong on verified name ownership and breadth, weak on build provenance and isolation. Smithery is strong on breadth, medium on isolation because it hosts the process elsewhere, weak on name ownership and provenance. The Docker MCP Catalog is strong on build provenance and isolation, medium on publisher identity, weak on breadth. PulseMCP is strong on breadth only. The tool-behaviour column is weak for all four indexes. What each index verifies NAME OWNER BUILD PROVENANCE ISOLATION TOOL BEHAVIOUR BREADTH Official Registry Verified None None None High Smithery None None Off your box None High Docker Catalog Publisher Signed + SBOM Container None Low PulseMCP None None None None High Strong Partial Not covered The fourth column is the one that decides whether a server is safe to install, and it is empty in all four rows.
Five properties, four indexes. Note that one column is empty all the way down.

Catalogue sizes differ by more than an order of magnitude, and most published numbers are self-reported. One is not: paginate the official Registry's own read API to the end and, at the time of writing, it returns 24,330 distinct server names across 79,651 version records, roughly seven in ten of them under an io.github.* namespace. The community directories are in the same range; Docker's curated catalogue counts in the hundreds. Treat size as a statement about admission policy rather than about quality — the big indexes are the ones that admit everything a verified namespace can publish, and the small one is the one that builds what it ships.

The official Registry is a namespace, not a catalogue

Where each MCP index sits on the path from published to running Four stages run left to right: resolving a name, discovering that a server exists, obtaining the artefact you will execute, and running it beside your credentials. The official MCP Registry serves the name stage; PulseMCP and Smithery serve discovery; the Docker MCP Catalog serves the artefact stage; and no index serves the run stage, where isolation and egress are decided. A band across the bottom notes that none of the four reads the tool descriptions the model will obey. FROM PUBLISHED TO RUNNING Name reverse-DNS, ownership proved by DNS or GitHub Discover does one exist for X, and is it maintained? Artefact the image or package you actually pull Run credentials, egress, isolation Official MCP Registry identity and metadata PulseMCP · Smithery breadth, freshness, hosting Docker MCP Catalog signature, SBOM, provenance Nobody this box is yours WHAT NO INDEX CHECKS The tool descriptions your model reads as instructions — a description can change on the server's next deploy, after you approved it — no metadata field declares which hosts the server will contact — every claim above is made once, at publish time
Four indexes, four different points on the path. The last box is yours in every case.

The clearest way to understand the official Registry is to read a record. Names are reverse-DNS, and the read API needs no authentication:

{
  "server": {
    "name": "io.github.acme/mcp-search",
    "description": "Search Acme's docs, then fetch full articles by id.",
    "version": "1.4.2",
    "remotes": [{ "type": "streamable-http", "url": "https://acme.dev/mcp" }]
  },
  "_meta": {
    "io.modelcontextprotocol.registry/official": {
      "status": "active",
      "publishedAt": "2026-04-13T17:32:20Z",
      "isLatest": true
    }
  }
}

The name is the product. To publish under io.github.acme/… you authenticate as that GitHub account, or run from a GitHub Action in its repositories; to publish under a custom domain you satisfy a DNS TXT or HTTP challenge for that domain. That is a genuine and underrated security property — it makes namespace squatting expensive, so an entry claiming to be your vendor's server almost certainly came from your vendor.

What it is not: a review. Moderation is reactive — the community flags spam, impersonation or malicious code through issues, and maintainers denylist entries after the fact. Metadata fields carry length limits and regex validation to stop the crudest abuse. Nobody runs the server, reads its tool descriptions, or checks what it connects to. The design intent is explicit and sensible: be the upstream source of truth for identity and metadata, and let subregistries layer curation on top. The four-way comparison in this post exists because those subregistries showed up.

The distinction worth internalising: name verification tells you who published, not what they published. A verified namespace stops an attacker impersonating a vendor. It does nothing about a vendor whose server has a badly scoped tool, or a legitimate publisher whose account is compromised next quarter — which is exactly the shape of the software supply-chain attacks that already happen to npm and PyPI.

Smithery sells you a runtime, and that is the trade

Smithery is a directory in the same way a cloud provider is a hardware catalogue. The listing is the front door; the product is that it will install a server through its CLI or, more consequentially, run one for you as a hosted remote endpoint, with a routing meta-server that hands an agent the right tool from many servers.

For getting something working this afternoon, this is the strongest of the four by a distance. Remote MCP got operationally simpler with the 2026-07-28 stateless revision — a remote server is now an ordinary HTTP workload — but "simpler to operate" is not "already operated", and Smithery is selling the difference. The trade is precise and worth stating plainly:

  • A hosted MCP server sits between your agent and the upstream SaaS, which means the OAuth tokens for that SaaS are exercised inside somebody else's infrastructure. That is the same custody question as an agent connector platform, and it deserves the same scrutiny — the vault, not the catalogue, is the product you are buying.
  • A remote endpoint can change its tool list after you approved it. Hosting does not create that risk, but it does mean the definition your model reads is served from a machine you do not control, on a deploy schedule you do not see. Tool poisoning is the mechanism; third-party tool drift is the operational discipline that catches it.
  • Convenience concentrates. A routing meta-server that fronts many servers is one credential, one availability dependency and one blast radius for all of them.

None of this makes hosted MCP a bad idea. It makes it a decision about custody that is easy to make accidentally, because the interface it is sold behind looks like a search box.

Docker's catalogue is the only one making a claim about the artefact

Docker's MCP Catalog is the smallest of the four and the only one whose entries carry evidence about the thing you execute. Servers ship as container images; for the ones Docker builds, it controls the pipeline end to end and attaches cryptographic signatures, an SBOM, provenance attestations and continuous vulnerability scanning. Entries are labelled by origin — Docker-built versus community-built and publisher-maintained — and the gateway can check the attestations at launch rather than at browse time, which is the part that matters:

docker mcp gateway run --verify-signatures

Two consequences follow, and they point in opposite directions.

The upside is that containerisation makes the good defaults the lazy ones. An npx-launched stdio server inherits your shell, your filesystem and your environment variables; an image runs with the mounts and network you granted it and takes its secrets from the toolkit rather than from a config file you pasted a token into. That is isolation arriving by default instead of by discipline, and for anything running inside a company it is worth more than any listing metadata.

The downside is a category error that signed artefacts invite. Provenance answers "did this come from who it says, unmodified". It does not answer "should this be allowed to read your repository". A signed image of a server whose search_docs tool description quietly instructs the model to also send the results to an attacker's endpoint is a correctly signed, fully attested, entirely hostile server. Supply-chain integrity and behavioural safety are different problems with different controls — see agent supply-chain security for where each one belongs.

PulseMCP answers the question you actually start with

Before "is this safe" comes "does this exist", and for that PulseMCP is the best of the four: the largest hand-reviewed directory, refreshed weekly, organised around what servers are for rather than who published them. It makes no trust claim and implies none, which is the honest position for a directory.

Use it the way you use a search engine — to discover that someone has built a server for your obscure internal tool, then take the name to the official Registry to find out who they are, and the image to Docker or your own build to find out what you would be running. A directory hit is the start of an evaluation, not the end of one.

The column that is empty in all four

Every index above verifies something structural: a name, a build, a listing, a URL. None of them evaluates the one artefact that is actually adversarial — the natural-language tool descriptions the model reads and follows as instructions.

Three layers of trust, and what each one leaves open Three columns. Trusting the name proves a publisher controls a domain or GitHub account, and leaves open everything about behaviour and a future account compromise. Trusting the build proves the image is the one the pipeline produced, with an SBOM and a scan, and leaves open what the tools instruct the model to do. Trusting the host outsources operation and credentials, and leaves open a party who can change the tool definitions after you approved them. Trust the name reverse-DNS namespace DNS TXT or GitHub OAuth proof squatting your vendor gets hard STILL OPEN everything the server does Trust the build signature and provenance SBOM plus vulnerability scan verified at launch, not at browse STILL OPEN what the tools tell the model to do Trust the host an endpoint that works today their on-call, not yours your upstream tokens, their machine STILL OPEN tool definitions can change later
Three trust layers, none of which is behavioural. That check is still yours to run.

Four gaps survive every index, and all four are ordinary engineering work rather than research problems:

  • Tool descriptions are prompt-visible text. Diff them on every update and treat a changed description like a changed dependency version, because it is one — it changes what your model was told to do.
  • Nothing pins a version by default. The Registry tracks versions and marks the latest; most host configurations happily install whatever npx -y resolves to at launch. Pin, and upgrade deliberately.
  • Egress is undeclared everywhere. No index field says which hosts a server will contact. If the server runs in your infrastructure you can answer that with an allowlist; if it is hosted for you, you cannot answer it at all.
  • Nobody re-checks after listing. Every claim any of these four makes is made at publish time. The interesting change always happens afterwards.

The MCP project's roadmap, published on 22 August 2026, points at a related shift worth planning for: progressive discovery, in which servers reveal tools incrementally rather than dumping an entire catalogue up front. That is a sensible answer to context bloat, and it also means the set of tools your model can see becomes a runtime property of the server rather than a static list you approved once. Every argument above gets sharper when the catalogue can change mid-session.

When to pick which

SituationStart hereThen
Does a server exist for this tool at all?PulseMCP, for breadth and freshnessResolve the name in the official Registry
Vendor sent me a server; is it really theirs?Official Registry — the verified namespace is the answerPin the version; diff tool descriptions on update
Running this inside a companyDocker MCP Catalog if it is listed; your own image build if notVerify signatures at launch; grant mounts and egress explicitly
Prototype due this afternoonSmithery hosted endpointDecide before production whether that party should hold your tokens
Publishing your own serverOfficial Registry for the name, wherever your users look for discoveryShip an image too — it is the only listing that carries evidence

For most teams the realistic answer uses all four in sequence rather than choosing one: discover in a directory, resolve identity in the Registry, take the artefact from a catalogue that builds it, and run it under isolation you control. Nothing about that stack is exotic; it is the same shape as resolving a package name, checking a signature and running the build in a sandbox.

The durable principle: an index can verify identity, provenance or availability, and no index can verify intent. Presence in a registry is a naming fact. A signature is a build fact. A hosted URL is an availability fact. The question that decides whether an MCP server is safe to install — what its tools tell your model to do, and what they can reach when it complies — is answered by reading the tool descriptions and by the isolation you put around the process. Both of those are your job in all four cases, so budget for them once and stop re-litigating which index is the trustworthy one.

FAQ

Does listing in the official MCP Registry mean a server has been reviewed?

No. Publishing requires proving control of the namespace — a GitHub account or a domain, via OAuth, DNS TXT or an HTTP challenge — and moderation is reactive: the community flags abuse and maintainers denylist entries afterwards. It is a strong identity signal and not a safety review.

Are these four competitors?

Mostly not. The official Registry is deliberately positioned as an upstream source of truth for names and metadata, with subregistries and marketplaces layering discovery, curation and hosting on top. Smithery and PulseMCP compete with each other on discovery; Docker's catalogue competes with your own container build.

What does a signed Docker image actually guarantee?

That the artefact you pulled is the one the pipeline produced, that its contents are enumerated in an SBOM, that its build has an attestation, and that it has been scanned for known vulnerabilities. It guarantees nothing about the server's behaviour, because a faithfully built malicious server signs exactly as well as a benign one.

Is a hosted MCP endpoint less safe than one I run?

It is differently safe. You give up the ability to enforce egress and inspect the process, and you add a party whose deploys can change the tool definitions your model reads. In exchange you get an endpoint that works now and someone else's on-call. For a prototype that is a good trade; for a server holding production credentials, decide it deliberately.

What should I check before installing any MCP server?

Four things, in order: who owns the namespace, what the tool descriptions instruct the model to do, what the process can reach on the network and the filesystem, and whether the version is pinned. None of the four indexes answers the second or third for you.

Further reading

On this wiki:

Sources: