Skip to content

Arcadia Finance

io.github.arcadia-finance/mcp-serverarcadia-financestreamable-httpv0.6.0Scanned

Concentrated liquidity on Uniswap/Aero (rebalance, compound, leverage) or single-sided lending.

38 tools: 1 can delete or cancel things, 1 do something that can't be undone, 17 change things and 19 only read.

Tools: 1 delete, 1 irreversible, 17 write, 19 read.
  • Reads private data · 0
  • Reads text others write · 30
  • Can send data out · 2
  • 9 findings

Tools listed without sign-in. Remote posture

Anlyon alternative

19 of these tools change something. Run those as governed actions.

Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.

Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.

Import an OpenAPI spec →

Tools

Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.

38 tools

Deletes or cancels 1Claude Code: deny
  • dev_sendDEV ONLY: Sign and broadcast an unsigned transaction using a local private key (PK env var).Reads text others writeCan send data outNo findings

    Why it is in this group

    • The name "dev_send" says "send": a word for sending, and what is sent cannot be taken back.
    • The input addresses people (input.to): what it sends cannot be taken back.
    • The server marks it destructive (destructiveHint: true).

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    • outboundThe name "dev_send" says "send": it sends or publishes something to other people.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Sign and Send Transaction
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
Can't be undone 1Claude Code: ask
  • write_account_borrowBuild an unsigned transaction to borrow from an Arcadia lending pool against account collateral.Can send data out3 findings

    Why it is in this group

    • The name "write_account_borrow" says "write": a word for a change.
    • The input addresses people (input.to): what it sends cannot be taken back.

    What it can reach

    • outboundThe input takes a destination (input.to): what the tool writes goes there.

    Findings

    • Warn

      The input schema at properties.pool_address.description contains a 42-character base64 string.

      Matched text

      inputSchema.properties.pool_address.description: "...nding pool: LP_WETH=0x803ea69c7e87D1d6C86adeB40CB636cC0E6B98E2, LP_USDC=0x3ec4a293..."

      What this check looks for
    • Warn

      The input schema at properties.pool_address.description contains a 42-character base64 string.

      Matched text

      inputSchema.properties.pool_address.description: "...cC0E6B98E2, LP_USDC=0x3ec4a293Fb906DD2Cd440c20dECB250DeF141dF1, LP_CBBTC=0xa37E9b4..."

      What this check looks for
    • Warn

      The input schema at properties.pool_address.description contains a 42-character base64 string.

      Matched text

      inputSchema.properties.pool_address.description: "...DeF141dF1, LP_CBBTC=0xa37E9b4369dc20940009030BfbC2088F09645e3B"

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Build Borrow Transaction
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
Changes things 17Claude Code: ask
  • write_account_add_liquidityMulti-step flash-action: atomically combines [deposit from wallet] + [use account collateral] + [swap to optimal ratio] + [mint LP] + [borrow if leveraged] in ONE transaction.Reads text others writeNo findings

    Why it is in this group

    • The name "write_account_add_liquidity" says "write": a word for a change.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    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). 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.

    Annotations the server declares

    • title: Build Add Liquidity Transaction
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • write_account_aero_upgradeUpgrade 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 …Reads text others write1 finding

    Why it is in this group

    • The name "write_account_aero_upgrade" says "write": a word for a change.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.

    Findings

    • Info

      The description is 2,748 characters long, over the 2,000 this check looks for.

      Matched text

      description ends: "...on account_unhealthy or exposure_limit; report those reasons and do not rebuild."

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Build Aero Upgrade Transaction
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • write_account_automationsConfigure an account's automations from a list of intents and return the unsigned setAssetManagers transaction.Reads text others write1 finding

    Why it is in this group

    • The name "write_account_automations" says "write": a word for a change.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.

    Findings

    • Info

      The description is 3,244 characters long, over the 2,000 this check looks for.

      Matched text

      description ends: "...ll read_asset_manager_intents first to see which intents this account can enable."

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Configure Account Automations
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • write_account_automations_deltaApply an explicit change to an account's automations and return the unsigned setAssetManagers transaction.Reads text others write1 finding

    Why it is in this group

    • The name "write_account_automations_delta" says "write": a word for a change.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.

    Findings

    • Info

      The description is 2,517 characters long, over the 2,000 this check looks for.

      Matched text

      description ends: "..., and a token list must not be empty or name a token the position does not yield."

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Change Account Automations (Delta)
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • write_account_closeAtomic flash-action that closes an Arcadia account position in ONE transaction.Reads text others writeNo findings

    Why it is in this group

    • The name "write_account_close" says "write": a word for a change.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Build Close Position Transaction
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • write_account_createBuild an unsigned transaction to create a new Arcadia account via the Factory contract.No findings

    Why it is in this group

    • The name "write_account_create" says "write": a word for a change.
    Description, as the server wrote it
    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).

    Annotations the server declares

    • title: Build Create Account Transaction
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • write_account_deleverageMulti-step flash-action: sells account collateral to the debt token and repays in one atomic transaction: no wallet tokens needed.Reads text others writeNo findings

    Why it is in this group

    • The name "write_account_deleverage" says "write": a word for a change.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Build Deleverage Transaction
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • write_account_depositBuild an unsigned transaction to deposit assets into an Arcadia account as collateral.No findings

    Why it is in this group

    • The name "write_account_deposit" says "write": a word for a change.
    Description, as the server wrote it
    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).

    Annotations the server declares

    • title: Build Deposit Transaction
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • write_account_remove_liquidityFlash-action: PARTIALLY decreases liquidity from an LP position.Reads text others writeNo findings

    Why it is in this group

    • The name "write_account_remove_liquidity" says "write": a word for a change.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Build Remove Liquidity Transaction
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • write_account_repayRepay debt to an Arcadia lending pool using tokens from the wallet (requires ERC20 allowance).3 findings

    Why it is in this group

    • The name "write_account_repay" says "write": a word for a change.

    Findings

    • Warn

      The input schema at properties.pool_address.description contains a 42-character base64 string.

      Matched text

      inputSchema.properties.pool_address.description: "...ress. Base: LP_WETH=0x803ea69c7e87D1d6C86adeB40CB636cC0E6B98E2, LP_USDC=0x3ec4a293..."

      What this check looks for
    • Warn

      The input schema at properties.pool_address.description contains a 42-character base64 string.

      Matched text

      inputSchema.properties.pool_address.description: "...cC0E6B98E2, LP_USDC=0x3ec4a293Fb906DD2Cd440c20dECB250DeF141dF1, LP_CBBTC=0xa37E9b4..."

      What this check looks for
    • Warn

      The input schema at properties.pool_address.description contains a 42-character base64 string.

      Matched text

      inputSchema.properties.pool_address.description: "...DeF141dF1, LP_CBBTC=0xa37E9b4369dc20940009030BfbC2088F09645e3B"

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Build Repay Transaction
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • write_account_stakeFlash-action: stake, unstake, or claim rewards for an LP position in one atomic transaction.Reads text others writeNo findings

    Why it is in this group

    • The name "write_account_stake" says "write": a word for a change.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Build Position Action Transaction
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • write_account_swapFlash-action: swaps assets within an Arcadia account in one atomic transaction.Reads text others writeNo findings

    Why it is in this group

    • The name "write_account_swap" says "write": a word for a change.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Build Swap Transaction
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • write_account_withdrawBuild an unsigned transaction to withdraw assets from an Arcadia account to the owner's wallet.No findings

    Why it is in this group

    • The name "write_account_withdraw" says "write": a word for a change.
    Description, as the server wrote it
    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).

    Annotations the server declares

    • title: Build Withdraw Transaction
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • write_pool_depositBuild an unsigned deposit transaction into an Arcadia lending tranche (ERC-4626).No findings

    Why it is in this group

    • The name "write_pool_deposit" says "write": a word for a change.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Build Pool Deposit Transaction
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • write_pool_redeemBuild an unsigned redeem transaction to withdraw from an Arcadia lending tranche (ERC-4626).No findings

    Why it is in this group

    • The name "write_pool_redeem" says "write": a word for a change.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Build Pool Redeem Transaction
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • write_wallet_approveBuild an unsigned approval transaction.No findings

    Why it is in this group

    • The name "write_wallet_approve" says "write": a word for a change.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Build Approve Transaction
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • write_wallet_upgrade_veloUpgrade 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 depositLiqu…Reads text others writeNo findings

    Why it is in this group

    • The name "write_wallet_upgrade_velo" says "write": a word for a change.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    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).

    Annotations the server declares

    • title: Build VELO Upgrade Transactions
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
Only reads 19Show 19 read-only tools
  • read_account_aero_upgradeWhich 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.Reads text others writeNo findings

    Why it is in this group

    • The name "read_account_aero_upgrade" says "read": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Check Aero Upgrade Candidates
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • read_account_historyGet an Arcadia account's historical net value over time.Reads text others writeNo findings

    Why it is in this group

    • The name "read_account_history" says "read": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Get Account History
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • read_account_infoGet full overview of an Arcadia account: health factor, collateral value, debt, deposited assets, liquidation price, and automation status.Reads text others writeNo findings

    Why it is in this group

    • The name "read_account_info" says "read": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Get Account Info
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • read_account_pnlGet PnL (cost basis) and yield earned for an Arcadia account.Reads text others writeNo findings

    Why it is in this group

    • The name "read_account_pnl" says "read": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Get Account PnL
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • read_asset_listList supported collateral assets on Arcadia.Reads text others writeNo findings

    Why it is in this group

    • The name "read_asset_list" says "read": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: List Supported Assets
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • read_asset_manager_currentRead which asset managers are currently enabled on an account, with their decoded on-chain configuration.Reads text others writeNo findings

    Why it is in this group

    • The name "read_asset_manager_current" says "read": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Read Current Account Automations
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • read_asset_manager_intentsList the automation intents Arcadia supports, with the parameters each one accepts.Reads text others writeNo findings

    Why it is in this group

    • The name "read_asset_manager_intents" says "read": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: List Available Automations
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • read_asset_pricesGet USD prices for one or more asset addresses.Reads text others writeNo findings

    Why it is in this group

    • The name "read_asset_prices" says "read": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Get USD prices for one or more asset addresses. Pass a single address or comma-separated addresses. Returns a price map keyed by address.

    Annotations the server declares

    • title: Get Asset Prices
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • read_guidesGet Arcadia workflow guides and reference documentation.Reads text others writeNo findings

    Why it is in this group

    • The name "read_guides" says "read": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    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).

    Annotations the server declares

    • title: Get Guide
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • read_point_leaderboardGet the Arcadia points leaderboard (paginated).Reads text others writeNo findings

    Why it is in this group

    • The name "read_point_leaderboard" says "read": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Get the Arcadia points leaderboard (paginated). For a specific wallet's points balance, use read_wallet_points.

    Annotations the server declares

    • title: Get Points Leaderboard
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • read_pool_infoGet detailed info for a single lending pool including APY history over time.Reads text others writeNo findings

    Why it is in this group

    • The name "read_pool_info" says "read": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Get Pool Info
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • read_pool_listList all Arcadia lending pools: TVL, utilization, available liquidity.Reads text others writeNo findings

    Why it is in this group

    • The name "read_pool_list" says "read": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: List Lending Pools
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • read_strategy_infoGet 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.Reads text others writeNo findings

    Why it is in this group

    • The name "read_strategy_info" says "read": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    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%).

    Annotations the server declares

    • title: Get Strategy Info
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • read_strategy_listGet Arcadia LP strategies.Reads text others writeNo findings

    Why it is in this group

    • The name "read_strategy_list" says "read": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Get Strategies
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • read_strategy_recommendationGet a rebalancing recommendation for an Arcadia account: suggests asset changes to optimize yield.Reads text others writeNo findings

    Why it is in this group

    • The name "read_strategy_recommendation" says "read": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Get Recommendation
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • read_wallet_accountsList all Arcadia accounts owned by a wallet address.Reads text others writeNo findings

    Why it is in this group

    • The name "read_wallet_accounts" says "read": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: List Wallet Accounts
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • read_wallet_allowancesCheck ERC20 token allowances for a spender address.Reads text others writeNo findings

    Why it is in this group

    • The name "read_wallet_allowances" says "read": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Get Token Allowances
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • read_wallet_balancesGet native ETH and ERC20 token balances for a wallet address.Reads text others writeNo findings

    Why it is in this group

    • The name "read_wallet_balances" says "read": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Get Wallet Balances
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • read_wallet_pointsGet Arcadia points balance for a specific wallet address.Reads text others writeNo findings

    Why it is in this group

    • The name "read_wallet_points" says "read": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Get Arcadia points balance for a specific wallet address.

    Annotations the server declares

    • title: Get Wallet Points
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Exfil surface

Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.

