OpenAI Agents SDK tool not found: what a Sume call returns

A hosted MCP tool name that differs only in - or _ gets a tool_not_found result with a Did you mean hint; a scope-hidden tool returns insufficient_scope.

4 min readSume
All posts

When an agent calls a hosted MCP tool name that differs from a real one only in - versus _, Sume returns a tool result with code tool_not_found and a message of the form "Unknown remote MCP tool: NAME. Did you mean real_name?". A tool that exists but is hidden from a read-only OAuth session returns insufficient_scope instead. Neither is a JSON-RPC protocol error.

The OpenAI Agents Python v0.22.3 release (published 2026-09-17) lists "fix(core): deliver tool-not-found output on server-managed resume (#4947)". The release note says no more than that, so this post covers only what the Sume side sends. Sources were read 2026-10-01.

What does the model see for a mistyped tool name?

The server compares the requested name with its registry, ignoring - and _ punctuation. If that finds a registered tool the caller could see, it returns the hint with the suggested name and the stable code tool_not_found. Other typos are not matched: a name that does not resolve returns tool_not_found with no suggestion. The docs also say the server turns . into _ on call, so a dotted alias such as tools.list still works and is not an error.

How is a hidden tool different?

Under OAuth with only mcp:read, mutating and paid tools are not listed. If the model calls one anyway, the result carries insufficient_scope and the required scope mcp:write. The fix is to re-authorize with write access, not to rename the call.

Unknown-tool outcomes from the hosted MCP server source and docs, read 2026-10-01.
SituationResult codeWhat to do
Differs only in - / _tool_not_found plus a Did you mean hintRetry with the suggested name
Dotted aliasWorks (. becomes _)Nothing
Write tool, read-only OAuthinsufficient_scopeGrant mcp:write or use an API key
Name not in the catalogtool_not_found, no suggestionCall tools_list

Why do these come back as results and not errors?

A code comment in the server says tool execution failures are returned as MCP tool results with isError: true, not as JSON-RPC errors, so a client can show the payload. That matters for an agent loop: the failure text is ordinary tool output the model can read, and your runner must pass it back on the next turn, including after a resume.

How do I stop an agent guessing names?

Have it discover the live tools first. MCP tools and gates says to always discover the live contract with tools_list and tools_schema rather than assume the HTTP API surface. For the error shapes in general, see Sume tool errors in the OpenAI Agents SDK.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume