Skip to content

MCP: Support the 2026-07-28 protocol without legacy sessions #2625

Open

Description

@erichare

Update the MCP endpoint to accept the protocol agreed in #2624. Clients should be able to make a valid first request without creating a session. The service must advertise exactly the revisions it supports and reject older or unknown revisions. This is required for the launch in #2408.

#2644 provides the framework upgrade and an initial stateless listing test. The remaining work covers version restrictions, request validation, response metadata, schemas, and removal of legacy routes. OAuth authentication is implemented in #2642 and integrated here.

Upstream #1078 merged on October 19, 2026. The latest published release checked is still 2.0.3. Track and adopt a release containing the change before verifying version restrictions.

This ticket is done when the build, package, focused tests, and existing DSE/HCD MCP suites pass for the supported revision. Attach the artifact and dependency versions. #2626 then checks raw HTTP behavior, #2633 qualifies clients, and #2634 verifies deployment.

Status on October 23, 2026

PR #2644 merged on October 23 with Quarkiverse MCP Server 2.0.3 and a stateless tools/list test. PR #2659 moves to 2.1.0.Beta1, which includes upstream quarkiverse/quarkus-mcp-server#1078, and accepts only protocol 2026-07-28. Older and unknown versions, initialize, sessions, GET, DELETE and the legacy HTTP and SSE routes are rejected. Discovery and tools/list carry private cache hints with ttlMs 0. The PR waits for a stable 2.1.0 before it merges. The framework still advertises a logging capability, returns 500 for a clientInfo without a name and returns 200 for malformed JSON, so this issue stays open after #2659.

Implementation requirements and source references

Part of #2408: the protocol implementation for release gate L2. It implements the contract agreed in #2624.

Goal

Serve only MCP 2026-07-28 at the Data API MCP endpoint. Upgrading the framework is necessary but not sufficient: Quarkiverse MCP Server 2.0.3 still accepts and advertises older revisions, so version admission and server/discover must be restricted explicitly.

Status

  • MCP: upgrade framework and test stateless tools/list #2644 upgrades the BOM from 1.13.0 to 2.0.3 and tests stateless tools/list.
  • Upstream #1078 merged on October 19, 2026. The latest published release checked is still 2.0.3 and does not contain the merge. Track the first release containing configurable supported versions, adopt it, and verify version admission and advertised versions together.

Required changes

Each item links the changelog entry it implements and is written as behavior a test can check. Within each group, items follow changelog order; uppercase M marks a major change and lowercase m a minor one.

Prerequisite

Version, session and transport

  • M1 No MCP session is created and no Mcp-Session-Id is issued. An obsolete session header on an otherwise valid request is ignored.
  • M2 initialize and notifications/initialized are removed. A request is rejected unless its _meta carries io.modelcontextprotocol/protocolVersion and io.modelcontextprotocol/clientCapabilities, with no fallback to a default version. Omitted clientInfo is accepted; a present one is validated.
  • M3 server/discover advertises exactly the supported set (initially 2026-07-28, not a >= comparison) and only the capabilities we implement.
  • M5 ping, logging/setLevel and notifications/roots/list_changed are removed, along with unsolicited log notifications.
  • M9 No SSE event IDs are emitted, and Last-Event-ID is ignored without replaying anything.
  • m4 A POST without Mcp-Method, or a tools/call without Mcp-Name, is rejected.
  • m12 Errors use the final codes: HeaderMismatch -32020, MissingRequiredClientCapability -32021, UnsupportedProtocolVersion -32022.
  • D2 Only the Streamable HTTP flow is exposed; the legacy HTTP+SSE entry points are removed.

Results

  • M8 Discovery, tools/list and completed tool calls (including isError results) carry resultType: "complete" and serverInfo.
  • m3 tools/list returns tools in a deterministic order that stays stable across pages.
  • m5 Complete server/discover and tools/list results include ttlMs and cacheScope. Start with private scope and ttlMs: 0 until a cache policy is reviewed.

Schemas (audit; change only what fails)

  • m1 Capability serialization accepts the extensions map.
  • m10 Generated tool schemas validate as JSON Schema 2020-12, and structuredContent handling makes no object-only assumption. Data API's object responses stay as they are.
  • S1 A regression test shows fractional minimum, maximum and default values survive.

Integration

Deliberately not implemented

This is a tools-only launch, so these stay unadvertised:

  • M4 POST subscriptions: only needed if we advertise listChanged.
  • M6 tasks, M7 multi round-trip requests, m11 URL elicitation completion, D1 roots, sampling and logging, D3 sampling includeContext values: no current tool needs them.
  • m6 resource-not-found -32602: only if resources are exposed.

The remaining changelog entries are tracked elsewhere: m2 (trace context) in #2629, and m7–m9 and D4 (authorization) in the authorization-service work under #2408.

Done when

  • Build, package, focused tests and the existing DSE/HCD MCP suites pass against 2026-07-28.
  • The dependency tree, built artifact version and test results are attached here.

Close on that evidence. Raw wire conformance (#2626), client qualification (#2633) and deployment (#2634) are verified separately and don't block closing this ticket.

Normative detail: Streamable HTTP, authorization, caching.

Activity

  1. changed the title [-]Upgrade Quarkiverse MCP Server to 2.0.2[/-] [+]MCP: Upgrade Quarkiverse MCP Server to 2.0.2[/+] on Oct 12, 2026
  2. changed the title [-]MCP: Upgrade Quarkiverse MCP Server to 2.0.2[/-] [+]MCP: Upgrade Quarkiverse MCP Server to 2.0.3[/+] on Oct 12, 2026
  3. added
    MCP upgradeRequired work to deliver the MCP package upgrade.
    and removed
    MCP upgradeRequired work to deliver the MCP package upgrade.
    on Oct 12, 2026
  4. changed the title [-]MCP: Upgrade Quarkiverse MCP Server to 2.0.3[/-] [+]MCP: Implement the 2026-07-28 wire contract[/+] on Oct 12, 2026
  5. added
    MCP launch requiredRelease gate for the OAuth and modern-protocol MCP launch
    MCP protocolModern MCP wire contract and conformance
    on Oct 12, 2026
  6. self-assigned this
    on Oct 12, 2026
  7. changed the title [-]MCP: Implement the 2026-07-28 wire contract[/-] [+]MCP: Implement the 2026-07-28 contract[/+] on Oct 13, 2026
  8. erichare commented on Oct 13, 2026

    @erichare
    ContributorAuthor

    @amorton this is an attempt to capture every line of the changelog and map it to changes that we need. some may not be relevant for us, e.g., Use POST subscriptions for change events

  9. changed the title [-]MCP: Implement the 2026-07-28 contract[/-] [+]MCP: Support the 2026-07-28 protocol without legacy sessions[/+] on Oct 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

MCP launch requiredRelease gate for the OAuth and modern-protocol MCP launchMCP protocolModern MCP wire contract and conformance

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions