What it does per call
1
Opens a trajectory
One per session, tagged with the upstream server name, so the whole
conversation is one governed unit rather than a series of unrelated calls.
2
Resolves a grant for the tool
Per tool, not per server. A server exposing ten tools is not one authority.
3
Works out the amount
From an argument you nominate. See below, because this is the part with a
sharp edge in it.
4
Authorises, then forwards or refuses
A refusal goes back as an MCP error carrying the outcome and the reason, so
the agent can tell “not permitted” from “out of allowance” and stop
retrying the second.
Money: unpriced and unresolved
The proxy cannot know which of somebody else’s tool arguments is an amount, so
you tell it:
unpriced. Nobody declared this tool as carrying money, so it is authorised at zero. Honest: the operator states which of their tools move money, and silence means no.unresolved. A field was declared and the call did not carry a usable number. Refused. Declared-but-absent is a real problem, not a free action, and treating it as zero is how a spending limit quietly becomes optional.

