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.

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
| Mechanism | Where | Behavior |
|---|---|---|
subscriptions/listen | MCP 2026-07-28 changelog | Listed as a new feature in the changelog; its semantics are not summarized here |
| Tasks extension | MCP changelog, SEP-2663 | Listed in the changelog |
jobs_wait | Sume hosted MCP | 1-20 job_ids, wait_for all or any, default 50s, cap 55s |
GET /v1/jobs/:id/events | Sume REST | Pull snapshot, not a stream |
| Webhook | Sume REST | Terminal 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_waitwith 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.startedand 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
- MCP timeline_create provider_fields_not_accepted: no ffmpeg fields
Sume's timeline_create refuses model, filtergraph, ffmpeg_args, codec, preset and crf with provider_fields_not_accepted. Describe the edit, not the encoder.
- MCP_TIMEOUT is a 30-second startup wait, not a Sume job limit
In claude -p, MCP_TIMEOUT is the wait for MCP servers to connect, 30 seconds by default. It does not limit a video job; Sume's jobs_wait does that.
- MiniMax H3 aigc_watermark defaults to false: what Sume exposes
MiniMax's H3 API has an aigc_watermark boolean, off by default. What it does, and what to do for a minimax-h3 clip made through Sume.
- Omni and Seedance clips in one timeline: the fps resample warning
Clips from two video models can have different frame rates. Sume's timeline warns with output_fps_resamples_sources; probe each clip, then set output.fps.
Written by Sume