IoMarkets Topup

app.iomarkets由 iomarkets.app 发布官方发布者v0.2.11更新于 Nov 8, 2026

Travel eSIMs and mobile top-ups paid in USDC via x402.

已验证Streamable HTTP可网页运行位置与生活金融商业与电商

概览

AI 生成的概览

通过 x402 用 Algorand 上的 USDC 购买旅行 eSIM 和手机话费充值,支持报价、支付链接、订单跟踪与可验证收据。

可以做什么
  • 查询手机号的所属国家与运营商,并浏览充值、eSIM、账单和国际付款通道的报价
  • 锁定 10 分钟有效的价格报价,并获取订单的 x402 支付挑战
  • 创建由真人用自己 Algorand 钱包付款的结账链接,以及批量 eSIM 领取链接的报价与购买
  • 轮询订单状态直至已交付或已退款,并用 Algorand 索引器验证 ed25519 签名收据
  • 查询 USDC 兑当地货币的参考汇率和公开交付账本
适用场景
适合让助手代买或充值手机话费与流量、把结账链接交给本人自行付款,或为团队旅行、会议分发旅行 eSIM。也适合核对订单结果并验证本服务或其他卖家的收据。
运行要求
远程 streamable HTTP 端点;未声明需要账号、API 密钥或银行卡。付款需要持有 USDC 的 Algorand 钱包(如 Pera)并完成 x402 支付签名流程,托管服务器本身不持有钱包。需要能访问该端点,链上验证还需访问 Algorand 索引器。
安装前请注意
购买会真实花费链上 USDC,结算后不可撤销;先付款后发货,仅在供应商失败时自动退款。购买前务必向真人展示价格和收款对象,并保留批次 ID,因为它是领取链接的唯一凭据。收款对象与订单数据会发送给供应商,并出现在收款人经过哈希处理的公开账本中;存在单笔与每日限额。

安装

在 SourceWeft 中

  1. 打开 控制台中的 IoMarkets Topup,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/app.iomarkets%2Ftopup/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。

{
  "mcpServers": {
    "iomarkets-topup": {
      "type": "http",
      "url": "https://iomarkets.app/mcp"
    }
  }
}

README

IoMarkets Topup — real-world checkout for AI agents on Algorand

Your AI agent can buy real things — and send money. In the pilot today: travel eSIMs and mobile airtime/data top-ups. Prepaid bills and international payments (bank / mobile money / UPI payouts via a licensed partner) are built and supplier-gated. Everything is paid per order in USDC on Algorand via x402. No account, no API key, no card. Money settles on-chain first, goods ship second, failures refund on-chain automatically, and every terminal order carries an ed25519-signed receipt anyone can verify.

Built for the Global x402 Challenge (Algorand Foundation × GoPlausible). Pilot: https://iomarkets.app · agent docs: /agent.md · ledger: /v1/ledger · receipt spec: docs/RECEIPTS.md

How it works

