Route-specific economic guidance: one quote, then stop
The $1,000 request below is a documentation example only. Read the returned amount-specific guidance and the 100-route catalog. All 100 routes are technically available; 44 are threshold-recommended and 56 have no current price recommendation. Confirm the fresh quote. The supported $1 minimum is for reachability smoke testing only.
Zero-install REST call
curl -sS https://api.assetfare.dev/v2/quote \
-H 'content-type: application/json' \
-d '{"from_chain":"solana","from_token":"USDC","to_chain":"base","to_token":"USDC","amount_usd":1000}'
Signed-manifest evaluator
npx --yes --package=assetfare-mcp@1.21.6 \
assetfare-route-eval --amount 1000 \
--from-chain solana --from-token USDC \
--to-chain base --to-token USDC \
--quote-output quote.json
Solana native USDC → Base native USDC is the canonical supported route. The evaluator verifies the full quote and signed manifest, writes the exact quote only to a new mode-0600 file, and stops without authentication, preparation, signing, or submission. Solana SOL → Base USDC is also supported.
Do not spend the 60-second binding window on initial research. Complete any optional research and collect the required public wallet/event-signer inputs first. Then request one final execution-authoritative quote, review its exact delta and bounds, and begin the plan while more than 15 seconds remain. Otherwise requote and approve the replacement explicitly; a replacement quote is never automatic authority.
Only after fresh-quote confirmation and explicit caller approval
npx --yes --package=assetfare-mcp@1.21.6 \
assetfare-plan --caller-approved --mode session \
--quote quote.json --select-exact-quote-bounds \
--wallet solana=<CALLER_SOLANA_PUBLIC_KEY> \
--wallet base=<CALLER_BASE_PUBLIC_ADDRESS> \
--event-signer-public <CALLER_EPHEMERAL_SOLANA_PUBLIC_KEY> \
--session-token-output ./session-capability.json \
--wallet-handoff-output ./caller-wallet-handoff.json
This explicit second phase creates strict quote-bound approval locally, requests exactly one unsigned session action, recomputes its proof-carrying receipt, payload, intent, path and bounds, and writes a mode-0600 caller-wallet handoff. The compact local verdict is first verified_for_simulation; only a successful fresh caller-wallet simulation under the approved local policy can produce verified_for_signing. Nothing hosted invokes a wallet.
The quote binding remains 60 seconds, while each selected unsigned action bundle is valid for 180 seconds and its EVM deadline is 240 seconds. Immediately before the caller opens the wallet, run assetfare-session --operation wallet-ready with the capability file, a new idempotency key, and a new handoff output. It requires at least 120 seconds remaining or refreshes the exact unsubmitted step after expiry; it never replaces a live action early, signs, or submits.
A wallet-capable external agent can instead run assetfare-agent-runner under an explicit local caller policy. The caller supplies its own local wallet adapter; keys never enter AssetFare, and the hosted server never signs or submits. The runner enforces the approved amount, receive, gas, rent and transaction-count caps while advancing submitted hashes through the session.
After the caller wallet submits
npx --yes --package=assetfare-mcp@1.21.6 \
assetfare-session --operation observe-source \
--capability-file ./session-capability.json \
--idempotency-key source-0001 \
--transaction-hash <CALLER_ALREADY_SUBMITTED_HASH>
The capability file retains the exact caller-generated bearer token, idempotency key, session ID, strict approval, public wallet map, and verification context without printing the token. If session creation loses its response, repeat the plan command with --session-capability-input ./session-capability.json. Every later current_action is checked through the same semantic verifier and receives a fresh self-verifying wallet handoff. The session CLI observes only a hash the caller already submitted and never signs or broadcasts; structured 409 stop/recovery flags are preserved.
Installable Agent Skill
npx --yes skills add assetfare/assetfare-mcp \
--skill assetfare-route -g -y
For Circle Agent Stack and other shell-capable agents. The skill teaches the agent to verify capabilities and request a fresh REST quote; it adds no signing or submission authority. Circle integration guide →
OpenClaw agents can install the same reviewed bundle from ClawHub with openclaw skills install @odaiin/assetfare-route. Inspect public ClawHub 1.1.1 → · clean security scan →
Portable Agent Plugin
npx plugins add assetfare/assetfare-mcp
Installs the same route-evaluation skill and MCP connection in clients that support Agent Plugins or the current plugins CLI. The first call remains quote-only. The hosted primary v2 profile also exposes explicit prepare and session-lifecycle tools, but new execution flows must separately select an exact quote and supply strict approval_v3; nothing auto-prepares, signs, or submits.
Observed economics and latency
Historical Solana-to-Base datasets retain same-input outputs, latency, methods, and failures for reproducibility. They describe past windows; first check whether the exact route is active, then apply verified best-from or availability-only guidance from a fresh quote. USDC dataset → · ETH dataset →
After explicit caller approval: the caller-operated action-plan handoff
For every offered route, a quote authorizes nothing. Product availability is decided for the whole route rather than by amount band. Explicitly select one execution mode and create strict approval_v3 bound to the exact quote fingerprint, path, caller bounds, expiry, wallets, and allowed mode. caller_approved:true is also required but is not human-approval proof by itself. The caller verifies, signs, and submits every action; AssetFare never signs, submits, or auto-prepares.
The active source-only corridors are Polygon/Optimism USDC→Base USDC, Ethereum/HyperEVM USDC→Solana USDC, and X Layer/Sei/Sonic/Monad/Avalanche/Cronos/Injective/Linea/Aptos/Unichain/Ink USDC→Base or Solana USDC as listed by live capabilities. Every corridor still requires live availability, amount-specific guidance, and a fresh quote. Follow the quote's caller_action_plan_handoff using public wallet addresses only.
Choose exactly one next step after a useful quote
- Stop. A useful quote still creates no obligation and needs no wallet action.
- Continue yourself. Read the caller-run API contract, then require fresh route selection and explicit approval before
/v2/prepare or /v2/session.
- Ask for an assisted handoff. Send only the five-field route intent and quote ID if available. Do not send an address, balance, credential, key, payment artifact, or signature.
Contacting support is not route approval. It does not authorize preparation, signing, submission, or transfer; the caller must still make and record each later decision.
How the result is counted
An invited independent evaluation is recorded as an assisted external pilot, not organic demand. CI, registry probes, owner tests, audits, and canaries are never counted as customers. A genuine execution remains caller-initiated, caller-verified, caller-signed, and caller-submitted.