AgentPay VN

io.github.phuocdu由 GitHub 帳號 phuocdu 發布v1.1.0更新於 Oct 24, 2026

Let AI agents collect VietQR payments — generate a QR and auto-confirm settlement.

發布方自己的服務:AgentPay — Pay-per-call AI Microservices

已驗證STDIO僅桌面金融商業與電商

概覽

AI 產生的概覽

AgentPay VN 讓 AI 助理建立 VietQR 收款請求、傳送結帳連結,並在越南銀行轉帳入帳後確認結算。

可以做什麼
  • 依金額建立收款請求,取得 VietQR 條碼或結帳連結
  • 查詢某筆收款請求的目前狀態
  • 輪詢等待付款入帳,直到結算或逾時
  • 列出最近已結算的交易
  • 在未設定金鑰時自助核發免費的沙箱 API 金鑰
適用情境
適合助理需要在對話中向越南銀行帳戶收款(例如販售下載內容、預約或顧問服務),且只在確認付款後才交付商品或服務的情境。沙箱模式可在不動用真實資金的情況下試用整個流程。
執行需求
透過 stdio 在本機執行,使用 uvx 從 PyPI 安裝(Python)。需在 AGENTPAY_API_KEY 提供 AgentPay API 金鑰(沙箱用 ap_test_,真實收款用 ap_live_),沙箱金鑰可透過 register_sandbox 工具自助核發。AGENTPAY_BASE_URL 用於指定 API 位址。真實收款需要已註冊且擁有越南銀行帳戶的商家,並需能連線至 AgentPay 服務。
安裝前請注意
真實金鑰(ap_live_)可建立與商家銀行帳戶關聯的真實收款請求,應將 AGENTPAY_API_KEY 視為機密保管。此伺服器會透過第三方服務建立收款請求並讀取交易資料;README 指出金鑰外洩只會暴露該租戶建立收款請求的能力。沙箱金鑰 7 天後過期,且不涉及真實資金。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 AgentPay VN,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

AgentPay VN

[PyPI version] [License: MIT] [MCP Registry] [phuocdu/agentpay-vn MCP server]

VietQR payment infrastructure for AI agents — collect money inside any conversation.

AgentPay VN lets AI agents (Claude, GPT, custom bots) generate payment QR codes, send them to users, and automatically confirm when the money arrives — all without ever holding or touching funds. Money flows directly from the payer's bank account into the merchant's account; AgentPay only reads the bank transaction feed to confirm settlement.

Status: Early access / self-hosted — running on the same swarm as Sổ Nợ AI.


How it works

AI Agent                   AgentPay API              Bank feed (SePay)   |                            |                           |   |-- create_payment_request ->|                           |   |<- { qr_image_url, id } ----|                           |   |                            |                           |   |-- send QR to user -------->|                           |   |                            |      user scans & pays    |   |                            |<-- webhook (bank txn) ----|   |                            |-- match AP* pay_code      |   |                            |-- status → settled        |   |<-- await_settlement done --|                           |   |                            |                           |   |-- deliver order / unlock ->|                           |
  1. Create — agent calls POST /v1/payment-requests → gets a VietQR image URL and a checkout page.
  2. Send — agent embeds the QR image or sends the checkout link to the user in chat.
  3. Await — agent calls await_settlement() (or the MCP tool) to poll until status = settled.
  4. Deliver — only after confirmed settlement does the agent release the goods/service.

AgentPay never holds money. The QR points directly at the merchant's bank account number. The platform only monitors the bank transaction feed to detect matching transfers.


Quick start

1. Install

bash
pip install agentpay-vn

2. Get an API key — no account needed

A sandbox key is self-serve and instant:

bash
curl -X POST https://agentpay.servicesai.vn/v1/sandbox/register \  -H "Content-Type: application/json" -d '{"shop_name": "My Bot"}'# -> { "api_key": "ap_test_...", "expires_at": "..." }
export AGENTPAY_API_KEY=ap_test_xxx

From Python: register_sandbox(). From an agent: just call the register_sandbox MCP tool — it issues the key and applies it to the session.

Sandbox keys last 7 days, move no real money, and renew by calling the same endpoint with the same email. For real payments you need an ap_live_* key, which requires a registered merchant with a Vietnamese bank account — sign up at agentpay.servicesai.vn.

3. Collect a payment (3 lines)

python
from agentpay.client import AsyncAgentPayClient, await_settlementimport asyncio
async def main():    async with AsyncAgentPayClient("ap_test_xxx") as client:        pr = await client.create_payment_request(amount=50_000, description="Order #1")        print(pr["checkout_url"])          # send this link to your user        result = await await_settlement(client, pr["id"], timeout=120)        assert result["status"] == "settled"
asyncio.run(main())

See examples/quickstart.py for the full runnable version.


MCP server setup

AgentPay ships an MCP server so any MCP-compatible AI agent can call it as a tool — no extra code needed.

Claude Desktop / Claude Code

Add to claude_desktop_config.json (or use examples/claude_desktop_config.json):

json
{  "mcpServers": {    "agentpay": {      "command": "python",      "args": ["-m", "agentpay.mcp_server"],      "env": {        "AGENTPAY_API_KEY": "ap_test_xxx",        "AGENTPAY_BASE_URL": "https://agentpay.servicesai.vn/v1"      }    }  }}

Or use the installed console script:

