Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,544Letters: 14Defects: 1,324counted 2 min ago
teppi

Server definition

Hash
sha256:8d89749507db95cbde8d212b998950bb4c73a3d58407e0fda1e74b06be3c6746
What it is
What a remote MCP server returned when asked what it offers: 47 tools

The blob, as servednamed by its sha256

{ "instructions": "Gate Agentic Wallet MCP Server — authenticate, query balances, sign transactions, and trade across EVM chains and Solana. For any protected wallet or transaction action, decide capability by visible tools rather than the server label. CRITICAL: After a successful login (dex_auth_google_login_poll or dex_auth_gate_login_poll returns status 'ok'), store the mcp_token from login_result. You MUST pass this mcp_token in the mcp_token parameter of EVERY subsequent protected tool call. Without it, all protected calls will fail with 403. If a protected tool fails because mcp token is missing, expired, invalid, or the session access token is missing, start Google login recovery via dex_auth_google_login_start/dex_auth_google_login_poll when available, then retry the original protected action once. In user-visible replies, do not print MCP tool names (dex_*); use plain-language section titles and summaries. After dex_wallet_get_wallet_type: always show walletAddress, walletType, gateUid in a table; if OAuth binding is required, show nextSteps; gateOAuthUrl/flow id when for_withdraw_to_exchange=true (withdraw) or for_gate_oauth_bind=true (non–Gate-native wallet bind/rebind). For transfers and withdraw-to-exchange: collect and show main parameters (and optional dex_tx_transfer_preview for fees); do not call dex_wallet_sign_transaction or dex_tx_send_raw_transaction until the user explicitly confirms (e.g. confirm). Only claim that wallet capability is missing after confirming that both the required protected tools and auth tools are unavailable.", "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", "outputSchema": null }, { "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" } }, "required": [ "flow_id" ], "type": "object" }, "name": "dex_auth_gate_login_poll", "outputSchema": null }, { "description": "Start Gate device OAuth; returns verification_url. 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", "outputSchema": null }, { "description": "Poll Google OAuth flow; returns pending/ok/error. [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" } }, "required": [ "flow_id" ], "type": "object" }, "name": "dex_auth_google_login_poll", "outputSchema": null }, { "description": "Returns browser verification URL for Google device OAuth.", "inputSchema": { "properties": {}, "required": [], "type": "object" }, "name": "dex_auth_google_login_start", "outputSchema": null }, { "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", "outputSchema": null }, { "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", "outputSchema": null }, { "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", "outputSchema": null }, { "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", "outputSchema": null }, { "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", "outputSchema": null }, { "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", "outputSchema": null }, { "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", "outputSchema": null }, { "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", "outputSchema": null }, { "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", "outputSchema": null }, { "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", "outputSchema": null }, { "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", "outputSchema": null }, { "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", "outputSchema": null }, { "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", "outputSchema": null }, { "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", "outputSchema": null }, { "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", "outputSchema": null }, { "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", "outputSchema": null }, { "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", "outputSchema": null }, { "description": "Solana only: build fresh native SOL unsigned tx with latest blockhash; avoids Blockhash not found. Sign immediately. → transfer_preview for full summary first.", "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", "outputSchema": null }, { "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", "outputSchema": null }, { "description": "Broadcast a signed tx to the chain. [write] Requires user confirmation after transfer preview and prior signing via dex_wallet_sign_transaction. 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" }, "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", "outputSchema": null }, { "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", "outputSchema": null }, { "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", "outputSchema": null }, { "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", "outputSchema": null }, { "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", "outputSchema": null }, { "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", "outputSchema": null }, { "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", "outputSchema": null }, { "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", "outputSchema": null }, { "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", "outputSchema": null }, { "description": "Build unsigned transfer tx; displays summary (sender, recipient, amount, gas). Returns unsigned_tx_hex and txBundle for check-in. Does not broadcast. Wait for user confirmation before signing. → 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", "outputSchema": null }, { "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", "outputSchema": null }, { "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", "outputSchema": null }, { "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", "outputSchema": null }, { "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", "outputSchema": null }, { "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", "outputSchema": null }, { "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", "outputSchema": null }, { "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", "outputSchema": null }, { "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", "outputSchema": null }, { "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", "outputSchema": null }, { "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", "outputSchema": null }, { "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", "outputSchema": null }, { "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", "outputSchema": null }, { "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", "outputSchema": null } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:8d89749507db95cbde8d212b998950bb4c73a3d58407e0fda1e74b06be3c6746 | sha256sum