Unofficial MCP server for the ZEN.com Payment Gateway (payment links, transactions, refunds, payouts, reporting).
zen-mcp demonstrates solid fundamentals: all 14 tools have clear verb-noun names (create_payment_link, refund_transaction, etc.) and descriptions (avg ~100 chars). Input schemas are present with type constraints (minLength, maxLength, format, optional flags). Risk annotations (WRITE, DESTRUCTIVE, READ_ONLY) are well-applied. However, parameter descriptions are sparse, most params lack inline guidance on format, constraints, or dependencies. Output schemas are not documented. Error handling is basic (no recovery guidance visible). Idempotency keys are offered on write operations, which is good practice.
Destructive write: cancel a ZEN transaction. This may prevent or reverse payment processing; confirm before use.
Destructive write: capture an authorized transaction, causing funds to be collected. Confirm before use.
Write operation: create a customer record in ZEN for future payment flows; this stores personal data.
Write operation: create a hosted ZEN checkout link and QR code for a customer to pay.
Highest-risk destructive write: send money outward through ZEN. Verify recipient, channel, currency, and amount before use.
Read-only: request a transaction or settlement report download from ZEN.
Parameter descriptions are minimal or absent. Most params (e.g., 'status' in list_payment_links, 'format' in download_report) lack inline guidance on valid values, constraints, or format expectations. LLMs cannot infer whether 'status' means 'pending|completed|failed' or something else.
Output schemas are not documented. Tools return structured data (e.g., payment link objects, transaction details) but the response schema is not visible in tool definitions. LLMs cannot plan downstream calls or extract required fields without guessing.
Mutually exclusive parameters not documented. get_transaction accepts 'zenId' OR 'merchantTransactionId' but the description does not state this constraint. LLMs may pass both or neither, causing ambiguous failures.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2025-06-18+ | v2 |
Read-only: retrieve a hosted ZEN payment link by ID.
Read-only: retrieve a ZEN payout by its ZEN ID.
Read-only: retrieve a transaction by exactly one ZEN ID or merchant transaction ID.
Read-only: list hosted ZEN payment links.
Read-only: list payment methods available to the configured ZEN terminal.
Read-only: list currencies confirmed in the public ZEN documentation.
Destructive write: return all or part of a payment to the customer. Confirm the transaction and amount before use.
Read-only: verify a ZEN IPN webhook signature using the configured IPN secret.
Error handling lacks recovery guidance. No visible error messages that tell LLMs what to do next (e.g., 'User not found. Try search_users() first.'). Errors are likely raw API responses or generic messages.
Destructive operations (refund_transaction, capture_transaction, create_payout) lack confirmation or dry-run support. Agents can trigger irreversible financial actions without a safety gate.