Skip to main content
Glama
monapay-mcp

monapay-mcp

Official

monapay-mcp — MCP server cho MONA Pay

MONA Pay là API ngân hàng và dịch vụ xác nhận thanh toán tự động của The MONA Group, giúp doanh nghiệp Việt Nam nhận và xác nhận tiền chuyển khoản theo thời gian thực qua tài khoản ảo (VA), VietQR, webhook, Telegram, email và nhóm Zalo, thiết kế để cả lập trình viên lẫn AI agent tích hợp trong vài phút. Miễn phí hoàn toàn, tiền không đi qua MONA Pay.

monapay-mcp cho Claude Code, Cursor, Codex (hoặc bất kỳ client MCP nào) gọi thẳng MONA Pay ngay trong lúc code: tạo VietQR cho đơn, tra giao dịch, cấu hình và bắn thử webhook, kiểm chữ ký HMAC, lấy code mẫu nhận webhook.

Cài đặt

Cần Node ≥ 18 và một tài khoản MONA Pay (đăng ký xong dùng ngay): https://my.monapay.vn/auth?mode=register

npx monapay-mcp   # chạy server qua stdio

Biến môi trường:

Biến

Bắt buộc

Ý nghĩa

MONAPAY_CLIENT_ID

có (khuyến nghị)

client_id của API key tạo trong dashboard

MONAPAY_CLIENT_SECRET

có (khuyến nghị)

client_secret hiện một lần; dùng lấy OAuth token và ký quyền cho lệnh ghi

MONAPAY_USERNAME

cách cũ

tên đăng nhập MONA Pay; chỉ dùng khi không có client credentials

MONAPAY_PASSWORD

cách cũ

mật khẩu; tài khoản bật 2FA không dùng được cách này

MONAPAY_BASE_URL

không

mặc định https://api.monapay.vn

Claude Code

claude mcp add monapay \
  -e MONAPAY_CLIENT_ID=client_id_cua_anh_chi \
  -e MONAPAY_CLIENT_SECRET=client_secret_cua_anh_chi \
  -- npx -y monapay-mcp

Cursor (.cursor/mcp.json)

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

Codex (~/.codex/config.toml)

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

Claude Desktop (claude_desktop_config.json)

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

Cách cũ: username/password

Nếu chưa tạo API key, có thể đặt MONAPAY_USERNAME và MONAPAY_PASSWORD. Nên chuyển sang client_id/client_secret; tài khoản bật 2FA không login bằng mật khẩu được.

Related MCP server: Tunzaa MCP Server

Tool

Tool

Làm gì

monapay_whoami

kiểm tra kết nối, đếm bank/VA và gợi ý kênh thông báo tiếp theo

monapay_me

hồ sơ tài khoản đang đăng nhập

monapay_link_bank_start · monapay_link_bank_verify_otp

nối tài khoản ACB và tạo VA bằng OTP lần 1

monapay_notification_register · monapay_notification_verify_otp

bật thông báo tiền vào bằng OTP lần 2

monapay_list_bank_accounts · monapay_list_virtual_accounts

tài khoản ngân hàng đã nối, tài khoản ảo (VA)

monapay_get_payment_profile · monapay_set_payment_profile

xem hoặc thiết lập hồ sơ dùng cho trang thanh toán

monapay_create_checkout · monapay_get_checkout · monapay_list_checkouts · monapay_cancel_checkout

tạo link thu tiền, kiểm tra, lọc và huỷ phiên thanh toán

monapay_create_qr · monapay_cancel_qr

tạo / huỷ VietQR động cho đơn hàng

monapay_list_transactions

tra giao dịch tiền vào theo VA (đối soát)

monapay_list_webhooks · monapay_create_webhook · monapay_update_webhook · monapay_delete_webhook

cấu hình webhook (HMAC-SHA256 khuyến nghị)

monapay_test_webhook · monapay_webhook_logs · monapay_webhook_stats

