Set up the sendstables MCP server

Give any MCP client tools to send USDC and swap chains from your wallet. Streamable HTTP at https://sendstables.com/api/mcp, with a bearer key you control.

Quick answer

Connect any MCP client to sendstables in three steps:

  1. Create an agent key. Sign in to sendstables, open the agents page and create a key with the spending limits you want.
  2. Add the MCP server. Add https://sendstables.com/api/mcp to your MCP client as a Streamable HTTP server with the header "Authorization: Bearer <key>".
  3. Ask your agent. Ask it to check balances, quote a transfer, send USDC or swap chains.

Add the server to your client

Claude Code
Terminal
claude mcp add --transport http sendstables https://sendstables.com/api/mcp \
  --header "Authorization: Bearer <your sendstables key>"
Claude Desktop

Add to claude_desktop_config.json. Uses the mcp-remote bridge for the Authorization header (needs Node.js).

claude_desktop_config.json
{
  "mcpServers": {
    "sendstables": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://sendstables.com/api/mcp",
        "--header",
        "Authorization:${SENDSTABLES_AUTH}"
      ],
      "env": {
        "SENDSTABLES_AUTH": "Bearer <your sendstables key>"
      }
    }
  }
}
Cursor

Add to ~/.cursor/mcp.json (or .cursor/mcp.json in a project).

mcp.json
{
  "mcpServers": {
    "sendstables": {
      "url": "https://sendstables.com/api/mcp",
      "headers": {
        "Authorization": "Bearer <your sendstables key>"
      }
    }
  }
}
Any Streamable HTTP client

The standard mcpServers shape with a URL and headers:

MCP config
{
  "mcpServers": {
    "sendstables": {
      "url": "https://sendstables.com/api/mcp",
      "headers": {
        "Authorization": "Bearer <your sendstables key>"
      }
    }
  }
}

Replace <your sendstables key> with your key. We only store a hash of it. Never paste a key into a shared repo or chat.

Ask your agent

  • “Move 50 USDC from Base to Solana.”
  • “Move 20 USDC from Base to my Arbitrum wallet.”
  • “What are my USDC balances on every chain?”
  • “Quote sending 200 USDC from Ethereum to my Stellar wallet.”

A good agent calls quote_transfer first and shows you the fee and amount before sending.

Tool reference

ToolInputDescriptionMoves funds
list_chains–Lists every supported chain with the chain key to use in other tools, and whether this key can send from it (EVM chains) or to it (every chain that can receive; destination: false marks the rest).No
get_addresses–The user's own EVM, Solana and Stellar addresses, and whether agent signing is enabled (EVM wallets only in this version).No
get_balances–The user's non-zero USDC balances per chain, plus the total.No
get_limits–This key's spending limits and how much is left today.No
quote_transferto, amount, from?, recipient?Prices a transfer without moving funds: fee breakdown, amount received, and whether limits and balance allow it.No
send_usdcto, recipient, amount, idempotency_key, from?, max_fee_usd?Sends USDC from the user's EVM wallet to any supported chain (or to another address on the same chain, cost-only fee), within the key's limits. By default it sends only to the user's own wallets; third-party recipients are an opt-in mode (off).Yes, within limits
swap_chainsto, amount, idempotency_key, from?, max_fee_usd?Moves the user's USDC from an EVM chain to their own wallet on another chain (including Solana and Stellar) via CCTP, within the key's limits.Yes, within limits
get_transferidReturns a transfer's status, including delivery by sendstables' delivery worker (Circle forwarding or our relayer).No
resume_transferidFinishes only the missing source-chain steps of a transfer that needs attention (already authorised).Yes, within limits
list_transferslimit?Lists recent agent transfers, newest first.No
  • ? marks optional arguments. amount is a decimal string: the total debited, fees included.
  • idempotency_key makes retries safe; use a fresh one per transfer.
  • Chain arguments use list_chains keys (e.g. Base, Solana, World_Chain). After sending, poll get_transfer until delivered.

New to this? Read how AI agent payments work or learn about Circle's CCTP.