stables-mcp-server 2.2.1 → 2.4.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 +40 -6
- package/build/http/handler.d.ts.map +1 -1
- package/build/http/handler.js +9 -0
- package/build/http/handler.js.map +1 -1
- package/build/lib/stables-client.d.ts +282 -23
- package/build/lib/stables-client.d.ts.map +1 -1
- package/build/lib/stables-client.js +164 -10
- package/build/lib/stables-client.js.map +1 -1
- package/build/server.d.ts +2 -1
- package/build/server.d.ts.map +1 -1
- package/build/server.js +10 -1
- package/build/server.js.map +1 -1
- package/build/tools/balances.d.ts +15 -0
- package/build/tools/balances.d.ts.map +1 -0
- package/build/tools/balances.js +140 -0
- package/build/tools/balances.js.map +1 -0
- package/build/tools/compliance.d.ts +13 -0
- package/build/tools/compliance.d.ts.map +1 -0
- package/build/tools/compliance.js +170 -0
- package/build/tools/compliance.js.map +1 -0
- package/build/tools/customers.d.ts.map +1 -1
- package/build/tools/customers.js +330 -258
- package/build/tools/customers.js.map +1 -1
- package/build/tools/documents.d.ts +12 -0
- package/build/tools/documents.d.ts.map +1 -0
- package/build/tools/documents.js +94 -0
- package/build/tools/documents.js.map +1 -0
- package/build/tools/entitlements.d.ts +12 -0
- package/build/tools/entitlements.d.ts.map +1 -0
- package/build/tools/entitlements.js +83 -0
- package/build/tools/entitlements.js.map +1 -0
- package/build/tools/transfers.d.ts.map +1 -1
- package/build/tools/transfers.js +174 -89
- package/build/tools/transfers.js.map +1 -1
- package/build/tools/virtual-accounts.d.ts.map +1 -1
- package/build/tools/virtual-accounts.js +154 -12
- package/build/tools/virtual-accounts.js.map +1 -1
- package/build/version.d.ts +2 -0
- package/build/version.d.ts.map +1 -0
- package/build/version.js +3 -0
- package/build/version.js.map +1 -0
- package/build/worker.d.ts +16 -1
- package/build/worker.d.ts.map +1 -1
- package/build/worker.js +24 -1
- package/build/worker.js.map +1 -1
- package/package.json +12 -6
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compliance Tools for Stables MCP Server
|
|
3
|
+
*
|
|
4
|
+
* Mirrors the Compliance requests (RFIs) reference on docs.stables.money. An RFI
|
|
5
|
+
* is what Stables compliance needs before it releases a held payment or a held
|
|
6
|
+
* verification level. Each requirement on it says how to answer: `evidence`
|
|
7
|
+
* with submit_rfi_evidence, `kyc_level` / `kyc_capability` with a verification
|
|
8
|
+
* link (get_verification_link), and `manual_review` needs nothing.
|
|
9
|
+
*/
|
|
10
|
+
import { z } from "zod";
|
|
11
|
+
import { StablesApiError } from "../lib/stables-client.js";
|
|
12
|
+
const RFI_STATUSES = ["open", "submitted", "satisfied", "expired", "waived", "rejected"];
|
|
13
|
+
const RFI_TYPES = ["verification", "transaction", "manual"];
|
|
14
|
+
function formatError(error) {
|
|
15
|
+
if (error instanceof StablesApiError)
|
|
16
|
+
return `${error.message} (HTTP ${error.statusCode})`;
|
|
17
|
+
return error instanceof Error ? error.message : "Unknown error";
|
|
18
|
+
}
|
|
19
|
+
function text(value, isError = false) {
|
|
20
|
+
return { content: [{ type: "text", text: value }], ...(isError && { isError }) };
|
|
21
|
+
}
|
|
22
|
+
/** What the integrator should do next for one requirement. */
|
|
23
|
+
function nextStep(rfi, r) {
|
|
24
|
+
if (r.status === "satisfied" || r.status === "waived")
|
|
25
|
+
return "nothing to do";
|
|
26
|
+
if (r.status === "submitted")
|
|
27
|
+
return "submitted, waiting for Stables compliance";
|
|
28
|
+
switch (r.type) {
|
|
29
|
+
case "evidence":
|
|
30
|
+
return `answer with get_rfi_evidence_form, then submit_rfi_evidence (customerId ${rfi.customer_id}, rfiId ${rfi.rfi_id}, requirementId ${r.requirement_id})`;
|
|
31
|
+
case "kyc_level":
|
|
32
|
+
case "kyc_capability":
|
|
33
|
+
return r.action?.verification_type
|
|
34
|
+
? `send the customer a verification link: get_verification_link with verificationType '${r.action.verification_type}'`
|
|
35
|
+
: "the customer must complete verification";
|
|
36
|
+
case "manual_review":
|
|
37
|
+
return "Stables compliance is reviewing, nothing to submit";
|
|
38
|
+
default:
|
|
39
|
+
return "see the RFI in the dashboard";
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function describeRequirement(rfi, r) {
|
|
43
|
+
const what = r.required_level ?? r.required_capability ?? r.label ?? r.required_evidence ?? r.type;
|
|
44
|
+
const sentBack = r.rejection_reason ? ` (sent back: ${r.rejection_reason})` : "";
|
|
45
|
+
return ` - ${r.type} ${what}: ${r.status}${sentBack}. Next: ${nextStep(rfi, r)}`;
|
|
46
|
+
}
|
|
47
|
+
function describeRfi(rfi) {
|
|
48
|
+
const about = rfi.subject === "payment"
|
|
49
|
+
? `payment ${rfi.transfer_id ?? rfi.transaction_reference_id ?? "(unknown)"}${rfi.transaction_type ? ` (${rfi.transaction_type})` : ""}`
|
|
50
|
+
: `customer ${rfi.customer_id}`;
|
|
51
|
+
const reasons = (rfi.reasons ?? []).map((r) => r.description).join("; ");
|
|
52
|
+
const lines = [
|
|
53
|
+
`RFI ${rfi.rfi_id}: ${rfi.type}, ${rfi.status}, about ${about}`,
|
|
54
|
+
reasons ? ` Why: ${reasons}` : "",
|
|
55
|
+
rfi.message ? ` Message: ${rfi.message}` : "",
|
|
56
|
+
rfi.rejection_reason ? ` Rejected: ${rfi.rejection_reason}` : "",
|
|
57
|
+
...(rfi.requirements ?? []).map((r) => describeRequirement(rfi, r)),
|
|
58
|
+
];
|
|
59
|
+
return lines.filter(Boolean).join("\n");
|
|
60
|
+
}
|
|
61
|
+
function describeList(rfis, empty) {
|
|
62
|
+
if (rfis.length === 0)
|
|
63
|
+
return empty;
|
|
64
|
+
return rfis.map(describeRfi).join("\n\n");
|
|
65
|
+
}
|
|
66
|
+
export function registerComplianceTools(server, client) {
|
|
67
|
+
server.tool("list_rfis", "List the organisation's compliance requests for information (RFIs), newest first: what Stables compliance needs before it releases a held payment or verification. Open and submitted ones by default. Check this when a transfer or deposit is held, or subscribe to the rfi.* webhooks.", {
|
|
68
|
+
status: z
|
|
69
|
+
.array(z.enum(RFI_STATUSES))
|
|
70
|
+
.optional()
|
|
71
|
+
.describe("Only these statuses (default: open and submitted)"),
|
|
72
|
+
type: z.array(z.enum(RFI_TYPES)).optional().describe("Only these RFI types"),
|
|
73
|
+
customerId: z.string().optional().describe("Only this customer's RFIs"),
|
|
74
|
+
transactionReferenceId: z
|
|
75
|
+
.string()
|
|
76
|
+
.optional()
|
|
77
|
+
.describe("Only RFIs about this transfer or deposit"),
|
|
78
|
+
limit: z.number().int().min(1).max(100).optional().describe("Results per page"),
|
|
79
|
+
cursor: z.string().optional().describe("next_cursor from the previous page"),
|
|
80
|
+
}, async (params) => {
|
|
81
|
+
try {
|
|
82
|
+
const { rfis, next_cursor } = await client.listRfis(params);
|
|
83
|
+
const more = next_cursor ? `\n\nMore results: pass cursor "${next_cursor}".` : "";
|
|
84
|
+
return text(describeList(rfis ?? [], "No RFIs match.") + more);
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
return text(`Failed to list RFIs: ${formatError(error)}`, true);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
server.tool("list_customer_rfis", "List one customer's compliance requests for information (RFIs), with what each requirement needs next.", {
|
|
91
|
+
customerId: z.string().describe("The customer ID"),
|
|
92
|
+
status: z.enum(RFI_STATUSES).optional().describe("Only this status"),
|
|
93
|
+
}, async ({ customerId, status }) => {
|
|
94
|
+
try {
|
|
95
|
+
const { rfis } = await client.listCustomerRfis(customerId, status);
|
|
96
|
+
return text(describeList(rfis ?? [], `Customer ${customerId} has no RFIs.`));
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
return text(`Failed to list the customer's RFIs: ${formatError(error)}`, true);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
server.tool("get_rfi", "Get one compliance request for information (RFI): why it was raised, its requirements and how to answer each.", {
|
|
103
|
+
rfiId: z.string().describe("The RFI ID"),
|
|
104
|
+
}, async ({ rfiId }) => {
|
|
105
|
+
try {
|
|
106
|
+
return text(describeRfi(await client.getRfi(rfiId)));
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
return text(`Failed to get RFI: ${formatError(error)}`, true);
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
server.tool("get_rfi_evidence_form", "Get the form an `evidence` requirement on an RFI asks for (for example the source of funds behind one held payment), with the current submission if one was sent. Build the submit_rfi_evidence answers from its fields and documents.", {
|
|
113
|
+
customerId: z.string().describe("The customer ID"),
|
|
114
|
+
rfiId: z.string().describe("The RFI ID"),
|
|
115
|
+
requirementId: z.string().describe("The requirement ID (type 'evidence')"),
|
|
116
|
+
}, async ({ customerId, rfiId, requirementId }) => {
|
|
117
|
+
try {
|
|
118
|
+
const evidence = await client.getRfiEvidence(customerId, rfiId, requirementId);
|
|
119
|
+
const form = evidence.form ?? {};
|
|
120
|
+
const fields = (form.fields ?? []).map((f) => ` - ${f.key} (${f.type}${f.required ? ", required" : ""}): ${f.label}${f.description ? `. ${f.description}` : ""}`);
|
|
121
|
+
const documents = (form.documents ?? []).map((d) => ` - ${d.wire_field} (files as base64 data URLs${d.required ? ", required" : ""}): ${d.label}${d.description ? `. ${d.description}` : ""}`);
|
|
122
|
+
const lines = [
|
|
123
|
+
`Evidence requirement ${evidence.requirement_id} (${evidence.required_evidence}): ${evidence.status}`,
|
|
124
|
+
evidence.rejection_reason ? `Sent back: ${evidence.rejection_reason}` : "",
|
|
125
|
+
evidence.answerable
|
|
126
|
+
? "It can be answered now."
|
|
127
|
+
: "It cannot be answered now (already approved or the RFI is resolved).",
|
|
128
|
+
form.title ? `\n${form.title}${form.description ? `: ${form.description}` : ""}` : "",
|
|
129
|
+
fields.length ? `\nFields:\n${fields.join("\n")}` : "",
|
|
130
|
+
documents.length ? `\nDocuments:\n${documents.join("\n")}` : "",
|
|
131
|
+
evidence.submission ? "\nA submission is already on file; a new one replaces it." : "",
|
|
132
|
+
];
|
|
133
|
+
return text(lines.filter(Boolean).join("\n"));
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
return text(`Failed to get the evidence form: ${formatError(error)}`, true);
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
server.tool("submit_rfi_evidence", "Submit the answers and documents an `evidence` requirement asks for, in one request, keyed as get_rfi_evidence_form lists them. Files are base64 data URLs ('data:application/pdf;base64,...'). The requirement moves to 'submitted' for Stables compliance to review; approving it releases the held payment once nothing else is outstanding. Confirm the content with a human before sending: it goes to compliance as the customer's answer.", {
|
|
140
|
+
customerId: z.string().describe("The customer ID"),
|
|
141
|
+
rfiId: z.string().describe("The RFI ID"),
|
|
142
|
+
requirementId: z.string().describe("The requirement ID (type 'evidence')"),
|
|
143
|
+
answers: z
|
|
144
|
+
.record(z.unknown())
|
|
145
|
+
.describe("Answers keyed by the form's field keys and document wire_field names, e.g. { funds_origin, funds_origin_explanation, supporting_documents: ['data:application/pdf;base64,...'] }"),
|
|
146
|
+
}, async ({ customerId, rfiId, requirementId, answers }) => {
|
|
147
|
+
try {
|
|
148
|
+
const { rfi } = await client.submitRfiEvidence(customerId, rfiId, requirementId, answers);
|
|
149
|
+
return text(`Evidence submitted.\n\n${describeRfi(rfi)}`);
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
return text(`Failed to submit evidence: ${formatError(error)}`, true);
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
server.tool("get_kyc_capabilities", "List the verification capabilities a customer holds (for example proof_of_address), the level that granted each, and when. A `kyc_capability` requirement on an RFI is satisfied once the customer holds that capability.", {
|
|
156
|
+
customerId: z.string().describe("The customer ID"),
|
|
157
|
+
}, async ({ customerId }) => {
|
|
158
|
+
try {
|
|
159
|
+
const { capabilities } = await client.getKycCapabilities(customerId);
|
|
160
|
+
if (!capabilities?.length)
|
|
161
|
+
return text(`Customer ${customerId} holds no capabilities yet.`);
|
|
162
|
+
const lines = capabilities.map((c) => `- ${c.capability}: ${c.status} (from ${c.kyc_level}, granted ${c.granted_at})`);
|
|
163
|
+
return text(`Capabilities held by ${customerId}:\n${lines.join("\n")}`);
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
return text(`Failed to get KYC capabilities: ${formatError(error)}`, true);
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=compliance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compliance.js","sourceRoot":"","sources":["../../src/tools/compliance.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"customers.d.ts","sourceRoot":"","sources":["../../src/tools/customers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EACL,gBAAgB,
|
|
1
|
+
{"version":3,"file":"customers.d.ts","sourceRoot":"","sources":["../../src/tools/customers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EACL,gBAAgB,EAKjB,MAAM,0BAA0B,CAAC;AA6QlC,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,QAmZhF"}
|