MCP Registry Discovery Export avatar

MCP Registry Discovery Export

Pricing

from $4.00 / 1,000 mcp registry records

Go to Apify Store
MCP Registry Discovery Export

MCP Registry Discovery Export

Build an MCP integration shortlist or internal catalog from official Registry records. Export names, versions, packages and remotes to JSON/CSV. Registry only; no server testing or security scores.

Pricing

from $4.00 / 1,000 mcp registry records

Rating

0.0

(0)

Developer

Kris Jensen

Kris Jensen

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

12 days ago

Last modified

Security

Limited permissions

Share

Export deterministic, typed Registry Data from the official MCP Registry API. Every run writes official Registry source health and completeness to the OUTPUT key-value-store record.

Build a structured MCP inventory without copying directory pages by hand. Export Registry names, versions, package and remote metadata, source links, and retrieval timestamps as JSON, CSV, or Excel. Start with five records and inspect the output before increasing the limit.

This is a discovery/export tool, not a server evaluator. It does not score servers, call MCP tools, probe linked endpoints, or monitor changes.

Choose your first export

Your taskStart hereWhat to inspect
Build an internal MCP catalogExport five latest Registry entriesName, version, packages, remotes and source URL
Shortlist integrations for a developer projectSearch Registry metadata for a relevant termDescription and transport metadata; test compatibility yourself
Refresh an existing spreadsheetExport another bounded snapshot and join by recordIdCompare snapshots outside this Actor; there are no built-in alerts

Five-record inventory

{"mode":"all","maxServers":5,"allowPartial":false}

With current pricing and 256 MB memory, five delivered records cost $0.025: $0.005 start plus 5 x $0.004, including platform usage. Set the maximum run charge to $0.025 and timeout to 60 seconds in run options. A start charge still applies if no records are returned or the source fails; check the Pricing tab before running.

Search a shortlist

{"mode":"search","searchQuery":"database","maxServers":5,"allowPartial":false}

Search depends on Registry metadata and may return no matches. Open the dataset to download JSON, CSV or Excel; use JSON to retain nested package and remote metadata. Check OUTPUT for record count, source health and bounded completeness before importing results. Registry presence is not a security or compatibility endorsement.

Migration from the multi-directory version

This release uses only the official MCP Registry. It no longer aggregates Glama, PulseMCP, mcp.so, or MCP App Store, and does not enrich records through GitHub. all means all eligible Registry entries within your limit, not all directories. Remove the obsolete githubToken and computeQualityScores inputs. Old directory names and non-Registry URLs fail explicitly rather than silently returning a different source. Never put credentials in input.

Existing consumers must review the versioned dataset schema below; directory-specific fields and quality scores are not preserved. Use a new run rather than resurrecting an old run. The prior production build is retained separately for rollback; that does not guarantee its old sources still work.

Spending limits

The run checks the active result price and remaining spending limit before any Registry request, accounting for start charges. It fetches no more records than that limit permits and uses Apify's synthetic dataset event only; there is no additional manual result charge. A limit too small for one record produces budget_limited with zero records and no source requests. Dataset counts are reconciled after writes; interrupted or truncated writes cannot report the attempted count as successful output. See the Pricing tab for active prices and any scheduled changes.

Source boundary

The official MCP Registry API is the only data source and registry.modelcontextprotocol.io is the only allowed network host. The candidate reads official /v0.1/servers list/search responses and official server-version responses. It does not fetch directory pages or use directory enrichment.

Repository, package, website, remote, and schema values are exported only when they are supplied in Registry Data. They remain metadata or links: the candidate does not fetch repository files, package registry records, websites, remote MCP endpoints, schemas, or other linked content.

Registry Data is governed by the official Registry Terms of Service. This project is an unofficial downstream export and is not affiliated with or endorsed by the MCP project.

For recurring synchronization, schedule no more often than once per hour. This Actor does not maintain incremental sync state.

