@monnify/mcp-server 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +563 -0
- package/build/auth/tokenManager.d.ts +11 -0
- package/build/auth/tokenManager.d.ts.map +1 -0
- package/build/auth/tokenManager.js +62 -0
- package/build/auth/tokenManager.js.map +1 -0
- package/build/cli.d.ts +3 -0
- package/build/cli.d.ts.map +1 -0
- package/build/cli.js +39 -0
- package/build/cli.js.map +1 -0
- package/build/client/monnifyClient.d.ts +7 -0
- package/build/client/monnifyClient.d.ts.map +1 -0
- package/build/client/monnifyClient.js +119 -0
- package/build/client/monnifyClient.js.map +1 -0
- package/build/config/env.d.ts +47 -0
- package/build/config/env.d.ts.map +1 -0
- package/build/config/env.js +39 -0
- package/build/config/env.js.map +1 -0
- package/build/index.d.ts +36 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +84 -0
- package/build/index.js.map +1 -0
- package/build/schemas/compat.d.ts +24 -0
- package/build/schemas/compat.d.ts.map +1 -0
- package/build/schemas/compat.js +20 -0
- package/build/schemas/compat.js.map +1 -0
- package/build/schemas/extended/collections.d.ts +439 -0
- package/build/schemas/extended/collections.d.ts.map +1 -0
- package/build/schemas/extended/collections.js +403 -0
- package/build/schemas/extended/collections.js.map +1 -0
- package/build/schemas/extended/directDebit.d.ts +123 -0
- package/build/schemas/extended/directDebit.d.ts.map +1 -0
- package/build/schemas/extended/directDebit.js +121 -0
- package/build/schemas/extended/directDebit.js.map +1 -0
- package/build/schemas/extended/verification.d.ts +55 -0
- package/build/schemas/extended/verification.d.ts.map +1 -0
- package/build/schemas/extended/verification.js +51 -0
- package/build/schemas/extended/verification.js.map +1 -0
- package/build/schemas/generated.d.ts +4 -0
- package/build/schemas/generated.d.ts.map +1 -0
- package/build/schemas/generated.js +2603 -0
- package/build/schemas/generated.js.map +1 -0
- package/build/security/guards.d.ts +5 -0
- package/build/security/guards.d.ts.map +1 -0
- package/build/security/guards.js +43 -0
- package/build/security/guards.js.map +1 -0
- package/build/security/sanitiser.d.ts +46 -0
- package/build/security/sanitiser.d.ts.map +1 -0
- package/build/security/sanitiser.js +269 -0
- package/build/security/sanitiser.js.map +1 -0
- package/build/tools/collections/authoriseCard3ds.d.ts +7 -0
- package/build/tools/collections/authoriseCard3ds.d.ts.map +1 -0
- package/build/tools/collections/authoriseCard3ds.js +63 -0
- package/build/tools/collections/authoriseCard3ds.js.map +1 -0
- package/build/tools/collections/authoriseCardOtp.d.ts +7 -0
- package/build/tools/collections/authoriseCardOtp.d.ts.map +1 -0
- package/build/tools/collections/authoriseCardOtp.js +55 -0
- package/build/tools/collections/authoriseCardOtp.js.map +1 -0
- package/build/tools/collections/chargeCard.d.ts +7 -0
- package/build/tools/collections/chargeCard.d.ts.map +1 -0
- package/build/tools/collections/chargeCard.js +59 -0
- package/build/tools/collections/chargeCard.js.map +1 -0
- package/build/tools/collections/chargeCardToken.d.ts +7 -0
- package/build/tools/collections/chargeCardToken.d.ts.map +1 -0
- package/build/tools/collections/chargeCardToken.js +68 -0
- package/build/tools/collections/chargeCardToken.js.map +1 -0
- package/build/tools/collections/createInvoice.d.ts +7 -0
- package/build/tools/collections/createInvoice.d.ts.map +1 -0
- package/build/tools/collections/createInvoice.js +57 -0
- package/build/tools/collections/createInvoice.js.map +1 -0
- package/build/tools/collections/deallocateReservedAccount.d.ts +14 -0
- package/build/tools/collections/deallocateReservedAccount.d.ts.map +1 -0
- package/build/tools/collections/deallocateReservedAccount.js +55 -0
- package/build/tools/collections/deallocateReservedAccount.js.map +1 -0
- package/build/tools/collections/getAllTransactions.d.ts +47 -0
- package/build/tools/collections/getAllTransactions.d.ts.map +1 -0
- package/build/tools/collections/getAllTransactions.js +140 -0
- package/build/tools/collections/getAllTransactions.js.map +1 -0
- package/build/tools/collections/getReservedAccount.d.ts +14 -0
- package/build/tools/collections/getReservedAccount.d.ts.map +1 -0
- package/build/tools/collections/getReservedAccount.js +55 -0
- package/build/tools/collections/getReservedAccount.js.map +1 -0
- package/build/tools/collections/getReservedAccountTransactions.d.ts +20 -0
- package/build/tools/collections/getReservedAccountTransactions.d.ts.map +1 -0
- package/build/tools/collections/getReservedAccountTransactions.js +86 -0
- package/build/tools/collections/getReservedAccountTransactions.js.map +1 -0
- package/build/tools/collections/getTransactionDetails.d.ts +14 -0
- package/build/tools/collections/getTransactionDetails.d.ts.map +1 -0
- package/build/tools/collections/getTransactionDetails.js +60 -0
- package/build/tools/collections/getTransactionDetails.js.map +1 -0
- package/build/tools/collections/getTransactionStatus.d.ts +7 -0
- package/build/tools/collections/getTransactionStatus.d.ts.map +1 -0
- package/build/tools/collections/getTransactionStatus.js +58 -0
- package/build/tools/collections/getTransactionStatus.js.map +1 -0
- package/build/tools/collections/initiatePayment.d.ts +7 -0
- package/build/tools/collections/initiatePayment.d.ts.map +1 -0
- package/build/tools/collections/initiatePayment.js +63 -0
- package/build/tools/collections/initiatePayment.js.map +1 -0
- package/build/tools/collections/payWithBankTransfer.d.ts +7 -0
- package/build/tools/collections/payWithBankTransfer.d.ts.map +1 -0
- package/build/tools/collections/payWithBankTransfer.js +55 -0
- package/build/tools/collections/payWithBankTransfer.js.map +1 -0
- package/build/tools/collections/processRefund.d.ts +7 -0
- package/build/tools/collections/processRefund.d.ts.map +1 -0
- package/build/tools/collections/processRefund.js +55 -0
- package/build/tools/collections/processRefund.js.map +1 -0
- package/build/tools/collections/reserveAccount.d.ts +7 -0
- package/build/tools/collections/reserveAccount.d.ts.map +1 -0
- package/build/tools/collections/reserveAccount.js +57 -0
- package/build/tools/collections/reserveAccount.js.map +1 -0
- package/build/tools/directDebit/cancelMandate.d.ts +7 -0
- package/build/tools/directDebit/cancelMandate.d.ts.map +1 -0
- package/build/tools/directDebit/cancelMandate.js +55 -0
- package/build/tools/directDebit/cancelMandate.js.map +1 -0
- package/build/tools/directDebit/createMandate.d.ts +7 -0
- package/build/tools/directDebit/createMandate.d.ts.map +1 -0
- package/build/tools/directDebit/createMandate.js +55 -0
- package/build/tools/directDebit/createMandate.js.map +1 -0
- package/build/tools/directDebit/debitMandate.d.ts +7 -0
- package/build/tools/directDebit/debitMandate.d.ts.map +1 -0
- package/build/tools/directDebit/debitMandate.js +55 -0
- package/build/tools/directDebit/debitMandate.js.map +1 -0
- package/build/tools/directDebit/getMandateDebitStatus.d.ts +7 -0
- package/build/tools/directDebit/getMandateDebitStatus.d.ts.map +1 -0
- package/build/tools/directDebit/getMandateDebitStatus.js +55 -0
- package/build/tools/directDebit/getMandateDebitStatus.js.map +1 -0
- package/build/tools/directDebit/getMandateStatus.d.ts +7 -0
- package/build/tools/directDebit/getMandateStatus.d.ts.map +1 -0
- package/build/tools/directDebit/getMandateStatus.js +55 -0
- package/build/tools/directDebit/getMandateStatus.js.map +1 -0
- package/build/tools/registry.d.ts +11 -0
- package/build/tools/registry.d.ts.map +1 -0
- package/build/tools/registry.js +15 -0
- package/build/tools/registry.js.map +1 -0
- package/build/tools/utilities/getSupportedBanks.d.ts +8 -0
- package/build/tools/utilities/getSupportedBanks.d.ts.map +1 -0
- package/build/tools/utilities/getSupportedBanks.js +47 -0
- package/build/tools/utilities/getSupportedBanks.js.map +1 -0
- package/build/tools/utilities/getTransactionList.d.ts +47 -0
- package/build/tools/utilities/getTransactionList.d.ts.map +1 -0
- package/build/tools/utilities/getTransactionList.js +136 -0
- package/build/tools/utilities/getTransactionList.js.map +1 -0
- package/build/tools/verification/verifyBankAccount.d.ts +7 -0
- package/build/tools/verification/verifyBankAccount.d.ts.map +1 -0
- package/build/tools/verification/verifyBankAccount.js +58 -0
- package/build/tools/verification/verifyBankAccount.js.map +1 -0
- package/build/tools/verification/verifyBvn.d.ts +7 -0
- package/build/tools/verification/verifyBvn.d.ts.map +1 -0
- package/build/tools/verification/verifyBvn.js +55 -0
- package/build/tools/verification/verifyBvn.js.map +1 -0
- package/build/tools/verification/verifyBvnInfo.d.ts +7 -0
- package/build/tools/verification/verifyBvnInfo.d.ts.map +1 -0
- package/build/tools/verification/verifyBvnInfo.js +55 -0
- package/build/tools/verification/verifyBvnInfo.js.map +1 -0
- package/build/tools/verification/verifyNin.d.ts +7 -0
- package/build/tools/verification/verifyNin.d.ts.map +1 -0
- package/build/tools/verification/verifyNin.js +55 -0
- package/build/tools/verification/verifyNin.js.map +1 -0
- package/build/transport/http.d.ts +3 -0
- package/build/transport/http.d.ts.map +1 -0
- package/build/transport/http.js +71 -0
- package/build/transport/http.js.map +1 -0
- package/build/transport/stdio.d.ts +3 -0
- package/build/transport/stdio.d.ts.map +1 -0
- package/build/transport/stdio.js +8 -0
- package/build/transport/stdio.js.map +1 -0
- package/build/types/mcp.d.ts +11 -0
- package/build/types/mcp.d.ts.map +1 -0
- package/build/types/mcp.js +7 -0
- package/build/types/mcp.js.map +1 -0
- package/build/utils/clientContext.d.ts +7 -0
- package/build/utils/clientContext.d.ts.map +1 -0
- package/build/utils/clientContext.js +24 -0
- package/build/utils/clientContext.js.map +1 -0
- package/build/utils/errors.d.ts +21 -0
- package/build/utils/errors.d.ts.map +1 -0
- package/build/utils/errors.js +45 -0
- package/build/utils/errors.js.map +1 -0
- package/build/utils/format.d.ts +34 -0
- package/build/utils/format.d.ts.map +1 -0
- package/build/utils/format.js +362 -0
- package/build/utils/format.js.map +1 -0
- package/build/utils/formatters.d.ts +4 -0
- package/build/utils/formatters.d.ts.map +1 -0
- package/build/utils/formatters.js +26 -0
- package/build/utils/formatters.js.map +1 -0
- package/build/utils/logger.d.ts +3 -0
- package/build/utils/logger.d.ts.map +1 -0
- package/build/utils/logger.js +30 -0
- package/build/utils/logger.js.map +1 -0
- package/openapi/monnify.yaml +9295 -0
- package/package.json +55 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { zodToJsonSchema } from "zod-to-json-schema";
|
|
3
|
+
import { apiPost } from "../../client/monnifyClient.js";
|
|
4
|
+
import { sanitiseBankTransferPaymentResponse } from "../../security/sanitiser.js";
|
|
5
|
+
import { registerTool } from "../registry.js";
|
|
6
|
+
import { MonnifyApiError } from "../../utils/errors.js";
|
|
7
|
+
import { errorResult } from "../../types/mcp.js";
|
|
8
|
+
import { formatBankTransferPayment } from "../../utils/format.js";
|
|
9
|
+
import { getResponseFormat } from "../../utils/clientContext.js";
|
|
10
|
+
import { PayWithBankTransferInputSchema } from "../../schemas/extended/collections.js";
|
|
11
|
+
const definition = {
|
|
12
|
+
name: "monnify_pay_with_bank_transfer",
|
|
13
|
+
description: `Initialises a bank transfer payment for an existing pending transaction and returns a one-time virtual account for the customer to transfer to.
|
|
14
|
+
|
|
15
|
+
WHEN TO USE: After calling monnify_initiate_payment, use this tool when the customer wants to pay by direct bank transfer instead of card or USSD. Returns a virtual account number the customer must transfer the exact amount to.
|
|
16
|
+
|
|
17
|
+
PREREQUISITES: A pending transaction must already exist — call monnify_initiate_payment first and pass its transactionReference here. The bankCode must be a valid Monnify-supported bank (call monnify_get_supported_banks to retrieve codes).
|
|
18
|
+
|
|
19
|
+
SIDE EFFECTS: Creates a one-time virtual bank account tied to the transaction. The account expires at expiryDate. If the customer fails to transfer before expiry the transaction will remain pending. Calling this endpoint again with the same transactionReference and bankCode is safe (idempotent).
|
|
20
|
+
|
|
21
|
+
MFA NOTE: No OTP is required from the customer on your end. The customer's own bank may require 2FA to complete the transfer.
|
|
22
|
+
|
|
23
|
+
KEY OUTPUT FIELDS: accountNumber (tell the customer to transfer to this), accountName, bankName, bankCode, expiryDate (inform customer of deadline), amount (exact amount customer must send), fee, totalPayableFee, transactionReference.`,
|
|
24
|
+
inputSchema: zodToJsonSchema(PayWithBankTransferInputSchema),
|
|
25
|
+
};
|
|
26
|
+
async function handler(args) {
|
|
27
|
+
try {
|
|
28
|
+
const parsed = PayWithBankTransferInputSchema.parse(args);
|
|
29
|
+
const result = await apiPost("/api/v1/merchant/bank-transfer/init-payment", parsed);
|
|
30
|
+
const sanitised = sanitiseBankTransferPaymentResponse(result);
|
|
31
|
+
return {
|
|
32
|
+
content: [{ type: "text", text: getResponseFormat() === "json" ? JSON.stringify(sanitised, null, 2) : formatBankTransferPayment(sanitised) }],
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
if (error instanceof z.ZodError) {
|
|
37
|
+
return {
|
|
38
|
+
content: [
|
|
39
|
+
{
|
|
40
|
+
type: "text",
|
|
41
|
+
text: `Validation failed:\n${error.issues.map((i) => ` - ${i.path.join(".")}: ${i.message}`).join("\n")}`,
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
isError: true,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
if (error instanceof MonnifyApiError) {
|
|
48
|
+
return { content: [error.toMcpContent()], isError: true };
|
|
49
|
+
}
|
|
50
|
+
return errorResult(`monnify_pay_with_bank_transfer failed: ${String(error)}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
registerTool({ definition, handler });
|
|
54
|
+
export { definition, PayWithBankTransferInputSchema as inputSchema, handler };
|
|
55
|
+
//# sourceMappingURL=payWithBankTransfer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payWithBankTransfer.js","sourceRoot":"","sources":["../../../src/tools/collections/payWithBankTransfer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,mCAAmC,EAAE,MAAM,6BAA6B,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,8BAA8B,EAAE,MAAM,uCAAuC,CAAC;AAEvF,MAAM,UAAU,GAAS;IACvB,IAAI,EAAE,gCAAgC;IACtC,WAAW,EAAE;;;;;;;;;;2OAU4N;IACzO,WAAW,EAAE,eAAe,CAAC,8BAA8B,CAAwB;CACpF,CAAC;AAEF,KAAK,UAAU,OAAO,CAAC,IAAa;IAClC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,8BAA8B,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,6CAA6C,EAC7C,MAAM,CACP,CAAC;QACF,MAAM,SAAS,GAAG,mCAAmC,CAAC,MAAM,CAAC,CAAC;QAC9D,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,SAAoC,CAAC,EAAE,CAAC;SACzK,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;YAChC,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,uBAAuB,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;qBAC3G;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;YACrC,OAAO,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC5D,CAAC;QACD,OAAO,WAAW,CAAC,0CAA0C,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAChF,CAAC;AACH,CAAC;AAED,YAAY,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,8BAA8B,IAAI,WAAW,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Tool } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
import type { McpToolResult } from "../../types/mcp.js";
|
|
3
|
+
import { ProcessRefundInputSchema } from "../../schemas/extended/collections.js";
|
|
4
|
+
declare const definition: Tool;
|
|
5
|
+
declare function handler(args: unknown): Promise<McpToolResult>;
|
|
6
|
+
export { definition, ProcessRefundInputSchema as inputSchema, handler };
|
|
7
|
+
//# sourceMappingURL=processRefund.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"processRefund.d.ts","sourceRoot":"","sources":["../../../src/tools/collections/processRefund.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAG/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAQxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AAEjF,QAAA,MAAM,UAAU,EAAE,IAcjB,CAAC;AAEF,iBAAe,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,CA4B5D;AAID,OAAO,EAAE,UAAU,EAAE,wBAAwB,IAAI,WAAW,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { zodToJsonSchema } from "zod-to-json-schema";
|
|
3
|
+
import { apiPost } from "../../client/monnifyClient.js";
|
|
4
|
+
import { sanitiseRefundResponse } from "../../security/sanitiser.js";
|
|
5
|
+
import { registerTool } from "../registry.js";
|
|
6
|
+
import { MonnifyApiError } from "../../utils/errors.js";
|
|
7
|
+
import { errorResult } from "../../types/mcp.js";
|
|
8
|
+
import { formatProcessRefund } from "../../utils/format.js";
|
|
9
|
+
import { getResponseFormat } from "../../utils/clientContext.js";
|
|
10
|
+
import { ProcessRefundInputSchema } from "../../schemas/extended/collections.js";
|
|
11
|
+
const definition = {
|
|
12
|
+
name: "monnify_process_refund",
|
|
13
|
+
description: `Initiates a refund for a previously completed payment transaction.
|
|
14
|
+
|
|
15
|
+
WHEN TO USE: To reverse a charge at a customer's request, after an order cancellation, or when a duplicate or suspicious charge is detected. Can be a full or partial refund.
|
|
16
|
+
|
|
17
|
+
PREREQUISITES: The original transaction must have paymentStatus = PAID. Obtain the transactionReference from monnify_get_transaction_status. Verify the destination account with monnify_verify_bank_account first.
|
|
18
|
+
|
|
19
|
+
SIDE EFFECTS: Initiates a real fund transfer back to the customer. This is a financial operation — confirm the transaction reference and refund amount carefully before proceeding. Using the same refundReference is safe (idempotent — will not double-refund).
|
|
20
|
+
|
|
21
|
+
MFA NOTE: Not applicable.
|
|
22
|
+
|
|
23
|
+
KEY OUTPUT FIELDS: refundReference, transactionReference, refundStatus (INITIATED | PENDING | REFUNDED | FAILED), refundAmount, refundReason, destinationAccountNumber, createdOn.`,
|
|
24
|
+
inputSchema: zodToJsonSchema(ProcessRefundInputSchema),
|
|
25
|
+
};
|
|
26
|
+
async function handler(args) {
|
|
27
|
+
try {
|
|
28
|
+
const parsed = ProcessRefundInputSchema.parse(args);
|
|
29
|
+
const result = await apiPost("/api/v1/refunds/initiate-refund", parsed);
|
|
30
|
+
const sanitised = sanitiseRefundResponse(result);
|
|
31
|
+
return {
|
|
32
|
+
content: [{ type: "text", text: getResponseFormat() === "json" ? JSON.stringify(sanitised, null, 2) : formatProcessRefund(sanitised) }],
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
if (error instanceof z.ZodError) {
|
|
37
|
+
return {
|
|
38
|
+
content: [
|
|
39
|
+
{
|
|
40
|
+
type: "text",
|
|
41
|
+
text: `Validation failed:\n${error.issues.map((i) => ` - ${i.path.join(".")}: ${i.message}`).join("\n")}`,
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
isError: true,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
if (error instanceof MonnifyApiError) {
|
|
48
|
+
return { content: [error.toMcpContent()], isError: true };
|
|
49
|
+
}
|
|
50
|
+
return errorResult(`monnify_process_refund failed: ${String(error)}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
registerTool({ definition, handler });
|
|
54
|
+
export { definition, ProcessRefundInputSchema as inputSchema, handler };
|
|
55
|
+
//# sourceMappingURL=processRefund.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"processRefund.js","sourceRoot":"","sources":["../../../src/tools/collections/processRefund.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AAEjF,MAAM,UAAU,GAAS;IACvB,IAAI,EAAE,wBAAwB;IAC9B,WAAW,EAAE;;;;;;;;;;mLAUoK;IACjL,WAAW,EAAE,eAAe,CAAC,wBAAwB,CAAwB;CAC9E,CAAC;AAEF,KAAK,UAAU,OAAO,CAAC,IAAa;IAClC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,wBAAwB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,iCAAiC,EACjC,MAAM,CACP,CAAC;QACF,MAAM,SAAS,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;QACjD,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,SAAoC,CAAC,EAAE,CAAC;SACnK,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;YAChC,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,uBAAuB,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;qBAC3G;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;YACrC,OAAO,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC5D,CAAC;QACD,OAAO,WAAW,CAAC,kCAAkC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACxE,CAAC;AACH,CAAC;AAED,YAAY,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,wBAAwB,IAAI,WAAW,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Tool } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
import type { McpToolResult } from "../../types/mcp.js";
|
|
3
|
+
import { ReserveAccountInputSchema } from "../../schemas/extended/collections.js";
|
|
4
|
+
declare const definition: Tool;
|
|
5
|
+
declare function handler(args: unknown): Promise<McpToolResult>;
|
|
6
|
+
export { definition, ReserveAccountInputSchema as inputSchema, handler };
|
|
7
|
+
//# sourceMappingURL=reserveAccount.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reserveAccount.d.ts","sourceRoot":"","sources":["../../../src/tools/collections/reserveAccount.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAG/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAQxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAGlF,QAAA,MAAM,UAAU,EAAE,IAcjB,CAAC;AAEF,iBAAe,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,CA6B5D;AAID,OAAO,EAAE,UAAU,EAAE,yBAAyB,IAAI,WAAW,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { zodToJsonSchema } from "zod-to-json-schema";
|
|
3
|
+
import { apiPost } from "../../client/monnifyClient.js";
|
|
4
|
+
import { sanitiseReserveAccountResponse } from "../../security/sanitiser.js";
|
|
5
|
+
import { registerTool } from "../registry.js";
|
|
6
|
+
import { MonnifyApiError } from "../../utils/errors.js";
|
|
7
|
+
import { errorResult } from "../../types/mcp.js";
|
|
8
|
+
import { formatReserveAccount } from "../../utils/format.js";
|
|
9
|
+
import { getResponseFormat } from "../../utils/clientContext.js";
|
|
10
|
+
import { ReserveAccountInputSchema } from "../../schemas/extended/collections.js";
|
|
11
|
+
import { env } from "../../config/env.js";
|
|
12
|
+
const definition = {
|
|
13
|
+
name: "monnify_reserve_account",
|
|
14
|
+
description: `Reserves a dedicated virtual bank account for a customer to pay into at any time.
|
|
15
|
+
|
|
16
|
+
WHEN TO USE: For persistent payment collection — wallets, top-up accounts, or business collection accounts. Unlike one-time checkouts, reserved accounts allow customers to pay anytime by bank transfer.
|
|
17
|
+
|
|
18
|
+
PREREQUISITES: Reserved Accounts feature must be enabled on your Monnify account. Contact Monnify support if unavailable.
|
|
19
|
+
|
|
20
|
+
SIDE EFFECTS: Creates a persistent reserved account on Monnify's banking partners. The account persists until explicitly deleted. Using the same accountReference is safe (idempotent).
|
|
21
|
+
|
|
22
|
+
MFA NOTE: Not applicable.
|
|
23
|
+
|
|
24
|
+
KEY OUTPUT FIELDS: accountReference, accountName, accounts (array of virtual account numbers per bank), reservationReference, status, createdOn.`,
|
|
25
|
+
inputSchema: zodToJsonSchema(ReserveAccountInputSchema),
|
|
26
|
+
};
|
|
27
|
+
async function handler(args) {
|
|
28
|
+
try {
|
|
29
|
+
const parsed = ReserveAccountInputSchema.parse(args);
|
|
30
|
+
const contractCode = parsed.contractCode ?? env().MONNIFY_CONTRACT_CODE;
|
|
31
|
+
const result = await apiPost("/api/v2/bank-transfer/reserved-accounts", { ...parsed, contractCode });
|
|
32
|
+
const sanitised = sanitiseReserveAccountResponse(result);
|
|
33
|
+
return {
|
|
34
|
+
content: [{ type: "text", text: getResponseFormat() === "json" ? JSON.stringify(sanitised, null, 2) : formatReserveAccount(sanitised) }],
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
if (error instanceof z.ZodError) {
|
|
39
|
+
return {
|
|
40
|
+
content: [
|
|
41
|
+
{
|
|
42
|
+
type: "text",
|
|
43
|
+
text: `Validation failed:\n${error.issues.map((i) => ` - ${i.path.join(".")}: ${i.message}`).join("\n")}`,
|
|
44
|
+
},
|
|
45
|
+
],
|
|
46
|
+
isError: true,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
if (error instanceof MonnifyApiError) {
|
|
50
|
+
return { content: [error.toMcpContent()], isError: true };
|
|
51
|
+
}
|
|
52
|
+
return errorResult(`monnify_reserve_account failed: ${String(error)}`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
registerTool({ definition, handler });
|
|
56
|
+
export { definition, ReserveAccountInputSchema as inputSchema, handler };
|
|
57
|
+
//# sourceMappingURL=reserveAccount.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reserveAccount.js","sourceRoot":"","sources":["../../../src/tools/collections/reserveAccount.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,8BAA8B,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAE1C,MAAM,UAAU,GAAS;IACvB,IAAI,EAAE,yBAAyB;IAC/B,WAAW,EAAE;;;;;;;;;;iJAUkI;IAC/I,WAAW,EAAE,eAAe,CAAC,yBAAyB,CAAwB;CAC/E,CAAC;AAEF,KAAK,UAAU,OAAO,CAAC,IAAa;IAClC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,yBAAyB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,GAAG,EAAE,CAAC,qBAAqB,CAAC;QACxE,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,yCAAyC,EACzC,EAAE,GAAG,MAAM,EAAE,YAAY,EAAE,CAC5B,CAAC;QACF,MAAM,SAAS,GAAG,8BAA8B,CAAC,MAAM,CAAC,CAAC;QACzD,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,SAAoC,CAAC,EAAE,CAAC;SACpK,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;YAChC,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,uBAAuB,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;qBAC3G;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;YACrC,OAAO,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC5D,CAAC;QACD,OAAO,WAAW,CAAC,mCAAmC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACzE,CAAC;AACH,CAAC;AAED,YAAY,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,yBAAyB,IAAI,WAAW,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Tool } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
import type { McpToolResult } from "../../types/mcp.js";
|
|
3
|
+
import { CancelMandateInputSchema } from "../../schemas/extended/directDebit.js";
|
|
4
|
+
declare const definition: Tool;
|
|
5
|
+
declare function handler(args: unknown): Promise<McpToolResult>;
|
|
6
|
+
export { definition, CancelMandateInputSchema as inputSchema, handler };
|
|
7
|
+
//# sourceMappingURL=cancelMandate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cancelMandate.d.ts","sourceRoot":"","sources":["../../../src/tools/directDebit/cancelMandate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAG/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAQxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AAEjF,QAAA,MAAM,UAAU,EAAE,IAcjB,CAAC;AAEF,iBAAe,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,CA2B5D;AAID,OAAO,EAAE,UAAU,EAAE,wBAAwB,IAAI,WAAW,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { zodToJsonSchema } from "zod-to-json-schema";
|
|
3
|
+
import { apiPatch } from "../../client/monnifyClient.js";
|
|
4
|
+
import { sanitiseCancelMandateResponse } from "../../security/sanitiser.js";
|
|
5
|
+
import { registerTool } from "../registry.js";
|
|
6
|
+
import { MonnifyApiError } from "../../utils/errors.js";
|
|
7
|
+
import { errorResult } from "../../types/mcp.js";
|
|
8
|
+
import { formatCancelMandate } from "../../utils/format.js";
|
|
9
|
+
import { getResponseFormat } from "../../utils/clientContext.js";
|
|
10
|
+
import { CancelMandateInputSchema } from "../../schemas/extended/directDebit.js";
|
|
11
|
+
const definition = {
|
|
12
|
+
name: "monnify_cancel_mandate",
|
|
13
|
+
description: `Cancels an existing Direct Debit mandate, permanently stopping future debits.
|
|
14
|
+
|
|
15
|
+
WHEN TO USE: When a customer requests cancellation of their subscription or recurring billing, or when a mandate needs to be revoked for compliance reasons.
|
|
16
|
+
|
|
17
|
+
PREREQUISITES: The mandate must exist. The mandate can be in any status (PENDING_AUTHORIZATION, ACTIVATED).
|
|
18
|
+
|
|
19
|
+
SIDE EFFECTS: IRREVERSIBLE — once cancelled, the mandate cannot be reactivated. The customer must create and authorise a new mandate to resume recurring billing. No refunds are triggered — only future scheduled debits are stopped.
|
|
20
|
+
|
|
21
|
+
MFA NOTE: Not applicable.
|
|
22
|
+
|
|
23
|
+
KEY OUTPUT FIELDS: mandateReference, mandateStatus (will be CANCELLED).`,
|
|
24
|
+
inputSchema: zodToJsonSchema(CancelMandateInputSchema),
|
|
25
|
+
};
|
|
26
|
+
async function handler(args) {
|
|
27
|
+
try {
|
|
28
|
+
const parsed = CancelMandateInputSchema.parse(args);
|
|
29
|
+
const result = await apiPatch(`/api/v1/direct-debit/mandate/cancel-mandate/${encodeURIComponent(parsed.mandateCode)}`);
|
|
30
|
+
const sanitised = sanitiseCancelMandateResponse(result);
|
|
31
|
+
return {
|
|
32
|
+
content: [{ type: "text", text: getResponseFormat() === "json" ? JSON.stringify(sanitised, null, 2) : formatCancelMandate(sanitised) }],
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
if (error instanceof z.ZodError) {
|
|
37
|
+
return {
|
|
38
|
+
content: [
|
|
39
|
+
{
|
|
40
|
+
type: "text",
|
|
41
|
+
text: `Validation failed:\n${error.issues.map((i) => ` - ${i.path.join(".")}: ${i.message}`).join("\n")}`,
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
isError: true,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
if (error instanceof MonnifyApiError) {
|
|
48
|
+
return { content: [error.toMcpContent()], isError: true };
|
|
49
|
+
}
|
|
50
|
+
return errorResult(`monnify_cancel_mandate failed: ${String(error)}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
registerTool({ definition, handler });
|
|
54
|
+
export { definition, CancelMandateInputSchema as inputSchema, handler };
|
|
55
|
+
//# sourceMappingURL=cancelMandate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cancelMandate.js","sourceRoot":"","sources":["../../../src/tools/directDebit/cancelMandate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AAEjF,MAAM,UAAU,GAAS;IACvB,IAAI,EAAE,wBAAwB;IAC9B,WAAW,EAAE;;;;;;;;;;wEAUyD;IACtE,WAAW,EAAE,eAAe,CAAC,wBAAwB,CAAwB;CAC9E,CAAC;AAEF,KAAK,UAAU,OAAO,CAAC,IAAa;IAClC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,wBAAwB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAC3B,+CAA+C,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CACxF,CAAC;QACF,MAAM,SAAS,GAAG,6BAA6B,CAAC,MAAM,CAAC,CAAC;QACxD,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,SAAoC,CAAC,EAAE,CAAC;SACnK,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;YAChC,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,uBAAuB,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;qBAC3G;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;YACrC,OAAO,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC5D,CAAC;QACD,OAAO,WAAW,CAAC,kCAAkC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACxE,CAAC;AACH,CAAC;AAED,YAAY,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,wBAAwB,IAAI,WAAW,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Tool } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
import type { McpToolResult } from "../../types/mcp.js";
|
|
3
|
+
import { CreateMandateInputSchema } from "../../schemas/extended/directDebit.js";
|
|
4
|
+
declare const definition: Tool;
|
|
5
|
+
declare function handler(args: unknown): Promise<McpToolResult>;
|
|
6
|
+
export { definition, CreateMandateInputSchema as inputSchema, handler };
|
|
7
|
+
//# sourceMappingURL=createMandate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createMandate.d.ts","sourceRoot":"","sources":["../../../src/tools/directDebit/createMandate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAG/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAQxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AAEjF,QAAA,MAAM,UAAU,EAAE,IAcjB,CAAC;AAEF,iBAAe,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,CA4B5D;AAID,OAAO,EAAE,UAAU,EAAE,wBAAwB,IAAI,WAAW,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { zodToJsonSchema } from "zod-to-json-schema";
|
|
3
|
+
import { apiPost } from "../../client/monnifyClient.js";
|
|
4
|
+
import { sanitiseMandateResponse } from "../../security/sanitiser.js";
|
|
5
|
+
import { registerTool } from "../registry.js";
|
|
6
|
+
import { MonnifyApiError } from "../../utils/errors.js";
|
|
7
|
+
import { errorResult } from "../../types/mcp.js";
|
|
8
|
+
import { formatCreateMandate } from "../../utils/format.js";
|
|
9
|
+
import { getResponseFormat } from "../../utils/clientContext.js";
|
|
10
|
+
import { CreateMandateInputSchema } from "../../schemas/extended/directDebit.js";
|
|
11
|
+
const definition = {
|
|
12
|
+
name: "monnify_create_mandate",
|
|
13
|
+
description: `Creates a Direct Debit mandate on a customer's bank account, enabling recurring payments.
|
|
14
|
+
|
|
15
|
+
WHEN TO USE: When setting up recurring billing for a customer — subscriptions, instalments, or utility collection. This is always the first step in the Direct Debit lifecycle.
|
|
16
|
+
|
|
17
|
+
PREREQUISITES: None. However, verify the customer's bank account with monnify_verify_bank_account first to confirm account details before committing them to a mandate.
|
|
18
|
+
|
|
19
|
+
SIDE EFFECTS: Generates a mandateReference and a 30-day authorization link. The mandate status starts as PENDING_AUTHORIZATION — no debiting can occur until the customer clicks the link and authorises via their bank. Monnify automatically routes to TeamApt or NIBSS based on the customer's bank.
|
|
20
|
+
|
|
21
|
+
MFA NOTE: Not applicable at this stage. Customer authorisation is handled externally via the authorizationLink — share this link with the customer via email, SMS, or in-app.
|
|
22
|
+
|
|
23
|
+
KEY OUTPUT FIELDS: mandateReference, mandateCode, mandateStatus (PENDING_AUTHORIZATION), authorizationLink (valid 30 days), startDate, endDate.`,
|
|
24
|
+
inputSchema: zodToJsonSchema(CreateMandateInputSchema),
|
|
25
|
+
};
|
|
26
|
+
async function handler(args) {
|
|
27
|
+
try {
|
|
28
|
+
const parsed = CreateMandateInputSchema.parse(args);
|
|
29
|
+
const result = await apiPost("/api/v1/direct-debit/mandate/create", parsed);
|
|
30
|
+
const sanitised = sanitiseMandateResponse(result);
|
|
31
|
+
return {
|
|
32
|
+
content: [{ type: "text", text: getResponseFormat() === "json" ? JSON.stringify(sanitised, null, 2) : formatCreateMandate(sanitised) }],
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
if (error instanceof z.ZodError) {
|
|
37
|
+
return {
|
|
38
|
+
content: [
|
|
39
|
+
{
|
|
40
|
+
type: "text",
|
|
41
|
+
text: `Validation failed:\n${error.issues.map((i) => ` - ${i.path.join(".")}: ${i.message}`).join("\n")}`,
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
isError: true,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
if (error instanceof MonnifyApiError) {
|
|
48
|
+
return { content: [error.toMcpContent()], isError: true };
|
|
49
|
+
}
|
|
50
|
+
return errorResult(`monnify_create_mandate failed: ${String(error)}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
registerTool({ definition, handler });
|
|
54
|
+
export { definition, CreateMandateInputSchema as inputSchema, handler };
|
|
55
|
+
//# sourceMappingURL=createMandate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createMandate.js","sourceRoot":"","sources":["../../../src/tools/directDebit/createMandate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AAEjF,MAAM,UAAU,GAAS;IACvB,IAAI,EAAE,wBAAwB;IAC9B,WAAW,EAAE;;;;;;;;;;gJAUiI;IAC9I,WAAW,EAAE,eAAe,CAAC,wBAAwB,CAAwB;CAC9E,CAAC;AAEF,KAAK,UAAU,OAAO,CAAC,IAAa;IAClC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,wBAAwB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,qCAAqC,EACrC,MAAM,CACP,CAAC;QACF,MAAM,SAAS,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;QAClD,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,SAAoC,CAAC,EAAE,CAAC;SACnK,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;YAChC,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,uBAAuB,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;qBAC3G;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;YACrC,OAAO,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC5D,CAAC;QACD,OAAO,WAAW,CAAC,kCAAkC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACxE,CAAC;AACH,CAAC;AAED,YAAY,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,wBAAwB,IAAI,WAAW,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Tool } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
import type { McpToolResult } from "../../types/mcp.js";
|
|
3
|
+
import { DebitMandateInputSchema } from "../../schemas/extended/directDebit.js";
|
|
4
|
+
declare const definition: Tool;
|
|
5
|
+
declare function handler(args: unknown): Promise<McpToolResult>;
|
|
6
|
+
export { definition, DebitMandateInputSchema as inputSchema, handler };
|
|
7
|
+
//# sourceMappingURL=debitMandate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debitMandate.d.ts","sourceRoot":"","sources":["../../../src/tools/directDebit/debitMandate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAG/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAQxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAEhF,QAAA,MAAM,UAAU,EAAE,IAcjB,CAAC;AAEF,iBAAe,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,CA4B5D;AAID,OAAO,EAAE,UAAU,EAAE,uBAAuB,IAAI,WAAW,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { zodToJsonSchema } from "zod-to-json-schema";
|
|
3
|
+
import { apiPost } from "../../client/monnifyClient.js";
|
|
4
|
+
import { sanitiseDebitStatusResponse } from "../../security/sanitiser.js";
|
|
5
|
+
import { registerTool } from "../registry.js";
|
|
6
|
+
import { MonnifyApiError } from "../../utils/errors.js";
|
|
7
|
+
import { errorResult } from "../../types/mcp.js";
|
|
8
|
+
import { formatDebitStatus } from "../../utils/format.js";
|
|
9
|
+
import { getResponseFormat } from "../../utils/clientContext.js";
|
|
10
|
+
import { DebitMandateInputSchema } from "../../schemas/extended/directDebit.js";
|
|
11
|
+
const definition = {
|
|
12
|
+
name: "monnify_debit_mandate",
|
|
13
|
+
description: `Debits a customer's bank account using an activated Direct Debit mandate.
|
|
14
|
+
|
|
15
|
+
WHEN TO USE: To collect a payment from a customer who has an ACTIVATED mandate. Call monnify_get_mandate_status first to confirm the mandate is ACTIVATED before attempting a debit.
|
|
16
|
+
|
|
17
|
+
PREREQUISITES: monnify_get_mandate_status must return mandateStatus = ACTIVATED. Never attempt to debit a PENDING_AUTHORIZATION or CANCELLED mandate.
|
|
18
|
+
|
|
19
|
+
SIDE EFFECTS: Initiates a real debit from the customer's bank account. This is an irreversible financial operation. Use a unique paymentReference per debit attempt — the same reference can be safely resubmitted to check status without double-charging.
|
|
20
|
+
|
|
21
|
+
MFA NOTE: Not applicable.
|
|
22
|
+
|
|
23
|
+
KEY OUTPUT FIELDS: debitReference, mandateReference, debitStatus (PENDING | SUCCESS | FAILED), amount, debitDate.`,
|
|
24
|
+
inputSchema: zodToJsonSchema(DebitMandateInputSchema),
|
|
25
|
+
};
|
|
26
|
+
async function handler(args) {
|
|
27
|
+
try {
|
|
28
|
+
const parsed = DebitMandateInputSchema.parse(args);
|
|
29
|
+
const result = await apiPost("/api/v1/direct-debit/mandate/debit", parsed);
|
|
30
|
+
const sanitised = sanitiseDebitStatusResponse(result);
|
|
31
|
+
return {
|
|
32
|
+
content: [{ type: "text", text: getResponseFormat() === "json" ? JSON.stringify(sanitised, null, 2) : formatDebitStatus(sanitised) }],
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
if (error instanceof z.ZodError) {
|
|
37
|
+
return {
|
|
38
|
+
content: [
|
|
39
|
+
{
|
|
40
|
+
type: "text",
|
|
41
|
+
text: `Validation failed:\n${error.issues.map((i) => ` - ${i.path.join(".")}: ${i.message}`).join("\n")}`,
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
isError: true,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
if (error instanceof MonnifyApiError) {
|
|
48
|
+
return { content: [error.toMcpContent()], isError: true };
|
|
49
|
+
}
|
|
50
|
+
return errorResult(`monnify_debit_mandate failed: ${String(error)}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
registerTool({ definition, handler });
|
|
54
|
+
export { definition, DebitMandateInputSchema as inputSchema, handler };
|
|
55
|
+
//# sourceMappingURL=debitMandate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debitMandate.js","sourceRoot":"","sources":["../../../src/tools/directDebit/debitMandate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAEhF,MAAM,UAAU,GAAS;IACvB,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EAAE;;;;;;;;;;kHAUmG;IAChH,WAAW,EAAE,eAAe,CAAC,uBAAuB,CAAwB;CAC7E,CAAC;AAEF,KAAK,UAAU,OAAO,CAAC,IAAa;IAClC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,uBAAuB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,oCAAoC,EACpC,MAAM,CACP,CAAC;QACF,MAAM,SAAS,GAAG,2BAA2B,CAAC,MAAM,CAAC,CAAC;QACtD,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,SAAoC,CAAC,EAAE,CAAC;SACjK,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;YAChC,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,uBAAuB,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;qBAC3G;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;YACrC,OAAO,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC5D,CAAC;QACD,OAAO,WAAW,CAAC,iCAAiC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAED,YAAY,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,uBAAuB,IAAI,WAAW,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Tool } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
import type { McpToolResult } from "../../types/mcp.js";
|
|
3
|
+
import { GetMandateDebitStatusInputSchema } from "../../schemas/extended/directDebit.js";
|
|
4
|
+
declare const definition: Tool;
|
|
5
|
+
declare function handler(args: unknown): Promise<McpToolResult>;
|
|
6
|
+
export { definition, GetMandateDebitStatusInputSchema as inputSchema, handler };
|
|
7
|
+
//# sourceMappingURL=getMandateDebitStatus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getMandateDebitStatus.d.ts","sourceRoot":"","sources":["../../../src/tools/directDebit/getMandateDebitStatus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAG/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAQxD,OAAO,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAC;AAEzF,QAAA,MAAM,UAAU,EAAE,IAcjB,CAAC;AAEF,iBAAe,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,CA4B5D;AAID,OAAO,EAAE,UAAU,EAAE,gCAAgC,IAAI,WAAW,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { zodToJsonSchema } from "zod-to-json-schema";
|
|
3
|
+
import { apiGet } from "../../client/monnifyClient.js";
|
|
4
|
+
import { sanitiseDebitStatusResponse } from "../../security/sanitiser.js";
|
|
5
|
+
import { registerTool } from "../registry.js";
|
|
6
|
+
import { MonnifyApiError } from "../../utils/errors.js";
|
|
7
|
+
import { errorResult } from "../../types/mcp.js";
|
|
8
|
+
import { formatDebitStatus } from "../../utils/format.js";
|
|
9
|
+
import { getResponseFormat } from "../../utils/clientContext.js";
|
|
10
|
+
import { GetMandateDebitStatusInputSchema } from "../../schemas/extended/directDebit.js";
|
|
11
|
+
const definition = {
|
|
12
|
+
name: "monnify_get_mandate_debit_status",
|
|
13
|
+
description: `Retrieves the status of a specific Direct Debit debit attempt.
|
|
14
|
+
|
|
15
|
+
WHEN TO USE: After calling monnify_debit_mandate to check whether the debit succeeded, is still pending, or has failed. Debit operations are asynchronous — poll this endpoint to confirm the final status.
|
|
16
|
+
|
|
17
|
+
PREREQUISITES: A debit attempt must exist — call monnify_debit_mandate first.
|
|
18
|
+
|
|
19
|
+
SIDE EFFECTS: None. Read-only operation.
|
|
20
|
+
|
|
21
|
+
MFA NOTE: Not applicable.
|
|
22
|
+
|
|
23
|
+
KEY OUTPUT FIELDS: paymentReference, debitStatus (PENDING | SUCCESS | FAILED), amount, debitDate.`,
|
|
24
|
+
inputSchema: zodToJsonSchema(GetMandateDebitStatusInputSchema),
|
|
25
|
+
};
|
|
26
|
+
async function handler(args) {
|
|
27
|
+
try {
|
|
28
|
+
const parsed = GetMandateDebitStatusInputSchema.parse(args);
|
|
29
|
+
const result = await apiGet("/api/v1/direct-debit/mandate/debit-status", { paymentReference: parsed.paymentReference });
|
|
30
|
+
const sanitised = sanitiseDebitStatusResponse(result);
|
|
31
|
+
return {
|
|
32
|
+
content: [{ type: "text", text: getResponseFormat() === "json" ? JSON.stringify(sanitised, null, 2) : formatDebitStatus(sanitised) }],
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
if (error instanceof z.ZodError) {
|
|
37
|
+
return {
|
|
38
|
+
content: [
|
|
39
|
+
{
|
|
40
|
+
type: "text",
|
|
41
|
+
text: `Validation failed:\n${error.issues.map((i) => ` - ${i.path.join(".")}: ${i.message}`).join("\n")}`,
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
isError: true,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
if (error instanceof MonnifyApiError) {
|
|
48
|
+
return { content: [error.toMcpContent()], isError: true };
|
|
49
|
+
}
|
|
50
|
+
return errorResult(`monnify_get_mandate_debit_status failed: ${String(error)}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
registerTool({ definition, handler });
|
|
54
|
+
export { definition, GetMandateDebitStatusInputSchema as inputSchema, handler };
|
|
55
|
+
//# sourceMappingURL=getMandateDebitStatus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getMandateDebitStatus.js","sourceRoot":"","sources":["../../../src/tools/directDebit/getMandateDebitStatus.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAC;AAEzF,MAAM,UAAU,GAAS;IACvB,IAAI,EAAE,kCAAkC;IACxC,WAAW,EAAE;;;;;;;;;;kGAUmF;IAChG,WAAW,EAAE,eAAe,CAAC,gCAAgC,CAAwB;CACtF,CAAC;AAEF,KAAK,UAAU,OAAO,CAAC,IAAa;IAClC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,gCAAgC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,MAAM,MAAM,CACzB,2CAA2C,EAC3C,EAAE,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,EAAE,CAC9C,CAAC;QACF,MAAM,SAAS,GAAG,2BAA2B,CAAC,MAAM,CAAC,CAAC;QACtD,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,SAAoC,CAAC,EAAE,CAAC;SACjK,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;YAChC,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,uBAAuB,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;qBAC3G;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;YACrC,OAAO,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC5D,CAAC;QACD,OAAO,WAAW,CAAC,4CAA4C,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClF,CAAC;AACH,CAAC;AAED,YAAY,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,gCAAgC,IAAI,WAAW,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Tool } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
import type { McpToolResult } from "../../types/mcp.js";
|
|
3
|
+
import { GetMandateStatusInputSchema } from "../../schemas/extended/directDebit.js";
|
|
4
|
+
declare const definition: Tool;
|
|
5
|
+
declare function handler(args: unknown): Promise<McpToolResult>;
|
|
6
|
+
export { definition, GetMandateStatusInputSchema as inputSchema, handler };
|
|
7
|
+
//# sourceMappingURL=getMandateStatus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getMandateStatus.d.ts","sourceRoot":"","sources":["../../../src/tools/directDebit/getMandateStatus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAG/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAQxD,OAAO,EAAE,2BAA2B,EAAE,MAAM,uCAAuC,CAAC;AAEpF,QAAA,MAAM,UAAU,EAAE,IAcjB,CAAC;AAEF,iBAAe,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,CA4B5D;AAID,OAAO,EAAE,UAAU,EAAE,2BAA2B,IAAI,WAAW,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { zodToJsonSchema } from "zod-to-json-schema";
|
|
3
|
+
import { apiGet } from "../../client/monnifyClient.js";
|
|
4
|
+
import { sanitiseMandateStatusResponse } from "../../security/sanitiser.js";
|
|
5
|
+
import { registerTool } from "../registry.js";
|
|
6
|
+
import { MonnifyApiError } from "../../utils/errors.js";
|
|
7
|
+
import { errorResult } from "../../types/mcp.js";
|
|
8
|
+
import { formatMandateStatus } from "../../utils/format.js";
|
|
9
|
+
import { getResponseFormat } from "../../utils/clientContext.js";
|
|
10
|
+
import { GetMandateStatusInputSchema } from "../../schemas/extended/directDebit.js";
|
|
11
|
+
const definition = {
|
|
12
|
+
name: "monnify_get_mandate_status",
|
|
13
|
+
description: `Retrieves the current status of a Direct Debit mandate.
|
|
14
|
+
|
|
15
|
+
WHEN TO USE: After creating a mandate to check if the customer has authorised it (mandateStatus = ACTIVATED), or before attempting a debit. You MUST confirm mandateStatus = ACTIVATED before calling monnify_debit_mandate.
|
|
16
|
+
|
|
17
|
+
PREREQUISITES: A mandate must exist — call monnify_create_mandate first.
|
|
18
|
+
|
|
19
|
+
SIDE EFFECTS: None. Read-only operation.
|
|
20
|
+
|
|
21
|
+
MFA NOTE: Not applicable.
|
|
22
|
+
|
|
23
|
+
KEY OUTPUT FIELDS: mandateReference, mandateCode, mandateStatus (PENDING_AUTHORIZATION | ACTIVATED | CANCELLED | REJECTED), mandateAmount, mandateType, customerName, customerAccountNumber, startDate, endDate, authorizationLink.`,
|
|
24
|
+
inputSchema: zodToJsonSchema(GetMandateStatusInputSchema),
|
|
25
|
+
};
|
|
26
|
+
async function handler(args) {
|
|
27
|
+
try {
|
|
28
|
+
const parsed = GetMandateStatusInputSchema.parse(args);
|
|
29
|
+
const result = await apiGet("/api/v1/direct-debit/mandate/", { mandateReferences: parsed.mandateReferences });
|
|
30
|
+
const sanitised = sanitiseMandateStatusResponse(result);
|
|
31
|
+
return {
|
|
32
|
+
content: [{ type: "text", text: getResponseFormat() === "json" ? JSON.stringify(sanitised, null, 2) : formatMandateStatus(sanitised) }],
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
if (error instanceof z.ZodError) {
|
|
37
|
+
return {
|
|
38
|
+
content: [
|
|
39
|
+
{
|
|
40
|
+
type: "text",
|
|
41
|
+
text: `Validation failed:\n${error.issues.map((i) => ` - ${i.path.join(".")}: ${i.message}`).join("\n")}`,
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
isError: true,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
if (error instanceof MonnifyApiError) {
|
|
48
|
+
return { content: [error.toMcpContent()], isError: true };
|
|
49
|
+
}
|
|
50
|
+
return errorResult(`monnify_get_mandate_status failed: ${String(error)}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
registerTool({ definition, handler });
|
|
54
|
+
export { definition, GetMandateStatusInputSchema as inputSchema, handler };
|
|
55
|
+
//# sourceMappingURL=getMandateStatus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getMandateStatus.js","sourceRoot":"","sources":["../../../src/tools/directDebit/getMandateStatus.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,2BAA2B,EAAE,MAAM,uCAAuC,CAAC;AAEpF,MAAM,UAAU,GAAS;IACvB,IAAI,EAAE,4BAA4B;IAClC,WAAW,EAAE;;;;;;;;;;oOAUqN;IAClO,WAAW,EAAE,eAAe,CAAC,2BAA2B,CAAwB;CACjF,CAAC;AAEF,KAAK,UAAU,OAAO,CAAC,IAAa;IAClC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,2BAA2B,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,MAAM,MAAM,CACzB,+BAA+B,EAC/B,EAAE,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,EAAE,CAChD,CAAC;QACF,MAAM,SAAS,GAAG,6BAA6B,CAAC,MAAM,CAAC,CAAC;QACxD,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,SAAoC,CAAC,EAAE,CAAC;SACnK,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;YAChC,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,uBAAuB,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;qBAC3G;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;YACrC,OAAO,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC5D,CAAC;QACD,OAAO,WAAW,CAAC,sCAAsC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC5E,CAAC;AACH,CAAC;AAED,YAAY,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,2BAA2B,IAAI,WAAW,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Tool } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
import type { McpToolResult } from "../types/mcp.js";
|
|
3
|
+
interface ToolEntry {
|
|
4
|
+
definition: Tool;
|
|
5
|
+
handler: (args: unknown) => Promise<McpToolResult>;
|
|
6
|
+
}
|
|
7
|
+
export declare function registerTool(entry: ToolEntry): void;
|
|
8
|
+
export declare function getAllToolDefinitions(): Tool[];
|
|
9
|
+
export declare function dispatchTool(name: string, args: unknown): Promise<McpToolResult>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGrD,UAAU,SAAS;IACjB,UAAU,EAAE,IAAI,CAAC;IACjB,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;CACpD;AAID,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAEnD;AAED,wBAAgB,qBAAqB,IAAI,IAAI,EAAE,CAE9C;AAED,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,aAAa,CAAC,CAIxB"}
|