@wabery/cli 0.1.1
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 +199 -0
- package/dist/api-client.d.ts +22 -0
- package/dist/api-client.d.ts.map +1 -0
- package/dist/api-client.js +86 -0
- package/dist/api-client.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +661 -0
- package/dist/cli.js.map +1 -0
- package/dist/config-example.d.ts +53 -0
- package/dist/config-example.d.ts.map +1 -0
- package/dist/config-example.js +64 -0
- package/dist/config-example.js.map +1 -0
- package/dist/diagnostics.d.ts +15 -0
- package/dist/diagnostics.d.ts.map +1 -0
- package/dist/diagnostics.js +108 -0
- package/dist/diagnostics.js.map +1 -0
- package/dist/local-config.d.ts +8 -0
- package/dist/local-config.d.ts.map +1 -0
- package/dist/local-config.js +43 -0
- package/dist/local-config.js.map +1 -0
- package/dist/mcp-server.d.ts +5 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +536 -0
- package/dist/mcp-server.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1,536 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import { WaberyApiClient } from "./api-client.js";
|
|
5
|
+
import { createExampleConfig } from "./config-example.js";
|
|
6
|
+
import { checkWaberyConnection } from "./diagnostics.js";
|
|
7
|
+
const configSchema = z.record(z.string(), z.unknown());
|
|
8
|
+
const metadataSchema = z.record(z.string(), z.unknown()).optional();
|
|
9
|
+
const optInSchema = z
|
|
10
|
+
.object({
|
|
11
|
+
source: z.string().min(1).max(120),
|
|
12
|
+
method: z.string().min(1).max(80).optional(),
|
|
13
|
+
occurred_at: z.string().datetime().optional(),
|
|
14
|
+
consent_text: z.string().max(1000).optional(),
|
|
15
|
+
evidence: z.record(z.string(), z.unknown()).optional(),
|
|
16
|
+
})
|
|
17
|
+
.optional();
|
|
18
|
+
const SERVER_INSTRUCTIONS = `Use Wabery tools as a developer platform for WhatsApp flows and automations.
|
|
19
|
+
Recommended order: read wabery_get_config_schema, list or create a project, enroll WhatsApp contacts and store returned contact_id plus channel_id, validate and preview config diff, apply config only after review, publish flows only after explicit confirmation, then send published flows with channel_id and contact_id.
|
|
20
|
+
Config apply creates or updates Wabery flows and automations but never publishes to Meta. Automations can trigger flows through send_flow steps that reference flow config keys.
|
|
21
|
+
Write tools are disabled unless WABERY_MCP_MODE=write is set. High-risk tools require confirmation_token values shown in each tool description.`;
|
|
22
|
+
function jsonResult(data) {
|
|
23
|
+
return {
|
|
24
|
+
content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
|
|
25
|
+
structuredContent: { result: data },
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function errorResult(data) {
|
|
29
|
+
return {
|
|
30
|
+
...jsonResult({ error: "mcp_write_blocked", ...data }),
|
|
31
|
+
isError: true,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
function requireWriteMode(action, token, expectedToken) {
|
|
35
|
+
if (process.env.WABERY_MCP_MODE !== "write") {
|
|
36
|
+
return errorResult({
|
|
37
|
+
action,
|
|
38
|
+
message: "Write tools are disabled. Set WABERY_MCP_MODE=write only for trusted sessions.",
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
if (expectedToken && token !== expectedToken) {
|
|
42
|
+
return errorResult({
|
|
43
|
+
action,
|
|
44
|
+
message: `Confirmation token required: ${expectedToken}`,
|
|
45
|
+
required_confirmation_token: expectedToken,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
export function createWaberyMcpServer(client = new WaberyApiClient()) {
|
|
51
|
+
const server = new McpServer({
|
|
52
|
+
name: "wabery",
|
|
53
|
+
version: "0.1.0",
|
|
54
|
+
}, { instructions: SERVER_INSTRUCTIONS });
|
|
55
|
+
server.registerResource("wabery_config_example", "wabery://config/example", {
|
|
56
|
+
title: "Example wabery.config.json",
|
|
57
|
+
description: "A minimal config with one WhatsApp Flow and one automation that sends it.",
|
|
58
|
+
mimeType: "application/json",
|
|
59
|
+
}, async (uri) => ({
|
|
60
|
+
contents: [
|
|
61
|
+
{
|
|
62
|
+
uri: uri.href,
|
|
63
|
+
mimeType: "application/json",
|
|
64
|
+
text: JSON.stringify(createExampleConfig(), null, 2),
|
|
65
|
+
},
|
|
66
|
+
],
|
|
67
|
+
}));
|
|
68
|
+
server.registerTool("wabery_check_connection", {
|
|
69
|
+
title: "Check Wabery connection",
|
|
70
|
+
description: "Verify the configured API key can reach Wabery projects, channels, and the config schema before making changes.",
|
|
71
|
+
inputSchema: {},
|
|
72
|
+
annotations: {
|
|
73
|
+
readOnlyHint: true,
|
|
74
|
+
destructiveHint: false,
|
|
75
|
+
idempotentHint: true,
|
|
76
|
+
openWorldHint: false,
|
|
77
|
+
},
|
|
78
|
+
}, async () => jsonResult(await checkWaberyConnection(client)));
|
|
79
|
+
server.registerTool("wabery_get_config_example", {
|
|
80
|
+
title: "Get example Wabery config",
|
|
81
|
+
description: "Return a starter wabery.config.json with one flow and one automation that triggers it with a send_flow step.",
|
|
82
|
+
inputSchema: {
|
|
83
|
+
project_id: z
|
|
84
|
+
.string()
|
|
85
|
+
.min(1)
|
|
86
|
+
.optional()
|
|
87
|
+
.describe("Project id from wabery_list_projects or wabery_create_project."),
|
|
88
|
+
},
|
|
89
|
+
annotations: {
|
|
90
|
+
readOnlyHint: true,
|
|
91
|
+
destructiveHint: false,
|
|
92
|
+
idempotentHint: true,
|
|
93
|
+
openWorldHint: false,
|
|
94
|
+
},
|
|
95
|
+
}, async ({ project_id }) => jsonResult(createExampleConfig(project_id)));
|
|
96
|
+
server.registerTool("wabery_get_config_schema", {
|
|
97
|
+
title: "Get Wabery config schema",
|
|
98
|
+
description: "Return the JSON Schema for wabery.config.json. Use this before generating flows and automations.",
|
|
99
|
+
inputSchema: {},
|
|
100
|
+
annotations: {
|
|
101
|
+
readOnlyHint: true,
|
|
102
|
+
destructiveHint: false,
|
|
103
|
+
idempotentHint: true,
|
|
104
|
+
openWorldHint: false,
|
|
105
|
+
},
|
|
106
|
+
}, async () => jsonResult(await client.get("/config/schema")));
|
|
107
|
+
server.registerTool("wabery_export_config", {
|
|
108
|
+
title: "Export Wabery config",
|
|
109
|
+
description: "Export the organization's flows and automations as a declarative config object.",
|
|
110
|
+
inputSchema: {},
|
|
111
|
+
annotations: {
|
|
112
|
+
readOnlyHint: true,
|
|
113
|
+
destructiveHint: false,
|
|
114
|
+
idempotentHint: true,
|
|
115
|
+
openWorldHint: false,
|
|
116
|
+
},
|
|
117
|
+
}, async () => jsonResult(await client.get("/config")));
|
|
118
|
+
server.registerTool("wabery_validate_config", {
|
|
119
|
+
title: "Validate Wabery config",
|
|
120
|
+
description: "Validate a declarative config object without changing flows or automations.",
|
|
121
|
+
inputSchema: {
|
|
122
|
+
config: configSchema.describe("The full wabery.config.json object."),
|
|
123
|
+
},
|
|
124
|
+
annotations: {
|
|
125
|
+
readOnlyHint: true,
|
|
126
|
+
destructiveHint: false,
|
|
127
|
+
idempotentHint: true,
|
|
128
|
+
openWorldHint: false,
|
|
129
|
+
},
|
|
130
|
+
}, async ({ config }) => jsonResult(await client.post("/config/validate", config)));
|
|
131
|
+
server.registerTool("wabery_preview_config_diff", {
|
|
132
|
+
title: "Preview Wabery config diff",
|
|
133
|
+
description: "Preview which flows and automations would be created, updated, deleted, or left unchanged.",
|
|
134
|
+
inputSchema: {
|
|
135
|
+
config: configSchema.describe("The full wabery.config.json object."),
|
|
136
|
+
},
|
|
137
|
+
annotations: {
|
|
138
|
+
readOnlyHint: true,
|
|
139
|
+
destructiveHint: false,
|
|
140
|
+
idempotentHint: true,
|
|
141
|
+
openWorldHint: false,
|
|
142
|
+
},
|
|
143
|
+
}, async ({ config }) => jsonResult(await client.post("/config/diff", config)));
|
|
144
|
+
server.registerTool("wabery_apply_config", {
|
|
145
|
+
title: "Apply Wabery config",
|
|
146
|
+
description: "Create or update Wabery flows and automations from a declarative config. This does not publish flows to Meta; call wabery_publish_flow explicitly after review.",
|
|
147
|
+
inputSchema: {
|
|
148
|
+
config: configSchema.describe("The full wabery.config.json object."),
|
|
149
|
+
confirmation_token: z
|
|
150
|
+
.string()
|
|
151
|
+
.optional()
|
|
152
|
+
.describe("Required when write mode is enabled: apply_config"),
|
|
153
|
+
},
|
|
154
|
+
annotations: {
|
|
155
|
+
readOnlyHint: false,
|
|
156
|
+
destructiveHint: true,
|
|
157
|
+
idempotentHint: true,
|
|
158
|
+
openWorldHint: false,
|
|
159
|
+
},
|
|
160
|
+
}, async (input) => {
|
|
161
|
+
const { config, confirmation_token } = input;
|
|
162
|
+
const blocked = requireWriteMode("wabery_apply_config", confirmation_token, "apply_config");
|
|
163
|
+
if (blocked)
|
|
164
|
+
return blocked;
|
|
165
|
+
return jsonResult(await client.put("/config", config));
|
|
166
|
+
});
|
|
167
|
+
server.registerTool("wabery_list_projects", {
|
|
168
|
+
title: "List Wabery projects",
|
|
169
|
+
description: "List projects and their project_id values. Use project_id when creating flows or enrolling WhatsApp contacts.",
|
|
170
|
+
inputSchema: {},
|
|
171
|
+
annotations: {
|
|
172
|
+
readOnlyHint: true,
|
|
173
|
+
destructiveHint: false,
|
|
174
|
+
idempotentHint: true,
|
|
175
|
+
openWorldHint: false,
|
|
176
|
+
},
|
|
177
|
+
}, async () => jsonResult(await client.get("/projects")));
|
|
178
|
+
server.registerTool("wabery_create_project", {
|
|
179
|
+
title: "Create Wabery project",
|
|
180
|
+
description: "Create a Wabery project for developer-managed WhatsApp flows, automations, and contact enrollment.",
|
|
181
|
+
inputSchema: {
|
|
182
|
+
name: z.string().min(1).max(100),
|
|
183
|
+
description: z.string().max(500).optional(),
|
|
184
|
+
webhook_url: z.string().url().optional(),
|
|
185
|
+
webhook_signing_enabled: z.boolean().default(true),
|
|
186
|
+
},
|
|
187
|
+
annotations: {
|
|
188
|
+
readOnlyHint: false,
|
|
189
|
+
destructiveHint: false,
|
|
190
|
+
idempotentHint: false,
|
|
191
|
+
openWorldHint: false,
|
|
192
|
+
},
|
|
193
|
+
}, async (input) => {
|
|
194
|
+
const blocked = requireWriteMode("wabery_create_project");
|
|
195
|
+
if (blocked)
|
|
196
|
+
return blocked;
|
|
197
|
+
return jsonResult(await client.post("/projects", input));
|
|
198
|
+
});
|
|
199
|
+
server.registerTool("wabery_list_channels", {
|
|
200
|
+
title: "List Wabery channels",
|
|
201
|
+
description: "List connected messaging channels. Use a WhatsApp channel_id when sending a published flow.",
|
|
202
|
+
inputSchema: {},
|
|
203
|
+
annotations: {
|
|
204
|
+
readOnlyHint: true,
|
|
205
|
+
destructiveHint: false,
|
|
206
|
+
idempotentHint: true,
|
|
207
|
+
openWorldHint: false,
|
|
208
|
+
},
|
|
209
|
+
}, async () => jsonResult(await client.get("/channels")));
|
|
210
|
+
server.registerTool("wabery_get_limits", {
|
|
211
|
+
title: "Get Wabery API limits",
|
|
212
|
+
description: "Return the enforced public API rate limit and monthly request quota for the configured API key.",
|
|
213
|
+
inputSchema: {},
|
|
214
|
+
annotations: {
|
|
215
|
+
readOnlyHint: true,
|
|
216
|
+
destructiveHint: false,
|
|
217
|
+
idempotentHint: true,
|
|
218
|
+
openWorldHint: false,
|
|
219
|
+
},
|
|
220
|
+
}, async () => jsonResult(await client.get("/limits")));
|
|
221
|
+
server.registerTool("wabery_list_flows", {
|
|
222
|
+
title: "List Wabery flows",
|
|
223
|
+
description: "List flows, including ids, config keys, project ids, and Meta publish status.",
|
|
224
|
+
inputSchema: {},
|
|
225
|
+
annotations: {
|
|
226
|
+
readOnlyHint: true,
|
|
227
|
+
destructiveHint: false,
|
|
228
|
+
idempotentHint: true,
|
|
229
|
+
openWorldHint: false,
|
|
230
|
+
},
|
|
231
|
+
}, async () => jsonResult(await client.get("/flows")));
|
|
232
|
+
server.registerTool("wabery_get_flow", {
|
|
233
|
+
title: "Get Wabery flow",
|
|
234
|
+
description: "Fetch one flow by id, including status and field schema.",
|
|
235
|
+
inputSchema: {
|
|
236
|
+
flow_id: z.string().min(1),
|
|
237
|
+
},
|
|
238
|
+
annotations: {
|
|
239
|
+
readOnlyHint: true,
|
|
240
|
+
destructiveHint: false,
|
|
241
|
+
idempotentHint: true,
|
|
242
|
+
openWorldHint: false,
|
|
243
|
+
},
|
|
244
|
+
}, async ({ flow_id }) => jsonResult(await client.get(`/flows/${flow_id}`)));
|
|
245
|
+
server.registerTool("wabery_publish_flow", {
|
|
246
|
+
title: "Publish Wabery flow",
|
|
247
|
+
description: "Publish a Wabery draft flow to Meta. Only call after validate/diff/apply and explicit user confirmation.",
|
|
248
|
+
inputSchema: {
|
|
249
|
+
flow_id: z.string().min(1),
|
|
250
|
+
confirmation_token: z
|
|
251
|
+
.string()
|
|
252
|
+
.optional()
|
|
253
|
+
.describe("Required when write mode is enabled: publish:<flow_id>"),
|
|
254
|
+
},
|
|
255
|
+
annotations: {
|
|
256
|
+
readOnlyHint: false,
|
|
257
|
+
destructiveHint: false,
|
|
258
|
+
idempotentHint: false,
|
|
259
|
+
openWorldHint: true,
|
|
260
|
+
},
|
|
261
|
+
}, async ({ flow_id, confirmation_token }) => {
|
|
262
|
+
const blocked = requireWriteMode("wabery_publish_flow", confirmation_token, `publish:${flow_id}`);
|
|
263
|
+
if (blocked)
|
|
264
|
+
return blocked;
|
|
265
|
+
return jsonResult(await client.post(`/flows/${flow_id}/publish`));
|
|
266
|
+
});
|
|
267
|
+
server.registerTool("wabery_enroll_contact", {
|
|
268
|
+
title: "Enroll WhatsApp contact",
|
|
269
|
+
description: "Register a phone number against a Wabery project. Returns contact_id, which is the stable id used in flow submissions and future sends.",
|
|
270
|
+
inputSchema: {
|
|
271
|
+
phone: z.string().min(5).describe("E.164 phone number."),
|
|
272
|
+
project_id: z.string().min(1),
|
|
273
|
+
name: z.string().max(120).optional(),
|
|
274
|
+
reference_id: z
|
|
275
|
+
.string()
|
|
276
|
+
.max(200)
|
|
277
|
+
.optional()
|
|
278
|
+
.describe("Your own user/customer id for correlation."),
|
|
279
|
+
metadata: metadataSchema,
|
|
280
|
+
opt_in: optInSchema.describe("WhatsApp opt-in evidence. Include source, method, consent_text, and evidence where available."),
|
|
281
|
+
},
|
|
282
|
+
annotations: {
|
|
283
|
+
readOnlyHint: false,
|
|
284
|
+
destructiveHint: false,
|
|
285
|
+
idempotentHint: true,
|
|
286
|
+
openWorldHint: false,
|
|
287
|
+
},
|
|
288
|
+
}, async (input) => {
|
|
289
|
+
const blocked = requireWriteMode("wabery_enroll_contact");
|
|
290
|
+
if (blocked)
|
|
291
|
+
return blocked;
|
|
292
|
+
return jsonResult(await client.post("/contacts", input));
|
|
293
|
+
});
|
|
294
|
+
server.registerTool("wabery_list_contacts", {
|
|
295
|
+
title: "List Wabery contacts",
|
|
296
|
+
description: "List enrolled contacts and their stable contact_id values.",
|
|
297
|
+
inputSchema: {
|
|
298
|
+
limit: z.number().int().min(1).max(100).optional(),
|
|
299
|
+
starting_after: z.string().optional(),
|
|
300
|
+
},
|
|
301
|
+
annotations: {
|
|
302
|
+
readOnlyHint: true,
|
|
303
|
+
destructiveHint: false,
|
|
304
|
+
idempotentHint: true,
|
|
305
|
+
openWorldHint: false,
|
|
306
|
+
},
|
|
307
|
+
}, async ({ limit, starting_after }) => jsonResult(await client.get("/contacts", { limit, starting_after })));
|
|
308
|
+
server.registerTool("wabery_get_contact", {
|
|
309
|
+
title: "Get Wabery contact",
|
|
310
|
+
description: "Fetch one enrolled contact by stable contact_id before sending or unenrolling.",
|
|
311
|
+
inputSchema: {
|
|
312
|
+
contact_id: z.string().min(1),
|
|
313
|
+
},
|
|
314
|
+
annotations: {
|
|
315
|
+
readOnlyHint: true,
|
|
316
|
+
destructiveHint: false,
|
|
317
|
+
idempotentHint: true,
|
|
318
|
+
openWorldHint: false,
|
|
319
|
+
},
|
|
320
|
+
}, async ({ contact_id }) => jsonResult(await client.get(`/contacts/${contact_id}`)));
|
|
321
|
+
server.registerTool("wabery_unenroll_contact", {
|
|
322
|
+
title: "Unenroll Wabery contact",
|
|
323
|
+
description: "Remove a contact phone's sandbox authorization for this organization. Pass erase=true for irreversible org-scoped contact data deletion.",
|
|
324
|
+
inputSchema: {
|
|
325
|
+
contact_id: z.string().min(1),
|
|
326
|
+
erase: z.boolean().optional(),
|
|
327
|
+
confirmation_token: z
|
|
328
|
+
.string()
|
|
329
|
+
.optional()
|
|
330
|
+
.describe("Required only when erase=true: erase:<contact_id>"),
|
|
331
|
+
},
|
|
332
|
+
annotations: {
|
|
333
|
+
readOnlyHint: false,
|
|
334
|
+
destructiveHint: true,
|
|
335
|
+
idempotentHint: true,
|
|
336
|
+
openWorldHint: false,
|
|
337
|
+
},
|
|
338
|
+
}, async ({ contact_id, erase, confirmation_token }) => {
|
|
339
|
+
const blocked = requireWriteMode("wabery_unenroll_contact", confirmation_token, erase ? `erase:${contact_id}` : undefined);
|
|
340
|
+
if (blocked)
|
|
341
|
+
return blocked;
|
|
342
|
+
return jsonResult(await client.delete(`/contacts/${contact_id}${erase ? "?erase=true" : ""}`));
|
|
343
|
+
});
|
|
344
|
+
server.registerTool("wabery_list_conversations", {
|
|
345
|
+
title: "List Wabery conversations",
|
|
346
|
+
description: "List organization-scoped conversations for inbox, support, or analytics tooling.",
|
|
347
|
+
inputSchema: {
|
|
348
|
+
contact_id: z.string().optional(),
|
|
349
|
+
active: z.boolean().optional(),
|
|
350
|
+
limit: z.number().int().min(1).max(100).optional(),
|
|
351
|
+
starting_after: z.string().optional(),
|
|
352
|
+
},
|
|
353
|
+
annotations: {
|
|
354
|
+
readOnlyHint: true,
|
|
355
|
+
destructiveHint: false,
|
|
356
|
+
idempotentHint: true,
|
|
357
|
+
openWorldHint: false,
|
|
358
|
+
},
|
|
359
|
+
}, async (query) => jsonResult(await client.get("/conversations", {
|
|
360
|
+
...query,
|
|
361
|
+
active: query.active === undefined ? undefined : String(query.active),
|
|
362
|
+
})));
|
|
363
|
+
server.registerTool("wabery_get_conversation", {
|
|
364
|
+
title: "Get Wabery conversation",
|
|
365
|
+
description: "Fetch one organization-scoped conversation by id.",
|
|
366
|
+
inputSchema: {
|
|
367
|
+
conversation_id: z.string().min(1),
|
|
368
|
+
},
|
|
369
|
+
annotations: {
|
|
370
|
+
readOnlyHint: true,
|
|
371
|
+
destructiveHint: false,
|
|
372
|
+
idempotentHint: true,
|
|
373
|
+
openWorldHint: false,
|
|
374
|
+
},
|
|
375
|
+
}, async ({ conversation_id }) => jsonResult(await client.get(`/conversations/${conversation_id}`)));
|
|
376
|
+
server.registerTool("wabery_list_conversation_messages", {
|
|
377
|
+
title: "List Wabery conversation messages",
|
|
378
|
+
description: "Fetch message history for a conversation. Inbound WhatsApp media is returned as Meta media IDs only, not downloadable URLs.",
|
|
379
|
+
inputSchema: {
|
|
380
|
+
conversation_id: z.string().min(1),
|
|
381
|
+
limit: z.number().int().min(1).max(100).optional(),
|
|
382
|
+
starting_after: z.string().optional(),
|
|
383
|
+
order: z.enum(["asc", "desc"]).optional(),
|
|
384
|
+
},
|
|
385
|
+
annotations: {
|
|
386
|
+
readOnlyHint: true,
|
|
387
|
+
destructiveHint: false,
|
|
388
|
+
idempotentHint: true,
|
|
389
|
+
openWorldHint: false,
|
|
390
|
+
},
|
|
391
|
+
}, async ({ conversation_id, ...query }) => jsonResult(await client.get(`/conversations/${conversation_id}/messages`, query)));
|
|
392
|
+
server.registerTool("wabery_send_message", {
|
|
393
|
+
title: "Send Wabery message",
|
|
394
|
+
description: "Send a WhatsApp text, approved template, media, or interactive message. The body must match POST /messages and should include an idempotency_key for retries.",
|
|
395
|
+
inputSchema: {
|
|
396
|
+
body: z.record(z.string(), z.unknown()),
|
|
397
|
+
},
|
|
398
|
+
annotations: {
|
|
399
|
+
readOnlyHint: false,
|
|
400
|
+
destructiveHint: false,
|
|
401
|
+
idempotentHint: false,
|
|
402
|
+
openWorldHint: true,
|
|
403
|
+
},
|
|
404
|
+
}, async ({ body }) => {
|
|
405
|
+
const blocked = requireWriteMode("wabery_send_message");
|
|
406
|
+
if (blocked)
|
|
407
|
+
return blocked;
|
|
408
|
+
return jsonResult(await client.post("/messages", body));
|
|
409
|
+
});
|
|
410
|
+
server.registerTool("wabery_list_templates", {
|
|
411
|
+
title: "List WhatsApp templates",
|
|
412
|
+
description: "List WhatsApp message templates and approval statuses for dedicated WhatsApp channels.",
|
|
413
|
+
inputSchema: {
|
|
414
|
+
channel_id: z.string().optional(),
|
|
415
|
+
status: z.string().optional(),
|
|
416
|
+
},
|
|
417
|
+
annotations: {
|
|
418
|
+
readOnlyHint: true,
|
|
419
|
+
destructiveHint: false,
|
|
420
|
+
idempotentHint: true,
|
|
421
|
+
openWorldHint: false,
|
|
422
|
+
},
|
|
423
|
+
}, async (query) => jsonResult(await client.get("/templates", query)));
|
|
424
|
+
server.registerTool("wabery_get_template", {
|
|
425
|
+
title: "Get WhatsApp template",
|
|
426
|
+
description: "Fetch one WhatsApp template and its Meta approval status.",
|
|
427
|
+
inputSchema: {
|
|
428
|
+
template_id: z.string().min(1),
|
|
429
|
+
},
|
|
430
|
+
annotations: {
|
|
431
|
+
readOnlyHint: true,
|
|
432
|
+
destructiveHint: false,
|
|
433
|
+
idempotentHint: true,
|
|
434
|
+
openWorldHint: false,
|
|
435
|
+
},
|
|
436
|
+
}, async ({ template_id }) => jsonResult(await client.get(`/templates/${template_id}`)));
|
|
437
|
+
server.registerTool("wabery_create_template", {
|
|
438
|
+
title: "Create WhatsApp template",
|
|
439
|
+
description: "Create and submit a WhatsApp message template to Meta for approval. Only dedicated, non-sandbox WhatsApp channels can submit templates.",
|
|
440
|
+
inputSchema: {
|
|
441
|
+
body: z.record(z.string(), z.unknown()),
|
|
442
|
+
},
|
|
443
|
+
annotations: {
|
|
444
|
+
readOnlyHint: false,
|
|
445
|
+
destructiveHint: false,
|
|
446
|
+
idempotentHint: false,
|
|
447
|
+
openWorldHint: true,
|
|
448
|
+
},
|
|
449
|
+
}, async ({ body }) => {
|
|
450
|
+
const blocked = requireWriteMode("wabery_create_template");
|
|
451
|
+
if (blocked)
|
|
452
|
+
return blocked;
|
|
453
|
+
return jsonResult(await client.post("/templates", body));
|
|
454
|
+
});
|
|
455
|
+
server.registerTool("wabery_send_flow", {
|
|
456
|
+
title: "Send Wabery flow",
|
|
457
|
+
description: "Send a published WhatsApp Flow to an enrolled contact, existing conversation, or phone number. Returns flow_token and dispatch info.",
|
|
458
|
+
inputSchema: {
|
|
459
|
+
flow_id: z.string().min(1),
|
|
460
|
+
channel_id: z.string().min(1),
|
|
461
|
+
contact_id: z.string().min(1).optional(),
|
|
462
|
+
conversation_id: z.string().min(1).optional(),
|
|
463
|
+
to: z.string().min(5).optional(),
|
|
464
|
+
flow_cta: z.string().max(20).optional(),
|
|
465
|
+
body_text: z.string().max(1024).optional(),
|
|
466
|
+
header_text: z.string().max(60).optional(),
|
|
467
|
+
footer_text: z.string().max(60).optional(),
|
|
468
|
+
first_screen: z.string().optional(),
|
|
469
|
+
screen_data: z.record(z.string(), z.unknown()).optional(),
|
|
470
|
+
},
|
|
471
|
+
annotations: {
|
|
472
|
+
readOnlyHint: false,
|
|
473
|
+
destructiveHint: false,
|
|
474
|
+
idempotentHint: false,
|
|
475
|
+
openWorldHint: true,
|
|
476
|
+
},
|
|
477
|
+
}, async ({ flow_id, ...body }) => {
|
|
478
|
+
const blocked = requireWriteMode("wabery_send_flow");
|
|
479
|
+
if (blocked)
|
|
480
|
+
return blocked;
|
|
481
|
+
return jsonResult(await client.post(`/flows/${flow_id}/send`, body));
|
|
482
|
+
});
|
|
483
|
+
server.registerTool("wabery_list_submissions", {
|
|
484
|
+
title: "List Wabery submissions",
|
|
485
|
+
description: "List completed WhatsApp Flow submissions for the organization.",
|
|
486
|
+
inputSchema: {
|
|
487
|
+
agent_id: z.string().optional(),
|
|
488
|
+
flow_id: z.string().optional(),
|
|
489
|
+
limit: z.number().int().min(1).max(100).optional(),
|
|
490
|
+
starting_after: z.string().optional(),
|
|
491
|
+
},
|
|
492
|
+
annotations: {
|
|
493
|
+
readOnlyHint: true,
|
|
494
|
+
destructiveHint: false,
|
|
495
|
+
idempotentHint: true,
|
|
496
|
+
openWorldHint: false,
|
|
497
|
+
},
|
|
498
|
+
}, async (query) => jsonResult(await client.get("/submissions", query)));
|
|
499
|
+
server.registerTool("wabery_list_dispatches", {
|
|
500
|
+
title: "List Wabery dispatches",
|
|
501
|
+
description: "List sent flow dispatches. Use this to inspect flow_token status across sends.",
|
|
502
|
+
inputSchema: {
|
|
503
|
+
flow_id: z.string().optional(),
|
|
504
|
+
contact_id: z.string().optional(),
|
|
505
|
+
status: z.enum(["SENT", "COMPLETED", "EXPIRED"]).optional(),
|
|
506
|
+
limit: z.number().int().min(1).max(100).optional(),
|
|
507
|
+
starting_after: z.string().optional(),
|
|
508
|
+
},
|
|
509
|
+
annotations: {
|
|
510
|
+
readOnlyHint: true,
|
|
511
|
+
destructiveHint: false,
|
|
512
|
+
idempotentHint: true,
|
|
513
|
+
openWorldHint: false,
|
|
514
|
+
},
|
|
515
|
+
}, async (query) => jsonResult(await client.get("/dispatches", query)));
|
|
516
|
+
server.registerTool("wabery_get_dispatch", {
|
|
517
|
+
title: "Get Wabery dispatch",
|
|
518
|
+
description: "Get one flow dispatch by flow_token.",
|
|
519
|
+
inputSchema: {
|
|
520
|
+
flow_token: z.string().min(1),
|
|
521
|
+
},
|
|
522
|
+
annotations: {
|
|
523
|
+
readOnlyHint: true,
|
|
524
|
+
destructiveHint: false,
|
|
525
|
+
idempotentHint: true,
|
|
526
|
+
openWorldHint: false,
|
|
527
|
+
},
|
|
528
|
+
}, async ({ flow_token }) => jsonResult(await client.get(`/dispatches/${flow_token}`)));
|
|
529
|
+
return server;
|
|
530
|
+
}
|
|
531
|
+
export async function runMcpServer(client = new WaberyApiClient()) {
|
|
532
|
+
const server = createWaberyMcpServer(client);
|
|
533
|
+
await server.connect(new StdioServerTransport());
|
|
534
|
+
console.error("Wabery MCP server running on stdio");
|
|
535
|
+
}
|
|
536
|
+
//# sourceMappingURL=mcp-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@wabery/cli",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "Wabery developer CLI and MCP server for flows, automations, contacts, and WhatsApp Flow operations.",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"keywords": [
|
|
8
|
+
"wabery",
|
|
9
|
+
"mcp",
|
|
10
|
+
"model-context-protocol",
|
|
11
|
+
"claude-code",
|
|
12
|
+
"codex",
|
|
13
|
+
"whatsapp",
|
|
14
|
+
"whatsapp-flows",
|
|
15
|
+
"automation"
|
|
16
|
+
],
|
|
17
|
+
"main": "./dist/cli.js",
|
|
18
|
+
"types": "./dist/cli.d.ts",
|
|
19
|
+
"exports": {
|
|
20
|
+
".": {
|
|
21
|
+
"types": "./dist/cli.d.ts",
|
|
22
|
+
"import": "./dist/cli.js"
|
|
23
|
+
},
|
|
24
|
+
"./api-client": {
|
|
25
|
+
"types": "./dist/api-client.d.ts",
|
|
26
|
+
"import": "./dist/api-client.js"
|
|
27
|
+
},
|
|
28
|
+
"./mcp-server": {
|
|
29
|
+
"types": "./dist/mcp-server.d.ts",
|
|
30
|
+
"import": "./dist/mcp-server.js"
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"bin": {
|
|
34
|
+
"wabery": "dist/cli.js"
|
|
35
|
+
},
|
|
36
|
+
"files": [
|
|
37
|
+
"dist",
|
|
38
|
+
"README.md"
|
|
39
|
+
],
|
|
40
|
+
"engines": {
|
|
41
|
+
"node": ">=20"
|
|
42
|
+
},
|
|
43
|
+
"publishConfig": {
|
|
44
|
+
"access": "public"
|
|
45
|
+
},
|
|
46
|
+
"dependencies": {
|
|
47
|
+
"@modelcontextprotocol/sdk": "^1.19.1",
|
|
48
|
+
"zod": "^3.24.1"
|
|
49
|
+
},
|
|
50
|
+
"devDependencies": {
|
|
51
|
+
"@types/node": "^22.10.5",
|
|
52
|
+
"tsx": "^4.20.5",
|
|
53
|
+
"typescript": "^5.7.2"
|
|
54
|
+
},
|
|
55
|
+
"scripts": {
|
|
56
|
+
"build": "tsc",
|
|
57
|
+
"check-types": "tsc --noEmit",
|
|
58
|
+
"mcp": "tsx src/cli.ts mcp",
|
|
59
|
+
"test": "pnpm test:mcp && pnpm test:cli",
|
|
60
|
+
"test:mcp": "pnpm build && node scripts/smoke-mcp.mjs",
|
|
61
|
+
"test:cli": "pnpm build && node scripts/smoke-cli.mjs"
|
|
62
|
+
}
|
|
63
|
+
}
|