Skip to content

Commit 05422af

Browse files
authored
Split OpenAPI specs into base and official registry versions (modelcontextprotocol#171)
Closes modelcontextprotocol#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
1 parent b8f7f75 commit 05422af

File tree

5 files changed

+70
-19
lines changed

5 files changed

+70
-19
lines changed

docs/faq.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,14 @@ The MCP Registry is the official centralized metadata repository for publicly-ac
1313
- Standardized installation and configuration information
1414
- Namespace management through DNS verification
1515

16+
### What is the difference between "Official MCP Registry", "MCP Registry", "MCP registry", "MCP Registry API", etc?
17+
18+
There are four underlying concepts:
19+
- "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.
20+
- "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.
21+
- "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)
22+
- "MCP server registry" (or "MCP registry"): A third party, likely commercial, implementation of the MCP Server Registry API or derivative specification.
23+
1624
### Is the MCP Registry a package registry?
1725

1826
No. The MCP Registry stores metadata about MCP servers and references to where they're hosted (npm, PyPI, NuGet, Docker Hub, etc.), but does not host the actual source code or packages.

docs/server-registry-api/README.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Registry API
2+
3+
There are a variety of use cases where an MCP Server Registry API is useful to the MCP ecosystem. At least the following:
4+
- Implementation of a centralized, publicly available catalog of all publicly accessible MCP server implementations
5+
- Implementation of a private catalog of MCP server implementations exclusively accessible by a specific group of people (e.g. a single enterprise)
6+
7+
These scenarios would benefit from a standard "MCP server registry API" specification that they could potentially compose, as well as share resources (like SDK implementations).
8+
9+
The centralized, publicly available catalog ("Official MCP Registry") needs additional constraints that need not apply to the broader "MCP server registry API"
10+
11+
References:
12+
- [openapi.yaml](./openapi.yaml) - A reusable API specification (MCP Server Registry API) that anyone building any sort of "MCP server registry" should consider adopting / aligning with.
13+
- [examples.md](./api_examples.md) - Example manifestations of the OpenAPI specification
14+
- [official-registry-openapi.ayml](./official-registry-openapi.yaml) - The specification backing the Official MCP Registry; a derivative of the MCP Server Registry API specification.
File renamed without changes.
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
openapi: 3.1.0
2+
jsonSchemaDialect: "https://json-schema.org/draft/2020-12/schema"
3+
info:
4+
title: Official MCP Registry API
5+
summary: Official API for discovering and accessing MCP servers metadata with registry constraints
6+
description: |
7+
Extends the base MCP Server Registry API with additional constraints for the official registry and adding additional functionality.
8+
The Official Registry allows server creators to publish and maintain metadata about their servers in a standardized format.
9+
The read side of the API enables MCP client applications and "server aggregator" type consumers to discover and install MCP servers.
10+
version: 0.0.1
11+
contact:
12+
name: MCP Community Working Group
13+
license:
14+
name: MIT
15+
identifier: MIT
16+
servers:
17+
- url: https://registry.modelcontextprotocol.io/api/v0
18+
description: Official MCP Registry
19+
20+
paths:
21+
/servers:
22+
$ref: 'https://modelcontextprotocol.io/schemas/draft/2025-07-09/server-registry-openapi#/paths/~1servers'
23+
/servers/{id}:
24+
$ref: 'https://modelcontextprotocol.io/schemas/draft/2025-07-09/server-registry-openapi#/paths/~1servers~1{id}'
25+
26+
components:
27+
schemas:
28+
Repository:
29+
allOf:
30+
- $ref: 'https://modelcontextprotocol.io/schemas/draft/2025-07-09/server-registry-openapi#/components/schemas/Repository'
31+
- type: object
32+
properties:
33+
source:
34+
enum: [github]
35+
36+
Package:
37+
allOf:
38+
- $ref: 'https://modelcontextprotocol.io/schemas/draft/2025-07-09/server-registry-openapi#/components/schemas/Package'
39+
- type: object
40+
properties:
41+
registry_name:
42+
enum: [npm, docker, pypi, nuget]

docs/openapi.yaml renamed to docs/server-registry-api/openapi.yaml

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,26 @@
11
openapi: 3.1.0
22
jsonSchemaDialect: "https://json-schema.org/draft/2020-12/schema"
3+
$id: https://modelcontextprotocol.io/schemas/draft/2025-07-09/server-registry-openapi
34
info:
45
title: MCP Server Registry API
5-
summary: API for discovering and accessing MCP servers metadata
6+
summary: API for discovering and accessing MCP server metadata
67
description: |
7-
REST API that centralizes metadata about publicly available MCP servers by allowing server creators to submit
8-
and maintain metadata about their servers in a standardized format. This API enables MCP client
9-
applications and "server aggregator" type consumers to discover and install MCP servers.
10-
version: 0.0.1
11-
contact:
12-
name: MCP Community Working Group
8+
Specification for a theoretical REST API that serves up metadata about MCP servers.
139
license:
1410
name: MIT
1511
identifier: MIT
16-
servers:
17-
# TODO: Still think a unique name would be better; maybe we open a public discussion on the topic and let people submit ideas?
18-
- url: https://registry.modelcontextprotocol.io
19-
description: MCP Server Registry
20-
# TODO: Webhooks here would be interesting, but out of scope for MVP
2112

2213
paths:
23-
/v0/servers:
14+
/servers:
2415
get:
2516
summary: List MCP servers
2617
description: Returns a list of all registered MCP servers
2718
parameters:
2819
- name: limit
2920
in: query
30-
description: Number of results per page (maximum 5000)
21+
description: Number of results per page
3122
schema:
3223
type: integer
33-
default: 5000
34-
maximum: 5000
3524
minimum: 1
3625
- name: offset
3726
in: query
@@ -47,7 +36,7 @@ paths:
4736
application/json:
4837
schema:
4938
$ref: '#/components/schemas/ServerList'
50-
/v0/servers/{id}:
39+
/servers/{id}:
5140
get:
5241
summary: Get MCP server details
5342
description: Returns detailed information about a specific MCP server
@@ -96,7 +85,6 @@ components:
9685
example: "https://github.com/modelcontextprotocol/servers"
9786
source:
9887
type: string
99-
enum: [github, gitlab] # TODO: Add all supported sources as a whitelist
10088
example: "github"
10189
id:
10290
type: string
@@ -174,7 +162,6 @@ components:
174162
properties:
175163
registry_name:
176164
type: string
177-
enum: [npm, docker, pypi, homebrew, nuget]
178165
description: Package registry type
179166
example: "npm"
180167
name:

0 commit comments

Comments
 (0)