Skip to content

Conversation

@tadasant
Copy link
Member

@tadasant tadasant commented Jul 9, 2025

Closes #149

As noted in the FAQ update here, this is a helpful starting point in thinking about this:

### What is the difference between "Official MCP Registry", "MCP Registry", "MCP registry", "MCP Registry API", etc?

There are four underlying concepts:
- "MCP Server Registry API" (or "MCP Registry API"): The OpenAPI specification defined in [openapi.yaml](./server-registry-api/openapi.yaml). This is a reusable API specification that anyone building any sort of "MCP server registry" should consider adopting / aligning with.
- "Official MCP Registry" (or "MCP Registry"): The application that lives at `https://registry.modelcontextprotocol.io`. This registry currently only catalogs MCP servers, but may be extended in the future to also catalog MCP client/host apps and frameworks.
- "Official MCP Registry API": The REST API that lives at `https://registry.modelcontextprotocol.io/api`, with an OpenAPI specification defined at [official-registry-openapi.yaml](./server-registry-api/official-registry-openapi.yaml)
- "MCP server registry" (or "MCP registry"): A third party, likely commercial, implementation of the MCP Server Registry API or derivative specification.

Prior to this PR, we were just treating "MCP Server Registry API" and "Official MCP Registry API" to be the same thing. They are not the same: the latter is inherently a more constrained version of the former. A private deployment of a similar registry need not have constraints like "the only valid source code repositories are github and gitlab".

This PR separates out the definitions to match that path forward.

Notable Changes

Base OpenAPI spec (openapi.yaml)

  • Removed official-registry-specific constraints:
    • No maximum limit on /servers endpoint
    • No enum constraint on Repository.source
    • No enum constraint on Package.registry_name
  • Removed /v0 prefix from paths (it's now just baked into the official one's URL prefix)
  • Added $id for proper schema identification

Official Registry OpenAPI spec (official-registry-openapi.yaml)

  • Created as a derivative of the base spec using $ref
  • Re-adds official-registry-specific constraints:
    • Repository.source enum: [github]
    • Package.registry_name enum: [npm, docker, pypi, nuget]

Documentation updates

  • Added server-registry-api/README.md explaining the relationship between specs
  • Updated FAQ to clarify terminology
  • Reorganized docs structure

@tadasant tadasant requested a review from a team July 9, 2025 18:57
@tadasant tadasant enabled auto-merge (squash) July 10, 2025 00:45
@tadasant tadasant merged commit 05422af into main Jul 10, 2025
9 checks passed
@tadasant tadasant deleted the tadasant/split-out-openapi-specs branch July 10, 2025 00:46
domdomegg pushed a commit that referenced this pull request Aug 7, 2025
Closes #149

As noted in the FAQ update here, this is a helpful starting point in
thinking about this:

```
### What is the difference between "Official MCP Registry", "MCP Registry", "MCP registry", "MCP Registry API", etc?

There are four underlying concepts:
- "MCP Server Registry API" (or "MCP Registry API"): The OpenAPI specification defined in [openapi.yaml](./server-registry-api/openapi.yaml). This is a reusable API specification that anyone building any sort of "MCP server registry" should consider adopting / aligning with.
- "Official MCP Registry" (or "MCP Registry"): The application that lives at `https://registry.modelcontextprotocol.io`. This registry currently only catalogs MCP servers, but may be extended in the future to also catalog MCP client/host apps and frameworks.
- "Official MCP Registry API": The REST API that lives at `https://registry.modelcontextprotocol.io/api`, with an OpenAPI specification defined at [official-registry-openapi.yaml](./server-registry-api/official-registry-openapi.yaml)
- "MCP server registry" (or "MCP registry"): A third party, likely commercial, implementation of the MCP Server Registry API or derivative specification.
```

Prior to this PR, we were just treating "MCP Server Registry API" and
"Official MCP Registry API" to be the same thing. They are not the same:
the latter is inherently a more constrained version of the former. A
private deployment of a similar registry need not have constraints like
"the only valid source code repositories are `github` and `gitlab`".

This PR separates out the definitions to match that path forward.

## Notable Changes

### Base OpenAPI spec (`openapi.yaml`)
- Removed official-registry-specific constraints:
  - No maximum limit on `/servers` endpoint
  - No enum constraint on `Repository.source`
  - No enum constraint on `Package.registry_name`
- Removed `/v0` prefix from paths (it's now just baked into the
`official` one's URL prefix)
- Added `$id` for proper schema identification

### Official Registry OpenAPI spec (`official-registry-openapi.yaml`)
- Created as a derivative of the base spec using `$ref`
- Re-adds official-registry-specific constraints:
  - `Repository.source` enum: `[github]`
  - `Package.registry_name` enum: `[npm, docker, pypi, nuget]`

### Documentation updates
- Added `server-registry-api/README.md` explaining the relationship
between specs
- Updated FAQ to clarify terminology
- Reorganized docs structure
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Separate the OpenAPI spec for the Official Registry API vs. the MCP Registry API OpenAPI Schema

4 participants