No private-data, untrusted-input, outbound path in this server alone: no tool is tagged private-data.

Reads private data0
Reads files, mail, messages, databases, secrets, calendars or repositories.
Can send data out2
Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.

Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.

Remote posture

What anyone on the internet sees at the remote endpoint: an anonymous initialize and tools/list, and the public OAuth metadata.

Tools listed without sign-in

Looked at Oct 22, 2026, 14:56 UTC, unchanged since Oct 22, 2026. No credentials were sent and no tool was called. What is looked at.

Reachable
yes
HTTP status of an anonymous initialize
200
tools/list served without credentials
yes
Tools that change things, listed without credentials
19
Protocol version
2025-06-18
WWW-Authenticate on 401
not observed
resource_metadata in WWW-Authenticate
not observed
RFC 9728 protected resource metadata
not observed
Authorization servers
not observed
Legacy HTTP+SSE transport
no
Dynamic client registration
not observed
Client ID metadata documents
not observed
  • HighThe whole server

    The endpoint served tools/list without credentials, and the list has 19 tools that change things (1 destructive, 1 irreversible, 17 write). Whether a call also works without credentials was not tested: tools are never called.

    Matched text

    https://mcp.arcadia.finance/mcp: tools/list returned 38 tools to an anonymous client, including dev_send (destructive), write_account_borrow (irreversible), write_account_create (write), write_account_deposit (write), write_account_withdraw (write) and 14 more

    What this check looks for

