Skip to content

Commit a5f417b

Browse files
authored
Split "general" server.json from "registry-specific" server.json (modelcontextprotocol#167)
Closes modelcontextprotocol#155 The "generalized" `server.json` is the one that can be used in a variety of situations: - Discoverability on a centralized registry (i.e. our official Registry work) - Discoverability on a decentralized .well-known endpoint - As a response to an initialization call, so the client knows information about the MCP server to which it is connecting - As an input into crafting a [DXT file](https://www.anthropic.com/engineering/desktop-extensions) - Packaged in with the source code of an MCP server, so as to have a structured way context Of these, the official Registry is but one use case. The Registry has a unique set of concerns for which we are optimizing, like whitelisting of specific registries we trust to host MCP server source code for the public community (`npm`, `pypi`, etc). It is not necessary to have such a constraint for the generalized server.json, which may be used in, for example, an internal context where such a validation doesn't make sense. So I've done the following at a high level: - Renamed the prior `schema.json` to be `registry-schema.json` - Introduced a more generic `schema.json` to serve as the schema for the generalized `server.json` - Refactored `registry-schema.json` to be simply a constraint on the base `schema.json` I made a few small changes in this transition: - Removed `gitlab` as an option in `repository.source` for `registry-schema.json`. I'm fine going live with just GitHub support; would be happy to take a contribution from e.g. Gitlab employees or a motivated Gitlab customer to expand anytime. - Removed `homebrew` as an option in `packages.registry_name`; never really made sense, not a place where folks are publishing MCP servers - Added `docker` to `packages.runtime_hint`; was just a missing oversight - Gave both schemas a global `$id` ~- Removed `release_date` from both schemas. Certainly not something that makes sense for the generalized schema. It actually doesn't make sense for the Registry schema either, because this is the server.json that _users will submit_, i.e. the _input_ into the Registry publication API. `release_date` will be a piece of _output_ metadata. The Registry API will be free to append such extra metadata for GET /:id requests of servers, and the data can be present in the OpenAPI spec, but it does not need to be in the registry-server.json JSON schema.~ - Note this is no longer in this PR; rebased on modelcontextprotocol#168 which included it - Removed unnecessary enums from the generalized `schema.json`
1 parent 6a2e5d1 commit a5f417b

File tree

3 files changed

+45
-12
lines changed

3 files changed

+45
-12
lines changed

docs/server-json/README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,5 @@ Please note: this is different from the file commonly referred to as `mcp.json`,
1313

1414
References:
1515
- [schema.json](./schema.json) - The official JSON schema specification for this representation
16-
- [examples.md](./examples.md) - Example manifestations of the JSON schema
16+
- [examples.md](./examples.md) - Example manifestations of the JSON schema
17+
- [registry-schema.json](./registry-schema.json) - A more constrained version of `schema.json` that the official registry supports

docs/server-json/registry-schema.json

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
{
2+
"$schema": "https://json-schema.org/draft/2020-12/schema",
3+
"$id": "https://modelcontextprotocol.io/schemas/draft/2025-07-09/registry-server.json",
4+
"title": "MCP Server Detail - Registry Schema",
5+
"description": "Registry-specific constraints for MCP server representation. Extends the base schema with additional validation rules.",
6+
"$ref": "https://modelcontextprotocol.io/schemas/draft/2025-07-09/server.json",
7+
"properties": {
8+
"repository": {
9+
"properties": {
10+
"source": {
11+
"enum": [
12+
"github"
13+
]
14+
}
15+
}
16+
},
17+
"packages": {
18+
"items": {
19+
"properties": {
20+
"registry_name": {
21+
"enum": [
22+
"npm",
23+
"pypi",
24+
"docker",
25+
"nuget"
26+
]
27+
},
28+
"runtime_hint": {
29+
"enum": [
30+
"npx",
31+
"uvx",
32+
"docker",
33+
"dnx"
34+
]
35+
}
36+
}
37+
}
38+
}
39+
}
40+
}

docs/server-json/schema.json

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
{
22
"$schema": "https://json-schema.org/draft/2020-12/schema",
3+
"$id": "https://modelcontextprotocol.io/schemas/draft/2025-07-09/server.json",
34
"title": "MCP Server Detail",
45
"$ref": "#/$defs/ServerDetail",
56
"$defs": {
@@ -18,10 +19,7 @@
1819
},
1920
"source": {
2021
"type": "string",
21-
"enum": [
22-
"github",
23-
"gitlab"
24-
],
22+
"description": "Repository hosting service",
2523
"example": "github"
2624
},
2725
"id": {
@@ -32,6 +30,7 @@
3230
},
3331
"VersionDetail": {
3432
"type": "object",
33+
"description": "Version information for this server. Defined as an object to allow for downstream extensibility (e.g. release_date)",
3534
"required": [
3635
"version"
3736
],
@@ -79,13 +78,6 @@
7978
"properties": {
8079
"registry_name": {
8180
"type": "string",
82-
"enum": [
83-
"npm",
84-
"docker",
85-
"pypi",
86-
"homebrew",
87-
"nuget"
88-
],
8981
"description": "Package registry type",
9082
"example": "npm"
9183
},

0 commit comments

Comments
 (0)