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 Code MCP startup wait: Sume tools missing on the first -p turn
Headless Claude Code bounds how long turn one waits for MCP servers with CLAUDE_CODE_MCP_STARTUP_WAIT_MS. Name Sume tools and check mcp_health first.
- 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.
- Claude batch scripts into a Sume bulk run: holiday video pipeline
Write 100 holiday product scripts with Anthropic Message Batches, then render each as a video with one Sume bulk run. Includes the JSONL-to-items conversion.
- Opus 5.5 inline tools: adding Sume tools mid-conversation
Claude Opus 5.5 inline tools add tool definitions mid-conversation without breaking the prompt cache. What that changes for Sume MCP, and what it does not.
Written by Sume