MCP batch mixed tools error: split status reads, waits, tools

Sume's legacy MCP batch must hold one class of work: jobs_status reads, jobs_wait waits, or other tools. A mixed array gets 400 -32600. Here is how to split it.

4 min readSume
All posts

A legacy array posted to Sume must hold one class of work: all jobs_status reads, all jobs_wait waits, or all other tools. A mixed array gets HTTP 400 with code -32600 and the message "Legacy batches must contain one work class: status reads, waits, or other tools." Legacy arrays are also capped at 4 messages. Split it into one array per class, or better, one message per POST.

Classes below are from its MCP server source and the tools and gates docs.

Which three classes does Sume use?

Sume's MCP server source and docs, read 2026-10-01.
ClassTool calls in itNote
Status readsjobs_statusRead tool
Waitsjobs_waitIts own tool in the Jobs family
Other toolsEverything elseWrite and paid tools need idempotency_key

How do I split a mixed batch?

Group the calls by tool name, then send one request per group. Paid and write calls carry their own idempotency_key, so a retry of one group does not resubmit another. Waiting belongs in its own jobs_wait request; see MCP jobs_wait for long video jobs.

function groupByClass(calls) {
  const groups = { read: [], wait: [], tool: [] };
  for (const call of calls) {
    const key =
      call.params.name === "jobs_wait"
        ? "wait"
        : call.params.name === "jobs_status"
          ? "read"
          : "tool";
    groups[key].push(call);
  }
  return Object.values(groups).filter((g) => g.length > 0);
}
// POST each group to https://mcp.sume.com/mcp as its own request.

Why does Sume sort calls by class?

Each class draws on its own admission budget, so a wait cannot be mixed with quick reads. Which budget a call uses is covered in how the endpoint counts reads and writes.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume