rozo-checkout-mcp
MCP serverDev toolsPay OpenRouter top-ups with USDC/USDT on 6 chains or BTC Lightning. Never holds funds.
Available today. Use it from your connected AI after setup.
No other account needed.
Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
Then ask your AI: use the supported coins tool from rozo-checkout-mcp
Install rozo-checkout-mcp
The server’s own address, for the clients that take one directly. Or connect ahel once and every client you use reads it from one address, with the account kept on ahel rather than in each client’s config.
Claude Code
claude mcp add --transport http --scope user rozo-checkout-mcp 'https://mcp.rozo.ai/mcp?src=registry'Run it once in your project, then open /mcp to approve any sign-in the server asks for.
Claude Desktop
https://mcp.rozo.ai/mcp?src=registryAdd a custom connector in Settings, paste this address, and approve the sign-in.
Cursor
cursor://anysphere.cursor-deeplink/mcp/install?name=rozo-checkout-mcp&config=eyJ1cmwiOiJodHRwczovL21jcC5yb3pvLmFpL21jcD9zcmM9cmVnaXN0cnkifQ==Open the link and Cursor adds the server at that address.
ChatGPT
https://mcp.rozo.ai/mcp?src=registryIn Settings, enable Developer mode, create an MCP app, and paste this address. Your plan and workspace must allow custom apps.
Codex
codex mcp add rozo-checkout-mcp --url 'https://mcp.rozo.ai/mcp?src=registry'Run it once, then sign in with codex mcp login rozo-checkout-mcp if the server asks for an account.
From the project's README
As published by rozoai/rozo-checkout-mcp in README.md.
A small remote MCP server that lets an AI agent help a user pay an
OpenRouter top-up (a Coinbase payment link, payments.coinbase.com/payment-links/pl_* or
payment-sessions/paymentSession_*) with the coin they already hold:
- USDC or USDT on Solana, BNB Chain, Ethereum, Polygon
- USDC on Base or Stellar
- BTC over Lightning
It runs as a Cloudflare Worker and speaks MCP streamable HTTP at /mcp.
It never custodies funds
This server holds no private keys, signs nothing and sends nothing. It only:
- reads a quote for the Coinbase link,
- asks Rozo (through MPP Router) for a one-time deposit order, and
- reads order status.
The user pays from their own wallet. An order that is never funded expires and costs nothing. There are no secrets, no auth and no stored state; each request is handled statelessly.
Tools
| Tool | Input | What it does |
|---|---|---|
supported_coins | none | Static list of supported chains and tokens (mirrors the @rozoai/checkout CLI). |
quote_invoice | { url } | Merchant, invoice amount, what the payer pays, link expiry, and whether the link is still payable. Creates nothing. |
create_deposit_order | { url, chainId, tokenSymbol } | Creates a one-time deposit order; you pay from your own wallet. Returns the deposit address (or BOLT11 invoice for Lightning), the exact amount, any required memo, expiresAt and rozoPaymentId. |
payment_status | { rozoPaymentId } | Pay-in, bridging/payout progress, and whether the Coinbase invoice settled. |
create_deposit_order applies the same guards as the CLI before it returns a deposit address:
link payability (not used, not expired, v3 session still CREATED), an existing order must be
payment_unpaid with no pay-in and the same coin, the address must not be on the
compromised-address list, and at least 10 minutes must remain on both the order and the link.
Upstream endpoints (identical request shapes to the CLI, all keyless):
POST https://apiserver.mpprouter.dev/v1/services/rozo-agent-api/quote-invoicePOST https://apiserver.mpprouter.dev/v1/services/rozo-agent-api/create-invoiceGET https://apiserver.mpprouter.dev/v1/services/rozo-agent-api/invoice-status?rozo_payment_id=...GET https://intentapiv4.rozo.ai/functions/v1/payment-api/payments/<uuid>(read-only)
Channel attribution: ?src=
Every create-invoice call carries
{ "client": "rozo-checkout-mcp/<version>",
"attribution": { "client": "rozo-checkout-mcp/<version>", "utm_source": "<src>" } }
<src> comes from the src query parameter of the MCP URL the client connected to. It is
lowercased, limited to [a-z0-9._-] and 100 characters, and defaults to mcp. Give each channel
its own URL so orders can be split by channel:
| Channel | URL |
|---|---|
| Official MCP registry | https://mcp.rozo.ai/mcp?src=registry |
| Docs / README | https://mcp.rozo.ai/mcp?src=docs |
| A directory or partner | https://mcp.rozo.ai/mcp?src=<name> |
Connect
Claude Desktop / Claude.ai
Settings, Connectors, Add custom connector, URL https://mcp.rozo.ai/mcp?src=claude.
For a local claude_desktop_config.json through the mcp-remote bridge:
{
"mcpServers": {
"rozo-checkout": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.rozo.ai/mcp?src=claude-desktop"]
}
}
}
Claude Code
claude mcp add --transport http rozo-checkout "https://mcp.rozo.ai/mcp?src=claude-code"
Cursor
~/.cursor/mcp.json:
{ "mcpServers": { "rozo-checkout": { "url": "https://mcp.rozo.ai/mcp?src=cursor" } } }
MCP Inspector
npx @modelcontextprotocol/inspector
# Transport: Streamable HTTP, URL: http://127.0.0.1:8787/mcp?src=inspector (local) or the prod URL
Develop
npm install
npm test # vitest
npm run typecheck
npx wrangler dev # http://127.0.0.1:8787/healthz and /mcp
Raw handshake with curl:
curl -s -X POST 'http://127.0.0.1:8787/mcp?src=dev' \
-H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"curl","version":"0"}}}'
curl -s -X POST 'http://127.0.0.1:8787/mcp?src=dev' \
-H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' \
-H 'MCP-Protocol-Version: 2025-06-18' \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'
Deploy
Deployment and the mcp.rozo.ai custom domain need owner approval and are not automated here.
wrangler.toml pins the Cloudflare account that owns the rozo.ai zone and keeps the custom
domain route commented out until then.
MCP registry
server.json describes this server for the official MCP registry as io.github.RozoAI/checkout, with the
remote https://mcp.rozo.ai/mcp?src=registry. Publishing under the ai.rozo namespace requires
proving control of rozo.ai (DNS or HTTP verification with mcp-publisher).
Tools it offers (4)
What this server listed when ahel dialed its public endpoint in Oct 2026, with no key and no account of yours. The names are the server’s own.
supported_coinsquote_invoicecreate_deposit_orderpayment_status
Advanced
- Delivery
- checkout MCP server → your ahel connector (mcp.ahel.ai) → your AI.
- Item type
- mcp-server
- Key
io-github-rozoai-checkout- Source
- github.com/rozoai/rozo-checkout-mcp
- Hosted endpoint
https://mcp.rozo.ai/mcp?src=registry
github.com/rozoai/rozo-checkout-mcp
More in Dev tools
MCP server · adarsh4052
More in Dev tools0nMCP
MCP server · 0nork
More in Dev toolsairtreks-mcp
MCP server · airtreks
More in Dev toolssportwizzard
MCP server · adamruehle
More in Dev toolsdraw.io
MCP server · jgraph
More in Dev toolsbilig-workpaper
MCP server · proompteng
More in Dev tools