Monapay Mcp

vn.monapay由 monapay.vn 發布v0.6.2更新於 Oct 24, 2026

MONA Pay for AI agents: create VietQR, check bank transfers, webhooks & HMAC. Vietnam bank API, VND

概覽

AI 產生的概覽

MONA Pay 的 MCP 伺服器,讓 AI 助理建立 VietQR 與結帳連結、查詢越南盾入帳轉帳,並設定 webhook 與通知。

可以做什麼
  • 查看帳戶狀態、資料與方案,並透過 OTP 綁定 ACB 銀行帳戶、建立虛擬帳戶
  • 建立、查看、篩選與取消代管結帳工作階段及動態 VietQR
  • 依虛擬帳戶列出與查詢入帳交易,並取得指定日期區間的彙總與每日資料
  • 建立、更新、刪除與測試 webhook,讀取投遞紀錄與統計,並在本機驗證 HMAC 簽章
  • 管理電子郵件與 Zalo 群組通知設定,送出測試並查看投遞紀錄
  • 產生或輪換 API 金鑰,並產生 PHP、Node 或 Python 的 webhook 接收端程式碼片段
適用情境
適合在專案中整合 MONA Pay 時使用:實作銀行轉帳自動確認、為訂單產生 VietQR 或結帳連結,或在開發過程中設定與排查 webhook 及通知投遞。
執行需求
透過 npx 以 stdio 在本機執行,需要 Node.js 18 或更新版本。需要 MONA Pay API 金鑰:MONAPAY_CLIENT_ID 與 MONAPAY_CLIENT_SECRET,於 MONA Pay 後台建立。MONAPAY_BASE_URL 為選用,預設使用正式環境 API。需要可連線至 MONA Pay API 的網路。
安裝前請注意
client secret 屬於憑證,用於取得 OAuth 權杖並授權寫入操作;輪換後舊密鑰立即失效,需更新設定並重新啟動用戶端。許多工具會建立、修改或刪除真實資源(結帳、QR 碼、webhook、通知設定、金鑰),並可寄送測試郵件或 Zalo 訊息。綁定銀行帳戶需要帳戶持有人手機收到的 OTP,助理必須向使用者索取,不可猜測。另支援舊版使用者名稱/密碼變數,但啟用 2FA 的帳戶無法使用。

安裝

在 SourceWeft 中

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

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

其他 MCP 客戶端

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

README

monapay-mcp

An MCP server that lets AI coding agents such as Claude Code, Cursor and Codex (or any MCP client) work with MONA Pay while coding: link a bank account, create checkout links and VietQR codes, look up incoming transfers, configure and test webhooks, email and Zalo group notifications, and verify webhook signatures.

[test]

Published on npm as monapay-mcp and in the MCP Registry as vn.monapay/monapay-mcp.

Install

Requires Node.js 18 or later and a MONA Pay API key (client ID and client secret, created in the MONA Pay dashboard).

bash
npx -y monapay-mcp   # starts the server over stdio

Claude Code

bash
claude mcp add monapay \  -e MONAPAY_CLIENT_ID=your_client_id \  -e MONAPAY_CLIENT_SECRET=your_client_secret \  -- npx -y monapay-mcp

Cursor (.cursor/mcp.json) and Claude Desktop (claude_desktop_config.json)

json
{  "mcpServers": {    "monapay": {      "command": "npx",      "args": ["-y", "monapay-mcp"],      "env": { "MONAPAY_CLIENT_ID": "client_id", "MONAPAY_CLIENT_SECRET": "client_secret" }    }  }}

Codex (~/.codex/config.toml)

toml
[mcp_servers.monapay]command = "npx"args = ["-y", "monapay-mcp"]env = { MONAPAY_CLIENT_ID = "client_id", MONAPAY_CLIENT_SECRET = "client_secret" }

Configuration

VariableRequiredMeaning
MONAPAY_CLIENT_IDyes (recommended)client_id of an API key created in the dashboard
MONAPAY_CLIENT_SECRETyes (recommended)client_secret, shown once; used to obtain the OAuth token and authorize write actions
MONAPAY_USERNAMElegacyMONA Pay username, used only when client credentials are not set
MONAPAY_PASSWORDlegacyPassword; does not work for accounts with 2FA enabled
MONAPAY_BASE_URLnoDefaults to https://api.monapay.vn

Client credentials are recommended over username/password, because accounts with 2FA enabled cannot log in with a password.

Usage

Tools

