Skip to content

387 active servers declare neither remotes nor packages and cannot be reached #1579

Description

@Xdott

Describe the bug

387 servers with status: active declare neither remotes nor packages. They are published and discoverable, but their record contains no way for any client to reach or install them.

I found this while taking a census of the registry, not while trying to publish, so this is a data-quality observation rather than a publish-flow bug.

Numbers

Retrieved every record from GET /v0/servers by cursor pagination (August 2026): 82,994 version records, resolving to 25,125 distinct servers after filtering on _meta[...].isLatest.

Finding Count Share of distinct servers
No remotes and no packages 393 1.56%
...of which status: active 387 1.54%
Still carrying the unedited description template 8
status: deprecated but still listed 262 1.04%

Examples (all status: active, no transport declared)

  • ai.complyme.mcp/mcp v1.0.0
  • ai.megastructure/arc v1.9.1
  • app.qwady.thorns/thornguard v0.1.0
  • bid.scope/healthcare v0.0.0
  • capital.hove/read-only-mysql-mcp-server v0.1.0

The 8 servers whose description is still the template string [describe what your server does]:

co.contraption/mcp, io.github.TranThienTrong/asset-auto-picker, io.github.arun250492/Personal-MCP, io.github.atarkowska/fastmcp-pdftools, io.github.augee99/mcp-weather, io.github.manoharanRajesh/python-version, io.github.preedew17/mcp-bookmark, io.github.shafarenkacfi/mcp-server-registration

Expected behavior

Publication could reject a server that declares neither remotes nor packages, since such a record cannot be acted on by any client. The template-description case is a one-line string check.

This is adjacent to #1193 and #1004 but distinct: #1193 concerns skipping deprecated servers during remote-URL validation at publish time, and this is about records that declare no transport to validate in the first place.

To Reproduce

python fetch_mcp_registry.py --out mcp-registry.jsonl
python -c "
import json
rows=[json.loads(l) for l in open('mcp-latest.jsonl',encoding='utf-8')]
none=[r for r in rows if not r.get('remotes') and not r.get('packages')]
print(len(none), 'of', len(rows), 'have no transport')
print(sum(1 for r in none if r.get('_status')=='active'), 'of those are active')
"

Retrieval script: https://github.com/ashishsinha1602/dataset-integrity-audit/blob/main/fetch_mcp_registry.py

Additional context

Counts are a snapshot from August 2026 and will drift. One caveat on methodology, in case it is useful to anyone repeating this: the endpoint returns one record per version, so measuring without filtering to isLatest inflates duplicate-description rates roughly 20x (74.5% vs 3.6%). The mean is 3.30 versions per server, with a maximum of 1,175.

Happy to open a PR adding the transport check if that would be welcome.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions