monapay-mcp
OfficialMCP server giúp AI agent hoặc lập trình viên tích hợp MONA Pay ngay trong IDE: quản lý tài khoản, nối ngân hàng, tạo VietQR, tra giao dịch, cấu hình webhook và kiểm chữ ký.
Kiểm tra kết nối và hồ sơ tài khoản (monapay_whoami, monapay_me)
Nối tài khoản ACB và tạo tài khoản ảo qua OTP (monapay_link_bank_start/verify_otp, monapay_notification_register/verify_otp)
Liệt kê tài khoản ngân hàng và tài khoản ảo (monapay_list_bank_accounts, monapay_list_virtual_accounts)
Tạo và huỷ VietQR động cho đơn hàng (monapay_create_qr, monapay_cancel_qr)
Tra giao dịch tiền vào theo VA để đối soát (monapay_list_transactions)
Quản lý webhook: tạo, sửa, xoá, danh sách (monapay_create/update/delete/list_webhooks)
Bắn thử webhook, xem lịch sử gửi và thống kê thành công/P95 (monapay_test_webhook, monapay_webhook_logs, monapay_webhook_stats)
Gửi lại thông báo webhook/Telegram cho giao dịch (monapay_retry_transaction)
Tạo client_secret mới và kiểm chữ ký HMAC-SHA256 ngay tại chỗ (monapay_generate_key, monapay_verify_signature)
Lấy code mẫu nhận webhook PHP/Node/Python (monapay_generate_webhook_snippet)
Truy cập tài liệu dạng markdown qua resource monapay://docs/...
Allows triggering or retrying MONA Pay transaction notifications sent via Telegram.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@monapay-mcpCreate a VietQR code for order #12345 and check if the webhook was received."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
monapay-mcp — MCP server cho MONA Pay
MONA Pay là cổng thanh toán và API ngân hà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. Không cần rời IDE.
Cài đặt
Cần Node ≥ 18 và một tài khoản MONA Pay (đăng ký xong dùng ngay, không cần duyệt): https://my.monapay.vn/auth?mode=register
npx monapay-mcp # chạy server qua stdioBiến môi trường:
Biến | Bắt buộc | Ý nghĩa |
| có (khuyến nghị) | client_id của API key tạo trong dashboard |
| 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 |
| cách cũ | tên đăng nhập MONA Pay; chỉ dùng khi không có client credentials |
| cách cũ | mật khẩu; tài khoản bật 2FA không dùng được cách này |
| không | mặc định |
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-mcpCursor (.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ì |
| kiểm tra kết nối, đếm bank/VA và gợi ý kênh thông báo tiếp theo |
| hồ sơ tài khoản đang đăng nhập |
| nối tài khoản ACB và tạo VA bằng OTP lần 1 |
| bật thông báo tiền vào bằng OTP lần 2 |
| tài khoản ngân hàng đã nối, tài khoản ảo (VA) |
| xem hoặc thiết lập hồ sơ dùng cho trang thanh toán |
| tạo link thu tiền, kiểm tra, lọc và huỷ phiên thanh toán |
| tạo / huỷ VietQR động cho đơn hàng |
| tra giao dịch tiền vào theo VA (đối soát) |
| cấu hình webhook (HMAC-SHA256 khuyến nghị) |
| bắn thử, lịch sử từng lần gửi, tỷ lệ thành công / P95 |
| 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). |
| cấu hình email cho tối đa 10 người nhận |
| xác minh bằng mã 6 số, gửi lại mã và gửi email thử |
| lịch sử meta, tỷ lệ thành công / P95 và nhóm lỗi gửi email |
| xem và gỡ địa chỉ bị chặn gửi |
| xem và cấu hình thông báo vào nhóm Zalo |
| gửi thử và tra lịch sử gửi nhóm Zalo |
| gửi lại webhook hoặc Telegram cho một giao dịch |
| sinh client_secret mới |
| xoay secret của key hiện tại khi nghi bị lộ; sau đó phải cập nhật |
| kiểm chữ ký webhook ngay tại chỗ, không gọi mạng |
| 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.
Gọi
monapay_link_bank_startvớ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.Hỏi người dùng OTP rồi gọi
monapay_link_bank_verify_otp. Tool trảvirtual_account_idvà số VA.Gọi
monapay_notification_registervớivirtual_account_id; ACB gửi OTP lần 2.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 GETTà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 toolsmonapay_cancel_qrHuỷ mã QRB
Huỷ một mã VietQR động đã tạo. / Cancel a dynamic QR.
| Name | Required | Description | Default |
|---|---|---|---|
| qr_code_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only says cancellation happens, without revealing whether the cancellation is irreversible, what happens if the QR was already scanned, or any side effects on associated transactions. This is a significant transparency gap for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description uses two short, parallel sentences (Vietnamese and English) that communicate the action directly. It is front-loaded, scannable, and wastes no words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter mutation tool with no annotations and no output schema, this description is too thin. It omits parameter semantics, behavioral side effects, and any response hints. An agent would need to infer too much to invoke it correctly and confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description does not mention qr_code_id at all. While the parameter name is somewhat self-explanatory, the description fails to compensate for the lack of schema documentation. An agent is left guessing what value to pass and how to obtain it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Cancel a dynamic QR' (Huỷ một mã VietQR động đã tạo). This clearly distinguishes it from siblings like monapay_create_qr and monapay_cancel_checkout. The bilingual text reinforces the same unambiguous action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'already created' implies a prerequisite: the QR must be dynamic and existing. However, there is no explicit guidance on when to use this versus alternatives like monapay_cancel_checkout, nor any mention of conditions or exclusions. The usage context is only lightly implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Số tiền VND (số nguyên) | |
| userId | No | ||
| orderId | Yes | Mã đơn hàng của hệ thống anh chị | |
| ownerType | No | PER cá nhân / ORG doanh nghiệp | PER |
| merchantId | Yes | Mã merchant (hiển thị ở dashboard mục Tạo QR) | |
| terminalId | No | WEB | |
| description | No | Nội dung chuyển khoản, nên chứa mã đơn | |
| loyaltyCode | No | ||
| ownerNumber | Yes | Số tài khoản ACB nhận tiền | |
| traceNumber | No | ||
| voucherCode | No | ||
| beneficiaryName | Yes | Tên đơn vị hưởng | |
| virtualAccountPrefix | Yes | Đầu số tài khoản ảo đã đăng ký |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It adds valuable context beyond the schema: the customer scans the QR, funds go to a virtual account, and MONA Pay fires a webhook. This explains the operational consequence of calling the tool, though it does not discuss idempotency, expiry, or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loaded with the core action, and includes a useful behavioral sentence. The English summary is mildly redundant with the Vietnamese sentence but serves bilingual users without adding meaningful bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 13 parameters, no annotations, and no output schema, so the description should compensate for more. It explains the payment flow and webhook behavior, which is helpful, but it does not describe what the tool returns (e.g., QR image, URL, or ID), nor does it give guidance on prerequisites or when to prefer this over related Monapay payment tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 62%, so the schema already documents most key parameters. The description adds a small semantic clue by saying 'điền sẵn số tiền + nội dung', which maps to the `amount` and `description` parameters, but it does not explain ambiguous optional parameters like `traceNumber`, `loyaltyCode`, or `voucherCode`.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states a specific verb ('Tạo'), resource ('mã VietQR động'), and context ('cho một đơn hàng qua ACB'). This clearly distinguishes it from siblings like monapay_create_checkout and monapay_cancel_qr, and adds behavioral specifics beyond the title.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when the tool should be used ('cho một đơn hàng' / for an order) and describes the QR flow, but it does not explicitly contrast it with alternatives such as monapay_create_checkout, monapay_link, or static QR generation. There are no exclusions or if-then routing cues.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| auth_type | No | HMAC_SHA256 | |
| secret_key | No | Secret ký HMAC hoặc giá trị API key | |
| webhook_url | Yes | ||
| api_key_name | No | Tên header khi auth_type=API_KEY, mặc định X-Webhook-Secret | |
| payload_format | No | application/json | |
| virtual_account_id | No | Chỉ bắn cho VA này; bỏ trống = mọi tài khoản |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must carry full behavioral disclosure. It states the side effect of registering a webhook and recommends HMAC_SHA256 plus secret_key, but it does not explain whether secret_key is required or auto-generated for HMAC, whether the URL is validated, when the webhook becomes active, or what the response contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, with the core purpose and a useful security recommendation. The English trailing phrase 'Create a webhook config' largely repeats the title, so there is minor redundancy, but overall it is compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter mutation tool with no annotations, no output schema, and only 43% schema coverage, this description is incomplete. It omits required-field semantics, conditional behavior for auth types, notification scope details, and the expected result or error cases, leaving the agent to guess important configuration choices.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 43%, so the description should compensate. It adds a recommendation involving auth_type and secret_key, but it does not explain the required 'name' field, clarify webhook_url expectations beyond 'URL', or describe payload_format and virtual_account_id behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Đăng ký URL nhận webhook' / 'Create a webhook config') and the triggering condition ('khi có tiền vào' / when money comes in). It distinguishes this from update/delete/list webhook siblings by the explicit create/register framing, though it does not name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it: when you need a webhook to receive incoming-payment notifications. However, it does not explicitly tell the agent when to prefer this over monapay_update_webhook, monapay_test_webhook, or monapay_generate_webhook_snippet, and it omits prerequisites or conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
monapay_delete_webhookXoá cấu hình webhookC
Xoá một webhook config. / Delete a webhook config.
| Name | Required | Description | Default |
|---|---|---|---|
| config_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral disclosure burden. It only restates the delete operation and adds nothing about permanence, failure behavior, side effects, authentication needs, or response shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, short, front-loaded sentence in two languages with no wasted words. However, it largely repeats the tool name and title, so the conciseness does not add much informational value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter delete operation, the core instruction is present and minimally usable. But with no annotations and no output schema, the agent is left without behavioral expectations or any guidance on locating config_id, so completeness is only adequate for a very simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and config_id is only described as a required string. The description adds the minimal context that the resource is a 'webhook config', which lets an agent infer that config_id identifies that config, but it does not explain how to obtain the ID or any format expectations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: 'Delete a webhook config', and the Vietnamese title reinforces it. It is clearly distinct from sibling operations like monapay_create_webhook, monapay_update_webhook, or monapay_test_webhook because of the delete verb, even without explicit comparison.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, no prerequisites (e.g., that the config must exist, that the operation is irreversible), and no indication that config_id should be obtained from monapay_list_webhooks. The sibling list shows many webhook-related operations, but the description provides no routing help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | mcp |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It usefully discloses that the secret is shown only once ('hiện 1 lần'), which is critical for the agent. However, it does not mention whether existing keys remain valid, whether generation has side effects, or any security/rate-limit implications; the English portion omits the one-time display detail entirely.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, with the key action and one-time display behavior placed first. The bilingual repetition is mostly redundant, and the crucial 'shown once' detail appears only in Vietnamese, which slightly harms structure and accessibility.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no output schema, the description partially explains the result: a new client_secret is generated, displayed once, and used in a header. However, it lacks explicit return/format details, parameter semantics, and any indication of whether previous secrets are affected, so the information is adequate but incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one optional string parameter 'name' with default 'mcp' and no schema description (0% coverage). The description never mentions this parameter, so the agent cannot know what 'name' represents or whether it affects the generated key. The optional/default nature lowers the risk, but semantic meaning is entirely absent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb and resource: generate a new client_secret, and it explains the intended use via the X-Client-Secret header. This makes the tool's purpose understandable and distinct in practical terms, though it does not explicitly contrast it with the sibling monapay_rotate_key.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidance is provided about when to choose this tool over alternatives such as monapay_rotate_key or mail_api_key_create. The description implies it is for obtaining a new client_secret but gives no conditions, exclusions, or context about when generation is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| language | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It clearly states the output is sample code with HMAC verification and a sample payload, but it does not explicitly disclose that the tool only returns code and does not create, modify, or register a webhook endpoint or send a test request.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single bilingual sentence with no filler. It front-loads the core purpose and packs the key details, supported languages and HMAC verification, into compact form.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter code-snippet tool, the description covers the main facts a caller needs: the output kind, supported languages, HMAC verification, and sample payload. It could be slightly more complete by noting the tool has no side effects and does not configure an actual webhook, but the gap is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only one parameter, language, and schema description coverage is 0%. The description compensates by listing the supported languages (PHP, Node, Python), matching the enum values, but it does not explain any behavioral differences between language choices or how the response might vary.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Trả code mẫu' / get) and a specific resource (webhook receiver endpoint with HMAC verification) for PHP, Node, and Python. It clearly differentiates this code-generation tool from sibling webhook configuration/management tools such as monapay_create_webhook or monapay_webhook_stats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case: call this when you need sample receiver code for a MONA Pay webhook. However, it does not explicitly state when not to use it or name alternatives, such as monapay_verify_signature for actually verifying a signature or monapay_create_webhook for registering a webhook.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Liệt kê' implies a read-only enumeration, but the description does not explicitly state that the operation has no side effects, what it returns, or whether any authentication/authorization constraints apply beyond MONA Pay linkage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is minimal and front-loaded with the action and resource. The bilingual phrasing adds a little length but does not introduce filler or ambiguity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only listing tool, the description provides enough context to invoke it correctly: it names the resource, the platform, and the operation. The main gap is the absence of an output schema means the description could be slightly more explicit about the returned account fields, but this does not prevent correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero properties and 100% description coverage, so there are no parameters to explain. A baseline of 4 is appropriate for a no-parameter tool; the description correctly implies that no inputs are required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb, 'Liệt kê' (list), and a specific resource: bank accounts linked to MONA Pay. It is specific enough to distinguish this tool from siblings like monapay_list_virtual_accounts, monapay_list_transactions, and monapay_link_bank_start. The 'ACB…' example reinforces that these are real connected bank accounts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use this tool to retrieve bank accounts already linked to MONA Pay. It does not explicitly name alternatives or state when not to use it, but the resource scope is clear enough for a simple zero-parameter listing operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| limit | No | ||
| virtual_account_number | Yes | Số tài khoản ảo (bắt buộc; lấy từ monapay_list_virtual_accounts) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it does disclose real behavior: filtering by virtual account, pagination capped at 100 per page, and incoming-only scope. But it omits ordering of results, whether pending/failed transactions are included, and any read-only guarantee — details that matter for a reconciliation workflow.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The Vietnamese sentence is efficient and front-loaded with verb+resource+scope, with every clause earning its place. The trailing English fragment 'List incoming transactions' adds nothing beyond the title and is mild redundancy, preventing a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-parameter list tool with no output schema and no annotations, the description covers the essentials: what is listed, the required filter, the pagination cap, and the reconciliation use case. Gaps remain: no indication of return shape, no transaction-status semantics, and no disambiguation from monapay_list_checkouts, which an agent might confuse it with.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% (only virtual_account_number is documented), so the description must compensate. The pagination clause ('phân trang tối đa 100/trang') explains the limit/page semantics beyond the bare schema, but it does not explicitly define what 'page' means or how results are ordered, and it partly duplicates the schema's maximum:100 constraint.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Liệt kê' / list), a concrete resource (incoming transactions — 'giao dịch tiền vào'), and the scoping dimension (by virtual account). This distinguishes it from sibling tools like monapay_list_checkouts and monapay_list_webhooks without needing to open the schema. It falls short of 5 because it never names a sibling to contrast against.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'dùng để đối soát' (used for reconciliation) provides an explicit use case, which is genuine context an agent can act on. However, there is no guidance on when NOT to use it or which alternative to choose (e.g., monapay_list_checkouts for order-facing transactions), leaving selection among the many monapay list_* tools to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| bank_account_id | Yes | UUID tài khoản ngân hàng (lấy từ monapay_list_bank_accounts) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. 'List' clearly signals a read-only, non-destructive operation, which is the most important behavior. However, it does not mention pagination, response format, authentication requirements, or any limitations such as whether the result is ordered or capped.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single bilingual sentence with no filler or repetition. It front-loads the verb and resource, and the English version clarifies the Vietnamese without adding unnecessary length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one fully documented parameter and no output schema, the description is nearly complete: it states the action, the resource, and the scope. The only minor gap is the absence of any comment about result shape or pagination, but the low complexity of this list operation makes that a small omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents bank_account_id, including where to obtain it from monapay_list_bank_accounts. The description adds no parameter-level meaning beyond what the schema provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List') and a precise resource ('virtual accounts of a bank account'), making the operation immediately identifiable. It inherently distinguishes this tool from sibling list operations such as monapay_list_bank_accounts by making clear it lists virtual accounts scoped to a bank account, not bank accounts themselves.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case: when an agent needs virtual accounts belonging to a specific bank account. The parameter schema additionally points the agent to monapay_list_bank_accounts as the source of bank_account_id, which helps with prerequisites, but the description itself gives no explicit when-to-use or when-not-to-use guidance compared to alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
monapay_list_webhooksDanh sách cấu hình webhookA
Liệt kê webhook đã cấu hình. / List webhook configs.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and 'list' communicates a read-only retrieval with no side effects. It does not describe return format, pagination, or permissions, but for a zero-parameter list operation this is minimally adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the action and resource. The Vietnamese and English versions duplicate the same information, but the redundancy is minor and the entire description fits in one compact line.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter list tool, the description is sufficient to select and invoke the tool. It is less complete for post-call interpretation because there is no output schema and the description does not describe response fields, pagination, or how it differs from webhook stats/logs tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters and 100% schema coverage, so there are no parameter semantics for the description to add. The baseline of 4 for zero-parameter tools applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Liệt kê / List') on a clear resource ('webhook configs'), so an agent knows exactly what this tool returns. It also distinguishes the tool from sibling webhook tools that create, update, delete, test, log, or collect stats on webhooks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied: call this when the agent needs to see the list of configured webhooks. However, it does not explicitly state when not to use it or point to closely related alternatives such as monapay_webhook_stats or monapay_webhook_logs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the burden. 'Get' implies a read-only operation and 'đang đăng nhập' indicates the current authenticated account, which is useful. However, the description does not explicitly state side-effect-free behavior, error conditions, or authentication requirements beyond the implication.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler, and the bilingual wording is front-loaded with the core action. It is concise while conveying the resource, scope, and sample output fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple no-parameter profile tool with no output schema, the description is reasonably complete by naming the data it returns (id, tên, trạng thái). It lacks differentiation from sibling tools, but that gap is more about usage guidance than contextual completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool accepts zero parameters, so the description does not need to explain parameter meanings. The baseline for zero-parameter tools is 4, and the description appropriately confirms the operation without inventing parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Get') and resource ('current MONA Pay client profile') and even lists the expected fields (id, tên, trạng thái). However, it does not distinguish this tool from the sibling monapay_whoami, which appears to serve the same purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives some context ('đang đăng nhập' / currently logged in) but provides no when-to-use guidance or exclusions. With siblings like monapay_whoami and monapay_get_payment_profile nearby, an agent cannot tell when to choose this tool over those.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| target_id | No | ||
| target_type | No | WEBHOOK | |
| transaction_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the key behavior—re-sending a webhook/Telegram notification—but it does not mention side effects such as duplicate delivery, prerequisites, or whether the action is reversible. This is enough for the core action but lacks deeper behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single direct sentence repeated in Vietnamese and English, with no filler. It is appropriately sized for a simple retry operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 3 parameters, no output schema, and no annotations, yet the description only covers the general purpose. It omits the meaning of target_id, the default target_type behavior, and what the response indicates about success or failure, so an agent has to guess at a non-trivial part of invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It maps target_type to 'webhook/Telegram' and transaction_id to 'transaction', but it says nothing about target_id, the default target_type behavior, or what happens when target_id is omitted. This leaves important invocation details undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Re-send') and a specific resource scope ('webhook/Telegram for a transaction'), which is distinct from sibling tools like monapay_test_webhook or monapay_sandbox_transaction. The bilingual text reinforces the same clear purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'cho giao dịch đã có / for a transaction' implies the tool is for existing transactions, so an agent can infer when to use it. However, it gives no explicit guidance about when not to use it or which sibling would be a better alternative for testing or creating notifications.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| auth_type | No | ||
| secret_key | No | ||
| webhook_url | No | Bỏ trống = dùng config đã lưu |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It transparently reveals that a fake transaction (is_dummy) is sent to the URL and that the goal is endpoint/signature testing. However, it does not mention whether the test creates logs, whether it requires a saved webhook config, what side effects occur on MONA Pay, or what the caller receives back.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one compact sentence with the core purpose front-loaded. The English translation 'Send a dummy webhook' is largely redundant, but it does not add significant noise. It is appropriately sized for a straightforward test action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description should indicate what result the agent can expect—such as HTTP status, delivery success, or signature validation outcome. It does not. It also leaves the roles of auth_type, secret_key, and the saved-config fallback to the schema, making invocation details under-specified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33%: only webhook_url has a description, and it is in Vietnamese. auth_type and secret_key are undocumented in both the schema and the tool description; the agent can only infer they relate to signing from the signature-testing phrase. With low schema coverage, the description needed to explain these parameters but did not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action: MONA Pay sends a dummy webhook (is_dummy) to a URL to verify the endpoint and chữ ký (signature). This clearly identifies the resource and purpose. However, it does not explicitly distinguish it from sibling tools such as monapay_sandbox_transaction or monapay_verify_signature, so it stops one step short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'để kiểm tra endpoint + chữ ký' gives an explicit use context: use this tool when you need to test whether a webhook endpoint receives and validates signatures. It does not mention exclusions or name alternative tools, but the scene is clear enough for an agent to decide when this tool fits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
monapay_update_webhookSửa cấu hình webhookC
Cập nhật webhook (URL, secret, bật/tắt). / Update a webhook config.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| auth_type | No | ||
| config_id | Yes | ||
| is_active | No | ||
| secret_key | No | ||
| webhook_url | No | ||
| api_key_name | No | ||
| payload_format | No | ||
| virtual_account_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states that the tool updates fields like URL, secret, and active status, but it does not disclose whether updates are partial or full replacement, what happens if the config_id is invalid, whether secret keys are returned or write-only, or what effects the update has on live webhook delivery.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, using a parenthetical to list the main updatable aspects and a bilingual sentence to reinforce the purpose. The duplication between Vietnamese and English costs some efficiency, but overall the description is appropriately brief for its clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 9 parameters, no annotations, and no output schema, the description is far too sparse. It does not mention the required config_id parameter, the available auth types, payload formats, or what the tool returns upon success. An agent would struggle to know exactly how to construct a valid update request without additional information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the 9 undocumented parameters. It provides some mapping for webhook_url, secret_key, and is_active, but it omits important parameters like config_id, auth_type, api_key_name, payload_format, and virtual_account_id, leaving the agent without semantic guidance for those fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool updates an existing webhook config and gives concrete examples of what can be changed (URL, secret, enable/disable). It distinguishes itself from create/list/delete webhook siblings through the explicit 'update' verb, though it could more explicitly separate itself from the delete/test sibling operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives like monapay_create_webhook or monapay_delete_webhook. The verb 'update' implies modifying an existing webhook, but no context is given about prerequisites, such as needing an existing config_id, or when creation would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| secret | Yes | ||
| raw_body | Yes | ||
| signature | Yes | ||
| timestamp | Yes | ||
| tolerance_sec | No | ||
| skip_time_check | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations and no output schema, the description carries the behavioral burden. It delivers genuine value by disclosing the HMAC-SHA256 algorithm and the no-network-call behavior. However, it does not disclose what happens on signature mismatch (return false vs. error), the return shape, or how the timestamp tolerance rules behave.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact (~25 words) and front-loads the algorithm, purpose, inputs, and offline trait in the first sentence. The second English sentence is largely redundant with the first, adding only the 'locally' gloss, so there is minor waste, but overall it is well-sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, no annotations, and 0% parameter descriptions, the description should specify the return value on success/failure and how raw_body must be formatted (e.g., exact HTTP body vs. parsed JSON). The description explains the computation at a high level but leaves the agent unable to predict the tool's response, which is a significant gap for a verification utility.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds real semantics by showing how raw_body, timestamp, and secret combine into the HMAC computation, and signature is implied by 'so chữ ký'. However, tolerance_sec and skip_time_check are left entirely to their self-descriptive names, which is thin compensation for the 0% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (verify), a specific resource (MONA Pay webhook signature), the exact algorithm (HMAC-SHA256), and the input composition (raw body + timestamp + secret). The added 'offline'/'không gọi mạng' trait clearly differentiates it from network-triggering siblings like monapay_test_webhook and monapay_generate_webhook_snippet.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The offline/local framing gives implied usage context: use this to verify a signature without making network calls. However, it never explicitly names alternatives or states when NOT to use it, leaving the agent to infer the boundary against siblings like monapay_test_webhook.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| limit | No | ||
| status | No | ||
| to_date | No | ||
| from_date | No | YYYY-MM-DD |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden; it does disclose that each log entry contains the HTTP code, response time, and error label of a send attempt, which is genuinely useful behavioral context for a read-only list tool. However, it does not disclose pagination defaults/limits, date-range semantics, or explicitly confirm these are outgoing delivery attempts to configured webhooks.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short clauses totaling well under 20 words, with the core concept ('webhook delivery logs') front-loaded in English followed by the richer Vietnamese detail. The bilingual repetition is mildly redundant but each clause is compact, specific, and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 5-parameter read-only list tool, the description conveys the core return content (HTTP code, response time, error label), which partially offsets the missing output schema. It omits pagination behavior, to_date format, whether logs span all configured webhooks, and the default state of the status filter, so an agent still faces small but real ambiguities.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only from_date ('YYYY-MM-DD') is documented in the schema, so coverage is 20%; the description compensates with nothing — it names no parameter and explains no filter or pagination semantics. page, limit, status, and to_date meanings must be inferred from their names, and the to_date format is left unspecified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies both the resource ('webhook delivery logs') and the content of each record ('HTTP code, response time, error label'), clearly identifying this as a list of individual delivery attempts. It is implicitly distinguishable from monapay_list_webhooks (webhook configurations) and monapay_webhook_stats (aggregate statistics) by subject matter, though it never names them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance appears anywhere in the description — it does not say when to prefer this over monapay_webhook_stats or monapay_list_webhooks, nor does it state any exclusions or prerequisites. An agent must infer routing from the tool name and the terse content list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
monapay_webhook_statsThống kê webhookB
Tỷ lệ thành công, P95, phân loại lỗi. / Webhook delivery stats.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations and no output schema, the description carries full responsibility for behavioral disclosure. It does reveal the key output dimensions (success rate, P95, error classification), which is meaningful. However, it omits important traits such as whether the data is read-only, what time range is covered, whether it aggregates all webhooks or a subset, and what the response structure looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: a short Vietnamese phrase listing the metrics followed by an English translation. Every word adds value, and the key information is front-loaded. There is no repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter stats tool, the description names the three most important metrics, but it leaves gaps around the aggregation period, scope (which webhooks are included), and the exact output format. Since there is no output schema or annotation, these omissions could lead an agent to misinterpret the data or make wrong assumptions about the returned payload.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is empty and there are zero parameters, so there are no parameter semantics to document. The baseline of 4 applies because the description does not need to add parameter meaning, and it doesn't introduce any confusing parameter-related text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource (webhook stats) and lists concrete metrics (success rate, P95, error classification), which clearly communicates what the tool provides. It also differentiates from sibling tools like monapay_webhook_logs, which focus on raw logs. However, it uses a noun phrase ('Webhook delivery stats') rather than an explicit verb like 'get' or 'retrieve'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidance is provided. The description does not explain when to choose this tool over alternatives such as monapay_webhook_logs or monapay_email_stats, nor does it mention any prerequisites or filtering context. An agent must infer usage entirely from the name and metric list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
17 tool updates
v0.1.0- First observed
monapay_cancel_qr - First observed
monapay_create_qr - First observed
monapay_create_webhook - First observed
monapay_delete_webhook - First observed
monapay_generate_key - First observed
monapay_generate_webhook_snippet - First observed
monapay_list_bank_accounts - First observed
monapay_list_transactions - First observed
monapay_list_virtual_accounts - First observed
monapay_list_webhooks - First observed
monapay_me - First observed
monapay_retry_transaction - First observed
monapay_test_webhook - First observed
monapay_update_webhook - First observed
monapay_verify_signature - First observed
monapay_webhook_logs - First observed
monapay_webhook_stats
TDQS
Scored across 17 tools
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.
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.
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.
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
Related MCP Connectors
Vietnam payments for AI agents — MoMo wallet QR, ATM, cards. Zero-setup sandbox. Never holds funds.
Let AI agents add Yolfi crypto checkout, paylinks, webhooks, and status checks.
Stripe payments for AI agents. Create links, verify, manage customers.
Form companies, manage bank accounts, cards, invoices and more — directly from your AI coding tools.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables 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.91MIT

Tunzaa MCP Serverofficial
FlicenseAqualityCmaintenanceEnables 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-
Yolfiofficial
AlicenseAqualityAmaintenanceYolfi Agent Kit for AI coding agents: receive crypto, SaaS payment, stablecoin checkout, payment links, payment status checks, webhook verification, and webhook-based access logic to applications through Yolfi1327 npm188MIT- AlicenseNot gradedqualityBmaintenanceLets AI agents accept Vietnam payments via MoMo wallet QR and cards with zero-setup demo; provides create payment link and query status tools.MIT