registry/docs/reference/api/generic-registry-api.md
adam jones 4f453ff2bd
Drop GET /v0/servers/{serverName} endpoint (#618)
Remove redundant endpoint as suggested in #617. Clients should now use
`GET /v0/servers/{serverName}/versions/latest` instead (using `latest`
as a special version value in the existing endpoint).

This simplifies the API surface and reduces implementation burden for
subregistries, while maintaining a clear migration path for consumers.

## Changes
- Removed `GET /v0/servers/{serverName}` endpoint
- Updated `GET /v0/servers/{serverName}/versions/{version}` to accept
`latest` as special version
- Updated all tests to use new endpoint pattern
- Updated documentation and OpenAPI spec
- Added breaking change notice to CHANGELOG

Fixes #617

Co-authored-by: Claude <noreply@anthropic.com>
2025-10-07 13:56:45 +03:00

2.5 KiB

Generic Registry API Specification

A standardized RESTful HTTP API for MCP registries to provide consistent endpoints for discovering and retrieving MCP servers.

Also see:

Browse the Complete API Specification

📋 View the full API specification interactively: Open openapi.yaml in an OpenAPI viewer like Stoplight Elements.

The official registry has some more endpoints and restrictions on top of this. See the official registry API spec for details.

Quick Reference

Core Endpoints

  • GET /v0/servers - List all servers with pagination
  • GET /v0/servers/{serverName}/versions - List all versions of a server
  • GET /v0/servers/{serverName}/versions/{version} - Get specific version of server. Use the special version latest to get the latest version.
  • POST /v0/publish - Publish new server (optional, registry-specific authentication)

Server names and version strings should be URL-encoded in paths.

Authentication

  • Read operations: No authentication required
  • Write operations: Registry-specific authentication (if supported)

Content Type

All requests and responses use application/json

Pagination

List endpoints use cursor-based pagination for efficient, stable results.

Usage

  1. Initial request: Omit the cursor parameter
  2. Subsequent requests: Use the nextCursor value from the previous response
  3. End of results: When nextCursor is null or empty, there are no more results

Important: Always treat cursors as opaque strings. Never manually construct or modify cursor values.

Basic Example: List Servers

curl https://registry.example.com/v0/servers?limit=10
{
  "servers": [
    {
      "server": {
        "name": "io.modelcontextprotocol/filesystem",
        "description": "Filesystem operations server",
        "version": "1.0.2"
      },
      "_meta": {
        "io.modelcontextprotocol.registry/official": {
          "status": "active",
          "publishedAt": "2025-01-01T10:30:00Z",
          "isLatest": true
        }
      }
    }
  ],
  "metadata": {
    "count": 10,
    "nextCursor": "com.example/my-server:1.0.0"
  }
}

For complete endpoint documentation, view the OpenAPI specification in a schema viewer.