Voidly Pay vs Stripe Agent Toolkit
Honest, code-level comparison. Both ship MCP servers, framework adapters, and HTTP 402 facilitators. The architectures point in different directions: Stripe optimizes for agents operating their human merchant's Stripe account; Voidly Pay optimizes for agent-to-agent settlement with no human intermediary. Pick one or use both — they compose cleanly.
Updated 2026-05-01. Stripe Sessions 2026 ran Apr 28-30 with 288 launches; this page reflects what shipped through that event.
Feature matrix
| Dimension | Voidly Pay | Stripe Agent Toolkit |
|---|---|---|
| Core abstraction | Agent ↔ agent. Every wallet is a peer. | Customer ↔ merchant. Agent operates a Stripe account. |
| Identity primitive | did:voidly:{base58} — Ed25519 keypair, client-side, no KYC | Restricted API Key (rk_…) on a Stripe account; merchant must KYC |
| Settlement medium | Stage-1 credits or USDC on Base mainnet (Sourcify-verified vault) | Cards / ACH / USDC on Base, Solana, Tempo (x402 preview, US merchants only) |
| HTTP 402 facilitator | Native — /v1/pay/x402/{quote,verify,cancel} + universal proxy | Native (since Feb 2026, preview API) — settles to Stripe USD balance |
| MCP server | @voidly/pay-mcp — 42 tools (marketplace + utilities + agent-fetch + payments), npx-installable, in Anthropic MCP Registry | mcp.stripe.com (hosted, OAuth) + @stripe/mcp (npx) — 25 tools |
| Paid-tool middleware | registerPaidTool (v0.2.0+) — wraps any MCP tool with x402 paywall | registerPaidTool — wraps any MCP tool with Stripe Checkout paywall |
| Per-call settlement fee | 0% — direct DID → DID transfer, no merchant of record | 2.9% + 30¢ on cards. x402 path: facilitator fee + on-chain gas. |
| Min charge | $0.005 | Card min ≈ $0.50 (fees swallow micro-amounts); x402 sub-cent OK |
| Faucet / starter credits | 10 credits one-shot per DID, no install | Test mode (sk_test_…) only. No live free tier. |
| Public proof of reserves | /pay/proof — vault USDC vs Σ Stage-2 credits, refresh every 15s | Private merchant Dashboard only |
| Atomicity invariants | 9-check settlement rule + idempotency keys + atomic batch | Idempotency keys; full atomicity invariants not published |
| Open source | SDKs MIT (TS, Py, MCP, CLI, scaffolder, adapters); Worker private | Toolkit MIT; Stripe core proprietary |
| Framework adapters | LangChain, CrewAI, Vercel AI SDK; Express/Hono/FastAPI/Flask middleware | LangChain, CrewAI, Vercel AI SDK, OpenAI Agents, AWS Strands, Cloudflare Workers |
| Latency (settlement) | <200ms (Worker D1 atomic batch) | Cards: seconds. x402: ~2s on-chain. Card payouts: T+2. |
| Browser-only onboarding | Yes — /pay/claim mints DID + faucet, zero install | No — requires Stripe account + KYC + bank |
| npm weekly downloads (latest) | @voidly/pay-mcp ~hundreds (early) | @stripe/agent-toolkit ≈ 41,217; PyPI ≈ 250k |
registerPaidTool — same pattern, two settlement layers
Both toolkits ship a registerPaidTool that wraps any MCP tool with a paywall. First call returns a 402-shaped response with quote details; second call (with the quote ID passed back) verifies + runs the tool. The interface is nearly identical — the difference is what backs the quote.
Stripe (settles to your Stripe USD balance)
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { registerPaidTool } from "@stripe/agent-toolkit/modelcontextprotocol";
import Stripe from "stripe";
const stripe = new Stripe(process.env.STRIPE_API_KEY!);
const server = new Server({ name: "paid", version: "1" }, { capabilities: { tools: {} } });
registerPaidTool(server, "summarize", "Summarize a PDF.", schema, handler, {
stripe,
priceId: "price_…", // a Stripe Price object
paymentReason: "PDF summary",
successUrl: "https://you.example/done",
meterEvent: "summarize_call", // optional usage-metered billing
});
// First call → returns Stripe Checkout URL.
// Server polls checkout.sessions.list until completed_at appears.
// Second call → unlocked for ~30 days based on session.Voidly Pay (settles in credits or USDC on Base, no merchant-of-record)
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { VoidlyPay } from "@voidly/pay";
import { registerPaidTool } from "@voidly/pay-mcp";
const pay = await VoidlyPay.create();
const server = new Server({ name: "paid", version: "1" }, { capabilities: { tools: {} } });
registerPaidTool(server, {
name: "summarize_pdf",
description: "Summarize a PDF.",
inputSchema: { type: "object", properties: { url: { type: "string" } }, required: ["url"] },
pay,
priceCredits: 0.01, // $0.01/call in Stage 2
reason: "PDF summarization (Llama 3.1 8B)",
handler: async ({ url }) => ({ summary: await summarizePdf(url) }),
});
// First call → returns { status: "payment_required", quote_id, pay_url }.
// Caller pays via /v1/pay/x402/quote (any x402 client works).
// Second call (with x_voidly_quote: "<id>") → on-chain verify, run handler.Key difference: Stripe's version polls checkout.sessions.list for ~30s to detect payment, then unlocks session-keyed access for ~30 days. Voidly Pay's version verifies the quote cryptographically on the next call — single round-trip, no polling, no session state on the server. The provider DID earns immediately and atomically.
Where Stripe is ahead
- Hosted remote MCP at scale (mcp.stripe.com with OAuth).
- DXT manifest + Gemini CLI extension + Cursor/Claude/Kiro plugins for one-click install.
- Universal token billing via @stripe/ai-sdk + @stripe/token-meter (proxy LLM calls through llm.stripe.com).
- Connected Accounts: one toolkit instance manages many sub-merchants via Stripe-Account header.
- Distribution: 250k+ weekly PyPI downloads, listed in every AI agent framework cookbook.
- Card path: needed if a real human ever hands over a credit card.
- Co-author of MPP (Machine Payments Protocol) with Tempo — Visa, Mastercard, OpenAI, Anthropic, DoorDash, Shopify all aboard.
If you have a Stripe account, your customers pay with cards, you need to onboard human merchants, or you want a 250k-weekly-download install base on day one — Stripe is the right pick. Their agent-toolkit is well-engineered, MIT-licensed, and battle-tested.
Where Voidly Pay is ahead
- Agent-as-merchant. Provider DID earns directly without filing for a Stripe account.
- Universal x402 reverse proxy: paywall ANY HTTPS URL with one query parameter, no SDK on the seller side.
- Public proof-of-reserves dashboard with on-chain Sourcify verification — independently auditable.
- No US-only restriction. No KYC. No 2-day card payout schedule.
- Sub-cent settlements. $0.005 min charge. Cards can't go below ~$0.50 cleanly.
- Browser-only onboarding via /pay/claim. Zero install for the agent.
- 9-check atomicity rule + signed envelopes + per-DID idempotency keys, all documented.
- Programmatic SEO & ambient discovery: every free-tier API response leaks _voidly_pay hints to AI crawlers.
- CC BY 4.0 data + MIT SDKs end-to-end.
If you're shipping autonomous agents that need to charge each other for work, run sub-cent micropayments, or want a public reserves dashboard journalists can audit — Voidly Pay is the right pick. The proof of reserves and universal x402 proxy are unique to this rail.
Use both: the sidecar pattern
The two rails compose. Use Stripe to charge the human at the top of the funnel (cards, wallets, BNPL), use Voidly Pay to settle micropayments between sub-agents at the bottom:
Customer ──(Stripe Checkout, USD)──> Orchestrator agent
│
Orchestrator splits work across sub-agents
│
▼
[Sub-agent A] [Sub-agent B] [Sub-agent C]
╲ │ ╱
Voidly Pay (cents/microcents, instant, signed)
│
Orchestrator sweeps Voidly credits at run-end →
optional bridge → USDC on Base → Stripe payoutThis is the cleanest narrative: Stripe owns the customer relationship and the dollar on-ramp; Voidly Pay handles the per-call settlement between agents that would otherwise be lost in card fees.
A note on standards (MPP, x402, UCP)
At Sessions 2026, Stripe + Tempo announced Machine Payments Protocol (MPP) as an open standard with Visa, Anthropic, OpenAI, Mastercard, DoorDash, Shopify on board. Stripe also expanded its x402 facilitator to Base + Solana + Tempo, and partnered with Google on the Universal Commerce Protocol (UCP) for Gemini-side checkout.
Voidly Pay's position: x402 is our native protocol; we're an interop facilitator, not a card-network alternative. MPP's core abstraction (PaymentIntent-shaped envelopes between machines) maps cleanly to Voidly Pay's signed-envelope flow — an MPP-compat shim is a small worker-route addition. None of these standards have an identity primitive at the agent level; did:voidly: fills that gap.
Spotted a factual error? research@voidly.ai. This page is licensed under CC BY 4.0 — feel free to mirror or quote.
Sister comparisons: full rail comparison (ATXP, Coinbase, Anthropic, Stripe).