Registry coverage
Every index of AI-agent packages is built on a discovery surface, and every discovery surface misses things. We publish ours: how many packages we have scanned, how many of them the official registry has a record of, and the measured reasons for the difference. We publish the gap in the other direction too — the first-party packages we know about and have not reached yet.
This is a page about coverage, not about quality. Nothing here ranks or grades the packages it names.
What we can count today
- Packages we have scanned
- 749Registry-wide, every package type, all time.
- Carrying registry attestation
- Not yet measuredOur packages API does not publish an attestation tier per package yet, so we have nothing to count. This is a gap in what we measure, not a measurement of zero.
- Scanned, nothing attests
- Not yet measuredOur packages API does not publish an attestation tier per package yet, so we have nothing to count. This is a gap in what we measure, not a measurement of zero.
- Coverage delta
- Not yet measuredOur packages API does not publish an attestation tier per package yet, so we have nothing to count. This is a gap in what we measure, not a measurement of zero.
Attestation means one of two things, both of them acts by someone other than us: the package is published under a namespace its publisher proved they own in the official MCP registry, or we read it from a first-party source directly. We read that classification from our packages API; we never compute it here, because a second definition of “attested” published under the same word would be worse than none.
Packages we scanned that nothing attests to
These are packages our scanners have run against, for which no official-registry namespace and no first-party source exists. They are in wide use. Their absence from the official registry is a fact about the registry’s coverage, not about them.
Not yet measured
Our packages API does not publish an attestation tier per package yet, so we have nothing to count. This is a gap in what we measure, not a measurement of zero.
We publish no composite verdict for these packages. Each one shows what each scanner reported and nothing more, and the composite column reads Unrated. A per-scanner finding is a checkable statement about what a tool reported; a single aggregate verdict is a judgement about someone’s work, and we do not publish one about a publisher who never engaged with us. Upstream stars, language and the per-scanner rollup are not carried on our packages listing yet, so those cells read “Not published” rather than showing a zero we did not measure.
No findings does not mean no risk. Nerlo aggregates automated scanner output; automated scanning is one layer of defence, not a substitute for review.
Why these are missed
We audited our own discovery surface on 25 July 2026 against 39 known first-party vendor MCP servers. 32 of them resolved to a live repository. Four causes came out of it, each with a number attached.
- Discovery ran on self-assigned topics. Of the 32 repositories that resolved, only 13 carried the GitHub topics our crawler searched on — 19 of 32 (59%) were unreachable at any page depth. A topic is a label a publisher may or may not add; it is not an index.
- The search cap made the sample thin and recency-biased.
topic:mcp-serveralone held 21,625 repositories when we measured. One crawl keeps at most 500 of them, ordered by most recently updated — 2.3% of that one topic, weighted toward whatever was pushed to last. A stable, finished package sinks out of reach precisely because it is stable and finished. - Package-registry crawling covered npm, PyPI and crates only. Servers shipped as container images or GitHub release binaries are invisible to all three. Of the 29 first-party packages we now track, 10 ship only on those channels — the count is computed from the table below, not asserted.
- No authoritative first-party index was consumed at all. Until 25 July 2026 every source we crawled was a search over self-described metadata. We now read the official MCP registry feed directly and keep the operator-curated first-party list below, whose entries are keyed by numeric repository id so a rename cannot drop one silently.
First-party packages we have not matched
The gap runs both ways, and this is the half that costs us something. These 29 packages are first-party servers from named vendors — attested by construction, because we read them from a source the vendor controls. Our registry holds no package of the same name for 23 of them today.
| Repository | Expected registry namespace | Language | Distribution | In our registry |
|---|---|---|---|---|
| hashicorp/terraform-mcp-server | io.github.hashicorp | Go | oci, github-release | No name match yet |
| hashicorp/vault-mcp-server | io.github.hashicorp | Go | oci, github-release | No name match yet |
| github/github-mcp-server | io.github.github | Go | oci, github-release | No name match yet |
| microsoft/playwright-mcp | io.github.microsoft | TypeScript | npm | No name match yet |
| microsoft/mcp | io.github.microsoft | C# | oci, github-release | No name match yet |
| Azure/azure-mcpUpstream archived | io.github.azure | C# | oci, github-release | No name match yet |
| Azure/mcp-kubernetes | io.github.azure | Go | oci, github-release | No name match yet |
| GoogleCloudPlatform/cloud-run-mcp | io.github.googlecloudplatform | JavaScript | npm | No name match yet |
| containers/kubernetes-mcp-server | io.github.containers | Go | oci, github-release | No name match yet |
| grafana/mcp-grafana | io.github.grafana | Go | oci, github-release | No name match yet |
| elastic/mcp-server-elasticsearch | io.github.elastic | Rust | crates | No name match yet |
| cloudflare/mcp-server-cloudflare | io.github.cloudflare | TypeScript | npm | No name match yet |
| awslabs/mcp | io.github.awslabs | Python | pypi | No name match yet |
| stripe/ai | io.github.stripe | TypeScript | npm | No name match yet |
| redis/mcp-redis | io.github.redis | Python | pypi | No name match yet |
| JetBrains/mcp-jetbrains | io.github.jetbrains | JavaScript | npm | No name match yet |
| neo4j-contrib/mcp-neo4j | io.github.neo4j-contrib | Python | pypi | No name match yet |
| modelcontextprotocol/servers | io.github.modelcontextprotocol | TypeScript | npm | No name match yet |
| supabase/mcp | io.github.supabase | TypeScript | npm | No name match yet |
| apify/apify-mcp-server | io.github.apify | TypeScript | npm | No name match yet |
| heroku/heroku-mcp-server | io.github.heroku | TypeScript | npm | No name match yet |
| paypal/agent-toolkit | io.github.paypal | TypeScript | npm | No name match yet |
| twilio-labs/mcp | io.github.twilio-labs | TypeScript | npm | No name match yet |
| googleapis/mcp-toolbox | io.github.googleapis | Go | oci, github-release | Name match in our registry |
| mongodb-js/mongodb-mcp-server | io.github.mongodb-js | TypeScript | npm | Name match in our registry |
| getsentry/sentry-mcp | io.github.getsentry | TypeScript | npm | Name match in our registry |
| docker/mcp-gateway | io.github.docker | Go | oci, github-release | Name match in our registry |
| sooperset/mcp-atlassian | io.github.sooperset | Python | pypi | Name match in our registry |
| chroma-core/chroma-mcp | io.github.chroma-core | Python | pypi | Name match in our registry |
How these numbers are produced
- The scanned total is read live from our own packages listing on every revalidation of this page.
- The attestation tier is computed by our backend from the official-registry namespace and the source a package was read from. This page reads it. Where it is absent, the counter says so instead of showing a zero.
- The first-party list is the operator-curated allowlist in this repository, resolved against the GitHub API on 25 July 2026. Adding a vendor is a one-line change to that file, and a test fails if this page and the file ever disagree.
- The “in our registry” column is a name search against our own listing, matched on the exact package name. A package we scanned under a different published name will read as no match, so the gap we report is an upper bound — the error runs against us, on purpose.
- We are not the official registry and this page does not speak for it. It reports what our discovery surface can see, measured on the dates given.