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.
Supported constructors
Use
tools/list on the hosted MCP for complete JSON schemas. Swap and bridge amounts are strings in atomic token units; Hyperliquid size/price and 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.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:
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:
What the envelope proves
Base swap verification checks
Base swap verification checks
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.Optional Coinbase delegation
Delegate creates permission for a separate Coinbase end-user account. Fund that exact account for actions using it; connected-wallet and legacy Safe balances do not fund it. Public MCP access alone does not authorize protected submission. The app lets you choose a personal per-swap cap and expiry. The shared ceiling is $5,000 USDC per swap; this is neither a daily budget nor a total-loss limit. Expiry defaults to 90 days and is limited to 180 days. Inspectotto_delegation_fence_status before minting: present, policy_name, rules_digest, ruleset_version, mint_enabled and the current cap.
Permission covers only supported Base swap shapes where enabled, including eligible stock buys and Morpho vault operations. It does not automatically 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 must be revoked and minted again before it can authorize that withdrawal. Use Moving funds out for the separate exit steps.
Manage permission from the published CLI
Manage permission from the published CLI
Version 0.1.3 supports email OTP permission management 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 CLI has no personal-cap flag and mints with the shared $5,000 per-swap ceiling; use the app for a smaller cap. 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.