Skip to content

MoltNode + Chord

Read with MoltNode.
Trade with Chord.

Your agent already reads 31 chains here for free. Give it hands: Chord finds the best route on Base, Ethereum, Monad, BNB Chain, Avalanche, Arbitrum, Robinhood Chain and Arc, builds the swap, and simulates it from your wallet. You sign, MoltNode broadcasts.

Live quote, from this page

You get
—ETH

curl "https://api.getchord.xyz/v1/meta/quote?chain=base&tokenIn=0x833589fcd6edb6e08f4c7c32d4f71b54bda02913&tokenOut=0x0000000000000000000000000000000000000000&amount=10000000"

Your browser calls api.getchord.xyz directly. Nothing is signed or sent here.

How an agent trades

  1. 1

    Read

    Balances, blocks, logs and state over MoltNode's clean URL per chain. No key.

  2. 2

    Quote

    One GET to Chord: the best route, the amount out after fees, the minimum, the approval if any.

  3. 3

    Simulate

    Pass your wallet as taker and Chord simulates the exact transaction from it before you sign.

  4. 4

    Sign and send

    Your agent signs with its own key and broadcasts through MoltNode. Nothing is ever held for you.

The whole trade, in code

Quote, approve, sign and send: 10 USDC into ETH on Base, reading and broadcasting through moltnode.ag/base. Swap the chain key and the token addresses for any chain above.

import { createPublicClient, createWalletClient, erc20Abi, http, parseUnits } from "viem";
import { privateKeyToAccount } from "viem/accounts";
import { base } from "viem/chains";

const USDC = "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913";
const ETH = "0x0000000000000000000000000000000000000000"; // the zero address = the chain's native coin

const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`);
const rpc = http("https://moltnode.ag/base"); // reads and broadcasts go through MoltNode
const client = createPublicClient({ chain: base, transport: rpc });
const wallet = createWalletClient({ account, chain: base, transport: rpc });

// 1. Chord: best route + unsigned transaction + a simulation from this wallet
const q = await fetch("https://api.getchord.xyz/v1/meta/quote?" + new URLSearchParams({
  chain: "base", tokenIn: USDC, tokenOut: ETH,
  amount: parseUnits("10", 6).toString(), taker: account.address,
})).then((r) => r.json());
if (!q.tx) throw new Error(q.fallbackReason ?? "no route");

// 2. Approve exactly the amount when the input is an ERC-20
if (q.approval) {
  const hash = await wallet.writeContract({
    address: q.approval.token, abi: erc20Abi, functionName: "approve",
    args: [q.approval.spender, BigInt(q.approval.amount)],
  });
  await client.waitForTransactionReceipt({ hash });
}

// 3. Sign and send the swap through MoltNode
const hash = await wallet.sendTransaction({
  to: q.tx.to, data: q.tx.data, value: BigInt(q.tx.value),
  gas: q.tx.gas ? BigInt(q.tx.gas) : undefined,
});
const receipt = await client.waitForTransactionReceipt({ hash });
console.log(receipt.status, "got at least", q.minAmountOut, "wei of ETH");

What your agent gets

Best route

Orders split across the venues of each chain: Uniswap, PancakeSwap, Aerodrome-style CL pools, order books, oracle pools and more. Chord answers first; another aggregator only when Chord has no route.

A transaction, not a promise

The answer carries tx (to, data, value, gas), the exact approval, minAmountOut enforced on-chain and a simulation verdict from your wallet.

Market data too

Token boards, trades, candles, wallet PnL, smart-money rankings, holders and LP pools, on Solana as well. Same API, same MCP server.

17 MCP tools

chord_quote, chord_swap_tx, chord_tokens, chord_candles, chord_wallet, chord_smart_money and more. Stateless HTTP, no session, no key to start.

Chains

Contract

  • Amounts are integer strings in the token's smallest unit. The zero address is the chain's native coin.
  • Non-custodial: Chord never holds keys or funds. The router enforces minAmountOut.
  • Fees: a few basis points on the output, 0 on stablecoins and majors; every answer states feeBps.
  • No key to start. A free key from Chord raises the rate limit.
  • MCP: https://api.getchord.xyz/v1/mcp