Skip to content

Commit 453956d

Browse files
tadasantclaude
andauthored
chore: Release server.json schema version 2025-12-11 (#841)
Prepared by Claude Code, iterated and reviewed by me. ## Summary This PR releases the server.json schema version `2025-12-11`, incorporating URL template variables for remote servers from #570. ### What's New - **URL Template Variables for Remote Servers** - Remote servers can now define configurable variables in URLs using `{curly_braces}` notation, enabling multi-tenant deployments. ### Schema Version - `2025-10-17` → `2025-12-11` ## Release Sequence 1. ~~**First: Merge static repo PR** - modelcontextprotocol/static#11 (publishes schema to versioned URL)~~ 2. **Then: Merge this PR** - Updates registry code to reference the new schema version ## Changes in This PR - [x] Update CHANGELOG.md with release notes - [x] Update `CurrentSchemaVersion` in `pkg/model/constants.go` - [x] Update schema example URL in `docs/reference/api/openapi.yaml` - [x] Update schema URL in `pkg/api/v0/types.go` - [x] Update all documentation examples to use new schema version - [x] Regenerate `server.schema.json` ## Test Plan - [x] `make check` passes (lint, schema validation, example validation) - [x] Unit tests pass for validators and publisher commands 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.5 <[email protected]>
1 parent b58836c commit 453956d

File tree

13 files changed

+124
-38
lines changed

13 files changed

+124
-38
lines changed

cmd/publisher/commands/publish_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ func TestPublishCommand_DeprecatedSchema(t *testing.T) {
4444
errorSubstr: "deprecated schema detected",
4545
},
4646
{
47-
name: "current 2025-10-17 schema should pass validation",
48-
schema: "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json",
47+
name: "current 2025-12-11 schema should pass validation",
48+
schema: "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
4949
expectError: false,
5050
},
5151
{

data/seed.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[
22
{
3-
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json",
3+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
44
"name": "io.github.domdomegg/airtable-mcp-server",
55
"description": "Read and write access to Airtable database schemas, tables, and records.",
66
"repository": {
@@ -62,7 +62,7 @@
6262
]
6363
},
6464
{
65-
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json",
65+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
6666
"name": "io.github.domdomegg/airtable-mcp-server",
6767
"description": "Read and write access to Airtable database schemas, tables, and records.",
6868
"repository": {
@@ -115,7 +115,7 @@
115115
]
116116
},
117117
{
118-
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json",
118+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
119119
"name": "io.github.domdomegg/time-mcp-nuget",
120120
"description": "Get the current UTC time in RFC 3339 format.",
121121
"repository": {
@@ -136,7 +136,7 @@
136136
]
137137
},
138138
{
139-
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json",
139+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
140140
"name": "io.github.domdomegg/time-mcp-pypi",
141141
"description": "Get the current UTC time in RFC 3339 format.",
142142
"repository": {

docs/modelcontextprotocol-io/package-types.mdx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ npm packages use `"registryType": "npm"` in `server.json`. For example:
1515

1616
```json server.json highlight={9}
1717
{
18-
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json",
18+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
1919
"name": "io.github.username/email-integration-mcp",
2020
"title": "Email Integration",
2121
"description": "Send emails and manage email accounts",
@@ -53,7 +53,7 @@ PyPI packages use `"registryType": "pypi"` in `server.json`. For example:
5353

5454
```json server.json highlight={9}
5555
{
56-
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json",
56+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
5757
"name": "io.github.username/database-query-mcp",
5858
"title": "Database Query",
5959
"description": "Execute SQL queries and manage database connections",
@@ -91,7 +91,7 @@ NuGet packages use `"registryType": "nuget"` in `server.json`. For example:
9191

9292
```json server.json highlight={9}
9393
{
94-
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json",
94+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
9595
"name": "io.github.username/azure-devops-mcp",
9696
"title": "Azure DevOps",
9797
"description": "Manage Azure DevOps work items and pipelines",
@@ -135,7 +135,7 @@ Docker/OCI images use `"registryType": "oci"` in `server.json`. For example:
135135

136136
```json server.json highlight={9}
137137
{
138-
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json",
138+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
139139
"name": "io.github.username/kubernetes-manager-mcp",
140140
"title": "Kubernetes Manager",
141141
"description": "Deploy and manage Kubernetes resources",
@@ -170,7 +170,7 @@ MCPB packages use `"registryType": "mcpb"` in `server.json`. For example:
170170

171171
```json server.json highlight={9}
172172
{
173-
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json",
173+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
174174
"name": "io.github.username/image-processor-mcp",
175175
"title": "Image Processor",
176176
"description": "Process and transform images with various filters",

docs/modelcontextprotocol-io/quickstart.mdx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ Open the generated `server.json` file, and you should see contents like:
143143

144144
```json server.json
145145
{
146-
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json",
146+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
147147
"name": "io.github.my-username/weather",
148148
"description": "An MCP server for weather information.",
149149
"repository": {
@@ -177,7 +177,7 @@ Edit the contents as necessary:
177177

178178
```diff server.json
179179
{
180-
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json",
180+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
181181
"name": "io.github.my-username/weather",
182182
"description": "An MCP server for weather information.",
183183
"repository": {

docs/modelcontextprotocol-io/registry-aggregators.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ The subregistry OpenAPI spec allows subregistries to inject custom metadata via
7575

7676
```json server.json highlight={17-26}
7777
{
78-
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json",
78+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
7979
"name": "io.github.username/email-integration-mcp",
8080
"title": "Email Integration",
8181
"description": "Send emails and manage email accounts",

docs/modelcontextprotocol-io/remote-servers.mdx

Lines changed: 62 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ The MCP Registry supports remote MCP servers via the `remotes` property in `serv
77

88
```json server.json highlight={7-12}
99
{
10-
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json",
10+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
1111
"name": "com.example/acme-analytics",
1212
"title": "ACME Analytics",
1313
"description": "Real-time business intelligence and reporting platform",
@@ -31,7 +31,7 @@ Specify the transport by setting the `type` property of the `remotes` entry to e
3131

3232
```json server.json highlight={9,13}
3333
{
34-
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json",
34+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3535
"name": "com.example/acme-analytics",
3636
"title": "ACME Analytics",
3737
"description": "Real-time business intelligence and reporting platform",
@@ -49,13 +49,71 @@ Specify the transport by setting the `type` property of the `remotes` entry to e
4949
}
5050
```
5151

52+
## URL Template Variables
53+
54+
Remote servers can define URL template variables using `{curly_braces}` notation. This enables multi-tenant deployments where a single server definition can support multiple endpoints with configurable values:
55+
56+
```json server.json highlight={10-17}
57+
{
58+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
59+
"name": "com.example/acme-analytics",
60+
"title": "ACME Analytics",
61+
"description": "Real-time business intelligence and reporting platform",
62+
"version": "2.0.0",
63+
"remotes": [
64+
{
65+
"type": "streamable-http",
66+
"url": "https://{tenant_id}.analytics.example.com/mcp",
67+
"variables": {
68+
"tenant_id": {
69+
"description": "Your tenant identifier (e.g., 'us-cell1', 'emea-cell1')",
70+
"isRequired": true
71+
}
72+
}
73+
}
74+
]
75+
}
76+
```
77+
78+
When configuring this server, users provide their `tenant_id` value, and the URL template gets resolved to the appropriate endpoint (e.g., `https://us-cell1.analytics.example.com/mcp`).
79+
80+
Variables support additional properties like `default`, `choices`, and `isSecret`:
81+
82+
```json server.json highlight={12-22}
83+
{
84+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
85+
"name": "com.example/multi-region-mcp",
86+
"title": "Multi-Region MCP",
87+
"description": "MCP server with regional endpoints",
88+
"version": "1.0.0",
89+
"remotes": [
90+
{
91+
"type": "streamable-http",
92+
"url": "https://api.example.com/{region}/mcp",
93+
"variables": {
94+
"region": {
95+
"description": "Deployment region",
96+
"isRequired": true,
97+
"choices": [
98+
"us-east-1",
99+
"eu-west-1",
100+
"ap-southeast-1"
101+
],
102+
"default": "us-east-1"
103+
}
104+
}
105+
}
106+
]
107+
}
108+
```
109+
52110
## HTTP Headers
53111

54112
MCP clients can be instructed to send specific HTTP headers by adding the `headers` property to the `remotes` entry:
55113

56114
```json server.json highlight={11-18}
57115
{
58-
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json",
116+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
59117
"name": "com.example/acme-analytics",
60118
"title": "ACME Analytics",
61119
"description": "Real-time business intelligence and reporting platform",
@@ -83,7 +141,7 @@ The `remotes` property can coexist with the `packages` property in `server.json`
83141

84142
```json server.json highlight={7-22}
85143
{
86-
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json",
144+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
87145
"name": "io.github.username/email-integration-mcp",
88146
"title": "Email Integration",
89147
"description": "Send emails and manage email accounts",

docs/modelcontextprotocol-io/versioning.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ MCP servers **MUST** define a version string in `server.json`. For example:
77

88
```json server.json highlight={6}
99
{
10-
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json",
10+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
1111
"name": "io.github.username/email-integration-mcp",
1212
"title": "Email Integration",
1313
"description": "Send emails and manage email accounts",

docs/reference/api/openapi.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -728,7 +728,7 @@ components:
728728
type: string
729729
format: uri
730730
description: JSON Schema URI for this server.json format
731-
example: "https://static.modelcontextprotocol.io/schemas/draft/server.schema.json"
731+
example: "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json"
732732
packages:
733733
type: array
734734
items:

docs/reference/server-json/CHANGELOG.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,34 @@ When ready for release, changes in this section will be moved to a dated version
1616

1717
---
1818

19+
## 2025-12-11
20+
21+
### Changed
22+
23+
#### URL Template Variables for Remote Servers ([#570](https://github.com/modelcontextprotocol/registry/pull/570))
24+
25+
Remote servers can now define URL template variables using `{curly_braces}` notation. This enables multi-tenant deployments where a single server definition can support multiple endpoints with configurable values.
26+
27+
**Example:**
28+
```json
29+
{
30+
"remotes": [{
31+
"type": "streamable-http",
32+
"url": "https://{tenant_id}.api.example.com/mcp",
33+
"variables": {
34+
"tenant_id": {
35+
"description": "Your tenant identifier",
36+
"isRequired": true
37+
}
38+
}
39+
}]
40+
}
41+
```
42+
43+
**Migration:** No changes required. Existing servers continue to work unchanged.
44+
45+
---
46+
1947
## 2025-10-17
2048

2149
### Changed

0 commit comments

Comments
 (0)