Skip to content
{mcpdesc}

Keep protocol scopes consistent and disjoint

An omitted scope inherits its parent’s full scope; an explicit child scope must stay within it. Declarations with the same identity cannot overlap where the specification requires uniqueness. Narrow the scopes rather than expecting the validator to choose one variant.

Nested protocol scopes stay within their parent scope, and same-named primitives and capability objects do not overlap in protocol scope.

Rule ID: mcpdesc.protocol-scope.consistency
Owner: mcpdesc
Surface: Document · Path: protocolVersions
Kind: mcpdesc-semantic
Requirement level: must
Protocol versions: independent of the MCP protocol version
Status: internal · Enforcement: internal

Source: expected-invalid/elicitation-scope-outside-parent.json · Selected: /resourceTemplates/0/elicitations/0

{
"name": "authorize",
"mode": "url",
"message": "Authorize item access.",
"protocolVersions": [
"2026-07-28"
]
}

Source: expected-invalid/scoped-version-not-in-root.json · Selected: /transports/0

{
"type": "stdio",
"command": "bad-scope",
"protocolVersions": [
"2026-07-28"
]
}

Source: expected-invalid/overlapping-tool-scope.json · Selected: /tools/1

{
"name": "run_job",
"protocolVersions": [
"2026-07-28"
],
"inputSchema": {
"type": "object",
"additionalProperties": false
}
}

Source: expected-invalid/overlapping-capabilities.json · Selected: /capabilities/0

{
"protocolVersions": [
"2025-11-25"
],
"tools": {
"listChanged": true
}
}

document.yaml at immutable tag v0.9.0-rc.3.