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
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.