MCP Catalog API
A public, read-only HTTP API over the crawled MCP catalog. It powers this site and is open for anyone to build on - no key, no signup. Every response is JSON in a single stable envelope.
Base URL
https://api.agentage.io/api/mcp
Machine-readable spec: openapi.json (OpenAPI 1.0.0). For agents, see llms.txt.
Endpoints
Paginated, filterable, sortable server list. All filters AND-combine.
| Param | In | Type | Description | |
|---|---|---|---|---|
| page | query | optional | integer | Page number, 1-based. |
| limit | query | optional | integer (1-100) | Items per page (1-100). |
| type | query | optional | npm | pypi | oci | mcpb | nuget | remote | Filter by package registry type; "remote" means the server has a hosted endpoint. |
| category | query | optional | Development & Coding | Data & Databases | Search & Web | AI & Machine Learning | Productivity & Docs | Communication & Messaging | Cloud & DevOps | Finance & Crypto | Security | Media & Design | Browser & Automation | Knowledge & Memory | Commerce & Marketing | Other | Filter by AI-taxonomy label (exact match). |
| language | query | optional | string (1-80) | Filter by GitHub language (exact; an unknown value matches nothing, not a 400). |
| license | query | optional | string (1-80) | Filter by GitHub license (exact; an unknown value matches nothing, not a 400). |
| sort | query | optional | name | stars | updated | downloads | Sort order: name asc, stars/updated/downloads desc, with a slug asc tie-break. |
curl "https://api.agentage.io/api/mcp/mcps?type=npm&category=Security&sort=stars&limit=24"
Single server detail, merging its README and captured tools when present.
| Param | In | Type | Description | |
|---|---|---|---|---|
| slug | path | required | string (1-200) | Catalog server slug. |
curl "https://api.agentage.io/api/mcp/mcps/example-server"
Official MCP-registry-compatible read alias (subregistry pattern). Returns the { servers: [{ server, _meta }], metadata } envelope - NOT the house { success, data, meta } shape - so registry clients consume it directly. Each entry carries our enrichment under _meta["io.agentage.catalog/v0"]. Cursor-paginated; supports updated_since + substring search. Only the latest version is stored, so version is accepted for compatibility and ignored. See https://modelcontextprotocol.io/registry/registry-aggregators.
| Param | In | Type | Description | |
|---|---|---|---|---|
| cursor | query | optional | string (1-200) | Opaque pagination cursor from a prior page metadata.nextCursor; pass it back verbatim. |
| limit | query | optional | integer (1-100) | Max servers per page (1-100). |
| updated_since | query | optional | string | RFC 3339 date-time; return only servers updated at or after it. |
| search | query | optional | string (1-100) | Case-insensitive substring match on the server name. |
| version | query | optional | string (1-100) | Accepted for registry compatibility (use "latest"); only the latest version is stored, so any value returns latest. |
curl "https://api.agentage.io/api/mcp/v0.1/servers?limit=50"
Anchored-prefix, popularity-ranked typeahead over server names.
| Param | In | Type | Description | |
|---|---|---|---|---|
| q | query | required | string (1-100) | Search query, 1-100 chars (trimmed). |
| limit | query | optional | integer (1-20) | Max suggestions (1-20). |
curl "https://api.agentage.io/api/mcp/autocomplete?q=weat&limit=8"
Relevance-ranked search over the catalog. sort is ignored (textScore wins).
| Param | In | Type | Description | |
|---|---|---|---|---|
| q | query | required | string (1-100) | Search query, 1-100 chars (trimmed). |
| page | query | optional | integer | Page number, 1-based. |
| limit | query | optional | integer (1-100) | Items per page (1-100). |
| type | query | optional | npm | pypi | oci | mcpb | nuget | remote | Filter by package registry type; "remote" means the server has a hosted endpoint. |
| category | query | optional | Development & Coding | Data & Databases | Search & Web | AI & Machine Learning | Productivity & Docs | Communication & Messaging | Cloud & DevOps | Finance & Crypto | Security | Media & Design | Browser & Automation | Knowledge & Memory | Commerce & Marketing | Other | Filter by AI-taxonomy label (exact match). |
| language | query | optional | string (1-80) | Filter by GitHub language (exact; an unknown value matches nothing, not a 400). |
| license | query | optional | string (1-80) | Filter by GitHub license (exact; an unknown value matches nothing, not a 400). |
curl "https://api.agentage.io/api/mcp/search?q=weather&type=npm&limit=10"
Each AI-taxonomy label with its server count, most-used first.
curl "https://api.agentage.io/api/mcp/categories"
Categories, languages, and licenses in one call.
curl "https://api.agentage.io/api/mcp/facets"
Each GitHub language with its server count, most-used first.
curl "https://api.agentage.io/api/mcp/languages"
Each GitHub license with its server count, most-used first.
curl "https://api.agentage.io/api/mcp/licenses"
Every slug with a lastmod, unpaginated. Feeds the sitemap.
curl "https://api.agentage.io/api/mcp/slugs"
The signed-in user pinned servers, most-recently-added first.
curl -H "Authorization: Bearer $TOKEN" "https://api.agentage.io/api/mcp/favorites"
Pin a server by slug. Idempotent; an unknown slug is a 404.
curl -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" -d '{"slug":"example-server"}' "https://api.agentage.io/api/mcp/favorites"Unpin a server by slug. Idempotent; a missing favorite still succeeds.
| Param | In | Type | Description | |
|---|---|---|---|---|
| slug | path | required | string (1-200) | Catalog server slug. |
curl -X DELETE -H "Authorization: Bearer $TOKEN" "https://api.agentage.io/api/mcp/favorites/example-server"
The machine-readable OpenAPI 3.1 spec for this API.
curl "https://api.agentage.io/api/mcp/openapi.json"
Response envelope
// success
{ "success": true, "data": <payload>, "meta": <optional> }
// failure
{ "success": false, "error": { "code": "STRING_CODE", "message": "..." } }error.code is always a stable constant (INVALID_QUERY, NOT_FOUND, METHOD_NOT_ALLOWED, UNAUTHORIZED, RATE_LIMITED, INTERNAL_ERROR). meta.pagination is present on list and search.
Rate limits, CORS, and stability
- Rate limited with a lift: 30 req/s (burst 60) anonymous, keyed by IP; a valid agentage bearer lifts you to 100 req/s (burst 200), keyed by user. Every response carries
X-RateLimit-*; over the limit returns429withRetry-After. - CORS is open - any origin may read the API directly from the browser.
GET-only except/favorites; any other verb returns405with anAllow: GETheader.- Read-only and additive-only: fields and endpoints are added, never removed or renamed under this contract. The
{ success, data, meta }envelope is invariant.