Skip to content

[EPIC][CF-DATAPLANE] Support tools/list on MCP 2026-07-28 #5952

Description

@lucarlig

Part of #4725

Spec links:

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

Acceptance criteria

  • 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.
  • Existing 2025-11-25 behavior remains compatible.
  • Wire-level integration coverage exercises authenticated single-backend, federated, pagination, cache, schema, and deny paths; [TESTING][MCP-PROTOCOL]: Add Python SDK v2 live-stack E2E tests for MCP 2026-07-28 #5761 covers the SDK-level 2026 flow.

Related work

Out of scope

  • Tool execution through tools/call.
  • Reimplementing the existing 2025-11-25 tool aggregation and namespacing behavior.
  • Control-plane CRUD or Admin UI work unrelated to the dataplane wire path.

Metadata

Metadata

Assignees

No one assigned

    Labels

    CF-DATAPLANETasks related to the creation of new Data Plane for ContextForge.enhancementNew feature or requestepicLarge feature spanning multiple issuesmcp-2026-07-28Issues related to compliance with MCP 2026-07-28mcp-protocolAlignment with MCP protocol or specificationrustRust programmingtriageIssues / Features awaiting triage

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions