protogrid
Find MCP servers by intent and get exactly how to connect to them right now. No proxying.
Should I use this
Quality & Safety
Findings (5)
- HIGH
- MEDIUMin get_connection
- LOWin get_server
- LOWin list_tools
- INFOin get_connection
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"registry": {
"url": "https://api.protogrid.dev/mcp"
}
}
}Remote endpoints
https://api.protogrid.dev/mcpstreamable-httpWhat it can do
Tool inventory
Tools (5)
🟢search(q, limit, class, transport, category, ...)
Hybrid (keyword + semantic) search over servers and their tools. Filter by connection class to keep only what you can reach autonomously (R0, R1).
Input Schema
{
"type": "object",
"properties": {
"q": {
"type": "string",
"minLength": 1,
"maxLength": 500,
"description": "What you want to do, in plain words, e.g. 'send an email' or 'query postgres'"
},
"limit": {
"description": "Results to return (default 10)",
"type": "integer",
"minimum": 1,
"maximum": 50
},
"class": {
"description": "Connection classes to keep, e.g. ['R0','R1']",
"type": "array",
"items": {
"type": "string",
"enum": [
"R0",
"R1",
"R2",
"L0",
"unknown"
]
}
},
"transport": {
"type": "string",
"enum": [
"streamable-http",
"sse"
]
},
"category": {
"type": "string",
"enum": [
"developer-tools",
"databases",
"web-search",
"files-storage",
"communication",
"productivity",
"ai-ml",
"cloud-devops",
"finance",
"commerce",
"maps-travel",
"media",
"science-health",
"security",
"iot-automation",
"legal-government"
]
},
"min_trust": {
"description": "Minimum trust score 0-100",
"type": "integer",
"minimum": 0,
"maximum": 100
},
"flags": {
"description": "Trust flags that must all be present",
"type": "array",
"items": {
"type": "string",
"enum": [
"multi-version-spam",
"duplicate-repo",
"no-repository",
"no-connection",
"deprecated",
"unreachable",
"blocked",
"deleted"
]
}
},
"exclude_flags": {
"description": "Trust flags, any of which excludes a server, e.g. ['multi-version-spam','duplicate-repo']",
"type": "array",
"items": {
"type": "string",
"enum": [
"multi-version-spam",
"duplicate-repo",
"no-repository",
"no-connection",
"deprecated",
"unreachable",
"blocked",
"deleted"
]
}
},
"min_quality": {
"description": "Minimum quality score 0-100; unscored servers are left out",
"type": "integer",
"minimum": 0,
"maximum": 100
},
"quality_flags": {
"description": "Quality flags that must all be present",
"type": "array",
"items": {
"type": "string",
"enum": [
"known-vulns",
"outdated-mcp-sdk"
]
}
},
"exclude_quality_flags": {
"description": "Quality flags, any of which excludes a server, e.g. ['known-vulns']",
"type": "array",
"items": {
"type": "string",
"enum": [
"known-vulns",
"outdated-mcp-sdk"
]
}
},
"owner_verified": {
"description": "true: only servers whose owner proved control of the namespace (not an audit)",
"type": "boolean"
}
},
"required": [
"q"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"properties": {
"query": {
"type": "string"
},
"mode": {
"type": "string",
"enum": [
"hybrid",
"keyword"
]
},
"count": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Official reverse-DNS name, the argument of every other tool"
},
"title": {
"type": [
"string",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"connection_class": {
"type": "string",
"enum": [
"R0",
"R1",
"R2",
"L0",
"unknown"
],
"description": "R0 remote no auth, R1 static secret, R2 OAuth, L0 local package"
},
"autonomous": {
"type": "boolean",
"description": "True when an agent can connect with no human step"
},
"human_steps": {
"type": "array",
"items": {
"type": "string"
}
},
"categories": {
"type": "array",
"items": {
"type": "string"
}
},
"trust_score": {
"type": [
"number",
"null"
]
},
"trust_flags": {
"type": "array",
"items": {
"type": "string"
}
},
"quality_score": {
"type": [
"number",
"null"
]
},
"quality_label": {
"type": "string",
"description": "strong, good, needs work, poor, new, not scored or blocked"
},
"quality_flags": {
"type": "array",
"items": {
"type": "string"
},
"description": "known-vulns, outdated-mcp-sdk: raised by failing dependency checks"
},
"owner_verified": {
"type": "boolean",
"description": "The owner proved control of the namespace; not an audit"
},
"tool_count": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"score": {
"type": "number",
"description": "Relevance of this result to the query"
},
"matched_tools": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"description": {
"type": [
"string",
"null"
]
}
},
"required": [
"name",
"description"
],
"additionalProperties": {}
}
}
},
"required": [
"name",
"title",
"description",
"connection_class",
"autonomous",
"human_steps",
"categories",
"trust_score",
"trust_flags",
"quality_score",
"quality_label",
"quality_flags",
"owner_verified",
"tool_count",
"score",
"matched_tools"
],
"additionalProperties": {}
}
},
"next_actions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"action": {
"type": "string"
},
"arguments": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"required": [
"action"
],
"additionalProperties": {}
},
"description": "Follow-up calls: action is the tool, arguments are ready to pass ({placeholders} are yours to fill)"
}
},
"required": [
"query",
"mode",
"count",
"results",
"next_actions"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": {}
}🟢get_server(name, schemas)
Official server.json plus connectability (class, remotes with auth/health, packages), current tools, trust breakdown and identity for one server name.
Input Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "Official reverse-DNS name, e.g. io.github.acme/acme-mcp"
},
"schemas": {
"description": "Include tool input/output schemas (default false; use list_tools for full schemas)",
"type": "boolean"
}
},
"required": [
"name"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"properties": {
"server": {
"type": "object",
"properties": {},
"additionalProperties": {},
"description": "The official server.json as published"
},
"_meta": {
"type": "object",
"properties": {
"dev.protogrid/connectability": {
"type": "object",
"properties": {
"class": {
"type": "string",
"enum": [
"R0",
"R1",
"R2",
"L0",
"unknown"
],
"description": "R0 remote no auth, R1 static secret, R2 OAuth, L0 local package"
},
"autonomous": {
"type": "boolean"
},
"human_steps": {
"type": "array",
"items": {
"type": "string"
}
},
"remotes": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": {}
},
"description": "Remotes with transport, auth, protocol and health"
},
"packages": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": {}
},
"description": "Packages with runtime hint and required secrets"
}
},
"required": [
"class",
"autonomous",
"human_steps",
"remotes",
"packages"
],
"additionalProperties": {}
},
"dev.protogrid/tools": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
}
},
"required": [
"name"
],
"additionalProperties": {}
},
"description": "Current tools; schemas only with schemas=true"
},
"dev.protogrid/trust": {
"type": "object",
"properties": {
"score": {
"type": [
"number",
"null"
]
},
"flags": {
"type": "array",
"items": {
"type": "string"
}
},
"blocked": {
"type": "boolean"
}
},
"required": [
"score",
"flags",
"blocked"
],
"additionalProperties": {}
},
"dev.protogrid/quality": {
"type": "object",
"properties": {
"score": {
"type": [
"number",
"null"
]
},
"label": {
"type": "string"
},
"checks": {}
},
"required": [
"score",
"label",
"checks"
],
"additionalProperties": {}
},
"dev.protogrid/identity": {
"type": "object",
"properties": {
"canonical_id": {
"type": "string"
},
"owner": {
"type": "object",
"properties": {
"verified": {
"type": "boolean"
}
},
"required": [
"verified"
],
"additionalProperties": {}
}
},
"required": [
"canonical_id",
"owner"
],
"additionalProperties": {}
}
},
"required": [
"dev.protogrid/connectability",
"dev.protogrid/tools",
"dev.protogrid/trust",
"dev.protogrid/quality",
"dev.protogrid/identity"
],
"additionalProperties": {},
"description": "protogrid enrichment next to the official registry metadata"
},
"next_actions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"action": {
"type": "string"
},
"arguments": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"required": [
"action"
],
"additionalProperties": {}
},
"description": "Follow-up calls: action is the tool, arguments are ready to pass ({placeholders} are yours to fill)"
}
},
"required": [
"server",
"_meta",
"next_actions"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": {}
}🟢list_tools(name, limit, cursor)
Every current tool of a server with full input/output schemas, paginated by tool name.
Input Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "Official reverse-DNS name"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100
},
"cursor": {
"description": "next_cursor from the previous page",
"type": "string"
}
},
"required": [
"name"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"properties": {
"server": {
"type": "string"
},
"count": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"tools": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"title": {
"type": [
"string",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"input_schema": {
"description": "JSON Schema of the arguments, as the server declares it"
},
"output_schema": {},
"annotations": {
"description": "Tool hints such as readOnlyHint, as the server declares them"
},
"source": {
"type": "string",
"enum": [
"probe",
"publisher"
]
},
"observed_at": {
"type": "string"
}
},
"required": [
"name",
"title",
"description",
"input_schema",
"output_schema",
"annotations",
"source",
"observed_at"
],
"additionalProperties": {}
}
},
"next_cursor": {
"description": "Pass as cursor for the next page; null on the last page",
"type": [
"string",
"null"
]
},
"next_actions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"action": {
"type": "string"
},
"arguments": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"required": [
"action"
],
"additionalProperties": {}
},
"description": "Follow-up calls: action is the tool, arguments are ready to pass ({placeholders} are yours to fill)"
}
},
"required": [
"server",
"count",
"tools",
"next_cursor",
"next_actions"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": {}
}🟢get_connection(name, target)
Minimal connection block for the preferred remote (or package) with ${SECRET} placeholders, formatted for a target client. Secrets are never accepted or returned.
Input Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "Official reverse-DNS name"
},
"target": {
"description": "Output format (default mcpServers)",
"type": "string",
"enum": [
"mcpServers",
"vscode",
"cursor",
"claude-code-cli",
"codex-toml",
"opencode",
"gemini",
"goose"
]
}
},
"required": [
"name"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"properties": {
"server": {
"type": "string"
},
"key": {
"type": "string",
"description": "Suggested name for the server in the client configuration"
},
"kind": {
"type": "string",
"enum": [
"remote",
"package",
"bundle"
]
},
"class": {
"type": "string",
"enum": [
"R0",
"R1",
"R2",
"L0",
"unknown"
],
"description": "R0 remote no auth, R1 static secret, R2 OAuth, L0 local package"
},
"autonomous": {
"type": "boolean"
},
"human_steps": {
"type": "array",
"items": {
"type": "string"
}
},
"target": {
"type": "string"
},
"content_type": {
"type": "string",
"enum": [
"application/json",
"text/plain"
]
},
"connection": {
"description": "The block for the target client: an object for JSON targets, a string for text ones"
},
"secrets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"where": {
"type": "string"
}
},
"required": [
"name",
"where"
],
"additionalProperties": {}
},
"description": "Placeholders to replace with values you hold"
},
"placeholders": {
"type": "string"
},
"next_actions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"action": {
"type": "string"
},
"arguments": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"required": [
"action"
],
"additionalProperties": {}
},
"description": "Follow-up calls: action is the tool, arguments are ready to pass ({placeholders} are yours to fill)"
}
},
"required": [
"server",
"key",
"kind",
"class",
"autonomous",
"human_steps",
"target",
"content_type",
"connection",
"secrets",
"placeholders",
"next_actions"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": {}
}🟢check_server(url, id, wait)
Probe a remote MCP server URL once, credential-free and without calling its tools, and get its quality checks and its readiness for the Claude and OpenAI directories. Pass `url` to start a check (waits up to 25 s for the result), or `id` to read one. Quota: a few checks per hour anonymously, more with an API key.
Input Schema
{
"type": "object",
"properties": {
"url": {
"description": "The server's streamable HTTP or SSE URL, e.g. https://mcp.example.com/mcp. Never include credentials.",
"type": "string",
"maxLength": 2000
},
"id": {
"description": "A check id returned earlier, to read its result",
"type": "string",
"maxLength": 64
},
"wait": {
"description": "Seconds to wait for the result (default 25)",
"type": "integer",
"minimum": 0,
"maximum": 25
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Pass as id to read the result later"
},
"status": {
"type": "string",
"enum": [
"queued",
"running",
"done",
"failed"
]
},
"url": {
"type": "string"
},
"requested_at": {
"type": "string"
},
"finished_at": {
"type": [
"string",
"null"
]
},
"server": {
"description": "The catalog server listing this URL, if any",
"type": [
"string",
"null"
]
},
"page": {
"type": "string",
"description": "Shareable result page"
},
"result": {
"description": "Present when status is done",
"type": "object",
"properties": {
"probe": {
"type": "object",
"properties": {},
"additionalProperties": {}
},
"quality": {
"type": "object",
"properties": {
"score": {
"type": [
"number",
"null"
]
},
"label": {
"type": "string"
}
},
"required": [
"score",
"label"
],
"additionalProperties": {}
},
"readiness": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": {}
},
"description": "Claude and OpenAI directory requirements, one per directory; items are pass, warn, fail, unknown, manual or na"
}
},
"required": [
"probe",
"quality",
"readiness"
],
"additionalProperties": {}
},
"error": {
"type": "string"
},
"disclaimer": {
"type": "string"
},
"next_actions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"action": {
"type": "string"
},
"arguments": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"required": [
"action"
],
"additionalProperties": {}
},
"description": "Follow-up calls: action is the tool, arguments are ready to pass ({placeholders} are yours to fill)"
}
},
"required": [
"id",
"status",
"url",
"requested_at",
"finished_at",
"server",
"page",
"disclaimer",
"next_actions"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": {}
}Community
Evidence