Sume MCP tool_name_typo: avatar_image_to_video_create is a typo
avatar_image_to_video_create gives tool_not_found; the real name is avatar-image-to-video_create. Sume sends did_you_mean and a tools_schema next_step.

Sume tool names are matched literally, and only a dot is folded to an underscore. Some tools carry hyphens, such as avatar-image-to-video_create, so a model that writes avatar_image_to_video_create gets tool_not_found. The error now carries did_you_mean and a next_step calling tools_schema with the correct name; it is a spelling miss, not a missing capability.
What the error contains
When the requested name differs from a catalog name only in hyphen or underscore punctuation, the server enriches the error. You get the suggested name, three next steps, a next_step pointing at tools_schema for the suggested tool, an adjustments entry with the from and to names, and a recovery object with the code tool_name_typo. The hint reads: call the suggested tool instead of the requested one.
| Situation | What you get | Action |
|---|---|---|
| Name differs only by hyphen or underscore | tool_not_found, did_you_mean, recovery tool_name_typo | call the suggested name |
| Name does not exist | tool_not_found | read tools_list for the real catalog |
| Tool hidden by scope | insufficient_scope, required_scope mcp:write | grant write or use a different credential |
Why the model gets it wrong
Names in Sume's catalog follow the resource, so a tool for image-to-video on avatars is avatar-image-to-video_create: hyphens inside the resource, one underscore before the verb. Models normalize toward snake case, and some clients add their own prefix on top. Pin the spelling by reading tools_list at session start, as the progressive discovery post describes, and give the agent that list as its only source of names.
Handle it in the client
Follow the suggestion once, then continue. This works on any error that carries did_you_mean.
def corrected_name(error: dict):
names = error.get('did_you_mean') or []
return names[0] if names else None
err = {'code': 'tool_not_found',
'did_you_mean': ['avatar-image-to-video_create']}
print(corrected_name(err))
print(corrected_name({'code': 'tool_not_found'}))Limits
The suggestion only covers punctuation differences. A name that is wrong in other ways gets the plain error, and for that the answer is tools_list. Do not claim that a capability is missing before you have read the catalog; the Agents SDK post shows another client that surfaces the hint.
The failure this prevents
A bare tool_not_found reads the same as a product that does not exist, and that is the reading that ends runs. The code comment records a case where a probe for avatar_image_to_video_create came back not found, the agent wrote that the run was blocked, and it had already fetched the correct hyphenated schema a few seconds earlier. Nothing was down. The tool had been in the catalog for weeks. The fix was to ship the correction inside the error the agent reads.
Checklist before you ship
- Take tool names from tools_list, never from memory or from a similar product.
- Follow did_you_mean and next_step before writing anything about a missing tool.
- Remember that only a dot is folded to an underscore, not a hyphen.
- Do not report a run blocked on a spelling miss.
Sources
Related posts
More in Agents
- Sume MCP returned a tool descriptor, not a result: it did not run
If a Sume MCP call returns a tool name, description and schema instead of a result, the tool did not run. Re-call with the namespaced name your client lists.
- Sume schedule cron field: expr, IANA timezone and next_run_at
A Sume schedule's cron object holds expr, timezone and next_run_at, or null for an API-only schedule. How to read when the next run is due over the API.
- Sume schedule cap null or 0: what a per-run override can do
A per-run generation_spend_cap_usd lowers a Sume schedule's cap but never raises it; null drops that ceiling, 0 is rejected, and wallet limits still apply.
- tts_create dry_run will not warn about a voice-language mismatch
A cost-only dry_run on Sume's tts_create stays a preview; the language double-check runs on submission. How to preflight voice, language and cost together.
Written by Sume