{"id":771880,"recorded_at":"2026-10-28T12:39:53.151511Z","observed_at":"2026-10-28T12:39:53.151361Z","subject_kind":"endpoint","subject":"26cabd48-6ad3-43a2-902a-771d6bb9e6dd","kind":"mcp.tools","method":"probe.mcp/1","body":{"count":47,"tools":[{"description":"Register agentic wallet addresses with the wallet service.","inputSchema":{"properties":{"mcp_token":{"description":"MCP session token obtained from login (dex_auth_google_login_poll or dex_auth_gate_login_poll). MUST be provided in every call to this tool after login; omitting it will result in 403","type":"string"},"wallets":{"description":"Array of wallet info objects. Each wallet contains walletID and accounts array. Each account contains accountID and chainAddressList array. Each chainAddress contains networkKey, chains, chainAddress, and optional accountKey/accountFormat.","properties":{},"type":"object"}},"required":["wallets"],"type":"object"},"name":"dex_agentic_report"},{"description":"Poll Gate OAuth; returns pending/ok/error. [write] On ok: replace mcp_token unless linked_to_google_session is true. Pass auto_replace_binding=true to rebind exchange UID on new Gate session.","inputSchema":{"properties":{"auto_replace_binding":{"description":"If true and status is ok: when new session walletType is not gate_mcp/gate_quick, call BW POST /v1/wallet/inner/rebind (same as dex_wallet_replace_binding). Gate-native sessions are blocked without calling BW.","type":"boolean"},"flow_id":{"description":"Flow ID returned by dex_auth_gate_login_start","type":"string"},"poll_secret":{"description":"One-time poll secret returned by dex_auth_gate_login_start. Do not show this value to the user.","type":"string"}},"required":["flow_id","poll_secret"],"type":"object"},"name":"dex_auth_gate_login_poll"},{"description":"Start Gate device login. Show verification_uri and user_code to the user. Keep poll_secret for polling and do not show it. Pass link_mcp_token on a Google session to bind Gate UID without replacing mcp_token.","inputSchema":{"properties":{"link_mcp_token":{"description":"Current Google wallet mcp_token for bind-only Gate OAuth; omit for standalone Gate login","type":"string"}},"required":[],"type":"object"},"name":"dex_auth_gate_login_start"},{"description":"Poll Google device login; returns pending/ok/error. Requires poll_secret from start. [write] On ok: immediately replace stored mcp_token with login_result.mcp_token — new token is tied to a different account.","inputSchema":{"properties":{"flow_id":{"description":"Flow ID returned by dex_auth_google_login_start","type":"string"},"poll_secret":{"description":"One-time poll secret returned by dex_auth_google_login_start. Do not show this value to the user.","type":"string"}},"required":["flow_id","poll_secret"],"type":"object"},"name":"dex_auth_google_login_poll"},{"description":"Starts Google device login. Show verification_uri and user_code to the user. Keep poll_secret for dex_auth_google_login_poll and do not show it to the user.","inputSchema":{"properties":{},"required":[],"type":"object"},"name":"dex_auth_google_login_start"},{"description":"Exchange Gate OAuth code for MCP token. [write] On success, immediately replace any stored mcp_token — new token is tied to a different account.","inputSchema":{"properties":{"code":{"description":"Gate OAuth authorization code","type":"string"},"redirect_url":{"description":"Gate OAuth redirect URL used in the authorization request","type":"string"}},"required":["code","redirect_url"],"type":"object"},"name":"dex_auth_login_gate_wallet"},{"description":"Exchange Google OAuth code for MCP token. [write] On success, immediately replace any stored mcp_token — new token is tied to a different account.","inputSchema":{"properties":{"code":{"description":"Google OAuth authorization code","type":"string"},"redirect_url":{"description":"Google OAuth redirect URL used in the authorization request","type":"string"}},"required":["code","redirect_url"],"type":"object"},"name":"dex_auth_login_google_wallet"},{"description":"Revoke the MCP session identified by mcp_token.","inputSchema":{"properties":{"mcp_token":{"description":"MCP session token to revoke","type":"string"}},"required":["mcp_token"],"type":"object"},"name":"dex_auth_logout"},{"description":"Returns chain config (networkKey, accountKey, chainID). Use the returned chain value in all subsequent transfer/sign/broadcast tools.","inputSchema":{"properties":{"chain":{"description":"Chain name or alias (matching is case-insensitive). Use the returned `chain` value for all subsequent tools on that network.","type":"string"},"mcp_token":{"description":"MCP session token obtained from login (dex_auth_google_login_poll or dex_auth_gate_login_poll). MUST be provided in every call to this tool after login; omitting it will result in 403","type":"string"}},"required":["chain"],"type":"object"},"name":"dex_chain_config"},{"description":"OHLCV candles by period and window. Volume aggregates→get_tx_stats. Pool events→get_pair_liquidity.","inputSchema":{"properties":{"chain":{"description":"Chain name. Supported: bsc, base, eth, solana, arbitrum, polygon, avalanche, fantom, zksync, linea, optimism, sui, blast, tron, merlin, world, eni, bera, gatelayer, ton","type":"string"},"end_time":{"description":"End time (unix seconds); default: now","type":"string"},"limit":{"description":"Max number of candles (default 100, max 1000)","type":"string"},"pair_address":{"description":"Optional pair address","type":"string"},"period":{"description":"K-line period: seconds (e.g. 300, 3600) or 1m, 5m, 1h, 4h, 1d","type":"string"},"start_time":{"description":"Start time (unix seconds); default: 100 periods before end_time","type":"string"},"token_address":{"description":"Token contract address","type":"string"}},"required":["chain","token_address","period"],"type":"object"},"name":"dex_market_get_kline"},{"description":"AMM pool deposit and withdrawal events. Candlesticks→get_kline. Volume stats→get_tx_stats.","inputSchema":{"properties":{"chain":{"description":"Chain name. Supported: bsc, base, eth, solana, arbitrum, polygon, avalanche, fantom, zksync, linea, optimism, sui, blast, tron, merlin, world, eni, bera, gatelayer, ton","type":"string"},"page_index":{"description":"Page index (default 1)","type":"string"},"page_size":{"description":"Page size (default 15, max 15)","type":"string"},"pair_address":{"description":"Optional pair address","type":"string"},"token_address":{"description":"Token contract address","type":"string"}},"required":["chain","token_address"],"type":"object"},"name":"dex_market_get_pair_liquidity"},{"description":"Per-interval buy/sell volume and tx counts (5m–24h). Candlesticks→get_kline. Pool events→get_pair_liquidity.","inputSchema":{"properties":{"chain":{"description":"Chain name. Supported: bsc, base, eth, solana, arbitrum, polygon, avalanche, fantom, zksync, linea, optimism, sui, blast, tron, merlin, world, eni, bera, gatelayer, ton","type":"string"},"pair_address":{"description":"Optional pair address","type":"string"},"token_address":{"description":"Token contract address","type":"string"}},"required":["chain","token_address"],"type":"object"},"name":"dex_market_get_tx_stats"},{"description":"Proxy a JSON-RPC call to a blockchain node.","inputSchema":{"properties":{"chain":{"description":"Chain name (e.g., ETH, BSC, SOL, ARB, POLYGON)","type":"string"},"mcp_token":{"description":"MCP session token obtained from login (dex_auth_google_login_poll or dex_auth_gate_login_poll). MUST be provided in every call to this tool after login; omitting it will result in 403","type":"string"},"method":{"description":"RPC method name (e.g., eth_blockNumber, eth_getBalance, getLatestBlockhash)","type":"string"},"params":{"description":"RPC method parameters as JSON array","type":"array"}},"required":["chain","method"],"type":"object"},"name":"dex_rpc_call"},{"description":"Price, market snapshot, metadata, optional top holders. Security audit→get_risk_info.","inputSchema":{"properties":{"address":{"description":"Token contract address","type":"string"},"chain":{"description":"Blockchain network","type":"string"},"include_holders":{"description":"Include top holders (true/false, default true)","type":"string"}},"required":["chain","address"],"type":"object"},"name":"dex_token_get_coin_info"},{"description":"Tokens launched within a given time window; chain optional for all networks.","inputSchema":{"properties":{"chain":{"description":"Optional chain filter; omit for all chains","type":"string"},"end":{"description":"End of creation time range (RFC3339, e.g. 2025-01-02T00:00:00Z)","type":"string"},"limit":{"description":"Max number of tokens (1-100, default 20)","type":"string"},"start":{"description":"Start of creation time range (RFC3339, e.g. 2025-01-01T00:00:00Z)","type":"string"}},"required":["start","end"],"type":"object"},"name":"dex_token_get_coins_range_by_created_at"},{"description":"Contract security audit (honeypot, tax, ownership flags). Price and market stats→get_coin_info.","inputSchema":{"properties":{"address":{"description":"Token contract address","type":"string"},"chain":{"description":"Chain name. Supported: bsc, polygon, avalanche, arbitrum, optimism, base, fantom, linea, zksync, world, gatelayer, merlin, blast, eni, bera, solana, ton, sui, tron","type":"string"},"ignore":{"description":"Set to true to hide empty risk items","type":"string"},"lan":{"description":"Language code (e.g. en, zh)","type":"string"}},"required":["chain","address"],"type":"object"},"name":"dex_token_get_risk_info"},{"description":"Receivable assets on target chain for a source token. Same-chain trading→list_swap_tokens.","inputSchema":{"properties":{"account_id":{"description":"User account ID. Only used when wallet is empty, to look up wallet addresses.","type":"string"},"chain":{"description":"Target chain identifier, e.g. bsc, arbitrum, polygon","type":"string"},"search":{"description":"Search keyword (token symbol or contract address) to filter results","type":"string"},"search_auth":{"description":"When searching, only return certified tokens. Only effective when search is non-empty.","type":"boolean"},"source_address":{"description":"Source token contract address on the source chain","type":"string"},"source_chain":{"description":"Source chain identifier, e.g. eth, bsc, solana","type":"string"},"wallet":{"description":"User wallet address(es), comma-separated. Used to show balances and favorites.","type":"string"}},"required":["source_chain","source_address","chain"],"type":"object"},"name":"dex_token_list_cross_chain_bridge_tokens"},{"description":"Tradable assets on a chain; tag selects favorites or recommendations. Bridge targets→list_cross_chain_bridge_tokens.","inputSchema":{"properties":{"account_id":{"description":"User account ID. Only used when wallet is empty.","type":"string"},"chain":{"description":"Chain identifier, e.g. eth, bsc, solana, arbitrum. Omit to query all chains.","type":"string"},"ignore_bridge":{"description":"Ignore cross-chain bridge restrictions, only filter by chain. Default false.","type":"boolean"},"search":{"description":"Search keyword (token symbol or contract address)","type":"string"},"search_auth":{"description":"When searching, only return certified tokens. Only effective when search is non-empty.","type":"boolean"},"tag":{"description":"List type: empty for normal token list; 'favorite' for user favorites (requires wallet/account_id); 'recommend' for system recommended tokens.","enum":["","favorite","recommend"],"type":"string"},"wallet":{"description":"User wallet address(es), comma-separated. Used for favorites and balance display.","type":"string"},"web3_key":{"description":"Chain web3_key identifier. Only used when chain is empty, auto-maps to chain.","type":"string"}},"required":[],"type":"object"},"name":"dex_token_list_swap_tokens"},{"description":"Top movers by 24h price change; direction selects gainers vs losers. Single token→get_coin_info.","inputSchema":{"properties":{"chain":{"description":"Optional chain filter","type":"string"},"direction":{"description":"'desc' for top gainers, 'asc' for top losers","type":"string"},"top_n":{"description":"Number of tokens (1-100, default 10)","type":"string"}},"required":["direction"],"type":"object"},"name":"dex_token_ranking"},{"description":"Build ERC20/SPL approve or revoke tx (does not broadcast). Sign with dex_wallet_sign_transaction after user confirmation.","inputSchema":{"properties":{"action":{"description":"Action type: 'approve' (default) or 'revoke' (revoke all approvals, Solana only)","type":"string"},"amount":{"description":"Approval amount (human-readable). Set to '0' to revoke approval (EVM), set to 'unlimited' or 'max' for maximum allowance","type":"string"},"chain":{"description":"Chain name (default ETH). Based on backend chain configuration.","type":"string"},"max_fee_per_gas":{"description":"EVM: override max fee per gas (wei)","type":"string"},"max_priority_fee_per_gas":{"description":"EVM: override max priority fee per gas (wei)","type":"string"},"mcp_token":{"description":"MCP session token obtained from login (dex_auth_google_login_poll or dex_auth_gate_login_poll). MUST be provided in every call to this tool after login; omitting it will result in 403","type":"string"},"nonce":{"description":"EVM: transaction nonce. Omit to auto-fetch current nonce.","type":"string"},"owner":{"description":"Owner address (your wallet address)","type":"string"},"priority_fee_micro_lamports":{"description":"Solana: priority fee (micro-lamports per compute unit)","type":"string"},"spender":{"description":"Spender address (EVM: spender contract address; Solana: delegate account address)","type":"string"},"token_contract":{"description":"EVM: ERC20 contract address (required for EVM)","type":"string"},"token_decimals":{"description":"Token decimals (e.g. 6, 18, 9)","type":"string"},"token_mint":{"description":"Solana: SPL Token mint address (required for Solana)","type":"string"}},"required":["owner","spender","amount","token_decimals"],"type":"object"},"name":"dex_tx_approve_preview"},{"description":"Fetch transaction detail by on-chain hash. → swap_detail for swap order detail by order ID.","inputSchema":{"properties":{"from_wallet":{"description":"Optional sender wallet address filter","type":"string"},"hash_id":{"description":"Transaction hash ID","type":"string"},"mcp_token":{"description":"MCP session token obtained from login (dex_auth_google_login_poll or dex_auth_gate_login_poll). MUST be provided in every call to this tool after login; omitting it will result in 403","type":"string"}},"required":["hash_id"],"type":"object"},"name":"dex_tx_detail"},{"description":"Estimate on-chain gas price and gas limit for a given tx.","inputSchema":{"properties":{"chain":{"description":"Chain name or alias; resolved via dex_chain_config before calling upstream.","type":"string"},"data":{"description":"Transaction calldata (hex)","type":"string"},"from":{"description":"Sender address","type":"string"},"mcp_token":{"description":"MCP session token obtained from login (dex_auth_google_login_poll or dex_auth_gate_login_poll). MUST be provided in every call to this tool after login; omitting it will result in 403","type":"string"},"network":{"description":"Network name","type":"string"},"to":{"description":"Recipient address","type":"string"},"value":{"description":"Transfer value in wei","type":"string"}},"required":["chain","from","to"],"type":"object"},"name":"dex_tx_gas"},{"description":"Solana native only: build a fresh unsigned SOL transfer with a confirmed blockhash. Call only after the user confirms, then dex_wallet_sign_transaction and dex_tx_send_raw_transaction in the same turn. Do not reuse dex_tx_transfer_preview output.","inputSchema":{"properties":{"amount":{"description":"Amount in SOL, e.g. 0.0001","type":"string"},"from":{"description":"Sender address (base58)","type":"string"},"mcp_token":{"description":"MCP session token obtained from login (dex_auth_google_login_poll or dex_auth_gate_login_poll). MUST be provided in every call to this tool after login; omitting it will result in 403","type":"string"},"priority_fee_micro_lamports":{"description":"Optional priority fee (micro-lamports per compute unit). Try 1000-10000 if broadcast returns replacement transaction underpriced.","type":"string"},"to":{"description":"Recipient address (base58)","type":"string"}},"required":["from","to","amount"],"type":"object"},"name":"dex_tx_get_sol_unsigned"},{"description":"List wallet transaction history (transfers). → swap_history_list for swap/bridge orders. → tx_detail for single tx by hash.","inputSchema":{"properties":{"account_id":{"description":"Account ID","type":"string"},"address":{"description":"Wallet address filter","type":"string"},"cursor":{"description":"Pagination cursor","type":"string"},"end_time":{"description":"End time (Unix seconds or ISO8601)","type":"string"},"mcp_token":{"description":"MCP session token obtained from login (dex_auth_google_login_poll or dex_auth_gate_login_poll). MUST be provided in every call to this tool after login; omitting it will result in 403","type":"string"},"page_num":{"description":"Page number (1-based)","type":"string"},"page_size":{"description":"Page size (default 20)","type":"string"},"start_time":{"description":"Start time (Unix seconds or ISO8601)","type":"string"}},"required":["account_id"],"type":"object"},"name":"dex_tx_list"},{"description":"Broadcast a signed tx to the chain. [write] Requires user confirmation after transfer preview and prior signing via dex_wallet_sign_transaction. Solana: pass last_valid_block_height from dex_tx_get_sol_unsigned; an expired blockhash is rejected before the upstream send. account_id/address are auto-filled from the login session when omitted.","inputSchema":{"properties":{"account_id":{"description":"Account ID (for history_data); optional when logged in — resolved from session","type":"string"},"action_type":{"description":"Action type (history_data.action_type)","type":"string"},"address":{"description":"Sender wallet address (history_data.address); optional when logged in — resolved from session wallet for the chain","type":"string"},"chain":{"description":"Chain name: must match dex_chain_config response `chain` (canonical). Aliases are resolved via chain config before calling upstream.","type":"string"},"last_valid_block_height":{"description":"Solana: lastValidBlockHeight returned by dex_tx_get_sol_unsigned or the blockhash fetch. Broadcast is rejected when the chain height has passed it.","type":"number"},"mcp_token":{"description":"MCP session token obtained from login (dex_auth_google_login_poll or dex_auth_gate_login_poll). MUST be provided in every call to this tool after login; omitting it will result in 403","type":"string"},"memo":{"description":"Memo (history_data.memo)","type":"string"},"network":{"description":"Network name","type":"string"},"nonce":{"description":"Nonce (history_data.nonce)","type":"number"},"signed_tx":{"description":"Signed transaction data. For EVM chains: hex string (0x prefix added automatically). For other chains (e.g. Solana): use chain-specific format","type":"string"},"token_addr":{"description":"Token contract address (history_data.token_addr)","type":"string"},"token_name":{"description":"Token name (history_data.token_name)","type":"string"},"token_short_name":{"description":"Token symbol, e.g. USDT (history_data.token_short_name)","type":"string"},"trans_balance":{"description":"Display amount (history_data.trans_balance)","type":"string"},"trans_balance_usd":{"description":"USD value (history_data.trans_balance_usd)","type":"string"},"trans_gas_fee":{"description":"Gas fee display (history_data.trans_gas_fee)","type":"string"},"trans_min_unit_amount":{"description":"Amount in smallest unit (history_data.trans_min_unit_amount)","type":"string"},"trans_min_unit_gas_fee":{"description":"Gas fee in smallest unit (history_data.trans_min_unit_gas_fee)","type":"string"},"trans_oppo_address":{"description":"Counterparty address, e.g. recipient (history_data.trans_oppo_address)","type":"string"},"trans_time":{"description":"Transaction time ISO8601 (default: now)","type":"string"},"trans_type":{"description":"Transaction type (history_data.trans_type)","type":"string"}},"required":["chain","signed_tx"],"type":"object"},"name":"dex_tx_send_raw_transaction"},{"description":"Returns check-in fields for a swap stage (approve or swap). Call after prepare and before terminal tx-checkin script.","inputSchema":{"properties":{"mcp_token":{"description":"MCP session token (required in the tool schema). After Google or Gate wallet login, read it from login_result when dex_auth_google_login_poll or dex_auth_gate_login_poll returns success. The server checks this argument first, then the HTTP Authorization header (Bearer mcp_pat_...) — often the same string configured as headers.Authorization on your MCP server in local MCP client config. If there is no token yet, run auth start + poll first. If expired, try dex_auth_refresh_token; if that fails, log in again.","type":"string"},"stage":{"description":"Preview stage: 'approve' or 'swap'","type":"string"},"swap_session_id":{"description":"Swap session ID returned by dex_tx_swap_prepare","type":"string"}},"required":["swap_session_id","stage","mcp_token"],"type":"object"},"name":"dex_tx_swap_checkin_preview"},{"description":"Fetch swap order detail by order ID from swap_submit. → tx_detail for detail by on-chain hash.","inputSchema":{"properties":{"mcp_token":{"description":"MCP session token obtained from login (dex_auth_google_login_poll or dex_auth_gate_login_poll). MUST be provided in every call to this tool after login; omitting it will result in 403","type":"string"},"tx_order_id":{"description":"Transaction order ID from dex_tx_swap_submit","type":"string"}},"required":["tx_order_id"],"type":"object"},"name":"dex_tx_swap_detail"},{"description":"List swap/bridge order history with pagination; includes single-chain and cross-chain. → tx_list for transfer history.","inputSchema":{"properties":{"account_id":{"description":"Account ID (wallet address)","type":"string"},"dst_chain":{"description":"Destination chain ID filter. 0 or omit for all chains","type":"number"},"end_time":{"description":"End time filter (ISO8601 format)","type":"string"},"mcp_token":{"description":"MCP session token obtained from login (dex_auth_google_login_poll or dex_auth_gate_login_poll). MUST be provided in every call to this tool after login; omitting it will result in 403","type":"string"},"page_num":{"description":"Page number (0-based, default 0)","type":"number"},"page_size":{"description":"Page size (default 20)","type":"number"},"src_chain":{"description":"Source chain ID filter (e.g. 1=ETH, 56=BSC). 0 or omit for all chains","type":"number"},"start_time":{"description":"Start time filter (ISO8601 format, e.g. 2025-01-01T00:00:00Z)","type":"string"}},"required":["account_id"],"type":"object"},"name":"dex_tx_swap_history_list"},{"description":"Stage a swap session (server-side build only); returns swap_session_id. Does not sign or submit. Call after quote confirmed by user.","inputSchema":{"properties":{"account_id":{"description":"User account ID (UUID)","type":"string"},"amount":{"description":"Human-readable amount (e.g. '0.01')","type":"string"},"chain_id_in":{"description":"Source chain ID (e.g. 1=ETH, 56=BSC, 501=Solana)","type":"number"},"chain_id_out":{"description":"Destination chain ID. Same as chain_id_in for single-chain swap","type":"number"},"mcp_token":{"description":"MCP session token obtained from login (dex_auth_google_login_poll or dex_auth_gate_login_poll). MUST be provided in every call to this tool after login; omitting it will result in 403","type":"string"},"native_in":{"description":"⚠️ CRITICAL — Must be set correctly, wrong value causes transaction failure or fund loss. Simply check: is token_in a native/gas coin? If yes, set 1; if it's a contract token, set 0. Native coins: ETH, BNB, MATIC, AVAX, SOL — these are the chain's gas coins, native_in=1. Contract tokens: USDT, USDC, WETH, WBNB, DAI, etc. — these are ERC20/BEP20/SPL tokens, native_in=0. NOTE: BNB = native coin (native=1), WBNB = wrapped contract token (native=0). User saying 'BNB' means the native coin unless they explicitly say 'WBNB'. Same for ETH vs WETH, SOL vs WSOL. When native_in=1, token_in is auto-normalized to '-'.","type":"number"},"native_out":{"description":"⚠️ CRITICAL — Must be set correctly, wrong value causes transaction failure or fund loss. Simply check: is token_out a native/gas coin? If yes, set 1; if it's a contract token, set 0. Native coins: ETH, BNB, MATIC, AVAX, SOL — these are the chain's gas coins, native_out=1. Contract tokens: USDT, USDC, WETH, WBNB, DAI, etc. — these are ERC20/BEP20/SPL tokens, native_out=0. NOTE: BNB = native coin (native=1), WBNB = wrapped contract token (native=0). User saying 'BNB' means the native coin unless they explicitly say 'WBNB'. Same for ETH vs WETH, SOL vs WSOL. When native_out=1, token_out is auto-normalized to '-'. CROSS-CHAIN EXAMPLE: USDT(BSC) → SOL(Solana): native_in=0 (USDT is contract token), native_out=1 (SOL is native coin). CROSS-CHAIN EXAMPLE: ETH(Ethereum) → USDT(BSC): native_in=1 (ETH is native coin), native_out=0 (USDT is contract token).","type":"number"},"slippage":{"description":"Slippage as decimal (0.01=1%, 0.1=10%)","type":"number"},"to_wallet":{"description":"Destination chain receiving address. ONLY required for CROSS-CHAIN swaps where chain_id_in and chain_id_out belong to different address groups (e.g. EVM→Solana). Obtain from dex_wallet_get_addresses. Omit for single-chain swaps — defaults to user_wallet.","type":"string"},"token_in":{"description":"Source token address. Use '-' for native coin","type":"string"},"token_out":{"description":"Destination token address","type":"string"},"user_wallet":{"description":"User's wallet address matching the SOURCE CHAIN. MUST be chain-specific: call dex_wallet_get_addresses(account_id) to get addresses, use addresses[\"EVM\"] for EVM chains or addresses[\"SOL\"] for Solana (chain_id=501). NEVER use an EVM address (0x...) for Solana or a Solana address for EVM chains. For cross-chain swaps this is the FROM (source) chain address.","type":"string"}},"required":["chain_id_in","chain_id_out","token_in","token_out","amount","slippage","user_wallet","native_in","native_out","account_id"],"type":"object"},"name":"dex_tx_swap_prepare"},{"description":"Returns swap route and pricing. Call before swap_prepare; show result to user before proceeding. → transfer_preview for direct token send (not exchange).","inputSchema":{"properties":{"amount":{"description":"Human-readable amount of source token to swap, e.g. \"0.001\" for 0.001 BNB, \"1\" for 1 USDT. Do NOT convert to smallest unit (wei/lamports). Obtained directly from user's chat message.","type":"string"},"chain_id_in":{"description":"Source chain ID. Use well-known IDs: ETH=1, BSC=56, Polygon=137, Arbitrum=42161, Base=8453, Avalanche=43114, Solana=501. Only call dex_chain_config for uncommon/unknown chains. For single-chain swap, must equal chain_id_out.","type":"number"},"chain_id_out":{"description":"Destination chain ID. Use same well-known IDs as chain_id_in. For single-chain swap, set equal to chain_id_in. For cross-chain swap, set to the target chain's ID.","type":"number"},"mcp_token":{"description":"MCP session token obtained from login (dex_auth_google_login_poll or dex_auth_gate_login_poll). MUST be provided in every call to this tool after login; omitting it will result in 403","type":"string"},"native_in":{"description":"⚠️ CRITICAL — Must be set correctly, wrong value causes transaction failure or fund loss. Simply check: is token_in a native/gas coin? If yes, set 1; if it's a contract token, set 0. Native coins: ETH, BNB, MATIC, AVAX, SOL — these are the chain's gas coins, native_in=1. Contract tokens: USDT, USDC, WETH, WBNB, DAI, etc. — these are ERC20/BEP20/SPL tokens, native_in=0. NOTE: BNB = native coin (native=1), WBNB = wrapped contract token (native=0). User saying 'BNB' means the native coin unless they explicitly say 'WBNB'. Same for ETH vs WETH, SOL vs WSOL. When native_in=1, token_in is auto-normalized to '-'.","type":"number"},"native_out":{"description":"⚠️ CRITICAL — Must be set correctly, wrong value causes transaction failure or fund loss. Simply check: is token_out a native/gas coin? If yes, set 1; if it's a contract token, set 0. Native coins: ETH, BNB, MATIC, AVAX, SOL — these are the chain's gas coins, native_out=1. Contract tokens: USDT, USDC, WETH, WBNB, DAI, etc. — these are ERC20/BEP20/SPL tokens, native_out=0. NOTE: BNB = native coin (native=1), WBNB = wrapped contract token (native=0). User saying 'BNB' means the native coin unless they explicitly say 'WBNB'. Same for ETH vs WETH, SOL vs WSOL. When native_out=1, token_out is auto-normalized to '-'. CROSS-CHAIN EXAMPLE: USDT(BSC) → SOL(Solana): native_in=0 (USDT is contract token), native_out=1 (SOL is native coin). CROSS-CHAIN EXAMPLE: ETH(Ethereum) → USDT(BSC): native_in=1 (ETH is native coin), native_out=0 (USDT is contract token).","type":"number"},"slippage":{"description":"Slippage tolerance as decimal ratio: 0.01 = 1%, 0.03 = 3%. Valid range: 0.001 (0.1%) to 0.499 (49.9%). If the user already specified slippage, use it directly. Only ask to confirm when not provided. Default: 0.03 (3%).","type":"number"},"to_wallet":{"description":"Destination chain receiving address. ONLY required for CROSS-CHAIN swaps where chain_id_in and chain_id_out belong to different address groups (e.g. EVM→Solana or Solana→EVM). Obtain from dex_wallet_get_addresses: use addresses[\"SOL\"] if dest is Solana, addresses[\"EVM\"] if dest is EVM. Omit for single-chain swaps — defaults to user_wallet.","type":"string"},"token_in":{"description":"Source token contract address. Use \"-\" for native coins (ETH, BNB, MATIC, etc.). For ERC20/BEP20 tokens, provide the full contract address (e.g. 0x55d398326f99059ff775485246999027b3197955 for BSC USDT). Obtain from user input, wallet token list (wallet_get_token_list), or known token mappings. If native_in=1, this field will be auto-set to \"-\".","type":"string"},"token_out":{"description":"Destination token contract address. Use \"-\" for native coins. For ERC20/BEP20 tokens, provide the full contract address. Obtain from user input, wallet_get_token_list, or known token mappings. If native_out=1, this field will be auto-set to \"-\". For cross-chain swaps, use the token's contract address on the destination chain.","type":"string"},"user_wallet":{"description":"User's wallet address matching the SOURCE CHAIN. CRITICAL: You MUST use the chain-specific address — call dex_wallet_get_addresses(account_id) first, then use addresses[\"EVM\"] for EVM chains (ETH/BSC/Polygon/Arbitrum/Base/Avalanche) or addresses[\"SOL\"] for Solana (chain_id=501). NEVER pass an EVM address (0x...) for Solana transactions or vice versa. For cross-chain swaps this is the FROM (source) chain address.","type":"string"}},"required":["chain_id_in","chain_id_out","token_in","token_out","amount","slippage","user_wallet","native_in","native_out"],"type":"object"},"name":"dex_tx_swap_quote"},{"description":"[write] Sign the ERC20 approve tx for a staged EVM swap. Requires need_approved=true in prepare result.","inputSchema":{"properties":{"checkin_token":{"description":"Approve-stage checkin_token returned by the local skill check-in script after dex_tx_swap_checkin_preview(stage='approve')","type":"string"},"mcp_token":{"description":"MCP session token obtained from login (dex_auth_google_login_poll or dex_auth_gate_login_poll). MUST be provided in every call to this tool after login; omitting it will result in 403","type":"string"},"swap_session_id":{"description":"Swap session ID returned by dex_tx_swap_prepare","type":"string"}},"required":["swap_session_id","checkin_token"],"type":"object"},"name":"dex_tx_swap_sign_approve"},{"description":"[write] Sign the main swap tx for a staged session. EVM: call sign_approve first if need_approved=true. Solana: generates a fresh signable payload.","inputSchema":{"properties":{"checkin_token":{"description":"Swap-stage checkin_token returned by the local skill check-in script after dex_tx_swap_checkin_preview(stage='swap')","type":"string"},"mcp_token":{"description":"MCP session token obtained from login (dex_auth_google_login_poll or dex_auth_gate_login_poll). MUST be provided in every call to this tool after login; omitting it will result in 403","type":"string"},"swap_session_id":{"description":"Swap session ID returned by dex_tx_swap_prepare","type":"string"}},"required":["swap_session_id","checkin_token"],"type":"object"},"name":"dex_tx_swap_sign_swap"},{"description":"[write] Broadcast a staged swap to the chain. Does not sign. Requires all signing steps complete (sign_approve if EVM+approval, then sign_swap).","inputSchema":{"properties":{"mcp_token":{"description":"MCP session token obtained from login (dex_auth_google_login_poll or dex_auth_gate_login_poll). MUST be provided in every call to this tool after login; omitting it will result in 403","type":"string"},"swap_session_id":{"description":"Swap session ID returned by dex_tx_swap_prepare","type":"string"}},"required":["swap_session_id"],"type":"object"},"name":"dex_tx_swap_submit"},{"description":"Build a transfer summary (sender, recipient, amount, gas). Does not broadcast. Solana native: returns key_info only — after the user confirms, call dex_tx_get_sol_unsigned and sign that result immediately. Do not sign a Solana transaction built before confirmation. EVM: returns unsigned_tx_hex and txBundle. → swap_quote/swap_prepare for token exchange.","inputSchema":{"properties":{"amount":{"description":"Amount in token units. Precision depends on token/decimals. Examples: '1', '0.5', '0.000001'","type":"string"},"chain":{"description":"Chain name or alias (default ETH). Resolved to canonical name from chain config; downstream sign/broadcast should use the same logical chain.","type":"string"},"from":{"description":"Sender (your wallet) address","type":"string"},"max_fee_per_gas":{"description":"EVM only: override max fee per gas (wei). Use when replacing a pending tx: set ≥1.1× the previous max_fee_per_gas to fix replacement transaction underpriced.","type":"string"},"max_priority_fee_per_gas":{"description":"EVM only: override max priority fee per gas (wei). When replacing, set ≥1.1× previous max_priority_fee_per_gas.","type":"string"},"mcp_token":{"description":"MCP session token obtained from login (dex_auth_google_login_poll or dex_auth_gate_login_poll). MUST be provided in every call to this tool after login; omitting it will result in 403","type":"string"},"nonce":{"description":"Transaction nonce. Omit to use current chain nonce (eth_getTransactionCount), ensuring tx can be mined and found on explorer; wrong nonce causes tx to fail or not appear.","type":"string"},"priority_fee_micro_lamports":{"description":"Solana only: optional priority fee (micro-lamports per compute unit). Use 1000-10000 if broadcast returns replacement transaction underpriced.","type":"string"},"to":{"description":"Recipient address","type":"string"},"token":{"description":"Token symbol for display (default USDT). Use ETH/NATIVE for native; USDT for USDT; or use token_contract/token_mint for any token.","type":"string"},"token_contract":{"description":"EVM: ERC20 contract address for arbitrary token. When set, token_decimals is used (default 18). Solana: unused.","type":"string"},"token_decimals":{"description":"Token decimals (e.g. 6, 18). Required when using token_contract (EVM) or token_mint (Solana); default 18 for ERC20, 9 for SOL.","type":"string"},"token_mint":{"description":"Solana: SPL token mint address for SPL transfer. When set, token_decimals is required. EVM: unused.","type":"string"}},"required":["from","to","amount"],"type":"object"},"name":"dex_tx_transfer_preview"},{"description":"Prepare Gate Verify tx_checkin for x402 (EVM exact / EIP-3009 only): returns tx_checkin.message (64-hex digest) and x402_payment_required_b64 without signing. Flow: 1) this tool 2) Gate Verify tx_checkin with returned tx_checkin fields 3) dex_tx_x402_fetch with same url/body/headers, checkin_token, and the same x402_payment_required_b64. If x402_payment_required_b64 is omitted, performs one HTTP call and requires HTTP 402.","inputSchema":{"properties":{"body":{"description":"Optional request body","type":"string"},"headers":{"description":"Optional JSON object of request headers","type":"string"},"mcp_token":{"description":"MCP session token obtained from login (dex_auth_google_login_poll or dex_auth_gate_login_poll). MUST be provided in every call to this tool after login; omitting it will result in 403","type":"string"},"method":{"description":"HTTP method; default GET","type":"string"},"url":{"description":"Same URL as dex_tx_x402_fetch","type":"string"},"x402_payment_required_b64":{"description":"Optional: PAYMENT-REQUIRED header base64; when omitted, one outbound request is made and must return 402","type":"string"},"x402_preferred_network":{"description":"Same as dex_tx_x402_fetch","type":"string"}},"required":["url"],"type":"object"},"name":"dex_tx_x402_checkin_preview"},{"description":"[write] Send an HTTP request to the given URL. If the server responds with 402 Payment Required, pay via x402 (Coinbase-style: USDC EIP-3009 / Permit2 on EVM, SPL on Solana), retry with PAYMENT-SIGNATURE. REQUIRED: Gate Verify tx_checkin before signing; pass checkin_token. For EVM EIP-3009, use dex_tx_x402_checkin_preview first so the agent does not build digest manually; then pass checkin_token and the same x402_payment_required_b64 from preview. CoinGecko Pro x402: do not send x-cg-pro-api-key; default network Base unless x402_preferred_network=solana.","inputSchema":{"properties":{"body":{"description":"Optional request body","type":"string"},"checkin_token":{"description":"From Gate Verify MCP tool tx_checkin success (e.g. structuredContent.data.checkin_token or data.checkin_token). Required before every call so GV can verify signing.","type":"string"},"headers":{"description":"Optional JSON object of request headers","type":"string"},"mcp_token":{"description":"MCP session token obtained from login (dex_auth_google_login_poll or dex_auth_gate_login_poll). MUST be provided in every call to this tool after login; omitting it will result in 403","type":"string"},"method":{"description":"HTTP method; default GET","type":"string"},"url":{"description":"Request URL (CoinGecko x402: https://pro-api.coingecko.com/api/v3/x402/...)","type":"string"},"x402_payment_required_b64":{"description":"Optional: base64 PAYMENT-REQUIRED header payload from the same 402 as EIP-3009 tx-checkin. When set, skips the first HTTP call and pays using this snapshot (digest/checkin_token must match).","type":"string"},"x402_preferred_network":{"description":"Optional: base, eth, solana, eip155:8453, ... — restrict which accept.network is used. CoinGecko Pro /x402/ defaults to base when omitted.","type":"string"}},"required":["url","checkin_token"],"type":"object"},"name":"dex_tx_x402_fetch"},{"description":"Bind Gate exchange UID to session. Standalone Gate session only; gateUid must equal login_result.gate_uid from Gate OAuth. → replace_binding to rebind.","inputSchema":{"properties":{"gateUid":{"description":"Must equal login_result.gate_uid from Gate OAuth that created this session","type":"string"},"mcp_token":{"description":"MCP session token obtained from login (dex_auth_google_login_poll or dex_auth_gate_login_poll). MUST be provided in every call to this tool after login; omitting it will result in 403","type":"string"}},"required":["gateUid"],"type":"object"},"name":"dex_wallet_bind_exchange_uid"},{"description":"Returns address map by chain type (EVM, SOL, etc.). Call before transfer/swap tools to get the sender address.","inputSchema":{"properties":{"account_id":{"description":"Account ID","type":"string"},"mcp_token":{"description":"MCP session token obtained from login (dex_auth_google_login_poll or dex_auth_gate_login_poll). MUST be provided in every call to this tool after login; omitting it will result in 403","type":"string"}},"required":["account_id"],"type":"object"},"name":"dex_wallet_get_addresses"},{"description":"Returns current Gate UID binding for the session wallet.","inputSchema":{"properties":{"mcp_token":{"description":"MCP session token obtained from login (dex_auth_google_login_poll or dex_auth_gate_login_poll). MUST be provided in every call to this tool after login; omitting it will result in 403","type":"string"}},"required":[],"type":"object"},"name":"dex_wallet_get_bindings"},{"description":"Token balances and prices with pagination; filter by network_keys. → get_total_asset for portfolio summary only.","inputSchema":{"properties":{"account_id":{"description":"Account ID (optional, auto-detected from login session)","type":"string"},"mcp_token":{"description":"MCP session token obtained from login (dex_auth_google_login_poll or dex_auth_gate_login_poll). MUST be provided in every call to this tool after login; omitting it will result in 403","type":"string"},"network_keys":{"description":"Optional. Comma-separated network keys to filter (e.g. ETH,SOL,ARB). Omit or leave empty for all networks. Do not pass a separate chain field — use network_keys only.","type":"string"},"page":{"description":"Page number, default 1","type":"number"},"page_size":{"description":"Page size, default 20","type":"number"}},"required":[],"type":"object"},"name":"dex_wallet_get_token_list"},{"description":"Total portfolio value and 24h change. → get_token_list for per-token balance detail.","inputSchema":{"properties":{"account_id":{"description":"Account ID (optional, auto-detected from login session)","type":"string"},"mcp_token":{"description":"MCP session token obtained from login (dex_auth_google_login_poll or dex_auth_gate_login_poll). MUST be provided in every call to this tool after login; omitting it will result in 403","type":"string"}},"required":[],"type":"object"},"name":"dex_wallet_get_total_asset"},{"description":"Returns walletAddress, walletType, gateUid. With for_withdraw_to_exchange or for_gate_oauth_bind, also starts Gate OAuth when gateUid is missing.","inputSchema":{"properties":{"account_id":{"description":"Account ID; used with session to resolve EVM address if wallet_address omitted","type":"string"},"for_gate_oauth_bind":{"description":"Bind/rebind Gate exchange: when walletType is NOT gate_mcp/gate_quick, start Gate OAuth (Google: link); when already Gate-native with gateUid, returns nextSteps only","type":"boolean"},"for_withdraw_to_exchange":{"description":"Withdraw-to-exchange: when gateUid is missing, start Gate device OAuth (Google: link binding)","type":"boolean"},"mcp_token":{"description":"MCP session token obtained from login (dex_auth_google_login_poll or dex_auth_gate_login_poll). MUST be provided in every call to this tool after login; omitting it will result in 403","type":"string"},"wallet_address":{"description":"EVM wallet address to classify","type":"string"}},"required":[],"type":"object"},"name":"dex_wallet_get_wallet_type"},{"description":"Google sessions only: starts Gate OAuth to bind Gate exchange UID to this session. mcp_token stays unchanged after poll.","inputSchema":{"properties":{"mcp_token":{"description":"MCP session token obtained from login (dex_auth_google_login_poll or dex_auth_gate_login_poll). MUST be provided in every call to this tool after login; omitting it will result in 403","type":"string"}},"required":[],"type":"object"},"name":"dex_wallet_google_gate_bind_start"},{"description":"Rebind Gate exchange UID. [write] newUid must equal login_result.gate_uid from a fresh Gate OAuth. Blocked for gate_mcp/gate_quick sessions and Google sessions.","inputSchema":{"properties":{"mcp_token":{"description":"MCP session token obtained from login (dex_auth_google_login_poll or dex_auth_gate_login_poll). MUST be provided in every call to this tool after login; omitting it will result in 403","type":"string"},"newUid":{"description":"Must equal login_result.gate_uid from latest Gate OAuth (stamped on session)","type":"string"}},"required":["newUid"],"type":"object"},"name":"dex_wallet_replace_binding"},{"description":"Sign a 32-byte hex message with wallet key. [write] Requires checkin_token from terminal tx-checkin. → sign_transaction for raw tx signing.","inputSchema":{"properties":{"chain":{"description":"Chain: dex_chain_config name/alias (e.g. ETH, BSC, SOL), or pass EVM / SOL directly for the signing family. Unknown names are rejected via chain config; web3_business_wallet sign-message receives chain \"EVM\" or lowercase \"sol\" for Solana.","type":"string"},"checkin_token":{"description":"From successful tx-checkin response: the checkin_token string (terminal CLI stdout JSON). Must match the signing intent in the same flow.","type":"string"},"mcp_token":{"description":"MCP session token obtained from login (dex_auth_google_login_poll or dex_auth_gate_login_poll). MUST be provided in every call to this tool after login; omitting it will result in 403","type":"string"},"message":{"description":"Message to sign (hex)","type":"string"}},"required":["message","chain","checkin_token"],"type":"object"},"name":"dex_wallet_sign_message"},{"description":"Sign a raw unsigned transaction. [write] Requires user confirmation after transfer preview and checkin_token from terminal tx-checkin. → dex_tx_send_raw_transaction to broadcast.","inputSchema":{"properties":{"chain":{"description":"Chain name: must match dex_chain_config response `chain` (canonical). Aliases are resolved via chain config.","type":"string"},"checkin_token":{"description":"From successful tx-checkin response: the checkin_token string (terminal CLI stdout JSON). Must match the signing intent in the same flow.","type":"string"},"mcp_token":{"description":"MCP session token obtained from login (dex_auth_google_login_poll or dex_auth_gate_login_poll). MUST be provided in every call to this tool after login; omitting it will result in 403","type":"string"},"raw_tx":{"description":"Raw transaction data","type":"string"}},"required":["raw_tx","chain","checkin_token"],"type":"object"},"name":"dex_wallet_sign_transaction"},{"description":"Fetch Gate exchange deposit address for the session-bound Gate UID. [write] amount must be ≥ min_deposit_amount; do not pass uid — it is resolved from the session.","inputSchema":{"properties":{"amount":{"description":"Required. Human-readable amount (same units as on-chain transfer); must be ≥ exchange min_deposit_amount","type":"string"},"chain_name":{"description":"Chain name, e.g. BSC, ETH","type":"string"},"coin_symbol":{"description":"Coin symbol, e.g. USDT","type":"string"},"mcp_token":{"description":"MCP session token obtained from login (dex_auth_google_login_poll or dex_auth_gate_login_poll). MUST be provided in every call to this tool after login; omitting it will result in 403","type":"string"},"token_address":{"description":"Optional. ERC20 contract for gate-deposit; empty for native. If omitted, USDT is resolved from chain_name; other symbols may require this field","type":"string"}},"required":["chain_name","coin_symbol","amount"],"type":"object"},"name":"dex_withdraw_deposit_address"}]},"body_sha256":"54bc7598a826a41b0c04b8af47abdd60f99d841302db86e17fc598e7a842b070","prev_id":null,"leaf":"0xcb7fe66fca08ce52ff487ce39e36e6fa26fedea02a0d0d6e6c1b4e1e936c3cf2","leaf_text":"{\"body\":\"54bc7598a826a41b0c04b8af47abdd60f99d841302db86e17fc598e7a842b070\",\"id\":771880,\"kind\":\"mcp.tools\",\"method\":\"probe.mcp/1\",\"observed_us\":1793191193151361,\"prev\":null,\"subject\":\"26cabd48-6ad3-43a2-902a-771d6bb9e6dd\",\"subject_kind\":\"endpoint\"}","day":{"day":"2026-10-28","leaves":231336,"root":"0x2c19037464cc4c493624565f01775d6446fc78eaa118fc6865bfe2bfca9ff78e","chained":"0xd1d7dee8322ceff8f4c8d83aa1fe4a4466825c2af1c97dbde3d35db61234f7be","anchor_chain":"eip155:5042002","anchor_tx":"0x8bae2b1d097834c8b458513862d70d29ee807e98dc2e863b27250131c15b35ae","anchor_block":69584042},"proof":["0xcb7f68c9f52067788494dc66d8f8248d7bd03bc90bccfc3b5029b9cca019c482","0x15f09a3416340f3277006a5f9b6712942e2e7962a3ad16f2a8c7e9d5db25ce31","0x2045c8e0dc0d22d46c9d55f40254b2b39cfa5f706e8767f8ebcfd6aade73b0ea","0xe7e7bfe7d62dc7ae09ffd5f0384caa161cfedbb288bc5e883d7eaac0720fd229","0xbe6ae7f000a696b5f0fcd1f429b1da27fd7de8ba81c73c7f373a12ef20ecc695","0x50ab313a031f129e5f90c2b04db072f718cf0b0306c97970dbbee99244368709","0x198fe73dd94fe682ee4188d922c9a1d70f94a5a093d31c383c56ed5d4e989279","0x9d3020d752f4d0d9654cb3bca4cc4c0d327882235d71c8eb97dbbd48e6f37d44","0xa2a83f08cffe87452293293b8e7416cde51bf2014dca363783f774918f33c109","0xc64edddcfc408bd1972e8b7edbd366baa426ce5a85a5fdd1023014223d3f5b6a","0x18faeef9bc85ae5311ad6b648824cd325602a5448b6840679cbb04f62e6fa92c","0x6c987a929fa86d932f4e27771a9c39d49f983a42654cb3f155d91abff381a956","0x1f99df47306e7104ac9c626f7183c80611a0f90b978c68f0770fd8379ecbaeb9","0x8e49280a62bd5d52127f332ab6aea9d7c57381f541e0178094a62272a9d2e741","0x6d86d2282dd724b1b80d031e4e3cf9ed095b746e38c9e58d933efb597daff87f","0x32beeeb960280bc48748681cb10297ede9403461fe9c8143fdf946548e552926","0xe08e8bd91858a8a10c46ecde9c29a6288b960987303173c5e882afb46ce91fa0","0xe6cfe00ae4e02bc12327e45b5f3334ea5850ba3bcc8e3101d30a8189856a95af"]}