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** - https://github.com/modelcontextprotocol/static/pull/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 <noreply@anthropic.com>
166 lines
4.7 KiB
Text
166 lines
4.7 KiB
Text
---
|
|
title: Publishing Remote Servers
|
|
sidebarTitle: Remote Servers
|
|
---
|
|
|
|
The MCP Registry supports remote MCP servers via the `remotes` property in `server.json`:
|
|
|
|
```json server.json highlight={7-12}
|
|
{
|
|
"$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://analytics.example.com/mcp"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
A remote server **MUST** be publicly accessible at its specified URL.
|
|
|
|
## Transport Type
|
|
|
|
Remote servers can use the Streamable HTTP transport (recommended) or the SSE transport. Remote servers can also support both transports simultaneously at different URLs.
|
|
|
|
Specify the transport by setting the `type` property of the `remotes` entry to either `"streamable-http"` or `"sse"`:
|
|
|
|
```json server.json highlight={9,13}
|
|
{
|
|
"$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://analytics.example.com/mcp"
|
|
},
|
|
{
|
|
"type": "sse",
|
|
"url": "https://analytics.example.com/sse"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
## 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-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://analytics.example.com/mcp",
|
|
"headers": [
|
|
{
|
|
"name": "X-API-Key",
|
|
"description": "API key for authentication",
|
|
"isRequired": true,
|
|
"isSecret": true
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
## Supporting Remote and Non-remote Installation
|
|
|
|
The `remotes` property can coexist with the `packages` property in `server.json` in order to allow MCP host applications to choose the preferred method of installation.
|
|
|
|
```json server.json highlight={7-22}
|
|
{
|
|
"$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",
|
|
"version": "1.0.0",
|
|
"remotes": [
|
|
{
|
|
"type": "streamable-http",
|
|
"url": "https://email.example.com/mcp"
|
|
}
|
|
],
|
|
"packages": [
|
|
{
|
|
"registryType": "npm",
|
|
"identifier": "@username/email-integration-mcp",
|
|
"version": "1.0.0",
|
|
"transport": {
|
|
"type": "stdio"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
```
|