Findings

Matches of fixed checks, with the text they matched.

6 warn3 info
  • The input schema at properties.pool_address.description contains a 42-character base64 string.

    Matched text

    inputSchema.properties.pool_address.description: "...nding pool: LP_WETH=0x803ea69c7e87D1d6C86adeB40CB636cC0E6B98E2, LP_USDC=0x3ec4a293..."

    What this check looks for
  • The input schema at properties.pool_address.description contains a 42-character base64 string.

    Matched text

    inputSchema.properties.pool_address.description: "...cC0E6B98E2, LP_USDC=0x3ec4a293Fb906DD2Cd440c20dECB250DeF141dF1, LP_CBBTC=0xa37E9b4..."

    What this check looks for
  • The input schema at properties.pool_address.description contains a 42-character base64 string.

    Matched text

    inputSchema.properties.pool_address.description: "...DeF141dF1, LP_CBBTC=0xa37E9b4369dc20940009030BfbC2088F09645e3B"

    What this check looks for
  • The input schema at properties.pool_address.description contains a 42-character base64 string.

    Matched text

    inputSchema.properties.pool_address.description: "...ress. Base: LP_WETH=0x803ea69c7e87D1d6C86adeB40CB636cC0E6B98E2, LP_USDC=0x3ec4a293..."

    What this check looks for
  • The input schema at properties.pool_address.description contains a 42-character base64 string.

    Matched text

    inputSchema.properties.pool_address.description: "...cC0E6B98E2, LP_USDC=0x3ec4a293Fb906DD2Cd440c20dECB250DeF141dF1, LP_CBBTC=0xa37E9b4..."

    What this check looks for
  • The input schema at properties.pool_address.description contains a 42-character base64 string.

    Matched text

    inputSchema.properties.pool_address.description: "...DeF141dF1, LP_CBBTC=0xa37E9b4369dc20940009030BfbC2088F09645e3B"

    What this check looks for
