Skip to content
{mcpdesc}

Keep fields within their supported protocol scope

A declaration must be valid in every protocol version in its effective scope. A field introduced later cannot be shared with earlier versions merely because the document also declares the later version. Omit the field or describe disjoint scoped variants.

A declaration field is used only in protocol versions whose MCP type defines it: title and _meta from 2025-06-18, Tool annotations from 2025-03-26, icons and Tool schema $schema from 2025-11-25, Tool execution only in 2025-11-25, and the completions capability from 2025-03-26.

Rule ID: mcp.declaration.field.protocol-version
Owner: mcp
Surface: Tool, Resource, ResourceTemplate, Prompt, PromptArgument, ServerCapabilities
Kind: structural
Requirement level: must
Status: internal · Enforcement: internal

2024-11-05 2025-03-26 2025-06-18 2025-11-25 2026-07-28
applies applies applies applies applies

outputSchema, the outputSchema root, and the tasks capability have their own rules; the rule property identifies which applies.

Source: expected-invalid/protocol-version-inapplicable-execution.json · Selected: /tools/0

{
"name": "run_job",
"inputSchema": {
"type": "object",
"additionalProperties": false
},
"execution": {
"taskSupport": "optional"
}
}

Source: expected-invalid/protocol-version-inapplicable-tool-schema-dialect.json · Selected: /tools/0/inputSchema

{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false
}

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