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
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
Read
Balances, blocks, logs and state over MoltNode's clean URL per chain. No key.
- 2
Quote
One GET to Chord: the best route, the amount out after fees, the minimum, the approval if any.
- 3
Simulate
Pass your wallet as taker and Chord simulates the exact transaction from it before you sign.
- 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
- Basechain=base · moltnode.ag/base
- Ethereumchain=ethereum · moltnode.ag/ethereum
- Monadchain=monad · moltnode.ag/monad
- BNB Chainchain=bnb · moltnode.ag/bnb
- Avalanchechain=avalanche · moltnode.ag/avalanche
- Arbitrumchain=arbitrum · moltnode.ag/arbitrum
- Robinhood Chainchain=robinhood
- Arcchain=arc
- Solanamarket data · moltnode.ag/solana
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