A tool call looks atomic in a trace: model picks a function, arguments go out, result comes back. In the billing record it is a sequence. The request carries your system prompt, the user's message and the full tool schema list, and every token of that counts as input. The response usually contains only the tool name and its JSON arguments, so output is small. Then the client appends the tool result and sends the whole thing again, which means the same large input is billed a second time.
That framing matters because it reframes what a misroute costs. The failed attempt is not free. It is a full input charge plus a small output charge, and then the successful retry pays the input charge again, often plus the tool output you appended. OpenAI's function calling documentation describes this exact loop: the model returns a tool call with a call_id, the application executes the tool, and the tool output is sent back to the model to continue the OpenAI function calling guide. Every hop in that loop is a separate metered request.
There is also a semantic cost that does not show up in the token bill: a wrong pick often executes the wrong tool. The MCP specification is explicit that tools represent arbitrary code execution and must be treated with caution, and that hosts must obtain explicit user consent before invoking any tool the MCP specification. A wrong pick can therefore mean the wrong action was taken before anyone noticed, which is a cost you cannot retry your way out of.



