Repository navigation
MCP: Support the 2026-07-28 protocol without legacy sessions #2625
Description
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
- Upgrade to 2.0.3 on Quarkus 3.38.1 (MCP: upgrade framework and test stateless tools/list #2644), changing the platform only for a demonstrated incompatibility. Pin test-client revisions.
Version, session and transport
- M1 No MCP session is created and no
Mcp-Session-Idis issued. An obsolete session header on an otherwise valid request is ignored. - M2
initializeandnotifications/initializedare removed. A request is rejected unless its_metacarriesio.modelcontextprotocol/protocolVersionandio.modelcontextprotocol/clientCapabilities, with no fallback to a default version. OmittedclientInfois accepted; a present one is validated. - M3
server/discoveradvertises exactly the supported set (initially2026-07-28, not a>=comparison) and only the capabilities we implement. - M5
ping,logging/setLevelandnotifications/roots/list_changedare removed, along with unsolicited log notifications. - M9 No SSE event IDs are emitted, and
Last-Event-IDis ignored without replaying anything. - m4 A POST without
Mcp-Method, or atools/callwithoutMcp-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/listand completed tool calls (includingisErrorresults) carryresultType: "complete"andserverInfo. - m3
tools/listreturns tools in a deterministic order that stays stable across pages. - m5 Complete
server/discoverandtools/listresults includettlMsandcacheScope. Start with private scope andttlMs: 0until a cache policy is reviewed.
Schemas (audit; change only what fails)
- m1 Capability serialization accepts the
extensionsmap. - m10 Generated tool schemas validate as JSON Schema 2020-12, and
structuredContenthandling makes no object-only assumption. Data API's object responses stay as they are. - S1 A regression test shows fractional
minimum,maximumanddefaultvalues survive.
Integration
- The endpoint is OAuth-only, integrated with MCP: Add OAuth authentication and discovery #2642. MCP gets no custom token-header fallback; ordinary Data API HTTP authentication is unchanged.
- Regression tests cover optional and null tool arguments, and request-context teardown with asynchronous tools. The upstream fixes ship in 2.0.3; Data API's own context cleanup is MCP: Keep request IDs and logs separate between tool calls #2629.
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
includeContextvalues: 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
[-]Upgrade Quarkiverse MCP Server to 2.0.2[/-][+]MCP: Upgrade Quarkiverse MCP Server to 2.0.2[/+][-]MCP: Upgrade Quarkiverse MCP Server to 2.0.2[/-][+]MCP: Upgrade Quarkiverse MCP Server to 2.0.3[/+][-]MCP: Upgrade Quarkiverse MCP Server to 2.0.3[/-][+]MCP: Implement the 2026-07-28 wire contract[/+][-]MCP: Implement the 2026-07-28 wire contract[/-][+]MCP: Implement the 2026-07-28 contract[/+]erichare commentedon Oct 13, 2026
@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
[-]MCP: Implement the 2026-07-28 contract[/-][+]MCP: Support the 2026-07-28 protocol without legacy sessions[/+]