Strands Agents Structured Output internally works as a tool
When using Strands Agents SDK's Structured Output with a ConversionResult Pydantic model passed to structured_output_model, an unexpected tool name appeared in the metrics.
tool_usage:
get_exchange_rate: calls=1, success=1
ConversionResult: calls=1, success=1ConversionResult is counted as a tool. I didn't define this as a tool, so why does it show up in tool_usage?
Turns out Structured Output internally converts the Pydantic model into a tool specification and registers it with the LLM. The LLM outputs structured data using the same tool-calling mechanism, and the SDK validates it. So the agent loop goes: LLM → call get_exchange_rate → receive result → call ConversionResult tool → validation passes → done.
If you see a Pydantic model name in tool_usage during debugging, it's the Structured Output internals. You can also check call_count and error_count to monitor validation success rates and catch excessive retries.