Show 3 more findings

History

Changes to its tool definitions and to its remote endpoint, newest first.

  1. Tools3 added, 35 changed.+3 added~35 changedView diff

Install

Pinned to version 0.6.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http arcadia-finance https://mcp.arcadia.finance/mcp
claude mcp add --transport http arcadia-finance https://mcp.arcadia.finance/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__arcadia-finance__read_account_info",
      "mcp__arcadia-finance__read_account_history",
      "mcp__arcadia-finance__read_account_pnl",
      "mcp__arcadia-finance__read_pool_list",
      "mcp__arcadia-finance__read_pool_info",
      "mcp__arcadia-finance__read_asset_list",
      "mcp__arcadia-finance__read_asset_prices",
      "mcp__arcadia-finance__read_strategy_list",
      "mcp__arcadia-finance__read_strategy_info",
      "mcp__arcadia-finance__read_strategy_recommendation",
      "mcp__arcadia-finance__read_point_leaderboard",
      "mcp__arcadia-finance__read_guides",
      "mcp__arcadia-finance__read_wallet_balances",
      "mcp__arcadia-finance__read_wallet_allowances",
      "mcp__arcadia-finance__read_wallet_accounts",
      "mcp__arcadia-finance__read_wallet_points",
      "mcp__arcadia-finance__read_asset_manager_intents",
      "mcp__arcadia-finance__read_asset_manager_current",
      "mcp__arcadia-finance__read_account_aero_upgrade"
    ],
    "ask": [
      "mcp__arcadia-finance__write_account_create",
      "mcp__arcadia-finance__write_account_deposit",
      "mcp__arcadia-finance__write_account_withdraw",
      "mcp__arcadia-finance__write_account_borrow",
      "mcp__arcadia-finance__write_account_repay",
      "mcp__arcadia-finance__write_account_add_liquidity",
      "mcp__arcadia-finance__write_account_remove_liquidity",
      "mcp__arcadia-finance__write_account_swap",
      "mcp__arcadia-finance__write_account_deleverage",
      "mcp__arcadia-finance__write_account_stake",
      "mcp__arcadia-finance__write_account_close",
      "mcp__arcadia-finance__write_account_aero_upgrade",
      "mcp__arcadia-finance__write_wallet_approve",
      "mcp__arcadia-finance__write_wallet_upgrade_velo",
      "mcp__arcadia-finance__write_pool_deposit",
      "mcp__arcadia-finance__write_pool_redeem",
      "mcp__arcadia-finance__write_account_automations",
      "mcp__arcadia-finance__write_account_automations_delta"
    ],
    "deny": [
      "mcp__arcadia-finance__dev_send"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as arcadia-finance. Review it before you use it.

Capability tags behind 31 rules
  • mcp__arcadia-finance__read_account_info untrusted-input
  • mcp__arcadia-finance__read_account_history untrusted-input
  • mcp__arcadia-finance__read_account_pnl untrusted-input
  • mcp__arcadia-finance__read_pool_list untrusted-input
  • mcp__arcadia-finance__read_pool_info untrusted-input
  • mcp__arcadia-finance__read_asset_list untrusted-input
  • mcp__arcadia-finance__read_asset_prices untrusted-input
  • mcp__arcadia-finance__read_strategy_list untrusted-input
  • mcp__arcadia-finance__read_strategy_info untrusted-input
  • mcp__arcadia-finance__read_strategy_recommendation untrusted-input
  • mcp__arcadia-finance__read_point_leaderboard untrusted-input
  • mcp__arcadia-finance__read_guides untrusted-input
  • mcp__arcadia-finance__read_wallet_balances untrusted-input
  • mcp__arcadia-finance__read_wallet_allowances untrusted-input
  • mcp__arcadia-finance__read_wallet_accounts untrusted-input
  • mcp__arcadia-finance__read_wallet_points untrusted-input
  • mcp__arcadia-finance__read_asset_manager_intents untrusted-input
  • mcp__arcadia-finance__read_asset_manager_current untrusted-input
  • mcp__arcadia-finance__read_account_aero_upgrade untrusted-input
  • mcp__arcadia-finance__write_account_borrow outbound
  • mcp__arcadia-finance__write_account_add_liquidity untrusted-input
  • mcp__arcadia-finance__write_account_remove_liquidity untrusted-input
  • mcp__arcadia-finance__write_account_swap untrusted-input
  • mcp__arcadia-finance__write_account_deleverage untrusted-input
  • mcp__arcadia-finance__write_account_stake untrusted-input
  • mcp__arcadia-finance__write_account_close untrusted-input
  • mcp__arcadia-finance__write_account_aero_upgrade untrusted-input
  • mcp__arcadia-finance__write_wallet_upgrade_velo untrusted-input
  • mcp__arcadia-finance__write_account_automations untrusted-input
  • mcp__arcadia-finance__write_account_automations_delta untrusted-input
  • mcp__arcadia-finance__dev_send untrusted-input, outbound

Pin

Keep the decision: fail CI when the tools change, follow every change, or show a badge.

Pin in CI

Fail a build when the tools you reviewed are not the tools the server serves today.

curl -s "https://anlyon.dev/api/v1/servers/io.github.arcadia-finance/mcp-server/verify?hash=876871bee37158a9bc61c074bb83a6daabe894cad54452a3454bc9b467dbc11a" | jq -e '.changed == false'

Pinned hash 876871bee371, from Oct 22, 2026, 00:18 UTC.

Watch

Get told when its tools change: a new tool, a new description, a new class.

https://anlyon.dev/servers/io.github.arcadia-finance/mcp-server/changes.xml

An Atom feed. Works in any feed reader or Slack's RSS app.

Badge

anlyon.dev badge for io.github.arcadia-finance/mcp-server
[![anlyon.dev](https://anlyon.dev/badge/io.github.arcadia-finance/mcp-server.svg)](https://anlyon.dev/servers/io.github.arcadia-finance/mcp-server)

Source: MCP Registry · repository. Synced Oct 22, 2026, 00:17 UTC.