Skip to main content
RAVN runs a Model Context Protocol server that exposes the Integrator API as native tools. Point any MCP-speaking client at it, and your agent can discover and call RAVN without you writing any HTTP glue code. Endpoint: https://app.ravn.exchange/api/mcp Transport: Streamable HTTP Auth: None required. Every tool works anonymously; pass your own API key as the optional apiKey argument on any tool for a higher rate limit (see Authentication). Cost: Free. These tools call the same free /v1/* endpoints as the REST API, not the paid x402 endpoints.
Sanity-checking the endpoint with curl or a browser? A plain GET returns 405 Method Not Allowed — that’s expected, not broken. Streamable HTTP MCP servers only speak POST; use an MCP client to actually call it.

Connect a client

Any client that supports remote MCP servers over Streamable HTTP works the same way; there’s nothing to install locally.

Try it: one prompt, one loop

With the config above added, prompt your client with something like:
Swap 0.01 ETH on Ethereum to USDC on Base for 0x1234…5678, my wallet address.
A capable MCP client resolves that into:
  1. ravn_quote({ inputChainId: 1, outputChainId: 8453, inputToken: "0xEeee...EEeE", outputToken: "<Base USDC address>", inputAmount: "10000000000000000", userAddress: "0x1234...5678" }) → returns a quoteToken plus the priced route.
  2. ravn_execute({ quoteToken }) → returns { executionType: "TRANSACTION", transaction: {...} } for this route (0x Gasless/RFQ-style routes instead return SIGNATURE).
  3. Your agent signs and sends the returned transaction with its own wallet — RAVN never touches it.
  4. ravn_status({ quoteToken, ref: <statusRef from step 2> }), polled until status is terminal (success, refunded, or failed).
No other setup, no API key, no payment. See Execution Types for what transaction looks like for each executionType, and Signing: who holds the wallet? for how an autonomous agent handles step 3 without a human clicking “confirm.”

Tools

ravn_quote

Get a swap quote, same-chain or cross-chain, across all 16 supported chains including native Bitcoin and Solana as source or destination. Returns a quoteToken to pass to ravn_execute.

ravn_execute

Turn a quoteToken from ravn_quote into an execution payload. Returns one of three shapes, tagged by executionType:
  • TRANSACTION: sign and broadcast yourself
  • SIGNATURE: sign, RAVN submits on your behalf
  • DEPOSIT: send the input asset to a given address (the common case for Bitcoin-source swaps; see ravn_btc_prepare_send below)
RAVN never takes custody of funds under any of the three; you always sign or send from your own wallet.

ravn_status

Poll a swap’s status. Status is authoritative where the venue exposes it. A few venues (Rift, Jupiter, Bebop, 0x Gasless) report "unknown" honestly rather than guessing. Check the response’s tracking field.

ravn_health

No arguments. Liveness check across every venue RAVN routes through, useful to call before a swap if you want to know whether a route is degraded ahead of time.

ravn_btc_prepare_send

Turns a DEPOSIT-type ravn_execute result into a ready-to-sign Bitcoin transaction (a PSBT), so your agent doesn’t have to implement UTXO selection or fee estimation itself. UTXOs and the fee rate are fetched from the public mempool.space API, with no keys and no auth required.
RAVN never sees or handles a private key at any point. The response is an unsigned PSBT (psbtBase64): sign it with your own wallet’s key and broadcast it yourself.
Only one signature is ever needed. Every RAVN Bitcoin-source venue (Garden, Chainflip, NEAR Intents, Rift) resolves to a plain, single-recipient payment, not a multi-wallet UTXO-co-signing ceremony some other aggregators require for their BTC routes.

Chain IDs

Bitcoin and Solana use negative sentinel IDs rather than their (non-existent, in Bitcoin’s case) EVM chain IDs. Don’t assume 0 or a positive placeholder.

A full loop, end to end

  1. ravn_quote: get a quoteToken
  2. ravn_execute: get back TRANSACTION / SIGNATURE / DEPOSIT
    • If DEPOSIT and the input asset is Bitcoin: ravn_btc_prepare_send → sign the PSBT with your own wallet → broadcast
    • Otherwise: sign/send with your own wallet per the returned payload
  3. ravn_status: poll until terminal