Reliability contract

  • Output is sorted by canonical name, version, and stable recordId; completion order and randomness do not affect selection.
  • recordId is SHA-256-derived from canonical Registry name@version identity.
  • sourceClaims records the official Registry version URL, Registry record identity, retrieval time, and only fields directly supplied as recognized Registry claims.
  • fieldProvenance contains only direct registry claims. It excludes deterministic fallback fields.
  • derivations explicitly identifies a title generated from canonical name and an unknown status produced when Registry status is absent or unrecognized; derived fields never appear in claimedFields.
  • Recognized Registry status and publication metadata are preserved, including active, deprecated, and deleted; unknown is a declared fallback rather than a Registry-claimed status.
  • assessment.status is always not_run; discovery is not evaluation, runtime validation, or security assessment.
  • HTTP redirects are not followed, responses are size-bounded, requests time out, and non-Registry hosts or unsupported Registry paths are rejected before fetch.
  • maxServers constrains URL-mode requests before fetch. Every mode also has finite URL, page, request, item-attempt, and error ceilings exposed in OUTPUT.sourceHealth[].limits.

Input

FieldTypeDefaultBehavior
modeall, source, urls, searchallChooses an official Registry workflow
sourceregistryregistryThe only selectable source; used by source mode
urlsstring array, at most 1000 items[]Exact official Registry version URLs used in urls mode
searchQuerystring""Required in search mode
maxServersinteger, 1-500005Maximum exported records and primary work budget
deduplicatebooleantrueRemoves duplicate Registry records by stable ID
allowPartialbooleanfalseAllows usable rows from a partially parsed Registry response

all and source read latest Registry versions with cursor pagination. search sends a query to the official Registry API and applies deterministic lexical matching to normalized Registry fields.

urls accepts only this exact HTTPS shape:

https://registry.modelcontextprotocol.io/v0.1/servers/{encoded-name}/versions/{version-or-latest}

Validation rejects HTTP, credentials, custom ports, fragments, query strings on version URLs, unsupported Registry paths, lookalike subdomains, and every other host.

In urls mode, at most min(urls.length, maxServers, 1000) detail requests are eligible. Inventory and search pagination use limits derived from maxServers, with hard ceilings of 500 pages, 1000 requests, 50000 attempted items, and 100 retained errors. The run stops before the next fetch when any ceiling is reached.

Examples

{
"mode": "all",
"maxServers": 50,
"allowPartial": false
}
{
"mode": "urls",
"urls": [
"https://registry.modelcontextprotocol.io/v0.1/servers/io.github.modelcontextprotocol%2Feverything/versions/latest"
]
}

Dataset contract

Each row is one normalized versioned Registry record. .actor/dataset_schema.json is the complete typed contract; the servers dataset view contains only official Registry-backed records.

{
"schemaVersion": "1.1",
"recordId": "registry-0123456789abcdef01234567",
"recordType": "mcp_server",
"name": "io.github.example/weather",
"title": "Weather",
"description": "Weather data through MCP.",
"version": "1.0.0",
"status": "active",
"isLatest": true,
"websiteUrl": null,
"repository": {
"url": "https://github.com/example/weather",
"source": "github",
"id": null,
"subfolder": null
},
"packages": [],
"remotes": [],
"transportTypes": [],
"registry": {
"schemaUrl": null,
"publishedAt": "2026-08-01T00:00:00Z",
"updatedAt": "2026-08-01T00:00:00Z",
"statusChangedAt": "2026-08-01T00:00:00Z",
"statusMessage": null
},
"sources": ["registry"],
"sourceClaims": [
{
"source": "registry",
"role": "primary",
"sourceRecordId": "io.github.example/weather@1.0.0",
"sourceUrl": "https://registry.modelcontextprotocol.io/v0.1/servers/io.github.example%2Fweather/versions/1.0.0",
"retrievedAt": "2026-08-02T00:00:00.000Z",
"claimedFields": ["description", "isLatest", "name", "registry", "status", "title", "version"]
}
],
"fieldProvenance": {
"description": ["registry"],
"isLatest": ["registry"],
"name": ["registry"],
"registry": ["registry"],
"status": ["registry"],
"title": ["registry"],
"version": ["registry"]
},
"derivations": [],
"conflicts": [],
"assessment": {
"status": "not_run",
"reason": "Evaluation, scoring, runtime probing, and security assessment are outside this discovery/export phase."
},
"observedAt": "2026-08-02T00:00:00.000Z"
}

