AssetFare USDC Bridge
Non-custodial USDC bridge and cross-chain swap quotes: Solana to Base; unsigned, never signs/submits
Should I use this
Quality & Safety
Findings (7)
- LOWin assetfare_v2_new_session_capability
- LOWin assetfare_v2_session_observe_source
- LOWin assetfare_v2_session_observe_output
- LOWin assetfare_v2_session_refresh_action
- LOWin assetfare_prepare_source_action
- LOWin assetfare_verify_source_receipt
- LOWin assetfare_prepare_destination_action
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"assetfare-bridge": {
"url": "https://api.assetfare.dev/mcp/bridge"
}
}
}Remote endpoints
https://api.assetfare.dev/mcp/bridgestreamable-httpWhat it can do
Tool inventory
Tools (22)
🟢assetfare_status
Read legacy v1 compatibility status and original-corridor safety gates. Use only before the unversioned Solana-SOL-to-Base/Arbitrum-ETH workflow; for every six-chain v2 route use assetfare_v2_capabilities instead. Read-only; makes a network request and never authenticates, signs, submits, or advances a session.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢assetfare_manifest
Read the Ed25519-signed capability, contract, release, and mainnet-evidence manifest.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢assetfare_v2_capabilities
Read current non-custodial bridge/swap capabilities, route availability, fee policy, and the no-sign/no-submit boundary for 76 routes across six chains and eleven endpoints. Use before assetfare_v2_quote for a new v2 evaluation; do not use legacy assetfare_status to decide v2 availability. Read-only; makes a network request and creates no wallet login, session, or action.
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢assetfare_v2_quote(from_chain, from_token, to_chain, to_token, amount_usd)
Get one fresh read-only AssetFare bridge/swap quote for a selected v2 route, including total token-path cost, live availability, and an unsigned-action handoff. Use for every new six-chain evaluation after assetfare_v2_capabilities; use legacy assetfare_quote only for the unversioned Solana-SOL-to-Base/Arbitrum-ETH workflow. AssetFare charges 1bp plus Circle/provider/network fees. This call makes a network request but never authenticates, creates a session, prepares an action, signs, or submits.
Input Schema
{
"type": "object",
"properties": {
"from_chain": {
"type": "string",
"enum": [
"solana",
"base",
"arbitrum",
"robinhood",
"polygon",
"optimism"
],
"description": "Source chain for the v2 route. Polygon and Optimism are source-only and cannot be used as to_chain."
},
"from_token": {
"type": "string",
"enum": [
"SOL",
"ETH",
"USDC",
"USDG"
],
"description": "Input token symbol on from_chain. The chain-token pair must appear in current v2 capabilities."
},
"to_chain": {
"type": "string",
"enum": [
"solana",
"base",
"arbitrum",
"robinhood"
],
"description": "Destination chain for the v2 route: Solana, Base, Arbitrum, or Robinhood Chain. Polygon and Optimism are not destinations."
},
"to_token": {
"type": "string",
"enum": [
"SOL",
"ETH",
"USDC",
"USDG"
],
"description": "Output token symbol on to_chain. The chain-token pair must appear in current v2 capabilities."
},
"amount_usd": {
"type": "number",
"minimum": 1,
"description": "Requested input value in USD, minimum 1. Obtain a fresh quote because availability, fees, and receive amounts can change."
}
},
"required": [
"from_chain",
"from_token",
"to_chain",
"to_token",
"amount_usd"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢assetfare_v2_new_session_capability
Generate one caller-owned 256-bit session capability for the receipt-driven v2 workflow. Use immediately before assetfare_v2_session_create and reuse it only for that session's get/observe/refresh calls; do not use it with legacy tools or create one for the one-shot assetfare_v2_prepare path. Local-only and non-idempotent: makes no network call or server-side change. The token is a sensitive bearer capability, never a private key.
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"session_token": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{43}$",
"description": "New 256-bit, URL-safe caller-owned bearer capability. Treat as sensitive and never log, share, or persist it in plaintext."
},
"token_bits": {
"type": "number",
"const": 256,
"description": "Entropy size of the generated CSPRNG token in bits."
},
"token_length": {
"type": "number",
"const": 43,
"description": "Length of the unpadded base64url token in characters."
},
"sensitivity": {
"type": "string",
"const": "sensitive_capability",
"description": "Classification showing that the token is a sensitive bearer capability."
},
"is_private_key": {
"type": "boolean",
"const": false,
"description": "Always false: this capability is not a wallet private key and cannot sign transactions."
},
"usage": {
"type": "string",
"minLength": 1,
"description": "Handling and tool-use instructions for the capability."
},
"server_signing": {
"type": "boolean",
"const": false,
"description": "Always false: AssetFare never signs caller transactions."
},
"server_submission": {
"type": "boolean",
"const": false,
"description": "Always false: AssetFare never submits caller transactions."
}
},
"required": [
"session_token",
"token_bits",
"token_length",
"sensitivity",
"is_private_key",
"usage",
"server_signing",
"server_submission"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡assetfare_v2_prepare(caller_approved, from_chain, from_token, to_chain, to_token, ...)
Prepare one caller-approved, one-shot first unsigned action for a v2 route that a fresh quote reports available. Use for preview or manual first-action handling; for a receipt-driven multi-step workflow use assetfare_v2_new_session_capability then assetfare_v2_session_create instead, and never call both modes for one transfer. Solana-CCTP routes require only a fresh caller-owned event signer public key. Makes a network request and prepares an action, but AssetFare never receives private keys, signs, or submits.
Input Schema
{
"type": "object",
"properties": {
"caller_approved": {
"type": "boolean",
"const": true,
"description": "Explicit confirmation that the caller approved this state-changing preparation or session creation. A quote alone is not approval."
},
"from_chain": {
"type": "string",
"enum": [
"solana",
"base",
"arbitrum",
"robinhood",
"polygon",
"optimism"
],
"description": "Source chain for the v2 route. Polygon and Optimism are source-only and cannot be used as to_chain."
},
"from_token": {
"type": "string",
"enum": [
"SOL",
"ETH",
"USDC",
"USDG"
],
"description": "Input token symbol on from_chain. The chain-token pair must appear in current v2 capabilities."
},
"to_chain": {
"type": "string",
"enum": [
"solana",
"base",
"arbitrum",
"robinhood"
],
"description": "Destination chain for the v2 route: Solana, Base, Arbitrum, or Robinhood Chain. Polygon and Optimism are not destinations."
},
"to_token": {
"type": "string",
"enum": [
"SOL",
"ETH",
"USDC",
"USDG"
],
"description": "Output token symbol on to_chain. The chain-token pair must appear in current v2 capabilities."
},
"amount_usd": {
"type": "number",
"minimum": 1,
"description": "Requested input value in USD, minimum 1. Obtain a fresh quote because availability, fees, and receive amounts can change."
},
"wallets": {
"type": "object",
"additionalProperties": {
"type": "string",
"description": "Caller-owned public wallet address: 0x plus 40 hex characters for EVM, or 32-44 base58 characters for Solana. Never provide secret key material."
},
"propertyNames": {
"enum": [
"solana",
"base",
"arbitrum",
"robinhood",
"polygon",
"optimism"
]
},
"description": "Map each chain needed by this route to the caller's public wallet address. Include public addresses only; one to six entries, never private keys or seed phrases."
},
"event_signer_public": {
"$ref": "#/properties/wallets/additionalProperties",
"description": "Solana 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."
}
},
"required": [
"caller_approved",
"from_chain",
"from_token",
"to_chain",
"to_token",
"amount_usd",
"wallets"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡assetfare_v2_session_create(caller_approved, from_chain, from_token, to_chain, to_token, ...)
Create one caller-approved, receipt-driven v2 workflow session and return its current unsigned action. Use for multi-step execution after a fresh available quote; for a one-shot preview/manual first action use assetfare_v2_prepare instead, and never start both modes for one transfer. Requires a locally generated session capability token, exact public-wallet map, idempotency key, and on Solana-CCTP routes an event signer public key. Makes a network request and creates session state, but never signs or submits.
Input Schema
{
"type": "object",
"properties": {
"caller_approved": {
"type": "boolean",
"const": true,
"description": "Explicit confirmation that the caller approved this state-changing preparation or session creation. A quote alone is not approval."
},
"from_chain": {
"type": "string",
"enum": [
"solana",
"base",
"arbitrum",
"robinhood",
"polygon",
"optimism"
],
"description": "Source chain for the v2 route. Polygon and Optimism are source-only and cannot be used as to_chain."
},
"from_token": {
"type": "string",
"enum": [
"SOL",
"ETH",
"USDC",
"USDG"
],
"description": "Input token symbol on from_chain. The chain-token pair must appear in current v2 capabilities."
},
"to_chain": {
"type": "string",
"enum": [
"solana",
"base",
"arbitrum",
"robinhood"
],
"description": "Destination chain for the v2 route: Solana, Base, Arbitrum, or Robinhood Chain. Polygon and Optimism are not destinations."
},
"to_token": {
"type": "string",
"enum": [
"SOL",
"ETH",
"USDC",
"USDG"
],
"description": "Output token symbol on to_chain. The chain-token pair must appear in current v2 capabilities."
},
"amount_usd": {
"type": "number",
"minimum": 1,
"description": "Requested input value in USD, minimum 1. Obtain a fresh quote because availability, fees, and receive amounts can change."
},
"wallets": {
"type": "object",
"additionalProperties": {
"type": "string",
"description": "Caller-owned public wallet address: 0x plus 40 hex characters for EVM, or 32-44 base58 characters for Solana. Never provide secret key material."
},
"propertyNames": {
"enum": [
"solana",
"base",
"arbitrum",
"robinhood",
"polygon",
"optimism"
]
},
"description": "Map each chain needed by this route to the caller's public wallet address. Include public addresses only; one to six entries, never private keys or seed phrases."
},
"event_signer_public": {
"$ref": "#/properties/wallets/additionalProperties",
"description": "Solana 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."
},
"session_token": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{43,128}$",
"description": "Sensitive caller-owned v2 session capability from assetfare_v2_new_session_capability, 43-128 URL-safe characters. Never log it, and never substitute a private key or legacy access token."
},
"idempotency_key": {
"type": "string",
"minLength": 8,
"maxLength": 128,
"description": "Caller-generated retry key, 8-128 characters. Reuse it only when retrying the same logical mutation; choose a new key for a new operation."
}
},
"required": [
"caller_approved",
"from_chain",
"from_token",
"to_chain",
"to_token",
"amount_usd",
"wallets",
"session_token",
"idempotency_key"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢assetfare_v2_session_get(session_token, session_id)
Read a v2 session's current workflow state and unsigned action using its caller-owned capability token. Use to resume or inspect an existing v2 session; do not use legacy assetfare_read_session or use this call to report a new receipt. Read-only and makes a network request; never advances the workflow, signs, or submits.
Input Schema
{
"type": "object",
"properties": {
"session_token": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{43,128}$",
"description": "Sensitive caller-owned v2 session capability from assetfare_v2_new_session_capability, 43-128 URL-safe characters. Never log it, and never substitute a private key or legacy access token."
},
"session_id": {
"type": "string",
"format": "uuid",
"description": "V2 workflow session UUID returned by assetfare_v2_session_create. Use only with assetfare_v2_session_* tools; do not pass a legacy session ID."
}
},
"required": [
"session_token",
"session_id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢assetfare_v2_session_observe_source(session_token, session_id, idempotency_key, transaction_hashes)
Record already-submitted source transaction hashes for an existing v2 session and advance its server-side workflow state. Use only after the caller independently submitted the current source action; use assetfare_v2_session_get for inspection without advancement and never pass unsigned or unsubmitted hashes. Requires the session capability and an idempotency key; makes a network request but never signs or submits.
Input Schema
{
"type": "object",
"properties": {
"session_token": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{43,128}$",
"description": "Sensitive caller-owned v2 session capability from assetfare_v2_new_session_capability, 43-128 URL-safe characters. Never log it, and never substitute a private key or legacy access token."
},
"session_id": {
"type": "string",
"format": "uuid",
"description": "V2 workflow session UUID returned by assetfare_v2_session_create. Use only with assetfare_v2_session_* tools; do not pass a legacy session ID."
},
"idempotency_key": {
"type": "string",
"minLength": 8,
"maxLength": 128,
"description": "Caller-generated retry key, 8-128 characters. Reuse it only when retrying the same logical mutation; choose a new key for a new operation."
},
"transaction_hashes": {
"type": "array",
"items": {
"type": "string",
"minLength": 16,
"maxLength": 128
},
"minItems": 1,
"maxItems": 8,
"description": "One to eight hashes for source transactions the caller already signed and submitted. Do not provide unsigned payloads or destination hashes."
}
},
"required": [
"session_token",
"session_id",
"idempotency_key",
"transaction_hashes"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢assetfare_v2_session_observe_output(session_token, session_id, idempotency_key, transaction_hash)
Record an already-produced bridge or destination output for an existing v2 session and advance its server-side workflow state. Use only after the caller or provider produced the expected output; use assetfare_v2_session_get for read-only inspection and assetfare_v2_session_observe_source for source hashes. Requires the session capability and an idempotency key; makes a network request but never signs or submits.
Input Schema
{
"type": "object",
"properties": {
"session_token": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{43,128}$",
"description": "Sensitive caller-owned v2 session capability from assetfare_v2_new_session_capability, 43-128 URL-safe characters. Never log it, and never substitute a private key or legacy access token."
},
"session_id": {
"type": "string",
"format": "uuid",
"description": "V2 workflow session UUID returned by assetfare_v2_session_create. Use only with assetfare_v2_session_* tools; do not pass a legacy session ID."
},
"idempotency_key": {
"type": "string",
"minLength": 8,
"maxLength": 128,
"description": "Caller-generated retry key, 8-128 characters. Reuse it only when retrying the same logical mutation; choose a new key for a new operation."
},
"transaction_hash": {
"type": "string",
"minLength": 16,
"maxLength": 128,
"description": "Optional bridge or destination transaction hash already produced outside AssetFare. Omit only when the provider output can be observed without a hash."
}
},
"required": [
"session_token",
"session_id",
"idempotency_key"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢assetfare_v2_session_refresh_action(session_token, session_id, idempotency_key)
Replace an expired, still-unsubmitted unsigned action in an existing v2 session with a fresh quote-bound action. Use only before the caller submits the expired action; use assetfare_v2_session_get when the current action is still valid and never refresh an already-submitted step. Requires the session capability and an idempotency key; advances session state but never signs or submits.
Input Schema
{
"type": "object",
"properties": {
"session_token": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{43,128}$",
"description": "Sensitive caller-owned v2 session capability from assetfare_v2_new_session_capability, 43-128 URL-safe characters. Never log it, and never substitute a private key or legacy access token."
},
"session_id": {
"type": "string",
"format": "uuid",
"description": "V2 workflow session UUID returned by assetfare_v2_session_create. Use only with assetfare_v2_session_* tools; do not pass a legacy session ID."
},
"idempotency_key": {
"type": "string",
"minLength": 8,
"maxLength": 128,
"description": "Caller-generated retry key, 8-128 characters. Reuse it only when retrying the same logical mutation; choose a new key for a new operation."
}
},
"required": [
"session_token",
"session_id",
"idempotency_key"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢assetfare_quote(amount_usd, destination_chain)
Legacy v1 original-corridor quote: get Solana SOL to Base or Arbitrum ETH pricing. Use only with the unversioned legacy wallet-auth/session tools; for every new or six-chain evaluation use assetfare_v2_quote instead. Read-only; makes a network request and never authenticates, creates a session, prepares an action, signs, or submits.
Input Schema
{
"type": "object",
"properties": {
"amount_usd": {
"type": "integer",
"minimum": 1,
"description": "Whole-dollar input value for the legacy Solana SOL route, minimum 1. Use assetfare_v2_quote for fractional amounts or any v2 route."
},
"destination_chain": {
"type": "string",
"enum": [
"base",
"arbitrum"
],
"default": "base",
"description": "Legacy destination chain for SOL-to-ETH only: base or arbitrum. Use a v2 route tool for any other destination or token."
}
},
"required": [
"amount_usd"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡assetfare_start_wallet_auth(source_wallet)
Create a short-lived, non-transactional Solana signMessage challenge for the legacy v1 workflow. Use only after selecting a fresh legacy assetfare_quote and obtaining caller approval; v2 quote and session tools do not use wallet authentication. Makes a network request and creates login-challenge state, but cannot move funds, sign, or submit.
Input Schema
{
"type": "object",
"properties": {
"source_wallet": {
"type": "string",
"minLength": 32,
"maxLength": 64,
"description": "Caller-owned Solana public wallet address for the legacy v1 source. Public address only; never provide a seed phrase or private key."
}
},
"required": [
"source_wallet"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪assetfare_finish_wallet_auth(challenge_id, source_wallet, signature, terms_version)
Verify the caller's signature over the exact legacy login challenge and return a sensitive wallet-bound access token. Use only after assetfare_start_wallet_auth; do not use for a v2 session, transaction signature, or arbitrary message. Makes a network request and consumes login-challenge state, but never signs or submits.
Input Schema
{
"type": "object",
"properties": {
"challenge_id": {
"type": "string",
"format": "uuid",
"description": "Short-lived legacy wallet-login challenge UUID returned by assetfare_start_wallet_auth."
},
"source_wallet": {
"type": "string",
"minLength": 32,
"maxLength": 64,
"description": "Caller-owned Solana public wallet address for the legacy v1 source. Public address only; never provide a seed phrase or private key."
},
"signature": {
"type": "string",
"minLength": 64,
"maxLength": 128,
"description": "Caller-produced Solana signature for the exact indicated legacy message or transaction. Never provide a seed phrase, private key, or signed transaction payload."
},
"terms_version": {
"type": "string",
"minLength": 1,
"maxLength": 160,
"description": "Exact terms version supplied in the legacy wallet-login challenge; copy it unchanged from that challenge."
}
},
"required": [
"challenge_id",
"source_wallet",
"signature",
"terms_version"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡assetfare_create_session(access_token, quote_id, idempotency_key, source_wallet, destination_wallet)
Lock one fresh legacy assetfare_quote into a wallet-bound v1 execution session. Use only after legacy wallet authentication for the original Solana-SOL-to-Base/Arbitrum-ETH workflow; for a v2 quote use assetfare_v2_session_create instead. Makes a network request and reserves the caller's one active legacy session slot, but creates no blockchain transaction and never signs or submits.
Input Schema
{
"type": "object",
"properties": {
"access_token": {
"type": "string",
"minLength": 20,
"maxLength": 512,
"description": "Sensitive legacy v1 wallet-bound bearer token returned by assetfare_finish_wallet_auth. Use only with unversioned legacy session tools; never log or use it as a v2 session capability."
},
"quote_id": {
"type": "string",
"format": "uuid",
"description": "Fresh legacy v1 quote UUID returned by assetfare_quote. A v2 quote ID is invalid here."
},
"idempotency_key": {
"type": "string",
"minLength": 8,
"maxLength": 128,
"description": "Caller-generated retry key, 8-128 characters. Reuse it only when retrying the same logical mutation; choose a new key for a new operation."
},
"source_wallet": {
"type": "string",
"minLength": 32,
"maxLength": 64,
"description": "Caller-owned Solana public wallet address for the legacy v1 source. Public address only; never provide a seed phrase or private key."
},
"destination_wallet": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$",
"description": "Caller-owned Base or Arbitrum EVM destination address as 0x plus 40 hex characters. Public address only; never provide a private key."
}
},
"required": [
"access_token",
"quote_id",
"idempotency_key",
"source_wallet",
"destination_wallet"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢assetfare_read_session(access_token, session_id, view)
Read a legacy v1 session summary, workflow state, receipt, or current unsigned action. Use to inspect or resume a session created by assetfare_create_session; for a v2 session use assetfare_v2_session_get instead and do not use this call to advance state. Read-only and makes a network request; never signs or submits.
Input Schema
{
"type": "object",
"properties": {
"access_token": {
"type": "string",
"minLength": 20,
"maxLength": 512,
"description": "Sensitive legacy v1 wallet-bound bearer token returned by assetfare_finish_wallet_auth. Use only with unversioned legacy session tools; never log or use it as a v2 session capability."
},
"session_id": {
"type": "string",
"format": "uuid",
"description": "Legacy v1 session UUID returned by assetfare_create_session. Use only with the unversioned legacy workflow; do not pass a v2 session ID."
},
"view": {
"type": "string",
"enum": [
"session",
"workflow",
"receipt",
"next_action"
],
"default": "session",
"description": "Legacy read projection: session summary, workflow state, receipt, or next_action. This selection never advances the workflow."
}
},
"required": [
"access_token",
"session_id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡assetfare_prepare_source_action(access_token, session_id)
Prepare the bounded unsigned Solana source action for the current legacy v1 session step. Use only after assetfare_create_session and explicit caller approval; for a v2 route use assetfare_v2_prepare or assetfare_v2_session_create instead. Makes a network request and advances preparation state, but never signs or submits.
Input Schema
{
"type": "object",
"properties": {
"access_token": {
"type": "string",
"minLength": 20,
"maxLength": 512,
"description": "Sensitive legacy v1 wallet-bound bearer token returned by assetfare_finish_wallet_auth. Use only with unversioned legacy session tools; never log or use it as a v2 session capability."
},
"session_id": {
"type": "string",
"format": "uuid",
"description": "Legacy v1 session UUID returned by assetfare_create_session. Use only with the unversioned legacy workflow; do not pass a v2 session ID."
}
},
"required": [
"access_token",
"session_id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪assetfare_verify_source_receipt(access_token, session_id, signature, idempotency_key)
Verify a finalized Solana source signature already submitted by the caller and advance the legacy v1 workflow. Use only after the caller independently submits assetfare_prepare_source_action; for a v2 session use assetfare_v2_session_observe_source instead. Requires caller approval and makes a network request, but never signs or submits.
Input Schema
{
"type": "object",
"properties": {
"access_token": {
"type": "string",
"minLength": 20,
"maxLength": 512,
"description": "Sensitive legacy v1 wallet-bound bearer token returned by assetfare_finish_wallet_auth. Use only with unversioned legacy session tools; never log or use it as a v2 session capability."
},
"session_id": {
"type": "string",
"format": "uuid",
"description": "Legacy v1 session UUID returned by assetfare_create_session. Use only with the unversioned legacy workflow; do not pass a v2 session ID."
},
"signature": {
"type": "string",
"minLength": 64,
"maxLength": 128,
"description": "Caller-produced Solana signature for the exact indicated legacy message or transaction. Never provide a seed phrase, private key, or signed transaction payload."
},
"idempotency_key": {
"type": "string",
"minLength": 8,
"maxLength": 128,
"description": "Caller-generated retry key, 8-128 characters. Reuse it only when retrying the same logical mutation; choose a new key for a new operation."
}
},
"required": [
"access_token",
"session_id",
"signature",
"idempotency_key"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡assetfare_prepare_cctp_action(access_token, session_id, event_signer_public, idempotency_key)
Prepare the unsigned CCTP burn for the current legacy v1 session using a caller-owned event signer public key. Use only when the legacy workflow reports this as the next action; for v2 routes use assetfare_v2_prepare or assetfare_v2_session_create instead. Requires caller approval and advances preparation state, but never receives the event signer private key, signs, or submits.
Input Schema
{
"type": "object",
"properties": {
"access_token": {
"type": "string",
"minLength": 20,
"maxLength": 512,
"description": "Sensitive legacy v1 wallet-bound bearer token returned by assetfare_finish_wallet_auth. Use only with unversioned legacy session tools; never log or use it as a v2 session capability."
},
"session_id": {
"type": "string",
"format": "uuid",
"description": "Legacy v1 session UUID returned by assetfare_create_session. Use only with the unversioned legacy workflow; do not pass a v2 session ID."
},
"event_signer_public": {
"type": "string",
"minLength": 32,
"maxLength": 64,
"description": "Fresh caller-generated ephemeral Solana event signer public key for the legacy CCTP burn. Keep the matching private key client-side; never send it."
},
"idempotency_key": {
"type": "string",
"minLength": 8,
"maxLength": 128,
"description": "Caller-generated retry key, 8-128 characters. Reuse it only when retrying the same logical mutation; choose a new key for a new operation."
}
},
"required": [
"access_token",
"session_id",
"event_signer_public",
"idempotency_key"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢assetfare_observe_cctp(access_token, session_id, burn_signature, idempotency_key)
Verify Circle attestation and the forwarded Base or Arbitrum USDC mint for a caller-submitted legacy v1 burn, then advance the session record. Use only after the CCTP burn is submitted; use assetfare_read_session for inspection without advancement and a v2 session observe tool for v2 routes. Makes a network request but never signs or submits.
Input Schema
{
"type": "object",
"properties": {
"access_token": {
"type": "string",
"minLength": 20,
"maxLength": 512,
"description": "Sensitive legacy v1 wallet-bound bearer token returned by assetfare_finish_wallet_auth. Use only with unversioned legacy session tools; never log or use it as a v2 session capability."
},
"session_id": {
"type": "string",
"format": "uuid",
"description": "Legacy v1 session UUID returned by assetfare_create_session. Use only with the unversioned legacy workflow; do not pass a v2 session ID."
},
"burn_signature": {
"type": "string",
"minLength": 64,
"maxLength": 128,
"description": "Finalized Solana burn signature already submitted by the caller for this legacy CCTP step."
},
"idempotency_key": {
"type": "string",
"minLength": 8,
"maxLength": 128,
"description": "Caller-generated retry key, 8-128 characters. Reuse it only when retrying the same logical mutation; choose a new key for a new operation."
}
},
"required": [
"access_token",
"session_id",
"burn_signature",
"idempotency_key"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪assetfare_prepare_destination_action(access_token, session_id, idempotency_key)
Prepare the exact-cap permit and unsigned ERC-4337 destination settlement plan for the current legacy v1 session. Use only when the legacy workflow reports the destination step and after caller approval; v2 sessions expose their current action through assetfare_v2_session_get. Makes a network request and advances preparation state, but never signs or submits.
Input Schema
{
"type": "object",
"properties": {
"access_token": {
"type": "string",
"minLength": 20,
"maxLength": 512,
"description": "Sensitive legacy v1 wallet-bound bearer token returned by assetfare_finish_wallet_auth. Use only with unversioned legacy session tools; never log or use it as a v2 session capability."
},
"session_id": {
"type": "string",
"format": "uuid",
"description": "Legacy v1 session UUID returned by assetfare_create_session. Use only with the unversioned legacy workflow; do not pass a v2 session ID."
},
"idempotency_key": {
"type": "string",
"minLength": 8,
"maxLength": 128,
"description": "Caller-generated retry key, 8-128 characters. Reuse it only when retrying the same logical mutation; choose a new key for a new operation."
}
},
"required": [
"access_token",
"session_id",
"idempotency_key"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪assetfare_observe_destination(access_token, session_id, transaction_hash, idempotency_key)
Verify an already-submitted destination UserOperation receipt and finalize the legacy v1 workflow record. Use only after the caller independently submits assetfare_prepare_destination_action; for v2 output observation use assetfare_v2_session_observe_output instead. Makes a network request and advances session state, but never signs or submits.
Input Schema
{
"type": "object",
"properties": {
"access_token": {
"type": "string",
"minLength": 20,
"maxLength": 512,
"description": "Sensitive legacy v1 wallet-bound bearer token returned by assetfare_finish_wallet_auth. Use only with unversioned legacy session tools; never log or use it as a v2 session capability."
},
"session_id": {
"type": "string",
"format": "uuid",
"description": "Legacy v1 session UUID returned by assetfare_create_session. Use only with the unversioned legacy workflow; do not pass a v2 session ID."
},
"transaction_hash": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{64}$",
"description": "Destination EVM transaction hash already submitted by the caller, formatted as 0x plus 64 hex characters."
},
"idempotency_key": {
"type": "string",
"minLength": 8,
"maxLength": 128,
"description": "Caller-generated retry key, 8-128 characters. Reuse it only when retrying the same logical mutation; choose a new key for a new operation."
}
},
"required": [
"access_token",
"session_id",
"transaction_hash",
"idempotency_key"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Community
Evidence