json
{  "mcpServers": {    "agentpay": {      "command": "agentpay-mcp",      "env": { "AGENTPAY_API_KEY": "ap_live_xxx" }    }  }}

Available MCP tools

ToolDescription
register_sandboxSelf-issue a free ap_test_* key — call this first when no key is set
create_payment_requestGenerate a VietQR code for a given amount
check_paymentGet current status of a payment request
await_settlementPoll until payment arrives or timeout (max 600 s)
list_recent_paymentsList last N settled transactions

Agent skill (Claude Code, Cursor, and other agents)

The MCP server gives an agent the tools. The bundled skill gives it the judgement: when to charge, how to format a VND amount, and the rule that nothing ships before status = settled. See skills/agentpay-vn/SKILL.md.

This repository is also a Claude Code plugin marketplace, so the skill and the MCP server install together in one step:

bash
claude plugin marketplace add phuocdu/agentpay-vnclaude plugin install agentpay-vn@agentpay-vn

Claude Code prompts for your API key (stored in the OS credential store, not in settings.json). Leave it blank to start in sandbox — the agent will call register_sandbox on its first charge.

For other agents, copy skills/agentpay-vn/ into wherever that agent reads skills from, and add the MCP server as shown above.


Python SDK

Synchronous

python
from agentpay.client import AgentPayClient
with AgentPayClient("ap_live_xxx") as client:    # Create    pr = client.create_payment_request(        amount=150_000,        description="Consulting session 30 min",        ttl_minutes=30,        idempotency_key="session-abc-123",    )
    # Poll manually    import time    for _ in range(60):        pr = client.get_payment_request(pr["id"])        if pr["status"] != "pending":            break        time.sleep(5)
    # Reconcile    txns = client.list_transactions(limit=10)

Asynchronous

python
from agentpay.client import AsyncAgentPayClient, await_settlement
async with AsyncAgentPayClient("ap_live_xxx") as client:    pr = await client.create_payment_request(amount=75_000, description="eBook download")    result = await await_settlement(client, pr["id"], timeout=300)    if result["status"] == "settled":        send_download_link(result["metadata"].get("email"))

Webhook verification

python
import hashlib, hmac
def verify_webhook(raw_body: bytes, signature_header: str, secret: str) -> bool:    expected = hmac.new(secret.encode(), raw_body, hashlib.sha256).hexdigest()    return hmac.compare_digest(expected, signature_header)

Register a webhook endpoint:

python
ep = client.register_webhook(    url="https://your-server.com/webhooks/agentpay",    events=["payment.settled", "payment.expired"],)print(ep["secret"])  # store this — shown only once

API reference

  • OpenAPI spec: agentpay-openapi.yaml
  • Base URL: https://agentpay.servicesai.vn/v1
  • Authentication: Authorization: Bearer ap_live_xxx (or ap_test_xxx for sandbox)

Key endpoints

MethodPathDescription
POST/v1/payment-requestsCreate payment request
GET/v1/payment-requests/{id}Get status
POST/v1/payment-requests/{id}/cancelCancel pending request
GET/v1/transactionsList settled transactions
POST/v1/webhook-endpointsRegister webhook URL
POST/v1/sandbox/simulate-settlementSimulate payment (sandbox only)
GET/pay/{pay_code}Public checkout page (HTML, mobile-friendly)

Self-hosting

AgentPay runs as part of the Sổ Nợ AI FastAPI backend.

Requirements

  • Docker Swarm cluster (same as Sono)
  • MongoDB (shared with Sono)
  • SePay bank feed account (for live payments)
  • Nginx with an agentpay.servicesai.vn vhost

Environment variables

VariableDefaultDescription
AGENTPAY_BASE_URLhttps://agentpay.servicesai.vnPublic base URL for checkout links
MONGO_URImongodb://localhost:27017Inherited from Sono
BILLING_WEBHOOK_TOKEN—SePay webhook token (inherited)

Create an API key (admin)

bash
curl -X POST https://sono.servicesai.vn/api/admin/agentpay/keys \  -H "Authorization: Bearer <admin-jwt>" \  -H "Content-Type: application/json" \  -d '{"org_id": "<shop-user-id>", "name": "My bot", "livemode": true}'

The response includes the full key — store it immediately; it is shown only once.


Rate limits

TierSettled payments/monthRequests/minute
Free50120

Design principles

  1. No money held — QR codes point directly at the merchant's bank account. AgentPay only reads the transaction feed; it never touches the money.

  2. Idempotency — pass an Idempotency-Key header on POST /payment-requests to safely retry without creating duplicates (24-hour deduplication window).

  3. HMAC webhook verification — every outbound webhook is signed with HMAC-SHA256(whsec_..., raw_body) in the AgentPay-Signature header. Always verify before processing.

  4. Sandbox — use ap_test_* keys and POST /v1/sandbox/simulate-settlement to develop and test without real transactions.

  5. Minimal trust surface — the MCP server is a thin REST client with no local secrets beyond the API key. Compromising an agent key only exposes one tenant's payment-request creation ability.


License

MIT © 2026 ServicesAI — see LICENSE.

來源:README.md,提交 11c5745

工具

0
SourceWeft 曾在隔離沙箱中以無憑證方式啟動該軟體包一次,以列出其工具,但未能完成:該軟體包類型無法在沙箱中執行。

版本歷史

2
  1. v1.1.0最新Oct 21, 2026
  2. v1.0.1Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

其他 Agentpay 整合