{"name":"io.github.gateio-dev/gate-dex","slug":"gateio-dev-gate-dex","title":"Gate DEX MCP","description":"Gate DEX MCP for wallet auth, transfers, swaps, token info, market data, and RPC access.","url":"https://mcp.market/server/gateio-dev-gate-dex","rating":null,"grade":"D","score":43,"certified":false,"status":"active","category":"security","tags":["security"],"presence":{"score":36,"stars":45,"forks":23,"downloads_week":null,"last_push_at":"2026-11-04T03:18:41.000Z","license":"MIT"},"uptime":{"percent":14,"checks":28,"ok":4,"last_checked_at":"2026-11-15T08:51:06.608Z","last_ok_at":"2026-11-06T11:15:47.843Z","latency_ms":662},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/gate/gate-mcp","website":null,"version":"1.0.0","remotes":[{"type":"streamable-http","url":"https://api.gatemcp.ai/mcp/dex"}],"packages":[],"tools":[{"name":"dex_agentic_report","description":"Register agentic wallet addresses with the wallet service.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"]}},{"name":"dex_auth_gate_login_poll","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"]}},{"name":"dex_auth_gate_login_start","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"link_mcp_token":{"description":"Current Google wallet mcp_token for bind-only Gate OAuth; omit for standalone Gate login","type":"string"}},"required":[]}},{"name":"dex_auth_google_login_poll","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"]}},{"name":"dex_auth_google_login_start","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"required":[]}},{"name":"dex_auth_login_gate_wallet","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"]}},{"name":"dex_auth_login_google_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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"]}},{"name":"dex_auth_logout","description":"Revoke the MCP session identified by mcp_token.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"mcp_token":{"description":"MCP session token to revoke","type":"string"}},"required":["mcp_token"]}},{"name":"dex_chain_config","description":"Returns chain config (networkKey, accountKey, chainID). Use the returned chain value in all subsequent transfer/sign/broadcast tools.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"]}},{"name":"dex_market_get_kline","description":"OHLCV candles by period and window. Volume aggregates→get_tx_stats. Pool events→get_pair_liquidity.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"]}},{"name":"dex_market_get_pair_liquidity","description":"AMM pool deposit and withdrawal events. Candlesticks→get_kline. Volume stats→get_tx_stats.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"]}},{"name":"dex_market_get_tx_stats","description":"Per-interval buy/sell volume and tx counts (5m–24h). Candlesticks→get_kline. Pool events→get_pair_liquidity.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"]}},{"name":"dex_rpc_call","description":"Proxy a JSON-RPC call to a blockchain node.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"]}},{"name":"dex_token_get_coin_info","description":"Price, market snapshot, metadata, optional top holders. Security audit→get_risk_info.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"]}},{"name":"dex_token_get_coins_range_by_created_at","description":"Tokens launched within a given time window; chain optional for all networks.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"]}},{"name":"dex_token_get_risk_info","description":"Contract security audit (honeypot, tax, ownership flags). Price and market stats→get_coin_info.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"]}},{"name":"dex_token_list_cross_chain_bridge_tokens","description":"Receivable assets on target chain for a source token. Same-chain trading→list_swap_tokens.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"]}},{"name":"dex_token_list_swap_tokens","description":"Tradable assets on a chain; tag selects favorites or recommendations. Bridge targets→list_cross_chain_bridge_tokens.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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":[]}},{"name":"dex_token_ranking","description":"Top movers by 24h price change; direction selects gainers vs losers. Single token→get_coin_info.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"]}},{"name":"dex_tx_approve_preview","description":"Build ERC20/SPL approve or revoke tx (does not broadcast). Sign with dex_wallet_sign_transaction after user confirmation.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"]}},{"name":"dex_tx_detail","description":"Fetch transaction detail by on-chain hash. → swap_detail for swap order detail by order ID.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"]}},{"name":"dex_tx_gas","description":"Estimate on-chain gas price and gas limit for a given tx.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"]}},{"name":"dex_tx_get_sol_unsigned","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"]}},{"name":"dex_tx_list","description":"List wallet transaction history (transfers). → swap_history_list for swap/bridge orders. → tx_detail for single tx by hash.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"]}},{"name":"dex_tx_send_raw_transaction","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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","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"]}},{"name":"dex_tx_swap_checkin_preview","description":"Returns check-in fields for a swap stage (approve or swap). Call after prepare and before terminal tx-checkin script.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"]}},{"name":"dex_tx_swap_detail","description":"Fetch swap order detail by order ID from swap_submit. → tx_detail for detail by on-chain hash.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"]}},{"name":"dex_tx_swap_history_list","description":"List swap/bridge order history with pagination; includes single-chain and cross-chain. → tx_list for transfer history.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"]}},{"name":"dex_tx_swap_prepare","description":"Stage a swap session (server-side build only); returns swap_session_id. Does not sign or submit. Call after quote confirmed by user.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"]}},{"name":"dex_tx_swap_quote","description":"Returns swap route and pricing. Call before swap_prepare; show result to user before proceeding. → transfer_preview for direct token send (not exchange).","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"]}},{"name":"dex_tx_swap_sign_approve","description":"[write] Sign the ERC20 approve tx for a staged EVM swap. Requires need_approved=true in prepare result.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"]}},{"name":"dex_tx_swap_sign_swap","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"]}},{"name":"dex_tx_swap_submit","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).","write_action":true,"price_micros":0,"input_schema":{"type":"object","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"]}},{"name":"dex_tx_transfer_preview","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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","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"]}},{"name":"dex_tx_x402_checkin_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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"]}},{"name":"dex_tx_x402_fetch","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"]}},{"name":"dex_wallet_bind_exchange_uid","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"]}},{"name":"dex_wallet_get_addresses","description":"Returns address map by chain type (EVM, SOL, etc.). Call before transfer/swap tools to get the sender address.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"]}},{"name":"dex_wallet_get_bindings","description":"Returns current Gate UID binding for the session wallet.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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":[]}},{"name":"dex_wallet_get_token_list","description":"Token balances and prices with pagination; filter by network_keys. → get_total_asset for portfolio summary only.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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":[]}},{"name":"dex_wallet_get_total_asset","description":"Total portfolio value and 24h change. → get_token_list for per-token balance detail.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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":[]}},{"name":"dex_wallet_get_wallet_type","description":"Returns walletAddress, walletType, gateUid. With for_withdraw_to_exchange or for_gate_oauth_bind, also starts Gate OAuth when gateUid is missing.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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":[]}},{"name":"dex_wallet_google_gate_bind_start","description":"Google sessions only: starts Gate OAuth to bind Gate exchange UID to this session. mcp_token stays unchanged after poll.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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":[]}},{"name":"dex_wallet_replace_binding","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"]}},{"name":"dex_wallet_sign_message","description":"Sign a 32-byte hex message with wallet key. [write] Requires checkin_token from terminal tx-checkin. → sign_transaction for raw tx signing.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"]}},{"name":"dex_wallet_sign_transaction","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"]}},{"name":"dex_withdraw_deposit_address","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"]}}],"scan":{"score":43,"grade":"D","scanned_at":"2026-11-08T06:10:45.131Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-11-08T06:10:45.069Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":0,"max":20,"notes":["remote unreachable: HTTP 503"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (endpoint requires auth); not counted"]},"auth":{"score":5,"max":15,"notes":["no auth information"]},"maintenance":{"score":15,"max":15,"notes":["last push 4 days ago"]},"identity":{"score":6,"max":10,"notes":["namespace and repository owner differ","GitHub account older than a year"]}},"findings":[{"id":"reliability.unreachable","severity":"high","component":"reliability","title":"Remote endpoint did not respond","detail":"HTTP 503"}],"inputs":{"probes":[{"url":"https://api.gatemcp.ai/mcp/dex","reachable":false,"authRequired":false,"latencyMs":730,"error":"HTTP 503"}],"packages":[],"repo":{"found":true,"owner":"gate","repo":"gate-mcp","archived":false,"pushedAt":"2026-11-04T03:18:41Z","stars":45,"forks":23,"openIssues":11,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/234155391?v=4","ownerCreatedAt":"2025-09-24T09:04:10Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/234155391?v=4&s=128","source":"registry"},"presence":{"stars":45,"forks":23,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-11-04T03:18:41.000Z","score":36}}}},"grade_history":[{"kind":"restore","fromGrade":"F","toGrade":"D","reason":"score 43: Remote endpoint did not respond","createdAt":"2026-11-08T06:10:45.573Z"},{"kind":"revoke","fromGrade":"D","toGrade":"F","reason":"critical: Tells the model to hide behavior from the user","createdAt":"2026-10-28T05:54:49.868Z"}],"reviews":[]}