agent ── GET /v1/lookup?phone=+91…  ─▶ operator + offers                      (free)agent ── POST /v1/quote {type, offerId, recipient, amount} ─▶ quoteId, price   (free, 10-min lock)agent ── POST /v1/orders {quoteId} ─▶ 402 + exact USDC amount                 (x402)agent ── …signs Algorand USDC payment, retries with PAYMENT-SIGNATURE ─▶ facilitator settles on-chainserver ── order created ONLY after settlement ─▶ supplier purchase ─▶ delivered | failed → on-chain refundagent ── GET /v1/orders/{id} ─▶ status, confirmation (operator ref / eSIM LPA), signed receipt, txids
RouteCostPurpose
GET /v1/lookup?phone=freecountry / operator / offers for a number
GET /v1/catalog?type=topup|esim|bill|payout&country=&limit=&offset=freebrowse offers / payout corridors with indicative USDC prices (paged: 100 by default, total + next_offset in the response, limit=0 for all)
GET /v1/countries?type=esimfreeevery destination a product reaches; enumerable:false = the supplier will not list them
GET /v1/fx?to=INR&amount=&type=freeindicative USDC→local rate at our sale price + estimate (type = topup | bill | payout, since the markup can differ per product)
POST /v1/quotefreelock an exact price for one purchase
POST /v1/ordersthe quoted amount, x402pay → order
GET /v1/orders/:idfreestatus, confirmation, signed receipt, refund txid
POST /v1/verifyfreeverify any receipt: signature + both txids on chain (?online=0 for signature only)
GET /v1/ledger · GET /v1/pubkey · GET /agent.md · GET /fundfreepublic ledger · receipt key · agent instructions · how to get USDCa
GET /.well-known/agent-card.json · GET /.well-known/agent.jsonfreeA2A agent card — what registries and agent routers read: the live skill list (rendered from what the suppliers can actually fill), the provider, and x402 declared as a required capability with the paid route named. Claims no transport and no url: this server does not speak A2A JSON-RPC, and neither HTTP+JSON nor a made-up MCP is an honest value for that field, so the card is discovery metadata and documentationUrl sends a caller to /agent.md for the interface that exists (src/agent-card.ts)
GET /v1/client-configfreenetwork, CAIP-2 id, algod URL, USDC ASA and the order ceiling — what a browser needs to build a payment (public values only)
GET /payfreethe batch payout console — paste a spreadsheet, price every row, approve once, export receipts (web/, ?demo=1 for canned data)
GET /consolefreethe original single-file console — no build step, works when web/dist is absent
POST /v1/links · GET /v1/links/:id · POST /v1/links/:id/quotefreepay links — an agent with no wallet hands its human a checkout URL (/l/:id); they approve the exact price in their own Pera wallet. A top-up link is a "top up my phone" request anyone can pay
GET /p/:settlement_txid · GET /v1/proof/:txidfreeproof of delivery — shareable page per goods order (price, delivery time, on-chain settlement, checked signature), keyed by the public txid, never the order id; "get the same eSIM" credits the original buyer
GET /v1/referrals · GET /v1/referrals/:address · GET /earnfreereferral share — ref on any quote or link earns a share of net margin on delivered orders, paid on-chain in USDC; off until REFERRAL_SHARE_BPS > 0
GET / · GET /brand/logo.webp · GET /favicon.icofreethe human landing page — what, why, who, a live-catalogue explorer with a simulated purchase, the ledger, and where the product sits in the IoMarkets® ecosystem; the logo and icons every page shares (src/brand.ts)

Trust model (what makes agents use it extensively)

  • No order without a settled payment — the order row is created from the facilitator's settlement txid.
  • Exact pricing — the 402 challenge carries the quoted amount; a quote pays once and expires in 10 min.
  • Automatic refunds — supplier failure ⇒ USDC returned to the paying address on-chain, note = order id.
  • Signed receipts — {order, amount, payer, settlement txid, refund txid} signed with a published ed25519 key (pnpm verify receipts/<id>.json --online checks the signature and both transactions on Algorand). The same check is an endpoint anyone can call — POST /v1/verify — and it verifies receipts from any server that adopts the format, not just ours. The format is a spec: docs/RECEIPTS.md.
  • Public ledger — every order, outcome and txid (recipients hashed).
  • Abuse posture — $50/order (goods), $200/payment (payouts), $200/payer/day, sanctioned destinations refused, replay guard, rate limits; payouts need a sender record and a partner KYC reference above $100/day (src/compliance.ts).
  • Key hygiene — the server holds one hot key (refund float, daily-capped); PAY_TO is an address only; secrets come from files / systemd encrypted credentials, never .env (see src/keys.ts).

Run it

bash
pnpm install --frozen-lockfile --ignore-scriptscp .env.example .env            # PAY_TO, RECEIPT_* (pnpm gen-key), SUPPLIER=mock to startpnpm dev                        # http://127.0.0.1:3000  (NETWORK=mainnet — the facilitator serves mainnet)pnpm test && pnpm typecheck
# The batch payout console (web/ — React + TanStack Start, installed with bun).pnpm install:web && pnpm build:web   # → web/dist/client, served by the SAME process at /paypnpm dev:web                         # or: vite with HMR on http://127.0.0.1:8080/pay/ , /v1 proxied to :3000AGENT_MNEMONIC_FILE=~/.secrets/agent.mnemonic pnpm buy --phone +919876543210 --amount 100   # real USDCpnpm check-bazaar               # listed after the first settled payment

Mock supplier rules for demos: a phone ending 0000 fails (→ refund path), 1111 is delivered after polling.

