MCP unsupported arguments: move the field into payload
A Sume MCP call with quality beside payload fails with unsupported_tool_arguments. Read hint move_to_payload and the adjustments array, then retry once.

The hosted Sume MCP server at https://mcp.sume.com/mcp takes a small set of top-level arguments per tool: usually idempotency_key, payload, and for paid tools dry_run and max_spend_usd. Everything that describes the job goes inside payload. If a model puts a payload field next to payload, for example quality, the call is refused with the error code unsupported_tool_arguments, and the tool does not run.
What the error contains
The tool result is an error with the message "<tool> received unsupported arguments". The data names the unexpected keys. When every unexpected key is a known payload field for that tool, the error adds hint set to move_to_payload, plus payload_keys listing them. A key that belongs nowhere gets no hint, only the plain list.
The server also builds an adjustments array, one entry per key. Each entry has path, from, to and reason. A key that should move has to set to payload.<key>. A key that the payload already holds is marked to drop, with to set to null, and the payload copy is never overwritten.
The corrected payload entry
When at least one key moves, the array ends with an entry whose path is payload and whose to is the full corrected payload. Its reason tells the client to retry the tool once with exactly this payload and the same idempotency_key. That is the point: the fix is one call, not a re-derivation by the model.
One safety rule limits this. If the corrected payload would not survive MCP redaction unchanged, the server leaves out the combined entry and lists only the per-key moves. Fields like webhook_url, callback_url, source_url and signed URLs are redacted in error data, and copying a [redacted] value into a retry would be worse than having no copy.
{
"idempotency_key": "order-8823-clip-1",
"quality": "high",
"payload": { "prompt": "a slow product turntable" }
}
// fix: move the key
{
"idempotency_key": "order-8823-clip-1",
"payload": { "prompt": "a slow product turntable", "quality": "high" }
}Handling it in a client
Keep the same idempotency_key on the retry. The first call did not run, so reusing the key is safe, and if you had changed the key you could pay for two jobs after a later network retry. Limit repair to one attempt, then surface the error. Do not loop on a message that names the same key again.
- Read data.code first: unsupported_tool_arguments.
- If data.hint is move_to_payload, apply adjustments in order.
- If a payload entry exists, send it as is. If not, apply the per-key moves.
- Retry once with the same idempotency_key.
Sources
Related posts
More in Integrations
- MCP wrong_tool from generate_video: lip sync and motion control
Sume's generate_video refuses minimax/h3-max/lip-sync and the Kling 3.0 motion-control model with wrong_tool. next_action names the tool to call instead.
- n8n webhook auth is Basic, Header or JWT: verify Sume's HMAC yourself
n8n's Webhook node offers Basic, Header and JWT auth, none of which checks Sume's HMAC. Verify sume-v1 over timestamp.raw_body in code, 300 second window.
- n8n video workflow: Respond immediately vs Sume's 30-second sync wait
In n8n, use Respond immediately and let Sume call back. Sume's sync mode waits at most 30 seconds, too short for most video jobs, so avoid the last-node wait.
- Notion API image block with a Sume URL: PNG works, WebP is not listed
Notion's external image block needs a directly hosted, public URL, and its file-type list has no WebP. Ask Sume for png or jpeg, then append the block.
Written by Sume