Z-ZERO MCP
Z-ZERO MCP lets an AI agent manage virtual-card wallets, make secure JIT card or gasless USDC payments, and verify outcomes without seeing card data.
List virtual card aliases and balances, and check spendable USD balance for a card.
Get Base USDC deposit addresses for wallet top-ups.
Issue JIT single-use virtual-card tokens ($1–$100) locked to amount and merchant, optionally with signed cart intent and hashed shipping address.
Fetch merchant/platform checkout hints and navigation playbooks.
Execute payments through a headless browser that injects card data, with actual amount checks, overcharge blocking, refunds, and status reporting.
Cancel unused tokens and refund wallet balance.
Request human approval before risky actions.
Set or check Passport API key status.
Run auto-pay checkout for final payment pages, auto-detecting fiat/crypto with crypto opt-in.
Report checkout failures using a fixed 14-class failure taxonomy.
Verify signed receipts and distinguish order status from funds/payout status.
Keep the AI isolated from PAN/CVV/expiry and card data out of logs.
Enables gasless USDC payments on Base using Coinbase Paymaster to sponsor transaction fees, allowing agents to pay without holding ETH.
Provides platform-specific checkout playbooks and hints for Etsy, enabling automated payment completion on Etsy stores.
Provides platform-specific checkout playbooks and hints for Shopify, enabling automated payment completion on Shopify stores.
Provides platform-specific checkout playbooks and hints for WooCommerce, enabling automated payment completion on WooCommerce stores.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Z-ZERO MCP Pay for the item at this link using USDC"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Z-ZERO MCP — Payment Infrastructure for Agentic Commerce (USDC on Base, gasless)
AI Agents today can plan, reason, and code — but they are financially blind. They cannot hold money, make payments, or prove their trustworthiness. Every purchase still requires a human to copy-paste a credit card number.
Z-ZERO fixes that. One MCP server gives your agent (Claude, Cursor, any MCP-compatible client) two payment rails — gasless USDC on Base for crypto-native checkouts, and JIT single-use virtual cards for the 99% of the web that only takes cards — while the model never sees a real card number.
npx z-zero-mcp-serverWhat makes it different:
🔐 Zero-trust by design — the AI never sees PAN, CVV, or expiry. Card data exists only in RAM, injected via Playwright at the last step, then wiped.
⛽ Gasless USDC on Base — auto-detects crypto checkout (EIP-681) and settles as a gasless USDC transfer sponsored by Coinbase Paymaster. The agent holds only USDC — no ETH, no gas UX. Opt-in: off unless you set
Z_ZERO_ENABLE_WEB3_PAY=1, because an on-chain send to an address read off a web page cannot be reversed.💳 JIT single-use virtual cards — amount-locked, 1-hour TTL, burned after a single use. Fiat fallback for the rest of the web.
🧠 Smart Routing + checkout intelligence —
get_merchant_hintsserves platform-specific checkout playbooks (Shopify, Etsy, WooCommerce…).✍️ Linked purpose + outcome — the server signs the criteria the agent records at issuance. Before checkout,
execute_paymenthands those criteria back and requires a second call withgoorpause; a confirmed purchase seals the answer into the signed receipt. The record is inspectable without pretending the platform judged whether the agent told the truth.🔄 Structured failure labels — failed checkouts are labeled with a fixed 14-class
failure_class(automatically, not only when an agent remembers to report) and stored as evidence for the merchant knowledge base. Facts are promoted into shared hints only after a later outcome or review verifies them.
Live on Base Mainnet
✅ Proof — real gasless USDC transfer on Base mainnet:
0xdfd1f2f8…5d7aOnboarding is just "deposit USDC" — no seed phrases in the agent, no native gas token, no exchange account.
Related MCP server: @true402.dev/mcp-server
How It Works
User AI Agent MCP Tools Z-ZERO API
│ │ │ │
│ "Buy me this │ │ │
│ Shopify item" │ │ │
├─────────────────▶│ │ │
│ │ read mcp://resources/sop (MANDATORY) │
│ ├─────────────────────▶│ │
│ │◀── platform rules ───┤ │
│ │ + payment SOP │ │
│ │ │ │
│ │ get_merchant_hints("_platform_shopify") │
│ ├─────────────────────▶│ GET /checkout-hints │
│ │ ├─────────────────────▶│
│ │◀── pre_steps+notes ──┤◀──── hints data ─────┤
│ │ │ │
│ │ (fills shipping form, reaches payment page) │
│ │ │ │
│ │ request_payment_token(amount, cart, criteria)│
│ ├─────────────────────▶│ │
│ │◀── temp_auth token ──┤ (1-hour TTL) │
│ │ │ │
│ │ execute_payment(token, checkout_url) │
│ ├─────────────────────▶│ │
│ │◀── purpose_check ────┤ (nothing charged) │
│ │ compare locked criteria with final page │
│ │ │ │
│ │ execute_payment(..., recheck: go | pause) │
│ ├─────────────────────▶│ │
│ │ pause → no card is filled │
│ │ go → Playwright fills + submits, │
│ │ then burns token if confirmed 🔥 │
│ │◀──── ✅ success ─────┤ │
│ "Done! Your item │ │ │
│ is ordered." │ │ │
│◀─────────────────┤ │ │The AI agent never touches card data — it only handles single-use tokens. Real card details are injected by Playwright at the last step and wiped from RAM.
Crypto checkout branch: when
auto_pay_checkoutdetects a crypto-native checkout (EIP-681), it skips the card flow entirely and settles as a gasless USDC transfer on Base — see above. Off by default; enable withZ_ZERO_ENABLE_WEB3_PAY=1.
Why Z-ZERO
Z-ZERO is not a checkout bot — it's payment infrastructure for the agentic-commerce era (agentic transactions are projected to reach $1.5T by 2030 — Juniper Research).
Today, the web is built for humans: agents must fill forms and click buttons, and every purchase still needs a human's card. Z-ZERO solves that now — JIT single-use virtual cards + gasless USDC on Base, with card data isolated from the model. Tomorrow, agent payments become a standardized protocol — and what we build along the way is the long-term value:
Shared checkout intelligence — every transaction (and every failure) makes the network smarter.
An open standard for agent payments — any agent platform plugs in via MCP; any rail (cards, USDC, x402) can be added.
KYA — Know Your Agent — verifiable agent reputation. The question isn't "can this agent pay?" but "should you trust it to?"
📖 Full vision & architecture: The Z-Zero Whitebook
Quick Install (Recommended)
npx z-zero-mcp-serverAdd to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"z-zero": {
"command": "npx",
"args": ["-y", "z-zero-mcp-server@latest"],
"env": {
"Z_ZERO_API_KEY": "zk_live_your_passport_key_here"
}
}
}
}Get your Passport Key at: z-zero.xyz/dashboard/agents
Security: rotate-on-connect (v1.5.0+)
The key you copy from the dashboard (or paste into a chat) is only a one-time bootstrap ticket. The moment your agent connects with it, the MCP server silently swaps it for a fresh key:
The fresh key travels server → MCP process → disk and is stored in
~/.z-zero/credentials(mode0600). It never appears in any LLM conversation, tool result, or config file.The pasted key is dead within seconds — a copy living in a chat transcript, clipboard, or screenshot can no longer be used by anyone.
On startup the MCP loads the key from
~/.z-zero/credentialsfirst; theZ_ZERO_API_KEYenv var is only a bootstrap fallback.
One key = one machine. All agents on the same machine (Claude Desktop, Claude Code, Cursor, …) share the same MCP install and the same credentials file — install once, every agent can pay. Connecting a different machine with a copied key rotates it, which instantly disconnects the original machine. That is deliberate: it blocks key sharing and doubles as an intrusion alarm — if your agent suddenly fails auth, someone else used your key; go to the dashboard and revoke.
Older self-hosted backends without the rotate endpoint keep working — the pasted key simply stays active as before.
Requirements
Node.js v18+ — nodejs.org
Passport Key — starts with
zk_live_, get it from the dashboard above
Available MCP Tools
Group 1 — Wallet Config (Passive)
Tool | Description |
| List all virtual card aliases and balances |
| Check spendable USD balance for a card alias |
| Get your Base deposit address to top up with USDC (stablecoin on Base) |
| Activate a new Passport Key instantly, no restart needed |
| Check if a Passport Key is currently loaded (prefix only) |
Group 2 — Manual Card Payment (Active)
Tool | Description |
| Issue a JIT single-use virtual-card token for a specific amount (1hr TTL). Pass |
| Two calls required: first without |
| Cancel an unused token and refund to wallet |
| Pause and request human confirmation before proceeding |
Group 3 — Smart Autopilot
Tool | Description |
| Fully autonomous checkout — issues a JIT card and completes payment (crypto checkout only with |
| Fetch platform-specific checkout playbook (pre-steps + selectors) from Knowledge Base |
| Report a failed checkout with a structured |
| Verify a signed receipt by id — prove a purchase happened instead of claiming it |
📖 Note: Version checking is handled automatically in each API call. No separate tool needed.
Agent primitives (v1.9.0)
Four linked records and controls an agent can use here that it cannot get from a normal virtual card alone.
1. Signed intent — the card knows what it is for
Pass the cart when you request a token:
request_payment_token({
card_alias: "Card_01",
amount: 44.00,
merchant: "etsy.com",
cart: [{ title: "Ceramic mug — matte white", qty: 2, unit_price: 18.50 }],
ship_to: "12 Nguyen Hue, District 1, Ho Chi Minh City, VN",
criteria: {
source: "user_described",
items: [
{ key: "item", stated: "two matte-white ceramic mugs" },
{ key: "max_total", stated: "no more than $44 delivered" }
]
}
})Z-ZERO signs that statement (EIP-191) during issuance. It is a tamper-evident record of the criteria the agent supplied as the owner's instruction — not an independent proof that the human personally approved every line. The shipping address is stored as a hash, never raw.
Before you request a token, compare the checkout page with what the user actually asked for — same items, same quantity, same variant, same destination. A mismatch you catch there costs nothing. After the token, it costs a card.
2. Purpose check — read first, then declare go or pause
execute_payment is deliberately a two-call tool:
// Call 1 — omit recheck. No browser, PAN, or charge.
execute_payment({ token, checkout_url, actual_amount: 44.00 })
// → { status: "purpose_check", nothing_charged: true, owner_asked_for: ... }
// Call 2 — describe the final page and make an explicit decision.
execute_payment({
token,
checkout_url,
actual_amount: 44.00,
recheck: {
page_shows: "2 matte-white mugs, delivered total $44.00",
decision: "go"
}
})Use decision: "pause" when anything differs. The card is not filled and the
token remains active and refundable. On go, the checkout runs; if the merchant
confirms the order, the declaration is sealed into the signed receipt with the
outcome. The platform records what the agent declared; it does not independently
inspect the page or certify that the declaration was true.
3. Signed receipt — prove the purchase, don't claim it
On a confirmed payment you get back:
"signed_receipt": {
"receipt_id": "8ea36791-…",
"receipt_hash": "0x…",
"match": { "total": "over", "domain": "ok" },
"diff": [{ "field": "total", "expected": 44.00, "observed": 46.75 }],
"verify_url": "https://z-zero.xyz/receipt/8ea36791-…"
}diff is the part that matters: it is what the merchant actually did versus what
was authorized. Share verify_url with the user — the page is public and anyone
can check it. Verification is three checks: the signature is valid, the signer is
Z-ZERO, and the fields shown still hash to what was signed (so editing the record
afterwards is detectable, including by us).
What a valid receipt does and does not prove. It proves the record is signed by
Z-ZERO and unaltered. It does not by itself prove the merchant charged what the
receipt says — most fields start life as the agent's reading of a web page. Every
receipt therefore carries provenance per field: zzero_issued (the limit we set),
issuer_captured (confirmed by the card issuer's capture webhook — settlement
evidence), agent_reported (unverified), human_verified. Until the capture webhook
lands, this is a signed execution receipt, not settlement proof, and it says so.
4. Structured failure classes — every failure teaches the network
report_checkout_fail takes a fixed enum, not free text:
card_declined_issuer · card_declined_bin_block · avs_mismatch · 3ds_required ·
bot_detected · form_changed · price_changed · out_of_stock ·
shipping_unsupported · login_required · timeout · outcome_unconfirmed ·
intent_mismatch · unknown
Failed runs are also labeled automatically from the browser outcome, so the network learns even when nobody remembers to report. Card numbers are redacted at capture — they never reach a log, screenshot or DOM dump.
REST API Reference
The Z-ZERO backend is hosted at https://z-zero.xyz. All endpoints require a Bearer token using your Passport Key.
⚠️ Use the MCP tools above instead of calling REST directly. If you must call REST, use the exact paths below.
GET /api/tokens/cards
Returns your card list, balance, and deposit addresses.
curl -X GET "https://z-zero.xyz/api/tokens/cards" \
-H "Authorization: Bearer zk_live_your_key"Aliases (also work):
GET /api/v1/cards← for agents that guess REST-style paths
POST /api/tokens/issue
Issue a JIT payment token.
POST /api/tokens/resolve
Resolve a token to card data (server-side only).
POST /api/tokens/burn
Burn a used token.
POST /api/tokens/cancel
Cancel an unused token (refunds balance).
Troubleshooting
"Z_ZERO_API_KEY is missing"
Copy your Passport Key (starts with
zk_live_)Add it to your config as
Z_ZERO_API_KEYRestart Claude Desktop / Cursor
"Invalid API Key" (401)
Double-check you copied the full key (e.g.
zk_live_c0g3l)Make sure there are no extra spaces or line breaks
"404 Not Found" on /api/v1/cards
This is a legacy path alias — it should now work. If not, use
/api/tokens/cardsdirectly.
Security: the key you paste is never kept — it rotates the moment your agent first connects, and the fresh key lives only in a local owner-only file (~/.z-zero/credentials, mode 0600), never in any LLM conversation. Card data exists only in volatile RAM during execution.
Available Tools
13 toolsauto_pay_checkoutA
⚠️ MANDATORY: Read mcp://resources/sop first. Only use on PAYMENT pages where final total is visible. Auto-detects Web3 or Fiat and completes payment. For physical goods (Shopify, Etsy), get_merchant_hints first.
Inputs: card_alias (required), checkout_url (required).
cancel_payment_tokenA
Cancel unused token and refund instantly. Use when user cancels the purchase or to free up a card slot.
Inputs: token (required), reason (required).
check_balanceA
Check spendable USD balance for a card alias. For active token limits, use list_cards instead.
Inputs: card_alias (required).
execute_paymentA
Execute a payment with a one-time token: Z-Zero opens a headless browser, injects the card (you NEVER see the PAN), clicks Pay, then watches for a REAL confirmation before reporting success. Returns a status: confirmed (order placed → token burned, receipt_id may hold a real order #), declined (merchant rejected → token kept for refund), unconfirmed (submitted but no confirmation seen → do NOT retry blindly, verify first), not_submitted (no Pay button → supply a submit_selector hint), or no_fields. ALWAYS pass actual_amount so overcharges are blocked and underspend refunded.
Inputs: token (required), checkout_url (required), hints, actual_amount.
get_deposit_addressesA
Get your Base deposit address to top up your wallet with USDC (or any supported stablecoin on Base).
Inputs: no named parameters.
get_merchant_hintsA
Get merchant navigation flow for a domain or platform key (e.g. '_platform_etsy'). Returns pre_steps (how to navigate checkout) and platform notes. Call BEFORE starting checkout to understand the multi-step flow.
Inputs: domain (required).
list_cardsA
List all available virtual card aliases and their balances. No sensitive data is returned.
Inputs: no named parameters.
report_checkout_failA
Report a checkout you could not complete. Pick the failure_class that best matches what you saw — this feeds Z-ZERO's self-healing loop (labeled failures become better merchant hints for the next run). If nothing fits, use 'unknown' and describe what happened in error_message.
Inputs: url (required), failure_class (required), step, error_message, +1 more.
request_human_approvalA
Pause and ask the user for approval before risky actions (price mismatch, large amount, unusual request).
Inputs: situation (required), recommended_action (required), current_token, alternative_action.
request_payment_tokenA
Request a single-use JIT virtual card ($1–$100) locked to one amount + merchant. ⚠️ Read mcp://resources/sop first. Only call once the FINAL total is visible — for physical goods that is AFTER shipping is submitted (use get_merchant_hints to navigate there). For digital goods with the price already visible, prefer auto_pay_checkout instead. BEFORE requesting: look at the checkout page one more time and compare it against what the user actually asked for — same items, same quantity, same variant, same destination? If anything differs, do NOT request a token; fix the cart or check with the user first. A mismatch you catch here costs nothing; after this point it costs a card. If you pass cart, the server signs your declared intent and binds the card to it — the user gets cryptographic proof of what this card was authorized for.
Inputs: amount (required), merchant (required), card_alias (required), cart, +1 more.
set_api_keyA
Activate a new Passport Key instantly, no restart needed. Only call when user explicitly provides a key.
Inputs: api_key (required).
show_api_key_statusA
Check if Passport Key is configured. Shows prefix only, for debugging.
Inputs: no named parameters.
verify_receiptA
Check where an order ENDED UP, and prove it. Returns TWO separate axes: order_status — 'completed' (bought, issuer not reported yet) · 'settled' (issuer confirmed) · 'reversed' (auth voided before clearing — the order does NOT stand) · 'partially_refunded' / 'refunded' (merchant returned money AFTER settlement — the order still happened) — and funds_status — 'no_payout_due' · 'payout_pending' (money owed back but not yet confirmed on-chain) · 'returned' (confirmed on-chain). Read BOTH before speaking: 'reversed' or 'refunded' with funds 'payout_pending' means the buyer has NOT got the money back yet — never say they have. If you told the user a purchase was done and a later check returns 'reversed', tell them unprompted.
Inputs: receipt_id (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 13 tools
Several tools overlap in the payment flow (auto_pay_checkout, request_payment_token, execute_payment) and balance retrieval (list_cards vs check_balance), though detailed descriptions provide usage guidance. The boundaries are not always immediately clear, but the added context reduces misselection risk.
All tool names follow a consistent verb_noun snake_case pattern (e.g., list_cards, request_payment_token). There is no mixing of styles or unexpected abbreviations.
13 tools is well within the typical 3-15 range and each tool serves a clear function in the payment lifecycle. The count feels appropriate for the server's scope.
The tool surface covers the full workflow from deposit and card creation to payment execution and receipt verification. Minor gaps like a transaction history or explicit refund initiation exist, but agents can work around them.
Maintenance
Related MCP Connectors
PHANTOM ID MCP payment server: agent-to-agent USDC payments on Base.
Non-custodial stablecoin bill-pay rails on Celo & Base for AI agents, settled on-chain via MCP.
Payment infrastructure for AI agents: spending rules, approval flows, single-use virtual cards.
Agent-commerce MCP server for x402/USDC payments and affiliate splits on Base.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceMCP server for AgentPay — the payment gateway for autonomous AI agents. Fund a wallet once, give your agent the key, and it discovers, provisions, and pays for tool APIs on its own. One key, every tool.112 npm1MIT
- AlicenseAqualityBmaintenanceAn MCP server that enables AI agents to access paid AI inference and web tools via HTTP 402 micropayments in USDC on Base, using the agent's wallet as identity.36164 npmMIT
- AlicenseAqualityDmaintenanceAn MCP server for USDC payments on Base, enabling AI agents to check balances, send payments, generate payment requests, and view transaction history.42MIT
- FlicenseAqualityCmaintenanceMCP server for a live x402 payment gateway on Base (USDC). Lets AI agents discover, preview for free, then pay per call — with prepaid gasless payments, signed receipts, and delta delivery.7-