jobs_wait for 20 transcription jobs in one MCP call
The hosted MCP jobs_wait takes up to 20 job_ids, wait_for all or any, and include_results returns each finished transcript. Retry slices of 55 seconds.

With the hosted Sume MCP server, one jobs_wait call can wait on up to 20 transcription jobs: pass job_ids, choose wait_for all or any, and set include_results: true to get each finished transcript back in results[] without a separate read. Each call holds at most 55 seconds, so on wait_slice_expired you call it again with the same ids. This follows Jobs and results, read 2026-10-06.
What does the batch response look like?
A multi-id wait answers with object: "job_wait_batch" and a status snapshot per id. Results too large for one answer are listed in results_omitted.job_ids; read those with one batch jobs_result. If Sume operations stopped a job, outcome: "operator_stopped" comes back at once and operator_stopped.pending_job_ids names the ids still running. Asking again about the stopped ids cannot change the answer.
| Field | Meaning |
|---|---|
job_ids | 1 to 20 ids; unknown or foreign ids fail the whole call |
wait_for | all (default) or any; the rest keep running and keep billing |
include_results | Completed ids come back with their jobs_result answer |
wait_slice_expired | Retry with the same ids; never resubmit the paid create |
operator_stopped | At least one id was stopped by operations; holds are refunded |
A wave of 20 STT jobs
Create the jobs with stt_create (each needs its own idempotency_key), keep the job ids, then wait. The arguments for the wait are plain JSON:
{
"name": "jobs_wait",
"arguments": {
"job_ids": ["job_001", "job_002", "job_003"],
"wait_for": "all",
"include_results": true,
"timeout_seconds": 50
}
}Why batch instead of one wait per job
Twenty single waits mean twenty open calls, each with its own 55-second ceiling. One batch wait gives you a single call per slice and a snapshot of the whole wave. For three or more independent calls of one shape, the MCP run contract also points to one script_run, so the loop runs on the Sume side and only the returned value comes back; each paid create inside still needs its own idempotency_key.
If you drive Sume over REST instead, there is no batch wait: poll GET /v1/jobs/{id}/status with backoff, as in polling transcription jobs without a 429.
Sources
Related posts
More in Integrations
- jobs_wait outcomes: wait_slice_expired, operator_stopped, omitted
What each jobs_wait answer means on Sume's hosted MCP and what your agent should do next: call again, stop waiting on stopped ids, or read omitted results.
- Render a Short over MCP: timeline_create, jobs_wait, timeline_get
Three hosted MCP tool calls turn a Timeline document into a vertical Short: create with an idempotency_key, wait on the job, then fetch the result.
- GitHub Actions job that renders a 9:16 clip on Sume as an artifact
A workflow file that replaces a Sora render step: submit to Sume, poll with a deadline, and upload the mp4 as a build artifact. The key stays in a secret.
- stt_create dry_run and max_spend_usd: cap an MCP transcription run
On Sume's hosted MCP, dry_run previews admission and cost without submitting, and max_spend_usd caps a paid stt_create. Add an idempotency_key to every write.
Written by Sume