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.

GET/api/v1/scores.jsonAPI keyapplication/json

Request an API key →17734 servers · 19005 scored versions · 114030 findings · rubric 1.0.0

Free vs. subscription. Browsing the register, every per-server grade page, and the dispute process are free and open — check any server before you install it, no account needed. The bulk dataset export below is a paid monthly subscription: it's the whole graded corpus in one call, for teams that want to automate against it.Get access →

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_KEY

Shape

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:

  • serversServerRecord[]: registry identity (name, publisher, package refs, versions, categories).
  • scoresScoreReport[]: one verdict per server+version, with a grade, a 0–100 score (null when unscannable), and refs to the findings behind it.
  • findingsFinding[]: each check's result (pass/warn/fail/unscannable) plus the evidence and weight.
{
  "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.

Stability: the 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.