Skip to content
{mcpdesc}

Keep elicitation form constraints consistent

Form properties, required names, enum labels, defaults, and bounds must agree with one another. Correct references to absent properties and contradictory constraints. Passing JSON Schema’s outer shape checks does not prove that the declared form is internally consistent.

A form requestedSchema is internally consistent: required names declared properties, enumNames match enum values, defaults lie within enums, and minimum bounds do not exceed maximum bounds.

Rule ID: mcpdesc.elicitation.form-schema.consistency
Owner: mcpdesc
Surface: Elicitation Declaration · Path: requestedSchema
Kind: mcpdesc-semantic
Requirement level: must
Protocol versions: independent of the MCP protocol version
Status: internal · Enforcement: internal

Source: expected-valid/elicitation-declarations.json · Selected: /tools/0/elicitations

[
{
"name": "choose_assignee",
"mode": "form",
"message": "Who should own this issue?",
"requestedSchema": {
"type": "object",
"properties": {
"assignee": {
"type": "string",
"title": "Assignee",
"minLength": 1
}
},
"required": [
"assignee"
]
}
},
{
"name": "authorize_tracker",
"mode": "url",
"message": "Authorize access to the issue tracker.",
"when": "The current authorization grant is insufficient.",
"url": "https://auth.example.com/authorize",
"protocolVersions": [
"2025-11-25",
"2026-07-28"
]
},
{
"name": "choose_labels",
"mode": "form",
"message": "Choose labels for this issue.",
"requestedSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"labels": {
"type": "array",
"title": "Labels",
"items": {
"type": "string",
"enum": [
"bug",
"feature"
]
},
"default": [
"bug"
]
}
}
},
"protocolVersions": [
"2025-11-25",
"2026-07-28"
]
}
]

Source: expected-invalid/elicitation-form-semantics.json · Selected: /prompts/0/elicitations/0/requestedSchema/required

[
"missing"
]

Source: expected-invalid/elicitation-form-invalid-range.json · Selected: /prompts/0/elicitations/0/requestedSchema/properties/count

{
"type": "integer",
"minimum": 10,
"maximum": 1
}

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