@migma/mcp 1.9.0 → 1.9.1-automations.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.
Files changed (76) hide show
  1. package/README.md +22 -18
  2. package/build/index.d.ts.map +1 -1
  3. package/build/index.js +11 -3
  4. package/build/index.js.map +1 -1
  5. package/build/prompts/index.d.ts +1 -0
  6. package/build/prompts/index.d.ts.map +1 -1
  7. package/build/prompts/index.js +20 -5
  8. package/build/prompts/index.js.map +1 -1
  9. package/build/tools/__tests__/automations.test.d.ts +2 -0
  10. package/build/tools/__tests__/automations.test.d.ts.map +1 -0
  11. package/build/tools/__tests__/automations.test.js +259 -0
  12. package/build/tools/__tests__/automations.test.js.map +1 -0
  13. package/build/tools/__tests__/brand.test.js +0 -25
  14. package/build/tools/__tests__/brand.test.js.map +1 -1
  15. package/build/tools/__tests__/campaign-recipients.test.js +2 -5
  16. package/build/tools/__tests__/campaign-recipients.test.js.map +1 -1
  17. package/build/tools/__tests__/catalog.test.js +20 -26
  18. package/build/tools/__tests__/catalog.test.js.map +1 -1
  19. package/build/tools/__tests__/forms.test.d.ts +2 -0
  20. package/build/tools/__tests__/forms.test.d.ts.map +1 -0
  21. package/build/tools/__tests__/forms.test.js +127 -0
  22. package/build/tools/__tests__/forms.test.js.map +1 -0
  23. package/build/tools/__tests__/provider-imports.test.js +0 -23
  24. package/build/tools/__tests__/provider-imports.test.js.map +1 -1
  25. package/build/tools/__tests__/review-annotations.test.js +10 -4
  26. package/build/tools/__tests__/review-annotations.test.js.map +1 -1
  27. package/build/tools/__tests__/websites.test.d.ts +2 -0
  28. package/build/tools/__tests__/websites.test.d.ts.map +1 -0
  29. package/build/tools/__tests__/websites.test.js +138 -0
  30. package/build/tools/__tests__/websites.test.js.map +1 -0
  31. package/build/tools/automations.d.ts +22 -0
  32. package/build/tools/automations.d.ts.map +1 -0
  33. package/build/tools/automations.js +134 -0
  34. package/build/tools/automations.js.map +1 -0
  35. package/build/tools/brand.d.ts.map +1 -1
  36. package/build/tools/brand.js +7 -10
  37. package/build/tools/brand.js.map +1 -1
  38. package/build/tools/campaigns.d.ts +0 -2
  39. package/build/tools/campaigns.d.ts.map +1 -1
  40. package/build/tools/campaigns.js +13 -144
  41. package/build/tools/campaigns.js.map +1 -1
  42. package/build/tools/capabilities.d.ts +3 -1
  43. package/build/tools/capabilities.d.ts.map +1 -1
  44. package/build/tools/capabilities.js +54 -6
  45. package/build/tools/capabilities.js.map +1 -1
  46. package/build/tools/contacts.d.ts.map +1 -1
  47. package/build/tools/contacts.js +15 -30
  48. package/build/tools/contacts.js.map +1 -1
  49. package/build/tools/context.js +1 -1
  50. package/build/tools/context.js.map +1 -1
  51. package/build/tools/forms.d.ts +6 -0
  52. package/build/tools/forms.d.ts.map +1 -0
  53. package/build/tools/forms.js +97 -0
  54. package/build/tools/forms.js.map +1 -0
  55. package/build/tools/generate.js +2 -2
  56. package/build/tools/generate.js.map +1 -1
  57. package/build/tools/send.d.ts.map +1 -1
  58. package/build/tools/send.js +8 -92
  59. package/build/tools/send.js.map +1 -1
  60. package/build/tools/websites.d.ts +4 -0
  61. package/build/tools/websites.d.ts.map +1 -0
  62. package/build/tools/websites.js +114 -0
  63. package/build/tools/websites.js.map +1 -0
  64. package/package.json +3 -3
  65. package/build/tools/__tests__/campaign-schedule.test.d.ts +0 -2
  66. package/build/tools/__tests__/campaign-schedule.test.d.ts.map +0 -1
  67. package/build/tools/__tests__/campaign-schedule.test.js +0 -43
  68. package/build/tools/__tests__/campaign-schedule.test.js.map +0 -1
  69. package/build/tools/__tests__/send-confirmation.test.d.ts +0 -2
  70. package/build/tools/__tests__/send-confirmation.test.d.ts.map +0 -1
  71. package/build/tools/__tests__/send-confirmation.test.js +0 -170
  72. package/build/tools/__tests__/send-confirmation.test.js.map +0 -1
  73. package/build/tools/send-confirmation.d.ts +0 -64
  74. package/build/tools/send-confirmation.d.ts.map +0 -1
  75. package/build/tools/send-confirmation.js +0 -150
  76. package/build/tools/send-confirmation.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"send.js","sourceRoot":"","sources":["../../src/tools/send.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"send.js","sourceRoot":"","sources":["../../src/tools/send.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { Migma } from "migma";
3
+ export declare function registerWebsiteTools(server: McpServer, client: Migma, grantedPermissions?: string[]): void;
4
+ //# sourceMappingURL=websites.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websites.d.ts","sourceRoot":"","sources":["../../src/tools/websites.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAmBnC,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,KAAK,EACb,kBAAkB,CAAC,EAAE,MAAM,EAAE,QAgG9B"}
@@ -0,0 +1,114 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { z } from "zod";
3
+ import { canUse } from "../permissions.js";
4
+ import { MUTATING_TOOL, READ_ONLY_TOOL } from "./annotations.js";
5
+ const objectIdSchema = z.string().regex(/^[a-f0-9]{24}$/, "Use a 24-character lowercase object ID");
6
+ const websiteOriginSchema = z.string().max(300).url().refine((value) => {
7
+ try {
8
+ const url = new URL(value);
9
+ const loopback = ["127.0.0.1", "localhost", "[::1]"].includes(url.hostname);
10
+ return value === url.origin && !url.username && !url.password
11
+ && (url.protocol === "https:" || url.protocol === "http:" && loopback);
12
+ }
13
+ catch {
14
+ return false;
15
+ }
16
+ }, "Use an HTTPS origin, or a loopback HTTP origin for local testing");
17
+ export function registerWebsiteTools(server, client, grantedPermissions) {
18
+ if (canUse(grantedPermissions, ["audience:read"])) {
19
+ server.registerTool("migma_list_websites", {
20
+ title: "List Website Trackers",
21
+ annotations: READ_ONLY_TOOL,
22
+ description: "List up to 100 website tracking installations for a project.",
23
+ inputSchema: z.object({
24
+ projectId: objectIdSchema.describe("Project ID"),
25
+ }).strict(),
26
+ }, async (args) => {
27
+ const websites = websiteApi(client);
28
+ if (!websites)
29
+ return toolError("This MCP build needs a newer migma package with website tracking support.");
30
+ const { data, error } = await websites.list(args.projectId);
31
+ if (error)
32
+ return toolError(error.message);
33
+ return toolResult(data);
34
+ });
35
+ server.registerTool("migma_get_website_events", {
36
+ title: "Inspect Website Observations",
37
+ annotations: READ_ONLY_TOOL,
38
+ description: "Inspect the bounded recent history sample for one website tracking installation.",
39
+ inputSchema: z.object({
40
+ websiteId: objectIdSchema.describe("Website tracking installation ID"),
41
+ }).strict(),
42
+ }, async (args) => {
43
+ const websites = websiteApi(client);
44
+ if (!websites)
45
+ return toolError("This MCP build needs a newer migma package with website tracking support.");
46
+ const { data, error } = await websites.events(args.websiteId);
47
+ if (error)
48
+ return toolError(error.message);
49
+ return toolResult(data);
50
+ });
51
+ }
52
+ if (canUse(grantedPermissions, ["audience:write"])) {
53
+ server.registerTool("migma_create_website", {
54
+ title: "Create Website Tracker",
55
+ annotations: MUTATING_TOOL,
56
+ description: "Register one to ten exact storefront origins. Start with environment test; test observations remain history only. Reuse idempotency_key to retry the same logical creation across calls. Without a key, each call creates a separate installation. This tool returns installation settings and never issues browser identity credentials.",
57
+ inputSchema: z.object({
58
+ projectId: objectIdSchema.describe("Project ID"),
59
+ name: z.string().trim().min(1).max(100).describe("Installation name"),
60
+ origins: z.array(websiteOriginSchema).min(1).max(10)
61
+ .refine((values) => new Set(values).size === values.length, "Origins must be unique")
62
+ .describe("Exact HTTPS storefront origins"),
63
+ environment: z.enum(["live", "test"]).describe("Use test for history-only verification or live for identified execution"),
64
+ idempotency_key: z.string().min(1).max(128).optional()
65
+ .describe("Stable retry key. Omit to generate one for this tool call."),
66
+ }).strict(),
67
+ }, async (args) => {
68
+ const websites = websiteApi(client);
69
+ if (!websites)
70
+ return toolError("This MCP build needs a newer migma package with website tracking support.");
71
+ const { idempotency_key, ...input } = args;
72
+ const { data, error } = await websites.create(input, idempotency_key || randomUUID());
73
+ if (error)
74
+ return toolError(error.message);
75
+ return toolResult(data);
76
+ });
77
+ server.registerTool("migma_update_website", {
78
+ title: "Update Website Tracker",
79
+ annotations: MUTATING_TOOL,
80
+ description: "Rename, enable, or disable a website tracking installation. Origins and environment cannot be changed after creation.",
81
+ inputSchema: z.object({
82
+ websiteId: objectIdSchema.describe("Website tracking installation ID"),
83
+ name: z.string().trim().min(1).max(100).optional().describe("New installation name"),
84
+ status: z.enum(["enabled", "disabled"]).optional().describe("Collection status"),
85
+ }).strict().refine((value) => value.name !== undefined || value.status !== undefined, {
86
+ message: "Provide name or status",
87
+ }),
88
+ }, async (args) => {
89
+ const websites = websiteApi(client);
90
+ if (!websites)
91
+ return toolError("This MCP build needs a newer migma package with website tracking support.");
92
+ const { websiteId, ...input } = args;
93
+ const { data, error } = await websites.update(websiteId, input);
94
+ if (error)
95
+ return toolError(error.message);
96
+ return toolResult(data);
97
+ });
98
+ }
99
+ }
100
+ function websiteApi(client) {
101
+ return client.websites;
102
+ }
103
+ function toolResult(data) {
104
+ return {
105
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
106
+ };
107
+ }
108
+ function toolError(message) {
109
+ return {
110
+ content: [{ type: "text", text: message }],
111
+ isError: true,
112
+ };
113
+ }
114
+ //# sourceMappingURL=websites.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websites.js","sourceRoot":"","sources":["../../src/tools/websites.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEjE,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,gBAAgB,EAAE,wCAAwC,CAAC,CAAC;AACpG,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;IACrE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3B,MAAM,QAAQ,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5E,OAAO,KAAK,KAAK,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,QAAQ;eACxD,CAAC,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,QAAQ,CAAC,CAAC;IAC3E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,EAAE,kEAAkE,CAAC,CAAC;AAIvE,MAAM,UAAU,oBAAoB,CAClC,MAAiB,EACjB,MAAa,EACb,kBAA6B;IAE7B,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC;QAClD,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;YACE,KAAK,EAAE,uBAAuB;YAC9B,WAAW,EAAE,cAAc;YAC3B,WAAW,EAAE,8DAA8D;YAC3E,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;gBACpB,SAAS,EAAE,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC;aACjD,CAAC,CAAC,MAAM,EAAE;SACZ,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;YACb,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;YACpC,IAAI,CAAC,QAAQ;gBAAE,OAAO,SAAS,CAAC,2EAA2E,CAAC,CAAC;YAC7G,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC5D,IAAI,KAAK;gBAAE,OAAO,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC3C,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC,CACF,CAAC;QAEF,MAAM,CAAC,YAAY,CACjB,0BAA0B,EAC1B;YACE,KAAK,EAAE,8BAA8B;YACrC,WAAW,EAAE,cAAc;YAC3B,WAAW,EAAE,kFAAkF;YAC/F,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;gBACpB,SAAS,EAAE,cAAc,CAAC,QAAQ,CAAC,kCAAkC,CAAC;aACvE,CAAC,CAAC,MAAM,EAAE;SACZ,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;YACb,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;YACpC,IAAI,CAAC,QAAQ;gBAAE,OAAO,SAAS,CAAC,2EAA2E,CAAC,CAAC;YAC7G,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9D,IAAI,KAAK;gBAAE,OAAO,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC3C,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC,CACF,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC;QACnD,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;YACE,KAAK,EAAE,wBAAwB;YAC/B,WAAW,EAAE,aAAa;YAC1B,WAAW,EACT,2UAA2U;YAC7U,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;gBACpB,SAAS,EAAE,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC;gBAChD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;gBACrE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;qBACjD,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC;qBACpF,QAAQ,CAAC,gCAAgC,CAAC;gBAC7C,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,yEAAyE,CAAC;gBACzH,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;qBACnD,QAAQ,CAAC,4DAA4D,CAAC;aAC1E,CAAC,CAAC,MAAM,EAAE;SACZ,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;YACb,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;YACpC,IAAI,CAAC,QAAQ;gBAAE,OAAO,SAAS,CAAC,2EAA2E,CAAC,CAAC;YAC7G,MAAM,EAAE,eAAe,EAAE,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC;YAC3C,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,eAAe,IAAI,UAAU,EAAE,CAAC,CAAC;YACtF,IAAI,KAAK;gBAAE,OAAO,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC3C,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC,CACF,CAAC;QAEF,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;YACE,KAAK,EAAE,wBAAwB;YAC/B,WAAW,EAAE,aAAa;YAC1B,WAAW,EACT,uHAAuH;YACzH,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;gBACpB,SAAS,EAAE,cAAc,CAAC,QAAQ,CAAC,kCAAkC,CAAC;gBACtE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;gBACpF,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;aACjF,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE;gBACpF,OAAO,EAAE,wBAAwB;aAClC,CAAC;SACH,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;YACb,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;YACpC,IAAI,CAAC,QAAQ;gBAAE,OAAO,SAAS,CAAC,2EAA2E,CAAC,CAAC;YAC7G,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC;YACrC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAChE,IAAI,KAAK;gBAAE,OAAO,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC3C,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC,CACF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,MAAa;IAC/B,OAAQ,MAA+C,CAAC,QAAQ,CAAC;AACnE,CAAC;AAED,SAAS,UAAU,CAAC,IAAa;IAC/B,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;KAC1E,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,OAAe;IAChC,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QACnD,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@migma/mcp",
3
- "version": "1.9.0",
4
- "description": "Migma MCP server — generate, send, validate, and export AI-powered emails from any MCP-compatible client",
3
+ "version": "1.9.1-automations.1",
4
+ "description": "Migma MCP server — generate, send, validate, and export emails and build and manage automations from any MCP-compatible client",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "migma-mcp": "build/index.js"
@@ -31,7 +31,7 @@
31
31
  "license": "MIT",
32
32
  "dependencies": {
33
33
  "@modelcontextprotocol/sdk": "^1.9.0",
34
- "migma": "^1.8.0",
34
+ "migma": "1.10.1-automations.1",
35
35
  "zod": "^3.23.0"
36
36
  },
37
37
  "devDependencies": {
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=campaign-schedule.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"campaign-schedule.test.d.ts","sourceRoot":"","sources":["../../../src/tools/__tests__/campaign-schedule.test.ts"],"names":[],"mappings":""}
@@ -1,43 +0,0 @@
1
- import assert from "node:assert/strict";
2
- import test from "node:test";
3
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
4
- import { registerCampaignTools } from "../campaigns.js";
5
- function fixture() {
6
- const calls = [];
7
- const client = {
8
- domains: { list: async () => ({ data: [{ domain: "example.com", isVerified: true, status: "verified" }], error: null }) },
9
- segments: { get: async (id) => ({ data: { id, name: "Customers", count: 3 }, error: null }) },
10
- campaigns: {
11
- get: async (id) => ({ data: { id, projectId: "brand-1", status: "draft", recipientType: "audience", recipientId: "seg-1", from: "hello@example.com", fromName: "Example", subject: "Hi" }, error: null }),
12
- schedule: async (id, body) => {
13
- calls.push({ id, body });
14
- return { data: { id, status: "scheduled" }, error: null };
15
- },
16
- },
17
- };
18
- const server = new McpServer({ name: "test", version: "1" });
19
- registerCampaignTools(server, client, { apiKey: "offline", projectId: "brand-1" });
20
- const tools = server._registeredTools;
21
- const tool = tools.migma_schedule_campaign;
22
- // Preview first, then confirm with the returned token, as a client would.
23
- const confirmed = {
24
- handler: async (args, extra) => {
25
- const preview = await tool.handler(args, extra);
26
- const { confirmationToken } = JSON.parse(preview.content[0].text);
27
- return tool.handler({ ...args, confirmationToken }, extra);
28
- },
29
- };
30
- return { tool: { inputSchema: tool.inputSchema, handler: confirmed.handler }, calls };
31
- }
32
- test("schedule forwards local-time delivery when given, including false", async () => {
33
- const { tool, calls } = fixture();
34
- const args = { campaignId: "campaign-1", scheduledAt: "2031-07-01T07:00:00Z", scheduledTimezone: "Europe/Rome" };
35
- await tool.handler(tool.inputSchema.parse({ ...args, localTimeDelivery: true }), {});
36
- assert.equal(calls[0].id, "campaign-1");
37
- assert.deepEqual(calls[0].body, { scheduledAt: args.scheduledAt, scheduledTimezone: args.scheduledTimezone, localTimeDelivery: true });
38
- await tool.handler(tool.inputSchema.parse(args), {});
39
- assert.deepEqual(Object.keys(calls[1].body).sort(), ["scheduledAt", "scheduledTimezone"]);
40
- await tool.handler(tool.inputSchema.parse({ ...args, localTimeDelivery: false }), {});
41
- assert.equal(calls[2].body.localTimeDelivery, false);
42
- });
43
- //# sourceMappingURL=campaign-schedule.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"campaign-schedule.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/campaign-schedule.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=send-confirmation.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"send-confirmation.test.d.ts","sourceRoot":"","sources":["../../../src/tools/__tests__/send-confirmation.test.ts"],"names":[],"mappings":""}
@@ -1,170 +0,0 @@
1
- import assert from "node:assert/strict";
2
- import test from "node:test";
3
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
4
- import { registerSendTools } from "../send.js";
5
- import { registerCampaignTools } from "../campaigns.js";
6
- import { CONFIRMATION_TTL_MS, issueConfirmationToken } from "../send-confirmation.js";
7
- const VERIFIED = [{ domain: "example.com", isVerified: true, status: "verified" }];
8
- function fixture(options = {}) {
9
- const sends = [];
10
- const campaignSends = [];
11
- const schedules = [];
12
- const state = {
13
- campaign: {
14
- id: "campaign-1", projectId: "brand-1", status: "draft", recipientType: "audience", recipientId: "seg-1",
15
- from: "hello@example.com", fromName: "Example", subject: "Spring sale", emailId: "email-1",
16
- conversationId: "conv-1", estimatedRecipients: 1200, providerType: "migma", template: "<zinn/>",
17
- themeInput: { colors: { primary: "#000" } }, ...options.campaign,
18
- },
19
- };
20
- const client = {
21
- domains: { list: async () => ({ data: options.domains ?? VERIFIED, error: null }) },
22
- tags: { get: async (id) => ({ data: { id, name: "VIP", subscriberCount: 40 }, error: null }) },
23
- segments: { get: async (id) => ({ data: { id, name: "Customers", count: 1200 }, error: null }) },
24
- sending: {
25
- send: async (body, opts) => {
26
- sends.push({ body, options: opts });
27
- return { data: { status: "sent" }, error: null };
28
- },
29
- },
30
- campaigns: {
31
- get: async () => ({ data: state.campaign, error: null }),
32
- send: async (id, opts) => {
33
- campaignSends.push({ id, options: opts });
34
- return { data: { ...state.campaign, status: "sending" }, error: null };
35
- },
36
- schedule: async (id, body, opts) => {
37
- schedules.push({ id, body, options: opts });
38
- return { data: { ...state.campaign, status: "scheduled" }, error: null };
39
- },
40
- },
41
- };
42
- const server = new McpServer({ name: "test", version: "1" });
43
- const config = { apiKey: options.apiKey ?? "sk_test_one", projectId: "brand-1" };
44
- registerSendTools(server, client, config);
45
- registerCampaignTools(server, client, config);
46
- const tools = server._registeredTools;
47
- const call = (name, args) => tools[name].handler(tools[name].inputSchema.parse(args), {});
48
- return { call, sends, campaignSends, schedules, state };
49
- }
50
- const parse = (result) => JSON.parse(result.content[0].text);
51
- const single = {
52
- recipientType: "email", recipientEmail: "Ana@Example.org", from: "hello@example.com",
53
- fromName: "Example", subject: "Your order", emailId: "email-1",
54
- };
55
- test("send_email: first call only previews; the token sends once, as marketing, with a stable replay key", async () => {
56
- const f = fixture();
57
- const preview = await f.call("migma_send_email", single);
58
- assert.equal(preview.isError, undefined);
59
- const body = parse(preview);
60
- assert.equal(body.sent, false);
61
- assert.deepEqual(body.summary.audience, [{ type: "email", name: "Ana@Example.org", recipients: 1 }]);
62
- assert.equal(body.summary.from, "Example <hello@example.com>");
63
- assert.equal(f.sends.length, 0);
64
- const args = { ...single, confirmationToken: body.confirmationToken };
65
- await f.call("migma_send_email", args);
66
- await f.call("migma_send_email", args);
67
- assert.equal(f.sends.length, 2);
68
- assert.equal(f.sends[0].body.transactional, false, "single sends are marketing unless asked");
69
- assert.deepEqual(f.sends[0].options, f.sends[1].options, "a repeated confirmation replays instead of resending");
70
- assert.match(f.sends[0].options.idempotencyKey, /^confirm-/);
71
- });
72
- test("send_email: a token does not carry over to other details, keys, or past its expiry", async () => {
73
- const f = fixture();
74
- const { confirmationToken } = parse(await f.call("migma_send_email", single));
75
- const changed = await f.call("migma_send_email", { ...single, subject: "Other", confirmationToken });
76
- assert.equal(changed.isError, true);
77
- assert.match(changed.content[0].text, /Nothing was sent/);
78
- const withVars = parse(await f.call("migma_send_email", { ...single, variables: { a: "1", b: "2" } }));
79
- const reordered = await f.call("migma_send_email", { ...single, variables: { b: "2", a: "1" }, confirmationToken: withVars.confirmationToken });
80
- assert.equal(reordered.isError, undefined, "variable key order does not void the token");
81
- const other = fixture({ apiKey: "sk_test_two" });
82
- assert.equal((await other.call("migma_send_email", { ...single, confirmationToken })).isError, true);
83
- const facts = {
84
- recipientType: "email", recipientEmail: "ana@example.org", recipientId: null, from: "hello@example.com",
85
- fromName: "Example", subject: "Your order", emailId: "email-1", conversationId: null, variables: null,
86
- projectId: "brand-1", transactional: false,
87
- };
88
- const old = issueConfirmationToken("sk_test_one", "send_email", facts, Date.now() - CONFIRMATION_TTL_MS - 1);
89
- const expired = await f.call("migma_send_email", { ...single, confirmationToken: old.token });
90
- assert.match(expired.content[0].text, /expired/);
91
- const fresh = issueConfirmationToken("sk_test_one", "send_email", facts);
92
- assert.equal((await f.call("migma_send_email", { ...single, confirmationToken: fresh.token })).isError, undefined);
93
- assert.equal(f.sends.length, 2);
94
- });
95
- test("send_email: transactional never reaches a tag or segment and needs a verified transactional identity", async () => {
96
- const f = fixture();
97
- const bulk = await f.call("migma_send_email", { ...single, recipientType: "tag", recipientId: "tag-1", transactional: true });
98
- assert.equal(bulk.isError, true);
99
- const noIdentity = await f.call("migma_send_email", { ...single, transactional: true });
100
- assert.match(noIdentity.content[0].text, /notify\.example\.com/);
101
- const g = fixture({ domains: [...VERIFIED, { domain: "notify.example.com", rootDomain: "example.com", stream: "transactional", isVerified: true, status: "verified" }] });
102
- const ok = await g.call("migma_send_email", { ...single, transactional: true });
103
- assert.equal(ok.isError, undefined);
104
- await g.call("migma_send_email", { ...single, transactional: true, confirmationToken: parse(ok).confirmationToken });
105
- assert.equal(g.sends[0].body.transactional, true);
106
- });
107
- test("sender: an unowned domain cannot send; an unverified one names the managed fallback", async () => {
108
- const none = fixture({ domains: [] });
109
- const refused = await none.call("migma_send_email", single);
110
- assert.match(refused.content[0].text, /not a verified sending domain/);
111
- const managed = fixture({ domains: [
112
- { domain: "example.com", isVerified: false, status: "pending" },
113
- { domain: "brand.migma.email", isManagedDomain: true, isVerified: true, status: "verified" },
114
- ] });
115
- const preview = parse(await managed.call("migma_send_email", single));
116
- assert.equal(preview.summary.from, "Example <hello@brand.migma.email>");
117
- assert.match(preview.summary.warnings[0], /not verified yet/);
118
- const draft = await none.call("migma_create_campaign", {
119
- name: "x", conversationId: "conv-1", from: "hello@nope.com", fromName: "x", recipientType: "tag", recipientId: "t",
120
- });
121
- assert.equal(draft.isError, true);
122
- });
123
- test("send_campaign: previews the saved campaign and refuses a token after it changed", async () => {
124
- const f = fixture();
125
- const body = parse(await f.call("migma_send_campaign", { campaignId: "campaign-1" }));
126
- assert.equal(f.campaignSends.length, 0);
127
- assert.deepEqual(body.summary.audience, [{ type: "segment", name: "Customers", recipients: 1200 }]);
128
- assert.equal(body.summary.subject, "Spring sale");
129
- f.state.campaign.subject = "Changed after approval";
130
- const stale = await f.call("migma_send_campaign", { campaignId: "campaign-1", confirmationToken: body.confirmationToken });
131
- assert.equal(stale.isError, true);
132
- assert.equal(f.campaignSends.length, 0);
133
- const fresh = parse(await f.call("migma_send_campaign", { campaignId: "campaign-1" }));
134
- const sent = parse(await f.call("migma_send_campaign", { campaignId: "campaign-1", confirmationToken: fresh.confirmationToken }));
135
- assert.equal(f.campaignSends.length, 1);
136
- assert.equal(sent.template, undefined, "responses leave out the template and theme");
137
- assert.equal(sent.themeInput, undefined);
138
- f.state.campaign.status = "sent";
139
- assert.match((await f.call("migma_send_campaign", { campaignId: "campaign-1" })).content[0].text, /cannot be sent/);
140
- });
141
- test("schedule_campaign: the token is bound to the time and zone", async () => {
142
- const f = fixture();
143
- const args = { campaignId: "campaign-1", scheduledAt: "2031-05-01T07:00:00Z", scheduledTimezone: "Europe/Rome" };
144
- const body = parse(await f.call("migma_schedule_campaign", args));
145
- assert.equal(body.summary.when, "2031-05-01 09:00 (Europe/Rome)");
146
- assert.equal(f.schedules.length, 0);
147
- const moved = await f.call("migma_schedule_campaign", { ...args, scheduledAt: "2031-05-02T07:00:00Z", confirmationToken: body.confirmationToken });
148
- assert.equal(moved.isError, true);
149
- await f.call("migma_schedule_campaign", { ...args, confirmationToken: body.confirmationToken });
150
- assert.equal(f.schedules.length, 1);
151
- assert.match((await f.call("migma_schedule_campaign", { ...args, scheduledAt: "2020-01-01T00:00:00Z" })).content[0].text, /future/);
152
- });
153
- test("a send-only connection still previews, with the unchecked parts named", async () => {
154
- const forbidden = async () => ({ data: null, error: { message: "Forbidden", statusCode: 403 } });
155
- const client = {
156
- domains: { list: forbidden },
157
- tags: { get: forbidden },
158
- segments: { get: forbidden },
159
- sending: { send: async () => ({ data: { status: "queued" }, error: null }) },
160
- };
161
- const server = new McpServer({ name: "test", version: "1" });
162
- registerSendTools(server, client, { apiKey: "sk_test_one", projectId: "brand-1" });
163
- const tool = server._registeredTools.migma_send_email;
164
- const run = (args) => tool.handler(tool.inputSchema.parse(args), {});
165
- const body = parse(await run({ ...single, recipientType: "tag", recipientId: "tag-1" }));
166
- assert.deepEqual(body.summary.audience, [{ type: "tag", name: "tag-1", recipients: null }]);
167
- assert.ok(body.summary.warnings.some((w) => /not checked/.test(w)));
168
- assert.equal((await run({ ...single, transactional: true })).isError, true, "transactional still needs a checked identity");
169
- });
170
- //# sourceMappingURL=send-confirmation.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"send-confirmation.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/send-confirmation.test.ts"],"names":[],"mappings":"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"}
@@ -1,64 +0,0 @@
1
- import type { Migma } from "migma";
2
- /**
3
- * Sending is a two-call handshake the server enforces: a call without
4
- * confirmationToken only returns a summary built from live data (audience,
5
- * recipient count, sender, subject, timing) and a short-lived token; mail goes
6
- * out only when the same call is repeated with that token. Each MCP request
7
- * may run on a fresh server instance, so the token is self-validating: an HMAC,
8
- * keyed by the caller's API key, over its expiry and a hash of everything that
9
- * decides who gets what, from whom, and when. Any change in between voids it.
10
- */
11
- export declare const CONFIRMATION_TTL_MS: number;
12
- export declare const CONFIRMATION_TOKEN_DESCRIPTION = "Leave empty first: the call then sends nothing and returns a summary plus confirmationToken. Show the summary to the user; after they approve it in this chat, repeat the same call with the token. The token expires in 10 minutes and stops working if any detail changes.";
13
- export type SendAction = "send_email" | "send_campaign" | "schedule_campaign";
14
- export interface SendSummary {
15
- action: string;
16
- audience: {
17
- type: string;
18
- name: string;
19
- recipients: number | null;
20
- }[];
21
- from: string;
22
- subject: string;
23
- when: string;
24
- email: {
25
- emailId?: string | null;
26
- conversationId?: string | null;
27
- };
28
- warnings: string[];
29
- }
30
- export declare function issueConfirmationToken(apiKey: string, action: SendAction, facts: unknown, now?: number): {
31
- token: string;
32
- expiresAt: string;
33
- };
34
- /** Null when the token was issued for exactly these facts and is still valid, else why not. */
35
- export declare function checkConfirmationToken(apiKey: string, token: string, action: SendAction, facts: unknown, now?: number): string | null;
36
- /** A repeated confirmed call replays the first result instead of sending again. */
37
- export declare function confirmedIdempotencyKey(token: string, idempotencyKey?: string): string;
38
- export declare function previewResult(apiKey: string, tool: string, action: SendAction, facts: unknown, summary: SendSummary): {
39
- content: {
40
- type: "text";
41
- text: string;
42
- }[];
43
- };
44
- export type SenderCheck = {
45
- ok: true;
46
- from: string;
47
- warnings: string[];
48
- } | {
49
- ok: false;
50
- error: string;
51
- };
52
- /**
53
- * Mirrors the backend's send-time sender resolution (SesTenantService
54
- * resolveSendableFrom, and the transactional identity check in v1 sending):
55
- * a From on a sendable domain or its root sends as is; otherwise Migma sends
56
- * from the account's verified managed domain; with neither, nothing can send.
57
- * Transactional mail needs a verified transactional identity for the From's
58
- * root domain, so unsubscribed contacts are only ever reached through one.
59
- */
60
- export declare function checkSender(client: Migma, from: string, options?: {
61
- transactional?: boolean;
62
- }): Promise<SenderCheck>;
63
- export declare function formatWhen(scheduledAt: string | undefined, timezone: string | undefined): string;
64
- //# sourceMappingURL=send-confirmation.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"send-confirmation.d.ts","sourceRoot":"","sources":["../../src/tools/send-confirmation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAEnC;;;;;;;;GAQG;AAEH,eAAO,MAAM,mBAAmB,QAAc,CAAC;AAE/C,eAAO,MAAM,8BAA8B,iRACqO,CAAC;AAEjR,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,eAAe,GAAG,mBAAmB,CAAC;AAE9E,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,EAAE,CAAC;IACtE,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACnE,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAyBD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,OAAO,EACd,GAAG,SAAa,GACf;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAMtC;AAED,+FAA+F;AAC/F,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,OAAO,EACd,GAAG,SAAa,GACf,MAAM,GAAG,IAAI,CAef;AAED,mFAAmF;AACnF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAEtF;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW;;;;;EAsBrB;AAcD,MAAM,MAAM,WAAW,GACnB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,GAC9C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjC;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,KAAK,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GACxC,OAAO,CAAC,WAAW,CAAC,CA0CtB;AAED,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAiBhG"}