Skip to content
{mcpdesc}

Use object output schemas before MCP 2026

MCP 2025-06-18 and 2025-11-25 require structured output to be an object. For MCP 2025-06-18 the outputSchema root declares type object. For MCP 2025-11-25 a declared root type must include object; a root without a literal type object stays valid and mcp.tool.schema.native-shape warns. MCP 2026-07-28 permits other roots, so an array schema needs a scope that excludes the object-only versions; projection must not wrap it in an object as a repair.

Before MCP 2026-07-28, a Tool outputSchema describes an object: a literal type “object” for MCP 2025-06-18, and a declared root type that includes “object” for MCP 2025-11-25.

Rule ID: mcp.tool.output-schema.object-root
Owner: mcp
Surface: Tool · Path: outputSchema
Kind: structural
Requirement level: must
Status: arbitrated · Enforcement: internal

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

Source: expected-warning/tool-schema-mcp-type-mismatch.json · Selected: /tools/3/outputSchema

{
"allOf": [
{
"type": "object",
"properties": {
"summary": {
"type": "string"
}
}
}
]
}

Source: expected-invalid/non-object-output-schema-before-2026.json · Selected: /tools/0/outputSchema

{
"type": "array",
"items": {
"type": "string"
}
}

The rule does not run on this fragment for any MCP protocol version it applies to.

Source: expected-valid/protocol-coverage-and-tool-schemas.json · Selected: /tools/3/outputSchema

{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"oneOf": [
{
"type": "object",
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"additionalProperties": false
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
}

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