MCP tasks/get vs Sume's Agent Completion status_url polling

The MCP 2026-07-28 tasks extension polls by handle with tasks/get. Sume's Agent Completions poll a status_url until next_action is not poll_status.

4 min readSume
All posts

Both patterns solve long-running work with a handle you poll. In the MCP tasks extension, you call tasks/get with a task handle. In Sume's Agent Completions, you call the receipt's status_url until next_action is something other than poll_status. They are separate surfaces and neither calls the other.

The tasks facts come from the 2026-07-28 release candidate post: handle-based tasks/get, tasks/update and tasks/cancel, with tasks/list removed. Sume's side is in the Agent Completions docs.

Mapping

Task handle against run receipt (read 2026-10-04)
ConceptMCP tasks extensionSume Agent Completion
Read statetasks/getGET on status_url
Canceltasks/cancelPOST on cancel_url
Listtasks/list removedGET /v1/agent-runs lists runs
StatusesDefined by the extensionqueued, processing, completed, failed, canceled
Loop controlClient decidesStop when next_action is not poll_status

A poll loop

The loop below reads the receipt at the status_url returned by the 202 response and stops on the documented next_action rule. For a production client, prefer the SDK's waitForRun or a webhook, as the SDK docs recommend.

export async function poll(statusUrl: string): Promise<unknown> {
  for (;;) {
    const res = await fetch(statusUrl, {
      headers: { Authorization: `Bearer ${process.env.SUME_API_KEY}` },
    });
    const { data } = await res.json();
    if (data.next_action !== "poll_status") return data;
    await new Promise((r) => setTimeout(r, 2000));
  }
}

Caveats

  • Do not use a run id as a job id; they are different families.
  • retry_later is a value of next_action, so a loop that only checks status can stop at the wrong time.
  • Cap total wait time and cancel at the deadline.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume