MCP server MONA Pay: cho Claude Code, Cursor, Codex thu tiền thay bạn
Video hướng dẫn
Xem transcript video (8 phần)
Thu tiền ngay trong IDE
Bạn đang dùng Claude Code, Codex hoặc Cursor và muốn agent tự tạo QR, tra giao dịch, cấu hình webhook ngay trong lúc code. Nhưng đưa tài khoản đăng nhập cho agent vừa bất tiện, vừa vướng xác thực hai lớp. Trong video này, mình cài gói monapay-mcp từ npm, nối bằng khóa API và kiểm tra cách dùng bốn mươi bảy công cụ. Toàn bộ phần cài đặt chỉ cần Node mười tám trở lên và một tài khoản MONA Pay.
Cài gói từ npm
Trước hết, mở my.monapay.vn, vào API Keys, bấm Tạo key và lưu client_id cùng client_secret. Mã bí mật chỉ hiện một lần, nên đặt trong biến môi trường, không ghi vào mã nguồn. Gói trên npm có tên chính xác là monapay-mcp. Lệnh npx monapay-mcp chạy máy chủ qua stdio. Khi thêm vào một trình khách MCP, README dùng npx -y monapay-mcp để npm tự xác nhận việc chạy gói.
Cấu hình Claude Code
Với Claude Code, sao chép nguyên lệnh trong README. Hai tùy chọn -e truyền MONAPAY_CLIENT_ID và MONAPAY_CLIENT_SECRET; phần sau dấu -- là lệnh khởi động MCP. Sau khi thêm, mở lại phiên làm việc nếu trình khách chưa nhận cấu hình mới. Cách này lấy OAuth token bằng client credentials, nên agent không cần username hay mật khẩu. Tài khoản bật xác thực hai lớp vẫn dùng được bình thường.
Cấu hình Codex Cursor
Cursor dùng tệp .cursor/mcp.json, còn Codex dùng ~/.codex/config.toml. Với Codex, tạo mục [mcp_servers.monapay], đặt command là npx, args là -y và monapay-mcp, rồi khai báo hai biến môi trường. Claude Desktop dùng cấu trúc mcpServers tương tự Cursor. Kiểm tra cấu hình xong bằng cách yêu cầu agent đọc hồ sơ tài khoản hiện tại. Dù dùng trình khách nào, không commit giá trị thật của MONAPAY_CLIENT_SECRET vào git và không dán secret vào prompt công khai.
Bốn mươi bảy tool
Khi kết nối xong, agent có bốn mươi bảy tool chia theo công việc. Nhóm đọc hồ sơ và tài khoản có monapay_whoami, monapay_me, danh sách ngân hàng và VA. Nhóm thu tiền tạo checkout, tạo VietQR, tra giao dịch và tạo giao dịch sandbox. Nhóm vận hành tạo, sửa, thử webhook, đọc log và thống kê. Ngoài ra còn nhóm email, Zalo, xoay khóa, kiểm chữ ký và sinh code endpoint webhook cho PHP, Node hoặc Python.
Nối ngân hàng bằng OTP
Agent còn có thể nối tài khoản ACB bằng bốn bước có hai điểm dừng. Nó gọi monapay_link_bank_start, rồi phải hỏi bạn OTP lần đầu trước khi gọi monapay_link_bank_verify_otp. Tiếp theo, agent đăng ký thông báo bằng monapay_notification_register, hỏi OTP lần hai và mới gọi monapay_notification_verify_otp. Nếu OTP sai hoặc hết hạn, gọi lại bước trước để ngân hàng gửi mã mới. Agent không được tự đoán hoặc lưu OTP.
Giao agent tích hợp
Một yêu cầu thực tế có thể bắt đầu bằng câu: tích hợp nhận tiền chuyển khoản cho web này bằng MONA Pay. Agent kiểm tài khoản, lấy code mẫu nhận webhook, viết endpoint, đăng ký cấu hình HMAC, bắn thử và đọc log để chắc endpoint trả HTTP hai trăm. Sau đó nó tạo checkout cho từng đơn và chờ sự kiện CHECKOUT_PAID. Với webhook, chữ ký phải được kiểm trên raw body và transaction_code phải là khóa chống xử lý trùng.
Sửa lỗi và mở docs
Nếu MCP không lên, kiểm tra Node đã từ phiên bản mười tám, tên gói là monapay-mcp và đủ hai biến môi trường. Nếu vừa xoay khóa, secret cũ hết hiệu lực ngay; cập nhật MONAPAY_CLIENT_SECRET rồi khởi động lại agent. Hướng dẫn đầy đủ nằm ở trang npm và monapay.vn/docs/ai-agent. Bạn có thể đăng ký tại my.monapay.vn. Khi cần hỗ trợ, gọi một chín không không, sáu ba sáu, sáu bốn tám.
monapay-mcp là MCP server chính thức của MONA Pay. Sau khi cài, Claude Code, Cursor, Codex hoặc một MCP client khác có thể gọi 50 công cụ để tạo link thu tiền, tạo VietQR, tra giao dịch, cấu hình webhook và chạy sandbox ngay trong lúc làm code.
Tiền vẫn chuyển thẳng vào tài khoản ngân hàng của bạn. MCP chỉ dùng API MONA Pay để tạo và đọc dữ liệu theo lệnh bạn giao.
Chuẩn bị
- Node.js 18 trở lên.
- Tài khoản MONA Pay tại my.monapay.vn.
- Một khối cấu hình lấy từ dashboard: API Keys → Tạo key → Đưa cho AI agent.
Khối này có client_id và client_secret. Agent dùng hai giá trị đó để lấy Bearer token qua OAuth client credentials. Agent không cầm username hoặc mật khẩu, nên tài khoản bật xác thực 2 lớp vẫn dùng được.
Secret chỉ nên nằm trong biến môi trường hoặc cấu hình MCP trên máy của bạn. Không dán secret vào source, ảnh chụp, issue GitHub hoặc tin nhắn công khai.
Chạy thử từ terminal
Package trên npm có tên chính xác là monapay-mcp và cần Node.js 18 trở lên:
Server dùng giao tiếp stdio. Khi chạy qua một MCP client, dùng npx -y monapay-mcp để client tự khởi động đúng package.
| Biến môi trường | Dùng để làm gì |
|---|---|
MONAPAY_CLIENT_ID |
ID của API key trong dashboard |
MONAPAY_CLIENT_SECRET |
Secret của API key, dùng lấy OAuth token và ký quyền cho lệnh ghi |
MONAPAY_BASE_URL |
Tuỳ chọn, mặc định https://api.monapay.vn |
MONAPAY_USERNAME và MONAPAY_PASSWORD là cách tương thích cũ. Đội MONA khuyên dùng client_id và client_secret; cách dùng mật khẩu sẽ không chạy khi tài khoản bật xác thực 2 lớp.
Cấu hình Claude Code
Chép nguyên khối dashboard cấp cho bạn, hoặc thay hai giá trị mẫu dưới đây:
Mở lại Claude Code nếu client chưa nhận server, sau đó yêu cầu: Kiểm tra kết nối MONA Pay của tôi. MCP sẽ gọi monapay_whoami.
Cấu hình Cursor
Tạo hoặc cập nhật .cursor/mcp.json trong dự án:
Nếu file này chứa secret thật, thêm nó vào .gitignore trước khi commit. Khởi động lại Cursor rồi kiểm tra server monapay trong danh sách MCP.
Cấu hình Codex
Thêm vào ~/.codex/config.toml:
Khởi động lại Codex sau khi lưu. Nếu bạn xoay secret trong dashboard hoặc bằng tool monapay_rotate_key, hãy cập nhật MONAPAY_CLIENT_SECRET rồi khởi động lại client.
Các công cụ MCP
Mỗi tool trong manifest có nhãn phạm vi để client biết đây là lệnh đọc hay lệnh ghi. Các nhãn như read, checkout:write, webhooks:write mô tả loại thao tác của tool; OAuth token hiện trả scope: "*".
| Nhóm | Tool |
|---|---|
| Bắt đầu nhanh | monapay_quickstart |
| Kết nối và hồ sơ | monapay_whoami, monapay_me |
| Ngân hàng và VA | monapay_list_bank_accounts, monapay_list_virtual_accounts, monapay_link_bank_start, monapay_link_bank_verify_otp, monapay_notification_register, monapay_notification_verify_otp |
| Hồ sơ thanh toán | monapay_get_payment_profile, monapay_set_payment_profile |
| Link thu tiền | monapay_create_checkout, monapay_get_checkout, monapay_list_checkouts, monapay_cancel_checkout |
| VietQR | monapay_create_qr, monapay_cancel_qr |
| Giao dịch | monapay_list_transactions, monapay_get_transaction, monapay_get_transactions_summary, monapay_sandbox_transaction, monapay_retry_transaction |
| Webhook | monapay_list_webhooks, monapay_create_webhook, monapay_update_webhook, monapay_delete_webhook, monapay_test_webhook, monapay_webhook_logs, monapay_webhook_stats |
monapay_list_email_configs, monapay_create_email_config, monapay_update_email_config, monapay_delete_email_config, monapay_verify_email, monapay_resend_email_verification, monapay_test_email, monapay_email_logs, monapay_email_stats, monapay_list_email_suppressions, monapay_remove_email_suppression |
|
| Nhóm Zalo | monapay_list_zalo_groups, monapay_create_zalo_group, monapay_update_zalo_group, monapay_delete_zalo_group, monapay_test_zalo_group, monapay_zalo_group_logs |
| API key | monapay_generate_key, monapay_rotate_key |
| Chạy tại máy | monapay_verify_signature, monapay_generate_webhook_snippet |
MCP còn có resource monapay://docs/llms, monapay://docs/{slug} và prompt integrate-monapay. Tool monapay_verify_signature chạy tại máy, không gọi mạng.
Những câu bạn có thể giao thẳng cho AI
1. “Tạo link thu 250.000đ cho đơn DH10234 và chạy ở sandbox.”
Agent gọi monapay_create_checkout với amount: 250000, order_code: "DH10234", sandbox: true, rồi trả checkout_url. Khi cần kiểm lại, agent gọi monapay_get_checkout.
2. “Tra 20 giao dịch mới nhất của tài khoản ảo MONA0000010234.”
Agent gọi monapay_list_transactions với số VA, trang 1 và giới hạn 20. Đây là lệnh đọc, phù hợp để đối soát mà không đổi cấu hình.
3. “Tạo webhook HMAC cho shop này, bắn thử và kiểm tra log giúp tôi.”
Agent có thể lấy code bằng monapay_generate_webhook_snippet, tạo cấu hình bằng monapay_create_webhook, gọi monapay_test_webhook, rồi đọc monapay_webhook_logs. Bạn chỉ nên chốt xong khi endpoint trả HTTP 200, 201 hoặc 202.
Chỗ agent phải dừng để hỏi bạn
- Nối ACB có 2 mã OTP do ngân hàng gửi về điện thoại. Agent phải hỏi bạn ở cả hai bước, không được đoán mã.
- Thêm địa chỉ nhận email có mã xác minh 6 số. Agent phải chờ bạn đọc mã trong hộp thư.
- Nhóm Zalo cần
group_idthật và đã có bot Gấu Mona.
Các tool ghi tự gửi X-Client-Secret khi đã cấu hình MONAPAY_CLIENT_SECRET. Dùng một API key riêng cho từng máy hoặc từng dự án để có thể thu hồi đúng chỗ khi secret bị lộ. Khi nghi lộ secret, gọi monapay_rotate_key, cập nhật cấu hình rồi khởi động lại MCP client; secret cũ hết hiệu lực ngay.
Lỗi thường gặp
| Hiện tượng | Cách kiểm |
|---|---|
| MCP client không thấy server | Chạy node --version, cần từ 18; chạy npx -y monapay-mcp trong terminal để xem lỗi khởi động |
monapay_whoami trả 401 |
Chép lại đúng cặp client_id và client_secret từ cùng một API key |
| Lệnh ghi bị từ chối | Kiểm MONAPAY_CLIENT_SECRET, khởi động lại client sau khi xoay key |
| Webhook test thất bại | URL phải public qua HTTPS; đọc monapay_webhook_logs để xem HTTP code và thời gian phản hồi |
Cài MCP MONA Cloud qua 5 cửa AI
Claude Code
Chạy trong terminal.
Claude.ai (người bấm)
Vào Settings → Connectors → Add custom connector. Điền tên và URL, bấm Add rồi đăng nhập MONA Pass.
Codex
Thêm vào ~/.codex/config.toml.
Gemini (Antigravity)
Chạy trong terminal. Cấu hình lưu tại ~/.gemini/config/mcp_config.json; kiểm tra bằng agy mcp list.
Cursor
Thêm vào .cursor/mcp.json.
Giao thẳng cho AI tự cài
Qua endpoint chung, đăng nhập MONA Pass rồi gọi monapay_link một lần. Muốn dùng API key riêng thì chạy tại máy bằng npx -y monapay-mcp.
Đặc tả đầy đủ: MCP manifest · Tài liệu cho AI agent · Sandbox