﻿---
title: "Match elicitation steps to their declaration"
description: "A Tool's elicitation step must agree with the named elicitation declaration and its requested form. Accepted form content must satisfy that schema, while declined or cancelled resp"
source: "https://mcpdesc.org/docs/rules/0.9.0-rc.3/mcpdesc/tool-interaction-elicitation-consistency/"
---

A Tool’s elicitation step must agree with the named elicitation declaration and its requested form. Accepted form content must satisfy that schema, while declined or cancelled responses have different content rules. Check the reference, request, and response together.

## Requirement

An elicitation step matches the Tool’s named Elicitation Declaration, and its response content is present exactly when an accepted form response requires it and validates against the requested schema.

## Details

**Rule ID:** `mcpdesc.tool.interaction.elicitation-consistency`  
**Owner:** mcpdesc  
**Surface:** Tool interaction example · **Path:** `steps`  
**Kind:** mcpdesc-semantic  
**Requirement level:** must  
**Status:** internal · **Enforcement:** internal

## 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

* **MCP Description 0.9.0, Section 9.4**  
  * 9\. Tools: [req-interaction-elicitation-declaration](https://mcpdesc.org/docs/specification/0.9.0-rc.3/tools#req-interaction-elicitation-declaration)
  * 1. Tools: [req-interaction-elicitation-response](https://mcpdesc.org/docs/specification/0.9.0-rc.3/tools#req-interaction-elicitation-response)

## Based on

* **Tier 1 — MCP schema.ts and normative specification text:** MCP 2025-06-18 to 2026-07-28 schema.ts, interface ElicitResult, content (present for accepted form responses)  
  * [validation/mcp-schemas/2025-06-18/schema.ts#L1538-L1557](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/dae694f61a31f7a3ec2af3aff709e11f70f61e48/schema/2025-06-18/schema.ts#L1538-L1557)
  * [validation/mcp-schemas/2025-11-25/schema.ts#L2466-L2486](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/dae694f61a31f7a3ec2af3aff709e11f70f61e48/schema/2025-11-25/schema.ts#L2466-L2486)
  * [validation/mcp-schemas/2026-07-28/schema.ts#L3120-L3149](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/dae694f61a31f7a3ec2af3aff709e11f70f61e48/schema/2026-07-28/schema.ts#L3120-L3149)

## Examples

### Valid example

Source: [expected-valid/named-tool-interaction-examples.json](https://github.com/mcpdesc/mcpdesc-specification/blob/v0.9.0-rc.3/spec/draft/fixtures/expected-valid/named-tool-interaction-examples.json) · Selected: `/tools/0/interactionExamples`

```json
{
  "approved-release": {
    "input": {
      "version": "2.0.0"
    },
    "steps": [
      {
        "type": "roots",
        "request": {},
        "response": {
          "roots": [
            {
              "uri": "file:///workspace/example",
              "name": "Example workspace"
            }
          ]
        }
      },
      {
        "type": "sampling",
        "request": {
          "messages": [
            {
              "role": "user",
              "content": {
                "type": "text",
                "text": "Summarize the release plan."
              }
            }
          ],
          "tools": [
            {
              "name": "diff_summary",
              "description": "Summarize pending release changes.",
              "inputSchema": {
                "type": "object",
                "properties": {
                  "branch": {
                    "type": "string"
                  }
                },
                "required": [
                  "branch"
                ]
              }
            }
          ],
          "toolChoice": {
            "mode": "auto"
          },
          "maxTokens": 180
        },
        "response": {
          "role": "assistant",
          "content": {
            "type": "text",
            "text": "Run smoke tests and confirm the changelog before publishing version 2.0.0."
          },
          "model": "claude-3-sonnet-20240229",
          "stopReason": "endTurn"
        }
      },
      {
        "type": "elicitation",
        "declaration": "confirm",
        "request": {
          "mode": "form",
          "message": "Approve this release?",
          "requestedSchema": {
            "type": "object",
            "properties": {
              "approved": {
                "type": "boolean"
              }
            },
            "required": [
              "approved"
            ]
          }
        },
        "response": {
          "action": "accept",
          "content": {
            "approved": true
          }
        }
      }
    ],
    "result": {
      "content": [
        {
          "type": "text",
          "text": "Release preparation completed."
        }
      ],
      "structuredContent": {
        "status": "prepared"
      }
    }
  }
}
```

### Invalid example

Source: [expected-invalid/invalid-tool-interaction-example-semantics.json](https://github.com/mcpdesc/mcpdesc-specification/blob/v0.9.0-rc.3/spec/draft/fixtures/expected-invalid/invalid-tool-interaction-example-semantics.json) · Selected: `/tools/0/interactionExamples/broken/steps/0`

```json
{
  "type": "elicitation",
  "declaration": "missing",
  "request": {
    "mode": "url",
    "message": "Authorize publication.",
    "url": "https://mcp.example.com/release/connect"
  },
  "response": {
    "action": "accept",
    "content": {
      "approved": true
    }
  }
}
```

## Rule Source Code

[interaction.yaml](https://github.com/mcpdesc/mcpdesc-specification/blob/v0.9.0-rc.3/spec/draft/validation/rules/interaction.yaml) at immutable tag [v0.9.0-rc.3](https://github.com/mcpdesc/mcpdesc-specification/blob/v0.9.0-rc.3/spec/draft).
