An open MCP result can carry fields that its protocol version does not define. Those values are preserved without assigning them later-version meaning, and a warning identifies the affected version. Review the field or split protocol variants if the warning is not intended.
Requirement
Section titled “Requirement”A field that an open MCP result type allows but the MCP protocol version does not define is accepted and preserved without meaning, with a warning attributed to that protocol version.
Details
Section titled “Details”Rule ID: mcp.result.additional-properties.preserve
Owner: mcp
Surface: Result
Kind: preservation
Requirement level: may
Status: internal · Enforcement: internal
Protocol version applicability
Section titled “Protocol version applicability”2024-11-05 |
2025-03-26 |
2025-06-18 |
2025-11-25 |
2026-07-28 |
|---|---|---|---|---|
| applies | applies | applies | applies | applies |
Required by
Section titled “Required by”- MCP Description 0.9.0, Section 3.6 (Carried MCP Values)
- 3. Document Structure: req-carried-open-preserve
Based on
Section titled “Based on”- Tier 1 — MCP schema.ts and normative specification text: MCP 2024-11-05 to 2026-07-28 schema.ts, interface Result (index signature [key: string]: unknown, inherited by every result type)
- Tier 1 — MCP schema.ts and normative specification text: MCP 2024-11-05 to 2025-11-25 schema.ts, CreateMessageResult, ElicitResult, and ListRootsResult extend Result
- validation/mcp-schemas/2024-11-05/schema.ts#L793-L805
- validation/mcp-schemas/2025-03-26/schema.ts#L899-L911
- validation/mcp-schemas/2025-06-18/schema.ts#L1067-L1081
- validation/mcp-schemas/2025-11-25/schema.ts#L1649-L1674
- validation/mcp-schemas/2025-06-18/schema.ts#L1538-L1557
- validation/mcp-schemas/2025-11-25/schema.ts#L2466-L2486
- validation/mcp-schemas/2024-11-05/schema.ts#L1032-L1039
- validation/mcp-schemas/2025-03-26/schema.ts#L1173-L1180
- validation/mcp-schemas/2025-06-18/schema.ts#L1404-L1413
- validation/mcp-schemas/2025-11-25/schema.ts#L2100-L2109
The warnings of this rule for a document equal the union of its warnings for each protocol-version-specific Effective Protocol View (scripts/test-views.mjs).
Examples
Section titled “Examples”Accepted with a warning
Section titled “Accepted with a warning”Source: expected-warning/open-result-unknown-properties.json · Selected: /tools/0/examples/traced/result
{ "content": [ { "type": "text", "text": "found" } ], "vendorTrace": { "id": "a1" }}Accepted with a warning
Section titled “Accepted with a warning”Source: expected-warning/open-results-shared-across-protocol-versions.json · Selected: /prompts/0/examples/default/result
{ "resultType": "complete", "messages": [ { "role": "assistant", "content": { "type": "text", "text": "Hello." } } ]}Accepted with a warning
Section titled “Accepted with a warning”Source: expected-warning/open-step-responses-before-2026.json · Selected: /tools/0/interactionExamples/approved/steps/0/response
{ "roots": [ { "uri": "file:///workspace/example", "_meta": { "trace": "root1" } } ], "_meta": { "trace": "r1" }, "acmeTrace": { "id": "a1" }}Accepted with a warning
Section titled “Accepted with a warning”Source: expected-warning/component-protocol-scope.json · Selected: /components/resourceExamples/current/result
{ "resultType": "complete", "ttlMs": 60, "cacheScope": "private", "contents": [ { "uri": "data://status", "text": "ready" } ]}Rule Source Code
Section titled “Rule Source Code”result.yaml at immutable tag v0.9.0-rc.3.