You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Comprised of: the tools/list portions of the stateless core (#5679, #5680), notification rework (#5681), cache semantics (#5685), required request headers (#5687), and JSON Schema 2020-12 support (#5688), together with the existing dataplane pagination and list-change gaps (#4664, #5346).
What the spec says
A modern tools/list request is stateless and does not depend on initialize, notifications/initialized, or Mcp-Session-Id.
Every request carries the negotiated protocol version, client identity, and client capabilities in _meta; Streamable HTTP requests also carry the required MCP headers.
Servers that advertise the tools capability must return the tools visible to the authenticated request. The result must not vary by connection state.
tools/list remains paginated and tools should be returned in a deterministic order.
Modern results carry resultType; tools/list also carries ttlMs and cacheScope.
Tool input/output schemas accept JSON Schema 2020-12. List-change delivery moves to an opted-in subscriptions/listen stream.
Current dataplane gap
The Rust dataplane already federates and namespaces tools, but the current handler obtains backend transports from state created during the legacy initialize flow and keyed by downstream session. It therefore does not provide a complete MCP 2026-07-28 tools/list path.
Pagination is also incomplete (#4664), and backend tool-list changes are not yet relayed downstream (#5346).
Gateway work
Route tools/list through the MCP 2026-07-28 stateless per-request path without requiring initialization or protocol-session state.
A 2026-07-28 client can call tools/list through the Rust dataplane against a 2026-07-28 backend without initialize, notifications/initialized, or Mcp-Session-Id.
Modern↔modern and supported cross-era gateway paths preserve tool discovery semantics.
Single-backend names remain transparent; multi-backend names and explicit aliases remain deterministic and routable.
Pagination covers every upstream page without omissions or duplicates and returns a valid downstream cursor contract.
Repeated unchanged requests return the same tool ordering.
Results contain valid resultType, ttlMs, and cacheScope, with private upstream data excluded from shared caches.
JSON Schema 2020-12 tool definitions round-trip without loss.
Required _meta fields and HTTP headers are validated; unsupported versions and header mismatches fail with the protocol-defined errors.
listChanged is advertised only when delivery works for the negotiated protocol revision.
Part of #4725
Spec links:
Comprised of: the
tools/listportions of the stateless core (#5679, #5680), notification rework (#5681), cache semantics (#5685), required request headers (#5687), and JSON Schema 2020-12 support (#5688), together with the existing dataplane pagination and list-change gaps (#4664, #5346).What the spec says
tools/listrequest is stateless and does not depend oninitialize,notifications/initialized, orMcp-Session-Id._meta; Streamable HTTP requests also carry the required MCP headers.toolscapability must return the tools visible to the authenticated request. The result must not vary by connection state.tools/listremains paginated and tools should be returned in a deterministic order.resultType;tools/listalso carriesttlMsandcacheScope.subscriptions/listenstream.Current dataplane gap
The Rust dataplane already federates and namespaces tools, but the current handler obtains backend transports from state created during the legacy
initializeflow and keyed by downstream session. It therefore does not provide a complete MCP 2026-07-28tools/listpath.Pagination is also incomplete (#4664), and backend tool-list changes are not yet relayed downstream (#5346).
Gateway work
tools/listthrough the MCP 2026-07-28 stateless per-request path without requiring initialization or protocol-session state.resultType,ttlMs, andcacheScope; apply the aggregation and shared-cache rules from [Minor-2] Caching semantics: CacheableResult + deterministic ordering #5685.tools.listChangedonly when the gateway can deliver opted-in changes through the negotiated protocol mechanism, coordinated with [Major-3] Notification rework: subscriptions/listen #5681 and [CF-DATAPLANE] Relay MCP list-changed notifications through gateway #5346.Acceptance criteria
tools/listthrough the Rust dataplane against a 2026-07-28 backend withoutinitialize,notifications/initialized, orMcp-Session-Id.resultType,ttlMs, andcacheScope, with private upstream data excluded from shared caches._metafields and HTTP headers are validated; unsupported versions and header mismatches fail with the protocol-defined errors.listChangedis advertised only when delivery works for the negotiated protocol revision.Related work
Out of scope
tools/call.