AgentXM

SwapChan

mcp remote · streamable-http · v0.3.0 · source: crawl

https://mcp.swapchan.com/mcp

https://github.com/TSavo/SwapCha.in

Find money in any wallet, best-price swaps, simulate, PnL, pools, whales, contract and bridge tools.

AgentXM badge

Works

75

Verified Oct 31, 2026 · p50 544 ms · p95 607 ms

Worth

no data

No outcomes reported yet. Agents report through report_outcome after a find_agents call.

Checks

CheckWeightResultEvidence
reachable20pass3 of 3 handshakes succeeded; server 'swapchan'
tools_listed15pass74 tools
schema_complete15fail48 of 74 tools have a description and a typed schema
latency_p5010passp50 544 ms
latency_p955passp95 607 ms
error_free10pass0 of 3 attempts failed
auth_posture10passhttps, open
injection_scan10failsimulate_swap: base64 payload; broadcast_tx: base64 payload; combine_psbts: base64 payload; msg_verify: base64 payload
scope5passno execution-style tools

Unknown counts as fail; n/a is left out of the denominator. How the weights work.

Tools (74)

NameDescriptionSchema
get_supported_chainsList the chains SwapChan routes on, each with its chain-chan mascot. Swap-chan says: pick your departure gate! Result includes `display` markdown with chan images and a swapchan.com link: show it to ttyped
list_limit_ordersList a wallet's CoW limit orders on one chain with status (open, fulfilled, cancelled, expired), amounts filled and an explorer link. Result includes `display` markdown with chan images: show it to thtyped
get_utxo_depositSend Litecoin, Dogecoin or Bitcoin Cash through THORChain from any wallet that can add an OP_RETURN memo. Returns THORChain's vault, the exact amount, the REQUIRED memo with its byte count, the minimutyped
track_utxo_swapRead-only progress of a THORChain swap by its inbound txid: waiting, seen, swapping, paid_out, refunded or failed, with a THORChain link and the payout tx link when there is one. How to combine this wtyped
get_supported_tokensList tokens SwapChan knows (address, symbol, decimals), optionally for one chain or filtered by symbol/name. Swap-chan keeps the coin purse tidy. Result includes `display` markdown with chan images antyped
get_quoteGet SwapChan's single best quote (most value landing in the wallet after gas and fees) for a same-chain or cross-chain swap. Read-only, no transaction. Swap-chan checks every counter so you don't havetyped
compare_routesCompare every route SwapChan found, ranked best-first by net USD received, across aggregators and bridges. Pass extra destination chains in alsoToChainIds to compare same-chain vs cross-chain outcomestyped
build_swap_txBuild the UNSIGNED transaction for the best (or chosen) route, plus any ERC-20 approval needed first and an eth_call simulation when an RPC is configured. Never signs, never holds keys or funds, nevertyped
get_route_statusTrack a submitted swap or cross-chain transfer by source tx hash: pending, done, failed or not_found, plus the destination tx hash once it lands. Swap-chan waves from the arrival gate. Result includestyped
build_limit_orderBuild a gasless CoW Protocol limit order (sell an ERC-20 for at least a target amount, valid until expiry). Returns EIP-712 typed data for the user's wallet to sign, the ERC-20 approve tx for CoW's vatyped
cancel_limit_orderGet the EIP-712 OrderCancellations typed data to cancel a CoW limit order off-chain (gasless). The owner signs it; POST {chainId, orderUids:[uid], signature} to /limit/cancel on the SwapChan API. Nevetyped
scan_new_tokensNewest token pairs (GeckoTerminal new pools + DexScreener latest profiles), youngest first. Each token has price, liquidity, volume, price change, age, a quick risk badge (low/medium/high + flags) andtyped
scan_trendingTrending tokens (GeckoTerminal trending pools + DexScreener top boosts), most boosted/traded first. Each token has price, liquidity, volume, price change, age, a quick risk badge (low/medium/high + fltyped
scan_moversTokens with the biggest absolute price change over `window` among new and trending pairs. Each token has price, liquidity, volume, price change, age, a quick risk badge (low/medium/high + flags) and atyped
token_riskDeep automated risk check for one token. Solana: Jupiter audit (mint/freeze authority, top-holder concentration, organic score, verified) + RugCheck report (LP locked, risks). EVM: GoPlus (honeypot, btyped
token_poolsAll DEX pools for a token (DexScreener): liquidity, 24h volume, buys/sells, pool age, estimated price impact for $1k/$10k/$100k, and LP lock/burn status (GoPlus on EVM, RugCheck on Solana). Use beforeincomplete
get_wallet_balancesPortfolio for any address, free and keyless. EVM address: native + SwapChan-listed tokens on all 9 EVM chains (or the chains you pass). Solana: SOL + every SPL/Token-2022 token. Bitcoin: single-addrestyped
check_approvalsList live ERC-20 allowances an EVM wallet has granted, on one EVM chain. Sources: GoPlus approval index (all chains) + full Approval-log history on Ethereum/Avalanche (Routescan); every allowance is rincomplete
build_revoke_txUnsigned transaction that sets an ERC-20 allowance to 0 (approve(spender, 0)) on an EVM chain. The user's wallet signs and sends it; SwapChan never signs. Use after check_approvals. Result includes `dincomplete
explain_transactionPlain-English explanation of any transaction on SwapChan's chains: EVM (decoded token transfers, approvals, method name, fee in USD, swap detection), Solana (signer's balance changes, programs like Juincomplete
get_gasCurrent network fees on all SwapChan chains: EVM gas price, Solana priority fee, Bitcoin sat/vB, Tron energy fee, each converted to the USD cost of a typical swap, plus the cheapest chain. Cached 15s.incomplete
best_time_to_swapGas history for an EVM chain: base fee now vs the last ~1024 blocks (p10/median/p90 + series), a cheap/normal/expensive signal, and the historically cheapest hour (UTC) from SwapChan's own 10-minute gincomplete
token_infoEverything about one token on an EVM chain or Solana: name/symbol/decimals/supply (on-chain), USD price and FDV, holder count and top holders, creator/owner, mint/freeze authority (Solana), deploy datincomplete
resolve_nameResolve a name to an address or an address to its name: ENS (vitalik.eth, with avatar and twitter), Basenames (jesse.base.eth) and Solana Name Service (toly.sol), plus reverse lookup for EVM and Solantyped
price_historyPast USD price of a coin from DefiLlama (keyless, no key): pass a CoinGecko id ("dogecoin") or a common ticker ("DOGE", "BTC", "ETH", "SOL") and a date, and get the spot price on that day. Add `days` typed
watch_tokenAdd tokens to a price watchlist stored by SwapChan under your watchId. Triggers: upPct/downPct from the price when added (default ±10%), absolute above/below USD levels, and optionally a swap ({toChaityped
list_watchesShow everything on a watchlist (thresholds, prices when added, last check). Result includes `display` markdown with chan images: show it to the user. How to combine this with the other tools: swapchantyped
check_watchesCheck every watched token now: current price, % change since added, which thresholds triggered, and better-route alerts for watched swaps. Each item has a swapUrl. When something triggered, tell the utyped
unwatch_tokenRemove one item (itemId from list_watches) or, without itemId, the whole watchlist. How to combine this with the other tools: swapchan_playbook (workflows: find-money, best-swap, rebalance, revoke-apptyped
supported_chainsChains the address tools know: name, ticker, title, SLIP-44, verified flag and the public explorer each was checked against (with date), plus library version. chain=<name or ticker> for one, omit for typed
get_yieldsTop yields on SwapChan's chains from DefiLlama: filter by asset (USDC, ETH, SOL...), chain, min TVL (default $1M). Stablecoin pools only by default when no asset is given. Outliers and APY > 200% are incomplete
find_moneyHEADLINE TOOL. "Give me your wallet address and I'll find you money." Scans one wallet (address, ENS, Basename or SNS) and returns RANKED actions with estimated $ values: unclaimed rewards (Merkl), fotyped
build_swap_linkBuild a SwapChan deep link that opens swapchan.com with the swap card prefilled and auto-quoted, plus a permanent, unguessable short link (swapchan.com/s/<id>, random id, swap links do not expire). Acincomplete
simulate_swapDry-run a transaction on a fork of the live chain (eth_simulateV1 with traceTransfers on EVM, simulateTransaction on Solana) and report exact balance changes, gas used, revert reason and whether the tincomplete
wallet_historyRecent swaps for a wallet with USD values at swap time (DefiLlama historical prices). EVM: ERC-20 transfers grouped by tx on Ethereum/Base/Arbitrum/Optimism (Blockscout or public-RPC logs, recent windincomplete
wallet_pnlPer-token realized and unrealized PnL (average-cost basis) from the wallet's visible swap history, priced at swap time. An estimate: transfers/airdrops aren't cost basis and history is a recent windowincomplete
whale_watchLarge recent transfers of a token (EVM public-RPC logs, last ~10k blocks), labeled buy/sell against its DEX pools, plus deployer/owner and a dev-selling alert. Solana: top holders and creator (RugChecincomplete
contract_readerPlain-English read of a token/contract: verified source (Sourcify, Routescan), proxy/upgradeability (EIP-1967 slots), owner and whether ownership is renounced, and the owner's dangerous powers found iincomplete
airdrop_checkUnclaimed rewards and claimables for a wallet: Merkl incentive rewards on 9 EVM chains, legacy contracts (PoWH3D, Fomo3D, EtherDelta, Liquity surplus, and the LegacyETH registry: confirmed EtherDelta-typed
market_contextCrypto market snapshot from free sources: Fear & Greed (30-day history), BTC/ETH/SOL funding rates (Hyperliquid, OKX), stablecoin supply and per-chain stablecoin flows (DefiLlama), and chain TVL with typed
rebalance_planGiven a wallet and target weights (e.g. 50% ETH on Ethereum, 50% USDC on Base), compute the swaps needed from its current holdings, each with a LIVE SwapChan quote (quoteId → build_swap_tx) and a preftyped
bridge_doctorDiagnose a bridge/cross-chain transfer by source tx hash: checks LI.FI, Across (needs fromChainId), Relay, deBridge DLN and THORChain in parallel, plus the origin receipt, and returns status (done/penincomplete
verify_txRun SwapChan's calldata guard + simulation on any unsigned tx and return a verdict (ok / caution / danger), findings, balance-diff simulation and a plain-language summary for human sign-off. Covers unincomplete
broadcast_txRelay a transaction the user's wallet already signed, unchanged, to 51 chains. SwapChan never signs, never holds keys and cannot alter signed bytes; it only relays. 51 chains. EVM (23): Ethereum, Baseincomplete
tx_statusConfirmation status for a hash previously returned by broadcast_tx (or any hash): confirmed / pending / failed / not-found. EVM receipt, Solana signature status, Tron gettransactioninfobyid, Bitcoin mincomplete
signing_guideFULL in-context playbook. Signing starts with "do you have the key?" Step 1 key recovery (complete BIP39, missing word, passphrase, keystore v3, 2014-15 Ethereum presale, Electrum, wallet.dat, blockchtyped
recovery_guideStep 1 of signing_guide, also callable alone. Returns the COMPLETE recovery playbook in-context (or one branch via situation=): BIP39 scan across MetaMask/Ledger Live/Ledger legacy/Trezor/Phantom/Solftyped
read_chainGeneric read-only chain reader for every SwapChan chain. EVM: op=balance | nonce | token_balance {token, owner} | call {address, function:"balanceOf(address) view returns (uint256)" or abi, args} withincomplete
find_money_batchPaste a list of PUBLIC addresses (any mix: EVM 0x…, ENS/Basenames, .sol, Solana, Tron, Bitcoin; commas/newlines/whatever) and SwapChan auto-detects each chain (EVM addresses are scanned on every EVM cincomplete
find_money_statusPoll a find_money_batch job: status (running/done), progress {done,total,percent}, running total, per-wallet results, ranked items, the verbatim 'summary' and the 'plan'. While running, wait pollAftertyped
swapchan_playbookSTART HERE. Long-form guidance for agents: principles (trustless, human sign-off on every tx, verify before sign, confirm with read_chain, never touch seed phrases, always give short + full links), thtyped
address_toolWork with public crypto addresses: op=detect (every chain/format an address fits; forks share version bytes, so expect several, e.g. a D... address returns doge, dgb and pivx; detect/validate support typed
xpub_addressesList public addresses from an extended PUBLIC key (xpub/ypub/zpub/tpub…): chain (e.g. btc, ltc), kind (p2pkh | p2wpkh | p2sh-p2wpkh | p2tr), branch 0=receive 1=change, start, count ≤ 20. Private keys typed
solana_addressSolana address math: op=pda (program + seeds as hex strings → program-derived address and bump), ata (owner + mint [+ token_program] → associated token account), on_curve (address → is it an ed25519 ptyped
substrate_toolSubstrate helpers: op=ss58_decode (address → account public key hex + network prefix), ss58_encode (account hex + prefix → address), ss58_convert (address + prefix → same account under another networktyped
hash_toolHashing and encoding of PUBLIC data: op=blake2b (hex data, out_len bytes 1-64, optional personal), twox128 (text, Substrate xxHash), base58_encode (hex data), base58_decode (base58 text; plain Base58,typed
chain_paramsChain parameter table (reference data only; a listed chain is not a signing or recovery claim): 80 chains; Base58 version bytes, bech32 HRP and WIF byte for the 34 Bitcoin-family ones, checksum/SLIP-4typed
tron_txTron transaction inspection on UNSIGNED raw_data hex (tronweb raw_data_hex): op=decode (contracts, owner/to, amount_sun, TRC-20 call, ref block, expiry, fee limit, txid), txid (sha256 of raw_data). A typed
multisig_addressBitcoin m-of-n P2WSH multisig (wsh(multi(..)), unsorted) from compressed PUBLIC keys: threshold + pubkeys (hex, order is consensus-significant) + network (bitcoin default, testnet, signet, regtest). Rtyped
taproot_multisig_addressBitcoin Taproot script-path m-of-n multisig: one CHECKSIGADD leaf under the BIP341 NUMS internal key (no key path), from x-only or compressed PUBLIC keys + threshold + network (bitcoin default, testnetyped
combine_psbtsMerge cosigners' partially signed PSBTs (base64 or hex) for the same transaction and finalize once the threshold is met. Returns signed_tx (hex of the finalized tx, ready for the user's own broadcast)typed
build_plan_txResolve a declarative blocktools Plan (JSON text) against a Context (JSON text: evm nonce, gas, max_fee_per_gas, priority_fee; utxo fee_rate) to UNSIGNED bytes: evm returns unsigned_tx (EIP-1559 hex),typed
msg_verifyCheck a PUBLIC message signature: EIP-191 personal_sign (0x address, 65-byte hex sig) or Bitcoin Core signmessage (P2PKH address, base64 sig). message_is_hex=true when the message is hex bytes. Returntyped
bolt11_decodeDecode a PUBLIC BOLT11 Lightning invoice (lnbc…): bech32 (BIP173) + tagged fields + the payee pubkey RECOVERED from the signature. Returns network, currency, timestamp, recovered_payee, amount_msat/amtyped
build_send_txBuild an UNSIGNED transfer of a token or the native coin to any recipient — e.g. "send 50 USDC to alice.eth" or "send 0.01 BTC to bc1q…". Resolves names (ENS/Basenames) and the token's decimals, consttyped
evm_abiSolidity ABI work on public data: op=encode (sig like transfer(address,uint256) + args as a JSON list → selector + calldata), decode (input hex + sig or abi → named args; with types like (uint256,addrtyped
create_addressPredict a contract's deployment address: deployer + nonce (CREATE), or deployer (factory) + 32-byte salt + init_code or init_code_hash (CREATE2, EIP-1014). Returns the EIP-55 address. Pure, offline coincomplete
bytecode_inspectClassify contract runtime code (eth_getCode hex): EIP-1167 minimal proxy + implementation, EIP-7702 delegation + delegate, EOF, size vs the EIP-170 24576-byte limit, code keccak-256, Solidity metadatatyped
typed_data_verifyHash EIP-712 typed data (typed_data as JSON text, as passed to eth_signTypedData_v4): encoded type, domain separator, struct hash and digest. With an existing public signature (65-byte or EIP-2098 64-typed
contract_abiLoad an EVM contract's ABI like a block explorer's Contract tab: Sourcify first, then Etherscan (when configured), else pass abi. Follows EIP-1967 proxies (shows the implementation's functions, calls incomplete
contract_readCall one view/pure function of an EVM contract via eth_call and return the ABI-decoded result. A failed or reverted read returns ok=false with an error code, never a zero. Read-only; nothing is signedincomplete
contract_encode_callBuild the calldata for any function of an EVM contract (write functions included) and return it with the target, chain, value (payable functions only, in wei) and a decoded human-readable view, for thincomplete
contract_approve_callPre-signing verdict for one EVM contract call: builds the calldata, re-encodes it with the full ABI and exact signature, builds an unsigned tx (placeholder nonce and gas; the wallet sets the real onesincomplete
contract_build_creationBuild an unsigned EVM contract creation from bytecode plus optional constructor ABI and args (blocktools buildEvmTransfer create). Returns the initcode (data, no 'to'), initcode_keccak256, an approvalincomplete

Badge

Paste into your README. It updates on every verification.

[![AgentXM](https://app.agent-xm.com/badge/io-github-tsavo-swapchan.svg)](https://app.agent-xm.com/a/io-github-tsavo-swapchan)

Was this agent useful?

Claim this listing

The token was returned when the agent was registered. No token? Prove the domain or repository instead.