Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions cmd/publisher/commands/publish_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ func TestPublishCommand_DeprecatedSchema(t *testing.T) {
errorSubstr: "deprecated schema detected",
},
{
name: "current 2025-10-17 schema should pass validation",
schema: "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json",
name: "current 2025-12-11 schema should pass validation",
schema: "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
expectError: false,
},
{
Expand Down
8 changes: 4 additions & 4 deletions data/seed.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[
{
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json",
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"name": "io.github.domdomegg/airtable-mcp-server",
"description": "Read and write access to Airtable database schemas, tables, and records.",
"repository": {
Expand Down Expand Up @@ -62,7 +62,7 @@
]
},
{
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json",
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"name": "io.github.domdomegg/airtable-mcp-server",
"description": "Read and write access to Airtable database schemas, tables, and records.",
"repository": {
Expand Down Expand Up @@ -115,7 +115,7 @@
]
},
{
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json",
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"name": "io.github.domdomegg/time-mcp-nuget",
"description": "Get the current UTC time in RFC 3339 format.",
"repository": {
Expand All @@ -136,7 +136,7 @@
]
},
{
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json",
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"name": "io.github.domdomegg/time-mcp-pypi",
"description": "Get the current UTC time in RFC 3339 format.",
"repository": {
Expand Down
10 changes: 5 additions & 5 deletions docs/modelcontextprotocol-io/package-types.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ npm packages use `"registryType": "npm"` in `server.json`. For example:

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

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

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

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

```json server.json highlight={9}
{
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json",
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"name": "io.github.username/image-processor-mcp",
"title": "Image Processor",
"description": "Process and transform images with various filters",
Expand Down
4 changes: 2 additions & 2 deletions docs/modelcontextprotocol-io/quickstart.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ Open the generated `server.json` file, and you should see contents like:

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

```diff server.json
{
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json",
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"name": "io.github.my-username/weather",
"description": "An MCP server for weather information.",
"repository": {
Expand Down
2 changes: 1 addition & 1 deletion docs/modelcontextprotocol-io/registry-aggregators.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ The subregistry OpenAPI spec allows subregistries to inject custom metadata via

```json server.json highlight={17-26}
{
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json",
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"name": "io.github.username/email-integration-mcp",
"title": "Email Integration",
"description": "Send emails and manage email accounts",
Expand Down
66 changes: 62 additions & 4 deletions docs/modelcontextprotocol-io/remote-servers.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ The MCP Registry supports remote MCP servers via the `remotes` property in `serv

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

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

## URL Template Variables

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:

```json server.json highlight={10-17}
{
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"name": "com.example/acme-analytics",
"title": "ACME Analytics",
"description": "Real-time business intelligence and reporting platform",
"version": "2.0.0",
"remotes": [
{
"type": "streamable-http",
"url": "https://{tenant_id}.analytics.example.com/mcp",
"variables": {
"tenant_id": {
"description": "Your tenant identifier (e.g., 'us-cell1', 'emea-cell1')",
"isRequired": true
}
}
}
]
}
```

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`).

Variables support additional properties like `default`, `choices`, and `isSecret`:

```json server.json highlight={12-22}
{
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"name": "com.example/multi-region-mcp",
"title": "Multi-Region MCP",
"description": "MCP server with regional endpoints",
"version": "1.0.0",
"remotes": [
{
"type": "streamable-http",
"url": "https://api.example.com/{region}/mcp",
"variables": {
"region": {
"description": "Deployment region",
"isRequired": true,
"choices": [
"us-east-1",
"eu-west-1",
"ap-southeast-1"
],
"default": "us-east-1"
}
}
}
]
}
```

## HTTP Headers

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

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

```json server.json highlight={7-22}
{
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json",
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"name": "io.github.username/email-integration-mcp",
"title": "Email Integration",
"description": "Send emails and manage email accounts",
Expand Down
2 changes: 1 addition & 1 deletion docs/modelcontextprotocol-io/versioning.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ MCP servers **MUST** define a version string in `server.json`. For example:

```json server.json highlight={6}
{
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json",
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"name": "io.github.username/email-integration-mcp",
"title": "Email Integration",
"description": "Send emails and manage email accounts",
Expand Down
2 changes: 1 addition & 1 deletion docs/reference/api/openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -728,7 +728,7 @@ components:
type: string
format: uri
description: JSON Schema URI for this server.json format
example: "https://static.modelcontextprotocol.io/schemas/draft/server.schema.json"
example: "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json"
packages:
type: array
items:
Expand Down
28 changes: 28 additions & 0 deletions docs/reference/server-json/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,34 @@ When ready for release, changes in this section will be moved to a dated version

---

## 2025-12-11

### Changed

#### URL Template Variables for Remote Servers ([#570](https://github.com/modelcontextprotocol/registry/pull/570))

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.

**Example:**
```json
{
"remotes": [{
"type": "streamable-http",
"url": "https://{tenant_id}.api.example.com/mcp",
"variables": {
"tenant_id": {
"description": "Your tenant identifier",
"isRequired": true
}
}
}]
}
```

**Migration:** No changes required. Existing servers continue to work unchanged.

---

## 2025-10-17

### Changed
Expand Down
Loading
Loading