Skip to main content
The approval tools family is the human’s workflow, not the agent’s. The agent can request that a backtested strategy be promoted to paper trading, but only a human can approve or deny that request. This is the money-path gate — enforced at the code level, not just by policy.

The approval state machine

Every approval request moves through a simple state machine:
approved and denied are terminal. An approval cannot be reversed through the tools API. If a strategy was approved by mistake, it must be retired from paper trading through the web UI — a separate, audited action.

Who can call what

The agent can call list_approvals to check the status of a request it submitted. The agent cannot call decide_approval — the MCP server rejects the call with an insufficient_privilege error if the caller is an agent-level API key. Only human-level API keys (issued through the web UI) can decide approvals. This is enforced at the authentication layer, not at the UI layer. There is no way for the agent to promote a strategy to paper trading, period.

list_approvals

List pending approval requests for the tenant. The agent calls this to check whether a promotion request it submitted has been decided. The human calls this (or uses the web UI) to see what’s waiting.

Arguments

Return value

An array of approval records:

Example call

Example response

decide_approval

Approve or deny a pending approval request. Human-only. The MCP server rejects this call if the caller is an agent-level API key.

Arguments

Return value

Example call

Example response

The promotion workflow

1

Agent runs a backtest

The agent calls backtest_run and reviews the stats. If the results look good, it proceeds.
2

Agent requests promotion

The agent submits a promotion request (via the strategy API or by flagging the run). This creates a pending approval record.
3

Human reviews

The human opens the web UI, reviews the strategy spec, backtest results, risk attestation, and the agent’s reasoning. The human can also re-run the backtest with different parameters to sanity-check.
4

Human decides

The human calls decide_approval (or clicks Approve / Deny in the web UI). If approved, the strategy is promoted to paper trading and begins generating virtual positions against live market data.
5

Agent checks status

The agent calls list_approvals to see whether its request was approved or denied, and reports the outcome to the human.
Paper trading is the last step before live capital. A paper strategy trades on live market data with virtual money. Promoting from paper to live capital is a separate, even more tightly gated workflow that is not exposed through the tools API at all.
The human should always review the risk attestation on the backtest run before approving. A high Sharpe with a breached max_weight constraint is a red flag, not a green light.