Skip to main content
In-process Python takes the decorator, tools behind MCP take the gateway, and a framework with its own approval UI takes an adapter. The decision is about where the call that acts lives, not about which framework you use.

The decision table

Two questions settle most cases. Can you decorate the function that acts? Then the decorator. Does your framework already have a place where a human says yes? Then, and only then, an adapter routes the request there.

What you don’t need on one host

For a single host, the whole of the default configuration is a policy file and a directory: When the store has to be shared across hosts, that is the one thing that changes: Run on Postgres.

What changes nothing

The three ways in share one policy, one store, one set of guarantees and one receipt format. A refund refused by the gateway is refused for the same reason and recorded in the same shape as one refused by the decorator, and ctrlrun verify checks the configuration behind all three.

Next