Skip to content

Relax monolith ElicitRequestURLParams.elicitation_id for 2026-07-28#2913

Merged
maxisbey merged 1 commit into
mainfrom
types-monolith-2026-followup
Jun 19, 2026
Merged

Relax monolith ElicitRequestURLParams.elicitation_id for 2026-07-28#2913
maxisbey merged 1 commit into
mainfrom
types-monolith-2026-followup

Relax monolith ElicitRequestURLParams.elicitation_id to optional for …

4749ce3
Select commit
Loading
Failed to load commit list.
Claude / Claude Code Review completed Jun 19, 2026 in 12m 58s

Code review found 2 potential issues

Found 5 candidates, confirmed 2. See review comments for details.

Details

Severity Count
🔴 Important 0
🟡 Nit 1
🟣 Pre-existing 1
Severity File:Line Issue
🟡 Nit src/mcp/types/_types.py:1868-1876 Docstring 'same direction' sentence now contradicts the new 2026-07-28 note
🟣 Pre-existing src/mcp/types/_types.py:1958-1968 Example url_elicitation_client.py reads non-existent 'elicitationId' attribute (pre-existing, related)

Annotations

Check warning on line 1876 in src/mcp/types/_types.py

See this annotation in the file changed.

@claude claude / Claude Code Review

Docstring 'same direction' sentence now contradicts the new 2026-07-28 note

The unchanged sentence "This MUST correspond to the ID of a request previously issued in the same direction" now contradicts the new 2026-07-28 clause added directly below it, which says the field must name a request the *client* previously issued (a server-sent cancellation terminating a `subscriptions/listen` stream names a request issued in the opposite direction). Consider qualifying the same-direction sentence as applying through 2025-11-25, matching the vendored `v2026_07_28` surface which

Check notice on line 1968 in src/mcp/types/_types.py

See this annotation in the file changed.

@claude claude / Claude Code Review

Example url_elicitation_client.py reads non-existent 'elicitationId' attribute (pre-existing, related)

Pre-existing issue (not introduced by this PR, but adjacent to the field being relaxed): `examples/snippets/clients/url_elicitation_client.py:73` reads `getattr(params, "elicitationId", None)`, but pydantic only exposes the snake_case attribute `elicitation_id`, so the example always prints `Elicitation ID: None` even when the server supplied one. Now that `elicitation_id` can also legitimately be `None` at 2026-07-28, the example should read `params.elicitation_id` and handle a real `None` expl