stables-mcp-server 1.3.0 → 2.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/README.md +52 -41
- package/build/index.d.ts +1 -1
- package/build/index.js +4 -4
- package/build/index.js.map +1 -1
- package/build/lib/stables-client.d.ts +215 -127
- package/build/lib/stables-client.d.ts.map +1 -1
- package/build/lib/stables-client.js +66 -54
- 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 +7 -3
- 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 +240 -107
- package/build/tools/customers.js.map +1 -1
- package/build/tools/payment-methods.d.ts +12 -0
- package/build/tools/payment-methods.d.ts.map +1 -0
- package/build/tools/payment-methods.js +119 -0
- package/build/tools/payment-methods.js.map +1 -0
- package/build/tools/quotes.d.ts +5 -1
- package/build/tools/quotes.d.ts.map +1 -1
- package/build/tools/quotes.js +103 -59
- package/build/tools/quotes.js.map +1 -1
- package/build/tools/transfers.d.ts +4 -1
- package/build/tools/transfers.d.ts.map +1 -1
- package/build/tools/transfers.js +212 -100
- package/build/tools/transfers.js.map +1 -1
- package/build/tools/virtual-accounts.d.ts +1 -1
- package/build/tools/virtual-accounts.d.ts.map +1 -1
- package/build/tools/virtual-accounts.js +56 -70
- package/build/tools/virtual-accounts.js.map +1 -1
- package/build/tools/webhooks.d.ts +1 -1
- package/build/tools/webhooks.d.ts.map +1 -1
- package/build/tools/webhooks.js +38 -18
- package/build/tools/webhooks.js.map +1 -1
- package/package.json +10 -3
- package/build/tools/notifications.d.ts +0 -8
- package/build/tools/notifications.d.ts.map +0 -1
- package/build/tools/notifications.js +0 -125
- package/build/tools/notifications.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"virtual-accounts.js","sourceRoot":"","sources":["../../src/tools/virtual-accounts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,UAAU,2BAA2B,CAAC,MAAiB,EAAE,MAAwB;IACrF,yBAAyB;IACzB,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB,6IAA6I,EAC7I;QACE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;QACpF,cAAc,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"virtual-accounts.js","sourceRoot":"","sources":["../../src/tools/virtual-accounts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Webhook Management Tools for Stables MCP Server
|
|
3
|
-
* Synced with OpenAPI spec from https://api.
|
|
3
|
+
* Synced with OpenAPI spec from https://api.stables.money/docs
|
|
4
4
|
*/
|
|
5
5
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
6
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;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;
|
|
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;AAyB5D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,QAuJ/E"}
|
package/build/tools/webhooks.js
CHANGED
|
@@ -1,30 +1,48 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Webhook Management Tools for Stables MCP Server
|
|
3
|
-
* Synced with OpenAPI spec from https://api.
|
|
3
|
+
* Synced with OpenAPI spec from https://api.stables.money/docs
|
|
4
4
|
*/
|
|
5
5
|
import { z } from "zod";
|
|
6
|
+
/**
|
|
7
|
+
* The tenant-facing subset the API accepts. Declared as an enum rather than
|
|
8
|
+
* free strings so a wrong value is caught before the request instead of coming
|
|
9
|
+
* back as a 400 the model has to guess its way out of.
|
|
10
|
+
*/
|
|
11
|
+
const WEBHOOK_EVENT_TYPES = [
|
|
12
|
+
"customer.created",
|
|
13
|
+
"customer.updated",
|
|
14
|
+
"kyc_link.updated.status_transitioned",
|
|
15
|
+
"transfer.created",
|
|
16
|
+
"transfer.updated.status_transitioned",
|
|
17
|
+
"quote.created",
|
|
18
|
+
"quote.updated.status_transitioned",
|
|
19
|
+
"virtual_account.created",
|
|
20
|
+
"virtual_account.activity.created",
|
|
21
|
+
"virtual_account.activity.updated.status_transitioned",
|
|
22
|
+
"travel_rule.wallet_verification_required",
|
|
23
|
+
"rfi.created",
|
|
24
|
+
"rfi.updated",
|
|
25
|
+
"rfi.resolved",
|
|
26
|
+
"all",
|
|
27
|
+
];
|
|
6
28
|
export function registerWebhookTools(server, client) {
|
|
7
29
|
// Create Webhook
|
|
8
30
|
server.tool("create_webhook", `Subscribe to Stables events via webhook. You'll receive POST requests to your URL when events occur.
|
|
9
31
|
|
|
10
|
-
|
|
11
|
-
- WEBHOOK_EVENT_TYPE_CUSTOMER_CREATED
|
|
12
|
-
- WEBHOOK_EVENT_TYPE_CUSTOMER_UPDATED
|
|
13
|
-
- WEBHOOK_EVENT_TYPE_KYC_STATUS_CHANGED
|
|
14
|
-
- WEBHOOK_EVENT_TYPE_PAYMENT_CREATED
|
|
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
|
|
32
|
+
Event types are dotted and lowercase. Use 'all' to receive everything.
|
|
22
33
|
|
|
23
34
|
Security: Set a secret to enable HMAC-SHA256 signature verification via X-Webhook-Signature header.`, {
|
|
24
|
-
name: z
|
|
35
|
+
name: z
|
|
36
|
+
.string()
|
|
37
|
+
.describe("A descriptive name for this webhook (e.g., 'Transfer status notifications')"),
|
|
25
38
|
url: z.string().url().describe("The HTTPS URL to receive webhook POST requests"),
|
|
26
|
-
eventTypes: z
|
|
27
|
-
|
|
39
|
+
eventTypes: z
|
|
40
|
+
.array(z.enum(WEBHOOK_EVENT_TYPES))
|
|
41
|
+
.describe("Event types to subscribe to (e.g. ['transfer.updated.status_transitioned']), or ['all']"),
|
|
42
|
+
secret: z
|
|
43
|
+
.string()
|
|
44
|
+
.optional()
|
|
45
|
+
.describe("Optional signing secret for HMAC-SHA256 webhook signature verification"),
|
|
28
46
|
}, async ({ name, url, eventTypes, secret }) => {
|
|
29
47
|
try {
|
|
30
48
|
const response = await client.createWebhook({ name, url, eventTypes, secret });
|
|
@@ -81,10 +99,12 @@ Available event types include:
|
|
|
81
99
|
],
|
|
82
100
|
};
|
|
83
101
|
}
|
|
84
|
-
const webhookList = response.subscriptions
|
|
102
|
+
const webhookList = response.subscriptions
|
|
103
|
+
.map((w) => {
|
|
85
104
|
const status = w.active ? "Active" : "Inactive";
|
|
86
105
|
return `- ${w.subscriptionId}: "${w.name}" -> ${w.url} (${status})\n Events: ${w.eventTypes.join(", ")}`;
|
|
87
|
-
})
|
|
106
|
+
})
|
|
107
|
+
.join("\n\n");
|
|
88
108
|
return {
|
|
89
109
|
content: [
|
|
90
110
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../src/tools/webhooks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,UAAU,oBAAoB,CAAC,MAAiB,EAAE,MAAwB;IAC9E,iBAAiB;IACjB,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB
|
|
1
|
+
{"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../src/tools/webhooks.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "stables-mcp-server",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "MCP server for Stables fiat-to-crypto API - enables AI agents to manage customers, quotes, and transfers",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "build/index.js",
|
|
7
7
|
"bin": {
|
|
8
|
-
"stables-mcp-server": "
|
|
8
|
+
"stables-mcp-server": "build/index.js"
|
|
9
9
|
},
|
|
10
10
|
"files": [
|
|
11
11
|
"build",
|
|
@@ -32,11 +32,18 @@
|
|
|
32
32
|
"crypto",
|
|
33
33
|
"fiat",
|
|
34
34
|
"stablecoin",
|
|
35
|
+
"usdc",
|
|
36
|
+
"usdt",
|
|
35
37
|
"payments",
|
|
38
|
+
"payouts",
|
|
39
|
+
"virtual-accounts",
|
|
40
|
+
"agentic-commerce",
|
|
36
41
|
"ai-agents",
|
|
37
42
|
"model-context-protocol",
|
|
38
43
|
"claude",
|
|
39
|
-
"chatgpt"
|
|
44
|
+
"chatgpt",
|
|
45
|
+
"cursor",
|
|
46
|
+
"codex"
|
|
40
47
|
],
|
|
41
48
|
"author": "Stables (https://stables.money)",
|
|
42
49
|
"license": "MIT",
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Notification Tools for Stables MCP Server
|
|
3
|
-
* Sends verification SMS to customers via Twilio
|
|
4
|
-
*/
|
|
5
|
-
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
6
|
-
import { StablesApiClient } from "../lib/stables-client.js";
|
|
7
|
-
export declare function registerNotificationTools(server: McpServer, client: StablesApiClient): void;
|
|
8
|
-
//# sourceMappingURL=notifications.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["../../src/tools/notifications.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,gBAAgB,EAAmB,MAAM,0BAA0B,CAAC;AAS7E,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,gBAAgB,QAqJzB"}
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
import { StablesApiError } from "../lib/stables-client.js";
|
|
3
|
-
function formatError(error) {
|
|
4
|
-
if (error instanceof StablesApiError) {
|
|
5
|
-
return `${error.message} (HTTP ${error.statusCode})`;
|
|
6
|
-
}
|
|
7
|
-
return error instanceof Error ? error.message : "Unknown error";
|
|
8
|
-
}
|
|
9
|
-
export function registerNotificationTools(server, client) {
|
|
10
|
-
server.tool("send_verification_sms", "Send a KYC verification link to a customer via SMS. Automatically fetches the customer's phone number and generates a fresh verification link. Requires TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN, and TWILIO_PHONE_NUMBER environment variables.", {
|
|
11
|
-
customerId: z
|
|
12
|
-
.string()
|
|
13
|
-
.describe("The customer ID to send the verification SMS to"),
|
|
14
|
-
phone: z
|
|
15
|
-
.string()
|
|
16
|
-
.optional()
|
|
17
|
-
.describe("Override phone number (with country code, e.g., '+14155552671'). If not provided, uses the customer's phone on file."),
|
|
18
|
-
botName: z
|
|
19
|
-
.string()
|
|
20
|
-
.optional()
|
|
21
|
-
.describe("Name of the bot/assistant sending the message (default: 'your assistant')"),
|
|
22
|
-
verificationLinkTtlSecs: z
|
|
23
|
-
.number()
|
|
24
|
-
.optional()
|
|
25
|
-
.describe("TTL for the verification link in seconds (default: 1800)"),
|
|
26
|
-
}, async ({ customerId, phone, botName, verificationLinkTtlSecs }) => {
|
|
27
|
-
try {
|
|
28
|
-
// 1. Validate Twilio environment variables
|
|
29
|
-
const twilioAccountSid = process.env.TWILIO_ACCOUNT_SID;
|
|
30
|
-
const twilioAuthToken = process.env.TWILIO_AUTH_TOKEN;
|
|
31
|
-
const twilioPhoneNumber = process.env.TWILIO_PHONE_NUMBER;
|
|
32
|
-
if (!twilioAccountSid || !twilioAuthToken || !twilioPhoneNumber) {
|
|
33
|
-
return {
|
|
34
|
-
content: [
|
|
35
|
-
{
|
|
36
|
-
type: "text",
|
|
37
|
-
text: "Missing Twilio configuration. Please set TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN, and TWILIO_PHONE_NUMBER environment variables.",
|
|
38
|
-
},
|
|
39
|
-
],
|
|
40
|
-
isError: true,
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
// 2. Fetch customer details to get phone and name
|
|
44
|
-
const customer = await client.getCustomer(customerId);
|
|
45
|
-
const recipientPhone = phone || customer.phone;
|
|
46
|
-
if (!recipientPhone) {
|
|
47
|
-
return {
|
|
48
|
-
content: [
|
|
49
|
-
{
|
|
50
|
-
type: "text",
|
|
51
|
-
text: `Customer ${customerId} has no phone number on file. Please provide a phone number via the 'phone' parameter or update the customer's phone first using 'update_customer'.`,
|
|
52
|
-
},
|
|
53
|
-
],
|
|
54
|
-
isError: true,
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
const customerName = customer.firstName || "there";
|
|
58
|
-
const assistantName = botName || "your assistant";
|
|
59
|
-
// 3. Generate a fresh verification link
|
|
60
|
-
const verificationResult = await client.generateVerificationLink(customerId, { ttlInSecs: verificationLinkTtlSecs });
|
|
61
|
-
const verificationLink = verificationResult.kycLink;
|
|
62
|
-
// 4. Compose the SMS message
|
|
63
|
-
const messageBody = `Hi ${customerName}, I'm ${assistantName}. Please complete verification to give me access to global commerce payment rails: ${verificationLink}`;
|
|
64
|
-
// 5. Send SMS via Twilio REST API (using native fetch, no SDK needed)
|
|
65
|
-
const twilioUrl = `https://api.twilio.com/2010-04-01/Accounts/${twilioAccountSid}/Messages.json`;
|
|
66
|
-
const authHeader = "Basic " +
|
|
67
|
-
Buffer.from(`${twilioAccountSid}:${twilioAuthToken}`).toString("base64");
|
|
68
|
-
const formBody = new URLSearchParams({
|
|
69
|
-
To: recipientPhone,
|
|
70
|
-
From: twilioPhoneNumber,
|
|
71
|
-
Body: messageBody,
|
|
72
|
-
});
|
|
73
|
-
const twilioResponse = await fetch(twilioUrl, {
|
|
74
|
-
method: "POST",
|
|
75
|
-
headers: {
|
|
76
|
-
Authorization: authHeader,
|
|
77
|
-
"Content-Type": "application/x-www-form-urlencoded",
|
|
78
|
-
},
|
|
79
|
-
body: formBody.toString(),
|
|
80
|
-
});
|
|
81
|
-
if (!twilioResponse.ok) {
|
|
82
|
-
const errorData = await twilioResponse
|
|
83
|
-
.json()
|
|
84
|
-
.catch(() => null);
|
|
85
|
-
const errorMsg = errorData?.message ||
|
|
86
|
-
`HTTP ${twilioResponse.status}: ${twilioResponse.statusText}`;
|
|
87
|
-
throw new Error(`Twilio API error: ${errorMsg}`);
|
|
88
|
-
}
|
|
89
|
-
const smsResult = (await twilioResponse.json());
|
|
90
|
-
// 6. Return success
|
|
91
|
-
const ttlDisplay = verificationLinkTtlSecs
|
|
92
|
-
? `${Math.floor(verificationLinkTtlSecs / 60)} minutes`
|
|
93
|
-
: "30 minutes (default)";
|
|
94
|
-
return {
|
|
95
|
-
content: [
|
|
96
|
-
{
|
|
97
|
-
type: "text",
|
|
98
|
-
text: `Verification SMS sent successfully!
|
|
99
|
-
|
|
100
|
-
Customer ID: ${customerId}
|
|
101
|
-
Customer Name: ${customerName}
|
|
102
|
-
Sent To: ${recipientPhone}
|
|
103
|
-
Twilio Message SID: ${smsResult.sid}
|
|
104
|
-
Status: ${smsResult.status}
|
|
105
|
-
|
|
106
|
-
Verification link expires in ${ttlDisplay}.
|
|
107
|
-
The customer will receive an SMS with a link to complete KYC verification.`,
|
|
108
|
-
},
|
|
109
|
-
],
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
catch (error) {
|
|
113
|
-
return {
|
|
114
|
-
content: [
|
|
115
|
-
{
|
|
116
|
-
type: "text",
|
|
117
|
-
text: `Failed to send verification SMS: ${formatError(error)}`,
|
|
118
|
-
},
|
|
119
|
-
],
|
|
120
|
-
isError: true,
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
//# sourceMappingURL=notifications.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"notifications.js","sourceRoot":"","sources":["../../src/tools/notifications.ts"],"names":[],"mappings":"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"}
|