MCP Scorecard

Mission Statement GitHub

Trust Data, The Full Picture

Integrate MCP trust scores into your tools, agents, and workflows.

Free tier included. No credit card required.

Get Access

Free

100 requests / day

$0 forever
  • All endpoints
  • Rate limit headers included
  • Personal projects & evaluation
Pro

10,000 requests / day

Coming soon
  • All endpoints
  • Rate limit headers included
  • Personal projects & evaluation
  • Production integrations & SaaS
  • Bulk server lookups
  • Score change notifications
  • Priority support
Coming Soon

Quick Start

REST API

Base URL for all API requests:

https://api.mcp-scorecard.ai/v1

Example request:

curl -H "X-API-Key: your_key" \ https://api.mcp-scorecard.ai/v1/stats

MCP Server

Give your AI agent direct access to trust scores. The mcp-scorecard-server package wraps this API as an MCP tool — no HTTP calls needed in your code.

Add to your Claude Code config (.mcp.json):

{ "mcpServers": { "mcp-scorecard": { "command": "uvx", "args": ["mcp-scorecard-server"], "env": { "SCORECARD_API_KEY": "your_key" } } } }

Available tools:

ToolDescription
check_server_trustLook up trust score, flags, and install info for a specific server
search_serversSearch servers by keyword (min 2 chars)
list_serversBrowse and filter servers by score, flags, platform, or namespace
get_ecosystem_statsAggregate stats — total servers, score distribution, flag summary

Works with any MCP-compatible client — Claude Code, Cursor, Windsurf, or your own agent.

Authentication

All endpoints except /v1/health require an API key passed via the X-API-Key header.

# Authenticated request curl -H "X-API-Key: sk_your_key_here" \ https://api.mcp-scorecard.ai/v1/servers # Health check (no auth needed) curl https://api.mcp-scorecard.ai/v1/health

Invalid or missing keys return 401 Unauthorized.

Endpoints

Health Check

GET /v1/health
Service status. No authentication required.
{ "data": { "status": "ok", "timestamp": "2026-03-02T12:00:00.000Z" }, "meta": { "cached": false } }

Ecosystem Statistics

GET /v1/stats
Aggregate statistics across all scored servers.
{ "data": { "total_servers": 2889, "average_score": 42.3, "median_score": 40, "score_distribution": { "High Trust": 312, "Moderate Trust": 891, ... }, "flag_summary": { "NO_SOURCE": 234, "DEAD_ENTRY": 156, ... }, "verified_publishers": 48 }, "meta": { "cached": false } }

List Servers

GET /v1/servers
List and filter servers. Paginated.
ParameterTypeDescription
limitintResults per page. 1–200, default 50.
offsetintPagination offset. Default 0.
sortstringSort field: trust_score, name, namespace, provenance, maintenance, popularity, permissions, scored_at.
orderstringSort direction: asc or desc. Default desc.
min_scoreintFilter by minimum trust score.
flagsstringFilter by flag name, e.g. SENSITIVE_CRED_REQUEST.
targetstringFilter by platform target, e.g. PostgreSQL.
namespacestringFilter by publisher namespace.
# Top 10 high-trust servers curl -H "X-API-Key: your_key" \ "https://api.mcp-scorecard.ai/v1/servers?min_score=80&limit=10"

Get Server

GET /v1/servers/:namespace/:id
Detailed trust data for a single server.
# Look up a specific server curl -H "X-API-Key: your_key" \ https://api.mcp-scorecard.ai/v1/servers/io.github.pgEdge/postgres-mcp
{ "data": { "name": "io.github.pgEdge/postgres-mcp", "trust_score": 68, "trust_label": "Moderate Trust", "scores": { "provenance": 75, "maintenance": 67, "popularity": 26, "permissions": 95 }, "flags": [], "badges": [], "verified_publisher": false, "targets": ["PostgreSQL"], "scored_at": "2026-03-02T08:00:00Z", "install": { "repo_url": "https://github.com/pgEdge/pgedge-postgres-mcp", "version": "1.0.0", "package_types": ["docker"], "transport_types": ["stdio"] } }, "meta": { "cached": false } }

Search

GET /v1/search?q=
Search servers by name. Minimum 2 characters.
ParameterTypeDescription
qstringSearch query. Required, min 2 characters.
limitintMax results. 1–200, default 20.
curl -H "X-API-Key: your_key" \ "https://api.mcp-scorecard.ai/v1/search?q=postgres"

Rate Limits

Rate limits reset daily at midnight UTC. Every response includes headers to track your usage:

X-RateLimit-Limit: 100 # Your daily limit X-RateLimit-Remaining: 87 # Requests left today X-RateLimit-Reset: 1709424000 # UTC midnight epoch

When you exceed your limit, the API returns 429 Too Many Requests with a Retry-After header indicating seconds until reset.

Response Format

All responses use a standard envelope:

{ "data": { ... }, # The response payload "meta": { # Request metadata "cached": true, # Whether this was a cache hit "total": 2889, # Total matching records (list endpoints) "limit": 50, # Page size "offset": 0 # Current offset } }

Responses may be cached for up to 1 hour. The meta.cached field indicates a cache hit. CORS is enabled for all origins.

Errors

Errors follow a consistent format:

{ "error": { "message": "Rate limit exceeded", "status": 429 } }
StatusMeaning
400Bad request — missing or invalid parameters
401Unauthorized — missing or invalid API key
404Not found — server or route doesn't exist
429Rate limit exceeded — wait for reset
502Upstream error — Supabase is unreachable

Use Cases

MCP Clients

Check trust scores before granting a server access to credentials.

CI/CD Pipelines

Gate MCP server additions on minimum trust thresholds.

Security Dashboards

Monitor trust signals across your fleet of MCP servers.

AI Agents

Evaluate server trust programmatically before tool selection.