Skip to content

plan: Upgrade to the 07-28-2026 mcp spec - #281

Open
contextbridge-pr-automation[bot] wants to merge 3 commits into
mainfrom
aether/issue-280
Open

plan: Upgrade to the 07-28-2026 mcp spec#281
contextbridge-pr-automation[bot] wants to merge 3 commits into
mainfrom
aether/issue-280

Conversation

@contextbridge-pr-automation

Copy link
Copy Markdown
Contributor

Closes #280

Aether planned issue #280. Review the plan inline, reply with @aether to revise it,
and comment @aether implement to build it on this branch.

Run: https://github.com/contextbridge/aether/actions/runs/30237672710

Maps the rmcp 1.7.0 -> 3.0.0 (2026-07-28 spec) migration: type realignment,
stateless client lifecycle, MRTR input handling on the client, SEP-2549 list
caching, and OAuth hardening; with per-crate steps and a test plan.
@jcarver989

Copy link
Copy Markdown
Contributor

/aether implement the plan

@contextbridge-pr-automation

Copy link
Copy Markdown
Contributor Author

Aether did not finish. See the run.

@jcarver989

Copy link
Copy Markdown
Contributor

/aether implement the plan

@contextbridge-pr-automation

Copy link
Copy Markdown
Contributor Author

Aether did not finish. See the run.

@jcarver989

Copy link
Copy Markdown
Contributor

/aether implement the plan

Upgrades rmcp from 1.7.0 to 3.0.0-beta.2, implementing the migration
plan in docs/aether/plans/issue-280-plan.md.

Phase 1 — compile against rmcp 3:
- Rename elicitation types (ElicitRequestParams, ElicitResult), Content
  to ContentBlock, PromptMessageRole to Role, PrimitiveSchema to
  PrimitiveSchemaDefinition across the workspace.
- Adopt non-exhaustive builders (ElicitResult::new, ProgressNotificationParam,
  ListToolsResult::with_all_items) and wildcard match arms.
- call_tool/get_prompt now return CallToolResponse/GetPromptResponse;
  the URL elicitation completion notification routes through
  on_custom_notification.
- Auth uses resolve_metadata (RFC 9728 protected-resource discovery).

Phase 2 — adopt the new spec:
- Handle remote MRTR InputRequiredResult: surface inputs through the
  existing elicitation channel and retry with inputResponses plus the
  echoed requestState (capped at 5 rounds).
- Switch the client to the modern lifecycle (server/discover with an
  initialize fallback) so connections negotiate 2026-07-28, enabling
  MRTR and other stateless features.
- Enable rmcp's SEP-2549 client-side response cache for list requests.
- Add the request-state rmcp feature to the client crates.

Tests: new mrtr_tests.rs covers the MRTR round-trip and retry cap; the
existing OAuth mock is updated for protected-resource discovery. All
3134 workspace tests pass.
@contextbridge-pr-automation
contextbridge-pr-automation Bot marked this pull request as ready for review July 27, 2026 11:50
@contextbridge-pr-automation

Copy link
Copy Markdown
Contributor Author

The migration is complete and committed. Here's a summary of what I implemented from the plan in docs/aether/plans/issue-280-plan.md:

Summary

Upgraded rmcp from 1.7.0=3.0.0-beta.2 (the 2026-07-28 MCP spec), implementing all three phases of the plan.

Phase 1 — Compile against rmcp 3 (34 files): mechanical type realignment verified against the actual rmcp 3 API (not just the plan's assumptions). Key changes: elicitation renames (ElicitRequestParams, ElicitResult), ContentContentBlock, PromptMessageRoleRole, PrimitiveSchemaPrimitiveSchemaDefinition; non-exhaustive builders (ElicitResult::new, ProgressNotificationParam::new, ListToolsResult::with_all_items) and wildcard match arms; call_tool/get_prompt now return the new CallToolResponse/GetPromptResponse enums; URL-elicitation completion now arrives via on_custom_notification; auth uses resolve_metadata (RFC 9728).

Phase 2 — Adopt the new spec:

  • MRTR InputRequiredResult handling in run_mcp_task.rs — surfaces server-initiated inputs through the existing elicitation channel and retries with inputResponses + echoed requestState, capped at 5 rounds.
  • Modern client lifecycle (ClientLifecycleMode::Autoserver/discover with initialize fallback) so connections negotiate 2026-07-28, which is required for MRTR to work. I discovered ProtocolVersion::LATEST is still 2025-11-25 in the beta, so this step was essential, not optional.
  • SEP-2549 client response cache enabled for list requests.
  • request-state feature added to the client crates.

Phase 3: docs verified clean; release-plz handles per-crate changelogs.

Verification: just check, just lint (--all-features), just fmt-check, and just test are all green — 3134 tests pass, including the new mrtr_tests.rs (round-trip completion + retry-cap).


@jcarper989 Done — implemented the full plan (commit 31019174). The rmcp 1.7→3.0.0-beta.2 migration is complete across all phases: every breaking change is fixed, and the new-spec features are adopted (MRTR InputRequiredResult retry loop reusing the existing elicitation channel, modern server/discover lifecycle so connections negotiate 2026-07-28, and the SEP-2549 client response cache). I added mrtr_tests.rs covering the round-trip and retry-cap paths. All workspace checks pass (just check/lint/fmt-check/test, 3134 tests green).

One notable deviation from the plan worth flagging: ProtocolVersion::LATEST in the beta is still 2025-11-25, so the modern discover lifecycle was required for MRTR to function end-to-end (the SDK rejects InputRequiredResult on older-negotiated connections) — it wasn't just an optimization. The OAuth discovery mock was updated to return 401 on the MCP endpoint to exercise the new RFC 9728 protected-resource discovery realistically.

Pushed to aether/issue-280. See the run.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

aether:implement Aether implements directly aether automated

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Upgrade to the 07-28-2026 mcp spec

1 participant