MCP unsupported_payload_keys: read the allowed array
A key a Sume MCP tool does not list returns unsupported_payload_keys with unexpected, allowed, tool and sometimes path. Fix it from the allowed list.

Sume's hosted MCP tools check the payload against a list of allowed keys. A key outside that list is not ignored. The call fails with the code unsupported_payload_keys before any job is created. This differs from unsupported_tool_arguments, which is about keys next to the payload; here the unknown key is inside it.
The shape of the error
The message says the tool payload has unsupported keys. The data carries unexpected, the array of keys that were refused; allowed, the full list the tool accepts; and tool, the tool name. When the unknown key is nested, the message adds the location, such as unsupported keys at a path, and the data includes a path field.
The allowed list mirrors the public OpenAPI request for the matching REST route. So the list you receive follows the public API contract for that tool.
A fix that works every time
Do not delete the key and retry blindly. Compare unexpected with allowed. Often the key is a near miss, such as a field from another model's request. If a tool adds a hint, follow it: for music_create the message says Music 1.0 is prompt-driven and that duration and duration_seconds must not be sent.
Keep the same idempotency_key on the corrected call. The first call never ran, so there is nothing to duplicate.
// refused
{ "idempotency_key": "clip-41", "payload": { "prompt": "a calm lake", "fps_boost": true } }
// error data (shape)
{ "code": "unsupported_payload_keys", "unexpected": ["fps_boost"], "allowed": ["prompt", "..."], "tool": "generate_video" }Make the agent do it
Give the agent one rule in its system prompt: when a call fails with unsupported_payload_keys, drop only the keys in unexpected, check them against allowed, and retry once. Without the rule, models tend to rewrite the whole payload and introduce a new bad key. Log the tool and unexpected values; they show which fields your prompts keep inventing.
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