Agent integrations

  • .claude-plugin/plugin.json — Claude Code plugin: this skill + the hosted MCP server, zero setup for the user.
  • server.json — MCP registry manifest (remotes → https://iomarkets.app/mcp); needs the deploy live + a DNS TXT record proving the app.iomarkets namespace.
  • skills/iomarkets-topup/SKILL.md — the single shared skill for OpenClaw, Hermes and Claude Code (agentskills format); publishing to each hub is a copy, not a fork (skills/README.md).
  • pnpm mcp — MCP server (stdio) with lookup_phone, list_offers, quote, buy, order_status, verify_receipt, ledger, create_pay_link.
  • Bazaar: the paid route declares discovery metadata + the x402-global-challenge tag; it is indexed on first settlement.

Layout

src/app.ts          HTTP surface + x402 wiring (dynamic price = quote, preflight hook, post-settle order creation)src/orders.ts       quote → paid → fulfilling → delivered | failed → refunded   (single-flight, resumable)src/suppliers/      types · mock · zendit · reloadly · composite (goods + payouts) · payout-partner (skeleton)src/compliance.ts   payout gate (sanctions, caps, sender, KYC threshold)src/receipt.ts      ed25519 receipts        src/refunds.ts  on-chain refunds (daily cap)src/db.ts           node:sqlite             src/keys.ts     secret sources (file / systemd cred / env)src/growth.ts       pay links · proof pages · referral routes   src/referrals.ts  margin share, reserve-first payoutssrc/mcp.ts          MCP server              src/client/paying.ts  x402 paying fetch with budgetscripts/            gen-key · new-wallet · optin-usdc · buy · verify-receipt · check-bazaardocs/RECEIPTS.md    the signed-receipt format, as a spec other sellers can adoptdeploy/entrypoint.sh  container entrypoint: refuses to start on a config that cannot take money

来源:README.md,提交 3787fdf

工具

11

lookup_phone

Identify the country and mobile operator of a phone number and list the top-up offers available for it. Free. The operator is DETECTED from the number range and is a guess: MVNOs (Tesco Mobile, Giff Gaff, Lebara, Voxi, Sky…) resolve to the host network they ride on. Read the detected brand back to the human and have them confirm it before buying, and use `other_brands` to correct it — a voucher bought for the wrong network delivers successfully and cannot be redeemed or refunded.

输入参数phone必填

list_offers

Browse purchasable offers: mobile top-ups, travel eSIMs, prepaid bills, or international payment corridors (bank / mobile money / UPI) for a country. Free. Prices shown are indicative; the quote fixes them.

输入参数type必填brandlimitoffsetcountry

quote

Lock a price (10 minutes) for one purchase. Returns quoteId, exact USDC price and what will be delivered. Free. ALWAYS show the human the price and the recipient before buying.

输入参数reftype必填iccidpayerphoneamountfieldssenderofferId必填

buy

Get the x402 payment challenge for a quote. This hosted server holds no wallet, so it does NOT spend your money: it returns the exact amount, asset, payTo address and facilitator for you to pay from your own Algorand wallet, then you POST the quote again with your payment signature. Requires prior human confirmation of the quote. Works the same for a quote from quote_vouchers; the paid response is the batch (batchId and claim links) rather than an order.

输入参数quoteId必填

quote_vouchers

Lock a price (10 minutes) for a BATCH of travel eSIMs paid in one payment: N claim links, one per person, for a group trip, a conference delegation or event giveaways. Each eSIM is bought when its link is claimed (the person opens it on their phone and installs the QR), and links nobody claims within 30 days are refunded to the paying wallet. Free. Pay the returned quoteId with `buy`, or send the human to this service's /pay/?mode=vouchers page to buy it with their own wallet. Limits: 2–50 eSIMs, each within the per-order limit, the batch within its own limit ($100 by default). ALWAYS show the human the total and the count before buying.

输入参数notecount必填payerofferId必填

voucher_batch

A paid voucher batch: every claim link, which have been claimed and delivered, the expiry, and any refund for unclaimed links. The batchId is the only handle on the links — keep it, and hand each person their own link privately (whoever opens a link first gets that eSIM).

输入参数batchId必填

order_status

Check an order. Poll every ~3 s until `terminal` is true: delivered (confirmation + signed receipt), refunded (refund txid + signed receipt) or refund_failed.

输入参数orderId必填

verify_receipt

Verify an ed25519-signed receipt: the signature, and — unless you pass onChain:false — both txids against an Algorand indexer. Give it an orderId to check one of this service's own orders, or a receipt object to check ANY receipt in this format, including one issued by another server.

输入参数onChainorderIdreceipt

fx

Indicative USDC → local-currency rate at our sale price, with an estimate for an amount. The quote is the binding price.

输入参数to必填typeamount

ledger

Public delivery ledger: totals, delivered-or-refunded %, volume, countries, recent orders.

无需输入参数。

版本历史

5
  1. v0.2.11最新Nov 8, 2026
  2. v0.2.10Oct 29, 2026
  3. v0.2.8Oct 1, 2026
  4. v0.2.7Sep 16, 2026
  5. v0.2.5Sep 16, 2026

评分

已满足适用检查项的 90%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分

    请在仓库或注册中心条目中声明许可证。

其他 Iomarkets 集成