MCP server reference

Arvo's MCP server gives an agent four tools: one to price a swap, two to read the vault, and one to trade. Every call is scoped to the vault you bound at approval time, so an agent can only move funds you explicitly handed it.

https://arvo-eth.vercel.app/api/mcp/resources

Streamable HTTP, OAuth 2.1 with PKCE. Connecting an agent walks through the handshake.

The tools

All parameters are required — none of the schemas declare optionals. Token amounts are whole units (1.5 USDC, not 1500000); Arvo applies each token's decimals server-side.

post-trade-intent

Submits a trade for execution. The agent signs the trade with its own wallet, Arvo records the intent, submits it on-chain and queues it for risk assessment and insurance.

ParameterTypeDescription
chainIdnumberChain the trade runs on.
tokenInstringAddress of the token being sold.
tokenOutstringAddress of the token being bought.
amountInnumberAmount of tokenIn to swap, in whole units — Arvo converts to the token's decimals.
minAmountOutnumberSlippage floor: the trade must return at least this much tokenOut.
deadlinestringISO 8601 timestamp after which the intent is no longer valid.
maxPremiumnumberMost the agent will pay for insurance, in USDC.
minCoveragenumberShare of the trade that must be covered, 1-100.
minCoverageDurationnumberHow long the coverage must hold, in seconds.

Returns — The stored trade intent and the on-chain transaction hash. If the chain submission fails the intent is rolled back and nothing is queued.

  • The vault is not a parameter — the trade always runs against the vault bound at approval time.
  • The agent's key signs the payload, so a trade cannot be forged on its behalf.

get-token-balance

Reads how much of one token the bound vault currently holds.

ParameterTypeDescription
chainIdnumberChain to read the balance on.
tokenAddressstringAddress of the token to check.

Returns — The vault's balance of that token.

  • Uses the bound vault; there is no vault parameter to override it.

get-all-tokens

Lists every token a vault holds, for surveying a portfolio before trading.

ParameterTypeDescription
chainIdnumberChain to read the vault on.
vaultAddressstringVault to inspect — pass the vault bound to the agent.

Returns — The token addresses held by that vault.

  • Unlike the other tools this one reads whichever vault address you pass, so pass your own.

get-quote

Prices a swap through Uniswap before committing to it. Use it to fill in minAmountOut on post-trade-intent.

ParameterTypeDescription
chainIdnumberChain to price the swap on.
tokenInstringAddress of the token being sold.
tokenOutstringAddress of the token being bought.
amountInnumberAmount of tokenIn to price.

Returns — The Uniswap quote for the pair, quoted for the bound vault.

  • Read-only: quoting costs nothing and moves no funds.

Chain IDs

Ethereum
1
Sepolia
11155111
Base
8453
Arbitrum
42161
Optimism
10

A typical run

  1. get-all-tokens to see what the vault holds.
  2. get-token-balance to size the trade against one token.
  3. get-quote to price the swap and derive a sane minAmountOut.
  4. post-trade-intent to sign and submit it with the coverage terms you want.

Errors

  • Agent not found for the provided userId and agentId — the approval behind this token is gone. Reconnect the server and approve again.
  • API returned 4xx / 5xx — the call reached Arvo but the vault or trade request was rejected; the message carries the status.
  • 401 on every tool — the access token expired. Tokens last an hour; reconnecting mints a new one.

Tools are scoped to one vault per agent, and every trade is signed by the agent's own wallet before it is insured and executed.