MCP subscriptions/listen and tasks versus Sume's pull-based job events

The 2026-07-28 MCP spec adds subscriptions/listen and a tasks extension. Sume has no SSE or WebSocket: poll job events, or use jobs_wait with a 55-second cap.

4 min readSume
All posts

The MCP specification dated 2026-07-28 removes sessions, makes the protocol stateless, drops SSE resumability, and adds subscriptions/listen and a tasks extension (SEP-2663). Sume's jobs API does not stream. The docs say there is no SSE or WebSocket transport on the Developer API today, and GET /v1/jobs/:id/events is a pull snapshot. For long media work over MCP, call jobs_wait in bounded slices, or take a webhook.

Push versus pull

Long-running work, read 2026-10-05
MechanismWhereBehavior
subscriptions/listenMCP 2026-07-28 changelogListed as a new feature in the changelog; its semantics are not summarized here
Tasks extensionMCP changelog, SEP-2663Listed in the changelog
jobs_waitSume hosted MCP1-20 job_ids, wait_for all or any, default 50s, cap 55s
GET /v1/jobs/:id/eventsSume RESTPull snapshot, not a stream
WebhookSume RESTTerminal events only: job.completed, job.failed, job.canceled

How to wait on Sume

jobs_wait returns when its jobs are terminal, or when the slice ends. At the end of a slice, the answer reports wait_slice_expired, and you call it again with the same ids. Do not submit the paid create again. The docs also say a 524, 522, 523 or 525 on jobs_wait is a transport failure and never a job outcome. The job keeps running and billing, so wait again or read jobs_status once.

wait_for: "any" returns when one id finishes, and the remaining jobs continue. Unknown or foreign-workspace ids fail the whole call. With include_results: true, each finished id comes back with its result, so a wave needs no second read.

{
  "job_ids": ["job_a", "job_b", "job_c"],
  "wait_for": "all",
  "include_results": true
}

What to build

  • Loop on jobs_wait with the same ids until every job is terminal, with an overall deadline in your client.
  • For work that outlasts a single tool call, prefer a webhook and keep polling as a backup.
  • Do not build on progress events: Sume's public job events are a timeline of states (job.created, job.queued, job.started and so on), and the docs call them a pull snapshot.
  • If you adopt the MCP tasks extension elsewhere, check separately whether a given Sume tool supports it. The Sume docs do not say.

Does it replace resource subscribe?

The changelog lists subscriptions/listen as a new item and does not say it replaces resource subscribe, so this post does not claim that. What I can state: the spec moved toward a stateless protocol, and Sume's own long-running work uses polls, webhooks and bounded waits.

A slice arithmetic example: a 10 minute render with a 55 second cap needs at least 600 / 55, which is 10.9, so 11 waits. In practice you would use 50 second slices (the default), so 600 / 50 = 12. Either way it is a short loop, and include_results returns the result in the last call.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume