Koskamo

Arcadia Finance MCP

An MCP server for the Arcadia Finance DeFi protocol, exposing 38 tools for managing concentrated liquidity positions, lending pools, and automated yield strategies on Base, Optimism, Unichain, and Robinhood Chain. It supports reading account health, depositing assets, borrowing, rebalancing LP positions, and configuring automations, returning unsigned transactions for client signing.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Arcadia Finance MCP logo, by Pragma LabsCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-07Published by Pragma Labs
MCP endpoint (Streamable HTTP)
https://mcp.arcadia.finance/mcp
Vendor documentation

What its tools do

38 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

38 of 38 have a description · 38 of 38 declare behavior hints · 38 of 38 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Read account health factor and collateral details
  • Deposit single-sided liquidity into lending pools
  • Configure automated rebalancing and compounding
  • Create leveraged concentrated liquidity positions

Source and maintenance

Community listingRegistry 0.6.1
Maintenance checked

Protocol and capabilities

Server
arcadia-finance 0.6.1
MCP protocol negotiated in check
2025-11-25
Tools
38 advertised
Resources
4 advertised
Resource templates
0 advertised
Prompts
4 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "prompts": {
    "listChanged": true
  },
  "resources": {
    "listChanged": true
  }
}

Tools

38 advertised

read_account_info
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Get full overview of an Arcadia account: health factor, collateral value, debt, deposited assets, liquidation price, and automation status. Health factor = 1 - (used_margin / liquidation_value): 1 = no debt (safest), >0 = healthy, 0 = liquidation threshold, <0 = past liquidation. Higher is safer. The `automation` object reports which asset managers are enabled (rebalancer, compounder, yield_claimer, cow_swapper, merkl_operator, gas_relayer), each as the position's dex_protocol when protocol-specific or true when account-level, plus `inferred_intents` (the automations those managers add up to), `merkl` claim state, and `deprecated_managers` for any superseded deployment still set on the account. Superseded managers should be cleared: write_account_automations disables them as part of a save. For the full decoded per-manager config use read_asset_manager_current. LP positions in assets[] include a dex_protocol field (slipstream, slipstream_v2, slipstream_v3, metadexcl_v1, staked_slipstream, staked_slipstream_v2, staked_slipstream_v3, staked_metadexcl_v1, uniV3, uniV4). metadexcl_v1 is Aero CL, live on Base, Optimism and Robinhood for spot and margin accounts. Slipstream V2 is Base-only. V3 is available on Base and Optimism. Unichain supports Slipstream V1, uniV3 and uniV4. To configure automations, prefer passing the position's id as position_id to write_account_automations, which resolves the protocol and tokens for you; the dex_protocol value is also accepted directly as its `protocol` param. Numeric fields without a _usd suffix are in the account's numeraire token raw units (divide by 10^decimals: 6 for USDC, 18 for WETH, 8 for cbBTC). Fields ending in _usd are in USD with 18 decimals (divide by 1e18). health_factor is unitless. Asset amounts are raw token units. To list all accounts for a wallet, use read_wallet_accounts.

read_account_info input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "account_address"
  ],
  "properties": {
    "chain_id": {
      "type": "number",
      "default": 8453,
      "description": "Chain ID: 8453 (Base), 130 (Unichain), 10 (Optimism), or 4663 (Robinhood)"
    },
    "account_address": {
      "type": "string",
      "description": "Arcadia account address"
    }
  }
}
read_account_info output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "account_version",
    "overview",
    "liquidation_price"
  ],
  "properties": {
    "overview": {
      "anyOf": [
        {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {}
        },
        {
          "type": "null"
        }
      ]
    },
    "automation": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "context_notes": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "account_version": {
      "type": [
        "number",
        "null"
      ]
    },
    "liquidation_price": {
      "anyOf": [
        {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {}
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "additionalProperties": {}
}
read_account_info annotations
{
  "title": "Get Account Info",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
read_account_history
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Get an Arcadia account's historical net value over time. Returns a time series of snapshots, oldest first, each `{ timestamp, net_value }` — `timestamp` is unix seconds and `net_value` is USD (human-readable, not raw units). Useful for charting account performance over a period. An empty `history` means the account has no snapshots in the window, not that the read failed.

read_account_history input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "account_address"
  ],
  "properties": {
    "days": {
      "type": "number",
      "default": 14,
      "description": "Number of days of history (default 14)"
    },
    "chain_id": {
      "type": "number",
      "default": 8453,
      "description": "Chain ID: 8453 (Base), 130 (Unichain), 10 (Optimism), or 4663 (Robinhood)"
    },
    "account_address": {
      "type": "string",
      "description": "Arcadia account address"
    }
  }
}
read_account_history output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "history"
  ],
  "properties": {
    "history": {
      "type": "array",
      "items": {
        "type": "object",
        "propertyNames": {
          "type": "string"
        },
        "additionalProperties": {}
      }
    }
  },
  "additionalProperties": false
}
read_account_history annotations
{
  "title": "Get Account History",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
read_account_pnl
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Get PnL (cost basis) and yield earned for an Arcadia account. Returns lifetime totals: cost basis vs current value (negative cost_basis = net profit withdrawn), net transfers per token, total yield earned in USD and per token. cost_basis, current_value, cost_diff are in USD (human-readable). Per-token fields (net_transfers, summed_yields_earned) are in raw token units.

read_account_pnl input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "account_address"
  ],
  "properties": {
    "chain_id": {
      "type": "number",
      "default": 8453,
      "description": "Chain ID: 8453 (Base), 130 (Unichain), 10 (Optimism), or 4663 (Robinhood)"
    },
    "account_address": {
      "type": "string",
      "description": "Arcadia account address"
    }
  }
}
read_account_pnl output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "pnl_cost_basis",
    "yield_earned"
  ],
  "properties": {
    "yield_earned": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "pnl_cost_basis": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    }
  },
  "additionalProperties": false
}
read_account_pnl annotations
{
  "title": "Get Account PnL",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
read_pool_list
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

List all Arcadia lending pools: TVL, utilization, available liquidity. Key fields: interest_rate = current borrow cost, lending_apy = lender yield. All rates are decimal fractions (1.0 = 100%, 0.06 = 6%). For APY history on a specific pool, use read_pool_info.

read_pool_list input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "chain_id": {
      "type": "number",
      "default": 8453,
      "description": "Chain ID: 8453 (Base), 130 (Unichain), 10 (Optimism), or 4663 (Robinhood)"
    }
  }
}
read_pool_list output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "pools"
  ],
  "properties": {
    "pools": {
      "type": "array",
      "items": {
        "type": "object",
        "propertyNames": {
          "type": "string"
        },
        "additionalProperties": {}
      }
    },
    "context_notes": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "additionalProperties": false
}
read_pool_list annotations
{
  "title": "List Lending Pools",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
read_pool_info
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Get detailed info for a single lending pool including APY history over time. Useful for analyzing rate trends and comparing pools. Use read_pool_list to discover pool addresses.

read_pool_info input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "pool_address"
  ],
  "properties": {
    "days": {
      "type": "number",
      "default": 14,
      "description": "Number of days of APY history"
    },
    "chain_id": {
      "type": "number",
      "default": 8453,
      "description": "Chain ID: 8453 (Base), 130 (Unichain), 10 (Optimism), or 4663 (Robinhood)"
    },
    "pool_address": {
      "type": "string",
      "description": "Pool address"
    }
  }
}
read_pool_info output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "pool",
    "apy_history"
  ],
  "properties": {
    "pool": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "apy_history": {
      "type": "array",
      "items": {
        "type": "object",
        "propertyNames": {
          "type": "string"
        },
        "additionalProperties": {}
      }
    }
  },
  "additionalProperties": false
}
read_pool_info annotations
{
  "title": "Get Pool Info",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
read_asset_list
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

List supported collateral assets on Arcadia. Returns compact list (address, symbol, decimals, type). Use search to filter by symbol substring. For USD prices, use read_asset_prices.

read_asset_list input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "search": {
      "type": "string",
      "description": "Filter assets by symbol (case-insensitive substring match)"
    },
    "chain_id": {
      "type": "number",
      "default": 8453,
      "description": "Chain ID: 8453 (Base), 130 (Unichain), 10 (Optimism), or 4663 (Robinhood)"
    }
  }
}
read_asset_list output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "total",
    "assets"
  ],
  "properties": {
    "total": {
      "type": "number"
    },
    "assets": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "address",
          "symbol",
          "decimals",
          "type"
        ],
        "properties": {
          "type": {},
          "symbol": {},
          "address": {},
          "decimals": {}
        },
        "additionalProperties": false
      }
    }
  },
  "additionalProperties": false
}
read_asset_list annotations
{
  "title": "List Supported Assets",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
read_asset_prices
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Get USD prices for one or more asset addresses. Pass a single address or comma-separated addresses. Returns a price map keyed by address.

read_asset_prices input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "asset_addresses"
  ],
  "properties": {
    "chain_id": {
      "type": "number",
      "default": 8453,
      "description": "Chain ID: 8453 (Base), 130 (Unichain), 10 (Optimism), or 4663 (Robinhood)"
    },
    "asset_addresses": {
      "type": "string",
      "description": "Single address or comma-separated addresses for price lookup"
    }
  }
}
read_asset_prices output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "prices"
  ],
  "properties": {
    "prices": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {
        "type": "number"
      }
    }
  },
  "additionalProperties": false
}
read_asset_prices annotations
{
  "title": "Get Asset Prices",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
read_strategy_list
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Get Arcadia LP strategies. Use featured_only=true for curated top strategies (recommended first call). Returns a paginated list with 7d avg APY for each strategy's default range. Increase limit or use offset for pagination. All APY values are decimal fractions (1.0 = 100%, 0.05 = 5%). For full detail on a specific strategy (APY per range width), use read_strategy_info.

read_strategy_list input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "limit": {
      "type": "number",
      "default": 25,
      "description": "Max strategies to return (default 25)"
    },
    "offset": {
      "type": "number",
      "default": 0,
      "description": "Skip first N strategies for pagination"
    },
    "chain_id": {
      "type": "number",
      "default": 8453,
      "description": "Chain ID: 8453 (Base), 130 (Unichain), 10 (Optimism), or 4663 (Robinhood)"
    },
    "featured_only": {
      "type": "boolean",
      "default": false,
      "description": "Return only featured/curated strategies (recommended)"
    }
  }
}
read_strategy_list output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "total",
    "offset",
    "limit",
    "strategies"
  ],
  "properties": {
    "limit": {
      "type": "number"
    },
    "total": {
      "type": "number"
    },
    "offset": {
      "type": "number"
    },
    "strategies": {
      "type": "array",
      "items": {
        "type": "object",
        "propertyNames": {
          "type": "string"
        },
        "additionalProperties": {}
      }
    },
    "context_notes": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "additionalProperties": false
}
read_strategy_list annotations
{
  "title": "Get Strategies",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
read_strategy_info
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Get full detail for a specific LP strategy by ID: includes APY per range width (narrower range = higher APY but more rebalancing cost/risk), pool info, and configuration. Use read_strategy_list to discover strategy IDs. All APY values are decimal fractions (1.0 = 100%, 0.05 = 5%).

read_strategy_info input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "strategy_id"
  ],
  "properties": {
    "chain_id": {
      "type": "number",
      "default": 8453,
      "description": "Chain ID: 8453 (Base), 130 (Unichain), 10 (Optimism), or 4663 (Robinhood)"
    },
    "strategy_id": {
      "type": "number",
      "description": "Strategy ID"
    }
  }
}
read_strategy_info output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {},
  "additionalProperties": {}
}
read_strategy_info annotations
{
  "title": "Get Strategy Info",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
read_strategy_recommendation
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Get a rebalancing recommendation for an Arcadia account: suggests asset changes to optimize yield. Uses 1d APY (not 7d like read_strategy_list), so recommended strategies may differ from the list ranking. APY values are decimal fractions (0.05 = 5%). weekly_earning_difference is in USD.

read_strategy_recommendation input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "account_address"
  ],
  "properties": {
    "chain_id": {
      "type": "number",
      "default": 8453,
      "description": "Chain ID: 8453 (Base), 130 (Unichain), 10 (Optimism), or 4663 (Robinhood)"
    },
    "account_address": {
      "type": "string",
      "description": "Arcadia account address"
    }
  }
}
read_strategy_recommendation output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {},
  "additionalProperties": {}
}
read_strategy_recommendation annotations
{
  "title": "Get Recommendation",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
read_point_leaderboard
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Get the Arcadia points leaderboard (paginated). For a specific wallet's points balance, use read_wallet_points.

read_point_leaderboard input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "limit": {
      "type": "number",
      "default": 25,
      "description": "Max leaderboard entries to return (default 25)"
    },
    "offset": {
      "type": "number",
      "default": 0,
      "description": "Skip first N leaderboard entries for pagination"
    }
  }
}
read_point_leaderboard output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "total",
    "offset",
    "limit",
    "leaderboard"
  ],
  "properties": {
    "limit": {
      "type": "number"
    },
    "total": {
      "type": "number"
    },
    "offset": {
      "type": "number"
    },
    "leaderboard": {
      "type": "array",
      "items": {
        "type": "object",
        "propertyNames": {
          "type": "string"
        },
        "additionalProperties": {}
      }
    }
  },
  "additionalProperties": false
}
read_point_leaderboard annotations
{
  "title": "Get Points Leaderboard",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
read_guides
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Get Arcadia workflow guides and reference documentation. Call this before multi-step workflows (opening LP positions, enabling automation, closing positions) or when you need contract addresses, asset manager addresses, or strategy parameters. Topics: overview (addresses + tool catalog), automation (intent-based automation setup), strategies (step-by-step templates), selection (how to evaluate and parameterize strategies).

read_guides input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "topic": {
      "enum": [
        "overview",
        "automation",
        "strategies",
        "selection"
      ],
      "type": "string",
      "description": "overview = addresses + tool catalog, automation = intent-based automation setup, strategies = step-by-step LP templates, selection = pool evaluation + leverage sizing"
    }
  }
}
read_guides output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "topic",
    "content"
  ],
  "properties": {
    "topic": {
      "type": "string"
    },
    "content": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
read_guides annotations
{
  "title": "Get Guide",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
read_wallet_balances
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Get native ETH and ERC20 token balances for a wallet address. Reads directly from chain via RPC multicall. Use before write_account_add_liquidity or write_account_deposit to verify the wallet has sufficient tokens. Returns both raw balance (smallest unit/wei) and formatted (human-readable) per token.

read_wallet_balances input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "wallet_address",
    "token_addresses"
  ],
  "properties": {
    "chain_id": {
      "type": "number",
      "default": 8453,
      "description": "Chain ID: 8453 (Base), 130 (Unichain), 10 (Optimism), or 4663 (Robinhood)"
    },
    "wallet_address": {
      "type": "string",
      "description": "Wallet address to check balances for"
    },
    "token_addresses": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "ERC20 token contract addresses to check"
    }
  }
}
read_wallet_balances output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "native",
    "tokens"
  ],
  "properties": {
    "native": {
      "type": "object",
      "required": [
        "symbol",
        "balance",
        "formatted"
      ],
      "properties": {
        "symbol": {
          "type": "string"
        },
        "balance": {
          "type": "string"
        },
        "formatted": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "tokens": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "address",
          "symbol",
          "decimals",
          "balance",
          "formatted"
        ],
        "properties": {
          "symbol": {
            "type": "string"
          },
          "address": {
            "type": "string"
          },
          "balance": {
            "type": "string"
          },
          "decimals": {
            "type": "number"
          },
          "formatted": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    }
  },
  "additionalProperties": false
}
read_wallet_balances annotations
{
  "title": "Get Wallet Balances",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
read_wallet_allowances
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Check ERC20 token allowances for a spender address. Use before write_wallet_approve to avoid redundant approvals: skip approving if the current allowance is already sufficient.

read_wallet_allowances input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "owner_address",
    "spender_address",
    "token_addresses"
  ],
  "properties": {
    "chain_id": {
      "type": "number",
      "default": 8453,
      "description": "Chain ID: 8453 (Base), 130 (Unichain), 10 (Optimism), or 4663 (Robinhood)"
    },
    "owner_address": {
      "type": "string",
      "description": "Token owner address (the wallet granting approval)"
    },
    "spender_address": {
      "type": "string",
      "description": "Spender address to check allowance for (e.g. Arcadia account address)"
    },
    "token_addresses": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "ERC20 token contract addresses to check"
    }
  }
}
read_wallet_allowances output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "tokens"
  ],
  "properties": {
    "tokens": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "address",
          "symbol",
          "decimals",
          "allowance",
          "formatted",
          "is_max_approval"
        ],
        "properties": {
          "symbol": {
            "type": "string"
          },
          "address": {
            "type": "string"
          },
          "decimals": {
            "type": "number"
          },
          "allowance": {
            "type": "string"
          },
          "formatted": {
            "type": "string"
          },
          "is_max_approval": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      }
    }
  },
  "additionalProperties": false
}
read_wallet_allowances annotations
{
  "title": "Get Token Allowances",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
read_wallet_accounts
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

List all Arcadia accounts owned by a wallet address. Returns a summary of each account (address, name). Call read_account_info with a specific account_address for full details like health factor, collateral, and debt.

read_wallet_accounts input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "wallet_address"
  ],
  "properties": {
    "chain_id": {
      "type": "number",
      "default": 8453,
      "description": "Chain ID: 8453 (Base), 130 (Unichain), 10 (Optimism), or 4663 (Robinhood)"
    },
    "wallet_address": {
      "type": "string",
      "description": "Wallet address to list accounts for"
    }
  }
}
read_wallet_accounts output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "accounts"
  ],
  "properties": {
    "accounts": {
      "type": "array",
      "items": {
        "type": "object",
        "propertyNames": {
          "type": "string"
        },
        "additionalProperties": {}
      }
    }
  },
  "additionalProperties": false
}
read_wallet_accounts annotations
{
  "title": "List Wallet Accounts",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
read_wallet_points
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Get Arcadia points balance for a specific wallet address.

read_wallet_points input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "wallet_address"
  ],
  "properties": {
    "wallet_address": {
      "type": "string",
      "description": "Wallet address to get points for"
    }
  }
}
read_wallet_points output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {},
  "additionalProperties": {}
}
read_wallet_points annotations
{
  "title": "Get Wallet Points",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
read_asset_manager_intents
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

List the automation intents Arcadia supports, with the parameters each one accepts. Pass account_address to also get per-account availability: which intents can be enabled right now and, for any that cannot, the compatibility rule blocking it. Pass position_id as well to scope availability to one LP position. Without account_address this returns the catalog only.

read_asset_manager_intents input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "chain_id": {
      "type": "number",
      "default": 8453,
      "description": "Chain id: 8453 Base, 130 Unichain, 10 Optimism"
    },
    "position_id": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "LP position (NFT) id to scope availability to. Requires account_address."
    },
    "account_address": {
      "type": "string",
      "description": "Arcadia account address. Include it to get live per-account availability."
    }
  }
}
read_asset_manager_intents output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "automations",
    "shared_params",
    "usage"
  ],
  "properties": {
    "usage": {
      "type": "string"
    },
    "automations": {
      "type": "array",
      "items": {
        "type": "object",
        "propertyNames": {
          "type": "string"
        },
        "additionalProperties": {}
      }
    },
    "shared_params": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "availability_error": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
read_asset_manager_intents annotations
{
  "title": "List Available Automations",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
read_asset_manager_current
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Read which asset managers are currently enabled on an account, with their decoded on-chain configuration. Returns the active managers (address, protocol, initiator, decoded strategy metadata, slippage and value-loss caps, fee recipient), the intents they map to, and Merkl claim state including whether reward tokens still need registering. Managers from superseded deployments are listed separately under `deprecated`: pass their addresses to write_account_automations_delta to clear them, or run write_account_automations which disables them as part of the save. read_ok is false when chain state could not be read, in which case the result is unreliable rather than empty.

read_asset_manager_current input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "account_address"
  ],
  "properties": {
    "chain_id": {
      "type": "number",
      "default": 8453,
      "description": "Chain id: 8453 Base, 130 Unichain, 10 Optimism"
    },
    "account_address": {
      "type": "string",
      "description": "Arcadia account address"
    }
  }
}
read_asset_manager_current output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "account",
    "chain_id",
    "read_ok",
    "inferred_intents",
    "enabled",
    "deprecated",
    "warnings"
  ],
  "properties": {
    "merkl": {
      "anyOf": [
        {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {}
        },
        {
          "type": "null"
        }
      ]
    },
    "account": {
      "type": "string"
    },
    "enabled": {
      "type": "array",
      "items": {
        "type": "object",
        "propertyNames": {
          "type": "string"
        },
        "additionalProperties": {}
      }
    },
    "read_ok": {
      "type": "boolean"
    },
    "chain_id": {
      "type": "number"
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "deprecated": {
      "type": "array",
      "items": {
        "type": "object",
        "propertyNames": {
          "type": "string"
        },
        "additionalProperties": {}
      }
    },
    "inferred_intents": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "additionalProperties": false
}
read_asset_manager_current annotations
{
  "title": "Read Current Account Automations",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
read_account_aero_upgrade
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Which Arcadia accounts have something to upgrade to Aero (MetadexCL V1): Slipstream V1 to V3 positions (Aerodrome on Base, Velodrome on Optimism, staked or not) and old AERO. Pass wallet_address for every account of a wallet, or account_address for one. Per account: status (ready | choices_required | waiting | not_open | nothing_to_upgrade), positions (every Slipstream position on it), movable (ready or needing a pool choice), waiting, blocked, old_aero (raw, 18 decimals). Accounts without a Slipstream position or old AERO are left out, including accounts whose positions already moved but whose automations still run on the old Slipstream managers: when read_asset_manager_current shows Slipstream managers on an account that only holds metadexcl_v1 positions, call write_account_aero_upgrade for it to get managers_to_reconnect. failed_accounts lists the accounts whose check failed, with the error: an empty accounts list means nothing to do only when failed_accounts is empty too. Otherwise tell the user those accounts could not be checked and retry later. opens_at is when the AERO token upgrade opens on Base. No calldata, prices or simulation: this is the cheap check. For the plan and the transaction call write_account_aero_upgrade. Chains: Base (8453), Optimism (10); Robinhood (4663) has no Slipstream positions and answers an empty list.

read_account_aero_upgrade input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "chain_id": {
      "type": "number",
      "default": 8453,
      "description": "Chain ID: 8453 (Base), 10 (Optimism) or 4663 (Robinhood, nothing to upgrade)"
    },
    "wallet_address": {
      "type": "string",
      "description": "Wallet whose accounts to check. Pass this or account_address, not both."
    },
    "account_address": {
      "type": "string",
      "description": "One Arcadia account to check"
    }
  }
}
read_account_aero_upgrade output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "chain_id",
    "owner_address",
    "opens_at",
    "checked_at",
    "accounts",
    "failed_accounts"
  ],
  "properties": {
    "accounts": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "account_address",
          "is_spot",
          "status",
          "positions",
          "old_aero",
          "movable",
          "waiting",
          "blocked"
        ],
        "properties": {
          "status": {
            "enum": [
              "ready",
              "choices_required",
              "waiting",
              "not_open",
              "nothing_to_upgrade"
            ],
            "type": "string"
          },
          "blocked": {
            "type": "number"
          },
          "is_spot": {
            "type": "boolean"
          },
          "movable": {
            "type": "number"
          },
          "waiting": {
            "type": "number"
          },
          "old_aero": {
            "type": "string"
          },
          "positions": {
            "type": "number"
          },
          "account_address": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "chain_id": {
      "type": "number"
    },
    "opens_at": {
      "type": [
        "number",
        "null"
      ]
    },
    "checked_at": {
      "type": "number"
    },
    "owner_address": {
      "type": [
        "string",
        "null"
      ]
    },
    "failed_accounts": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "account_address",
          "error"
        ],
        "properties": {
          "error": {
            "type": "string"
          },
          "account_address": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    }
  },
  "additionalProperties": false
}
read_account_aero_upgrade annotations
{
  "title": "Check Aero Upgrade Candidates",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
write_account_create
Advertised by the server during the last successful anonymous check.

Build an unsigned transaction to create a new Arcadia account via the Factory contract. account_version: 3 with creditor → V3 margin account (can borrow/leverage). account_version: 0 or 4 → V4 spot account (no borrowing, creditor is ignored, any ERC20 allowed). Returns the predicted account address (deterministic via CREATE2).

write_account_create input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "salt",
    "wallet_address"
  ],
  "properties": {
    "salt": {
      "type": "number",
      "description": "Unique salt (uint32) for deterministic account address"
    },
    "chain_id": {
      "type": "number",
      "default": 8453,
      "description": "Chain ID: 8453 (Base), 130 (Unichain), 10 (Optimism), or 4663 (Robinhood)"
    },
    "creditor": {
      "type": "string",
      "description": "Lending pool address for V3 margin account. Ignored for V4 spot accounts (version 0 or 4)."
    },
    "wallet_address": {
      "type": "string",
      "description": "Wallet address that will send the transaction (tx.origin, needed for address prediction)"
    },
    "account_version": {
      "type": "number",
      "default": 0,
      "description": "Account version: 0 = latest (V4 spot), 3 = margin (can borrow). 1/2 = legacy."
    }
  }
}
write_account_create output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "description",
    "transaction"
  ],
  "properties": {
    "description": {
      "type": "string"
    },
    "transaction": {
      "type": "object",
      "required": [
        "to",
        "data",
        "value",
        "chainId"
      ],
      "properties": {
        "to": {
          "type": "string"
        },
        "data": {
          "type": "string"
        },
        "value": {
          "type": "string"
        },
        "chainId": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "predicted_account_address": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
write_account_create annotations
{
  "title": "Build Create Account Transaction",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
write_account_deposit
Advertised by the server during the last successful anonymous check.

Build an unsigned transaction to deposit assets into an Arcadia account as collateral. Supports ERC20 tokens and ERC721 NFTs (LP positions). NOT needed before write_account_add_liquidity: that tool deposits from wallet atomically. Ensure the account is approved first (call read_wallet_allowances to check, then write_wallet_approve if needed). Account version is auto-detected on-chain (override with account_version if needed).

write_account_deposit input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "account_address",
    "asset_addresses",
    "asset_amounts"
  ],
  "properties": {
    "chain_id": {
      "type": "number",
      "default": 8453,
      "description": "Chain ID: 8453 (Base), 130 (Unichain), 10 (Optimism), or 4663 (Robinhood)"
    },
    "asset_ids": {
      "type": "array",
      "items": {
        "type": "number"
      },
      "description": "Token IDs: 0 for ERC20, NFT token ID for ERC721"
    },
    "asset_types": {
      "type": "array",
      "items": {
        "type": "number"
      },
      "description": "V4 only. Asset types per asset: 1=ERC20, 2=ERC721, 3=ERC1155. If omitted, inferred from asset_ids (non-zero → ERC721)."
    },
    "asset_amounts": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Amounts in raw units/wei, one per asset"
    },
    "account_address": {
      "type": "string",
      "description": "Arcadia account address"
    },
    "account_version": {
      "type": "number",
      "description": "Override account version (3 or 4). Auto-detected on-chain if omitted."
    },
    "asset_addresses": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Token contract addresses to deposit"
    }
  }
}
write_account_deposit output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "description",
    "transaction"
  ],
  "properties": {
    "description": {
      "type": "string"
    },
    "transaction": {
      "type": "object",
      "required": [
        "to",
        "data",
        "value",
        "chainId"
      ],
      "properties": {
        "to": {
          "type": "string"
        },
        "data": {
          "type": "string"
        },
        "value": {
          "type": "string"
        },
        "chainId": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "predicted_account_address": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
write_account_deposit annotations
{
  "title": "Build Deposit Transaction",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
write_account_withdraw
Advertised by the server during the last successful anonymous check.

Build an unsigned transaction to withdraw assets from an Arcadia account to the owner's wallet. Only the account owner can withdraw. Will revert if the account has debt and withdrawal would make it undercollateralized. Does not support max_uint256: pass exact amounts from read_account_info. Account version is auto-detected on-chain (override with account_version if needed).

write_account_withdraw input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "account_address",
    "asset_addresses",
    "asset_amounts"
  ],
  "properties": {
    "chain_id": {
      "type": "number",
      "default": 8453,
      "description": "Chain ID: 8453 (Base), 130 (Unichain), 10 (Optimism), or 4663 (Robinhood)"
    },
    "asset_ids": {
      "type": "array",
      "items": {
        "type": "number"
      },
      "description": "Token IDs: 0 for ERC20, NFT token ID for ERC721"
    },
    "asset_types": {
      "type": "array",
      "items": {
        "type": "number"
      },
      "description": "V4 only. Asset types per asset: 1=ERC20, 2=ERC721, 3=ERC1155. If omitted, inferred from asset_ids (non-zero → ERC721)."
    },
    "asset_amounts": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Amounts in raw units/wei, one per asset"
    },
    "account_address": {
      "type": "string",
      "description": "Arcadia account address"
    },
    "account_version": {
      "type": "number",
      "description": "Override account version (3 or 4). Auto-detected on-chain if omitted."
    },
    "asset_addresses": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Token contract addresses to withdraw"
    }
  }
}
write_account_withdraw output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "description",
    "transaction"
  ],
  "properties": {
    "description": {
      "type": "string"
    },
    "transaction": {
      "type": "object",
      "required": [
        "to",
        "data",
        "value",
        "chainId"
      ],
      "properties": {
        "to": {
          "type": "string"
        },
        "data": {
          "type": "string"
        },
        "value": {
          "type": "string"
        },
        "chainId": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "predicted_account_address": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
write_account_withdraw annotations
{
  "title": "Build Withdraw Transaction",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
write_account_borrow
Advertised by the server during the last successful anonymous check.

Build an unsigned transaction to borrow from an Arcadia lending pool against account collateral. NOT needed for leveraged LP: write_account_add_liquidity handles borrowing internally when leverage > 0. Only works with margin accounts (created with a creditor/lending pool). Spot accounts (no creditor) cannot borrow: the tool will validate this and reject. Before borrowing, verify the account has positive free margin via read_account_info: collateral_value must exceed used_margin.

write_account_borrow input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "pool_address",
    "account_address",
    "amount",
    "to"
  ],
  "properties": {
    "to": {
      "type": "string",
      "description": "Address to receive borrowed tokens"
    },
    "amount": {
      "type": "string",
      "description": "Amount in raw units"
    },
    "chain_id": {
      "type": "number",
      "default": 8453,
      "description": "Chain ID: 8453 (Base), 130 (Unichain), 10 (Optimism), or 4663 (Robinhood)"
    },
    "pool_address": {
      "type": "string",
      "description": "Lending pool: LP_WETH=0x803ea69c7e87D1d6C86adeB40CB636cC0E6B98E2, LP_USDC=0x3ec4a293Fb906DD2Cd440c20dECB250DeF141dF1, LP_CBBTC=0xa37E9b4369dc20940009030BfbC2088F09645e3B"
    },
    "account_address": {
      "type": "string",
      "description": "Arcadia account address used as collateral"
    }
  }
}
write_account_borrow output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "description",
    "transaction"
  ],
  "properties": {
    "description": {
      "type": "string"
    },
    "transaction": {
      "type": "object",
      "required": [
        "to",
        "data",
        "value",
        "chainId"
      ],
      "properties": {
        "to": {
          "type": "string"
        },
        "data": {
          "type": "string"
        },
        "value": {
          "type": "string"
        },
        "chainId": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "predicted_account_address": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
write_account_borrow annotations
{
  "title": "Build Borrow Transaction",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
write_account_repay
Advertised by the server during the last successful anonymous check.

Repay debt to an Arcadia lending pool using tokens from the wallet (requires ERC20 allowance). To repay using account collateral instead (no wallet tokens needed), use write_account_deleverage. Check allowance first (read_wallet_allowances), then approve the pool if needed (write_wallet_approve). Check outstanding debt with read_account_info.

write_account_repay input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "pool_address",
    "account_address",
    "amount"
  ],
  "properties": {
    "amount": {
      "type": "string",
      "description": "Amount in raw units, or 'max_uint256' to repay all debt in full"
    },
    "chain_id": {
      "type": "number",
      "default": 8453,
      "description": "Chain ID: 8453 (Base), 130 (Unichain), 10 (Optimism), or 4663 (Robinhood)"
    },
    "pool_address": {
      "type": "string",
      "description": "Lending pool address. Base: LP_WETH=0x803ea69c7e87D1d6C86adeB40CB636cC0E6B98E2, LP_USDC=0x3ec4a293Fb906DD2Cd440c20dECB250DeF141dF1, LP_CBBTC=0xa37E9b4369dc20940009030BfbC2088F09645e3B"
    },
    "account_address": {
      "type": "string",
      "description": "Arcadia account address with debt"
    }
  }
}
write_account_repay output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "description",
    "transaction"
  ],
  "properties": {
    "description": {
      "type": "string"
    },
    "transaction": {
      "type": "object",
      "required": [
        "to",
        "data",
        "value",
        "chainId"
      ],
      "properties": {
        "to": {
          "type": "string"
        },
        "data": {
          "type": "string"
        },
        "value": {
          "type": "string"
        },
        "chainId": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "predicted_account_address": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
write_account_repay annotations
{
  "title": "Build Repay Transaction",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
write_account_add_liquidity
Advertised by the server during the last successful anonymous check.
Open-world

Multi-step flash-action: atomically combines [deposit from wallet] + [use account collateral] + [swap to optimal ratio] + [mint LP] + [borrow if leveraged] in ONE transaction. Do NOT call write_account_deposit separately. Capital sources: wallet tokens (deposits array), existing account collateral (use_account_assets=true), or both. Check allowances first (read_wallet_allowances), then approve if needed (write_wallet_approve). Supports depositing multiple tokens and minting multiple LP positions in one tx. Works with both margin accounts (can leverage) and spot accounts (no leverage). For workflows, call read_guides('strategies'). The returned calldata is time-sensitive: sign and broadcast within 30 seconds. If the transaction reverts due to price movement, rebuild and sign again immediately (retry at least once before giving up), passing only the accept_price_checks the user already confirmed. Response includes tenderly_sim_url and tenderly_sim_status for pre-broadcast validation. expected_value_change is in raw units of the account's numeraire token (6 decimals for USDC, 18 for WETH). Negative = cost to open, positive = value gained. Compare before.total_account_value and after.total_account_value for the full picture. If a pool's price is off market or one of its tokens has no price, the tool returns the price warnings, an accept_price_checks list and NO transaction. Show the warnings to the user and call again with that accept_price_checks list only after the user explicitly confirms they accept them. If a later call returns new warnings, even on a rebuild, show them and get a new confirmation before passing their list. The acknowledgement never bypasses a backend refusal.

write_account_add_liquidity input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "account_address",
    "wallet_address",
    "positions"
  ],
  "properties": {
    "chain_id": {
      "type": "number",
      "default": 8453,
      "description": "Chain ID: 8453 (Base), 130 (Unichain), 10 (Optimism), or 4663 (Robinhood)"
    },
    "deposits": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "asset",
          "amount"
        ],
        "properties": {
          "asset": {
            "type": "string",
            "description": "Token address to deposit from wallet"
          },
          "amount": {
            "type": "string",
            "description": "Amount in raw units"
          },
          "decimals": {
            "type": "number",
            "description": "Token decimals (e.g. 6 for USDC, 18 for WETH). Default 18."
          }
        }
      },
      "description": "Wallet tokens to deposit. Approve each token first (write_wallet_approve). Omit to use only account collateral."
    },
    "leverage": {
      "type": "number",
      "default": 0,
      "description": "0 = no borrow, 2 = 2x leverage. Margin accounts only."
    },
    "slippage": {
      "type": "number",
      "default": 100,
      "description": "Basis points, 100 = 1%"
    },
    "positions": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "strategy_id"
        ],
        "properties": {
          "tick_lower": {
            "type": "number",
            "description": "Lower tick for concentrated range. Omit for full range."
          },
          "tick_upper": {
            "type": "number",
            "description": "Upper tick for concentrated range. Omit for full range."
          },
          "strategy_id": {
            "type": "number",
            "description": "From read_strategy_list (or read_strategy_info for full range detail)"
          }
        }
      },
      "description": "LP positions to mint. For a single position, pass one entry."
    },
    "wallet_address": {
      "type": "string",
      "description": "Wallet address of the account owner"
    },
    "account_address": {
      "type": "string",
      "description": "Arcadia account address"
    },
    "use_account_assets": {
      "type": "boolean",
      "default": false,
      "description": "If true, use ALL existing account collateral for LP minting. Fetched automatically."
    },
    "accept_price_checks": {
      "type": "array",
      "items": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "pool",
              "status",
              "deviation_bps",
              "unpriced_token"
            ],
            "properties": {
              "pool": {
                "type": "string"
              },
              "status": {
                "type": "string",
                "const": "off_market"
              },
              "deviation_bps": {
                "type": "number"
              },
              "unpriced_token": {
                "type": "null"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "pool",
              "status",
              "deviation_bps",
              "unpriced_token"
            ],
            "properties": {
              "pool": {
                "type": "string"
              },
              "status": {
                "type": "string",
                "const": "unpriced"
              },
              "deviation_bps": {
                "type": "null"
              },
              "unpriced_token": {
                "type": "string"
              }
            }
          }
        ]
      },
      "description": "The accept_price_checks list returned with the price warnings of a previous call, passed unchanged and only after the user has explicitly confirmed those warnings. Never set it on the first call."
    }
  }
}
write_account_add_liquidity output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "transaction"
  ],
  "properties": {
    "after": {
      "type": "object",
      "required": [
        "total_account_value",
        "used_margin"
      ],
      "properties": {
        "used_margin": {
          "type": "string"
        },
        "total_account_value": {
          "type": "string"
        }
      },
      "additionalProperties": {}
    },
    "before": {
      "type": "object",
      "required": [
        "total_account_value",
        "used_margin"
      ],
      "properties": {
        "used_margin": {
          "type": "string"
        },
        "total_account_value": {
          "type": "string"
        }
      },
      "additionalProperties": {}
    },
    "description": {
      "type": "string"
    },
    "transaction": {
      "type": "object",
      "required": [
        "to",
        "data",
        "value",
        "chainId"
      ],
      "properties": {
        "to": {
          "type": "string"
        },
        "data": {
          "type": "string"
        },
        "value": {
          "type": "string"
        },
        "chainId": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "price_checks": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "pool",
          "status"
        ],
        "properties": {
          "pool": {
            "type": "string"
          },
          "status": {
            "type": "string"
          }
        },
        "additionalProperties": {}
      }
    },
    "tenderly_sim_url": {
      "type": "string"
    },
    "tenderly_sim_status": {
      "enum": [
        "success",
        "failure",
        "unavailable"
      ],
      "type": "string"
    },
    "expected_value_change": {
      "type": "string"
    },
    "expected_value_change_unavailable": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
write_account_add_liquidity annotations
{
  "title": "Build Add Liquidity Transaction",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
write_account_remove_liquidity
Advertised by the server during the last successful anonymous check.
Open-world

Flash-action: PARTIALLY decreases liquidity from an LP position. The position remains open with reduced liquidity; underlying tokens stay in the account. For FULL position exit (burn LP + swap + repay + withdraw), use write_account_close instead: it batches everything into one atomic transaction. The returned calldata is time-sensitive — sign and broadcast within 30 seconds. If the transaction reverts due to price movement, rebuild and sign again immediately (retry at least once before giving up). Response includes tenderly_sim_url and tenderly_sim_status for pre-broadcast validation.

write_account_remove_liquidity input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "account_address",
    "asset_address",
    "asset_id",
    "adjustment"
  ],
  "properties": {
    "asset_id": {
      "type": "number",
      "description": "NFT token ID"
    },
    "chain_id": {
      "type": "number",
      "default": 8453,
      "description": "Chain ID: 8453 (Base), 130 (Unichain), 10 (Optimism), or 4663 (Robinhood)"
    },
    "adjustment": {
      "type": "string",
      "description": "Liquidity amount to remove (raw uint128 value as string). Must be less than total liquidity: for full removal use write_account_close."
    },
    "asset_address": {
      "type": "string",
      "description": "Position manager contract"
    },
    "account_address": {
      "type": "string",
      "description": "Arcadia account address"
    }
  }
}
write_account_remove_liquidity output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "transaction"
  ],
  "properties": {
    "after": {
      "type": "object",
      "required": [
        "total_account_value",
        "used_margin"
      ],
      "properties": {
        "used_margin": {
          "type": "string"
        },
        "total_account_value": {
          "type": "string"
        }
      },
      "additionalProperties": {}
    },
    "before": {
      "type": "object",
      "required": [
        "total_account_value",
        "used_margin"
      ],
      "properties": {
        "used_margin": {
          "type": "string"
        },
        "total_account_value": {
          "type": "string"
        }
      },
      "additionalProperties": {}
    },
    "description": {
      "type": "string"
    },
    "transaction": {
      "type": "object",
      "required": [
        "to",
        "data",
        "value",
        "chainId"
      ],
      "properties": {
        "to": {
          "type": "string"
        },
        "data": {
          "type": "string"
        },
        "value": {
          "type": "string"
        },
        "chainId": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "price_checks": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "pool",
          "status"
        ],
        "properties": {
          "pool": {
            "type": "string"
          },
          "status": {
            "type": "string"
          }
        },
        "additionalProperties": {}
      }
    },
    "tenderly_sim_url": {
      "type": "string"
    },
    "tenderly_sim_status": {
      "enum": [
        "success",
        "failure",
        "unavailable"
      ],
      "type": "string"
    },
    "expected_value_change": {
      "type": "string"
    },
    "expected_value_change_unavailable": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
write_account_remove_liquidity annotations
{
  "title": "Build Remove Liquidity Transaction",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
write_account_swap
Advertised by the server during the last successful anonymous check.
Open-world

Flash-action: swaps assets within an Arcadia account in one atomic transaction. The backend finds the optimal swap route. NOTE: If you are closing a position (swap + repay + withdraw), prefer write_account_close which batches everything atomically. Only use this tool for standalone swaps within an active position. The returned calldata is time-sensitive: sign and broadcast within 30 seconds. If the transaction reverts due to price movement, rebuild and sign again immediately (retry at least once before giving up). Response includes tenderly_sim_url and tenderly_sim_status for pre-broadcast validation: if tenderly_sim_status is 'false', do NOT broadcast the transaction.

write_account_swap input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "account_address",
    "asset_from",
    "asset_to",
    "amount_in"
  ],
  "properties": {
    "asset_to": {
      "type": "string",
      "description": "Token address to swap to"
    },
    "chain_id": {
      "type": "number",
      "default": 8453,
      "description": "Chain ID: 8453 (Base), 130 (Unichain), 10 (Optimism), or 4663 (Robinhood)"
    },
    "slippage": {
      "type": "number",
      "default": 100,
      "description": "Basis points, 100 = 1%"
    },
    "amount_in": {
      "type": "string",
      "description": "Raw units"
    },
    "asset_from": {
      "type": "string",
      "description": "Token address to swap from"
    },
    "account_address": {
      "type": "string",
      "description": "Arcadia account address"
    }
  }
}
write_account_swap output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "transaction"
  ],
  "properties": {
    "after": {
      "type": "object",
      "required": [
        "total_account_value",
        "used_margin"
      ],
      "properties": {
        "used_margin": {
          "type": "string"
        },
        "total_account_value": {
          "type": "string"
        }
      },
      "additionalProperties": {}
    },
    "before": {
      "type": "object",
      "required": [
        "total_account_value",
        "used_margin"
      ],
      "properties": {
        "used_margin": {
          "type": "string"
        },
        "total_account_value": {
          "type": "string"
        }
      },
      "additionalProperties": {}
    },
    "description": {
      "type": "string"
    },
    "transaction": {
      "type": "object",
      "required": [
        "to",
        "data",
        "value",
        "chainId"
      ],
      "properties": {
        "to": {
          "type": "string"
        },
        "data": {
          "type": "string"
        },
        "value": {
          "type": "string"
        },
        "chainId": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "price_checks": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "pool",
          "status"
        ],
        "properties": {
          "pool": {
            "type": "string"
          },
          "status": {
            "type": "string"
          }
        },
        "additionalProperties": {}
      }
    },
    "tenderly_sim_url": {
      "type": "string"
    },
    "tenderly_sim_status": {
      "enum": [
        "success",
        "failure",
        "unavailable"
      ],
      "type": "string"
    },
    "expected_value_change": {
      "type": "string"
    },
    "expected_value_change_unavailable": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
write_account_swap annotations
{
  "title": "Build Swap Transaction",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
write_account_deleverage
Advertised by the server during the last successful anonymous check.
Open-world

Multi-step flash-action: sells account collateral to the debt token and repays in one atomic transaction: no wallet tokens needed. To repay from wallet tokens instead, use write_account_repay. NOTE: If you are closing a position (remove LP + swap + repay + withdraw), prefer write_account_close which batches everything atomically. Only use this tool for standalone repayment while keeping the position active. The returned calldata is time-sensitive: sign and broadcast within 30 seconds. If the transaction reverts due to price movement, rebuild and sign again immediately (retry at least once before giving up). Response includes tenderly_sim_url and tenderly_sim_status for pre-broadcast validation: if tenderly_sim_status is 'false', do NOT broadcast the transaction.

write_account_deleverage input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "account_address",
    "amount_in",
    "asset_from",
    "numeraire",
    "creditor"
  ],
  "properties": {
    "chain_id": {
      "type": "number",
      "default": 8453,
      "description": "Chain ID: 8453 (Base), 130 (Unichain), 10 (Optimism), or 4663 (Robinhood)"
    },
    "creditor": {
      "type": "string",
      "description": "Lending pool address"
    },
    "slippage": {
      "type": "number",
      "default": 100,
      "description": "Basis points, 100 = 1%"
    },
    "amount_in": {
      "type": "string",
      "description": "Collateral amount to sell (raw units)"
    },
    "numeraire": {
      "type": "string",
      "description": "Debt token address"
    },
    "asset_from": {
      "type": "string",
      "description": "Collateral token to sell"
    },
    "account_address": {
      "type": "string",
      "description": "Arcadia account address"
    }
  }
}
write_account_deleverage output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "transaction"
  ],
  "properties": {
    "after": {
      "type": "object",
      "required": [
        "total_account_value",
        "used_margin"
      ],
      "properties": {
        "used_margin": {
          "type": "string"
        },
        "total_account_value": {
          "type": "string"
        }
      },
      "additionalProperties": {}
    },
    "before": {
      "type": "object",
      "required": [
        "total_account_value",
        "used_margin"
      ],
      "properties": {
        "used_margin": {
          "type": "string"
        },
        "total_account_value": {
          "type": "string"
        }
      },
      "additionalProperties": {}
    },
    "description": {
      "type": "string"
    },
    "transaction": {
      "type": "object",
      "required": [
        "to",
        "data",
        "value",
        "chainId"
      ],
      "properties": {
        "to": {
          "type": "string"
        },
        "data": {
          "type": "string"
        },
        "value": {
          "type": "string"
        },
        "chainId": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "price_checks": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "pool",
          "status"
        ],
        "properties": {
          "pool": {
            "type": "string"
          },
          "status": {
            "type": "string"
          }
        },
        "additionalProperties": {}
      }
    },
    "tenderly_sim_url": {
      "type": "string"
    },
    "tenderly_sim_status": {
      "enum": [
        "success",
        "failure",
        "unavailable"
      ],
      "type": "string"
    },
    "expected_value_change": {
      "type": "string"
    },
    "expected_value_change_unavailable": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
write_account_deleverage annotations
{
  "title": "Build Deleverage Transaction",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
write_account_stake
Advertised by the server during the last successful anonymous check.
Open-world

Flash-action: stake, unstake, or claim rewards for an LP position in one atomic transaction. Use the `action` parameter to select the operation. `asset_address` is the position manager contract: pass the non-staked PM address when staking, or the staked PM address when unstaking. The returned calldata is time-sensitive, sign and broadcast within 30 seconds. If the transaction reverts due to price movement, rebuild and sign again immediately (retry at least once before giving up). Tenderly simulation may not be available for this endpoint. Verify the position exists with read_account_info before signing. Aero CL (metadexcl_v1): spot accounts stake through the Arcadia wrapper, margin accounts through the staked module, on Base, Optimism and Robinhood.

write_account_stake input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "account_address",
    "action",
    "asset_address",
    "asset_id"
  ],
  "properties": {
    "action": {
      "enum": [
        "stake",
        "unstake",
        "claim"
      ],
      "type": "string",
      "description": "Action to perform"
    },
    "asset_id": {
      "type": "number",
      "description": "NFT token ID of the LP position"
    },
    "chain_id": {
      "type": "number",
      "default": 8453,
      "description": "Chain ID: 8453 (Base), 130 (Unichain), 10 (Optimism), or 4663 (Robinhood)"
    },
    "asset_address": {
      "type": "string",
      "description": "Position manager contract address"
    },
    "account_address": {
      "type": "string",
      "description": "Arcadia account address"
    }
  }
}
write_account_stake output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "transaction"
  ],
  "properties": {
    "after": {
      "type": "object",
      "required": [
        "total_account_value",
        "used_margin"
      ],
      "properties": {
        "used_margin": {
          "type": "string"
        },
        "total_account_value": {
          "type": "string"
        }
      },
      "additionalProperties": {}
    },
    "before": {
      "type": "object",
      "required": [
        "total_account_value",
        "used_margin"
      ],
      "properties": {
        "used_margin": {
          "type": "string"
        },
        "total_account_value": {
          "type": "string"
        }
      },
      "additionalProperties": {}
    },
    "description": {
      "type": "string"
    },
    "transaction": {
      "type": "object",
      "required": [
        "to",
        "data",
        "value",
        "chainId"
      ],
      "properties": {
        "to": {
          "type": "string"
        },
        "data": {
          "type": "string"
        },
        "value": {
          "type": "string"
        },
        "chainId": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "price_checks": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "pool",
          "status"
        ],
        "properties": {
          "pool": {
            "type": "string"
          },
          "status": {
            "type": "string"
          }
        },
        "additionalProperties": {}
      }
    },
    "tenderly_sim_url": {
      "type": "string"
    },
    "tenderly_sim_status": {
      "enum": [
        "success",
        "failure",
        "unavailable"
      ],
      "type": "string"
    },
    "expected_value_change": {
      "type": "string"
    },
    "expected_value_change_unavailable": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
write_account_stake annotations
{
  "title": "Build Position Action Transaction",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
write_account_close
Advertised by the server during the last successful anonymous check.
Open-world

Atomic flash-action that closes an Arcadia account position in ONE transaction. Combines up to 3 steps atomically: [burn LP position] + [swap all tokens to a single target asset] + [repay debt]. Tokens remain in the account after closing: use write_account_withdraw to send them to your wallet. ALWAYS try this tool first when closing/exiting a position. Only fall back to individual tools (write_account_remove_liquidity, write_account_swap, write_account_deleverage, write_account_withdraw) if this tool fails. Supports two modes: - close_lp_only=true: Burns LP and leaves underlying tokens in the account. Use as step 1 if the full close fails, then call again with close_lp_only=false to swap+repay the remaining tokens. - close_lp_only=false (default): Full atomic close: burns LP, swaps everything to receive_assets, repays debt. Remaining tokens stay in the account. Follow up with write_account_withdraw to send to wallet. Supports multiple receive assets with custom distribution. The returned calldata is time-sensitive — sign and broadcast within 30 seconds. If the transaction reverts due to price movement, rebuild and sign again immediately (retry at least once before giving up). Response includes tenderly_sim_url and tenderly_sim_status for pre-broadcast validation.

write_account_close input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "account_address",
    "assets"
  ],
  "properties": {
    "assets": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "asset_address",
          "asset_id",
          "amount",
          "decimals"
        ],
        "properties": {
          "amount": {
            "type": "string",
            "description": "Amount to sell (use '1' for NFT positions)"
          },
          "asset_id": {
            "type": "number",
            "description": "NFT token ID (0 for ERC20 tokens)"
          },
          "decimals": {
            "type": "number",
            "description": "Token decimals (use 1 for NFT positions)"
          },
          "asset_address": {
            "type": "string",
            "description": "Token or position manager address"
          }
        }
      },
      "description": "Assets to close/sell from the account. IMPORTANT: For LP positions (NFTs), always use amount='1' and decimals=1: do NOT pass the liquidity amount. asset_address = position manager, asset_id = NFT token ID. For ERC20 tokens: asset_id = 0, amount = full balance in raw units, decimals = real token decimals. Get all values from read_account_info."
    },
    "chain_id": {
      "type": "number",
      "default": 8453,
      "description": "Chain ID: 8453 (Base), 130 (Unichain), 10 (Optimism), or 4663 (Robinhood)"
    },
    "slippage": {
      "type": "number",
      "default": 100,
      "description": "Basis points, 100 = 1%"
    },
    "close_lp_only": {
      "type": "boolean",
      "default": false,
      "description": "true = only burn LP positions, leave underlying tokens in account. false = full close (burn + swap + repay)."
    },
    "receive_assets": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "asset_address",
          "decimals"
        ],
        "properties": {
          "decimals": {
            "type": "number",
            "description": "Token decimals of the target asset"
          },
          "distribution": {
            "type": "number",
            "description": "Fraction of proceeds (0-1). Defaults to equal split across all receive assets."
          },
          "asset_address": {
            "type": "string",
            "description": "Target token address (e.g. USDC, WETH)"
          }
        }
      },
      "description": "Target assets to receive after closing. For a single target, pass one entry. Required when close_lp_only=false. Omit for close_lp_only=true."
    },
    "account_address": {
      "type": "string",
      "description": "Arcadia account address"
    }
  }
}
write_account_close output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "transaction"
  ],
  "properties": {
    "after": {
      "type": "object",
      "required": [
        "total_account_value",
        "used_margin"
      ],
      "properties": {
        "used_margin": {
          "type": "string"
        },
        "total_account_value": {
          "type": "string"
        }
      },
      "additionalProperties": {}
    },
    "before": {
      "type": "object",
      "required": [
        "total_account_value",
        "used_margin"
      ],
      "properties": {
        "used_margin": {
          "type": "string"
        },
        "total_account_value": {
          "type": "string"
        }
      },
      "additionalProperties": {}
    },
    "description": {
      "type": "string"
    },
    "transaction": {
      "type": "object",
      "required": [
        "to",
        "data",
        "value",
        "chainId"
      ],
      "properties": {
        "to": {
          "type": "string"
        },
        "data": {
          "type": "string"
        },
        "value": {
          "type": "string"
        },
        "chainId": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "price_checks": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "pool",
          "status"
        ],
        "properties": {
          "pool": {
            "type": "string"
          },
          "status": {
            "type": "string"
          }
        },
        "additionalProperties": {}
      }
    },
    "tenderly_sim_url": {
      "type": "string"
    },
    "tenderly_sim_status": {
      "enum": [
        "success",
        "failure",
        "unavailable"
      ],
      "type": "string"
    },
    "expected_value_change": {
      "type": "string"
    },
    "expected_value_change_unavailable": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
write_account_close annotations
{
  "title": "Build Close Position Transaction",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
write_account_aero_upgrade
Advertised by the server during the last successful anonymous check.
Open-world

Upgrade one Arcadia account to Aero (MetadexCL V1) in one flashAction: every Slipstream V1/V2/V3 position (dex_protocol slipstream*, staked or not, see read_account_info) moves to the Aero CL pool with the same pair and variant at the same range and tick spacing (when Aero has no pool at that tick spacing, the user picks another one), and every unit of old AERO (loose, in rewards, in an old-AERO pair) becomes the new AERO. Returns the plan and, when anything can go now, the unsigned transaction. Only the account owner can sign it. The backend decides what moves: report items[].status and items[].reason as given, never decide eligibility yourself. status ready: sign transaction. choices_required: some position has status choose with options[] (every Aero pool on its pair, with apy, tvl_usd, is_new, tick_spacing, range_widened, default and disabled_reason); ask the user to pick one whose disabled_reason is null, then call again with it in choices so one transaction moves everything. The transaction returned with choices_required moves only the ready items: sign it alone only when the user wants to leave the choose positions where they are. waiting: each item's reason says why (pool_not_on_aero, staking_not_open, target_price_mismatch, account_unhealthy, ...); a waiting item with an option whose disabled_reason is null can still move with that pick, so ask the user; do not retry in a loop. not_open: the AERO upgrade contract does not accept deposits at the moment. A 422 saying a pool is not selectable: drop that pick, call again without it and ask the user again. Pass accounts (up to 10) instead of account_address for one plan per account; the accounts share one AERO upgrade budget. multisends groups the accounts that got a transaction, in order: a Safe signs one MultiSend per group (each below max_gas_per_tx). After it confirms, reconnect managers_to_reconnect with write_account_automations and verify with read_account_info (next_steps). Spot and margin accounts can hold Aero positions, staked or not. Chains: 8453 (Base, default), 10 (Optimism) and 4663 (Robinhood, which has nothing to upgrade). Calldata is time-sensitive: sign promptly, rebuild on a price revert. After a transaction confirms, pass its block as min_block on the next call so the plan is not built on older state. When the transaction's simulation reverts the tool returns the plan with an error and no transaction; tenderly_sim_status unavailable means Tenderly did not answer: call once more before signing. A plan without a transaction can still show tenderly_sim_status failure: the account's health or a lending pool limit refused the move, and the items wait on account_unhealthy or exposure_limit; report those reasons and do not rebuild.

write_account_aero_upgrade input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "choices": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "position_manager",
          "position_id",
          "pool"
        ],
        "properties": {
          "pool": {
            "type": "string",
            "description": "The chosen option's pool"
          },
          "position_id": {
            "type": "integer",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "description": "The position's source.position_id"
          },
          "position_manager": {
            "type": "string",
            "description": "The position's source.position_manager"
          }
        }
      },
      "description": "Pool picks for positions with status choose (or waiting with a selectable option), from a previous call's options (disabled_reason null)"
    },
    "accounts": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 10,
      "minItems": 1,
      "description": "Up to 10 Arcadia accounts of one owner: one plan and transaction each"
    },
    "chain_id": {
      "type": "number",
      "default": 8453,
      "description": "Chain ID: 8453 (Base), 10 (Optimism) or 4663 (Robinhood, nothing to upgrade)"
    },
    "slippage": {
      "type": "integer",
      "maximum": 1000,
      "minimum": 1,
      "description": "Price band the mint accepts, in bps. Omit for the backend default: 150, or 500 when the owner is a contract (a Safe)."
    },
    "min_block": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "Block of the transaction you just confirmed, so the plan reads state at or after it"
    },
    "account_address": {
      "type": "string",
      "description": "Arcadia account to upgrade. Pass this or accounts, not both."
    }
  }
}
write_account_aero_upgrade output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "description",
    "next_steps"
  ],
  "properties": {
    "gas": {
      "type": "string"
    },
    "error": {
      "type": "string"
    },
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "propertyNames": {
          "type": "string"
        },
        "additionalProperties": {}
      }
    },
    "owner": {
      "type": "string"
    },
    "status": {
      "enum": [
        "ready",
        "choices_required",
        "waiting",
        "not_open",
        "nothing_to_upgrade"
      ],
      "type": "string"
    },
    "results": {
      "type": "array",
      "items": {
        "type": "object",
        "propertyNames": {
          "type": "string"
        },
        "additionalProperties": {}
      }
    },
    "chain_id": {
      "type": "number"
    },
    "opens_at": {
      "type": [
        "number",
        "null"
      ]
    },
    "multisends": {
      "type": "array",
      "items": {
        "type": "array",
        "items": {
          "type": "string"
        }
      }
    },
    "next_steps": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "description": {
      "type": "string"
    },
    "status_note": {
      "type": "string"
    },
    "transaction": {
      "type": "object",
      "required": [
        "to",
        "data",
        "value",
        "chainId"
      ],
      "properties": {
        "to": {
          "type": "string"
        },
        "data": {
          "type": "string"
        },
        "value": {
          "type": "string"
        },
        "chainId": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "asset_changes": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "token",
          "standard",
          "amount",
          "decimals",
          "protocol"
        ],
        "properties": {
          "token": {
            "type": "string"
          },
          "amount": {
            "type": "string"
          },
          "decimals": {
            "type": [
              "number",
              "null"
            ]
          },
          "protocol": {
            "type": [
              "string",
              "null"
            ]
          },
          "standard": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "max_gas_per_tx": {
      "type": "number"
    },
    "account_address": {
      "type": "string"
    },
    "simulation_note": {
      "type": "string"
    },
    "tenderly_sim_url": {
      "type": "string"
    },
    "price_tolerance_bps": {
      "type": "number"
    },
    "tenderly_sim_status": {
      "enum": [
        "success",
        "failure",
        "unavailable"
      ],
      "type": "string"
    },
    "managers_to_reconnect": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "kind",
          "old_address",
          "new_address",
          "initiator"
        ],
        "properties": {
          "kind": {
            "type": "string"
          },
          "initiator": {
            "type": [
              "string",
              "null"
            ]
          },
          "new_address": {
            "type": [
              "string",
              "null"
            ]
          },
          "old_address": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "old_managers_still_needed": {
      "type": "boolean"
    }
  },
  "additionalProperties": false
}
write_account_aero_upgrade annotations
{
  "title": "Build Aero Upgrade Transaction",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
write_wallet_approve
Advertised by the server during the last successful anonymous check.

Build an unsigned approval transaction. For ERC20 tokens: generates approve(spender, amount). For ERC721/ERC1155 NFTs (e.g. LP positions): generates setApprovalForAll(operator, true). Required before write_account_deposit or write_account_add_liquidity (when depositing from wallet). Tip: call read_wallet_allowances first to check if approval already exists: skip this if the current allowance is sufficient.

write_wallet_approve input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "token_address",
    "spender_address"
  ],
  "properties": {
    "amount": {
      "type": "string",
      "default": "max_uint256",
      "description": "ERC20 only: amount in raw units, or 'max_uint256' for unlimited. Ignored for NFTs."
    },
    "chain_id": {
      "type": "number",
      "default": 8453,
      "description": "Chain ID: 8453 (Base), 130 (Unichain), 10 (Optimism), or 4663 (Robinhood)"
    },
    "asset_type": {
      "enum": [
        "erc20",
        "erc721",
        "erc1155"
      ],
      "type": "string",
      "default": "erc20",
      "description": "Token type: 'erc20' (default) for fungible tokens, 'erc721' or 'erc1155' for NFTs (LP positions)"
    },
    "token_address": {
      "type": "string",
      "description": "Token contract address to approve"
    },
    "spender_address": {
      "type": "string",
      "description": "Address being approved — use the Arcadia account address for deposits"
    }
  }
}
write_wallet_approve output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "description",
    "transaction"
  ],
  "properties": {
    "description": {
      "type": "string"
    },
    "transaction": {
      "type": "object",
      "required": [
        "to",
        "data",
        "value",
        "chainId"
      ],
      "properties": {
        "to": {
          "type": "string"
        },
        "data": {
          "type": "string"
        },
        "value": {
          "type": "string"
        },
        "chainId": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "predicted_account_address": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
write_wallet_approve annotations
{
  "title": "Build Approve Transaction",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
write_wallet_upgrade_velo
Advertised by the server during the last successful anonymous check.
Open-world

Upgrade VELO held in a wallet on Optimism to the new AERO on Base: ordered unsigned wallet transactions from owner_address, an approve when the allowance is short, then depositLiquid on the Velodrome migration with the Hyperlane fee as value. 0.044 new AERO per VELO arrives at the same address on Base once the message lands. VELO inside an Arcadia account must be withdrawn to the wallet first (write_account_withdraw). VELO stays usable, so this is optional. Optimism (chain_id 10) only. 'upgrade unavailable' names the contract's reason: not_open (with the opening time), paused, budget_exhausted, recipient_not_deployed (a contract wallet with no code on Base).

write_wallet_upgrade_velo input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "owner_address"
  ],
  "properties": {
    "amount": {
      "type": "string",
      "description": "Raw units (18 decimals). Omit for the wallet's full VELO balance."
    },
    "chain_id": {
      "type": "number",
      "default": 10,
      "description": "Chain ID: 10 (Optimism)"
    },
    "owner_address": {
      "type": "string",
      "description": "Wallet holding the VELO on Optimism; receives the AERO on Base"
    }
  }
}
write_wallet_upgrade_velo output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "description",
    "transactions",
    "destination_chain_id",
    "recipient",
    "old_token",
    "new_token",
    "amount_in",
    "expected_amount_out",
    "fee_wei"
  ],
  "properties": {
    "fee_wei": {
      "type": "string"
    },
    "amount_in": {
      "type": "string"
    },
    "new_token": {
      "type": "string"
    },
    "old_token": {
      "type": "string"
    },
    "recipient": {
      "type": "string"
    },
    "description": {
      "type": "string"
    },
    "transactions": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "description",
          "transaction"
        ],
        "properties": {
          "description": {
            "type": "string"
          },
          "transaction": {
            "type": "object",
            "required": [
              "to",
              "data",
              "value",
              "chainId"
            ],
            "properties": {
              "to": {
                "type": "string"
              },
              "data": {
                "type": "string"
              },
              "value": {
                "type": "string"
              },
              "chainId": {
                "type": "number"
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      }
    },
    "expected_amount_out": {
      "type": "string"
    },
    "destination_chain_id": {
      "type": "number"
    }
  },
  "additionalProperties": false
}
write_wallet_upgrade_velo annotations
{
  "title": "Build VELO Upgrade Transactions",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
write_pool_deposit
Advertised by the server during the last successful anonymous check.

Build an unsigned deposit transaction into an Arcadia lending tranche (ERC-4626). Lenders deposit the pool's underlying asset (USDC/WETH/cbBTC) and receive tranche shares that accrue interest from borrowers. Requires prior ERC-20 approval to the tranche (see write_wallet_approve). To check current lender yield, call read_pool_list or read_pool_info.

write_pool_deposit input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "tranche_address",
    "assets",
    "receiver"
  ],
  "properties": {
    "assets": {
      "type": "string",
      "description": "Amount of underlying asset to deposit, in raw units (e.g. '1000000' = 1 USDC since USDC has 6 decimals)."
    },
    "chain_id": {
      "type": "number",
      "default": 8453,
      "description": "Chain ID: 8453 (Base), 130 (Unichain), 10 (Optimism), or 4663 (Robinhood)"
    },
    "receiver": {
      "type": "string",
      "description": "Address that receives the minted tranche shares. Usually the depositor's own wallet."
    },
    "tranche_address": {
      "type": "string",
      "description": "Tranche contract address (ERC-4626 vault). Get this from read_pool_list: each pool's `tranches[0].address`."
    }
  }
}
write_pool_deposit output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "description",
    "transaction"
  ],
  "properties": {
    "description": {
      "type": "string"
    },
    "transaction": {
      "type": "object",
      "required": [
        "to",
        "data",
        "value",
        "chainId"
      ],
      "properties": {
        "to": {
          "type": "string"
        },
        "data": {
          "type": "string"
        },
        "value": {
          "type": "string"
        },
        "chainId": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "predicted_account_address": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
write_pool_deposit annotations
{
  "title": "Build Pool Deposit Transaction",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
write_pool_redeem
Advertised by the server during the last successful anonymous check.

Build an unsigned redeem transaction to withdraw from an Arcadia lending tranche (ERC-4626). Burns tranche shares and returns the corresponding amount of underlying asset, including accrued interest. The owner must be the shares holder; receiver is where the underlying asset is sent.

write_pool_redeem input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "tranche_address",
    "shares",
    "receiver",
    "owner"
  ],
  "properties": {
    "owner": {
      "type": "string",
      "description": "Address that owns the tranche shares being burned. Normally the signer's own wallet."
    },
    "shares": {
      "type": "string",
      "description": "Amount of tranche shares to burn, in raw units. To redeem everything, use the owner's full share balance."
    },
    "chain_id": {
      "type": "number",
      "default": 8453,
      "description": "Chain ID: 8453 (Base), 130 (Unichain), 10 (Optimism), or 4663 (Robinhood)"
    },
    "receiver": {
      "type": "string",
      "description": "Address that receives the underlying asset. Usually the owner's own wallet."
    },
    "tranche_address": {
      "type": "string",
      "description": "Tranche contract address (ERC-4626 vault). Get this from read_pool_list: each pool's `tranches[0].address`."
    }
  }
}
write_pool_redeem output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "description",
    "transaction"
  ],
  "properties": {
    "description": {
      "type": "string"
    },
    "transaction": {
      "type": "object",
      "required": [
        "to",
        "data",
        "value",
        "chainId"
      ],
      "properties": {
        "to": {
          "type": "string"
        },
        "data": {
          "type": "string"
        },
        "value": {
          "type": "string"
        },
        "chainId": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "predicted_account_address": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
write_pool_redeem annotations
{
  "title": "Build Pool Redeem Transaction",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
write_account_automations
Advertised by the server during the last successful anonymous check.
Open-world

Configure an account's automations from a list of intents and return the unsigned setAssetManagers transaction. The backend resolves which asset managers each intent needs, validates that the combination is compatible, encodes the metadata and builds the calldata, so you describe the desired outcome rather than the contracts. With mode 'save' (the default) the intents array is the complete desired state: the backend diffs it against what is currently enabled, so any automation you leave out is DISABLED by the returned transaction. Pass a single intent with enabled: false to turn everything off. Mode 'preview' validates and resolves the intents WITHOUT reading chain state and returns no transaction, because its calldata carries no disable entries and would only partially apply the state. Use it to check a combination is legal or to show a plan; use 'save' to get something signable. To toggle one automation without restating the rest, use write_account_automations_delta. Intents: - compound_fees: reinvest earned fees/rewards back into the LP. Optional 'tokens' scopes it per yielding token. A staked reward that is not a pool token is swapped in via CowSwap automatically. - claim_rewards: claim yield out. config.mode as_earned pays the tokens as-is, convert_to swaps them to config.buy_token via CowSwap. config.convert_tokens converts only a subset and claims the rest as-earned. config.destination account or wallet. - add_to_lp: fold idle pool-token balances (deposits, rebalance leftovers) back into the LP. Opt-in per token. - claim_merkl: auto-claim Merkl incentive rewards. Independent of the compounder/claimer/cowswapper triad and needs no position context. - rebalance: reposition the LP. strategy out_of_range (default), take_profit (runs on the dedicated profit-taker contract), or protocol_owned_liquidity. Pass position_id (from assets[] in read_account_info) and the backend fills in protocol, is_staked, token0, token1 and reward_tokens for you; anything you pass explicitly wins. claim_merkl needs no position context. Rules the backend enforces (a violation is returned as an error, never written on-chain): - Every yielding token must be assigned to exactly one of compound_fees or claim_rewards. Scoping one to a subset without covering the rest is rejected, and no token may be in both. - A wallet or custom-recipient payout requires a pure as-earned claim: nothing converted, and every yielding token claimed. Converts settle in the account. - convert_tokens must be a subset of the claimed tokens, and buy_token cannot be a compounded token, a converted token, or an add_to_lp folded token. - Each intent kind may appear only once, and a token list must not be empty or name a token the position does not yield. Returns { valid, errors, warnings, human_summary, plan, diff, transaction }. When a compatibility rule fires the call returns an error and no transaction: read errors[].reason, adjust the intents and retry. There is deliberately no transaction when the account already matches the request (no_changes_needed), when the Tenderly simulation predicts a revert (an error), or in preview mode (preview_only). Call read_asset_manager_intents first to see which intents this account can enable.

write_account_automations input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "account_address",
    "intents"
  ],
  "properties": {
    "mode": {
      "enum": [
        "save",
        "preview"
      ],
      "type": "string",
      "default": "save",
      "description": "save diffs against on-chain state and returns a signable transaction that also disables anything omitted. preview resolves and validates only, returning a plan and no transaction."
    },
    "owner": {
      "type": "string",
      "description": "Account owner EOA. Used to resolve wallet payout targets."
    },
    "token0": {
      "type": "string",
      "description": "Pool token0 address."
    },
    "token1": {
      "type": "string",
      "description": "Pool token1 address."
    },
    "intents": {
      "type": "array",
      "items": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "kind"
            ],
            "properties": {
              "kind": {
                "type": "string",
                "const": "compound_fees"
              },
              "tokens": {
                "type": "array",
                "items": {
                  "enum": [
                    "token0",
                    "token1",
                    "reward"
                  ],
                  "type": "string"
                },
                "description": "Which tokens' yield to reinvest. Omit for all yielding tokens. 'reward' only exists on a staked position whose reward token is not a pool token. Every yielding token must be assigned to either compound_fees or claim_rewards, so if you scope this to a subset you must add a claim_rewards intent covering the rest."
              },
              "enabled": {
                "type": "boolean",
                "default": true,
                "description": "False disables this intent's managers instead of enabling them."
              },
              "position_id": {
                "type": "integer",
                "maximum": 9007199254740991,
                "minimum": -9007199254740991,
                "description": "LP position (NFT) id this intent applies to. Also used to auto-fetch position context."
              }
            }
          },
          {
            "type": "object",
            "required": [
              "kind"
            ],
            "properties": {
              "kind": {
                "type": "string",
                "const": "claim_rewards"
              },
              "config": {
                "type": "object",
                "default": {},
                "properties": {
                  "mode": {
                    "enum": [
                      "as_earned",
                      "convert_to"
                    ],
                    "type": "string",
                    "default": "as_earned",
                    "description": "as_earned pays out the claimed tokens as-is; convert_to swaps them to buy_token via CowSwap. Use convert_tokens to convert only some of them."
                  },
                  "tokens": {
                    "type": "array",
                    "items": {
                      "enum": [
                        "token0",
                        "token1",
                        "reward"
                      ],
                      "type": "string"
                    },
                    "description": "Which tokens' yield to claim out. Omit for all yielding tokens. A token cannot be both claimed and compounded, and every yielding token must be assigned to one of the two."
                  },
                  "buy_token": {
                    "type": "string",
                    "description": "ERC20 to swap into. Required whenever any token is being converted. It cannot be a token you also compound, one of the tokens being converted, or a token folded by add_to_lp."
                  },
                  "recipient": {
                    "type": "string",
                    "description": "Explicit payout address. Overrides destination when set, and is subject to the same pure-as-earned rule as a wallet payout unless it equals the account address."
                  },
                  "destination": {
                    "enum": [
                      "account",
                      "wallet"
                    ],
                    "type": "string",
                    "default": "account",
                    "description": "Payout target ('wallet' is the owner EOA). A wallet payout is only allowed for a pure as-earned claim: nothing converted, and every yielding token claimed. Any convert, or a claim scoped to a subset of tokens, must use 'account' because CowSwap settles there."
                  },
                  "convert_tokens": {
                    "type": "array",
                    "items": {
                      "enum": [
                        "token0",
                        "token1",
                        "reward"
                      ],
                      "type": "string"
                    },
                    "description": "Subset of this intent's claimed tokens to swap to buy_token; the rest are claimed as-earned. Must be a subset of `tokens`. Omit to defer to mode (convert_to converts all claimed tokens, as_earned converts none). Use this for a partial convert, e.g. tokens: ['token0','reward'] with convert_tokens: ['reward'] swaps only the reward and claims token0 as-is."
                  }
                }
              },
              "enabled": {
                "type": "boolean",
                "default": true,
                "description": "False disables this intent's managers instead of enabling them."
              },
              "position_id": {
                "type": "integer",
                "maximum": 9007199254740991,
                "minimum": -9007199254740991,
                "description": "LP position (NFT) id this intent applies to. Also used to auto-fetch position context."
              }
            }
          },
          {
            "type": "object",
            "required": [
              "kind"
            ],
            "properties": {
              "kind": {
                "type": "string",
                "const": "add_to_lp"
              },
              "tokens": {
                "type": "array",
                "items": {
                  "enum": [
                    "token0",
                    "token1"
                  ],
                  "type": "string"
                },
                "description": "Which pool tokens' idle account balance to fold into the LP. Omit for both. Folding is opt-in per token, and a folded token cannot be the buy_token of a claim_rewards convert."
              },
              "enabled": {
                "type": "boolean",
                "default": true,
                "description": "False disables this intent's managers instead of enabling them."
              },
              "position_id": {
                "type": "integer",
                "maximum": 9007199254740991,
                "minimum": -9007199254740991,
                "description": "LP position (NFT) id this intent applies to. Also used to auto-fetch position context."
              }
            }
          },
          {
            "type": "object",
            "required": [
              "kind"
            ],
            "properties": {
              "kind": {
                "type": "string",
                "const": "claim_merkl"
              },
              "config": {
                "type": "object",
                "default": {},
                "properties": {
                  "destination": {
                    "enum": [
                      "account",
                      "wallet"
                    ],
                    "type": "string",
                    "default": "account"
                  },
                  "reward_recipient": {
                    "type": "string",
                    "description": "Explicit recipient address. Overrides destination when set."
                  }
                }
              },
              "enabled": {
                "type": "boolean",
                "default": true,
                "description": "False disables this intent's managers instead of enabling them."
              },
              "position_id": {
                "type": "integer",
                "maximum": 9007199254740991,
                "minimum": -9007199254740991,
                "description": "LP position (NFT) id this intent applies to. Also used to auto-fetch position context."
              }
            }
          },
          {
            "type": "object",
            "required": [
              "kind"
            ],
            "properties": {
              "kind": {
                "type": "string",
                "const": "rebalance"
              },
              "enabled": {
                "type": "boolean",
                "default": true,
                "description": "False disables this intent's managers instead of enabling them."
              },
              "strategy": {
                "oneOf": [
                  {
                    "type": "object",
                    "required": [
                      "kind"
                    ],
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "out_of_range"
                      },
                      "max_rebalance_time": {
                        "type": "integer",
                        "default": 1000000000000,
                        "maximum": 9007199254740991,
                        "minimum": -9007199254740991,
                        "description": "Seconds before a rebalance is forced. Default is effectively disabled."
                      },
                      "min_rebalance_time": {
                        "type": "integer",
                        "default": 3600,
                        "maximum": 9007199254740991,
                        "minimum": -9007199254740991,
                        "description": "Cooldown in seconds between rebalances."
                      },
                      "optimal_token0_ratio": {
                        "type": "integer",
                        "default": 500000,
                        "maximum": 1000000,
                        "minimum": 0,
                        "description": "Target token0 composition after a rebalance, 1e6-scaled: 500000 = 50% (balanced, the default), 750000 = 75% token0, 0 = all token1."
                      },
                      "trigger_lower_tick_ratio": {
                        "type": "integer",
                        "default": 0,
                        "maximum": 9007199254740991,
                        "minimum": -9007199254740991,
                        "description": "Offset from tick_lower as a fraction of the position's tick range, 1e6-scaled. This is TICK distance, not price: 50000 shifts the trigger by 5% of (tick_upper - tick_lower) ticks, which is not 5% of price. 0 = trigger exactly at the boundary. Positive (e.g. 50000) puts the trigger outside the position so price must travel further beyond the range before rebalancing. Negative (e.g. -50000) puts it inside, firing preemptively while price is still in range."
                      },
                      "trigger_upper_tick_ratio": {
                        "type": "integer",
                        "default": 0,
                        "maximum": 9007199254740991,
                        "minimum": -9007199254740991,
                        "description": "Same as trigger_lower_tick_ratio, for tick_upper. The two are independent, so asymmetric configs are valid (e.g. lower -50000, upper 0 rebalances early on the downside but only at the boundary on the upside)."
                      }
                    }
                  },
                  {
                    "type": "object",
                    "required": [
                      "kind"
                    ],
                    "properties": {
                      "k1": {
                        "type": "integer",
                        "default": 0,
                        "maximum": 9007199254740991,
                        "minimum": -9007199254740991
                      },
                      "k2": {
                        "type": "integer",
                        "default": 0,
                        "maximum": 9007199254740991,
                        "minimum": -9007199254740991
                      },
                      "kind": {
                        "type": "string",
                        "const": "protocol_owned_liquidity"
                      },
                      "deadzone": {
                        "type": "integer",
                        "default": 20000,
                        "maximum": 9007199254740991,
                        "minimum": -9007199254740991
                      },
                      "base_range": {
                        "type": "integer",
                        "default": 50000,
                        "maximum": 9007199254740991,
                        "minimum": -9007199254740991
                      },
                      "initial_range": {
                        "type": "integer",
                        "default": 200000,
                        "maximum": 9007199254740991,
                        "minimum": -9007199254740991
                      },
                      "rebalance_threshold": {
                        "type": "integer",
                        "default": 25000,
                        "maximum": 9007199254740991,
                        "minimum": -9007199254740991
                      },
                      "target_token0_ratio": {
                        "type": "integer",
                        "default": 500000,
                        "maximum": 9007199254740991,
                        "minimum": -9007199254740991
                      },
                      "fraction_excess_to_limit_order": {
                        "type": "integer",
                        "default": 500000,
                        "maximum": 9007199254740991,
                        "minimum": -9007199254740991
                      },
                      "limit_order_withdrawal_threshold": {
                        "type": "integer",
                        "default": 50000,
                        "maximum": 9007199254740991,
                        "minimum": -9007199254740991
                      }
                    }
                  },
                  {
                    "type": "object",
                    "required": [
                      "kind"
                    ],
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "take_profit"
                      },
                      "has_reversal": {
                        "type": "boolean",
                        "default": false
                      },
                      "profit_token": {
                        "enum": [
                          "token0",
                          "token1"
                        ],
                        "type": "string",
                        "default": "token0"
                      },
                      "reversal_trigger_type": {
                        "enum": [
                          "",
                          "fixed",
                          "relative"
                        ],
                        "type": "string",
                        "default": ""
                      },
                      "reversal_reposition_mode": {
                        "enum": [
                          "",
                          "anchor_tick",
                          "shift_range"
                        ],
                        "type": "string",
                        "default": ""
                      },
                      "take_profit_trigger_type": {
                        "enum": [
                          "",
                          "fixed",
                          "relative"
                        ],
                        "type": "string",
                        "default": "fixed"
                      },
                      "reversal_trigger_threshold": {
                        "type": "integer",
                        "default": 0,
                        "maximum": 9007199254740991,
                        "minimum": -9007199254740991
                      },
                      "take_profit_reposition_mode": {
                        "enum": [
                          "",
                          "anchor_tick",
                          "shift_range"
                        ],
                        "type": "string",
                        "default": "anchor_tick"
                      },
                      "take_profit_trigger_threshold": {
                        "type": "integer",
                        "default": 0,
                        "maximum": 9007199254740991,
                        "minimum": -9007199254740991
                      }
                    }
                  }
                ],
                "default": {
                  "kind": "out_of_range"
                },
                "description": "out_of_range repositions when price leaves the range; take_profit runs on the dedicated profit-taker contract; protocol_owned_liquidity is the POL strategy."
              },
              "position_id": {
                "type": "integer",
                "maximum": 9007199254740991,
                "minimum": -9007199254740991,
                "description": "LP position (NFT) id this intent applies to. Also used to auto-fetch position context."
              },
              "max_tolerance": {
                "type": "number",
                "maximum": 1000000000000000000,
                "minimum": 0,
                "multipleOf": 1,
                "description": "Max price deviation (MEV/slippage cap), 1e18-scaled: 1e18 = 100%, so 5000000000000000 = 0.5% (the default) and 50000000000000000 = 5%. Omit for the pool's default. AAA pools are floored at 5%."
              },
              "min_liquidity_ratio": {
                "type": "number",
                "maximum": 1000000000000000000,
                "minimum": 0,
                "multipleOf": 1,
                "description": "Min fraction of liquidity that must survive a rebalance, 1e18-scaled: 990000000000000000 = 99% (the default), i.e. at most 1% value loss. Omit for the default."
              }
            }
          }
        ],
        "description": "One user-facing automation intent."
      },
      "minItems": 1,
      "description": "Complete desired automation state. In save mode anything omitted is disabled, so include every automation to keep. A single intent with enabled: false disables all automations."
    },
    "chain_id": {
      "type": "number",
      "default": 8453,
      "description": "Chain ID: 8453 (Base), 130 (Unichain), 10 (Optimism), or 4663 (Robinhood)"
    },
    "protocol": {
      "enum": [
        "slipstream_v1",
        "slipstream_v2",
        "slipstream_v3",
        "uniswap_v3",
        "uniswap_v4",
        "metadexcl_v1",
        "slipstream",
        "staked_slipstream",
        "staked_slipstream_v2",
        "staked_slipstream_v3",
        "uniV3",
        "uniV4",
        "staked_metadexcl_v1"
      ],
      "type": "string",
      "description": "Position's DEX protocol. Only needed when position_id is omitted. Accepts the dex_protocol values the read tools return (slipstream, staked_slipstream_v3, uniV3, metadexcl_v1, staked_metadexcl_v1, ...), which imply is_staked, as well as the canonical slipstream_v1 / uniswap_v3 spellings. metadexcl_v1 is Aero CL; staked_metadexcl_v1 covers both the staked module and the wrapper."
    },
    "is_staked": {
      "type": "boolean",
      "description": "Whether the LP position is staked. Implied by a staked_* protocol value."
    },
    "position_id": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "LP position (NFT) id, as listed in assets[] by read_account_info. Supply this and the backend fetches protocol, staked flag, tokens and reward tokens for you. Strongly preferred over passing the position fields by hand."
    },
    "reward_tokens": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Staking reward token addresses."
    },
    "account_address": {
      "type": "string",
      "description": "Arcadia account address"
    }
  }
}
write_account_automations output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "description",
    "valid",
    "errors",
    "warnings",
    "human_summary",
    "plan"
  ],
  "properties": {
    "diff": {
      "type": "object",
      "required": [
        "added",
        "removed",
        "updated"
      ],
      "properties": {
        "added": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "manager",
              "address",
              "enabled"
            ],
            "properties": {
              "address": {
                "type": "string"
              },
              "enabled": {
                "type": "boolean"
              },
              "manager": {
                "type": "string"
              }
            },
            "additionalProperties": false
          }
        },
        "removed": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "manager",
              "address",
              "enabled"
            ],
            "properties": {
              "address": {
                "type": "string"
              },
              "enabled": {
                "type": "boolean"
              },
              "manager": {
                "type": "string"
              }
            },
            "additionalProperties": false
          }
        },
        "updated": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "manager",
              "address",
              "enabled"
            ],
            "properties": {
              "address": {
                "type": "string"
              },
              "enabled": {
                "type": "boolean"
              },
              "manager": {
                "type": "string"
              }
            },
            "additionalProperties": false
          }
        }
      },
      "additionalProperties": false
    },
    "plan": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "manager",
          "address",
          "enabled",
          "serving_intents"
        ],
        "properties": {
          "address": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "manager": {
            "type": "string"
          },
          "strategy": {
            "type": [
              "string",
              "null"
            ]
          },
          "serving_intents": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "additionalProperties": false
      }
    },
    "valid": {
      "type": "boolean"
    },
    "errors": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "rule",
          "severity",
          "reason"
        ],
        "properties": {
          "rule": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          },
          "severity": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "description": {
      "type": "string"
    },
    "transaction": {
      "type": "object",
      "required": [
        "to",
        "data",
        "value",
        "chainId"
      ],
      "properties": {
        "to": {
          "type": "string"
        },
        "data": {
          "type": "string"
        },
        "value": {
          "type": "string"
        },
        "chainId": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "preview_only": {
      "type": "boolean"
    },
    "human_summary": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "simulation_url": {
      "type": "string"
    },
    "no_changes_needed": {
      "type": "boolean"
    },
    "tenderly_sim_status": {
      "enum": [
        "success",
        "failure",
        "unavailable"
      ],
      "type": "string"
    }
  },
  "additionalProperties": false
}
write_account_automations annotations
{
  "title": "Configure Account Automations",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
write_account_automations_delta
Advertised by the server during the last successful anonymous check.
Open-world

Apply an explicit change to an account's automations and return the unsigned setAssetManagers transaction. Unlike write_account_automations this is a delta, not a full desired state: automations you do not mention are left untouched. Use it to switch one automation on or off without restating the others. The enable array takes intents to switch on (same shapes as write_account_automations). To turn an automation OFF, call read_asset_manager_current, take the address of the manager serving it, and pass that address in the disable array: an intent with enabled: false in `enable` is rejected because the backend would ignore it. Superseded or unreadable managers still set on the account are force-disabled in the same transaction regardless. Intents: - compound_fees: reinvest earned fees/rewards back into the LP. Optional 'tokens' scopes it per yielding token. A staked reward that is not a pool token is swapped in via CowSwap automatically. - claim_rewards: claim yield out. config.mode as_earned pays the tokens as-is, convert_to swaps them to config.buy_token via CowSwap. config.convert_tokens converts only a subset and claims the rest as-earned. config.destination account or wallet. - add_to_lp: fold idle pool-token balances (deposits, rebalance leftovers) back into the LP. Opt-in per token. - claim_merkl: auto-claim Merkl incentive rewards. Independent of the compounder/claimer/cowswapper triad and needs no position context. - rebalance: reposition the LP. strategy out_of_range (default), take_profit (runs on the dedicated profit-taker contract), or protocol_owned_liquidity. Pass position_id (from assets[] in read_account_info) and the backend fills in protocol, is_staked, token0, token1 and reward_tokens for you; anything you pass explicitly wins. claim_merkl needs no position context. Rules the backend enforces (a violation is returned as an error, never written on-chain): - Every yielding token must be assigned to exactly one of compound_fees or claim_rewards. Scoping one to a subset without covering the rest is rejected, and no token may be in both. - A wallet or custom-recipient payout requires a pure as-earned claim: nothing converted, and every yielding token claimed. Converts settle in the account. - convert_tokens must be a subset of the claimed tokens, and buy_token cannot be a compounded token, a converted token, or an add_to_lp folded token. - Each intent kind may appear only once, and a token list must not be empty or name a token the position does not yield.

write_account_automations_delta input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "account_address"
  ],
  "properties": {
    "owner": {
      "type": "string",
      "description": "Account owner EOA. Used to resolve wallet payout targets."
    },
    "enable": {
      "type": "array",
      "items": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "kind"
            ],
            "properties": {
              "kind": {
                "type": "string",
                "const": "compound_fees"
              },
              "tokens": {
                "type": "array",
                "items": {
                  "enum": [
                    "token0",
                    "token1",
                    "reward"
                  ],
                  "type": "string"
                },
                "description": "Which tokens' yield to reinvest. Omit for all yielding tokens. 'reward' only exists on a staked position whose reward token is not a pool token. Every yielding token must be assigned to either compound_fees or claim_rewards, so if you scope this to a subset you must add a claim_rewards intent covering the rest."
              },
              "enabled": {
                "type": "boolean",
                "default": true,
                "description": "False disables this intent's managers instead of enabling them."
              },
              "position_id": {
                "type": "integer",
                "maximum": 9007199254740991,
                "minimum": -9007199254740991,
                "description": "LP position (NFT) id this intent applies to. Also used to auto-fetch position context."
              }
            }
          },
          {
            "type": "object",
            "required": [
              "kind"
            ],
            "properties": {
              "kind": {
                "type": "string",
                "const": "claim_rewards"
              },
              "config": {
                "type": "object",
                "default": {},
                "properties": {
                  "mode": {
                    "enum": [
                      "as_earned",
                      "convert_to"
                    ],
                    "type": "string",
                    "default": "as_earned",
                    "description": "as_earned pays out the claimed tokens as-is; convert_to swaps them to buy_token via CowSwap. Use convert_tokens to convert only some of them."
                  },
                  "tokens": {
                    "type": "array",
                    "items": {
                      "enum": [
                        "token0",
                        "token1",
                        "reward"
                      ],
                      "type": "string"
                    },
                    "description": "Which tokens' yield to claim out. Omit for all yielding tokens. A token cannot be both claimed and compounded, and every yielding token must be assigned to one of the two."
                  },
                  "buy_token": {
                    "type": "string",
                    "description": "ERC20 to swap into. Required whenever any token is being converted. It cannot be a token you also compound, one of the tokens being converted, or a token folded by add_to_lp."
                  },
                  "recipient": {
                    "type": "string",
                    "description": "Explicit payout address. Overrides destination when set, and is subject to the same pure-as-earned rule as a wallet payout unless it equals the account address."
                  },
                  "destination": {
                    "enum": [
                      "account",
                      "wallet"
                    ],
                    "type": "string",
                    "default": "account",
                    "description": "Payout target ('wallet' is the owner EOA). A wallet payout is only allowed for a pure as-earned claim: nothing converted, and every yielding token claimed. Any convert, or a claim scoped to a subset of tokens, must use 'account' because CowSwap settles there."
                  },
                  "convert_tokens": {
                    "type": "array",
                    "items": {
                      "enum": [
                        "token0",
                        "token1",
                        "reward"
                      ],
                      "type": "string"
                    },
                    "description": "Subset of this intent's claimed tokens to swap to buy_token; the rest are claimed as-earned. Must be a subset of `tokens`. Omit to defer to mode (convert_to converts all claimed tokens, as_earned converts none). Use this for a partial convert, e.g. tokens: ['token0','reward'] with convert_tokens: ['reward'] swaps only the reward and claims token0 as-is."
                  }
                }
              },
              "enabled": {
                "type": "boolean",
                "default": true,
                "description": "False disables this intent's managers instead of enabling them."
              },
              "position_id": {
                "type": "integer",
                "maximum": 9007199254740991,
                "minimum": -9007199254740991,
                "description": "LP position (NFT) id this intent applies to. Also used to auto-fetch position context."
              }
            }
          },
          {
            "type": "object",
            "required": [
              "kind"
            ],
            "properties": {
              "kind": {
                "type": "string",
                "const": "add_to_lp"
              },
              "tokens": {
                "type": "array",
                "items": {
                  "enum": [
                    "token0",
                    "token1"
                  ],
                  "type": "string"
                },
                "description": "Which pool tokens' idle account balance to fold into the LP. Omit for both. Folding is opt-in per token, and a folded token cannot be the buy_token of a claim_rewards convert."
              },
              "enabled": {
                "type": "boolean",
                "default": true,
                "description": "False disables this intent's managers instead of enabling them."
              },
              "position_id": {
                "type": "integer",
                "maximum": 9007199254740991,
                "minimum": -9007199254740991,
                "description": "LP position (NFT) id this intent applies to. Also used to auto-fetch position context."
              }
            }
          },
          {
            "type": "object",
            "required": [
              "kind"
            ],
            "properties": {
              "kind": {
                "type": "string",
                "const": "claim_merkl"
              },
              "config": {
                "type": "object",
                "default": {},
                "properties": {
                  "destination": {
                    "enum": [
                      "account",
                      "wallet"
                    ],
                    "type": "string",
                    "default": "account"
                  },
                  "reward_recipient": {
                    "type": "string",
                    "description": "Explicit recipient address. Overrides destination when set."
                  }
                }
              },
              "enabled": {
                "type": "boolean",
                "default": true,
                "description": "False disables this intent's managers instead of enabling them."
              },
              "position_id": {
                "type": "integer",
                "maximum": 9007199254740991,
                "minimum": -9007199254740991,
                "description": "LP position (NFT) id this intent applies to. Also used to auto-fetch position context."
              }
            }
          },
          {
            "type": "object",
            "required": [
              "kind"
            ],
            "properties": {
              "kind": {
                "type": "string",
                "const": "rebalance"
              },
              "enabled": {
                "type": "boolean",
                "default": true,
                "description": "False disables this intent's managers instead of enabling them."
              },
              "strategy": {
                "oneOf": [
                  {
                    "type": "object",
                    "required": [
                      "kind"
                    ],
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "out_of_range"
                      },
                      "max_rebalance_time": {
                        "type": "integer",
                        "default": 1000000000000,
                        "maximum": 9007199254740991,
                        "minimum": -9007199254740991,
                        "description": "Seconds before a rebalance is forced. Default is effectively disabled."
                      },
                      "min_rebalance_time": {
                        "type": "integer",
                        "default": 3600,
                        "maximum": 9007199254740991,
                        "minimum": -9007199254740991,
                        "description": "Cooldown in seconds between rebalances."
                      },
                      "optimal_token0_ratio": {
                        "type": "integer",
                        "default": 500000,
                        "maximum": 1000000,
                        "minimum": 0,
                        "description": "Target token0 composition after a rebalance, 1e6-scaled: 500000 = 50% (balanced, the default), 750000 = 75% token0, 0 = all token1."
                      },
                      "trigger_lower_tick_ratio": {
                        "type": "integer",
                        "default": 0,
                        "maximum": 9007199254740991,
                        "minimum": -9007199254740991,
                        "description": "Offset from tick_lower as a fraction of the position's tick range, 1e6-scaled. This is TICK distance, not price: 50000 shifts the trigger by 5% of (tick_upper - tick_lower) ticks, which is not 5% of price. 0 = trigger exactly at the boundary. Positive (e.g. 50000) puts the trigger outside the position so price must travel further beyond the range before rebalancing. Negative (e.g. -50000) puts it inside, firing preemptively while price is still in range."
                      },
                      "trigger_upper_tick_ratio": {
                        "type": "integer",
                        "default": 0,
                        "maximum": 9007199254740991,
                        "minimum": -9007199254740991,
                        "description": "Same as trigger_lower_tick_ratio, for tick_upper. The two are independent, so asymmetric configs are valid (e.g. lower -50000, upper 0 rebalances early on the downside but only at the boundary on the upside)."
                      }
                    }
                  },
                  {
                    "type": "object",
                    "required": [
                      "kind"
                    ],
                    "properties": {
                      "k1": {
                        "type": "integer",
                        "default": 0,
                        "maximum": 9007199254740991,
                        "minimum": -9007199254740991
                      },
                      "k2": {
                        "type": "integer",
                        "default": 0,
                        "maximum": 9007199254740991,
                        "minimum": -9007199254740991
                      },
                      "kind": {
                        "type": "string",
                        "const": "protocol_owned_liquidity"
                      },
                      "deadzone": {
                        "type": "integer",
                        "default": 20000,
                        "maximum": 9007199254740991,
                        "minimum": -9007199254740991
                      },
                      "base_range": {
                        "type": "integer",
                        "default": 50000,
                        "maximum": 9007199254740991,
                        "minimum": -9007199254740991
                      },
                      "initial_range": {
                        "type": "integer",
                        "default": 200000,
                        "maximum": 9007199254740991,
                        "minimum": -9007199254740991
                      },
                      "rebalance_threshold": {
                        "type": "integer",
                        "default": 25000,
                        "maximum": 9007199254740991,
                        "minimum": -9007199254740991
                      },
                      "target_token0_ratio": {
                        "type": "integer",
                        "default": 500000,
                        "maximum": 9007199254740991,
                        "minimum": -9007199254740991
                      },
                      "fraction_excess_to_limit_order": {
                        "type": "integer",
                        "default": 500000,
                        "maximum": 9007199254740991,
                        "minimum": -9007199254740991
                      },
                      "limit_order_withdrawal_threshold": {
                        "type": "integer",
                        "default": 50000,
                        "maximum": 9007199254740991,
                        "minimum": -9007199254740991
                      }
                    }
                  },
                  {
                    "type": "object",
                    "required": [
                      "kind"
                    ],
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "take_profit"
                      },
                      "has_reversal": {
                        "type": "boolean",
                        "default": false
                      },
                      "profit_token": {
                        "enum": [
                          "token0",
                          "token1"
                        ],
                        "type": "string",
                        "default": "token0"
                      },
                      "reversal_trigger_type": {
                        "enum": [
                          "",
                          "fixed",
                          "relative"
                        ],
                        "type": "string",
                        "default": ""
                      },
                      "reversal_reposition_mode": {
                        "enum": [
                          "",
                          "anchor_tick",
                          "shift_range"
                        ],
                        "type": "string",
                        "default": ""
                      },
                      "take_profit_trigger_type": {
                        "enum": [
                          "",
                          "fixed",
                          "relative"
                        ],
                        "type": "string",
                        "default": "fixed"
                      },
                      "reversal_trigger_threshold": {
                        "type": "integer",
                        "default": 0,
                        "maximum": 9007199254740991,
                        "minimum": -9007199254740991
                      },
                      "take_profit_reposition_mode": {
                        "enum": [
                          "",
                          "anchor_tick",
                          "shift_range"
                        ],
                        "type": "string",
                        "default": "anchor_tick"
                      },
                      "take_profit_trigger_threshold": {
                        "type": "integer",
                        "default": 0,
                        "maximum": 9007199254740991,
                        "minimum": -9007199254740991
                      }
                    }
                  }
                ],
                "default": {
                  "kind": "out_of_range"
                },
                "description": "out_of_range repositions when price leaves the range; take_profit runs on the dedicated profit-taker contract; protocol_owned_liquidity is the POL strategy."
              },
              "position_id": {
                "type": "integer",
                "maximum": 9007199254740991,
                "minimum": -9007199254740991,
                "description": "LP position (NFT) id this intent applies to. Also used to auto-fetch position context."
              },
              "max_tolerance": {
                "type": "number",
                "maximum": 1000000000000000000,
                "minimum": 0,
                "multipleOf": 1,
                "description": "Max price deviation (MEV/slippage cap), 1e18-scaled: 1e18 = 100%, so 5000000000000000 = 0.5% (the default) and 50000000000000000 = 5%. Omit for the pool's default. AAA pools are floored at 5%."
              },
              "min_liquidity_ratio": {
                "type": "number",
                "maximum": 1000000000000000000,
                "minimum": 0,
                "multipleOf": 1,
                "description": "Min fraction of liquidity that must survive a rebalance, 1e18-scaled: 990000000000000000 = 99% (the default), i.e. at most 1% value loss. Omit for the default."
              }
            }
          }
        ],
        "description": "One user-facing automation intent."
      },
      "default": [],
      "description": "Intents to switch on. Leave empty when only disabling. This array cannot turn anything off: an entry with enabled: false is rejected, use `disable` instead."
    },
    "token0": {
      "type": "string",
      "description": "Pool token0 address."
    },
    "token1": {
      "type": "string",
      "description": "Pool token1 address."
    },
    "disable": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "default": [],
      "description": "Asset-manager addresses to switch off, as returned by read_asset_manager_current."
    },
    "chain_id": {
      "type": "number",
      "default": 8453,
      "description": "Chain ID: 8453 (Base), 130 (Unichain), 10 (Optimism), or 4663 (Robinhood)"
    },
    "protocol": {
      "enum": [
        "slipstream_v1",
        "slipstream_v2",
        "slipstream_v3",
        "uniswap_v3",
        "uniswap_v4",
        "metadexcl_v1",
        "slipstream",
        "staked_slipstream",
        "staked_slipstream_v2",
        "staked_slipstream_v3",
        "uniV3",
        "uniV4",
        "staked_metadexcl_v1"
      ],
      "type": "string",
      "description": "Position's DEX protocol. Only needed when position_id is omitted. Accepts the dex_protocol values the read tools return (slipstream, staked_slipstream_v3, uniV3, metadexcl_v1, staked_metadexcl_v1, ...), which imply is_staked, as well as the canonical slipstream_v1 / uniswap_v3 spellings. metadexcl_v1 is Aero CL; staked_metadexcl_v1 covers both the staked module and the wrapper."
    },
    "is_staked": {
      "type": "boolean",
      "description": "Whether the LP position is staked. Implied by a staked_* protocol value."
    },
    "position_id": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "LP position (NFT) id, as listed in assets[] by read_account_info. Supply this and the backend fetches protocol, staked flag, tokens and reward tokens for you. Strongly preferred over passing the position fields by hand."
    },
    "reward_tokens": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Staking reward token addresses."
    },
    "account_address": {
      "type": "string",
      "description": "Arcadia account address"
    }
  }
}
write_account_automations_delta output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "description",
    "valid",
    "errors",
    "warnings",
    "human_summary",
    "plan"
  ],
  "properties": {
    "diff": {
      "type": "object",
      "required": [
        "added",
        "removed",
        "updated"
      ],
      "properties": {
        "added": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "manager",
              "address",
              "enabled"
            ],
            "properties": {
              "address": {
                "type": "string"
              },
              "enabled": {
                "type": "boolean"
              },
              "manager": {
                "type": "string"
              }
            },
            "additionalProperties": false
          }
        },
        "removed": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "manager",
              "address",
              "enabled"
            ],
            "properties": {
              "address": {
                "type": "string"
              },
              "enabled": {
                "type": "boolean"
              },
              "manager": {
                "type": "string"
              }
            },
            "additionalProperties": false
          }
        },
        "updated": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "manager",
              "address",
              "enabled"
            ],
            "properties": {
              "address": {
                "type": "string"
              },
              "enabled": {
                "type": "boolean"
              },
              "manager": {
                "type": "string"
              }
            },
            "additionalProperties": false
          }
        }
      },
      "additionalProperties": false
    },
    "plan": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "manager",
          "address",
          "enabled",
          "serving_intents"
        ],
        "properties": {
          "address": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "manager": {
            "type": "string"
          },
          "strategy": {
            "type": [
              "string",
              "null"
            ]
          },
          "serving_intents": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "additionalProperties": false
      }
    },
    "valid": {
      "type": "boolean"
    },
    "errors": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "rule",
          "severity",
          "reason"
        ],
        "properties": {
          "rule": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          },
          "severity": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "description": {
      "type": "string"
    },
    "transaction": {
      "type": "object",
      "required": [
        "to",
        "data",
        "value",
        "chainId"
      ],
      "properties": {
        "to": {
          "type": "string"
        },
        "data": {
          "type": "string"
        },
        "value": {
          "type": "string"
        },
        "chainId": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "preview_only": {
      "type": "boolean"
    },
    "human_summary": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "simulation_url": {
      "type": "string"
    },
    "no_changes_needed": {
      "type": "boolean"
    },
    "tenderly_sim_status": {
      "enum": [
        "success",
        "failure",
        "unavailable"
      ],
      "type": "string"
    }
  },
  "additionalProperties": false
}
write_account_automations_delta annotations
{
  "title": "Change Account Automations (Delta)",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
dev_send
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

DEV ONLY: Sign and broadcast an unsigned transaction using a local private key (PK env var). For production, use a dedicated wallet MCP server (Fireblocks, Safe, Turnkey, etc.) instead of this tool. Takes the transaction object returned by any write_* tool and submits it onchain.

dev_send input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "to",
    "data"
  ],
  "properties": {
    "to": {
      "type": "string",
      "description": "Target contract address"
    },
    "data": {
      "type": "string",
      "description": "Encoded calldata (hex)"
    },
    "value": {
      "type": "string",
      "default": "0",
      "description": "Value in wei (default '0')"
    },
    "chain_id": {
      "type": "number",
      "default": 8453,
      "description": "Chain ID: 8453 (Base), 130 (Unichain), 10 (Optimism), or 4663 (Robinhood)"
    }
  }
}
dev_send output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "signer",
    "txHash",
    "status",
    "blockNumber",
    "gasLimit",
    "gasUsed"
  ],
  "properties": {
    "signer": {
      "type": "string"
    },
    "status": {
      "type": "string"
    },
    "txHash": {
      "type": "string"
    },
    "gasUsed": {
      "type": "number"
    },
    "gasLimit": {
      "type": "number"
    },
    "blockNumber": {
      "type": "number"
    }
  },
  "additionalProperties": false
}
dev_send annotations
{
  "title": "Sign and Send Transaction",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": true
}

Prompts

4 advertised

analyze-account

Advertised by the server during the last successful anonymous check.

Analyze an Arcadia account: health factor, positions, PnL, automation status, and recommendations.

account_address
Arcadia account address to analyze (required)
chain_id
Chain ID (default: 8453 Base)
find-yield-strategy

Advertised by the server during the last successful anonymous check.

Evaluate LP strategies on Arcadia: compare fee APY vs borrow cost, select pool, range width, and leverage.

chain_id
Chain ID (default: 8453 Base)
deposit_token
Token to deposit (e.g. USDC, WETH)
setup-automation

Advertised by the server during the last successful anonymous check.

Configure automations (compounding, claiming, rebalancing, Merkl) for an Arcadia account.

account_address
Arcadia account address (required)
chain_id
Chain ID (default: 8453 Base)
migrate-to-aero

Advertised by the server during the last successful anonymous check.

Upgrade an Arcadia account to Aero CL (MetadexCL V1): move its Slipstream positions (Aerodrome / Velodrome CL, V1 to V3) and old AERO in one transaction, then reconnect automations.

account_address
Arcadia account address (required)
chain_id
Chain ID: 8453 Base (default) or 10 Optimism

Resources

4 advertised

guide-overview

Advertised by the server during the last successful anonymous check.