ToolWhat it does
monapay_quickstartEntry point: checks account state (bank/VA linked, webhook configured) and returns the next steps
monapay_whoamiVerifies the connection and returns the account name and plan
monapay_meProfile of the logged-in account
monapay_link_bank_start · monapay_link_bank_verify_otpLink an ACB account and create a virtual account (first OTP)
monapay_notification_register · monapay_notification_verify_otpTurn on incoming-transfer notifications (second OTP)
monapay_list_bank_accounts · monapay_list_virtual_accountsLinked bank accounts and their virtual accounts (VA)
monapay_get_payment_profile · monapay_set_payment_profileView or set the profile used by the hosted checkout page
monapay_create_checkout · monapay_get_checkout · monapay_list_checkouts · monapay_cancel_checkoutCreate, inspect, filter and cancel hosted checkout sessions
monapay_create_qr · monapay_cancel_qrCreate or cancel a dynamic VietQR for an order
monapay_list_transactionsIncoming transactions for a VA (up to 100 per page), for reconciliation
monapay_get_transactionFind one incoming transaction by transaction_code or ID within a VA
monapay_get_transactions_summaryIncoming totals, transaction count and daily data for a date range
monapay_sandbox_transactionCreate a fake incoming transaction; webhooks, Telegram, email and Zalo fire as for a real one. Without a VA, a sandbox VA is issued
monapay_list_webhooks · monapay_create_webhook · monapay_update_webhook · monapay_delete_webhookWebhook configs (NONE, API_KEY or HMAC_SHA256; HMAC recommended)
monapay_test_webhook · monapay_webhook_logs · monapay_webhook_statsSend a dummy webhook, per-delivery history, success rate / P95
monapay_list_email_configs · monapay_create_email_config · monapay_update_email_config · monapay_delete_email_configEmail notification configs with 1 to 10 recipients
monapay_verify_email · monapay_resend_email_verification · monapay_test_emailVerify a recipient with a 6-digit code, resend the code, send a test email
monapay_email_logs · monapay_email_statsDelivery metadata, success rate / P95 and error groups
monapay_list_email_suppressions · monapay_remove_email_suppressionView and remove suppressed addresses
monapay_list_zalo_groups · monapay_create_zalo_group · monapay_update_zalo_group · monapay_delete_zalo_groupZalo group notification configs
monapay_test_zalo_group · monapay_zalo_group_logsSend a test message and read Zalo group delivery history
monapay_retry_transactionRe-send the webhook or Telegram notification for a transaction
monapay_generate_keyGenerate a new client_secret
monapay_rotate_keyRotate the secret of the current key when it may be exposed
monapay_verify_signatureVerify a webhook signature locally, with no network call
monapay_generate_webhook_snippetWebhook receiver code for PHP, Node or Python, with a sample payload

Resources and prompt

  • monapay://docs/llms: machine-readable index of the MONA Pay docs.
  • monapay://docs/{slug}: one docs page as Markdown, for example monapay://docs/webhooks/tich-hop-webhook.
  • Prompt integrate-monapay (arguments language, framework): a 6-step plan for the agent to integrate MONA Pay into the current project.

Example

"Integrate automatic bank transfer confirmation into this Laravel site with MONA Pay."

The agent calls monapay_whoami, gets receiver code with monapay_generate_webhook_snippet(language="php"), writes the endpoint into the project, registers it with monapay_create_webhook(auth_type="HMAC_SHA256", secret_key=...), fires monapay_test_webhook, reads monapay_webhook_logs to confirm the endpoint returns 200, then uses monapay_create_checkout for each order and waits for CHECKOUT_PAID.

Link a bank account with OTP

ACB sends each OTP to the account holder's registered phone. The agent must ask the user at steps 2 and 4 and never guess an OTP.

  1. Call monapay_link_bank_start with the ACB account number, phone number, customer type, VA prefix and identifier. It returns acb_request_id, and ACB sends the first OTP.
  2. Ask the user for the OTP and call monapay_link_bank_verify_otp. It returns virtual_account_id and the VA number.
  3. Call monapay_notification_register with virtual_account_id. ACB sends the second OTP.
  4. Ask the user for the second OTP and call monapay_notification_verify_otp. Incoming transfers are now forwarded to your configured webhooks.

If an OTP is wrong or expired, call the previous step again to get a new code.

Zalo group notifications

The group must contain the MONA bot (Gấu Mona), which is added by the MONA team. group_id is 10 to 25 digits and comes from MONA Account/PMS.

Call monapay_create_zalo_group with group_id, a friendly name and the events to receive: TRANSACTION_IN, CHECKOUT_PAID, WEBHOOK_FAILED, VA_CREATED. You can limit it to one virtual_account_id, send a test with monapay_test_zalo_group and check delivery with monapay_zalo_group_logs.

Zalo does not render Markdown, so message_template must be plain text. It supports {amount}, {description}, {virtual_account_number}, {transaction_code} and {transfer_date}; the {{amount}} form also works.

Key rotation

monapay_rotate_key uses the current secret to rotate the key that matches MONAPAY_CLIENT_ID. The old secret stops working immediately; update MONAPAY_CLIENT_SECRET in your MCP config and restart the client.

Webhook signature

X-Mona-Signature: sha256=<hex>, where hex = HMAC-SHA256(secret, "<X-Mona-Timestamp>.<raw_body>"). Reject requests whose timestamp is more than 300 seconds off and compare in constant time. transaction_code stays the same across retries, so use it as the deduplication key.

Development

bash
npm installnpm test     # build + node --test
# Calls a few read-only tools against a real accountMONAPAY_CLIENT_ID=... MONAPAY_CLIENT_SECRET=... MONAPAY_BASE_URL=https://api.monapay.vn npm run smoke

Agent guide: https://monapay.vn/ai-agent · Documentation: https://monapay.vn/docs

License

MIT

MONA Pay is part of MONA Cloud by The MONA Group.

來源:README.md,提交 be66409

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

2
  1. v0.6.2最新Oct 5, 2026
  2. v0.6.1Sep 19, 2026

評分

已滿足適用檢查項的 50%

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

  • 近 30 天內可連通25 分

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

  • 已宣告認證方式10 分

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

  • 已列出工具15 分

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

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