stables-mcp-server 1.0.0 → 1.3.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/README.md +221 -36
- package/build/index.js +5 -1
- package/build/index.js.map +1 -1
- package/build/lib/stables-client.d.ts +200 -102
- package/build/lib/stables-client.d.ts.map +1 -1
- package/build/lib/stables-client.js +176 -52
- package/build/lib/stables-client.js.map +1 -1
- package/build/tools/api-keys.d.ts.map +1 -1
- package/build/tools/api-keys.js +6 -7
- package/build/tools/api-keys.js.map +1 -1
- package/build/tools/customers.d.ts +1 -1
- package/build/tools/customers.d.ts.map +1 -1
- package/build/tools/customers.js +243 -56
- package/build/tools/customers.js.map +1 -1
- package/build/tools/notifications.d.ts +8 -0
- package/build/tools/notifications.d.ts.map +1 -0
- package/build/tools/notifications.js +125 -0
- package/build/tools/notifications.js.map +1 -0
- package/build/tools/quotes.d.ts +1 -2
- package/build/tools/quotes.d.ts.map +1 -1
- package/build/tools/quotes.js +26 -12
- package/build/tools/quotes.js.map +1 -1
- package/build/tools/transfers.d.ts +1 -2
- package/build/tools/transfers.d.ts.map +1 -1
- package/build/tools/transfers.js +28 -20
- package/build/tools/transfers.js.map +1 -1
- package/build/tools/virtual-accounts.d.ts +1 -0
- package/build/tools/virtual-accounts.d.ts.map +1 -1
- package/build/tools/virtual-accounts.js +162 -13
- package/build/tools/virtual-accounts.js.map +1 -1
- package/build/tools/webhooks.d.ts +1 -2
- package/build/tools/webhooks.d.ts.map +1 -1
- package/build/tools/webhooks.js +15 -8
- package/build/tools/webhooks.js.map +1 -1
- package/package.json +17 -3
package/build/tools/quotes.js
CHANGED
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Quote Tools for Stables MCP Server
|
|
3
|
-
*
|
|
4
|
-
* Supports paymentMethodType (SWIFT, LOCAL) for fiat payouts
|
|
3
|
+
* Synced with OpenAPI spec from https://api.sandbox.stables.money/docs
|
|
5
4
|
*/
|
|
6
5
|
import { z } from "zod";
|
|
7
6
|
export function registerQuoteTools(server, client) {
|
|
8
7
|
// Create Quote
|
|
9
8
|
server.tool("create_quote", "Get a quote for currency exchange. Quotes show the exchange rate, fees, and amount the customer will receive. Quotes expire after 30 seconds. Currently supports crypto → fiat (off-ramp) with more types coming soon.", {
|
|
10
|
-
customerId: z.string().describe("The customer ID to
|
|
11
|
-
fromCurrency: z.
|
|
9
|
+
customerId: z.string().optional().describe("The customer ID to associate this quote with. Required if the quote will be used to create a transfer."),
|
|
10
|
+
fromCurrency: z.enum(["USDC", "USDT"]).describe("Source cryptocurrency (USDC or USDT)"),
|
|
12
11
|
fromAmount: z.string().describe("Amount to convert (e.g., '125.75')"),
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
paymentMethodType: z.enum(["SWIFT", "LOCAL"]).
|
|
17
|
-
}, async ({ customerId, fromCurrency, fromAmount, toCurrency, toCountry,
|
|
12
|
+
fromNetwork: z.enum(["ethereum", "polygon", "polygon-amoy"]).describe("Blockchain network for the source crypto"),
|
|
13
|
+
toCurrency: z.string().describe("Destination currency code (e.g., 'EUR', 'USD', 'GBP')"),
|
|
14
|
+
toCountry: z.string().describe("Destination country code (e.g., 'GR', 'US', 'GB')"),
|
|
15
|
+
paymentMethodType: z.enum(["SWIFT", "LOCAL"]).describe("Payment method for fiat payouts - 'SWIFT' for international, 'LOCAL' for domestic rails"),
|
|
16
|
+
}, async ({ customerId, fromCurrency, fromAmount, fromNetwork, toCurrency, toCountry, paymentMethodType }) => {
|
|
18
17
|
try {
|
|
19
18
|
const response = await client.createQuote({
|
|
20
19
|
customerId,
|
|
@@ -31,6 +30,17 @@ export function registerQuoteTools(server, client) {
|
|
|
31
30
|
});
|
|
32
31
|
const quote = response.quote;
|
|
33
32
|
const expiresIn = Math.max(0, Math.floor((new Date(quote.expiresAt).getTime() - Date.now()) / 1000));
|
|
33
|
+
let feeDetails = `Total Fees: ${quote.fees.totalFee.amount} ${quote.fees.totalFee.currency}`;
|
|
34
|
+
if (quote.fees.fxFee)
|
|
35
|
+
feeDetails += `\n FX Fee: ${quote.fees.fxFee.amount} ${quote.fees.fxFee.currency}`;
|
|
36
|
+
if (quote.fees.platformFee)
|
|
37
|
+
feeDetails += `\n Platform Fee: ${quote.fees.platformFee.amount} ${quote.fees.platformFee.currency}`;
|
|
38
|
+
if (quote.fees.paymentMethodFee)
|
|
39
|
+
feeDetails += `\n Payment Method Fee: ${quote.fees.paymentMethodFee.amount} ${quote.fees.paymentMethodFee.currency}`;
|
|
40
|
+
if (quote.fees.networkFee)
|
|
41
|
+
feeDetails += `\n Network Fee: ${quote.fees.networkFee.amount} ${quote.fees.networkFee.currency}`;
|
|
42
|
+
if (quote.fees.integratorFee)
|
|
43
|
+
feeDetails += `\n Integrator Fee: ${quote.fees.integratorFee.amount} ${quote.fees.integratorFee.currency}`;
|
|
34
44
|
return {
|
|
35
45
|
content: [
|
|
36
46
|
{
|
|
@@ -42,10 +52,10 @@ Status: ${quote.status}
|
|
|
42
52
|
|
|
43
53
|
Converting:
|
|
44
54
|
From: ${quote.from.amount} ${quote.from.currency}${quote.from.network ? ` (${quote.from.network})` : ""}
|
|
45
|
-
To: ${quote.to.amount} ${quote.to.currency}
|
|
55
|
+
To: ${quote.to.amount} ${quote.to.currency} via ${quote.to.paymentMethodType}
|
|
46
56
|
|
|
47
57
|
Exchange Rate: ${quote.exchangeRate}
|
|
48
|
-
|
|
58
|
+
${feeDetails}
|
|
49
59
|
|
|
50
60
|
Expires in: ${expiresIn} seconds
|
|
51
61
|
Expires at: ${quote.expiresAt}
|
|
@@ -76,10 +86,14 @@ To execute this quote, use 'create_transfer' with this quoteId and include bank
|
|
|
76
86
|
const quote = response.quote;
|
|
77
87
|
const isExpired = quote.status === "QUOTE_STATUS_EXPIRED" || new Date(quote.expiresAt) < new Date();
|
|
78
88
|
const isUsed = quote.status === "QUOTE_STATUS_USED";
|
|
89
|
+
const isCancelled = quote.status === "QUOTE_STATUS_CANCELLED";
|
|
79
90
|
let statusMessage = "";
|
|
80
91
|
if (isUsed) {
|
|
81
92
|
statusMessage = "This quote has already been used to create a transfer.";
|
|
82
93
|
}
|
|
94
|
+
else if (isCancelled) {
|
|
95
|
+
statusMessage = "This quote has been cancelled.";
|
|
96
|
+
}
|
|
83
97
|
else if (isExpired) {
|
|
84
98
|
statusMessage = "This quote has expired. Create a new quote to proceed.";
|
|
85
99
|
}
|
|
@@ -98,7 +112,7 @@ Status: ${quote.status}
|
|
|
98
112
|
|
|
99
113
|
Converting:
|
|
100
114
|
From: ${quote.from.amount} ${quote.from.currency}${quote.from.network ? ` (${quote.from.network})` : ""}
|
|
101
|
-
To: ${quote.to.amount} ${quote.to.currency}
|
|
115
|
+
To: ${quote.to.amount} ${quote.to.currency} via ${quote.to.paymentMethodType}
|
|
102
116
|
|
|
103
117
|
Exchange Rate: ${quote.exchangeRate}
|
|
104
118
|
Total Fees: ${quote.fees.totalFee.amount} ${quote.fees.totalFee.currency}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quotes.js","sourceRoot":"","sources":["../../src/tools/quotes.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"quotes.js","sourceRoot":"","sources":["../../src/tools/quotes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Transfer Tools for Stables MCP Server
|
|
3
|
-
*
|
|
4
|
-
* Currently supports crypto → fiat (off-ramp) transfers
|
|
3
|
+
* Synced with OpenAPI spec from https://api.sandbox.stables.money/docs
|
|
5
4
|
*/
|
|
6
5
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
7
6
|
import { StablesApiClient } from "../lib/stables-client.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transfers.d.ts","sourceRoot":"","sources":["../../src/tools/transfers.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"transfers.d.ts","sourceRoot":"","sources":["../../src/tools/transfers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,QAqPhF"}
|
package/build/tools/transfers.js
CHANGED
|
@@ -1,39 +1,44 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Transfer Tools for Stables MCP Server
|
|
3
|
-
*
|
|
4
|
-
* Currently supports crypto → fiat (off-ramp) transfers
|
|
3
|
+
* Synced with OpenAPI spec from https://api.sandbox.stables.money/docs
|
|
5
4
|
*/
|
|
6
5
|
import { z } from "zod";
|
|
7
6
|
export function registerTransferTools(server, client) {
|
|
8
7
|
// Create Transfer
|
|
9
|
-
server.tool("create_transfer", "Execute a transfer using an active quote. The quote must not be expired. This initiates the actual money movement.
|
|
8
|
+
server.tool("create_transfer", "Execute a transfer using an active quote. The quote must not be expired. This initiates the actual money movement. Bank/payment details are required for off-ramp (crypto to fiat) transfers.", {
|
|
10
9
|
customerId: z.string().describe("The customer ID for this transfer"),
|
|
11
10
|
quoteId: z.string().describe("The quote ID to execute"),
|
|
12
11
|
accountHolderName: z.string().optional().describe("Bank account holder's full name (required for off-ramp)"),
|
|
13
|
-
iban: z.string().optional().describe("IBAN for the destination bank account"),
|
|
12
|
+
iban: z.string().optional().describe("IBAN for the destination bank account (EU/international)"),
|
|
14
13
|
accountNumber: z.string().optional().describe("Bank account number (if not using IBAN)"),
|
|
15
|
-
bankName: z.string().optional().describe("Name of the destination bank"),
|
|
16
|
-
bankCountry: z.string().optional().describe("Two-letter country code of the bank (e.g., '
|
|
17
|
-
bankCurrency: z.string().optional().describe("Currency for the bank payout (e.g., 'EUR', 'USD')"),
|
|
14
|
+
bankName: z.string().optional().describe("Name of the destination bank (required for off-ramp)"),
|
|
15
|
+
bankCountry: z.string().optional().describe("Two-letter country code of the bank (e.g., 'AU', 'US')"),
|
|
16
|
+
bankCurrency: z.string().optional().describe("Currency for the bank payout (e.g., 'EUR', 'USD', 'AUD')"),
|
|
17
|
+
accountType: z.enum(["savings", "checking", "payment"]).optional().describe("Type of bank account"),
|
|
18
18
|
swiftCode: z.string().optional().describe("SWIFT/BIC code for international transfers"),
|
|
19
|
-
routingNumber: z.string().optional().describe("
|
|
20
|
-
sortCode: z.string().optional().describe("Sort code (
|
|
19
|
+
routingNumber: z.string().optional().describe("ABA routing number (US)"),
|
|
20
|
+
sortCode: z.string().optional().describe("Sort code (UK)"),
|
|
21
|
+
ifscCode: z.string().optional().describe("IFSC code (India)"),
|
|
22
|
+
bsbCode: z.string().optional().describe("BSB code (Australia)"),
|
|
21
23
|
metadata: z.record(z.string()).optional().describe("Optional metadata to attach to the transfer"),
|
|
22
|
-
}, async ({ customerId, quoteId, accountHolderName, iban, accountNumber, bankName, bankCountry, bankCurrency, swiftCode, routingNumber, sortCode, metadata }) => {
|
|
24
|
+
}, async ({ customerId, quoteId, accountHolderName, iban, accountNumber, bankName, bankCountry, bankCurrency, accountType, swiftCode, routingNumber, sortCode, ifscCode, bsbCode, metadata }) => {
|
|
23
25
|
try {
|
|
24
26
|
// Build payment method if bank details provided
|
|
25
27
|
const paymentMethod = accountHolderName ? {
|
|
26
28
|
bankTransfer: {
|
|
27
29
|
accountHolderName,
|
|
28
|
-
iban,
|
|
29
|
-
accountNumber,
|
|
30
|
-
bankName,
|
|
31
|
-
bankCountry,
|
|
32
|
-
currency: bankCurrency,
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
30
|
+
...(iban && { iban }),
|
|
31
|
+
...(accountNumber && { accountNumber }),
|
|
32
|
+
bankName: bankName || "",
|
|
33
|
+
bankCountry: bankCountry || "",
|
|
34
|
+
currency: bankCurrency || "",
|
|
35
|
+
...(accountType && { accountType }),
|
|
36
|
+
bankCodes: (swiftCode || routingNumber || sortCode || ifscCode || bsbCode) ? {
|
|
37
|
+
...(swiftCode && { swiftCode }),
|
|
38
|
+
...(routingNumber && { abaCode: routingNumber }),
|
|
39
|
+
...(sortCode && { sortCode }),
|
|
40
|
+
...(ifscCode && { ifscCode }),
|
|
41
|
+
...(bsbCode && { bsbCode }),
|
|
37
42
|
} : undefined,
|
|
38
43
|
},
|
|
39
44
|
} : undefined;
|
|
@@ -77,11 +82,14 @@ Use 'get_transfer' to check the status.`,
|
|
|
77
82
|
};
|
|
78
83
|
}
|
|
79
84
|
catch (error) {
|
|
85
|
+
const apiError = error;
|
|
86
|
+
const details = apiError.errorBody ? `\nAPI Response: ${JSON.stringify(apiError.errorBody, null, 2)}` : "";
|
|
87
|
+
const status = apiError.statusCode ? ` (HTTP ${apiError.statusCode})` : "";
|
|
80
88
|
return {
|
|
81
89
|
content: [
|
|
82
90
|
{
|
|
83
91
|
type: "text",
|
|
84
|
-
text: `Failed to create transfer: ${error instanceof Error ? error.message : "Unknown error"}`,
|
|
92
|
+
text: `Failed to create transfer${status}: ${error instanceof Error ? error.message : "Unknown error"}${details}`,
|
|
85
93
|
},
|
|
86
94
|
],
|
|
87
95
|
isError: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transfers.js","sourceRoot":"","sources":["../../src/tools/transfers.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"transfers.js","sourceRoot":"","sources":["../../src/tools/transfers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"virtual-accounts.d.ts","sourceRoot":"","sources":["../../src/tools/virtual-accounts.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"virtual-accounts.d.ts","sourceRoot":"","sources":["../../src/tools/virtual-accounts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,QA2TtF"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Virtual Account Tools for Stables MCP Server
|
|
3
|
+
* Synced with OpenAPI spec from https://api.sandbox.stables.money/docs
|
|
3
4
|
*/
|
|
4
5
|
import { z } from "zod";
|
|
5
6
|
export function registerVirtualAccountTools(server, client) {
|
|
@@ -9,37 +10,47 @@ export function registerVirtualAccountTools(server, client) {
|
|
|
9
10
|
sourceCurrency: z.string().describe("Currency for the virtual account (e.g., 'USD', 'EUR', 'GBP')"),
|
|
10
11
|
depositHandlingMode: z.enum(["auto_payout", "hold", "manual"]).optional()
|
|
11
12
|
.describe("How to handle deposits: 'auto_payout' converts and sends to wallet, 'hold' keeps as fiat, 'manual' requires approval"),
|
|
12
|
-
destinationAddress: z.string().optional().describe("Crypto wallet address for
|
|
13
|
-
|
|
13
|
+
destinationAddress: z.string().optional().describe("Crypto wallet address for payouts"),
|
|
14
|
+
destinationPaymentRail: z.enum(["arbitrum", "avalanche_c_chain", "base", "celo", "ethereum", "optimism", "polygon", "solana", "stellar", "tron"]).optional()
|
|
14
15
|
.describe("Blockchain network for the destination wallet"),
|
|
15
16
|
destinationCurrency: z.enum(["usdc", "usdt", "dai", "pyusd", "eurc"]).optional()
|
|
16
17
|
.describe("Stablecoin to receive (default: usdc)"),
|
|
17
|
-
}, async ({ customerId, sourceCurrency, depositHandlingMode, destinationAddress,
|
|
18
|
+
}, async ({ customerId, sourceCurrency, depositHandlingMode, destinationAddress, destinationPaymentRail, destinationCurrency }) => {
|
|
18
19
|
try {
|
|
19
20
|
const request = {
|
|
20
21
|
source: { currency: sourceCurrency },
|
|
21
22
|
deposit_handling_mode: depositHandlingMode,
|
|
22
23
|
};
|
|
23
24
|
// Add destination if all required fields provided
|
|
24
|
-
if (destinationAddress &&
|
|
25
|
-
request.
|
|
25
|
+
if (destinationAddress && destinationPaymentRail) {
|
|
26
|
+
request.destination = {
|
|
26
27
|
currency: destinationCurrency || "usdc",
|
|
27
|
-
|
|
28
|
+
payment_rail: destinationPaymentRail,
|
|
28
29
|
address: destinationAddress,
|
|
29
30
|
};
|
|
30
31
|
}
|
|
31
32
|
const account = await client.createVirtualAccount(customerId, request);
|
|
32
33
|
const instructions = account.source_deposit_instructions;
|
|
33
34
|
let depositInfo = `Currency: ${instructions.currency}`;
|
|
35
|
+
depositInfo += `\nPayment Rails: ${instructions.payment_rails.join(", ")}`;
|
|
34
36
|
if (instructions.bank_name)
|
|
35
37
|
depositInfo += `\nBank: ${instructions.bank_name}`;
|
|
36
38
|
if (instructions.bank_account_number)
|
|
37
39
|
depositInfo += `\nAccount Number: ${instructions.bank_account_number}`;
|
|
38
40
|
if (instructions.bank_routing_number)
|
|
39
41
|
depositInfo += `\nRouting Number: ${instructions.bank_routing_number}`;
|
|
40
|
-
|
|
41
|
-
|
|
42
|
+
if (instructions.iban)
|
|
43
|
+
depositInfo += `\nIBAN: ${instructions.iban}`;
|
|
44
|
+
if (instructions.bic)
|
|
45
|
+
depositInfo += `\nBIC: ${instructions.bic}`;
|
|
46
|
+
if (instructions.account_holder_name)
|
|
47
|
+
depositInfo += `\nAccount Holder: ${instructions.account_holder_name}`;
|
|
48
|
+
const destInfo = account.destination
|
|
49
|
+
? `\nPayout Address: ${account.destination.address}\nPayment Rail: ${account.destination.payment_rail}\nCurrency: ${account.destination.currency}`
|
|
42
50
|
: "\nNo payout destination configured";
|
|
51
|
+
const balanceInfo = account.held_balance
|
|
52
|
+
? `\nHeld Balance: ${account.held_balance.amount} ${account.held_balance.currency}`
|
|
53
|
+
: "";
|
|
43
54
|
return {
|
|
44
55
|
content: [
|
|
45
56
|
{
|
|
@@ -55,7 +66,7 @@ Deposit Instructions:
|
|
|
55
66
|
${depositInfo}
|
|
56
67
|
|
|
57
68
|
Payout Destination:${destInfo}
|
|
58
|
-
|
|
69
|
+
${balanceInfo}
|
|
59
70
|
Created: ${account.created_at}
|
|
60
71
|
|
|
61
72
|
Share the deposit instructions with the customer to receive funds.`,
|
|
@@ -75,7 +86,7 @@ Share the deposit instructions with the customer to receive funds.`,
|
|
|
75
86
|
};
|
|
76
87
|
}
|
|
77
88
|
});
|
|
78
|
-
// List Virtual Accounts
|
|
89
|
+
// List Virtual Accounts (by customer)
|
|
79
90
|
server.tool("list_virtual_accounts", "List all virtual accounts for a customer", {
|
|
80
91
|
customerId: z.string().describe("The customer ID to list virtual accounts for"),
|
|
81
92
|
status: z.enum(["activated", "deactivated", "pending", "closed"]).optional()
|
|
@@ -95,10 +106,11 @@ Share the deposit instructions with the customer to receive funds.`,
|
|
|
95
106
|
};
|
|
96
107
|
}
|
|
97
108
|
const accountList = response.data.map((a) => {
|
|
98
|
-
const dest = a.
|
|
99
|
-
? `Payout: ${a.
|
|
109
|
+
const dest = a.destination
|
|
110
|
+
? `Payout: ${a.destination.address.slice(0, 10)}... (${a.destination.payment_rail})`
|
|
100
111
|
: "No payout destination";
|
|
101
|
-
|
|
112
|
+
const balance = a.held_balance ? ` | Balance: ${a.held_balance.amount} ${a.held_balance.currency}` : "";
|
|
113
|
+
return `- ${a.id}: ${a.source_deposit_instructions.currency} (${a.status}) - ${dest}${balance}`;
|
|
102
114
|
}).join("\n");
|
|
103
115
|
return {
|
|
104
116
|
content: [
|
|
@@ -123,5 +135,142 @@ ${accountList}`,
|
|
|
123
135
|
};
|
|
124
136
|
}
|
|
125
137
|
});
|
|
138
|
+
// Update Virtual Account
|
|
139
|
+
server.tool("update_virtual_account", "Update virtual account settings (e.g., deposit handling mode)", {
|
|
140
|
+
customerId: z.string().describe("The customer ID"),
|
|
141
|
+
virtualAccountId: z.string().describe("The virtual account ID to update"),
|
|
142
|
+
depositHandlingMode: z.enum(["auto_payout", "hold", "manual"]).describe("New deposit handling mode"),
|
|
143
|
+
}, async ({ customerId, virtualAccountId, depositHandlingMode }) => {
|
|
144
|
+
try {
|
|
145
|
+
const account = await client.updateVirtualAccount(customerId, virtualAccountId, {
|
|
146
|
+
deposit_handling_mode: depositHandlingMode,
|
|
147
|
+
});
|
|
148
|
+
return {
|
|
149
|
+
content: [
|
|
150
|
+
{
|
|
151
|
+
type: "text",
|
|
152
|
+
text: `Virtual account ${account.id} updated.
|
|
153
|
+
Deposit Mode: ${account.deposit_handling_mode}
|
|
154
|
+
Status: ${account.status}`,
|
|
155
|
+
},
|
|
156
|
+
],
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
return {
|
|
161
|
+
content: [
|
|
162
|
+
{
|
|
163
|
+
type: "text",
|
|
164
|
+
text: `Failed to update virtual account: ${error instanceof Error ? error.message : "Unknown error"}`,
|
|
165
|
+
},
|
|
166
|
+
],
|
|
167
|
+
isError: true,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
// Deactivate Virtual Account
|
|
172
|
+
server.tool("deactivate_virtual_account", "Deactivate a virtual account to prevent new incoming transactions", {
|
|
173
|
+
customerId: z.string().describe("The customer ID"),
|
|
174
|
+
virtualAccountId: z.string().describe("The virtual account ID to deactivate"),
|
|
175
|
+
}, async ({ customerId, virtualAccountId }) => {
|
|
176
|
+
try {
|
|
177
|
+
const account = await client.deactivateVirtualAccount(customerId, virtualAccountId);
|
|
178
|
+
return {
|
|
179
|
+
content: [
|
|
180
|
+
{
|
|
181
|
+
type: "text",
|
|
182
|
+
text: `Virtual account ${account.id} has been deactivated. No new deposits will be accepted.`,
|
|
183
|
+
},
|
|
184
|
+
],
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
catch (error) {
|
|
188
|
+
return {
|
|
189
|
+
content: [
|
|
190
|
+
{
|
|
191
|
+
type: "text",
|
|
192
|
+
text: `Failed to deactivate virtual account: ${error instanceof Error ? error.message : "Unknown error"}`,
|
|
193
|
+
},
|
|
194
|
+
],
|
|
195
|
+
isError: true,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
// Reactivate Virtual Account
|
|
200
|
+
server.tool("reactivate_virtual_account", "Reactivate a previously deactivated virtual account", {
|
|
201
|
+
customerId: z.string().describe("The customer ID"),
|
|
202
|
+
virtualAccountId: z.string().describe("The virtual account ID to reactivate"),
|
|
203
|
+
}, async ({ customerId, virtualAccountId }) => {
|
|
204
|
+
try {
|
|
205
|
+
const account = await client.reactivateVirtualAccount(customerId, virtualAccountId);
|
|
206
|
+
return {
|
|
207
|
+
content: [
|
|
208
|
+
{
|
|
209
|
+
type: "text",
|
|
210
|
+
text: `Virtual account ${account.id} has been reactivated. Status: ${account.status}`,
|
|
211
|
+
},
|
|
212
|
+
],
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
catch (error) {
|
|
216
|
+
return {
|
|
217
|
+
content: [
|
|
218
|
+
{
|
|
219
|
+
type: "text",
|
|
220
|
+
text: `Failed to reactivate virtual account: ${error instanceof Error ? error.message : "Unknown error"}`,
|
|
221
|
+
},
|
|
222
|
+
],
|
|
223
|
+
isError: true,
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
// Get Virtual Account History
|
|
228
|
+
server.tool("get_virtual_account_history", "Get the activity history for a virtual account (deposits, payouts, etc.)", {
|
|
229
|
+
customerId: z.string().describe("The customer ID"),
|
|
230
|
+
virtualAccountId: z.string().describe("The virtual account ID"),
|
|
231
|
+
limit: z.number().optional().describe("Maximum number of events to return (default: 10)"),
|
|
232
|
+
eventType: z.enum(["funds_scheduled", "funds_received", "payment_submitted", "payment_processed", "in_review", "refund", "microdeposit", "account_update", "deactivation", "activation"]).optional()
|
|
233
|
+
.describe("Filter by event type"),
|
|
234
|
+
}, async ({ customerId, virtualAccountId, limit, eventType: _eventType }) => {
|
|
235
|
+
try {
|
|
236
|
+
const response = await client.getVirtualAccountHistory(customerId, virtualAccountId, {
|
|
237
|
+
limit,
|
|
238
|
+
});
|
|
239
|
+
if (response.data.length === 0) {
|
|
240
|
+
return {
|
|
241
|
+
content: [
|
|
242
|
+
{
|
|
243
|
+
type: "text",
|
|
244
|
+
text: `No activity found for virtual account ${virtualAccountId}.`,
|
|
245
|
+
},
|
|
246
|
+
],
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
const eventList = response.data.map((e) => {
|
|
250
|
+
return `- ${e.created_at}: ${e.type} - ${e.amount} ${e.currency}${e.deposit_id ? ` (Deposit: ${e.deposit_id})` : ""}`;
|
|
251
|
+
}).join("\n");
|
|
252
|
+
return {
|
|
253
|
+
content: [
|
|
254
|
+
{
|
|
255
|
+
type: "text",
|
|
256
|
+
text: `Virtual Account History (${response.count} events):
|
|
257
|
+
|
|
258
|
+
${eventList}`,
|
|
259
|
+
},
|
|
260
|
+
],
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
catch (error) {
|
|
264
|
+
return {
|
|
265
|
+
content: [
|
|
266
|
+
{
|
|
267
|
+
type: "text",
|
|
268
|
+
text: `Failed to get virtual account history: ${error instanceof Error ? error.message : "Unknown error"}`,
|
|
269
|
+
},
|
|
270
|
+
],
|
|
271
|
+
isError: true,
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
});
|
|
126
275
|
}
|
|
127
276
|
//# sourceMappingURL=virtual-accounts.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"virtual-accounts.js","sourceRoot":"","sources":["../../src/tools/virtual-accounts.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"virtual-accounts.js","sourceRoot":"","sources":["../../src/tools/virtual-accounts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Webhook Management Tools for Stables MCP Server
|
|
3
|
-
*
|
|
4
|
-
* Uses eventTypes (not events), includes name and secret fields
|
|
3
|
+
* Synced with OpenAPI spec from https://api.sandbox.stables.money/docs
|
|
5
4
|
*/
|
|
6
5
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
7
6
|
import { StablesApiClient } from "../lib/stables-client.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../../src/tools/webhooks.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../../src/tools/webhooks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,QAuJ/E"}
|
package/build/tools/webhooks.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Webhook Management Tools for Stables MCP Server
|
|
3
|
-
*
|
|
4
|
-
* Uses eventTypes (not events), includes name and secret fields
|
|
3
|
+
* Synced with OpenAPI spec from https://api.sandbox.stables.money/docs
|
|
5
4
|
*/
|
|
6
5
|
import { z } from "zod";
|
|
7
6
|
export function registerWebhookTools(server, client) {
|
|
@@ -10,13 +9,21 @@ export function registerWebhookTools(server, client) {
|
|
|
10
9
|
|
|
11
10
|
Available event types:
|
|
12
11
|
- WEBHOOK_EVENT_TYPE_CUSTOMER_CREATED
|
|
12
|
+
- WEBHOOK_EVENT_TYPE_CUSTOMER_UPDATED
|
|
13
13
|
- WEBHOOK_EVENT_TYPE_KYC_STATUS_CHANGED
|
|
14
|
+
- WEBHOOK_EVENT_TYPE_PAYMENT_CREATED
|
|
14
15
|
- WEBHOOK_EVENT_TYPE_PAYMENT_STATUS_CHANGED
|
|
16
|
+
- WEBHOOK_EVENT_TYPE_QUOTE_CREATED
|
|
17
|
+
- WEBHOOK_EVENT_TYPE_QUOTE_EXPIRED
|
|
18
|
+
- WEBHOOK_EVENT_TYPE_VA_DEPOSIT_RECEIVED
|
|
19
|
+
- WEBHOOK_EVENT_TYPE_VA_PAYOUT_COMPLETED
|
|
20
|
+
- WEBHOOK_EVENT_TYPE_VA_PAYOUT_FAILED
|
|
21
|
+
- WEBHOOK_EVENT_TYPE_ALL
|
|
15
22
|
|
|
16
23
|
Security: Set a secret to enable HMAC-SHA256 signature verification via X-Webhook-Signature header.`, {
|
|
17
24
|
name: z.string().describe("A descriptive name for this webhook (e.g., 'Payment Status Notifications')"),
|
|
18
25
|
url: z.string().url().describe("The HTTPS URL to receive webhook POST requests"),
|
|
19
|
-
eventTypes: z.array(z.string()).describe("List of event types to subscribe to (e.g., ['
|
|
26
|
+
eventTypes: z.array(z.string()).describe("List of event types to subscribe to (e.g., ['WEBHOOK_EVENT_TYPE_PAYMENT_STATUS_CHANGED'])"),
|
|
20
27
|
secret: z.string().optional().describe("Optional signing secret for HMAC-SHA256 webhook signature verification"),
|
|
21
28
|
}, async ({ name, url, eventTypes, secret }) => {
|
|
22
29
|
try {
|
|
@@ -65,18 +72,18 @@ Tip: Return 200 quickly and process events asynchronously. Use eventId for idemp
|
|
|
65
72
|
type: "text",
|
|
66
73
|
text: `No webhooks configured. Use 'create_webhook' to subscribe to events.
|
|
67
74
|
|
|
68
|
-
Available event types:
|
|
69
|
-
-
|
|
75
|
+
Available event types include:
|
|
76
|
+
- WEBHOOK_EVENT_TYPE_PAYMENT_STATUS_CHANGED
|
|
70
77
|
- WEBHOOK_EVENT_TYPE_KYC_STATUS_CHANGED
|
|
71
|
-
-
|
|
78
|
+
- WEBHOOK_EVENT_TYPE_VA_DEPOSIT_RECEIVED
|
|
79
|
+
- WEBHOOK_EVENT_TYPE_ALL (subscribe to everything)`,
|
|
72
80
|
},
|
|
73
81
|
],
|
|
74
82
|
};
|
|
75
83
|
}
|
|
76
84
|
const webhookList = response.subscriptions.map((w) => {
|
|
77
85
|
const status = w.active ? "Active" : "Inactive";
|
|
78
|
-
|
|
79
|
-
return `- ${id}: "${w.name}" → ${w.url} (${status})\n Events: ${w.eventTypes.join(", ")}`;
|
|
86
|
+
return `- ${w.subscriptionId}: "${w.name}" -> ${w.url} (${status})\n Events: ${w.eventTypes.join(", ")}`;
|
|
80
87
|
}).join("\n\n");
|
|
81
88
|
return {
|
|
82
89
|
content: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../src/tools/webhooks.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../src/tools/webhooks.ts"],"names":[],"mappings":"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"}
|