Tool catalog, token/contract/lending pool addresses, asset manager addresses, account versions

guide-overview URI
arcadia://guides/overview

MIME type: text/markdown

guide-automation

Advertised by the server during the last successful anonymous check.

Intent-based automation setup: compound fees, claim rewards, add to LP, rebalance, claim Merkl

guide-automation URI
arcadia://guides/automation

MIME type: text/markdown

guide-strategies

Advertised by the server during the last successful anonymous check.

Step-by-step strategy templates: delta neutral leveraged LP, protocol owned liquidity, closing sequences, moving Slipstream positions to Aero

guide-strategies URI
arcadia://guides/strategies

MIME type: text/markdown

guide-selection

Advertised by the server during the last successful anonymous check.

Strategy evaluation framework: pool selection, range width, leverage sizing, automation combos, exit signals

guide-selection URI
arcadia://guides/selection

MIME type: text/markdown

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
2997 ms
95th percentile latency
2997 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 2997 ms · metadata changed · 38 tool(s), 4 resource(s), 0 resource template(s), 4 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http arcadia-mcp https://mcp.arcadia.finance/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add arcadia-mcp --url https://mcp.arcadia.finance/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable arcadia-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "arcadia-mcp": {
      "url": "https://mcp.arcadia.finance/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "arcadia-mcp": {
      "type": "streamableHttp",
      "url": "https://mcp.arcadia.finance/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start arcadia-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "arcadia-mcp": {
      "type": "http",
      "url": "https://mcp.arcadia.finance/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http arcadia-mcp https://mcp.arcadia.finance/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://mcp.arcadia.finance/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "arcadia-mcp": {
      "serverUrl": "https://mcp.arcadia.finance/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Arcadia Finance MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.