bắn thử, lịch sử từng lần gửi, tỷ lệ thành công / P95

monapay_sandbox_transaction

Tạo giao dịch tiền vào giả cho VA đã nối (webhook/Telegram/email/Zalo chạy như thật, không tính hạn mức).

monapay_list_email_configs · monapay_create_email_config · monapay_update_email_config · monapay_delete_email_config

cấu hình email cho tối đa 10 người nhận

monapay_verify_email · monapay_resend_email_verification · monapay_test_email

xác minh bằng mã 6 số, gửi lại mã và gửi email thử

monapay_email_logs · monapay_email_stats

lịch sử meta, tỷ lệ thành công / P95 và nhóm lỗi gửi email

monapay_list_email_suppressions · monapay_remove_email_suppression

xem và gỡ địa chỉ bị chặn gửi

monapay_list_zalo_groups · monapay_create_zalo_group · monapay_update_zalo_group · monapay_delete_zalo_group

xem và cấu hình thông báo vào nhóm Zalo

monapay_test_zalo_group · monapay_zalo_group_logs

gửi thử và tra lịch sử gửi nhóm Zalo

monapay_retry_transaction

gửi lại webhook hoặc Telegram cho một giao dịch

monapay_generate_key

sinh client_secret mới

monapay_rotate_key

xoay secret của key hiện tại khi nghi bị lộ; sau đó phải cập nhật MONAPAY_CLIENT_SECRET

monapay_verify_signature

kiểm chữ ký webhook ngay tại chỗ, không gọi mạng

monapay_generate_webhook_snippet

code mẫu endpoint nhận webhook PHP / Node / Python đúng chuẩn

Resource: monapay://docs/llms (mục lục tài liệu máy đọc), monapay://docs/{slug} (một trang docs dạng markdown, ví dụ monapay://docs/webhooks/tich-hop-webhook). Prompt: integrate-monapay (6 bước để agent tự tích hợp).

monapay_rotate_key dùng X-Client-Secret hiện tại để xoay đúng key khớp với MONAPAY_CLIENT_ID. Secret cũ hết hiệu lực ngay; hãy thay MONAPAY_CLIENT_SECRET trong cấu hình MCP và khởi động lại plugin/agent.

Ví dụ hội thoại

"Tích hợp nhận tiền chuyển khoản cho web Laravel này bằng MONA Pay."

Agent sẽ: gọi monapay_me → lấy code mẫu bằng monapay_generate_webhook_snippet(language="php") → viết endpoint vào dự án → monapay_create_webhook(auth_type="HMAC_SHA256", secret_key=...) → monapay_test_webhook → đọc monapay_webhook_logs để chắc endpoint trả 200 → dùng monapay_create_checkout cho từng đơn và đợi CHECKOUT_PAID.

Nối ngân hàng bằng OTP (4 bước)

OTP do ACB gửi về số điện thoại đăng ký của chủ tài khoản. Agent phải hỏi người dùng ở bước 2 và bước 4, tuyệt đối không tự đoán OTP.

  1. Gọi monapay_link_bank_start với số tài khoản ACB, số điện thoại, loại khách hàng, prefix VA và mã định danh. Tool trả acb_request_id; ACB gửi OTP lần 1.

  2. Hỏi người dùng OTP rồi gọi monapay_link_bank_verify_otp. Tool trả virtual_account_id và số VA.

  3. Gọi monapay_notification_register với virtual_account_id; ACB gửi OTP lần 2.

  4. Hỏi người dùng OTP lần 2 rồi gọi monapay_notification_verify_otp. Từ đây tiền vào sẽ được MONA Pay chuyển tiếp qua webhook đã cấu hình.

Nếu OTP sai hoặc hết hạn, gọi lại bước trước để ACB gửi mã mới.

Thông báo nhóm Zalo

