Money tools for AI agents over x402: USDC bridge to 16 chains, Polymarket data, stocks, USDC gas.
Model Context Protocol (MCP) Server: ai.liquidagent.api/liquid-agent
The MCP server titled ai.liquidagent.api/liquid-agent provides access to “x402 money tools for agents,” including a one-signature USDC bridge (Base-Arc), tokenized stocks, and USDC gas. This description reflects the server’s stated scope and tool categories.
🛠️ Key Features
x402 money tools for agents
One-signature USDC bridge (Base-Arc)
Tokenized stocks
USDC gas
🚀 Use Cases
Agent workflows requiring USDC bridging via Base-Arc
Free. Exact price to move USDC with the Liquid Bridge (Base to Arc, Arbitrum, OP, Polygon, Avalanche, Unichain, Linea, World Chain, Sonic, Monad, Sei, Ink, HyperEVM, XDC, Plume, Codex; or Arc to Base): what you pay, what you receive (exactly `amount`), the fee breakdown and the ETA. No payment, no wallet needed.
Parameters4
from
string
optional
Chain you pay on. Omit to pick the live route to `to` (Base to any listed chain; Arc to Base).
to
string
required
Chain you receive on: arc, arbitrum, optimism, polygon, avalanche, unichain, linea, world, sonic, monad, sei, ink, hyperevm, xdc, plume, codex (from Base) or base (from Arc).
amount
string
required
USDC to RECEIVE on the destination, e.g. "1" or "25.5". Minimum 1.
ref
string
optional
Optional referrer address: earns 20% of Liquid's fee. Omit if you have none.
Raw schema
{
"type": "object",
"properties": {
"from": {
"description": "Chain you pay on. Omit to pick the live route to `to` (Base to any listed chain; Arc to Base).",
"type": "string",
"enum": [
"base",
"arc"
]
},
"to": {
"type": "string",
"enum": [
"base",
"arc",
"optimism",
"unichain",
"sonic",
"world",
"monad",
"sei",
"xdc",
"ink",
"plume",
"polygon",
"avalanche",
"arbitrum",
"codex",
"hyperevm",
"linea"
],
"description": "Chain you receive on: arc, arbitrum, optimism, polygon, avalanche, unichain, linea, world, sonic, monad, sei, ink, hyperevm, xdc, plume, codex (from Base) or base (from Arc)."
},
"amount": {
"type": "string",
"pattern": "^\\d+(\\.\\d{1,6})?$",
"description": "USDC to RECEIVE on the destination, e.g. \"1\" or \"25.5\". Minimum 1."
},
"ref": {
"description": "Optional referrer address: earns 20% of Liquid's fee. Omit if you have none.",
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$"
}
},
"required": [
"to",
"amount"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}
bridge_prepare_payment
Returns the exact x402 payment request for a bridge (network, asset, payTo contract, amount, EIP-712 domain) and the URL to call. Pay it with your own x402 client: sign one EIP-3009 authorization and repeat the GET with the PAYMENT-SIGNATURE header. You receive exactly `amount` at your own address on the destination. This tool does not pay or sign anything.
Parameters4
from
string
optional
Chain you pay on. Omit to pick the live route to `to` (Base to any listed chain; Arc to Base).
to
string
required
Chain you receive on: arc, arbitrum, optimism, polygon, avalanche, unichain, linea, world, sonic, monad, sei, ink, hyperevm, xdc, plume, codex (from Base) or base (from Arc).
amount
string
required
USDC to RECEIVE on the destination, e.g. "1" or "25.5". Minimum 1.
ref
string
optional
Optional referrer address: earns 20% of Liquid's fee. Omit if you have none.
Raw schema
{
"type": "object",
"properties": {
"from": {
"description": "Chain you pay on. Omit to pick the live route to `to` (Base to any listed chain; Arc to Base).",
"type": "string",
"enum": [
"base",
"arc"
]
},
"to": {
"type": "string",
"enum": [
"base",
"arc",
"optimism",
"unichain",
"sonic",
"world",
"monad",
"sei",
"xdc",
"ink",
"plume",
"polygon",
"avalanche",
"arbitrum",
"codex",
"hyperevm",
"linea"
],
"description": "Chain you receive on: arc, arbitrum, optimism, polygon, avalanche, unichain, linea, world, sonic, monad, sei, ink, hyperevm, xdc, plume, codex (from Base) or base (from Arc)."
},
"amount": {
"type": "string",
"pattern": "^\\d+(\\.\\d{1,6})?$",
"description": "USDC to RECEIVE on the destination, e.g. \"1\" or \"25.5\". Minimum 1."
},
"ref": {
"description": "Optional referrer address: earns 20% of Liquid's fee. Omit if you have none.",
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$"
}
},
"required": [
"to",
"amount"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}
bridge_routes
Free. Every Liquid Bridge route with its live price for 1 USDC and whether it is open.
Free. Unclaimed Liquid Bridge referral earnings for an address on each chain, and how they are paid out. Earn by adding ref=<your address> to bridge calls: 20% of Liquid's fee.
Free. Opens your own vault for the tokenized US stock basket (NVDA, META, AAPL, GOOGL), controlled only by you. Returns an UNSIGNED transaction {to, data, value, chainId} on Base; nothing happens until you sign it with your own wallet and broadcast it. Liquid never holds keys or funds. After it confirms, find the vault with stocks_portfolio.
Free. Sets your vault's target allocation across the 4 stocks in basis points (sum 10000), e.g. [4000, 3000, 2000, 1000]. Default is equal weight. Returns an UNSIGNED transaction {to, data, value, chainId} on Base; nothing happens until you sign it with your own wallet and broadcast it. Liquid never holds keys or funds.
Parameters2
vault
string
required
Your vault address.
weightsBps
array
required
4 weights in basis points summing to 10000, in the basket's constituent order (see stocks_basket).
Raw schema
{
"type": "object",
"properties": {
"vault": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$",
"description": "Your vault address."
},
"weightsBps": {
"minItems": 4,
"maxItems": 4,
"type": "array",
"items": {
"type": "integer",
"minimum": 0,
"maximum": 10000
},
"description": "4 weights in basis points summing to 10000, in the basket's constituent order (see stocks_basket)."
}
},
"required": [
"vault",
"weightsBps"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}
stocks_buy
Free. Invest USDC into your vault from $1 (USDC 6 decimals: "1000000" = $1). Easiest: set usePermit=true with owner, sign the returned typedData off-chain (free), then call again with permitDeadline + permitSignature to get ONE deposit transaction. Without a permit you get two transactions (approve, then deposit). Returns an UNSIGNED transaction {to, data, value, chainId} on Base; nothing happens until you sign it with your own wallet and broadcast it. Liquid never holds keys or funds.
Parameters7
vault
string
required
Your vault address.
usdc
string
required
USDC to invest, 6 decimals, minimum "1000000" ($1).
owner
string
optional
Your wallet address (required with usePermit).
minShares
string
optional
Optional slippage floor: minimum shares to receive.
usePermit
boolean
optional
true = return an EIP-2612 permit to sign first (no approve transaction).
permitDeadline
integer
optional
Deadline from the permit you signed (second call).
permitSignature
string
optional
Your signature of the permit typedData (second call).
Raw schema
{
"type": "object",
"properties": {
"vault": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$",
"description": "Your vault address."
},
"usdc": {
"type": "string",
"pattern": "^\\d+$",
"description": "USDC to invest, 6 decimals, minimum \"1000000\" ($1)."
},
"owner": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$",
"description": "Your wallet address (required with usePermit)."
},
"minShares": {
"type": "string",
"pattern": "^\\d+$",
"description": "Optional slippage floor: minimum shares to receive."
},
"usePermit": {
"description": "true = return an EIP-2612 permit to sign first (no approve transaction).",
"type": "boolean"
},
"permitDeadline": {
"description": "Deadline from the permit you signed (second call).",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"permitSignature": {
"description": "Your signature of the permit typedData (second call).",
"type": "string",
"pattern": "^0x[0-9a-fA-F]+$"
}
},
"required": [
"vault",
"usdc"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}
stocks_sell
Free. Cash out: redeem basket shares to USDC, or take the raw stock tokens in-kind (works any block, no vault needed, anyone holding shares can sell). Returns an UNSIGNED transaction {to, data, value, chainId} on Base; nothing happens until you sign it with your own wallet and broadcast it. Liquid never holds keys or funds.
Parameters4
vault
string
required
Vault whose shares you hold.
shares
string
required
Shares to redeem (18 decimals; see stocks_portfolio).
minUsdcOut
string
optional
Optional slippage floor in USDC-6.
inKind
boolean
optional
true = receive the 4 stock tokens instead of USDC.
Free. Brings your vault back to its target weights (check stocks_vault: rebalanceNeeded). Returns an UNSIGNED transaction {to, data, value, chainId} on Base; nothing happens until you sign it with your own wallet and broadcast it. Liquid never holds keys or funds.
Free. Transfer your tokenized stock basket shares to any wallet or another agent; they can hold, sell or forward them, no vault needed. Returns an UNSIGNED transaction {to, data, value, chainId} on Base; nothing happens until you sign it with your own wallet and broadcast it. Liquid never holds keys or funds.
Returns the x402 payment request for basket signals ($0.007 USDC on Base, Polygon or Arc): rebalancing signal, momentum and suggested weights for NVDA/META/AAPL/GOOGL in one call. Pay it with your own x402 client. This tool does not pay.
Parameters1
vault
string
optional
Optional vault to tailor the signal to.
Raw schema
{
"type": "object",
"properties": {
"vault": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$",
"description": "Optional vault to tailor the signal to."
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}
polymarket_prepare
Returns the x402 payment request for Polymarket crypto Up/Down data (BTC, ETH, SOL, XRP; 5m and 15m; $0.004 USDC on Base, Polygon or Arc): the OFFICIAL price to beat for the live 5m or 15m window (matched to the cent against Polymarket's results), the live Chainlink price and its distance from the price to beat, seconds left, token ids and market prices. Pass start (unix) for a past window's official outcome. First call free: add ?free=1 to the URL for one live answer at no charge (one per agent). Pay it with your own x402 client. This tool does not pay.
PAID over x402 inside this tool call ($0.004 USDC on Base, Polygon or Arc): the OFFICIAL Polymarket price to beat for the live BTC, ETH, SOL or XRP 5m/15m Up/Down window (matched to every decimal against Polymarket), the live Chainlink price and its distance, seconds left, token ids and market prices. Call it once without payment to get the x402 PaymentRequired; your x402 wallet signs it and you call again with the payment in _meta["x402/payment"]. Set free=true for one free answer per agent.
Parameters3
market
string
required
Which market: <asset>-<timeframe>.
start
string
optional
Optional unix start of a past window (official outcome).
free
boolean
optional
Use your one free call (per agent) instead of paying.
Free. What the Mint & Marquee partner shop sells (custom 3D printed figurines, statues, keychains, bag tags; soccer, anime, crypto collections), its product count and price range, and how to search it.
PAID over x402 inside this tool call ($0.001 USDC on Arc, Base or Polygon): search the Mint & Marquee partner shop for gifts and collectibles. Returns products with price, photo, a short description and a link to buy. Show the person each product with its link, then the foundWith line once. Call once without payment to get the x402 PaymentRequired, then call again with the signed payment in _meta["x402/payment"].
Parameters3
q
string
optional
What to find, in words (e.g. soccer gift).
max
number
optional
Optional price ceiling in USD.
limit
integer
optional
How many products, 1 to 10 (default 5).
Raw schema
{
"type": "object",
"properties": {
"q": {
"description": "What to find, in words (e.g. soccer gift).",
"type": "string",
"maxLength": 120
},
"max": {
"description": "Optional price ceiling in USD.",
"type": "number",
"exclusiveMinimum": 0,
"maximum": 100000
},
"limit": {
"description": "How many products, 1 to 10 (default 5).",
"type": "integer",
"minimum": 1,
"maximum": 10
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}
leads_count
Free. How many local businesses match a category and place, how many have an email at each grade (A/B/C), the top cities, and the exact price of the next page. Run this before leads_search.
Parameters15
category
string
required
Business type in plain words: dentist, plumber, hvac, roofing, hair salon, law firm, med spa, restaurant.
city
string
optional
City, e.g. Atlanta, Savannah, Macon. Give city, county, zip or near.
county
string
optional
County, e.g. Gwinnett, Chatham.
email
string
optional
required (default), any, or none (phone-only businesses).
Payment system on their site: yes, none, square, toast, clover, stripe, paypal.
hiring
boolean
optional
Only businesses whose site says they are hiring.
limit
integer
optional
How many leads, 1-1,000 (default 3 = $0.09); $0.03 per lead.
offset
integer
optional
Skip this many, for the next page.
sample
boolean
optional
true = 3 free leads to judge quality (3 a day), no payment.
Raw schema
{
"type": "object",
"properties": {
"category": {
"type": "string",
"minLength": 2,
"maxLength": 60,
"description": "Business type in plain words: dentist, plumber, hvac, roofing, hair salon, law firm, med spa, restaurant."
},
"city": {
"description": "City, e.g. Atlanta, Savannah, Macon. Give city, county, zip or near.",
"type": "string",
"maxLength": 60
},
"county": {
"description": "County, e.g. Gwinnett, Chatham.",
"type": "string",
"maxLength": 40
},
"email": {
"description": "required (default), any, or none (phone-only businesses).",
"type": "string",
"enum": [
"required",
"any",
"none"
]
},
"zip": {
"description": "5-digit ZIP (a prefix works).",
"type": "string",
"pattern": "^\\d{3,5}$"
},
"near": {
"description": "lat,lng to search around.",
"type": "string",
"pattern": "^-?\\d+(\\.\\d+)?,-?\\d+(\\.\\d+)?$"
},
"radiusKm": {
"description": "Radius for near, default 5.",
"type": "number",
"minimum": 0.5,
"maximum": 50
},
"minGrade": {
"description": "Email grade floor (A best). Default C.",
"type": "string",
"enum": [
"A",
"B",
"C"
]
},
"website": {
"description": "needs = no working website (a sales signal).",
"type": "string",
"enum": [
"any",
"has",
"none",
"dead",
"needs"
]
},
"booking": {
"description": "Online booking tool: yes, none, vagaro, square_appointments, calendly, booksy, mindbody, acuity, opentable, housecall_pro, jobber, servicetitan, zocdoc.",
"type": "string",
"maxLength": 30
},
"payments": {
"description": "Payment system on their site: yes, none, square, toast, clover, stripe, paypal.",
"type": "string",
"maxLength": 30
},
"hiring": {
"description": "Only businesses whose site says they are hiring.",
"type": "boolean"
},
"limit": {
"description": "How many leads, 1-1,000 (default 3 = $0.09); $0.03 per lead.",
"type": "integer",
"minimum": 1,
"maximum": 1000
},
"offset": {
"description": "Skip this many, for the next page.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"sample": {
"description": "true = 3 free leads to judge quality (3 a day), no payment.",
"type": "boolean"
}
},
"required": [
"category"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}
leads_search
PAID over x402 inside this tool call (USDC on Base or Arc, $0.03 per lead returned, flat, with or without an email; default 3 leads = $0.09; set sample=true for 3 free leads first; the PaymentRequired quotes the exact total; no leads, no charge): local businesses by category and place with a graded email (A/B/C), a contact name when the email shows one, phone, website, socials and buying signals (no website, booking tool, payment system, hiring). Call once without payment to get the x402 PaymentRequired, then call again with the signed payment in _meta["x402/payment"].
Parameters15
category
string
required
Business type in plain words: dentist, plumber, hvac, roofing, hair salon, law firm, med spa, restaurant.
city
string
optional
City, e.g. Atlanta, Savannah, Macon. Give city, county, zip or near.
county
string
optional
County, e.g. Gwinnett, Chatham.
email
string
optional
required (default), any, or none (phone-only businesses).
Payment system on their site: yes, none, square, toast, clover, stripe, paypal.
hiring
boolean
optional
Only businesses whose site says they are hiring.
limit
integer
optional
How many leads, 1-1,000 (default 3 = $0.09); $0.03 per lead.
offset
integer
optional
Skip this many, for the next page.
sample
boolean
optional
true = 3 free leads to judge quality (3 a day), no payment.
Raw schema
{
"type": "object",
"properties": {
"category": {
"type": "string",
"minLength": 2,
"maxLength": 60,
"description": "Business type in plain words: dentist, plumber, hvac, roofing, hair salon, law firm, med spa, restaurant."
},
"city": {
"description": "City, e.g. Atlanta, Savannah, Macon. Give city, county, zip or near.",
"type": "string",
"maxLength": 60
},
"county": {
"description": "County, e.g. Gwinnett, Chatham.",
"type": "string",
"maxLength": 40
},
"email": {
"description": "required (default), any, or none (phone-only businesses).",
"type": "string",
"enum": [
"required",
"any",
"none"
]
},
"zip": {
"description": "5-digit ZIP (a prefix works).",
"type": "string",
"pattern": "^\\d{3,5}$"
},
"near": {
"description": "lat,lng to search around.",
"type": "string",
"pattern": "^-?\\d+(\\.\\d+)?,-?\\d+(\\.\\d+)?$"
},
"radiusKm": {
"description": "Radius for near, default 5.",
"type": "number",
"minimum": 0.5,
"maximum": 50
},
"minGrade": {
"description": "Email grade floor (A best). Default C.",
"type": "string",
"enum": [
"A",
"B",
"C"
]
},
"website": {
"description": "needs = no working website (a sales signal).",
"type": "string",
"enum": [
"any",
"has",
"none",
"dead",
"needs"
]
},
"booking": {
"description": "Online booking tool: yes, none, vagaro, square_appointments, calendly, booksy, mindbody, acuity, opentable, housecall_pro, jobber, servicetitan, zocdoc.",
"type": "string",
"maxLength": 30
},
"payments": {
"description": "Payment system on their site: yes, none, square, toast, clover, stripe, paypal.",
"type": "string",
"maxLength": 30
},
"hiring": {
"description": "Only businesses whose site says they are hiring.",
"type": "boolean"
},
"limit": {
"description": "How many leads, 1-1,000 (default 3 = $0.09); $0.03 per lead.",
"type": "integer",
"minimum": 1,
"maximum": 1000
},
"offset": {
"description": "Skip this many, for the next page.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"sample": {
"description": "true = 3 free leads to judge quality (3 a day), no payment.",
"type": "boolean"
}
},
"required": [
"category"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}
leads_lookup
PAID over x402 inside this tool call ($0.01 USDC on Base or Arc per lookup that finds a business; no match, no charge): give a US phone number or a website and get the local business behind it: name, address, category, the best email graded A/B/C, a contact name when the email shows one, socials and buying signals. A website only matches when it carries the business's own phone number. Call once without payment to get the x402 PaymentRequired, then again with the signed payment in _meta["x402/payment"].
Parameters2
phone
string
optional
A US phone number, any format: 4043552001, (404) 355-2001, +14043552001. Give phone or domain.
domain
string
optional
Or a website: example.com or https://www.example.com/contact.
Raw schema
{
"type": "object",
"properties": {
"phone": {
"description": "A US phone number, any format: 4043552001, (404) 355-2001, +14043552001. Give phone or domain.",
"type": "string",
"maxLength": 30
},
"domain": {
"description": "Or a website: example.com or https://www.example.com/contact.",
"type": "string",
"maxLength": 300
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}
leads_tech
PAID over x402 inside this tool call ($0.005 USDC on Base or Arc per lookup that finds a verified site; no match, no charge): give a website or a US phone number and get the site platform (WordPress, Wix, Squarespace, Shopify...), online booking tool (Square Appointments, Vagaro, Calendly, Zocdoc...), payment system (Square, Toast, Clover, Stripe...), hiring and socials, read from the business's own verified website. Call once without payment to get the x402 PaymentRequired, then again with the signed payment in _meta["x402/payment"].
Parameters2
phone
string
optional
A US phone number, any format: 4043552001, (404) 355-2001, +14043552001. Give phone or domain.
domain
string
optional
Or a website: example.com or https://www.example.com/contact.
Raw schema
{
"type": "object",
"properties": {
"phone": {
"description": "A US phone number, any format: 4043552001, (404) 355-2001, +14043552001. Give phone or domain.",
"type": "string",
"maxLength": 30
},
"domain": {
"description": "Or a website: example.com or https://www.example.com/contact.",
"type": "string",
"maxLength": 300
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}
stocks_signals
PAID over x402 inside this tool call ($0.007 USDC on Base, Polygon or Arc): the whole stock basket's rebalancing signal in one call (returns, volatility, RSI, trend, relative strength and inverse-volatility target weights for NVDA, META, AAPL, GOOGL). Call once without payment to get the x402 PaymentRequired, then call again with the signed payment in _meta["x402/payment"].
Parameters1
vault
string
optional
Optional vault to tailor the signal to.
Raw schema
{
"type": "object",
"properties": {
"vault": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$",
"description": "Optional vault to tailor the signal to."
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}
stocks_publish_prepare
Returns the x402 payment request to publish a live, shareable portfolio page for a vault for 24 hours ($0.01 USDC on Base or Polygon). Pay it with your own x402 client. This tool does not pay.
Free. USDC balance (and native gas balance) of an address on every CCTP chain at once: Ethereum, Avalanche, OP Mainnet, Arbitrum, Base, Polygon PoS, Unichain, Linea, Sonic, World Chain, Arc. Use it before paying or bridging to see where your money is.
Free. Status of ANY Circle CCTP v2 USDC transfer (not only Liquid's) by its burn transaction hash: attestation, whether it was minted on the destination, and exactly how to finish a stuck one (receiveMessage with the message and attestation). Chains: Ethereum, Avalanche, OP Mainnet, Arbitrum, Base, Polygon PoS, Unichain, Linea, Sonic, World Chain, Arc.
Free. Decode any x402 payment request (from a URL, a PAYMENT-REQUIRED header or a 402 body) into plain English with warnings, and optionally verify a signed payment (PAYMENT-SIGNATURE / X-PAYMENT header) the way a facilitator would: recipient, amount, time window, EIP-712 signature against the token's real domain, nonce reuse and balance. Every failed check comes with the fix.
Parameters5
url
string
optional
The paid endpoint URL (https). It is called once, without payment, to read its 402.
method
string
optional
HTTP method for url (default GET).
body
object
optional
JSON body for a POST url.
requirement
string
optional
Instead of url: the PAYMENT-REQUIRED header value (base64) or the 402 JSON body.
payment
string
optional
Optional signed payment header value to verify.
Raw schema
{
"type": "object",
"properties": {
"url": {
"description": "The paid endpoint URL (https). It is called once, without payment, to read its 402.",
"type": "string",
"format": "uri"
},
"method": {
"description": "HTTP method for url (default GET).",
"type": "string",
"enum": [
"GET",
"POST"
]
},
"body": {
"description": "JSON body for a POST url.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"requirement": {
"description": "Instead of url: the PAYMENT-REQUIRED header value (base64) or the 402 JSON body.",
"type": "string",
"maxLength": 20000
},
"payment": {
"description": "Optional signed payment header value to verify.",
"type": "string",
"maxLength": 20000
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}
payment_readiness
Free. One call to know if a wallet can pay an x402 endpoint right now: reads the endpoint's 402, checks the wallet's balance on each accepted network, and if it cannot pay, returns the cheapest fix (e.g. move USDC from the chain where it sits, with the exact bridge_quote arguments).
Parameters5
address
string
required
The paying wallet.
url
string
optional
The paid endpoint URL (https). It is called once, without payment, to read its 402.
method
string
optional
HTTP method for url (default GET).
body
object
optional
JSON body for a POST url.
requirement
string
optional
Instead of url: the PAYMENT-REQUIRED header value (base64) or the 402 JSON body.
Raw schema
{
"type": "object",
"properties": {
"address": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$",
"description": "The paying wallet."
},
"url": {
"description": "The paid endpoint URL (https). It is called once, without payment, to read its 402.",
"type": "string",
"format": "uri"
},
"method": {
"description": "HTTP method for url (default GET).",
"type": "string",
"enum": [
"GET",
"POST"
]
},
"body": {
"description": "JSON body for a POST url.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"requirement": {
"description": "Instead of url: the PAYMENT-REQUIRED header value (base64) or the 402 JSON body.",
"type": "string",
"maxLength": 20000
}
},
"required": [
"address"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}
gas_sponsor_info
Free. How to send a transaction on Base, Polygon or Solana with a wallet that holds USDC but no ETH/POL/SOL: the x402-paid gas sponsor, its price rule (from $0.03) and lanes.
x402 money tools for AI agents. Verified US local business leads at $0.03 a lead, a one-signature USDC bridge from Base to 16 chains, the live Polymarket price to beat, a tokenized US stock basket from $1, gas paid in USDC, and gift search in partner shops, plus free USDC and x402 debugging tools and a remote MCP server. No account, no API key, and the server never holds your keys.
US local businesses by category and place (30 states, 4.7M businesses): a checked email graded A/B/C, contact name, phone, a website proven by the business's own phone number, socials and buying signals. Free count and 3 free samples a day. Plus reverse lookup by phone or website ($0.01) and website tech ($0.005)
USDC from Base to Arc, Arbitrum, OP, Polygon, Avalanche, Unichain, Linea, World Chain, Sonic, Monad, Sei, Ink, HyperEVM, XDC, Plume, Codex (or Arc to Base), one x402 signature, exact delivery. Referrers earn 20% of the fee. Proof of delivery
Search the Mint & Marquee partner shop (custom 3D printed figurines, statues, keychains, bag tags) and get products with price, photo and a link to buy
$0.001 / search
Free tools
USDC balances on 11 chains, status of any CCTP transfer, x402 debugger, payment readiness check
free
x402 · AI agents · lead generation · local business leads · USDC bridge · CCTP · Polymarket · MCP · tokenized stocks · Base · ERC-4626 · ERC-8004 · agentic commerce · agentic shopping · no oracle · self-custodial
What is this?
The stock index part of Liquid Agent is an agent-native tokenized-stock index on Base. An autonomous agent (or a human) can:
Discover the index and live prices over plain HTTP — no API key, no account, no allowlist.
Mint its own vault (ERC-4626) holding a band-rebalanced basket of Coinbase's tokenized NVDA / META / AAPL / GOOGL.
Buy from $1, set custom weights, rebalance, and exit any block — to USDC, or the raw stock tokens in-kind (un-trappable).
Every read is free. Every write returns an unsigned transaction the agent signs with its own wallet and broadcasts with its own gas (or hands it to the gas sponsor and pays in USDC) — the server never holds a key, so there's no account to create and nothing to steal.
Built for the agent economy: x402-discoverable, an A2A agent card, llms.txt / agents.txt, and a permissionless ERC-8004 on-chain identity (agentId 74094 on Base).
Why an agent picks this
Instead of picking four stocks, sizing each, buying them separately, and rebalancing by hand, an agent makes one call and owns a single auto-rebalanced share of a diversified tokenized-equity basket — self-priced (no oracle), redeemable any block, with no project token, all reachable over a live HTTP + x402 API.
Connect any MCP client (Claude, Cursor, ChatGPT, agent frameworks) by URL: https://api.liquidagent.ai/mcp (Streamable HTTP, no auth). Listed in the official MCP Registry as ai.liquidagent.api/liquid-agent and on Smithery.
bash
claude mcp add --transport http liquid-agent https://api.liquidagent.ai/mcp
Leads:leads_count (free: matches and the exact price), leads_search ($0.03 a lead), leads_lookup ($0.01: the business behind a phone number or website), leads_tech ($0.005: what a business website runs on), all paid inside the tool call
Stocks:stocks_basket, stocks_portfolio, stocks_buy_quote, stocks_vault, stocks_create_vault, stocks_set_weights, stocks_buy, stocks_sell, stocks_rebalance, stocks_send (write tools return an unsigned transaction you sign yourself)
Paid inside the tool call (x402 over MCP):polymarket_price_to_beat ($0.004), stocks_signals ($0.007), shop_search ($0.001). Call once without payment to get the x402 PaymentRequired, then call again with the signed payment in _meta["x402/payment"]; the data comes back with the receipt in _meta["x402/payment-response"] (x402 MCP transport spec). Pay on Base, Polygon or Arc.
Paid prep (returns the HTTP 402 to pay yourself):polymarket_prepare ($0.004), stocks_signals_prepare ($0.007), stocks_publish_prepare ($0.01)
Utilities:usdc_balances (every CCTP chain), cctp_status (any Circle CCTP transfer, and how to finish a stuck one), x402_check (decode a 402, verify a signed payment, get the fix), payment_readiness (can this wallet pay this endpoint)
Other:gas_sponsor_info, shop_info, liquid_guide
Plus 4 doc resources and 3 prompts (bridge USDC, earn referrals, buy the basket). Free to connect. Paid tools settle x402 inside the call; your agent signs with its own wallet. The server never signs or holds funds.
clawhub install liquid-agent-stocks # OpenClaw / ClawHub — the stock index
clawhub install liquid-gas-sponsor # OpenClaw / ClawHub — the gas sponsor (transact with USDC only, no ETH)
clawhub install liquid-polymarket # OpenClaw / ClawHub: Polymarket official price to beat, live
npx skills add LiquidAgent/liquidagentx402 # skills.sh (any agent that reads SKILL.md): every skill in skills/
Quickstart — create → buy → rebalance → exit
Reads are free. Writes return an unsigned {to,data,value,chainId} (or {steps:[...]}) that you sign and broadcast.
bash
BASE=https://api.liquidagent.ai
# 1. Discover the index (free)
curl -s $BASE/v1/basket
# 2. Preview a $2 buy (free; USDC-6, so 2000000 = $2.00)
curl -s "$BASE/v1/quote?usdc=2000000"# 3. Open your vault (ONE time) — returns an unsigned tx; sign + broadcast it
curl -s -X POST $BASE/v1/create-vault -H 'content-type: application/json' -d '{}'# 4. Find your vault address
curl -s $BASE/v1/balance/0xYourAddress # -> vaults[0].vault# 5. (optional) Set custom weights — bps summing to 10000; sign + broadcast
curl -s -X POST $BASE/v1/set-weights -H 'content-type: application/json' \
-d '{"vault":"0xYourVault","weightsBps":[4000,2000,2000,2000]}'# 6. Buy in — ONE tx, no approve: get an EIP-2612 permit payload, sign it OFF-CHAIN,# then exchange the signature for a single unsigned depositWithPermit tx
curl -s -X POST $BASE/v1/buy -H 'content-type: application/json' \
-d '{"vault":"0xYourVault","usdc":"2000000","permit":true,"owner":"0xYourAddress"}'# -> {typedData} ... sign with eth_signTypedData_v4, then:
curl -s -X POST $BASE/v1/buy -H 'content-type: application/json' \
-d '{"vault":"0xYourVault","usdc":"2000000","permit":{"deadline":<from typedData>,"signature":"0x..."}}'# (omit `permit` entirely for the legacy approve + deposit two-step)# 7. Check your vault (free)
curl -s $BASE/v1/vault/0xYourVault
# 8. (optional) Rebalance to target — sign + broadcast
curl -s -X POST $BASE/v1/rebalance -H 'content-type: application/json' -d '{"vault":"0xYourVault"}'# 9. Cash out — to USDC or raw tokens; sign + broadcast
curl -s -X POST $BASE/v1/redeem -H 'content-type: application/json' \
-d '{"vault":"0xYourVault","shares":"<amount>","inKind":false}'
Signing: every write returns an unsigned {to,data,value,chainId}. Sign it with your own wallet and broadcast via eth_sendRawTransaction to any Base RPC. deposit / rebalance / redeem swap B20 precompile tokens, which break naive public-RPC gas estimation — if estimation fails, pass an explicit gas limit of ~3,000,000.
Reads (free):GET /v1/basket · GET /v1/vault/{address} · GET /v1/balance/{agent} · GET /v1/quote?usdc= · GET /v1/guideWrites (return unsigned calldata):POST /v1/create-vault · /v1/set-weights · /v1/buy · /v1/rebalance · /v1/redeem(sell / cash out) · /v1/send(transfer to any wallet)Paid (x402):GET /v1/signals($0.007 — the basket's rebalancing signal in one call) · POST /v1/publish($0.01 — a live, shareable portfolio page) · POST /v1/gas(from $0.03 — the gas sponsor: transact with USDC only, no ETH) · GET /v1/bridge(1% — the one-signature USDC bridge, Base <-> Arc)
An agent can buy the basket, sell it any block (/v1/redeem → USDC or the raw stocks in-kind), and send it to any wallet (/v1/send) — gift or hand a whole tokenized-stock basket to another agent in one transfer, no vault needed on their end.
GET /v1/signals — $0.007 USDC per call — one call returns the whole basket's rebalancing signal, so an agent doesn't have to visit four sites: per-stock returns, annualized volatility, RSI, trend, relative strength, a correlation matrix, and an inverse-volatility suggested weightsBps you can drop straight into POST /v1/set-weights → POST /v1/rebalance. Add ?vault=<yours> to also get current-vs-suggested drift for your vault.
Pay by signing a USDC authorization (x402 exact scheme, EIP-3009, on Base) — any x402-aware client handles the 402 automatically:
bash
curl -s https://api.liquidagent.ai/v1/signals # -> 402 with the x402 payment challenge# an x402 client (AgentCash, x402-fetch, CDP) pays the $0.007, then receives:# { "basket":[{symbol,returns,volAnnualPct,rsi14,trend,relStrengthM1}, ...],# "basketStats":{ "correlation": {...} },# "signals":{ "riskParityWeightsBps":[...], "biasVsEqualWeightBps":[...], "momentumRankDesc":[...] } }
Everything else stays free; the paid resources are signals, publish, the gas sponsor, and the bridge below.
Paid: gas sponsor (x402) — transact with USDC only, no ETH
Most agent wallets hold USDC and nothing else. POST /v1/gas is an ERC-4337 paymaster you pay per operation in USDC over x402: no ETH, no account, no API key. Price is max($0.03, 1.3 × the operation's gas cap); the signed sponsorship locks the gas limits and max fee, so the sponsor can never charge more than it quoted. One endpoint, the body picks the lane:
Smart-wallet SDKs (ERC-7677). Point the SDK's paymaster URL at https://api.liquidagent.ai/v1/gas. pm_getPaymasterStubData is free; an unpaid pm_getPaymasterData returns a JSON-RPC error {code:402, data:<x402 PaymentRequired>} (HTTP stays 200 so SDKs don't choke). Put the x402 payment object in params[3].context.x402 and retry. Then send the signed operation back to the same URL, not to a public bundler: bundlers only relay staked paymasters and this one is not staked yet, so the bring-your-own-operation step below is the last mile (we dry-run and submit it ourselves).
Plain wallets (any EOA, via EIP-7702). Two calls to the same URL:
bash
# 1. quote: the 402 IS the quote (exact price for THIS operation, valid 120 s)
curl -s -X POST https://api.liquidagent.ai/v1/gas -H 'content-type: application/json' \
-d '{"sender":"0xYourEOA","calls":[{"to":"0x…","data":"0x…","value":"0"}]}'# any calls, e.g. an unsigned tx from this API# 2. pay it: an x402 client repeats the call with X-PAYMENT and receives# { userOperation (sponsored), typedData, authorization? (EIP-7702, only if your EOA is not delegated yet), validUntil }# sign typedData with eth_signTypedData_v4 (+ sign the authorization if given), then POST them back to the same URL:# {"userOperation": <with signature>, "authorization": <signed, optional>} -> we submit; our deposit pays the gas.# No further charge. Only operations we sponsored are accepted, once each.
Full walkthrough with signatures in examples/gasless.js — a wallet with zero ETH buys the index end to end. Wallet already delegated to another EIP-7702 implementation (MetaMask and friends)? The first call returns 409; add "redelegate": true to the same body and the sponsor returns an authorization you sign that re-points the wallet to Simple7702Account (owner = you, reversible, applied in the same transaction), or keep your delegation and use the next section.
Any other smart account (bring your own operation). Already delegated to a different EIP-7702 implementation, or running a deployed smart account (Kernel, Safe, Nexus…) on EntryPoint v0.8? Build the operation with your own SDK and let the sponsor submit it — no bundler, no paymaster stake, no ETH:
bash
# 1. quote: POST the UNSIGNED EntryPoint v0.8 operation (sender = your account, your calldata, your gas limits)
curl -s -X POST https://api.liquidagent.ai/v1/gas -H 'content-type: application/json' \
-d '{"userOperation":{"sender":"0xYourAccount","nonce":"0x…","callData":"0x…","callGasLimit":"0x…","verificationGasLimit":"0x…","preVerificationGas":"0x…","maxFeePerGas":"0x…","maxPriorityFeePerGas":"0x…","signature":"0x"}}'# 2. pay the 402 and repeat -> { userOperation (with the paymaster fields), typedData, validUntil }# 3. sign it the way YOUR account expects (viem: account.signUserOperation), POST {"userOperation": <with signature>} to the same URL.# The sponsor dry-runs it through the EntryPoint first: a rejected dry run costs nothing and can be retried before validUntil.
Working reference in examples/gasless-bring-your-own.js: swap the account constructor for your SDK's. GET /v1/gas describes the sponsor; GET /v1/gas/stats shows live usage.
Paid: Liquid Leads, US local business leads (x402)
GET https://api.liquidagent.ai/v1/leads/search?category=<what>&city=<where>&limit=<n> returns local businesses (dentists, plumbers, HVAC, salons, law firms and hundreds more) for $0.03 USDC per lead, flat, x402 exact (EIP-3009), USDC on Base or Arc. 1 to 1,000 leads per call (default 3 = $0.09, or sample=1 for 3 free leads); the 402 quotes the exact total and you are never charged for an empty answer.
Each lead: name, address, phone, the best email with its grade (A = own domain and a named person, B = own domain shared inbox or a published free-mail address, C = a live domain not tied to their site), a contact name when the email shows one, socials, and buying signals (no website, online booking tool, payment system, hiring). A website is only returned when it carries the business's own phone number; a site we cannot prove is theirs is dropped and nothing from it is used. Place by city, county, zip or near=<lat>,<lng>; format=csv for a CRM.
Free first:/v1/leads (coverage by state, every filter), /v1/leads/count (how many match, by grade, and the exact price), /v1/leads/categories, and sample=1 for 3 free leads (3 a day). Coverage: 30 states and growing; GET /v1/leads lists them. Data: Overture Maps Places (CDLA-Permissive-2.0) plus our own crawl of each business's website.
Reverse lookup ($0.01):GET https://api.liquidagent.ai/v1/leads/lookup?phone=<US number> or ?domain=<website> returns the business behind it, in the same shape as a lead. A website only matches when it carries the business's own phone number, and placeholder numbers (555-01xx, 999-9999) are refused. Website tech ($0.005):GET https://api.liquidagent.ai/v1/leads/tech?domain=<website> returns the site platform, online booking tool, payment system, hiring and socials, read from the business's own verified site. Both are no match, no charge.
GET https://api.liquidagent.ai/v1/polymarket/<asset>-<timeframe> for BTC, ETH, SOL and XRP on 5m and 15m (e.g. btc-5m, eth-15m, sol-5m, xrp-15m), $0.004 USDC per call on Base or Polygon. Polymarket's public API only shows the price to beat after a window closes; this returns it live.
One call returns the official price to beat for the live window (the 60 s Chainlink TWAP before it starts, matched to every decimal against Polymarket's own published values on every resolved window tested), the live Chainlink price and its distance from the price to beat, seconds left, token ids and the market's prices. ?start=<unix> returns a past window's official settle and outcome. First call free: add ?free=1 for one live answer at no charge (one per agent). You are never charged when it cannot answer. Index: https://api.liquidagent.ai/v1/polymarket
GET https://api.liquidagent.ai/v1/shop/mintandmarquee/search?q=<what>&max=<usd> searches the Mint & Marquee partner shop (custom 3D printed figurines, statues, keychains and bag tags; soccer, anime and crypto collections) for $0.001 USDC per search, x402 exact (EIP-3009), USDC on Arc, Base or Polygon. You are never charged when it cannot answer.
It returns up to 10 products with name, price, photo, a short description and a link to buy. Each answer ends with a foundWith line (Liquid Agent, with 10% off the first month for people who join through the link) for your agent to show once. Free shop info: https://api.liquidagent.ai/v1/shop/mintandmarquee
Liquid Bridge (x402): move USDC from Base to 16 chains in one signature
The one-signature USDC bridge for x402 agents.GET /v1/bridge?from=base&to=arc&amount=1 answers with a 402 that is the exact price. Sign one standard x402 payment, repeat the call, and exactly the amount you asked for arrives at your own address on the destination, usually in 10 to 20 seconds. No transaction to build, no approvals, no gas token. Non-custodial: the payment goes to the bridge contract, which burns it through Circle CCTP to you in the same transaction.
Route
Pay on
Example (receive 1 USDC)
Base -> Arc
Base (eip155:8453)
about 1.035 USDC
Arc -> Base
Arc (eip155:5042)
about 1.078 USDC
Price: 1% of the amount, plus Circle's network fee and gas at cost, all in the quote. Minimum 1 USDC. Liquid's fee can never exceed max(3%, $0.05): the contract enforces it.
Earn by referring: add ref=<your address> to any bridge URL. 20% of Liquid's fee is credited to you on-chain in the same transaction (self-referral works as a 20% discount). Check it at GET /v1/bridge/earnings/<address>.