MCP server for JazzCash — mobile wallet, mobile account, OTC vouchers, refunds (Pakistan)
Strong foundation with clear naming, comprehensive descriptions, and proper Zod schemas. All 5 tools follow verb_noun pattern (create_*, check_*, refund_*). Descriptions are detailed (150-250 chars) and include critical context about money-moving operations and non-idempotency. Input schemas are well-defined with types and descriptions for all parameters. Tool annotations correctly flag destructive/irreversible operations. Main gaps: output schema not documented (what fields does JazzCashResponse contain?), no pagination/batching patterns (not applicable here), and error handling could be more granular (currently catches all errors uniformly). Parameter descriptions are strong but could benefit from explicit format constraints (e.g., mobile_number regex pattern in description, not just '03XXXXXXXXX' example).
Look up the status of a JazzCash transaction by its reference (PaymentInquiry/Inquire). Read-only; returns the current pp_ResponseCode/pp_ResponseMessage for the queried transaction.
Create a CNIC-enabled JazzCash Mobile Account payment (MWALLET with the last 6 CNIC digits). amount is in PKR rupees. Returns pp_ResponseCode/pp_ResponseMessage. Money-moving and non-idempotent.
Create a JazzCash Mobile Wallet (MWALLET) payment. amount is in PKR rupees (converted to paisa). txn_ref is auto-generated when omitted. Returns the JazzCash pp_ResponseCode/pp_ResponseMessage. Money-moving and non-idempotent — do not retry blindly.
Create a JazzCash Over-The-Counter (OTC) voucher payment. amount is in PKR rupees. The response carries a voucher number the customer redeems offline at a JazzCash outlet (there is no redeem API). Money-moving and non-idempotent.
Refund a JazzCash transaction (authorize/Refund). amount is in PKR rupees. IRREVERSIBLE — moves money back to the customer. Per JazzCash, refunds apply to card transactions; verify applicability for wallet/OTC.
Output schema (JazzCashResponse) not documented in tool definitions. LLMs cannot plan downstream operations or extract required fields without knowing response structure.
Parameter format constraints (mobile_number, cnic, txn_ref) documented only as examples in descriptions, not as regex patterns or formal constraints. LLMs may generate invalid formats.
Error handling is generic (catch-all try/catch). No distinction between retryable errors (timeout, rate limit) vs user-fixable (invalid mobile number) vs fatal (auth failure). LLM cannot determine recovery strategy.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 65 | 2026-07-28+ | v2 |
No confirmation/dry-run pattern for irreversible operations (create_payment, refund_payment). Agents cannot preview consequences before committing money-moving actions.
Credentials (JAZZCASH_MERCHANT_ID, JAZZCASH_PASSWORD, JAZZCASH_INTEGRITY_SALT) validated at startup but no explicit documentation of required environment variables in README or tool descriptions.