Describe the bug
We're a SaaS company that have customers at subdomains like {domain}.chronosphere.io, so we host our remote mcp server at {domain}.chronosphere.io/api/mcp/mcp. According to the spec, the url parameter for remote server definitions should be a template string that support {variable} substitutions, but we're failing validation when publishing the server.
description: "URL template for the streamable-http transport. Variables in {curly_braces} reference argument value_hints, argument names, or environment variable names. After variable substitution, this should produce a valid URI.",
There's also no where to define variables in a remote server. The only place seems to be inside headers.
To Reproduce
Steps to reproduce the behavior:
Our server.json looks like this:
{
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json",
"name": "io.github.chronosphereio/chronosphere-mcp",
"description": "MCP Server for Chronosphere observability platform",
"website_url": "https://chronosphere.io",
"status": "active",
"repository": {
"url": "https://github.com/chronosphereio/chronosphere-mcp",
"source": "github"
},
"version": "0.3.3",
"remotes": [
{
"type": "streamable-http",
"url": "https://{CHRONOSPHERE_ORG_NAME}.chronosphere.io/api/mcp/mcp",
"headers": [
{
"name": "Authorization",
"description": "The auth header containing the service account token or personal access token for Chronosphere",
"value": "Bearer {CHRONOSPHERE_API_TOKEN}",
"is_required": true,
"is_secret": true,
"variables": {
"CHRONOSPHERE_ORG_NAME": {
"description": "The name of the Chronosphere organization or subdomain",
"is_required": true,
"is_secret": false
},
"CHRONOSPHERE_API_TOKEN": {
"description": "The service account token or personal access token for Chronosphere",
"is_required": true,
"is_secret": true
}
}
}
]
}
]
}
importantly, the URL looks like this:
"url": "https://{CHRONOSPHERE_ORG_NAME}.chronosphere.io/api/mcp/mcp",
I put the CHRONOSPHERE_ORG_NAME "variables" needed for the URL inside one of the headers which seems to be the only place we can put variables in a StreamableHttpTransport type.
mcp-publisher publish is failing with the error:
publish failed: server returned status 400: {"title":"Bad Request","status":400,"detail":"Failed to publish server","errors":[{"message":"invalid remote URL: https://{CHRONOSPHERE_ORG_NAME}.chronosphere.io/api/mcp/mcp"}]}
Expected behavior
Based on the spec, I was expecting this to publish successfully, but it seems variables in the remote url aren't actually supported or there's some undocumented way to specify variables for remote urls.
Logs
publish failed: server returned status 400: {"title":"Bad Request","status":400,"detail":"Failed to publish server","errors":[{"message":"invalid remote URL: https://{CHRONOSPHERE_ORG_NAME}.chronosphere.io/api/mcp/mcp"}]}
Describe the bug
We're a SaaS company that have customers at subdomains like
{domain}.chronosphere.io, so we host our remote mcp server at{domain}.chronosphere.io/api/mcp/mcp. According to the spec, the url parameter for remote server definitions should be a template string that support{variable}substitutions, but we're failing validation when publishing the server.There's also no where to define variables in a remote server. The only place seems to be inside headers.
To Reproduce
Steps to reproduce the behavior:
Our server.json looks like this:
importantly, the URL looks like this:
I put the
CHRONOSPHERE_ORG_NAME"variables" needed for the URL inside one of the headers which seems to be the only place we can put variables in aStreamableHttpTransporttype.mcp-publisher publishis failing with the error:Expected behavior
Based on the spec, I was expecting this to publish successfully, but it seems variables in the remote url aren't actually supported or there's some undocumented way to specify variables for remote urls.
Logs