Nhóm của khách phải có bot Gấu Mona do MONA thêm vào. group_id gồm 10–25 chữ số: khách hàng MONA lấy trong MONA Account/PMS tại dự án → kết nối Zalo → chatId, hoặc nhờ đội MONA tra theo tên nhóm. Người dùng chưa phải khách MONA chưa thể tự thêm bot; liên hệ MONA qua 1900 636 648 để nối nhóm Zalo.

Gọi monapay_create_zalo_group với group_id, tên dễ nhớ và các sự kiện cần nhận: TRANSACTION_IN, CHECKOUT_PAID, WEBHOOK_FAILED, VA_CREATED. Có thể giới hạn theo virtual_account_id, gửi thử bằng monapay_test_zalo_group, rồi kiểm tra bằng monapay_zalo_group_logs.

Zalo không parse Markdown. message_template phải là text thuần và hỗ trợ các biến {amount}, {description}, {virtual_account_number}, {transaction_code}, {transfer_date}; dạng {{amount}} cũng được hỗ trợ.

Chữ ký webhook

X-Mona-Signature: sha256=<hex> với hex = HMAC-SHA256(secret, "<X-Mona-Timestamp>.<raw_body>"), từ chối nếu timestamp lệch quá 300 giây, so sánh constant-time. transaction_code không đổi qua mọi lần gửi lại, dùng làm khoá chống trùng. Chi tiết: https://monapay.vn/docs/webhooks/bao-mat

Phát triển

npm install && npm test        # build + node --test
MONAPAY_CLIENT_ID=... MONAPAY_CLIENT_SECRET=... npm run smoke   # gọi thật vài tool GET

Tài liệu: https://monapay.vn/docs · llms.txt: https://monapay.vn/llms.txt · OpenAPI: https://monapay.vn/openapi.json · Hotline 1900 636 648 · info@themona.global

Available Tools

17 tools
monapay_cancel_qrHuỷ mã QRB

Huỷ một mã VietQR động đã tạo. / Cancel a dynamic QR.

Inputs: qr_code_id (required).

monapay_create_qrTạo VietQR động cho đơn hàngA

Tạo mã VietQR động điền sẵn số tiền + nội dung cho một đơn hàng qua ACB. Khách quét là tiền vào tài khoản ảo, MONA Pay bắn webhook. / Create a dynamic VietQR for an order.

Inputs: amount (required), orderId (required), merchantId (required), ownerNumber (required), +9 more.

monapay_create_webhookTạo cấu hình webhookC

Đăng ký URL nhận webhook khi có tiền vào; khuyến nghị auth_type HMAC_SHA256 + secret_key. / Create a webhook config.

Inputs: name (required), webhook_url (required), auth_type, secret_key, +3 more.

monapay_delete_webhookXoá cấu hình webhookC

Xoá một webhook config. / Delete a webhook config.

Inputs: config_id (required).

monapay_generate_keyTạo API key (client_secret)B

Sinh client_secret mới (hiện 1 lần) để dùng header X-Client-Secret. / Generate a client secret.

Inputs: name.

monapay_generate_webhook_snippetCode mẫu nhận webhookA

Trả code mẫu endpoint nhận webhook MONA Pay + verify HMAC đúng chuẩn cho PHP / Node / Python, kèm payload mẫu. / Get a webhook receiver snippet.

Inputs: language (required).

monapay_list_bank_accountsDanh sách tài khoản ngân hàng đã nốiA

Liệt kê tài khoản ngân hàng (ACB…) đã nối vào MONA Pay. / List linked bank accounts.

Inputs: no named parameters.

monapay_list_transactionsTra giao dịch tiền vàoB

Liệt kê giao dịch tiền vào theo tài khoản ảo, phân trang tối đa 100/trang; dùng để đối soát. / List incoming transactions.

Inputs: virtual_account_number (required), page, limit.

monapay_list_virtual_accountsDanh sách tài khoản ảo (VA)A

Liệt kê tài khoản ảo thuộc một tài khoản ngân hàng. / List virtual accounts of a bank account.

Inputs: bank_account_id (required).

monapay_list_webhooksDanh sách cấu hình webhookA

