Claude Code's 60 s MCP timeout: Sume sync waits 30 s, video polls
Claude Code 2.1.287 caps MCP tool calls at 60 seconds per server. Sume's 30 s sync wait and 55 s jobs_wait fit under it; a video render needs repeated waits.

Claude Code now ends an MCP tool call after 60 seconds per server, so a render that outlasts that has to be polled, not awaited. Sume's waits are built to fit: sync blocks for at most 30 seconds and jobs_wait holds at most 55.
The changelog entry for 2.1.287 (Oct 1, 2026) says MCP tool calls no longer hang forever and that the per-server timeout is 60 seconds.
Each Sume wait against the 60 s line
The 55-second cap leaves five seconds of margin. If your connection adds latency, pass a smaller timeout_seconds, such as 40.
| Mechanism | Maximum hold | Fits under 60 s? |
|---|---|---|
mode: sync or subscribe on submit | 30 seconds (wait_timeout_seconds is clamped to 0 to 30) | Yes |
MCP jobs_wait, default slice | 50 seconds | Yes |
MCP jobs_wait, largest slice | 55 seconds (larger values are clamped) | Yes, narrowly |
mode: async plus status polling | A fast read per call | Yes |
Video is longer than any slice
The docs note that images often finish within the 30-second sync window, while video, avatar-video and face-swap jobs routinely do not. A wait is a bounded view of a job, not a limit on the job.
To wait for a ten-minute render, repeat the wait rather than asking for a longer one. When a slice ends with wait_slice_expired, call jobs_wait again with the same ids.
What not to do after a timeout
A timed-out tool call tells you only that you stopped waiting. The job continues and continues to bill. Three habits matter.
- Do not resubmit the paid create. If you must retry a submit, reuse the same idempotency key so the retry returns the original job.
- Treat a
524,522,523or525onjobs_waitas a transport failure, not a job outcome. Re-issue the wait or readjobs_statusonce. - Do not report the job blocked because a slice expired; check
terminalandresult_readyfirst.
A prompt that works
You can steer the agent with an instruction rather than code. For example: submit once with an idempotency key, record the job id, then call jobs_wait with timeout_seconds of 45 and repeat on wait_slice_expired until the job is terminal, then read jobs_result.
If you submit several jobs at once, pass up to 20 ids to one jobs_wait call and set include_results: true, so a single call per slice covers the whole batch.
Webhooks as the alternative
If your own service starts the work, a webhook removes waiting entirely. Sume sends job.completed, job.failed or job.canceled to a public HTTPS URL, signed with HMAC SHA-256. Keep status polling available as a backup for deliveries that never arrive.
Sources
Related posts
More in Developers
- Claude Files API is GA: review Sume outputs by job id and media URL
The Claude Files API left beta on Aug 19. When Claude reviews generated media, store the Sume job id and media.sume.com URL, not raw provider links.
- Cloudflare AI Search bills from Nov 1: split retrieval from renders
Cloudflare's October 1 changelog makes AI Search GA with usage billing from November 1, 2026. How to keep retrieval costs separate from Sume render costs.
- Codex 0.160 agent history 'Show more': recover Sume jobs by job list
Codex CLI 0.160.0 adds Show more pagination to agent command center history. If a thread scrolls away, Sume's GET /v1/jobs list still holds every job.
- Cursor Security Review bot on a Sume webhook handler: what to find
Cursor added a Security Review bot on Sep 23. A webhook handler for Sume should pass seven checks: raw body, timestamp window, rotation, empty secret and more.
Written by Sume