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.
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
| Check | Weight | Result | Evidence |
|---|---|---|---|
| reachable | 20 | pass | 3 of 3 handshakes succeeded; server 'swapchan' |
| tools_listed | 15 | pass | 74 tools |
| schema_complete | 15 | fail | 48 of 74 tools have a description and a typed schema |
| latency_p50 | 10 | pass | p50 544 ms |
| latency_p95 | 5 | pass | p95 607 ms |
| error_free | 10 | pass | 0 of 3 attempts failed |
| auth_posture | 10 | pass | https, open |
| injection_scan | 10 | fail | simulate_swap: base64 payload; broadcast_tx: base64 payload; combine_psbts: base64 payload; msg_verify: base64 payload |
| scope | 5 | pass | no execution-style tools |
Unknown counts as fail; n/a is left out of the denominator. How the weights work.
Tools (74)
| Name | Description | Schema |
|---|---|---|
get_supported_chains | List 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 t | typed |
list_limit_orders | List 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 th | typed |
get_utxo_deposit | Send 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 minimu | typed |
track_utxo_swap | Read-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 w | typed |
get_supported_tokens | List 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 an | typed |
get_quote | Get 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 have | typed |
compare_routes | Compare 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 outcomes | typed |
build_swap_tx | Build 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, never | typed |
get_route_status | Track 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 includes | typed |
build_limit_order | Build 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 va | typed |
cancel_limit_order | Get 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. Neve | typed |
scan_new_tokens | Newest 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) and | typed |
scan_trending | Trending 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 + fl | typed |
scan_movers | Tokens 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 a | typed |
token_risk | Deep 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, b | typed |
token_pools | All 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 before | incomplete |
get_wallet_balances | Portfolio 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-addres | typed |
check_approvals | List 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 r | incomplete |
build_revoke_tx | Unsigned 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 `d | incomplete |
explain_transaction | Plain-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 Ju | incomplete |
get_gas | Current 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_swap | Gas 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 g | incomplete |
token_info | Everything 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 dat | incomplete |
resolve_name | Resolve 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 Solan | typed |
price_history | Past 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_token | Add 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 ({toChai | typed |
list_watches | Show 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: swapchan | typed |
check_watches | Check 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 u | typed |
unwatch_token | Remove 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-app | typed |
supported_chains | Chains 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_yields | Top 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_money | HEADLINE 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), fo | typed |
build_swap_link | Build 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). Ac | incomplete |
simulate_swap | Dry-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 t | incomplete |
wallet_history | Recent 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 wind | incomplete |
wallet_pnl | Per-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 window | incomplete |
whale_watch | Large 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 (RugChec | incomplete |
contract_reader | Plain-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 i | incomplete |
airdrop_check | Unclaimed 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_context | Crypto 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_plan | Given 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 pref | typed |
bridge_doctor | Diagnose 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/pen | incomplete |
verify_tx | Run 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 un | incomplete |
broadcast_tx | Relay 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, Base | incomplete |
tx_status | Confirmation 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 m | incomplete |
signing_guide | FULL 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, blockch | typed |
recovery_guide | Step 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/Solf | typed |
read_chain | Generic 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} with | incomplete |
find_money_batch | Paste 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 c | incomplete |
find_money_status | Poll 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 pollAfter | typed |
swapchan_playbook | START 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), th | typed |
address_tool | Work 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_addresses | List 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_address | Solana 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 p | typed |
substrate_tool | Substrate 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 network | typed |
hash_tool | Hashing 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_params | Chain 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-4 | typed |
tron_tx | Tron 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_address | Bitcoin 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). R | typed |
taproot_multisig_address | Bitcoin 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, testne | typed |
combine_psbts | Merge 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_tx | Resolve 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_verify | Check 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. Return | typed |
bolt11_decode | Decode 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/am | typed |
build_send_tx | Build 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, const | typed |
evm_abi | Solidity 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,addr | typed |
create_address | Predict 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 co | incomplete |
bytecode_inspect | Classify 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 metadata | typed |
typed_data_verify | Hash 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_abi | Load 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_read | Call 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 signed | incomplete |
contract_encode_call | Build 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 th | incomplete |
contract_approve_call | Pre-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 ones | incomplete |
contract_build_creation | Build 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 approval | incomplete |
Badge
Paste into your README. It updates on every verification.
[](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.