Vurto Swap
Ce que fait ce MCP
Quotes, builds, signs, executes, and monitors non-custodial token swaps across EVM chains and Solana.
Outils
Schéma d’entrée
{'type': 'object', 'required': ['chainId', 'wallet', 'legA', 'legB'], 'properties': {'legA': {'type': 'object', 'properties': {'amount': {'type': 'string', 'description': 'Human decimal amount, e.g. "100". Use this OR amountRaw, not both.'}, 'wallet': {'type': 'string', 'description': 'Wallet that will sign. Required for builds and EVM execution/history calls. On an anonymous EVM quote, pass it to make the returned quoteId executable; without it the quote is indicative.'}, 'chainId': {'type': ['integer', 'string'], 'description': 'EVM: integer from GET /v1/chains (1, 10, 56, 100, 137, 8453, 42161, 43114, 130). Solana: string from GET /v1/svm/chains ("solana-mainnet").'}, 'quoteId': {'type': 'string', 'description': 'Optional: build exactly this route from a prior double_quote.'}, 'tokenIn': {'type': 'string', 'description': "Contract address (Solana: mint), or symbol (case-insensitive). A symbol matching more than one token on this chain fails with ambiguous_token and every candidate â\x80\x94 pick the address you meant and retry. On Solana only VERIFIED tokens resolve by symbol, because there anyone can mint a token using another one's symbol; an unverified token has to be named by its mint."}, 'receiver': {'type': 'string', 'description': 'Optional: deliver the output to this address instead of the signing wallet. Only providers with supportsReceiver true on the resulting quote honor it â\x80\x94 others are left out of quotes[] entirely rather than risk sending to the wrong address. supportsReceiver is present on Solana quotes too, so read it instead of assuming. On Solana, selling into native SOL with a separate destination is refused on every provider (receiver_native_sol_unsupported): closing the wrapped-SOL account sends balance and rent to whoever signs. Ask for wSOL instead.'}, 'tokenOut': {'type': 'string', 'description': 'Contract address, or symbol.'}, 'amountRaw': {'type': 'string', 'description': "Raw integer string in tokenIn's smallest unit."}, 'slippageBps': {'type': 'integer', 'description': 'Optional, a sane per-pair default applies when omitted.'}}, 'additionalProperties': False}, 'legB': {'type': 'object', 'properties': {'amount': {'type': 'string', 'description': 'Human decimal amount, e.g. "100". Use this OR amountRaw, not both.'}, 'wallet': {'type': 'string', 'description': 'Wallet that will sign. Required for builds and EVM execution/history calls. On an anonymous EVM quote, pass it to make the returned quoteId executable; without it the quote is indicative.'}, 'chainId': {'type': ['integer', 'string'], 'description': 'EVM: integer from GET /v1/chains (1, 10, 56, 100, 137, 8453, 42161, 43114, 130). Solana: string from GET /v1/svm/chains ("solana-mainnet").'}, 'quoteId': {'type': 'string'}, 'tokenIn': {'type': 'string', 'description': "Contract address (Solana: mint), or symbol (case-insensitive). A symbol matching more than one token on this chain fails with ambiguous_token and every candidate â\x80\x94 pick the address you meant and retry. On Solana only VERIFIED tokens resolve by symbol, because there anyone can mint a token using another one's symbol; an unverified token has to be named by its mint."}, 'receiver': {'type': 'string', 'description': 'Optional: deliver the output to this address instead of the signing wallet. Only providers with supportsReceiver true on the resulting quote honor it â\x80\x94 others are left out of quotes[] entirely rather than risk sending to the wrong address. supportsReceiver is present on Solana quotes too, so read it instead of assuming. On Solana, selling into native SOL with a separate destination is refused on every provider (receiver_native_sol_unsupported): closing the wrapped-SOL account sends balance and rent to whoever signs. Ask for wSOL instead.'}, 'tokenOut': {'type': 'string', 'description': 'Contract address, or symbol.'}, 'amountRaw': {'type': 'string', 'description': "Raw integer string in tokenIn's smallest unit."}, 'slippageBps': {'type': 'integer', 'description': 'Optional, a sane per-pair default applies when omitted.'}}, 'additionalProperties': False}, 'wallet': {'type': 'string', 'description': 'Wallet that will sign. Required for builds and EVM execution/history calls. On an anonymous EVM quote, pass it to make the returned quoteId executable; without it the quote is indicative.'}, 'chainId': {'type': ['integer', 'string'], 'description': 'EVM: integer from GET /v1/chains (1, 10, 56, 100, 137, 8453, 42161, 43114, 130). Solana: string from GET /v1/svm/chains ("solana-mainnet").'}, 'maxSlippageBps': {'type': 'integer', 'description': 'Optional ceiling, 0-10000, applied to both legs.'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', 'required': ['mode', 'chainId', 'legA', 'legB'], 'properties': {'legA': {'type': 'object', 'required': ['tokenIn', 'tokenOut'], 'properties': {'amount': {'type': 'string', 'description': 'Human decimal amount, e.g. "100". Use this OR amountRaw, not both.'}, 'wallet': {'type': 'string', 'description': 'Wallet that will sign. Required for builds and EVM execution/history calls. On an anonymous EVM quote, pass it to make the returned quoteId executable; without it the quote is indicative.'}, 'chainId': {'type': ['integer', 'string'], 'description': 'EVM: integer from GET /v1/chains (1, 10, 56, 100, 137, 8453, 42161, 43114, 130). Solana: string from GET /v1/svm/chains ("solana-mainnet").'}, 'tokenIn': {'type': 'string', 'description': "Contract address (Solana: mint), or symbol (case-insensitive). A symbol matching more than one token on this chain fails with ambiguous_token and every candidate â\x80\x94 pick the address you meant and retry. On Solana only VERIFIED tokens resolve by symbol, because there anyone can mint a token using another one's symbol; an unverified token has to be named by its mint."}, 'receiver': {'type': 'string', 'description': 'Optional: deliver the output to this address instead of the signing wallet. Only providers with supportsReceiver true on the resulting quote honor it â\x80\x94 others are left out of quotes[] entirely rather than risk sending to the wrong address. supportsReceiver is present on Solana quotes too, so read it instead of assuming. On Solana, selling into native SOL with a separate destination is refused on every provider (receiver_native_sol_unsupported): closing the wrapped-SOL account sends balance and rent to whoever signs. Ask for wSOL instead.'}, 'tokenOut': {'type': 'string', 'description': 'Contract address, or symbol.'}, 'amountRaw': {'type': 'string', 'description': "Raw integer string in tokenIn's smallest unit."}, 'slippageBps': {'type': 'integer', 'description': 'Optional, a sane per-pair default applies when omitted.'}}, 'additionalProperties': False}, 'legB': {'type': 'object', 'required': ['tokenIn', 'tokenOut'], 'properties': {'amount': {'type': 'string', 'description': 'Human decimal amount, e.g. "100". Use this OR amountRaw, not both.'}, 'wallet': {'type': 'string', 'description': 'Wallet that will sign. Required for builds and EVM execution/history calls. On an anonymous EVM quote, pass it to make the returned quoteId executable; without it the quote is indicative.'}, 'chainId': {'type': ['integer', 'string'], 'description': 'EVM: integer from GET /v1/chains (1, 10, 56, 100, 137, 8453, 42161, 43114, 130). Solana: string from GET /v1/svm/chains ("solana-mainnet").'}, 'tokenIn': {'type': 'string', 'description': "Contract address (Solana: mint), or symbol (case-insensitive). A symbol matching more than one token on this chain fails with ambiguous_token and every candidate â\x80\x94 pick the address you meant and retry. On Solana only VERIFIED tokens resolve by symbol, because there anyone can mint a token using another one's symbol; an unverified token has to be named by its mint."}, 'receiver': {'type': 'string', 'description': 'Optional: deliver the output to this address instead of the signing wallet. Only providers with supportsReceiver true on the resulting quote honor it â\x80\x94 others are left out of quotes[] entirely rather than risk sending to the wrong address. supportsReceiver is present on Solana quotes too, so read it instead of assuming. On Solana, selling into native SOL with a separate destination is refused on every provider (receiver_native_sol_unsupported): closing the wrapped-SOL account sends balance and rent to whoever signs. Ask for wSOL instead.'}, 'tokenOut': {'type': 'string', 'description': 'Contract address, or symbol.'}, 'amountRaw': {'type': 'string', 'description': "Raw integer string in tokenIn's smallest unit."}, 'slippageBps': {'type': 'integer', 'description': 'Optional, a sane per-pair default applies when omitted.'}}, 'additionalProperties': False}, 'mode': {'enum': ['out', 'in'], 'type': 'string', 'description': '"out": one source, two destinations. "in": two sources, one destination.'}, 'wallet': {'type': 'string', 'description': 'Wallet that will sign. Required for builds and EVM execution/history calls. On an anonymous EVM quote, pass it to make the returned quoteId executable; without it the quote is indicative.'}, 'chainId': {'type': ['integer', 'string'], 'description': 'EVM: integer from GET /v1/chains (1, 10, 56, 100, 137, 8453, 42161, 43114, 130). Solana: string from GET /v1/svm/chains ("solana-mainnet").'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', 'required': ['chainId', 'wallet', 'inputLegs', 'outputLegs'], 'properties': {'wallet': {'type': 'string', 'description': 'Wallet that will sign. Required for builds and EVM execution/history calls. On an anonymous EVM quote, pass it to make the returned quoteId executable; without it the quote is indicative.'}, 'chainId': {'type': ['integer', 'string'], 'description': 'EVM: integer from GET /v1/chains (1, 10, 56, 100, 137, 8453, 42161, 43114, 130). Solana: string from GET /v1/svm/chains ("solana-mainnet").'}, 'inputLegs': {'type': 'array', 'items': {'type': 'object', 'required': ['tokenIn'], 'properties': {'amount': {'type': 'string', 'description': 'Human decimal amount, e.g. "100". Use this OR amountRaw, not both.'}, 'tokenIn': {'type': 'string', 'description': 'Contract address, or symbol (case-insensitive).'}, 'amountRaw': {'type': 'string', 'description': "Raw integer string in tokenIn's smallest unit."}}, 'additionalProperties': False}, 'minItems': 1}, 'outputLegs': {'type': 'array', 'items': {'type': 'object', 'required': ['tokenOut', 'outputPercent'], 'properties': {'receiver': {'type': 'string', 'description': "Optional: deliver this leg's output to a different address than the signing wallet."}, 'tokenOut': {'type': 'string', 'description': 'Contract address, or symbol.'}, 'outputPercent': {'type': 'integer', 'description': 'Integer percent (1-100) of the TOTAL basket value this leg receives. Every outputLegs[].outputPercent in the request must sum to exactly 100.'}}, 'additionalProperties': False}, 'minItems': 1}, 'slippageBps': {'type': 'integer', 'description': 'Optional, 5-500, applied to every leg. Default 50.'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', 'required': ['chainId', 'inputLegs', 'outputLegs'], 'properties': {'wallet': {'type': 'string', 'description': 'Wallet that will sign. Required for builds and EVM execution/history calls. On an anonymous EVM quote, pass it to make the returned quoteId executable; without it the quote is indicative.'}, 'chainId': {'type': ['integer', 'string'], 'description': 'EVM: integer from GET /v1/chains (1, 10, 56, 100, 137, 8453, 42161, 43114, 130). Solana: string from GET /v1/svm/chains ("solana-mainnet"). On EVM the multi-swap router must be deployed on the chain or the quote fails with multi_swap_not_supported_on_chain; on Solana there is no router contract, several top-level instructions in one transaction are already all-or-nothing by runtime rule.'}, 'inputLegs': {'type': 'array', 'items': {'type': 'object', 'required': ['tokenIn'], 'properties': {'amount': {'type': 'string', 'description': 'Human decimal amount, e.g. "100". Use this OR amountRaw, not both.'}, 'tokenIn': {'type': 'string', 'description': 'Contract address, or symbol (case-insensitive).'}, 'amountRaw': {'type': 'string', 'description': "Raw integer string in tokenIn's smallest unit."}}, 'additionalProperties': False}, 'minItems': 1}, 'outputLegs': {'type': 'array', 'items': {'type': 'object', 'required': ['tokenOut', 'outputPercent'], 'properties': {'receiver': {'type': 'string', 'description': "Optional: deliver this leg's output to a different address than the signing wallet."}, 'tokenOut': {'type': 'string', 'description': 'Contract address, or symbol.'}, 'outputPercent': {'type': 'integer', 'description': 'Integer percent (1-100) of the TOTAL basket value this leg receives. Every outputLegs[].outputPercent in the request must sum to exactly 100.'}}, 'additionalProperties': False}, 'minItems': 1}, 'slippageBps': {'type': 'integer', 'description': 'Optional, 5-500, applied to every leg. Default 50.'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', 'required': ['buildId', 'walletAddress', 'chainId', 'step'], 'properties': {'step': {'type': 'object', 'properties': {'tx': {'type': 'object', 'properties': {'to': {'type': 'string'}, 'data': {'type': 'string'}, 'value': {'type': 'string'}}, 'description': 'Required when type is "approve" or "transaction".'}, 'type': {'enum': ['approve', 'transaction', 'signature'], 'type': 'string', 'description': 'EVM only.'}, 'typedData': {'type': 'object', 'properties': {'types': {'type': 'object'}, 'domain': {'type': 'object'}, 'message': {'type': 'object'}, 'primaryType': {'type': 'string'}}, 'description': 'Required when type is "signature" â\x80\x94 pass steps[].typedData from swap_build verbatim.'}, 'transaction': {'type': 'string', 'description': 'Solana only: build.transaction, base64, verbatim.'}, 'executionRef': {'type': 'string', 'description': 'Solana only: build.executionRef when the build has one. Its absence is meaningful, not an omission: a route we assembled ourselves is broadcast directly, an aggregator order has to go back to the aggregator to land.'}, 'humanSummary': {'type': 'string'}}, 'description': "EVM: one entry from swap_build's steps[]. Solana: {transaction, executionRef} from the build."}, 'buildId': {'type': 'string', 'description': 'From a prior swap_build/swap_refresh response.'}, 'chainId': {'type': ['integer', 'string'], 'description': 'EVM: integer from GET /v1/chains (1, 10, 56, 100, 137, 8453, 42161, 43114, 130). Solana: string from GET /v1/svm/chains ("solana-mainnet").'}, 'walletAddress': {'type': 'string', 'description': 'The wallet the plan was built for. The signer refuses to sign if the connected wallet does not match. On Solana this is base58 and CASE-SENSITIVE: lowercasing it produces a different, non-existent address.'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', 'properties': {'txHash': {'type': 'string', 'pattern': '^0x[0-9a-fA-F]{64}$', 'description': 'EVM transaction swap only; do not report approve hashes.'}, 'wallet': {'type': 'string', 'description': 'Wallet that will sign. Required for builds and EVM execution/history calls. On an anonymous EVM quote, pass it to make the returned quoteId executable; without it the quote is indicative.'}, 'buildId': {'type': 'string', 'description': 'Solana: buildId returned by swap_build.'}, 'chainId': {'type': ['integer', 'string'], 'description': 'EVM CoW: integer chain id. Solana may use "solana-mainnet", but buildId + signature are sufficient.'}, 'quoteId': {'type': 'string', 'description': 'EVM: quote id from the built plan.'}, 'signature': {'type': 'string', 'description': 'EVM: EIP-712 CoW signature. Solana: transaction signature.'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', 'required': ['chainId', 'wallet'], 'properties': {'amount': {'type': 'string', 'description': 'Human decimal amount, e.g. "100". Use this OR amountRaw, not both.'}, 'wallet': {'type': 'string', 'description': 'Wallet that will sign. Required for builds and EVM execution/history calls. On an anonymous EVM quote, pass it to make the returned quoteId executable; without it the quote is indicative.'}, 'chainId': {'type': ['integer', 'string'], 'description': 'EVM: integer from GET /v1/chains (1, 10, 56, 100, 137, 8453, 42161, 43114, 130). Solana: string from GET /v1/svm/chains ("solana-mainnet").'}, 'quoteId': {'type': 'string', 'description': 'Optional: build exactly this route from a prior swap_quote, instead of quoting fresh.'}, 'tokenIn': {'type': 'string', 'description': "Contract address (Solana: mint), or symbol (case-insensitive). A symbol matching more than one token on this chain fails with ambiguous_token and every candidate â\x80\x94 pick the address you meant and retry. On Solana only VERIFIED tokens resolve by symbol, because there anyone can mint a token using another one's symbol; an unverified token has to be named by its mint."}, 'receiver': {'type': 'string', 'description': 'Optional: deliver the output to this address instead of the signing wallet. Only providers with supportsReceiver true on the resulting quote honor it â\x80\x94 others are left out of quotes[] entirely rather than risk sending to the wrong address. supportsReceiver is present on Solana quotes too, so read it instead of assuming. On Solana, selling into native SOL with a separate destination is refused on every provider (receiver_native_sol_unsupported): closing the wrapped-SOL account sends balance and rent to whoever signs. Ask for wSOL instead.'}, 'tokenOut': {'type': 'string', 'description': 'Contract address, or symbol.'}, 'amountRaw': {'type': 'string', 'description': "Raw integer string in tokenIn's smallest unit."}, 'slippageBps': {'type': 'integer', 'description': 'Optional, a sane per-pair default applies when omitted.'}, 'maxSlippageBps': {'type': 'integer', 'description': 'Optional ceiling, 0-10000, enforced on every future refresh of this build â\x80\x94 once set it never loosens.'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', 'required': ['chainId', 'tokenIn', 'tokenOut'], 'properties': {'amount': {'type': 'string', 'description': 'Human decimal amount, e.g. "100". Use this OR amountRaw, not both.'}, 'wallet': {'type': 'string', 'description': 'Wallet that will sign. Required for builds and EVM execution/history calls. On an anonymous EVM quote, pass it to make the returned quoteId executable; without it the quote is indicative.'}, 'chainId': {'type': ['integer', 'string'], 'description': 'EVM: integer from GET /v1/chains (1, 10, 56, 100, 137, 8453, 42161, 43114, 130). Solana: string from GET /v1/svm/chains ("solana-mainnet").'}, 'tokenIn': {'type': 'string', 'description': "Contract address (Solana: mint), or symbol (case-insensitive). A symbol matching more than one token on this chain fails with ambiguous_token and every candidate â\x80\x94 pick the address you meant and retry. On Solana only VERIFIED tokens resolve by symbol, because there anyone can mint a token using another one's symbol; an unverified token has to be named by its mint."}, 'receiver': {'type': 'string', 'description': 'Optional: deliver the output to this address instead of the signing wallet. Only providers with supportsReceiver true on the resulting quote honor it â\x80\x94 others are left out of quotes[] entirely rather than risk sending to the wrong address. supportsReceiver is present on Solana quotes too, so read it instead of assuming. On Solana, selling into native SOL with a separate destination is refused on every provider (receiver_native_sol_unsupported): closing the wrapped-SOL account sends balance and rent to whoever signs. Ask for wSOL instead.'}, 'tokenOut': {'type': 'string', 'description': 'Contract address, or symbol.'}, 'amountRaw': {'type': 'string', 'description': "Raw integer string in tokenIn's smallest unit."}, 'slippageBps': {'type': 'integer', 'description': 'Optional, a sane per-pair default applies when omitted.'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', 'required': [], 'properties': {'wallet': {'type': 'string', 'description': 'Wallet that will sign. Required for builds and EVM execution/history calls. On an anonymous EVM quote, pass it to make the returned quoteId executable; without it the quote is indicative.'}, 'signature': {'type': 'string', 'description': 'Solana: the transaction signature. Answers come from the network itself: confirmed, pending, failed, or expired (past lastValidBlockHeight the transaction can no longer enter any block).'}, 'executionId': {'type': 'string', 'description': 'EVM: the id returned by report_execution.'}}, 'additionalProperties': False}
Modifications récentes des outils
Serveurs MCP similaires
SAP MCP Server
Provides an MCP gateway connecting SAP-related tools with Solana, DeFi, decentralized identity, and x402 payments.
FortFi Treasury MCP
Provides policy-controlled crypto treasury operations across chains, including wallets, payments, token discovery, swaps, bridges…
DPX — Institutional Cross-Border Settlement
Provides compliance-gated cross-border crypto settlement, agent registration and spending mandates, stablecoin routing, ESG and s…
Peer
Reads Peer protocol, checkout, deposit, wallet, Peer Cash, cross-chain routing, payout, and IntentGuardian data on Base and relat…
Robyn — Gasless Cross-Chain for AI Agents
Supports gasless cross-chain transfers, wallet and transaction checks, spending mandates, privacy-preserving messaging, and signe…
MERX - TRON Resource Exchange
Manages TRON energy and bandwidth purchasing, resource monitoring, transaction cost estimation, wallet operations, token transfer…
Wisely x402 Agent-Payment Infrastructure
Provides agent payment workflows for x402 endpoints, wallet handoffs, receipts, creator catalogs, local commerce bridges, endpoin…
AgentTools Hub
Offers calculators, unit and data converters, reference lookups, live crypto data, wallet utilities, and paid x402 access.