Health semantics

The Actor writes OUTPUT even when health causes the run to fail.

StatusMeaning
completeThe official Registry read produced usable records without request or parse errors
partialSome Registry items failed while other Registry items produced usable records
failedNo Registry records were usable

Completeness is complete, bounded, partial, or none. A cap with a continuation cursor is bounded, not complete. With the default allowPartial: false, partial output is written and then the run fails; zero-output runs always fail.

OUTPUT includes top-level capped and terminationReasons, plus per-source counters, finite limits, and termination. record_cap is a healthy intentional bound with bounded completeness. A page, request, attempt, or error safety ceiling is partial when usable rows exist and failed when none exist; its completeness is partial or none, never complete.

When Registry title or recognized status is missing, the normalized row keeps a useful deterministic fallback and declares it separately:

{
"title": "My Server",
"status": "unknown",
"derivations": [
{ "field": "title", "method": "title_from_registry_name", "inputFields": ["name"] },
{ "field": "status", "method": "unknown_when_registry_status_absent_or_unrecognized", "inputFields": [] }
]
}

Those fallback fields are absent from sourceClaims[].claimedFields and fieldProvenance.

Deliberate deferrals

  • No quality, popularity, maintenance, compatibility, runtime, or security score.
  • No MCP initialization, tool/resource/prompt listing, tool invocation, auth flow, endpoint probing, or security certification.
  • No state, fingerprints, diffs, tombstones, alerts, or monitoring claims.
  • No claim that Registry-provided linked packages, repositories, websites, remotes, or setup metadata are safe or currently functional.

Support

Use the Issues tab on this Actor page for reproducible problems. Include the Apify run ID, a redacted input, the expected result, the observed result, and the OUTPUT source-health summary when available. Never post API tokens, credentials, private data, or customer data. Preserve partial, failed, bounded completeness, and termination reasons exactly; do not report Registry-linked metadata as tested or verified behavior.

Development

npm test
find src test -name '*.js' -exec node --check {} \;

Tests use local fixtures and Node's built-in test runner. They make no live source requests.

Both Dockerfiles install production dependencies with npm ci from package-lock.json and copy only the explicit package manifests and src/. The Docker context excludes everything by default and allowlists only the package manifests, the two Dockerfiles, and flat runtime src/*.js files. Path-only adversarial tests prove that case-variant or nested environment names, alternate VCS metadata, coverage, temp, cache, dependencies, and local artifacts cannot enter the build context or runtime image without reading their contents.

Changelog

  • 1.4.0: Node 24 runtime, fixed JSON summary persistence, spending-aware request/output limits, reconciled partial writes, and explicit legacy-input rejection. Official Registry only.

  • 1.3.3: Replaced Docker denylisting with an explicit runtime-context allowlist, excluded empty normalized Registry metadata from direct claims, and locked README provenance to the runtime contract.

  • 1.3.2: Added Docker context containment, finite pre-fetch work ceilings with truthful termination health, and explicit fallback-field derivations excluded from direct Registry claims.

  • 1.3.1: Source-rights correction. Official Registry API only; linked values remain unfetched Registry metadata; source/network/schema/docs/tests constrained to Registry-only behavior.

  • 1.3.0: Added deterministic typed Registry output, provenance, health/partial semantics, stable IDs, strict URL handling, schemas, and fixtures.