Liệt kê webhook đã cấu hình. / List webhook configs.

Inputs: no named parameters.

monapay_meHồ sơ tài khoản MONA PayA

Lấy thông tin tài khoản MONA Pay đang đăng nhập (id, tên, trạng thái). / Get current MONA Pay client profile.

Inputs: no named parameters.

monapay_retry_transactionGửi lại thông báo của một giao dịchB

Gửi lại webhook hoặc Telegram cho giao dịch đã có. / Re-send webhook/Telegram for a transaction.

Inputs: transaction_id (required), target_id, target_type.

monapay_test_webhookBắn webhook thửB

MONA Pay gửi một giao dịch giả (is_dummy) tới URL để kiểm tra endpoint + chữ ký. / Send a dummy webhook.

Inputs: auth_type, secret_key, webhook_url.

monapay_update_webhookSửa cấu hình webhookC

Cập nhật webhook (URL, secret, bật/tắt). / Update a webhook config.

Inputs: config_id (required), name, auth_type, is_active, +5 more.

monapay_verify_signatureKiểm chữ ký webhook (offline)A

Tính và so chữ ký HMAC-SHA256 của một webhook MONA Pay từ raw body + timestamp + secret, không gọi mạng. / Verify a webhook signature locally.

Inputs: secret (required), raw_body (required), signature (required), timestamp (required), +2 more.

monapay_webhook_logsLịch sử gửi webhookB

Lịch sử từng lần gửi (HTTP code, thời gian phản hồi, nhãn lỗi). / Webhook delivery logs.

Inputs: page, limit, status, to_date, +1 more.

monapay_webhook_statsThống kê webhookB

Tỷ lệ thành công, P95, phân loại lỗi. / Webhook delivery stats.

Inputs: no named parameters.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.5/5.0

    Scored across 17 tools

    Disambiguation5/5

    Each tool targets a distinct resource and action: profile, bank accounts, virtual accounts, QR codes, transactions, webhooks, and signature/key utilities. Even the webhook-related tools are cleanly separated by operation (create/update/delete/test/logs/stats). There is no meaningful overlap between tool responsibilities.

    Naming Consistency4/5

    All tools share the consistent monapay_ prefix, and most follow a clear monapay_verb_noun pattern. Minor deviations exist, such as monapay_me, monapay_webhook_logs, and monapay_webhook_stats, which read as noun phrases rather than action-oriented names, but the overall convention is still predictable.

    Tool Count4/5

    17 tools is slightly above the typical sweet spot for a well-scoped MCP server, but each tool earns its place in the payment/webhook lifecycle. QR management, webhook CRUD, webhook diagnostics, transaction lookup, and signature verification are all meaningful separate concerns.

    Completeness5/5

    The server covers the full incoming-payment workflow: QR creation/cancellation, bank/virtual account discovery, transaction reconciliation, webhook configuration and delivery monitoring, retry, and local HMAC verification. There are no obvious dead ends for the stated purpose of integrating with MONA Pay webhooks and VietQR payments.

    Maintenance

    ActivityNo data
    ResponsivenessSyncing

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      D
      maintenance
      Enables AI agents to integrate Midtrans payments by providing comprehensive documentation, API references, and code examples for 15+ payment methods across 5 languages. Includes tools for generating charge requests, webhook handlers, and searching documentation without requiring API keys.
      9
      17 PyPI
      1
      MIT
    • A
      license
      B
      quality
      B
      maintenance
      Enables AI agents to integrate Tunzaa Payments by generating accurate boilerplate code and webhook handlers. Operates in mock mode by default with optional live verification against Tunzaa APIs when credentials are provided.
      10
      ISC
    • A
      license
      C
      quality
      B
      maintenance
      Enables AI agents to manage MONA Cloud resources such as VPS and databases, use a shared VND wallet, integrate MONA Pay payments, and send transactional email via MONA Mail, all through natural language in MCP-compatible clients.
      135
      144 npm
      MIT