Skip to main content
Glama

assetfare_v2_prepare

Return one deeply verified first unsigned bundle and caller-wallet handoff. Example: pass caller_approved=true, a one_shot approval_v3, and the quote-bound verification_context; multi-step routes reject one_shot. Economic guidance is advisory and adds no request field. Context is validated before the upstream request and never forwarded. AssetFare never signs or submits.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
walletsYesMap each chain needed by this route to the caller's public wallet address. Include public addresses only; never private keys or seed phrases.
to_chainYesDestination chain for the v2 route: Solana, Base, Arbitrum, or Robinhood Chain. Source-only chains are not destinations.
to_tokenYesOutput token symbol on to_chain. The chain-token pair must appear in current v2 capabilities.
amount_usdYesRequested input value in USD, minimum 1. USD 1 is reachability/schema smoke only. A USD 50 competitive bucket was observed only for dated 2026-09-23 Solana USDC to Base USDC evidence and must not be generalized to another corridor. USD 1,000 is the primary representative amount. SOL input includes a swap. Always quote the actual intended amount.
from_chainYesSource chain for the v2 route. Polygon, Optimism, Ethereum, HyperEVM, X Layer, Sei, Sonic, Monad, Avalanche, Cronos, Injective, Linea, Aptos, Unichain, and Ink are source-only and cannot be used as to_chain.
from_tokenYesInput token symbol on from_chain. The chain-token pair must appear in current v2 capabilities.
approval_v3YesStrict one-shot approval copied from the exact unexpired selected quote; its bounds may only be strengthened.
caller_approvedYesLegacy caller assertion that MUST be supplied explicitly. It is not human-proof and is never auto-inserted; approval_v3 adds server-enforced quote binding.
event_signer_publicNoSolana CCTP only: caller-generated ephemeral public key. Keep the matching private key client-side and use it to co-sign the returned unsigned event-account transaction; never send the private key.
verification_contextYesStrict caller-held one-shot context copied from the selected quote, approval and public wallets. It is verified before prepare and never forwarded upstream.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
bundleYesExact Core bundle whose payload_sha256 remains scoped only to this nested object.
action_verificationYesFail-closed semantic and approval-bound verification result; it never authorizes a signature by itself.
local_execution_gateYesRemote verification is not signing authority. Recompute locally and require verified_for_signing after fresh wallet simulation.
caller_wallet_handoffYesFresh self-verifying EIP-1193 or Solana Wallet Standard handoff. The caller still simulates, confirms, signs and submits.
semantic_verificationYesTrue only after full decoded action, intent, receipt, payload and caller-bound verification.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedOutput schema / properties / local_execution_gate
      Added value: +{
      +  "additionalProperties": {},
      +  "description": "Remote verification is not signing authority. Recompute locally and require verified_for_signing after fresh wallet simulation.",
      +  "type": "object"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "bundle",
      -  "semantic_verification",
      -  "action_verification",
      -  "caller_wallet_handoff"
      -]New value: +[
      +  "bundle",
      +  "semantic_verification",
      +  "action_verification",
      +  "caller_wallet_handoff",
      +  "local_execution_gate"
      +]
  2. Changed6 schema fields changed
    • changedInput schema / properties / from_chain / description
      Previous value: -"Source chain for the v2 route. Polygon, Optimism, Ethereum, HyperEVM, X Layer, Sei, Sonic, Monad, Avalanche, Cronos, Injective, Linea, and Aptos are source-only and cannot be used as to_chain."New value: +"Source chain for the v2 route. Polygon, Optimism, Ethereum, HyperEVM, X Layer, Sei, Sonic, Monad, Avalanche, Cronos, Injective, Linea, Aptos, Unichain, and Ink are source-only and cannot be used as to_chain."
    • changedInput schema / properties / from_chain / enum
      Previous value: -[
      -  "solana",
      -  "base",
      -  "arbitrum",
      -  "robinhood",
      -  "polygon",
      -  "optimism",
      -  "ethereum",
      -  "hyperevm",
      -  "xlayer",
      -  "sei",
      -  "sonic",
      -  "monad",
      -  "avalanche",
      -  "cronos",
      -  "injective",
      -  "linea",
      -  "aptos"
      -]New value: +[
      +  "solana",
      +  "base",
      +  "arbitrum",
      +  "robinhood",
      +  "polygon",
      +  "optimism",
      +  "ethereum",
      +  "hyperevm",
      +  "xlayer",
      +  "sei",
      +  "sonic",
      +  "monad",
      +  "avalanche",
      +  "cronos",
      +  "injective",
      +  "linea",
      +  "aptos",
      +  "unichain",
      +  "ink"
      +]
    • changedInput schema / properties / verification_context / properties / direct_route_summary / properties / from / enum
      Previous value: -[
      -  "solana:SOL",
      -  "solana:USDC",
      -  "solana:USDG",
      -  "base:ETH",
      -  "base:USDC",
      -  "arbitrum:ETH",
      -  "arbitrum:USDC",
      -  "robinhood:ETH",
      -  "robinhood:USDG",
      -  "polygon:USDC",
      -  "optimism:USDC",
      -  "ethereum:USDC",
      -  "hyperevm:USDC",
      -  "xlayer:USDC",
      -  "sei:USDC",
      -  "sonic:USDC",
      -  "monad:USDC",
      -  "avalanche:USDC",
      -  "cronos:USDC",
      -  "injective:USDC",
      -  "linea:USDC",
      -  "aptos:USDC"
      -]New value: +[
      +  "solana:SOL",
      +  "solana:USDC",
      +  "solana:USDG",
      +  "base:ETH",
      +  "base:USDC",
      +  "arbitrum:ETH",
      +  "arbitrum:USDC",
      +  "robinhood:ETH",
      +  "robinhood:USDG",
      +  "polygon:USDC",
      +  "optimism:USDC",
      +  "ethereum:USDC",
      +  "hyperevm:USDC",
      +  "xlayer:USDC",
      +  "sei:USDC",
      +  "sonic:USDC",
      +  "monad:USDC",
      +  "avalanche:USDC",
      +  "cronos:USDC",
      +  "injective:USDC",
      +  "linea:USDC",
      +  "aptos:USDC",
      +  "unichain:USDC",
      +  "ink:USDC"
      +]
    • changedInput schema / properties / verification_context / properties / direct_route_summary / properties / route / enum
      Previous value: -[
      -  "solana:SOL->solana:USDC",
      -  "solana:SOL->solana:USDG",
      -  "solana:SOL->base:ETH",
      -  "solana:SOL->base:USDC",
      -  "solana:SOL->arbitrum:ETH",
      -  "solana:SOL->arbitrum:USDC",
      -  "solana:SOL->robinhood:ETH",
      -  "solana:SOL->robinhood:USDG",
      -  "solana:USDC->solana:SOL",
      -  "solana:USDC->solana:USDG",
      -  "solana:USDC->base:ETH",
      -  "solana:USDC->base:USDC",
      -  "solana:USDC->arbitrum:ETH",
      -  "solana:USDC->arbitrum:USDC",
      -  "solana:USDC->robinhood:ETH",
      -  "solana:USDC->robinhood:USDG",
      -  "solana:USDG->solana:SOL",
      -  "solana:USDG->solana:USDC",
      -  "solana:USDG->base:ETH",
      -  "solana:USDG->base:USDC",
      -  "solana:USDG->arbitrum:ETH",
      -  "solana:USDG->arbitrum:USDC",
      -  "solana:USDG->robinhood:ETH",
      -  "solana:USDG->robinhood:USDG",
      -  "base:ETH->solana:SOL",
      -  "base:ETH->solana:USDC",
      -  "base:ETH->solana:USDG",
      -  "base:ETH->base:USDC",
      -  "base:ETH->arbitrum:ETH",
      -  "base:ETH->arbitrum:USDC",
      -  "base:ETH->robinhood:ETH",
      -  "base:ETH->robinhood:USDG",
      -  "base:USDC->solana:SOL",
      -  "base:USDC->solana:USDC",
      -  "base:USDC->solana:USDG",
      -  "base:USDC->base:ETH",
      -  "base:USDC->arbitrum:ETH",
      -  "base:USDC->arbitrum:USDC",
      -  "base:USDC->robinhood:ETH",
      -  "base:USDC->robinhood:USDG",
      -  "arbitrum:ETH->solana:SOL",
      -  "arbitrum:ETH->solana:USDC",
      -  "arbitrum:ETH->solana:USDG",
      -  "arbitrum:ETH->base:ETH",
      -  "arbitrum:ETH->base:USDC",
      -  "arbitrum:ETH->arbitrum:USDC",
      -  "arbitrum:ETH->robinhood:ETH",
      -  "arbitrum:ETH->robinhood:USDG",
      -  "arbitrum:USDC->solana:SOL",
      -  "arbitrum:USDC->solana:USDC",
      -  "arbitrum:USDC->solana:USDG",
      -  "arbitrum:USDC->base:ETH",
      -  "arbitrum:USDC->base:USDC",
      -  "arbitrum:USDC->arbitrum:ETH",
      -  "arbitrum:USDC->robinhood:ETH",
      -  "arbitrum:USDC->robinhood:USDG",
      -  "robinhood:ETH->solana:SOL",
      -  "robinhood:ETH->solana:USDC",
      -  "robinhood:ETH->solana:USDG",
      -  "robinhood:ETH->base:ETH",
      -  "robinhood:ETH->base:USDC",
      -  "robinhood:ETH->arbitrum:ETH",
      -  "robinhood:ETH->arbitrum:USDC",
      -  "robinhood:ETH->robinhood:USDG",
      -  "robinhood:USDG->solana:SOL",
      -  "robinhood:USDG->solana:USDC",
      -  "robinhood:USDG->solana:USDG",
      -  "robinhood:USDG->base:ETH",
      -  "robinhood:USDG->base:USDC",
      -  "robinhood:USDG->arbitrum:ETH",
      -  "robinhood:USDG->arbitrum:USDC",
      -  "robinhood:USDG->robinhood:ETH",
      -  "polygon:USDC->base:USDC",
      -  "polygon:USDC->arbitrum:USDC",
      -  "optimism:USDC->base:USDC",
      -  "optimism:USDC->arbitrum:USDC",
      -  "ethereum:USDC->solana:USDC",
      -  "ethereum:USDC->base:USDC",
      -  "hyperevm:USDC->solana:USDC",
      -  "hyperevm:USDC->base:USDC",
      -  "xlayer:USDC->solana:USDC",
      -  "xlayer:USDC->base:USDC",
      -  "sei:USDC->solana:USDC",
      -  "sei:USDC->base:USDC",
      -  "sonic:USDC->solana:USDC",
      -  "sonic:USDC->base:USDC",
      -  "monad:USDC->solana:USDC",
      -  "monad:USDC->base:USDC",
      -  "avalanche:USDC->solana:USDC",
      -  "avalanche:USDC->base:USDC",
      -  "cronos:USDC->solana:USDC",
      -  "cronos:USDC->base:USDC",
      -  "injective:USDC->solana:USDC",
      -  "injective:USDC->base:USDC",
      -  "linea:USDC->solana:USDC",
      -  "linea:USDC->base:USDC",
      -  "aptos:USDC->solana:USDC",
      -  "aptos:USDC->base:USDC"
      -]New value: +[
      +  "solana:SOL->solana:USDC",
      +  "solana:SOL->solana:USDG",
      +  "solana:SOL->base:ETH",
      +  "solana:SOL->base:USDC",
      +  "solana:SOL->arbitrum:ETH",
      +  "solana:SOL->arbitrum:USDC",
      +  "solana:SOL->robinhood:ETH",
      +  "solana:SOL->robinhood:USDG",
      +  "solana:USDC->solana:SOL",
      +  "solana:USDC->solana:USDG",
      +  "solana:USDC->base:ETH",
      +  "solana:USDC->base:USDC",
      +  "solana:USDC->arbitrum:ETH",
      +  "solana:USDC->arbitrum:USDC",
      +  "solana:USDC->robinhood:ETH",
      +  "solana:USDC->robinhood:USDG",
      +  "solana:USDG->solana:SOL",
      +  "solana:USDG->solana:USDC",
      +  "solana:USDG->base:ETH",
      +  "solana:USDG->base:USDC",
      +  "solana:USDG->arbitrum:ETH",
      +  "solana:USDG->arbitrum:USDC",
      +  "solana:USDG->robinhood:ETH",
      +  "solana:USDG->robinhood:USDG",
      +  "base:ETH->solana:SOL",
      +  "base:ETH->solana:USDC",
      +  "base:ETH->solana:USDG",
      +  "base:ETH->base:USDC",
      +  "base:ETH->arbitrum:ETH",
      +  "base:ETH->arbitrum:USDC",
      +  "base:ETH->robinhood:ETH",
      +  "base:ETH->robinhood:USDG",
      +  "base:USDC->solana:SOL",
      +  "base:USDC->solana:USDC",
      +  "base:USDC->solana:USDG",
      +  "base:USDC->base:ETH",
      +  "base:USDC->arbitrum:ETH",
      +  "base:USDC->arbitrum:USDC",
      +  "base:USDC->robinhood:ETH",
      +  "base:USDC->robinhood:USDG",
      +  "arbitrum:ETH->solana:SOL",
      +  "arbitrum:ETH->solana:USDC",
      +  "arbitrum:ETH->solana:USDG",
      +  "arbitrum:ETH->base:ETH",
      +  "arbitrum:ETH->base:USDC",
      +  "arbitrum:ETH->arbitrum:USDC",
      +  "arbitrum:ETH->robinhood:ETH",
      +  "arbitrum:ETH->robinhood:USDG",
      +  "arbitrum:USDC->solana:SOL",
      +  "arbitrum:USDC->solana:USDC",
      +  "arbitrum:USDC->solana:USDG",
      +  "arbitrum:USDC->base:ETH",
      +  "arbitrum:USDC->base:USDC",
      +  "arbitrum:USDC->arbitrum:ETH",
      +  "arbitrum:USDC->robinhood:ETH",
      +  "arbitrum:USDC->robinhood:USDG",
      +  "robinhood:ETH->solana:SOL",
      +  "robinhood:ETH->solana:USDC",
      +  "robinhood:ETH->solana:USDG",
      +  "robinhood:ETH->base:ETH",
      +  "robinhood:ETH->base:USDC",
      +  "robinhood:ETH->arbitrum:ETH",
      +  "robinhood:ETH->arbitrum:USDC",
      +  "robinhood:ETH->robinhood:USDG",
      +  "robinhood:USDG->solana:SOL",
      +  "robinhood:USDG->solana:USDC",
      +  "robinhood:USDG->solana:USDG",
      +  "robinhood:USDG->base:ETH",
      +  "robinhood:USDG->base:USDC",
      +  "robinhood:USDG->arbitrum:ETH",
      +  "robinhood:USDG->arbitrum:USDC",
      +  "robinhood:USDG->robinhood:ETH",
      +  "polygon:USDC->base:USDC",
      +  "polygon:USDC->arbitrum:USDC",
      +  "optimism:USDC->base:USDC",
      +  "optimism:USDC->arbitrum:USDC",
      +  "ethereum:USDC->solana:USDC",
      +  "ethereum:USDC->base:USDC",
      +  "hyperevm:USDC->solana:USDC",
      +  "hyperevm:USDC->base:USDC",
      +  "xlayer:USDC->solana:USDC",
      +  "xlayer:USDC->base:USDC",
      +  "sei:USDC->solana:USDC",
      +  "sei:USDC->base:USDC",
      +  "sonic:USDC->solana:USDC",
      +  "sonic:USDC->base:USDC",
      +  "monad:USDC->solana:USDC",
      +  "monad:USDC->base:USDC",
      +  "avalanche:USDC->solana:USDC",
      +  "avalanche:USDC->base:USDC",
      +  "cronos:USDC->solana:USDC",
      +  "cronos:USDC->base:USDC",
      +  "injective:USDC->solana:USDC",
      +  "injective:USDC->base:USDC",
      +  "linea:USDC->solana:USDC",
      +  "linea:USDC->base:USDC",
      +  "aptos:USDC->solana:USDC",
      +  "aptos:USDC->base:USDC",
      +  "unichain:USDC->solana:USDC",
      +  "ink:USDC->solana:USDC"
      +]
    • changedInput schema / properties / verification_context / properties / direct_route_summary / properties / steps / items / properties / from / enum
      Previous value: -[
      -  "solana:SOL",
      -  "solana:USDC",
      -  "solana:USDG",
      -  "base:ETH",
      -  "base:USDC",
      -  "arbitrum:ETH",
      -  "arbitrum:USDC",
      -  "robinhood:ETH",
      -  "robinhood:USDG",
      -  "polygon:USDC",
      -  "optimism:USDC",
      -  "ethereum:USDC",
      -  "hyperevm:USDC",
      -  "xlayer:USDC",
      -  "sei:USDC",
      -  "sonic:USDC",
      -  "monad:USDC",
      -  "avalanche:USDC",
      -  "cronos:USDC",
      -  "injective:USDC",
      -  "linea:USDC",
      -  "aptos:USDC"
      -]New value: +[
      +  "solana:SOL",
      +  "solana:USDC",
      +  "solana:USDG",
      +  "base:ETH",
      +  "base:USDC",
      +  "arbitrum:ETH",
      +  "arbitrum:USDC",
      +  "robinhood:ETH",
      +  "robinhood:USDG",
      +  "polygon:USDC",
      +  "optimism:USDC",
      +  "ethereum:USDC",
      +  "hyperevm:USDC",
      +  "xlayer:USDC",
      +  "sei:USDC",
      +  "sonic:USDC",
      +  "monad:USDC",
      +  "avalanche:USDC",
      +  "cronos:USDC",
      +  "injective:USDC",
      +  "linea:USDC",
      +  "aptos:USDC",
      +  "unichain:USDC",
      +  "ink:USDC"
      +]
    • changedInput schema / properties / wallets / propertyNames / enum
      Previous value: -[
      -  "solana",
      -  "base",
      -  "arbitrum",
      -  "robinhood",
      -  "polygon",
      -  "optimism",
      -  "ethereum",
      -  "hyperevm",
      -  "xlayer",
      -  "sei",
      -  "sonic",
      -  "monad",
      -  "avalanche",
      -  "cronos",
      -  "injective",
      -  "linea",
      -  "aptos"
      -]New value: +[
      +  "solana",
      +  "base",
      +  "arbitrum",
      +  "robinhood",
      +  "polygon",
      +  "optimism",
      +  "ethereum",
      +  "hyperevm",
      +  "xlayer",
      +  "sei",
      +  "sonic",
      +  "monad",
      +  "avalanche",
      +  "cronos",
      +  "injective",
      +  "linea",
      +  "aptos",
      +  "unichain",
      +  "ink"
      +]
  3. Changed8 schema fields changed
    • changedInput schema / properties / from_chain / description
      Previous value: -"Source chain for the v2 route. Polygon, Optimism, Ethereum, HyperEVM, X Layer, Sei and Sonic are source-only and cannot be used as to_chain."New value: +"Source chain for the v2 route. Polygon, Optimism, Ethereum, HyperEVM, X Layer, Sei, Sonic, Monad, Avalanche, Cronos, Injective, Linea, and Aptos are source-only and cannot be used as to_chain."
    • changedInput schema / properties / from_chain / enum
      Previous value: -[
      -  "solana",
      -  "base",
      -  "arbitrum",
      -  "robinhood",
      -  "polygon",
      -  "optimism",
      -  "ethereum",
      -  "hyperevm",
      -  "xlayer",
      -  "sei",
      -  "sonic"
      -]New value: +[
      +  "solana",
      +  "base",
      +  "arbitrum",
      +  "robinhood",
      +  "polygon",
      +  "optimism",
      +  "ethereum",
      +  "hyperevm",
      +  "xlayer",
      +  "sei",
      +  "sonic",
      +  "monad",
      +  "avalanche",
      +  "cronos",
      +  "injective",
      +  "linea",
      +  "aptos"
      +]
    • changedInput schema / properties / verification_context / properties / direct_route_summary / properties / from / enum
      Previous value: -[
      -  "solana:SOL",
      -  "solana:USDC",
      -  "solana:USDG",
      -  "base:ETH",
      -  "base:USDC",
      -  "arbitrum:ETH",
      -  "arbitrum:USDC",
      -  "robinhood:ETH",
      -  "robinhood:USDG",
      -  "polygon:USDC",
      -  "optimism:USDC",
      -  "ethereum:USDC",
      -  "hyperevm:USDC",
      -  "xlayer:USDC",
      -  "sei:USDC",
      -  "sonic:USDC"
      -]New value: +[
      +  "solana:SOL",
      +  "solana:USDC",
      +  "solana:USDG",
      +  "base:ETH",
      +  "base:USDC",
      +  "arbitrum:ETH",
      +  "arbitrum:USDC",
      +  "robinhood:ETH",
      +  "robinhood:USDG",
      +  "polygon:USDC",
      +  "optimism:USDC",
      +  "ethereum:USDC",
      +  "hyperevm:USDC",
      +  "xlayer:USDC",
      +  "sei:USDC",
      +  "sonic:USDC",
      +  "monad:USDC",
      +  "avalanche:USDC",
      +  "cronos:USDC",
      +  "injective:USDC",
      +  "linea:USDC",
      +  "aptos:USDC"
      +]
    • changedInput schema / properties / verification_context / properties / direct_route_summary / properties / mode / enum
      Previous value: -[
      -  "cctp_direct_composition",
      -  "optimism_source_cctp",
      -  "polygon_source_cctp",
      -  "robinhood_across_ingress_composition",
      -  "robinhood_paxos_egress_composition",
      -  "robinhood_paxos_ingress_composition",
      -  "same_chain_direct",
      -  "same_chain_direct_composition"
      -]New value: +[
      +  "aptos_move_cctp_direct",
      +  "cctp_direct_composition",
      +  "optimism_source_cctp",
      +  "polygon_source_cctp",
      +  "robinhood_across_ingress_composition",
      +  "robinhood_paxos_egress_composition",
      +  "robinhood_paxos_ingress_composition",
      +  "same_chain_direct",
      +  "same_chain_direct_composition"
      +]
    • changedInput schema / properties / verification_context / properties / direct_route_summary / properties / route / enum
      Previous value: -[
      -  "solana:SOL->solana:USDC",
      -  "solana:SOL->solana:USDG",
      -  "solana:SOL->base:ETH",
      -  "solana:SOL->base:USDC",
      -  "solana:SOL->arbitrum:ETH",
      -  "solana:SOL->arbitrum:USDC",
      -  "solana:SOL->robinhood:ETH",
      -  "solana:SOL->robinhood:USDG",
      -  "solana:USDC->solana:SOL",
      -  "solana:USDC->solana:USDG",
      -  "solana:USDC->base:ETH",
      -  "solana:USDC->base:USDC",
      -  "solana:USDC->arbitrum:ETH",
      -  "solana:USDC->arbitrum:USDC",
      -  "solana:USDC->robinhood:ETH",
      -  "solana:USDC->robinhood:USDG",
      -  "solana:USDG->solana:SOL",
      -  "solana:USDG->solana:USDC",
      -  "solana:USDG->base:ETH",
      -  "solana:USDG->base:USDC",
      -  "solana:USDG->arbitrum:ETH",
      -  "solana:USDG->arbitrum:USDC",
      -  "solana:USDG->robinhood:ETH",
      -  "solana:USDG->robinhood:USDG",
      -  "base:ETH->solana:SOL",
      -  "base:ETH->solana:USDC",
      -  "base:ETH->solana:USDG",
      -  "base:ETH->base:USDC",
      -  "base:ETH->arbitrum:ETH",
      -  "base:ETH->arbitrum:USDC",
      -  "base:ETH->robinhood:ETH",
      -  "base:ETH->robinhood:USDG",
      -  "base:USDC->solana:SOL",
      -  "base:USDC->solana:USDC",
      -  "base:USDC->solana:USDG",
      -  "base:USDC->base:ETH",
      -  "base:USDC->arbitrum:ETH",
      -  "base:USDC->arbitrum:USDC",
      -  "base:USDC->robinhood:ETH",
      -  "base:USDC->robinhood:USDG",
      -  "arbitrum:ETH->solana:SOL",
      -  "arbitrum:ETH->solana:USDC",
      -  "arbitrum:ETH->solana:USDG",
      -  "arbitrum:ETH->base:ETH",
      -  "arbitrum:ETH->base:USDC",
      -  "arbitrum:ETH->arbitrum:USDC",
      -  "arbitrum:ETH->robinhood:ETH",
      -  "arbitrum:ETH->robinhood:USDG",
      -  "arbitrum:USDC->solana:SOL",
      -  "arbitrum:USDC->solana:USDC",
      -  "arbitrum:USDC->solana:USDG",
      -  "arbitrum:USDC->base:ETH",
      -  "arbitrum:USDC->base:USDC",
      -  "arbitrum:USDC->arbitrum:ETH",
      -  "arbitrum:USDC->robinhood:ETH",
      -  "arbitrum:USDC->robinhood:USDG",
      -  "robinhood:ETH->solana:SOL",
      -  "robinhood:ETH->solana:USDC",
      -  "robinhood:ETH->solana:USDG",
      -  "robinhood:ETH->base:ETH",
      -  "robinhood:ETH->base:USDC",
      -  "robinhood:ETH->arbitrum:ETH",
      -  "robinhood:ETH->arbitrum:USDC",
      -  "robinhood:ETH->robinhood:USDG",
      -  "robinhood:USDG->solana:SOL",
      -  "robinhood:USDG->solana:USDC",
      -  "robinhood:USDG->solana:USDG",
      -  "robinhood:USDG->base:ETH",
      -  "robinhood:USDG->base:USDC",
      -  "robinhood:USDG->arbitrum:ETH",
      -  "robinhood:USDG->arbitrum:USDC",
      -  "robinhood:USDG->robinhood:ETH",
      -  "polygon:USDC->base:USDC",
      -  "polygon:USDC->arbitrum:USDC",
      -  "optimism:USDC->base:USDC",
      -  "optimism:USDC->arbitrum:USDC",
      -  "ethereum:USDC->solana:USDC",
      -  "ethereum:USDC->base:USDC",
      -  "hyperevm:USDC->solana:USDC",
      -  "hyperevm:USDC->base:USDC",
      -  "xlayer:USDC->solana:USDC",
      -  "xlayer:USDC->base:USDC",
      -  "sei:USDC->solana:USDC",
      -  "sei:USDC->base:USDC",
      -  "sonic:USDC->solana:USDC",
      -  "sonic:USDC->base:USDC"
      -]New value: +[
      +  "solana:SOL->solana:USDC",
      +  "solana:SOL->solana:USDG",
      +  "solana:SOL->base:ETH",
      +  "solana:SOL->base:USDC",
      +  "solana:SOL->arbitrum:ETH",
      +  "solana:SOL->arbitrum:USDC",
      +  "solana:SOL->robinhood:ETH",
      +  "solana:SOL->robinhood:USDG",
      +  "solana:USDC->solana:SOL",
      +  "solana:USDC->solana:USDG",
      +  "solana:USDC->base:ETH",
      +  "solana:USDC->base:USDC",
      +  "solana:USDC->arbitrum:ETH",
      +  "solana:USDC->arbitrum:USDC",
      +  "solana:USDC->robinhood:ETH",
      +  "solana:USDC->robinhood:USDG",
      +  "solana:USDG->solana:SOL",
      +  "solana:USDG->solana:USDC",
      +  "solana:USDG->base:ETH",
      +  "solana:USDG->base:USDC",
      +  "solana:USDG->arbitrum:ETH",
      +  "solana:USDG->arbitrum:USDC",
      +  "solana:USDG->robinhood:ETH",
      +  "solana:USDG->robinhood:USDG",
      +  "base:ETH->solana:SOL",
      +  "base:ETH->solana:USDC",
      +  "base:ETH->solana:USDG",
      +  "base:ETH->base:USDC",
      +  "base:ETH->arbitrum:ETH",
      +  "base:ETH->arbitrum:USDC",
      +  "base:ETH->robinhood:ETH",
      +  "base:ETH->robinhood:USDG",
      +  "base:USDC->solana:SOL",
      +  "base:USDC->solana:USDC",
      +  "base:USDC->solana:USDG",
      +  "base:USDC->base:ETH",
      +  "base:USDC->arbitrum:ETH",
      +  "base:USDC->arbitrum:USDC",
      +  "base:USDC->robinhood:ETH",
      +  "base:USDC->robinhood:USDG",
      +  "arbitrum:ETH->solana:SOL",
      +  "arbitrum:ETH->solana:USDC",
      +  "arbitrum:ETH->solana:USDG",
      +  "arbitrum:ETH->base:ETH",
      +  "arbitrum:ETH->base:USDC",
      +  "arbitrum:ETH->arbitrum:USDC",
      +  "arbitrum:ETH->robinhood:ETH",
      +  "arbitrum:ETH->robinhood:USDG",
      +  "arbitrum:USDC->solana:SOL",
      +  "arbitrum:USDC->solana:USDC",
      +  "arbitrum:USDC->solana:USDG",
      +  "arbitrum:USDC->base:ETH",
      +  "arbitrum:USDC->base:USDC",
      +  "arbitrum:USDC->arbitrum:ETH",
      +  "arbitrum:USDC->robinhood:ETH",
      +  "arbitrum:USDC->robinhood:USDG",
      +  "robinhood:ETH->solana:SOL",
      +  "robinhood:ETH->solana:USDC",
      +  "robinhood:ETH->solana:USDG",
      +  "robinhood:ETH->base:ETH",
      +  "robinhood:ETH->base:USDC",
      +  "robinhood:ETH->arbitrum:ETH",
      +  "robinhood:ETH->arbitrum:USDC",
      +  "robinhood:ETH->robinhood:USDG",
      +  "robinhood:USDG->solana:SOL",
      +  "robinhood:USDG->solana:USDC",
      +  "robinhood:USDG->solana:USDG",
      +  "robinhood:USDG->base:ETH",
      +  "robinhood:USDG->base:USDC",
      +  "robinhood:USDG->arbitrum:ETH",
      +  "robinhood:USDG->arbitrum:USDC",
      +  "robinhood:USDG->robinhood:ETH",
      +  "polygon:USDC->base:USDC",
      +  "polygon:USDC->arbitrum:USDC",
      +  "optimism:USDC->base:USDC",
      +  "optimism:USDC->arbitrum:USDC",
      +  "ethereum:USDC->solana:USDC",
      +  "ethereum:USDC->base:USDC",
      +  "hyperevm:USDC->solana:USDC",
      +  "hyperevm:USDC->base:USDC",
      +  "xlayer:USDC->solana:USDC",
      +  "xlayer:USDC->base:USDC",
      +  "sei:USDC->solana:USDC",
      +  "sei:USDC->base:USDC",
      +  "sonic:USDC->solana:USDC",
      +  "sonic:USDC->base:USDC",
      +  "monad:USDC->solana:USDC",
      +  "monad:USDC->base:USDC",
      +  "avalanche:USDC->solana:USDC",
      +  "avalanche:USDC->base:USDC",
      +  "cronos:USDC->solana:USDC",
      +  "cronos:USDC->base:USDC",
      +  "injective:USDC->solana:USDC",
      +  "injective:USDC->base:USDC",
      +  "linea:USDC->solana:USDC",
      +  "linea:USDC->base:USDC",
      +  "aptos:USDC->solana:USDC",
      +  "aptos:USDC->base:USDC"
      +]
    • changedInput schema / properties / verification_context / properties / direct_route_summary / properties / steps / items / properties / from / enum
      Previous value: -[
      -  "solana:SOL",
      -  "solana:USDC",
      -  "solana:USDG",
      -  "base:ETH",
      -  "base:USDC",
      -  "arbitrum:ETH",
      -  "arbitrum:USDC",
      -  "robinhood:ETH",
      -  "robinhood:USDG",
      -  "polygon:USDC",
      -  "optimism:USDC",
      -  "ethereum:USDC",
      -  "hyperevm:USDC",
      -  "xlayer:USDC",
      -  "sei:USDC",
      -  "sonic:USDC"
      -]New value: +[
      +  "solana:SOL",
      +  "solana:USDC",
      +  "solana:USDG",
      +  "base:ETH",
      +  "base:USDC",
      +  "arbitrum:ETH",
      +  "arbitrum:USDC",
      +  "robinhood:ETH",
      +  "robinhood:USDG",
      +  "polygon:USDC",
      +  "optimism:USDC",
      +  "ethereum:USDC",
      +  "hyperevm:USDC",
      +  "xlayer:USDC",
      +  "sei:USDC",
      +  "sonic:USDC",
      +  "monad:USDC",
      +  "avalanche:USDC",
      +  "cronos:USDC",
      +  "injective:USDC",
      +  "linea:USDC",
      +  "aptos:USDC"
      +]
    • changedInput schema / properties / wallets / additionalProperties / description
      Previous value: -"Caller-owned public wallet address: 0x plus 40 hex characters for EVM, or 32-44 base58 characters for Solana. Never provide secret key material."New value: +"Caller-owned public wallet address: 0x plus 40 hex characters for EVM, 0x plus 64 hex characters for Aptos, or 32-44 base58 characters for Solana. Never provide secret key material."
    • changedInput schema / properties / wallets / propertyNames / enum
      Previous value: -[
      -  "solana",
      -  "base",
      -  "arbitrum",
      -  "robinhood",
      -  "polygon",
      -  "optimism",
      -  "ethereum",
      -  "hyperevm",
      -  "xlayer",
      -  "sei",
      -  "sonic"
      -]New value: +[
      +  "solana",
      +  "base",
      +  "arbitrum",
      +  "robinhood",
      +  "polygon",
      +  "optimism",
      +  "ethereum",
      +  "hyperevm",
      +  "xlayer",
      +  "sei",
      +  "sonic",
      +  "monad",
      +  "avalanche",
      +  "cronos",
      +  "injective",
      +  "linea",
      +  "aptos"
      +]
  4. First observed

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations already declaring readOnlyHint=false, openWorldHint=true and idempotentHint=false, the description still adds real behavioral value: no signing or submission occurs, verification_context is validated before the upstream request and never forwarded, and economic guidance is advisory only. It does not describe idempotency/retry behavior or error semantics, which keeps it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five short sentences with the deliverable front-loaded and no repetition of schema detail. The 'Example:' sentence is slightly awkwardly framed and 'Economic guidance is advisory and adds no request field' is opaque, but overall the text is dense and earns its length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has an output schema and 100% schema coverage, so return values need no prose. What is missing is flow context: which sibling tools must be called first to obtain the quote-bound approval_v3 and verification_context, and what the caller does with the handoff afterwards. For a prepare step in a ten-tool pipeline, that sequencing gap is the main shortfall.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the nested approval_v3 and verification_context structures are already documented field by field. The description only adds that approval_v3 must be one_shot and that the context is quote-bound, which is useful framing but marginal beyond the schema. Baseline 3 is correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a concrete deliverable: a verified unsigned transaction bundle plus caller-wallet handoff, and notes AssetFare never signs or submits. That is specific enough for an agent to know this is a prepare/return-artifact step, not a quote or a session tool. It never names a sibling (quote, route_selection, session_create) explicitly, so differentiation is inferred from the 'one_shot' vs 'multi-step routes' contrast rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a conditional usage rule ('multi-step routes reject one_shot') and sketches the required payload, which implies this tool is only for single-step routes. It never states the prerequisites — which sibling produces approval_v3 and verification_context, or when to prefer a session tool instead — so the agent must infer the call ordering.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.