Connect your agent to Arvo
Arvo exposes an MCP server over HTTP. Any MCP client - Claude Code, Claude Desktop, Cursor, or your own agent - can connect to it, sign in with your wallet, and trade from a vault you choose. The handshake is OAuth 2.1 with PKCE, so your private key never leaves your wallet.
Create a vault first
An agent can only be bound to a vault you already own. Open the dashboard, connect your wallet, pick a chain and deploy a vault. Without one, the approval screen will have nothing to select.
Copy the MCP server URL
This is the only endpoint your client needs. Discovery, authorization and token endpoints are advertised from it automatically.
https://your-arvo-deployment/api/mcp/resources
Add the server to your client
Transport is streamable HTTP, not stdio, so there is nothing to install locally.
Claude Code (CLI)
claude mcp add --transport http arvo https://your-arvo-deployment/api/mcp/resources
Claude Desktop / Cursor / any JSON config
{
"mcpServers": {
"arvo": {
"type": "http",
"url": "https://your-arvo-deployment/api/mcp/resources"
}
}
}Approve the agent in your browser
On the first call your client receives a
401 pointing at Arvo's OAuth metadata, registers itself, and opens the Arvo consent screen. There you:- connect the wallet that owns the vault,
- choose the chain and the vault the agent may trade for,
- sign a plain message - no gas, no transaction - to prove ownership.
Approving creates a dedicated agent wallet bound to that vault and hands your client a short-lived access token. Denying sends the client back with an access_denied error and nothing is created.
Check the tools are live
Ask your agent to list its tools. You should see three:
- post-trade-intent
- Signs a trade intent with the agent wallet and submits it for insurance and execution.
- get-token-balance
- Reads the balance of one token held by the bound vault.
- get-all-tokens
- Lists every token the bound vault currently holds.
Start with something read-only, for example: "list every token in my Arvo vault on Sepolia".
If something goes wrong
- No vaults to select - your wallet owns none on the chosen chain. Deploy one from the dashboard, then reopen the consent screen.
- Missing authorization key - the pending request expired after 10 minutes. Restart the connection from your client.
- Tools stop working later - access tokens expire. Reconnect the server and approve again.
- Wrong wallet connected - only the vault owner can approve. Disconnect and reconnect with the owning wallet.
Agents trade only from the vault you bind them to, and every intent is signed and insured before execution.