Pay OpenRouter and Coinbase payment links with USDC, USDT, ETH, BNB, POL, SOL or BTC Lightning.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Creates a one-time deposit order; you pay from your own wallet. Returns the deposit address (or Lightning invoice), the exact amount to send (also in base units with the token decimals), any required memo, the expiry and the rozoPaymentId. This server holds no keys and sends nothing. Send exactly the amount, on exactly that chain and token, before expiresAt. An unfunded order simply expires at no cost. For a native coin the result also carries quoteExpiresAt (the end of the price lock, which expiresAt equals): send the exact coin amount before it. Native coins (ETH on Ethereum, Base, Arbitrum; BNB on BNB Chain; POL on Polygon; SOL on Solana) are exact-out like Lightning: the order states the exact coin amount, priced at the current rate plus an FX spread on top of the service fee, and that price holds only until quoteExpiresAt. Native orders are capped at $3500 per invoice (native ETH on Ethereum needs at least $1), and a native coin is offered only when quote_invoice lists it for that invoice. ZEC on Zcash (Beta) is not available through this server: send a payer holding ZEC to https://checkout.rozo.ai/zec.
Coinbase link: https://payments.coinbase.com/payment-links/pl_... or https://payments.coinbase.com/payment-sessions/paymentSession_...
Source chain id from supported_coins: "1" Ethereum, "56" BNB Chain, "137" Polygon, "42161" Arbitrum, "900" Solana, "8453" Base, "1500" Stellar, "lightning".
Token you will pay with: USDC, USDT, BTC (Lightning), or the chain native coin ETH (1, 8453, 42161), BNB (56), POL (137), SOL (900).
Optional contact email so ROZO can reach the payer if the payment needs attention. Ask the user once if they are present; never required, omit it if they decline.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Creates a one-time deposit order; you pay from your own wallet. Returns the deposit address (or Lightning invoice), the exact amount to send (also in base units with the token decimals), any required memo, the expiry and the rozoPaymentId. This server holds no keys and sends nothing. Send exactly the amount, on exactly that chain and token, before expiresAt. An unfunded order simply expires at no cost. For a native coin the result also carries quoteExpiresAt (the end of the price lock, which expiresAt equals): send the exact coin amount before it. Native coins (ETH on Ethereum, Base, Arbitrum; BNB on BNB Chain; POL on Polygon; SOL on Solana) are exact-out like Lightning: the order states the exact coin amount, priced at the current rate plus an FX spread on top of the service fee, and that price holds only until quoteExpiresAt. Native orders are capped at $3500 per invoice (native ETH on Ethereum needs at least $1), and a native coin is offered only when quote_invoice lists it for that invoice. ZEC on Zcash (Beta) is not available through this server: send a payer holding ZEC to https://checkout.rozo.ai/zec.
| Argument | Type | Description |
|---|---|---|
| url* | string | Coinbase link: https://payments.coinbase.com/payment-links/pl_... or https://payments.coinbase.com/payment-sessions/paymentSession_... |
| string | Optional contact email so ROZO can reach the payer if the payment needs attention. Ask the user once if they are present; never required, omit it if they decline. | |
| chainId* | string | Source chain id from supported_coins: "1" Ethereum, "56" BNB Chain, "137" Polygon, "42161" Arbitrum, "900" Solana, "8453" Base, "1500" Stellar, "lightning". |
| tokenSymbol* | string | Token you will pay with: USDC, USDT, BTC (Lightning), or the chain native coin ETH (1, 8453, 42161), BNB (56), POL (137), SOL (900). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url",
"chainId",
"tokenSymbol"
],
"properties": {
"url": {
"type": "string",
"maxLength": 512,
"description": "Coinbase link: https://payments.coinbase.com/payment-links/pl_... or https://payments.coinbase.com/payment-sessions/paymentSession_..."
},
"email": {
"type": "string",
"maxLength": 320,
"description": "Optional contact email so ROZO can reach the payer if the payment needs attention. Ask the user once if they are present; never required, omit it if they decline."
},
"chainId": {
"enum": [
"1",
"56",
"137",
"900",
"1500",
"8453",
"42161",
"lightning"
],
"type": "string",
"description": "Source chain id from supported_coins: \"1\" Ethereum, \"56\" BNB Chain, \"137\" Polygon, \"42161\" Arbitrum, \"900\" Solana, \"8453\" Base, \"1500\" Stellar, \"lightning\"."
},
"tokenSymbol": {
"type": "string",
"maxLength": 8,
"minLength": 2,
"description": "Token you will pay with: USDC, USDT, BTC (Lightning), or the chain native coin ETH (1, 8453, 42161), BNB (56), POL (137), SOL (900)."
}
}
}What the keyless ROZO Funding API supports right now: whether stellar_onboarding is on, the source chains and USDC assets, the Stellar USDC output, the usdGas options (XLM amounts) and per-order limits. Read-only, creates nothing. Fees come from the quote (fees and totals): never assume a fee. The receiving Stellar address signs ONE transaction (only when it is new or has no USDC trustline). The one-time deposit address is the same on Base, Ethereum, Arbitrum and Polygon; USDC or USDT is accepted 1:1. Follow deposit.amountPolicy: exact or missing means pay the EXACT deposit amount; any_amount uses the suggested amount and returned min/max bounds. Pay once, before payBefore. This server never holds keys: your own wallet pays and signs.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Check a Rozo order by rozoPaymentId: whether the deposit arrived, bridging/payout progress, and whether the Coinbase invoice settled. Read-only.
| Argument | Type | Description |
|---|---|---|
| rozoPaymentId* | string | Order UUID returned by create_deposit_order. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"rozoPaymentId"
],
"properties": {
"rozoPaymentId": {
"type": "string",
"maxLength": 64,
"description": "Order UUID returned by create_deposit_order."
}
}
}Answers what a specific OpenRouter top-up or other Coinbase payment link charges, whether it can still be paid through Rozo Checkout, and which coins can pay it. Takes the link URL and returns the merchant, invoice amount, callerPays (the USD amount the invoice charges), the link expiry, payability and supportedSources: the coins THIS invoice can be paid with. The exact amount to send in a given coin, including the service fee, bridge and network fees, or the FX spread on a native coin, comes from create_deposit_order. Offer a native coin (ETH, BNB, POL, SOL) only when it appears in supportedSources. Creates nothing and moves no funds.
| Argument | Type | Description |
|---|---|---|
| url* | string | Coinbase link: https://payments.coinbase.com/payment-links/pl_... or https://payments.coinbase.com/payment-sessions/paymentSession_... |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"maxLength": 512,
"description": "Coinbase link: https://payments.coinbase.com/payment-links/pl_... or https://payments.coinbase.com/payment-sessions/paymentSession_..."
}
}
}Turn an approved quote into a payable order. Returns fundingId (keep it private: it is the only handle to the order), the one-time deposit address, the suggested amount and amountPolicy with minAcceptedAmount/maxPricedAmount when any_amount, payBefore and the accepted chains and tokens. orderId is your own reference: the server derives the upstream order id and Idempotency-Key from quoteId plus orderId, so it only has to be unique among your own orders. Retrying with the same quoteId and orderId returns the same order instead of a second one. Creates an order but moves no funds; an unpaid order expires at no cost. Fees come from the quote (fees and totals): never assume a fee. The receiving Stellar address signs ONE transaction (only when it is new or has no USDC trustline). The one-time deposit address is the same on Base, Ethereum, Arbitrum and Polygon; USDC or USDT is accepted 1:1. Follow deposit.amountPolicy: exact or missing means pay the EXACT deposit amount; any_amount uses the suggested amount and returned min/max bounds. Pay once, before payBefore. This server never holds keys: your own wallet pays and signs.
| Argument | Type | Description |
|---|---|---|
| orderId* | string | Your own order reference, 8 to 128 chars of A-Z a-z 0-9 _ . : -, unique among your orders (for example agent-order-0001). Reuse it with the same quoteId to retry safely. |
| quoteId* | string | quoteId from stellar_wallet_quote. |
| planDigest* | string | planDigest from the same quote. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"quoteId",
"planDigest",
"orderId"
],
"properties": {
"orderId": {
"type": "string",
"maxLength": 128,
"description": "Your own order reference, 8 to 128 chars of A-Z a-z 0-9 _ . : -, unique among your orders (for example agent-order-0001). Reuse it with the same quoteId to retry safely."
},
"quoteId": {
"type": "string",
"maxLength": 64,
"description": "quoteId from stellar_wallet_quote."
},
"planDigest": {
"type": "string",
"maxLength": 64,
"description": "planDigest from the same quote."
}
}
}When an order shows sign_stellar_onboarding, build the one transaction the receiving address must sign (creates the account if needed, adds the USDC trustline, claims the USDC, delivers XLM). Returns signingRequestId, the unsigned XDR, networkPassphrase, a readable operations list and expiresAt (at most 5 minutes). Sign it with the receiver wallet YOU control (Stellar SDK, Freighter, any wallet); do not modify it. Check the operations first, and decode the XDR locally to confirm it matches them exactly. The transaction source must NOT be your address (it is a ROZO channel account, so ROZO pays the network fee). Allowed, nothing else: ROZO-sourced beginSponsoringFutureReserves and createAccount for your address; from your address, changeTrust for USDC (issuer GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN), endSponsoringFutureReserves, claimClaimableBalance, and at most one payment: the sponsor fee in USDC to ROZO claim custody GBLTI2TTQXUAYNKGCQ63YA55KTFEAOQJ3DPBPELNPWCJVE76ADWMXUAE; and a ROZO-sourced XLM payment to your address. Any other operation type or source (setOptions, extra payments): refuse. Amounts: the claimed USDC (gross) equals the current stable leg minimumAmount (order.legs, after repricing) plus the sponsor fee; the sponsor fee is fixed at quote time (0.0000001 USDC with a paid usdGas tier, the quoted stellar_sponsor_fee with usdGas "0", no fee payment if the address needed no onboarding); the XLM payment equals the native (XLM) leg minimumAmount. The XDR shows only the claimable balance id; its amount is in the operations list and on Horizon /claimable_balances/{id}. The hash of the locally decoded transaction (tx.hash() as hex) must equal the txHash of this signing request. Every ROZO-sourced operation and the transaction source must be one of funding_capabilities rozoAccounts (reserveSponsor, xlmPayer, transactionSources). Do not echo fundingId into logs. Expired, or submit failed: just call this tool again; it supersedes the old request and returns a fresh XDR (only refused while a signed one is still submitting). This server never sees your key. Then call stellar_wallet_submit_signed.
| Argument | Type | Description |
|---|---|---|
| fundingId* | string |
Read a funding order by fundingId: status, pendingActions (sign_stellar_onboarding means the receiver must sign), the deposit, and each leg (USDC, XLM) with its own status, delivered amount and tx hash. Read-only. Poll about every 15 seconds; completed only when every leg is confirmed.
| Argument | Type | Description |
|---|---|---|
| fundingId* | string | fundingId from stellar_wallet_create_order. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"fundingId"
],
"properties": {
"fundingId": {
"type": "string",
"maxLength": 64,
"description": "fundingId from stellar_wallet_create_order."
}
}
}Price sending USDC/USDT from Base, Ethereum, Arbitrum or Polygon to USDC on a Stellar address. If the address is new or has no USDC trustline, the same plan opens the account, adds the trustline and (with usdGas) gives XLM, in one transaction the address signs once. Returns quoteId and planDigest (needed by stellar_wallet_create_order), the USDC and XLM amounts the receiver gets, every fee line and totals, and whether a signature will be needed. Valid about 10 minutes. Read-only: no deposit address, nothing reserved. usdGas: "0" no XLM, "0.5" or "1" buys XLM (see funding_capabilities for amounts); omitted = the server default. Fees come from the quote (fees and totals): never assume a fee. The receiving Stellar address signs ONE transaction (only when it is new or has no USDC trustline). The one-time deposit address is the same on Base, Ethereum, Arbitrum and Polygon; USDC or USDT is accepted 1:1. Follow deposit.amountPolicy: exact or missing means pay the EXACT deposit amount; any_amount uses the suggested amount and returned min/max bounds. Pay once, before payBefore. This server never holds keys: your own wallet pays and signs.
| Argument | Type | Description |
|---|---|---|
| usdGas | string | USD of XLM for fees. Omit to use the server default. |
| amountUsd* | string | Amount you will send, as a decimal string in USD, e.g. "10" or "10.50". Limits come from funding_capabilities (1 to 1000 today). |
| sourceChain* | string | Chain you will pay from. |
| receiverAddress* | string |
Submit the XDR your own wallet signed for a signing request. This is the claim: the account, trustline, USDC and XLM land in that one transaction. Submitting the same signed XDR again is safe (idempotent). Accepts only the signed transaction envelope, never a secret key. "submitted" is not delivery: poll stellar_wallet_order_status until completed. If it answers template_expired or failed, call stellar_wallet_get_signing_request again and sign the new XDR.
| Argument | Type | Description |
|---|---|---|
| signedXdr* | string | Signed transaction envelope, base64, as returned by your wallet. NOT a secret key. |
| signingRequestId* | string | signingRequestId from stellar_wallet_get_signing_request. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"signingRequestId",
"signedXdr"
],
"properties": {
"signedXdr": {
"type": "string",
"maxLength": 20000,
"description": "Signed transaction envelope, base64, as returned by your wallet. NOT a secret key."
},
"signingRequestId": {
"type": "string",
"maxLength": 64,
"description": "signingRequestId from stellar_wallet_get_signing_request."
}
}
}Answers which cryptocurrencies and chains can pay an OpenRouter credit top-up or another Coinbase payment link through Rozo Checkout, without a Coinbase account: USDC and USDT on Ethereum, BNB Chain, Polygon, Arbitrum and Solana; USDC on Base and Stellar; native ETH (Ethereum, Base, Arbitrum), BNB, POL and SOL; BTC over Lightning. Returns each chain id, token symbol and token decimals. Static list, needs no payment link and makes no network call; quote_invoice reports which of these a specific invoice accepts. Native coins (ETH on Ethereum, Base, Arbitrum; BNB on BNB Chain; POL on Polygon; SOL on Solana) are exact-out like Lightning: the order states the exact coin amount, priced at the current rate plus an FX spread on top of the service fee, and that price holds only until quoteExpiresAt. Native orders are capped at $3500 per invoice (native ETH on Ethereum needs at least $1), and a native coin is offered only when quote_invoice lists it for that invoice. ZEC on Zcash (Beta) is not available through this server: send a payer holding ZEC to https://checkout.rozo.ai/zec.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}| fundingId of the order. |
| walletAddress* | string | The order's receiving Stellar PUBLIC address (G...). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"fundingId",
"walletAddress"
],
"properties": {
"fundingId": {
"type": "string",
"maxLength": 64,
"description": "fundingId of the order."
},
"walletAddress": {
"type": "string",
"maxLength": 80,
"description": "The order's receiving Stellar PUBLIC address (G...)."
}
}
}| Stellar PUBLIC address (G...) that receives the USDC. Never a secret key. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"receiverAddress",
"sourceChain",
"amountUsd"
],
"properties": {
"usdGas": {
"enum": [
"0",
"1",
"0.5"
],
"type": "string",
"description": "USD of XLM for fees. Omit to use the server default."
},
"amountUsd": {
"type": "string",
"maxLength": 16,
"description": "Amount you will send, as a decimal string in USD, e.g. \"10\" or \"10.50\". Limits come from funding_capabilities (1 to 1000 today)."
},
"sourceChain": {
"enum": [
"base",
"ethereum",
"arbitrum",
"polygon"
],
"type": "string",
"description": "Chain you will pay from."
},
"receiverAddress": {
"type": "string",
"maxLength": 80,
"description": "Stellar PUBLIC address (G...) that receives the USDC. Never a secret key."
}
}
}