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
Implement this in the Rust dataplane repository (contextforge-org/contextforge-data-plane) for MCP 2026-07-28 only.
After a task-capable upstream returns a task handle, the client drives the lifecycle through tasks/get, tasks/update, and tasks/cancel. The dataplane must route each stateless request to the backend that owns the task.
Work
Implement the RMCP ServerHandler methods for tasks/get, tasks/update, and tasks/cancel.
Preserve cooperative, eventually-consistent cancellation and update acknowledgements.
Let the downstream client control polling and honor pollIntervalMs; do not add a gateway polling loop or blocking tasks/result adapter.
Ensure a completed deferred tool result is subject to the configured CPEx/plugin policy, or fail closed when that policy cannot be preserved statelessly.
Ensure upstream Streamable HTTP requests use the restored upstream task ID for Mcp-Name routing.
Update the MCP routing and method-reference documentation.
Acceptance criteria
tasks/get routes to the owning backend and returns every valid task state without loss.
input_required requests round-trip through tasks/update, including partial and eventually-consistent updates.
tasks/cancel forwards cooperative cancellation and returns a valid empty acknowledgement.
Malformed, expired, unavailable-backend, cross-virtual-host, and unauthorized handles fail closed without upstream leakage.
Polling is one downstream request to one upstream request; pollIntervalMs is preserved.
No MCP session header, in-memory affinity, tasks/list, or tasks/result path is introduced.
Focused tests cover all statuses, updates, cancellation, headers, authorization, and backend failures.
Out of scope
Python control-plane implementations and legacy 2025-11-25 Tasks APIs.
Optional notifications/tasks delivery over subscriptions/listen.
Part of #5683.
Blocked by
resultType.Scope
Implement this in the Rust dataplane repository (
contextforge-org/contextforge-data-plane) for MCP2026-07-28only.After a task-capable upstream returns a task handle, the client drives the lifecycle through
tasks/get,tasks/update, andtasks/cancel. The dataplane must route each stateless request to the backend that owns the task.Work
ServerHandlermethods fortasks/get,tasks/update, andtasks/cancel.taskId, and forward exactly one upstream RPC.taskIdin eachtasks/getresponse back to the exposed handle.inputRequests,inputResponses, terminal result/error payloads, metadata, TTL, and changingpollIntervalMs.pollIntervalMs; do not add a gateway polling loop or blockingtasks/resultadapter.Mcp-Namerouting.Acceptance criteria
tasks/getroutes to the owning backend and returns every valid task state without loss.input_requiredrequests round-trip throughtasks/update, including partial and eventually-consistent updates.tasks/cancelforwards cooperative cancellation and returns a valid empty acknowledgement.pollIntervalMsis preserved.tasks/list, ortasks/resultpath is introduced.Out of scope
2025-11-25Tasks APIs.notifications/tasksdelivery oversubscriptions/listen.