Skip to main content
Otto’s free otto_prepare_* tools return unsigned action plans. They never sign or submit. Each plan binds an account to a payload, checks and expiry. Your signer decides whether to execute it. The published otto-execute@0.1.3 client verifies and executes the LI.FI Base EOA swap shown below. Other constructors need their corresponding signer integration; this version has no bridge, Hyperliquid or Polymarket submission adapter. Coinbase delegation is a separate authenticated path, described at the end of this page. Hyperliquid order construction through Otto is retired. Do not use otto_prepare_perp_order or a cached constructor listing. Hyperliquid market research remains; existing-account recovery is described in Hyperliquid retirement & recovery.

Supported constructors

Use tools/list on the hosted MCP for complete JSON schemas. Swap and bridge amounts are strings in atomic token units; Polymarket price/shares use decimal strings. Stock and yield tools require the executable registry ID and commitment returned by the relevant registry. Listing a constructor does not establish that every app action is enabled.

Prepare a Base swap

This example prepares 1 USDC to WETH for an EOA you control. Preparation and verification move no funds. It needs Bash, Node 22+, and a Base address. USDC has 6 decimals; WETH has 18.
Choose your minimum output independently, using a price source you trust. For units only, 200000000000000 means 0.0002 WETH; this is not a current quote or a recommended floor. Save this as prepare.mjs. It records your intent before requesting a plan, then saves the complete MCP response and parsed envelope:
Run it, then verify the result against the saved intent and request:
A successful verification prints the account, exact input, minimum output, decoded fee distributions and remaining validity. Check those values. Never derive intent.json from Otto’s returned plan: that would compare the plan with itself. The hosted envelope expires after five minutes. A refusal has exit code 2 and a named code: STALE_ARTIFACT means prepare afresh; account, intent or payload mismatches need investigation. Do not remove a check to make the plan pass.

Sign and submit

The signing EOA needs Base USDC for the swap and Base ETH for gas. It can differ from the wallet paying for intelligence. Load its key locally using a secret manager or a hidden terminal prompt:
sign signs and decodes the ordered steps without broadcasting. Keep the output private: it contains signed transaction material. The following command broadcasts on Base mainnet. Use a current plan and run it only after deciding to execute this trade:
The CLI checks freshness before each signature. Preserve transaction hashes and inspect chain status after an interruption before preparing a replacement trade. The constructor does not guarantee single execution: account nonces or venue order identifiers enforce the applicable replay boundary. An interrupted process does not prove that nothing was submitted.

What the envelope proves

An otto_prepare_swap envelope carries twelve assertions, each reported with its result in the response. A check that does not hold refuses the call by name rather than returning a plan.

Existing Coinbase trading permissions

Legacy wallet recovery lets you review and stop an existing Model B trading permission for a separate Coinbase end-user account. New permission creation and replacement are retired. Public MCP access alone does not authorize protected submission. An existing permission’s recorded expiry and cap record remain part of its validation; neither authorizes new delegated trading. Provider limits are not cumulative budgets or maximum-loss limits. otto_delegation_fence_status reports mint_enabled: false for new Model B trading-permission setup, while the provider fence may remain present for existing grants. A qualifying withdrawal also requires confirmed ruleset-v2 withdrawal consent. New delegated trading is retired, including swaps, stock buys and yield deposits under existing grants — otto_submit_under_delegation returns DELEGATION_TRADING_RETIRED for all three. Only qualified vault withdrawals remain available under an existing permission; the share input, USDC output, reviewed spender and fence v2 checks are mandatory. It does not cover stock sells, bridges, Hyperliquid or Polymarket. Retail Stocks uses connected-wallet signatures. Withdrawals redeem vault shares to USDC inside the Coinbase account; their share-quantity and recipient checks are separate from the per-swap spend cap. Revocation removes authority; it does not redeem positions or move assets. A permission predating withdrawal consent cannot authorize that withdrawal, and the retired setup cannot upgrade it. Check the available direct exit path in Moving funds out; do not assume every vault exit works without the required existing permission.
Version 0.1.3 supports email OTP status and revocation with these optional dependencies:
Use your own email. Enter the OTP interactively. This flow runs without a wallet private key or Otto service credentials in its environment. The older delegate command may still be installed, but the retirement server refuses new reservations. Its Node OTP bridge uses Coinbase’s web SDK and is not a Coinbase-supported Node integration.Require read-back and durable confirmation after revocation. REVOKE_NOT_DURABLE means confirmation is incomplete and revocation should be retried. These commands manage permission; submit remains the EOA path above. Do not request or distribute Otto’s private delegation header.