Skip to content
Back to the leaderboard

Methodology

How we test and score
MCP servers

Every review connects to your server live, the same way Claude, ChatGPT and Cursor do. We negotiate an MCP session over Streamable HTTP (falling back to legacy SSE), list tools and resources, and score six sections. The overall score is the mean of every applicable, non optional section, from 0 to 100.

Grades

A
85 to 100
B
70 to 84
C
55 to 69
D
40 to 54
F
below 40

Server metadata

Identity and usage metadata advertised in the MCP initialize handshake. Scoring: 100 weighted points.

Stable server name
A machine friendly name such as acme-orders (10 pts).
Human readable title
A display title clients can show in their UI (10 pts).
Useful description
At least 40 characters on what the server helps an agent do (20 pts).
Server version
A version string so clients can track releases (10 pts).
Public website
A valid websiteUrl (10 pts).
Scalable icon
An SVG icon, or a raster icon of 128px or larger (10 pts).
Server instructions
Usage instructions for agents in the initialize result (20 pts).
Declared capabilities
Tools, resources or prompts declared in capabilities (10 pts).

Discoverability

Whether people and clients can find and install the server without guesswork. Scoring: Passed ÷ applicable checks.

mcp.json or Server Card
A manifest under /.well-known that declares this endpoint.
Setup page at the MCP URL
Opening the endpoint in a browser returns a readable HTML setup page.
Client directory listings
ChatGPT, Claude and Cursor listings are shown for reference and never scored.

Protocol

Connection, transport negotiation and core list methods. Scoring: Passed ÷ applicable checks.

MCP negotiation
initialize succeeds over Streamable HTTP, falling back to legacy SSE.
tools/list
Returns the server's tools when the tools capability is declared.
resources/list
Responds when the resources capability is declared. An empty list passes.
Tools capability
Declared whenever tools are offered.

Tools

Tool definitions checked against the MCP spec and the limits of Claude, ChatGPT and Cursor. Scoring: Passed ÷ applicable checks.

Descriptions
Every tool has a non empty description.
Behavior hints
readOnlyHint, destructiveHint and openWorldHint declared as booleans.
Display titles
Every tool has title or annotations.title.
Name rules
Unique names of 64 characters or fewer using A to Z, digits, underscore, hyphen and dot.
Claude Code field size
Descriptions and server instructions under 2 KB each.
Hidden characters
No invisible or control characters in tool facing text.
No prompt injection
Tool text and server instructions contain no tool-poisoning directives, such as telling the agent to ignore instructions, hide actions from the user, or read local secrets.
Schemas
inputSchema is an object schema; any outputSchema is a valid JSON Schema object.

Tool documentation quality

How well each tool's text guides an agent to call it correctly. Scoring: Average of per tool scores.

Title (10%)
A short human title, not a copy of the tool name.
Description (30%)
Says what the tool does, when to use it and what it returns.
Inputs (30%)
Every argument described; IDs explain which tool returns them; no restated schema rules.
Annotations (15%)
All four hints: readOnly, destructive, idempotent and openWorld.
Output schema (15%)
A declared outputSchema whose fields are described.

MCP Apps (optional)

For servers that ship interactive views through ui:// resources. Scoring: Reported, never counted.

Readable views
Every tool linked ui:// resource is readable.
HTML envelope
Views are served with an HTML MIME type.
CSP metadata
Each view declares its content security policy.

Who gets listed in the MCP directory

The leaderboard only lists real MCP servers: the latest review must complete an MCP handshake and expose at least one tool. Failed connections are still recorded so you can diagnose them, but they are never ranked.

Sources

Show your score

Every listed server gets an embeddable badge at /badge/<id>.svg. Copy the Markdown from your server's report page into your README.