Skip to content

[Major-5] Migrate tasks to official extension #5683

Description

@Lang-Akshay

Part of #5677.

Blocked by

Protocol sources

The dated core schema is authoritative for core error codes: Missing Required Client Capability is -32021. Do not use the stale -32003 value currently shown in the Tasks extension draft.

Required behavior

  • Tasks are the io.modelcontextprotocol/tasks extension, not a core capability.
  • The client declares the extension in _meta.io.modelcontextprotocol/clientCapabilities.extensions on every relevant request; the server advertises it through server/discover.
  • Task creation is server-directed, but a server MUST NOT return CreateTaskResult to a request that omitted the extension capability. If task support is required, return -32021.
  • Only tools/call currently supports task-augmented execution.
  • CreateTaskResult uses resultType: "task"; lifecycle acknowledgements and tasks/get use resultType: "complete".
  • A task must be durably resolvable through tasks/get before its CreateTaskResult is returned.
  • The client drives polling and honors pollIntervalMs; the gateway performs no polling loop.
  • Lifecycle methods are tasks/get, tasks/update, and tasks/cancel. tasks/list and tasks/result do not exist.
  • Streamable HTTP lifecycle requests use Mcp-Method and Mcp-Name: <taskId>.

Gateway work

  • Advertise Tasks through the extension capability and enforce the per-request client declaration.
  • Preserve the complete/MRTR/task-aware tools/call result union.
  • Rewrite upstream task IDs to opaque backend-scoped handles before returning them downstream.
  • Proxy each tasks/get, tasks/update, and tasks/cancel request to exactly one backend; restore the upstream task ID at that boundary.
  • Preserve statuses, timestamps, TTL, changing polling interval, input requests/responses, final result/error payloads, and cooperative cancellation.
  • Rewrite Mcp-Name from the exposed handle downstream to the upstream task ID upstream.
  • Return -32602 for invalid or nonexistent task IDs and -32021 for missing per-request Tasks capability.
  • Keep tasks/list, tasks/result, MCP sessions, and legacy SSE out of the modern dataplane path.

Implementation split

Acceptance criteria

  • Tasks are advertised only through io.modelcontextprotocol/tasks in server/discover.
  • A request without the per-request Tasks capability never receives resultType: "task"; missing capability returns -32021.
  • A task-capable tools/call preserves either its standard result, MRTR result, or CreateTaskResult.
  • tasks/get, tasks/update, and tasks/cancel route through opaque stable handles without session affinity.
  • Task fields, status-specific payloads, resultType, and routing headers are preserved at both boundaries.
  • tasks/list and tasks/result return method-not-found on the modern path.
  • Applicable official Tasks extension conformance scenarios pass.

Out of scope

  • Python control-plane task handling and legacy protocol translation.
  • MCP 2025-11-25 Tasks compatibility, legacy initialize, sessions, or SSE.
  • Gateway-managed polling or a blocking tasks/result adapter.
  • Optional notifications/tasks delivery unless separately scoped.

Activity

  1. added
    CF-EXTERNAL-DATAPLANEExternal dataplane which can extend ContextForge functionality.
    mcp-2026-07-28Issues related to compliance with MCP 2026-07-28
    on Jul 17, 2026
  2. self-assigned this
    on Aug 6, 2026
  3. added
    blockedBlocked by some other predecessor issue or PR. See notes.
    and removed
    blockedBlocked by some other predecessor issue or PR. See notes.
    on Aug 11, 2026
  4. removed their assignment
    on Aug 14, 2026
  5. added
    triageIssues / Features awaiting triage
    2.0CF1.5 with the bolt on external data plane + Redis as a communication channel
    and removed
    triageIssues / Features awaiting triage
    on Aug 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    2.0CF1.5 with the bolt on external data plane + Redis as a communication channelCF-EXTERNAL-DATAPLANEExternal dataplane which can extend ContextForge functionality.mcp-2026-07-28Issues related to compliance with MCP 2026-07-28rustRust programming

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions