Developer reference · Dataset export
Dataset export
The complete scored corpus — every server, every scored version, with the finding refs behind each grade — as one machine-readable file. Build an internal allowlist, gate CI on it, diff it over time, or feed it into your own tooling. It refreshes daily as the scanner re-crawls the registry.
Request an API key →17734 servers · 19005 scored versions · 114030 findings · rubric 1.0.0
Authentication
Pass your key as a bearer token. Without a valid key the export returns 402 Payment Required; everything else on the site stays open.
Authorization: Bearer $MCPGRADE_KEYShape
The payload is built from the @mcp-trust/schema contract (a versioned, public schema). Every score is recomputable from its findings, so nothing is a black box:
servers—ServerRecord[]: registry identity (name, publisher, package refs, versions, categories).scores—ScoreReport[]: one verdict per server+version, with agrade, a 0–100score(null when unscannable), and refs to the findings behind it.findings—Finding[]: each check'sresult(pass/warn/fail/unscannable) plus theevidenceandweight.
{
"schema_version": "v1",
"rubric_version": "1.0.0",
"generated_at": "2026-07-11T03:00:00.000Z",
"counts": { "servers": 17734, "scores": 19005, "findings": 114030 },
"servers": [ { "id": "srv-…", "name": "@acme/example-mcp", "publisher": { "namespace": "acme", "verified": true }, "package_refs": [ … ], "versions": [ … ], "categories": [ … ] } ],
"scores": [ { "server": "srv-…", "version": "1.0.0", "score": 82, "grade": "B", "findings": [ … refs … ], "rubric_version": "1.0.0", "generated_at": "…" } ]
}Using it
Fetch it once and filter. To pull every scored version below the B band (score < 75) into an internal blocklist:
curl -s https://mcpgrade.dev/api/v1/scores.json \
-H "Authorization: Bearer $MCPGRADE_KEY" \
| jq '.scores[] | select(.score != null and .score < 75) | {server, version, grade, score}'The findings refs on each score point back into the findings array, so you can surface the exact evidence behind any grade without a second request.
schema_version and rubric_version fields tell you which contract produced the data. The scanner does static analysis only — see therubric for what that does and does not cover.