Back to Browse

Monapay MCP Server

Developer ToolsLow Risk10.0MCP RegistryLocal
Free

Server data from the Official MCP Registry

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

About

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

Security Report

10.0
Low Risk10.0Low Risk

Valid MCP server (3 strong, 2 medium validity signals). No known CVEs in dependencies. Package registry verified. Imported from the Official MCP Registry.

5 files analyzed · 1 issue found

Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.

Permissions Required

This plugin requests these system permissions. Most are normal for its category.

file_system

Check that this permission is expected for this type of plugin.

env_vars

Check that this permission is expected for this type of plugin.

Shell Command Execution

Runs commands on your machine. Be cautious — only use if you trust this plugin.

HTTP Network Access

Connects to external APIs or services over the internet.

What You'll Need

Set these up before or after installing:

MONA Pay API key client_id (create in dashboard my.monapay.vn).Optional

Environment variable: MONAPAY_CLIENT_ID

MONA Pay API key client_secret (shown once). Needed for write actions (create QR, webhooks).Required

Environment variable: MONAPAY_CLIENT_SECRET

Optional API base URL (default production).Optional

Environment variable: MONAPAY_BASE_URL

How to Install

Add this to your MCP configuration file:

{
  "mcpServers": {
    "vn-monapay-monapay-mcp": {
      "env": {
        "MONAPAY_BASE_URL": "your-monapay-base-url-here",
        "MONAPAY_CLIENT_ID": "your-monapay-client-id-here",
        "MONAPAY_CLIENT_SECRET": "your-monapay-client-secret-here"
      },
      "args": [
        "-y",
        "monapay-mcp"
      ],
      "command": "npx"
    }
  }
}

Documentation

View on GitHub

From the project's GitHub README.

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ếnBắt buộcÝ nghĩa
MONAPAY_CLIENT_IDcó (khuyến nghị)client_id của API key tạo trong dashboard
MONAPAY_CLIENT_SECRETcó (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_USERNAMEcách cũtên đăng nhập MONA Pay; chỉ dùng khi không có client credentials
MONAPAY_PASSWORDcách cũmật khẩu; tài khoản bật 2FA không dùng được cách này
MONAPAY_BASE_URLkhôngmặ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.

Tool

ToolLàm gì
monapay_whoamikiểm tra kết nối, đếm bank/VA và gợi ý kênh thông báo tiếp theo
monapay_mehồ sơ tài khoản đang đăng nhập
monapay_link_bank_start · monapay_link_bank_verify_otpnối tài khoản ACB và tạo VA bằng OTP lần 1
monapay_notification_register · monapay_notification_verify_otpbật thông báo tiền vào bằng OTP lần 2
monapay_list_bank_accounts · monapay_list_virtual_accountstài khoản ngân hàng đã nối, tài khoản ảo (VA)
monapay_get_payment_profile · monapay_set_payment_profilexem 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_checkouttạo link thu tiền, kiểm tra, lọc và huỷ phiên thanh toán
monapay_create_qr · monapay_cancel_qrtạo / huỷ VietQR động cho đơn hàng
monapay_list_transactionstra giao dịch tiền vào theo VA (đối soát)
monapay_list_webhooks · monapay_create_webhook · monapay_update_webhook · monapay_delete_webhookcấu hình webhook (HMAC-SHA256 khuyến nghị)
monapay_test_webhook · monapay_webhook_logs · monapay_webhook_statsbắn thử, lịch sử từng lần gửi, tỷ lệ thành công / P95
monapay_sandbox_transactionTạ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_configcấu hình email cho tối đa 10 người nhận
monapay_verify_email · monapay_resend_email_verification · monapay_test_emailxác minh bằng mã 6 số, gửi lại mã và gửi email thử
monapay_email_logs · monapay_email_statslị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_suppressionxem và gỡ địa chỉ bị chặn gửi
monapay_list_zalo_groups · monapay_create_zalo_group · monapay_update_zalo_group · monapay_delete_zalo_groupxem và cấu hình thông báo vào nhóm Zalo
monapay_test_zalo_group · monapay_zalo_group_logsgửi thử và tra lịch sử gửi nhóm Zalo
monapay_retry_transactiongửi lại webhook hoặc Telegram cho một giao dịch
monapay_generate_keysinh client_secret mới
monapay_rotate_keyxoay secret của key hiện tại khi nghi bị lộ; sau đó phải cập nhật MONAPAY_CLIENT_SECRET
monapay_verify_signaturekiểm chữ ký webhook ngay tại chỗ, không gọi mạng
monapay_generate_webhook_snippetcode 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

Reviews

No reviews yet

Be the first to review this server!