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 集成