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

A
Description quality
99%
Schema completeness
87%
Naming quality
74%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (7)

  • LOWTool 'assetfare_v2_new_session_capability' name length outside 3-30 rangein assetfare_v2_new_session_capability
  • LOWTool 'assetfare_v2_session_observe_source' name length outside 3-30 rangein assetfare_v2_session_observe_source
  • LOWTool 'assetfare_v2_session_observe_output' name length outside 3-30 rangein assetfare_v2_session_observe_output
  • LOWTool 'assetfare_v2_session_refresh_action' name length outside 3-30 rangein assetfare_v2_session_refresh_action
  • LOWTool 'assetfare_prepare_source_action' name length outside 3-30 rangein assetfare_prepare_source_action
  • LOWTool 'assetfare_verify_source_receipt' name length outside 3-30 rangein assetfare_verify_source_receipt
  • LOWTool 'assetfare_prepare_destination_action' name length outside 3-30 rangein assetfare_prepare_destination_action

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~7,475Tokens (tool definitions)
~2.8 KBTypical response size
Significant attention impact (5.84% of 128k context)

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-http

What it can do

Tool inventory

Tools (22)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢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

Rate this Server

Evidence

Recent observations

verifiedversion not recorded22 tools