Multi-aggregator swap router on Base. Returns ready-to-execute calldata your agent signs and submits. MCP-native — drop into Claude Code, Cursor, or any MCP-compatible client in one line. Flat 10 bps fee on the buy token, no separate spread.
claude mcp add --transport http --scope user paladin-swap https://swap.paladinfi.com/mcp
Restart Claude Code. Three tools become available:
swap_quote (competitive route across 0x and Velora with executable calldata),
trust_check_preview (sample-fixture preview of the trust gate — for
production trust checks use the paid REST endpoint or
npm plugins), and swap_health (router status). Same install works in any
MCP-compatible client supporting Streamable-HTTP transport.
{sellToken, buyToken, sellAmount, taker} on Base.0xeA8C33d018760D034384e92D1B2a7cf0338834b4 — auditable on Basescan. No additional deduction at fill time.
Each upstream aggregator (0x AllowanceHolder dispatching to Settler, Velora AugustusSwapper
v6.2) is the actual on-chain executor. PaladinFi adds a defense-in-depth wrapper to constrain
what calldata can route through us per source. As of v0.11.71 (live; verifiable via
selector_enforcement block of /health):
| Layer | 0x route | Velora route |
|---|---|---|
| Outer router whitelist | AllowanceHolder (per chain) | AugustusSwapper v6.2 (per chain) |
| Calldata selector allowlist | 1 selector (exec) |
11 swap selectors |
| Inner-target validation | Settler address required (0x7747f8d2…) |
priceRoute invariant (srcToken + destToken + srcAmount) |
| Unconditional deny-list | 7 selectors (Permit2 + ERC-20 transfer/transferFrom/approve + Permit2 permit single/batch) | 7 selectors (same set) |
| Failure mode when both upstreams unreachable | HTTP 502 (upstream error) on /v1/quote. Per-source breakdown is visible in /health. |
|
The selector + inner-target layers are load-bearing — they're what couples the calldata to the actual swap implementation contract. Walked through in this blog post.
Production routing has been serving fee-bearing /v1/quote calls on Base
since 2026-04-26 (v0.11.45). The current router instance has been
serving since 2026-05-12 19:09 UTC (the v0.11.74 deploy, visible in
the public CHANGELOG).
Deploy windows are brief (under ten minutes); we don't operate a separate
status page yet, but /health is the
canonical liveness probe.
@paladinfi/eliza-plugin-trust + 762 on @paladinfi/agentkit-actions).If you're evaluating PaladinFi for a wallet or data-distribution integration: NDA-share the revenue and per-integration numbers on a 20-min discovery call.
Every public-surface ship runs through a 3-adversary parallel review before deploy (Maintainer + Engineering + Security audit-mode for code; B2B Buyer + Brand Auditor + Domain Skeptic for content). The Security reviewer is briefed "treat as audit not code review; name funds-loss vectors explicitly."
Landmark reviews:
If your agent doesn't speak MCP, hit the REST endpoint directly.
| Method | Path | Purpose |
|---|---|---|
| GET | /health | Liveness + fee config + selector-enforcement state |
| POST | /v1/quote | Competitive route quote with calldata |
| POST | /mcp | MCP Streamable-HTTP transport |
curl -sS https://swap.paladinfi.com/v1/quote \
-H 'content-type: application/json' \
-d '{
"chainId": 8453,
"sellToken": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"buyToken": "0x4200000000000000000000000000000000000006",
"sellAmount": "5000000",
"taker": "0xYourAgentWallet"
}'
{
"source": "0x",
"chainId": 8453,
"router": "0x0000000000001ff3684f28c67538d4d072c22734",
"calldata": "0x...",
"buyAmount": "2160000000000000",
"minBuyAmount": "2138000000000000",
"sellAmount": "5000000",
"gas": "318707",
"ourFeeBps": 10,
"ourFeeRecipient": "0xeA8C33d018760D034384e92D1B2a7cf0338834b4",
"estimatedOurFeeAmount": "2160000000000",
"estimatedOurFeeToken": "0x4200000000000000000000000000000000000006"
}
Submit as to=router, data=calldata, value=0 from taker.
Free endpoints are rate-limited per source IP via nginx. The /v1/quote
free-quote zone allows 5 req/sec sustained, burst 30;
/mcp Streamable-HTTP transport allows 10 req/sec sustained, burst 30.
Concurrent connections are capped at 5 per source IP. The paid
/v1/trust-check has no separate rate cap; pricing ($0.001 USDC/call)
constrains volume directly. Rate-limited responses return HTTP 429 with a
Retry-After header. If your agent needs sustained throughput beyond
this — get in touch.
Flat 10 basis points (0.1%) on the buy token. The fee is calculated
against the actual fill amount, not the quoted estimate, so you never pay more than
expected even if pool prices move between quote and fill. PaladinFi's 10 bps is
taken from the buy-token side via the upstream aggregator's integrator-fee mechanism
(0x's swapFeeBps / Velora's partnerFeeBps), so the
buyAmount you see in the response already reflects both any upstream
protocol fee and our 10 bps — no additional deduction at fill time.
Fees route directly to the Paladin Swap treasury EOA
0xeA8C33d018760D034384e92D1B2a7cf0338834b4 — also surfaced in
/health, auditable on
Basescan.
The /v1/quote endpoint stays free to query; we don't gate quotes, charge
per-call, or take spread on top. PaladinFi never custodies user funds — the only
PaladinFi-controlled address in the swap path is the integrator-fee EOA above,
receiving the 10 bps. (Note: this pricing applies to Swap routing only. Our separate
Trust Check API has its own pricing —
$0.001 USDC/call paid evaluation, with a free fixture-only preview endpoint.)
Agent builders that swap on-chain currently glue together aggregator APIs themselves, handle slippage and fee accounting, and reinvent the same routing logic per project. PaladinFi Swap is the routing layer factored out — one tool call, ready calldata, flat fee. Built so agentic wallets can ship faster without holding user funds in custody. Audience is narrow on purpose: agent-builders specifically. If you're building a consumer-facing wallet UI directly, you probably want a wallet-grade aggregator SDK with its own UI components, not a B2B routing API.
swap_quote, swap_health, and trust_check_preview tools — live/v1/quote-paid path when both upstreams down (refund-eligible signal) — v0.11.75