MCP Registry Discovery Export
Pricing
from $4.00 / 1,000 mcp registry records
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
0
Monthly active users
12 days ago
Last modified
Categories
Security
Limited permissionsShare
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 task | Start here | What to inspect |
|---|---|---|
| Build an internal MCP catalog | Export five latest Registry entries | Name, version, packages, remotes and source URL |
| Shortlist integrations for a developer project | Search Registry metadata for a relevant term | Description and transport metadata; test compatibility yourself |
| Refresh an existing spreadsheet | Export another bounded snapshot and join by recordId | Compare 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. recordIdis SHA-256-derived from canonical Registryname@versionidentity.sourceClaimsrecords the official Registry version URL, Registry record identity, retrieval time, and only fields directly supplied as recognized Registry claims.fieldProvenancecontains only directregistryclaims. It excludes deterministic fallback fields.derivationsexplicitly identifies a title generated from canonicalnameand anunknownstatus produced when Registry status is absent or unrecognized; derived fields never appear inclaimedFields.- Recognized Registry status and publication metadata are preserved, including
active,deprecated, anddeleted;unknownis a declared fallback rather than a Registry-claimed status. assessment.statusis alwaysnot_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.
maxServersconstrains URL-mode requests before fetch. Every mode also has finite URL, page, request, item-attempt, and error ceilings exposed inOUTPUT.sourceHealth[].limits.
Input
| Field | Type | Default | Behavior |
|---|---|---|---|
mode | all, source, urls, search | all | Chooses an official Registry workflow |
source | registry | registry | The only selectable source; used by source mode |
urls | string array, at most 1000 items | [] | Exact official Registry version URLs used in urls mode |
searchQuery | string | "" | Required in search mode |
maxServers | integer, 1-50000 | 5 | Maximum exported records and primary work budget |
deduplicate | boolean | true | Removes duplicate Registry records by stable ID |
allowPartial | boolean | false | Allows 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.
| Status | Meaning |
|---|---|
complete | The official Registry read produced usable records without request or parse errors |
partial | Some Registry items failed while other Registry items produced usable records |
failed | No 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 testfind 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.