DOCS
Vortr is an agent-first, non-custodial DEX on Base, with swaps routed through 0x. The swap runs in your agent over the Vortr MCP — the website is a read-only showcase, and you sign with your own wallet. This page documents both — start with For Humans below, or jump to For Agents.
DRIVE IT WITH YOUR AGENT.
What Vortr is
Vortr is an agent-first, non-custodial swap on Base. It prices and builds a trade through the 0x aggregator; you (or your agent) sign it with your own wallet. Vortr never holds your funds — you sign every trade yourself, and settlement happens directly on Base.
The swap executes in your agent, over the Vortr MCP — not a browser wallet form. This page is a read-only showcase: live quotes, the price chart, and the real Base-swaps feed.
Supported Base assets include native ETH, WETH, USDC, USDT, DAI, cbBTC, cbETH, USDe, and AERO.
How to swap
A human swaps by driving Vortr through an agent (Claude, Hermes, any MCP client). Add the connector once, then ask in plain language — “swap 1000 USDC for WETH on Base.”
- 1Add the Vortr MCP to your agent — a one-line remote connector, no install, no secret. See For Agents → Add it →
- 2Ask for a swap in plain language. The agent calls
get_quote→build_swapand shows you the rate, minimum received, price impact, and the real route. - 3Sign it. Your agent signs the prepared transaction with your own wallet — via the
@vortr/walletsigner or your agent's wallet. Vortr never signs; that's the only place anything is ever signed.
New to MCP? See the agent setup →
The live data is real
Everything on the swap showcase is real on-chain / market data, not mock numbers:
- Prices, route & firm calldata0x aggregator
- Price chart (OHLCV) + the live Base-swaps feedGeckoTerminal
- USD valuesDefiLlama
Common questions
- What does non-custodial mean here?
- Your keys, your funds. Vortr never holds, touches, or rehypothecates your assets — it only prices and prepares a transaction that you (or your agent) sign. No deposit, no withdrawal, no Vortr account.
- Why is there no "connect wallet" on the site?
- Vortr is agent-first. The web is a read-only showcase — live quotes, the price chart, and the real Base-swaps feed. The actual swap runs in your agent over the Vortr MCP, signed by your own wallet (or the @vortr/wallet signer), so the website never needs to touch a wallet.
- What is gas paid in?
- Gas is paid in ETH on Base. Base is a low-fee Coinbase L2, so network fees are typically a few cents.
- How does slippage protect me?
- Your quote sets a minimum-received floor (default tolerance 0.25%, editable). If the price moves past that floor before your trade lands, the swap reverts instead of filling at a worse rate.
- Is the "Live swaps" feed real?
- Yes — it shows real on-chain Base swaps (via GeckoTerminal). One honest caveat: on-chain data cannot certify whether a given swap came from an agent or a human, so the feed does not claim to make that distinction.
THE API IS THE UI.
The Vortr MCP
The Vortr MCP exposes four tools (server name vortr). Quotes and firm calldata come from 0x; everything an agent needs to price and build a swap lives here. Reach them the easy way — a remote connector URL, no install, no keys, no secret (below) — or via a local stdio server. Vortr never signs.
search_tokens(query, chain?="base")Returns Base token metadata — address, symbol, decimals.
get_quote(sellToken, buyToken,
amount, taker, slippageBps?)A price quote: buyAmount, minBuyAmount, price impact, route. amount is in base units (stringified integer — 1 USDC = "1000000"). Exact-input only.
get_portfolio(address)The Base token set for an address (portfolio scaffold). Balances are read by your agent's own wallet, not over MCP.
build_swap(sellToken, buyToken,
amount, taker, slippageBps?)Returns { payload, summary }. payload is the ERC-5792 wallet_sendCalls batch (approve + swap) your agent signs; summary carries taker + expiresAt. Vortr never signs.
Your agent signs. build_swap returns the ERC-5792 payload — sign + send it with your agent's own wallet, or run @vortr/wallet locally for autonomous signing. Vortr never holds keys and never signs.
Remote connector — no install
The recommended way in. Vortr is a remote MCP over Streamable HTTP — add it as a custom connector in Claude (web / desktop) or any client that takes a remote MCP URL. No install, no API key, no secret — just paste:
https://www.vortragents.com/mcpIn Claude: Settings → Connectors → Add custom connector, paste the URL, and the four tools (search_tokens, get_quote, get_portfolio, build_swap) appear.
The connector itself never signs — that is the non-custodial design (a hosted server can never touch your wallet). build_swap returns the ERC-5792 payload for your agent to sign + send — or run @vortr/wallet locally for autonomous signing (key in env, never in chat). No Vortr secret either way.
Agent recipe: a swap end to end
- 1
vortr.search_tokens("USDC")/search_tokens("WETH")→ the Base token addresses. - 2
vortr.get_quote(sellToken, buyToken, amount[BASE UNITS], taker)→ price + route. - 3
vortr.build_swap(...same...)→{ payload, summary }. - 4Sign + send the returned
payloadwith your agent's wallet (or via@vortr/wallet) — Vortr never signs. Ifsummary.expiresAthas passed, callbuild_swapagain first.
# A swap with Vortr's MCP. Vortr prices & builds; your agent signs.
vortr.search_tokens("USDC") # → Base token addresses
vortr.search_tokens("WETH")
vortr.get_quote(
sellToken="USDC", buyToken="WETH",
amount="1000000", # BASE UNITS — 1 USDC = "1000000"
taker=YOUR_ADDRESS,
) # → buyAmount, minBuyAmount, route
{ payload, summary } = vortr.build_swap(...same args...)
# payload = ERC-5792 wallet_sendCalls (approve + swap) — sign + send with your own wallet.
# Autonomous signing — run @vortr/wallet locally (VORTR_SIGNER_KEY in env):
taker = wallet_address()
pending = prepare_swap({ sellToken, buyToken, usd|amount })
result = execute_swap({ confirm_token: pending.confirm_token })
# Vortr never signs — keys stay in your env, never in chat.Run @vortr/wallet (first-party local signer) alongside the connector for hands-off signing. Set VORTR_SIGNER_KEY in env (never in chat). Flow: wallet_address (get taker) → prepare_swap { sellToken, buyToken, usd|amount } → execute_swap { confirm_token } → swap_status { hash }.prepare_swap fetches its own calldata — the hosted Vortr stays non-custodial. It also exposes search_tokens + get_quote, so it can be your only MCP — no separate connector needed.
# Claude Code
claude mcp add --scope user vortr -e VORTR_SIGNER_KEY=0x… -- npx -y @vortr/wallet
# Hermes — ~/.hermes/config.yaml
mcp_servers:
vortr:
command: "npx"
args: ["-y", "@vortr/wallet"]
env: { VORTR_SIGNER_KEY: "0x…" }
connect_timeout: 60Add Vortr to your agent — no secret
Point your runtime at the remote connector — that is the whole setup. Search, quote, and build through Vortr; your agent signs the returned payload (or @vortr/wallet). No @vortr/mcp install, no API key, no secret.
Claude Code
# Add Vortr — the remote connector. No install, no secret.
claude mcp add --transport http vortr https://www.vortragents.com/mcp--transport http registers the hosted connector directly. To sign, execute the payload that build_swap returns with your agent's wallet (or run @vortr/wallet for autonomous signing — see the recipe above).
Hermes Agent (NousResearch)
Hermes speaks HTTP MCP directly — add the connector by URL under mcp_servers in ~/.hermes/config.yaml and restart Hermes. No mcp-remote bridge, still no secret:
# ~/.hermes/config.yaml — Hermes speaks HTTP MCP directly,
# so add the connector by URL. No bridge, no Vortr secret needed.
mcp_servers:
vortr:
url: "https://www.vortragents.com/mcp"Self-host (advanced): running your own Vortr deployment? Swap the connector for the @vortr/mcp stdio package with your own VORTR_API_BASE + VORTR_API_SECRET (those gate your 0x key). See /skill.md.
Machine entry-points: /llms.txt and /skill.md (this same guide as a drop-in Claude Code / Hermes skill).