@migma/mcp 1.7.1 → 1.7.3

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 (81) hide show
  1. package/README.md +26 -0
  2. package/build/index.d.ts.map +1 -1
  3. package/build/index.js +7 -5
  4. package/build/index.js.map +1 -1
  5. package/build/prompts/index.d.ts.map +1 -1
  6. package/build/prompts/index.js +21 -8
  7. package/build/prompts/index.js.map +1 -1
  8. package/build/tools/__tests__/agent-payload.test.js +56 -1
  9. package/build/tools/__tests__/agent-payload.test.js.map +1 -1
  10. package/build/tools/__tests__/brand.test.d.ts +2 -0
  11. package/build/tools/__tests__/brand.test.d.ts.map +1 -0
  12. package/build/tools/__tests__/brand.test.js +36 -0
  13. package/build/tools/__tests__/brand.test.js.map +1 -0
  14. package/build/tools/__tests__/campaign-recipients.test.d.ts +2 -0
  15. package/build/tools/__tests__/campaign-recipients.test.d.ts.map +1 -0
  16. package/build/tools/__tests__/campaign-recipients.test.js +61 -0
  17. package/build/tools/__tests__/campaign-recipients.test.js.map +1 -0
  18. package/build/tools/__tests__/catalog.test.js +16 -2
  19. package/build/tools/__tests__/catalog.test.js.map +1 -1
  20. package/build/tools/__tests__/context.test.d.ts +2 -0
  21. package/build/tools/__tests__/context.test.d.ts.map +1 -0
  22. package/build/tools/__tests__/context.test.js +89 -0
  23. package/build/tools/__tests__/context.test.js.map +1 -0
  24. package/build/tools/__tests__/email-edit.test.d.ts +2 -0
  25. package/build/tools/__tests__/email-edit.test.d.ts.map +1 -0
  26. package/build/tools/__tests__/email-edit.test.js +82 -0
  27. package/build/tools/__tests__/email-edit.test.js.map +1 -0
  28. package/build/tools/__tests__/email-images.test.js +31 -6
  29. package/build/tools/__tests__/email-images.test.js.map +1 -1
  30. package/build/tools/__tests__/segments.test.d.ts +2 -0
  31. package/build/tools/__tests__/segments.test.d.ts.map +1 -0
  32. package/build/tools/__tests__/segments.test.js +149 -0
  33. package/build/tools/__tests__/segments.test.js.map +1 -0
  34. package/build/tools/agent-payload.d.ts +5 -0
  35. package/build/tools/agent-payload.d.ts.map +1 -1
  36. package/build/tools/agent-payload.js +50 -0
  37. package/build/tools/agent-payload.js.map +1 -1
  38. package/build/tools/billing.js +1 -1
  39. package/build/tools/billing.js.map +1 -1
  40. package/build/tools/brand.d.ts.map +1 -1
  41. package/build/tools/brand.js +12 -7
  42. package/build/tools/brand.js.map +1 -1
  43. package/build/tools/campaigns.d.ts.map +1 -1
  44. package/build/tools/campaigns.js +13 -1
  45. package/build/tools/campaigns.js.map +1 -1
  46. package/build/tools/capabilities.d.ts +1 -0
  47. package/build/tools/capabilities.d.ts.map +1 -1
  48. package/build/tools/capabilities.js +13 -6
  49. package/build/tools/capabilities.js.map +1 -1
  50. package/build/tools/contacts.js +6 -6
  51. package/build/tools/contacts.js.map +1 -1
  52. package/build/tools/context.d.ts.map +1 -1
  53. package/build/tools/context.js +55 -32
  54. package/build/tools/context.js.map +1 -1
  55. package/build/tools/domains.js +1 -1
  56. package/build/tools/domains.js.map +1 -1
  57. package/build/tools/email-edit-client.d.ts +15 -0
  58. package/build/tools/email-edit-client.d.ts.map +1 -0
  59. package/build/tools/email-edit-client.js +38 -0
  60. package/build/tools/email-edit-client.js.map +1 -0
  61. package/build/tools/email-images.d.ts +3 -0
  62. package/build/tools/email-images.d.ts.map +1 -1
  63. package/build/tools/email-images.js +26 -12
  64. package/build/tools/email-images.js.map +1 -1
  65. package/build/tools/generate.d.ts.map +1 -1
  66. package/build/tools/generate.js +36 -12
  67. package/build/tools/generate.js.map +1 -1
  68. package/build/tools/import-html.js +2 -2
  69. package/build/tools/import-html.js.map +1 -1
  70. package/build/tools/knowledge-base.js +1 -1
  71. package/build/tools/knowledge-base.js.map +1 -1
  72. package/build/tools/projects.d.ts.map +1 -1
  73. package/build/tools/projects.js +8 -3
  74. package/build/tools/projects.js.map +1 -1
  75. package/build/tools/segments.d.ts.map +1 -1
  76. package/build/tools/segments.js +42 -5
  77. package/build/tools/segments.js.map +1 -1
  78. package/build/tools/validate.d.ts.map +1 -1
  79. package/build/tools/validate.js +5 -2
  80. package/build/tools/validate.js.map +1 -1
  81. package/package.json +1 -1
@@ -0,0 +1,89 @@
1
+ import assert from "node:assert/strict";
2
+ import test from "node:test";
3
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
4
+ import { registerContextTools } from "../context.js";
5
+ const ok = (data) => Promise.resolve({ data, error: null });
6
+ const failed = () => Promise.resolve({ data: null, error: { message: "Unavailable" } });
7
+ const kit = {
8
+ _id: "brand-1", name: "Acme", colors: { accent: "#ff0000" },
9
+ fonts: [{ family: "Inter" }], logoUrls: { primary: "https://example.com/logo.png" },
10
+ };
11
+ function clientStub() {
12
+ return {
13
+ workspaces: { list: () => ok({ workspaces: [] }) },
14
+ projects: {
15
+ list: () => ok({ projects: [kit], pagination: { total: 1 } }),
16
+ get: (_id) => ok(kit),
17
+ references: (_id) => ok({ total: 0, references: [] }),
18
+ },
19
+ contacts: { list: (_params) => ok({ data: [], count: 0 }) },
20
+ domains: { list: () => ok([]) },
21
+ billing: { credits: () => ok({ hasCredits: true }) },
22
+ };
23
+ }
24
+ async function context(client, permissions, projectId) {
25
+ const server = new McpServer({ name: "test", version: "1" });
26
+ registerContextTools(server, client, permissions);
27
+ const { migma_get_context } = server._registeredTools;
28
+ const result = await migma_get_context.handler({ projectId }, {});
29
+ return JSON.parse(result.content[0].text);
30
+ }
31
+ test("a complete brand kit without standing rules is not called missing", async () => {
32
+ const result = await context(clientStub());
33
+ assert.equal(result.setup.brandKit, "ready");
34
+ assert.equal(result.setup.guidelines, false);
35
+ assert.equal(result.setup.audience, 0);
36
+ assert.match(result.suggestions.join(" "), /brand guidelines/);
37
+ });
38
+ test("failed reads remain unknown and never trigger empty-account onboarding", async () => {
39
+ const client = clientStub();
40
+ client.projects.list = failed;
41
+ client.projects.get = failed;
42
+ client.projects.references = failed;
43
+ client.contacts.list = failed;
44
+ client.domains.list = failed;
45
+ const result = await context(client, undefined, "brand-1");
46
+ assert.equal(result.brandCount, null);
47
+ for (const key of ["brandKit", "guidelines", "references", "audience", "sendingDomain"]) {
48
+ assert.equal(result.setup[key], null, key);
49
+ }
50
+ assert.doesNotMatch(result.suggestions.join(" "), /No brand kit|Import it|migma_save_reference|migma_setup_domain/);
51
+ assert.ok(result.unavailable.includes("audience"));
52
+ });
53
+ test("read-only credentials never suggest hidden write tools", async () => {
54
+ const result = await context(clientStub(), ["email:read", "audience:read", "domain:read"]);
55
+ assert.doesNotMatch(result.suggestions.join(" "), /migma_(save_reference|update_brand_guidelines|create_contact_import|create_managed_domain|setup_domain)/);
56
+ });
57
+ test("multiple brands require a choice and use the full account count", async () => {
58
+ const client = clientStub();
59
+ client.projects.list = () => ok({ projects: [kit], pagination: { total: 101 } });
60
+ client.projects.get = () => { throw new Error("Must not pick first brand"); };
61
+ const result = await context(client);
62
+ assert.equal(result.brandCount, 101);
63
+ assert.equal(result.setup.brandId, null);
64
+ assert.match(result.suggestions[0], /which brand/);
65
+ });
66
+ test("explicit brand beyond first page drives every setup read", async () => {
67
+ const client = clientStub();
68
+ const calls = [];
69
+ client.projects.get = (id) => { calls.push(id); return ok({ ...kit, _id: id, name: "Selected" }); };
70
+ client.projects.references = (id) => { calls.push(id); return ok({ total: 3 }); };
71
+ client.contacts.list = (params) => { calls.push(params); return ok({ count: 12 }); };
72
+ const result = await context(client, undefined, "brand-200");
73
+ assert.deepEqual(calls, ["brand-200", "brand-200", { projectId: "brand-200", limit: 1 }]);
74
+ assert.equal(result.setup.brandName, "Selected");
75
+ assert.equal(result.setup.references, 3);
76
+ assert.equal(result.setup.audience, 12);
77
+ });
78
+ test("unavailable reference SDK and absent read permissions stay unknown", async () => {
79
+ const client = clientStub();
80
+ Reflect.deleteProperty(client.projects, "references");
81
+ client.contacts.list = () => { throw new Error("No audience read access"); };
82
+ client.domains.list = () => { throw new Error("No domain read access"); };
83
+ const result = await context(client, ["email:read", "project:write"]);
84
+ assert.equal(result.setup.references, null);
85
+ assert.equal(result.setup.audience, null);
86
+ assert.equal(result.setup.sendingDomain, null);
87
+ assert.doesNotMatch(result.suggestions.join(" "), /migma_save_reference|migma_create_contact_import|migma_setup_domain/);
88
+ });
89
+ //# sourceMappingURL=context.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/context.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=email-edit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email-edit.test.d.ts","sourceRoot":"","sources":["../../../src/tools/__tests__/email-edit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,82 @@
1
+ import assert from "node:assert/strict";
2
+ import test from "node:test";
3
+ import { createMigmaMcpServer } from "../../index.js";
4
+ function tools(emails, config = { apiKey: "test", baseUrl: "https://api.example.test/v1" }) {
5
+ const server = createMigmaMcpServer({ client: { emails }, config });
6
+ return server._registeredTools;
7
+ }
8
+ const data = (reply) => {
9
+ for (const item of reply.content) {
10
+ if (item.type !== 'text' || !item.text)
11
+ continue;
12
+ try {
13
+ return JSON.parse(item.text);
14
+ }
15
+ catch { /* Preview guidance precedes JSON. */ }
16
+ }
17
+ throw new Error('Missing JSON payload');
18
+ };
19
+ test('edit returns a queued handle without waiting, legacy editing, or preview fetch', async () => {
20
+ let starts = 0;
21
+ const registry = tools({
22
+ edit: () => { throw new Error('legacy edit must never run'); },
23
+ startEdit: async (emailId, params, options) => {
24
+ starts++;
25
+ assert.deepEqual(params, { prompt: 'Add Cursor + Grok Bot', label: undefined });
26
+ assert.deepEqual(options, { idempotencyKey: 'weekly-v2' });
27
+ return { data: { emailId, editId: 'edit-1', conversationId: 'conv-1', status: 'pending' } };
28
+ },
29
+ });
30
+ const result = data(await registry.migma_edit_email.handler({ emailId: 'email-1', prompt: 'Add Cursor + Grok Bot', idempotency_key: 'weekly-v2' }));
31
+ assert.equal(starts, 1);
32
+ assert.equal(result.status, 'pending');
33
+ assert.equal(result.editId, 'edit-1');
34
+ assert.equal(result.appUrl, 'https://migma.ai/chat?c=conv-1');
35
+ assert.match(result.nextStep, /migma_get_email_edit_status/);
36
+ });
37
+ test('status follows exact edit and exposes failures without another rewrite', async () => {
38
+ let state = 'processing';
39
+ const registry = tools({ getEditStatus: async (email, edit) => {
40
+ assert.equal(email, 'email-1');
41
+ assert.equal(edit, 'edit-1');
42
+ return { data: { editId: edit, status: state, ...(state === 'failed' ? { error: 'Provider failed', changesMayHaveBeenSaved: true }
43
+ : state === 'completed' ? { result: { emailId: email, conversationId: 'conv', html: '<p>updated</p>' } } : {}) } };
44
+ } });
45
+ const poll = (includeHtml = false) => registry.migma_get_email_edit_status.handler({ emailId: 'email-1', editId: 'edit-1', includeHtml });
46
+ assert.equal(data(await poll()).status, 'processing');
47
+ state = 'failed';
48
+ assert.equal(data(await poll()).error, 'Provider failed');
49
+ state = 'completed';
50
+ assert.equal(data(await poll()).result.html, undefined);
51
+ assert.equal(data(await poll(true)).result.html, '<p>updated</p>');
52
+ });
53
+ test('older SDK uses async REST with bounded wait and same replay key, never synchronous fallback', async () => {
54
+ const original = globalThis.fetch;
55
+ const calls = [];
56
+ globalThis.fetch = async (url, init) => {
57
+ calls.push({ url: String(url), init });
58
+ return new Response(JSON.stringify({ success: true, data: { editId: 'edit-1', emailId: 'email-1', status: 'pending' } }), { status: 202 });
59
+ };
60
+ try {
61
+ const registry = tools({ edit: () => { throw new Error('unsafe legacy call'); } });
62
+ await registry.migma_edit_email.handler({ emailId: 'email-1', prompt: 'Update', idempotency_key: 'stable-key' });
63
+ assert.equal(calls[0].url, 'https://api.example.test/v1/emails/email-1/edit');
64
+ assert.deepEqual(JSON.parse(String(calls[0].init?.body)), { prompt: 'Update', async: true });
65
+ assert.equal((calls[0].init?.headers)['Idempotency-Key'], 'stable-key');
66
+ assert.ok(calls[0].init?.signal);
67
+ await registry.migma_get_email_edit_status.handler({ emailId: 'email-1', editId: 'edit-1' });
68
+ assert.equal(calls[1].init?.method, 'GET');
69
+ assert.equal(calls[1].url, 'https://api.example.test/v1/emails/email-1/edits/edit-1');
70
+ }
71
+ finally {
72
+ globalThis.fetch = original;
73
+ }
74
+ });
75
+ test('uncertain submission preserves retry key and never claims processing', async () => {
76
+ const registry = tools({ startEdit: async () => ({ error: { message: 'Connection closed' } }) });
77
+ const reply = await registry.migma_edit_email.handler({ emailId: 'email-1', prompt: 'Update', idempotency_key: 'keep-me' });
78
+ assert.equal(reply.isError, true);
79
+ assert.equal(data(reply).idempotency_key, 'keep-me');
80
+ assert.equal(data(reply).status, undefined);
81
+ });
82
+ //# sourceMappingURL=email-edit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email-edit.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/email-edit.test.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import assert from "node:assert/strict";
2
2
  import test from "node:test";
3
- import { collectScreenshotRefs, fetchEmailImage, isAllowedScreenshotUrl, screenshotGuidance, toolResultWithImages, } from "../email-images.js";
3
+ import { collectScreenshotRefs, fetchEmailImage, isAllowedScreenshotUrl, previewsMarkdown, screenshotGuidance, toolResultWithImages, } from "../email-images.js";
4
4
  test("allows only https Migma CDN and S3 screenshot hosts", () => {
5
5
  assert.equal(isAllowedScreenshotUrl("https://cdn.migma.ai/shot.png"), true);
6
6
  assert.equal(isAllowedScreenshotUrl("https://migmaa-sandbox.s3.amazonaws.com/shot.png"), true);
@@ -55,12 +55,12 @@ test("collects list thumbs and detail slot shots", () => {
55
55
  { url: "https://cdn.migma.ai/solo.png", label: "Solo" },
56
56
  ]);
57
57
  });
58
- test("guidance tells the agent to show images or poll", () => {
59
- assert.match(screenshotGuidance([{ url: "https://cdn.migma.ai/a.png", label: "A" }], 1, {}), /Show these email preview images/);
58
+ test("guidance reports attached images or polling", () => {
59
+ assert.match(screenshotGuidance([{ url: "https://cdn.migma.ai/a.png", label: "A" }], 1, {}), /Preview images for 1 email\(s\) are attached/);
60
60
  assert.match(screenshotGuidance([], 0, { status: "completed" }), /still rendering/);
61
61
  assert.equal(screenshotGuidance([], 0, { status: "pending" }), "");
62
62
  assert.match(screenshotGuidance([], 0, { screenshotStatus: "pending" }), /still rendering/);
63
- assert.match(screenshotGuidance([{ url: "https://cdn.migma.ai/a.png", label: "A" }], 0, { status: "completed" }), /no preview image could be attached/);
63
+ assert.match(screenshotGuidance([{ url: "https://cdn.migma.ai/a.png", label: "A" }], 0, { status: "completed" }), /No preview image could be attached/);
64
64
  assert.match(screenshotGuidance([
65
65
  { url: "https://cdn.migma.ai/a.png", label: "A" },
66
66
  { url: "https://cdn.migma.ai/b.png", label: "B" },
@@ -90,11 +90,36 @@ test("toolResultWithImages puts image content before JSON", async () => {
90
90
  arrayBuffer: async () => png.buffer.slice(png.byteOffset, png.byteOffset + png.byteLength),
91
91
  }));
92
92
  assert.equal(result.content[0]?.type, "text");
93
- assert.match(result.content[0].text, /Show these email preview images/);
93
+ assert.match(result.content[0].text, /Preview images for 1 email\(s\) are attached/);
94
94
  assert.equal(result.content[1]?.type, "image");
95
+ assert.match(result.content[2].text, /"subject": "Hi"/);
95
96
  const last = result.content[result.content.length - 1];
96
97
  assert.equal(last?.type, "text");
97
- assert.match(last.text, /"subject": "Hi"/);
98
+ assert.match(last.text, /^Previews:/);
99
+ });
100
+ test("previews list pairs each image with its editor link", () => {
101
+ const refs = collectScreenshotRefs({
102
+ status: "completed",
103
+ result: {
104
+ emails: [
105
+ {
106
+ subject: "Teaser [1]",
107
+ screenshotUrl: "https://cdn.migma.ai/one.png",
108
+ appUrl: "https://migma.ai/chat?c=abc&slot=0",
109
+ },
110
+ { subject: "Launch", screenshotUrl: "https://cdn.migma.ai/two.png" },
111
+ ],
112
+ },
113
+ }, "detail");
114
+ assert.equal(refs[0]?.appUrl, "https://migma.ai/chat?c=abc&slot=0");
115
+ assert.equal("appUrl" in (refs[1] ?? {}), false);
116
+ assert.equal(previewsMarkdown(refs), [
117
+ "Previews:",
118
+ "1. **Teaser 1** · [Open in Migma](https://migma.ai/chat?c=abc&slot=0)",
119
+ " ![Teaser 1](https://cdn.migma.ai/one.png)",
120
+ "2. **Launch**",
121
+ " ![Launch](https://cdn.migma.ai/two.png)",
122
+ ].join("\n"));
98
123
  });
99
124
  test("toolResultWithImages reports failed preview attachment", async () => {
100
125
  const result = await toolResultWithImages({
@@ -1 +1 @@
1
- {"version":3,"file":"email-images.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/email-images.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,sBAAsB,EACtB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAE5B,IAAI,CAAC,qDAAqD,EAAE,GAAG,EAAE;IAC/D,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,+BAA+B,CAAC,EAAE,IAAI,CAAC,CAAC;IAC5E,MAAM,CAAC,KAAK,CACV,sBAAsB,CAAC,kDAAkD,CAAC,EAC1E,IAAI,CACL,CAAC;IACF,MAAM,CAAC,KAAK,CACV,sBAAsB,CAAC,gDAAgD,CAAC,EACxE,IAAI,CACL,CAAC;IACF,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,8BAA8B,CAAC,EAAE,KAAK,CAAC,CAAC;IAC5E,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,+BAA+B,CAAC,EAAE,KAAK,CAAC,CAAC;IAC7E,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,4BAA4B,CAAC,EAAE,KAAK,CAAC,CAAC;IAC1E,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,CAAC;AAC3D,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,4CAA4C,EAAE,GAAG,EAAE;IACtD,MAAM,IAAI,GAAG,qBAAqB,CAChC;QACE,MAAM,EAAE;YACN;gBACE,KAAK,EAAE,SAAS;gBAChB,OAAO,EAAE,IAAI;gBACb,aAAa,EAAE,4BAA4B;aAC5C;YACD,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,IAAI,EAAE;YACzC;gBACE,KAAK,EAAE,SAAS;gBAChB,aAAa,EAAE,4BAA4B;aAC5C;SACF;KACF,EACD,MAAM,CACP,CAAC;IACF,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE;QACrB,EAAE,GAAG,EAAE,4BAA4B,EAAE,KAAK,EAAE,IAAI,EAAE;KACnD,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,qBAAqB,CAClC;QACE,MAAM,EAAE,WAAW;QACnB,MAAM,EAAE;YACN,MAAM,EAAE;gBACN;oBACE,OAAO,EAAE,KAAK;oBACd,IAAI,EAAE,CAAC;oBACP,aAAa,EAAE,8BAA8B;iBAC9C;gBACD;oBACE,OAAO,EAAE,KAAK;oBACd,IAAI,EAAE,CAAC;oBACP,YAAY,EAAE,8BAA8B;iBAC7C;aACF;SACF;KACF,EACD,QAAQ,CACT,CAAC;IACF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC/B,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAEtC,MAAM,GAAG,GAAG,qBAAqB,CAC/B;QACE,OAAO,EAAE,MAAM;QACf,aAAa,EAAE,+BAA+B;KAC/C,EACD,QAAQ,CACT,CAAC;IACF,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE;QACpB,EAAE,GAAG,EAAE,+BAA+B,EAAE,KAAK,EAAE,MAAM,EAAE;KACxD,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iDAAiD,EAAE,GAAG,EAAE;IAC3D,MAAM,CAAC,KAAK,CACV,kBAAkB,CAChB,CAAC,EAAE,GAAG,EAAE,4BAA4B,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EACnD,CAAC,EACD,EAAE,CACH,EACD,iCAAiC,CAClC,CAAC;IACF,MAAM,CAAC,KAAK,CACV,kBAAkB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,EAClD,iBAAiB,CAClB,CAAC;IACF,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACnE,MAAM,CAAC,KAAK,CACV,kBAAkB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,gBAAgB,EAAE,SAAS,EAAE,CAAC,EAC1D,iBAAiB,CAClB,CAAC;IACF,MAAM,CAAC,KAAK,CACV,kBAAkB,CAChB,CAAC,EAAE,GAAG,EAAE,4BAA4B,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EACnD,CAAC,EACD,EAAE,MAAM,EAAE,WAAW,EAAE,CACxB,EACD,oCAAoC,CACrC,CAAC;IACF,MAAM,CAAC,KAAK,CACV,kBAAkB,CAChB;QACE,EAAE,GAAG,EAAE,4BAA4B,EAAE,KAAK,EAAE,GAAG,EAAE;QACjD,EAAE,GAAG,EAAE,4BAA4B,EAAE,KAAK,EAAE,GAAG,EAAE;KAClD,EACD,CAAC,EACD,EAAE,MAAM,EAAE,WAAW,EAAE,CACxB,EACD,mCAAmC,CACpC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;IAC7E,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,4BAA4B,CAAC,CAAC;IACpE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAE5B,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QAC7E,EAAE,EAAE,IAAI;QACR,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE;QACnC,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;KAC3F,CAAC,CAAC,CAAC;IACJ,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACnC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC3C,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;AACpD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;IACrE,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACvC;QACE,OAAO,EAAE,IAAI;QACb,aAAa,EAAE,4BAA4B;KAC5C,EACD,QAAQ,EACR,KAAK,IAAI,EAAE,CAAC,CAAC;QACX,EAAE,EAAE,IAAI;QACR,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE;QACnC,WAAW,EAAE,KAAK,IAAI,EAAE,CACtB,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;KACpE,CAAC,CACH,CAAC;IACF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,CAAC,KAAK,CACT,MAAM,CAAC,OAAO,CAAC,CAAC,CAAsB,CAAC,IAAI,EAC5C,iCAAiC,CAClC,CAAC;IACF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvD,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,CAAC,KAAK,CAAE,IAAyB,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;AACnE,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;IACxE,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACvC;QACE,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,+BAA+B;QACvC,aAAa,EAAE,4BAA4B;KAC5C,EACD,QAAQ,EACR,KAAK,IAAI,EAAE,CAAC,CAAC;QACX,EAAE,EAAE,KAAK;QACT,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE;QAC5B,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC;KAC5C,CAAC,CACH,CAAC;IACF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,CAAC,KAAK,CACT,MAAM,CAAC,OAAO,CAAC,CAAC,CAAsB,CAAC,IAAI,EAC5C,mCAAmC,CACpC,CAAC;IACF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;AAC5E,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"email-images.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/email-images.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=segments.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"segments.test.d.ts","sourceRoot":"","sources":["../../../src/tools/__tests__/segments.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,149 @@
1
+ import assert from "node:assert/strict";
2
+ import test from "node:test";
3
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
4
+ import { Client } from "@modelcontextprotocol/sdk/client/index.js";
5
+ import { InMemoryTransport } from "@modelcontextprotocol/sdk/inMemory.js";
6
+ import { registerSegmentTools } from "../segments.js";
7
+ function createTool() {
8
+ const calls = [];
9
+ const client = {
10
+ segments: {
11
+ create: async (body) => {
12
+ calls.push(body);
13
+ return { data: { id: "segment-1" } };
14
+ },
15
+ },
16
+ };
17
+ const server = new McpServer({ name: "test", version: "1" });
18
+ registerSegmentTools(server, client, { apiKey: "test", projectId: "brand-1" });
19
+ const registered = server._registeredTools;
20
+ return { tool: registered.migma_create_segment, calls, server };
21
+ }
22
+ const fields = [{ key: "country", mode: "is", values: ["US"] }];
23
+ test("create segment preserves omitted filters and legacy/all matching", async () => {
24
+ const { tool, calls } = createTool();
25
+ for (const filters of [undefined, { fields }, { match: "all", fields }]) {
26
+ const args = tool.inputSchema.parse({ name: "Readers", filters });
27
+ await tool.handler(args, {});
28
+ assert.deepEqual(calls.at(-1), {
29
+ name: "Readers", description: undefined, filters, projectId: "brand-1",
30
+ });
31
+ }
32
+ });
33
+ test("create segment accepts any global activity and forwards complete parsed filters", async () => {
34
+ const { tool, calls } = createTool();
35
+ const filters = {
36
+ match: "any", fields, tags: ["customers"], excludeTags: ["staff"],
37
+ activity: [{ action: "opened", mode: "within", unit: "days", amount: 30 }],
38
+ };
39
+ const args = tool.inputSchema.parse({ name: "Engaged readers", filters, projectId: "brand-2" });
40
+ await tool.handler(args, {});
41
+ assert.deepEqual(calls, [{
42
+ name: "Engaged readers", description: undefined, filters, projectId: "brand-2",
43
+ }]);
44
+ });
45
+ test("create segment rejects campaign-specific any while preserving campaign all", () => {
46
+ const { tool, calls } = createTool();
47
+ const filters = {
48
+ match: "any", fields,
49
+ activity: [{ action: "clicked", mode: "never", campaignId: "campaign-1" }],
50
+ };
51
+ const result = tool.inputSchema.safeParse({ name: "Readers", filters });
52
+ assert.equal(result.success, false);
53
+ if (!result.success)
54
+ assert.deepEqual(result.error.issues[0].path, ["filters", "match"]);
55
+ assert.equal(tool.inputSchema.safeParse({ name: "Readers", filters: { ...filters, match: "all" } }).success, true);
56
+ assert.deepEqual(calls, []);
57
+ });
58
+ test("create segment forwards nested mixed groups without flattening or dropping conditions", async () => {
59
+ const { tool, calls } = createTool();
60
+ const filters = {
61
+ match: "all",
62
+ status: "subscribed",
63
+ groups: [{
64
+ match: "any",
65
+ fields,
66
+ groups: [{
67
+ tags: ["customers"], excludeTags: ["staff"], validationStatus: "valid",
68
+ customFields: { tier: ["premium"] },
69
+ groups: [{ activity: [{ action: "clicked", mode: "within", unit: "days", amount: 7 }] }],
70
+ }],
71
+ }],
72
+ };
73
+ const args = tool.inputSchema.parse({ name: "Mixed audience", filters });
74
+ await tool.handler(args, {});
75
+ assert.deepEqual(calls, [{
76
+ name: "Mixed audience", description: undefined, filters, projectId: "brand-1",
77
+ }]);
78
+ });
79
+ test("campaign activity requires all ancestors but allows an unrelated any sibling", () => {
80
+ const { tool } = createTool();
81
+ const campaign = { activity: [{ action: "clicked", mode: "never", campaignId: "campaign-1" }] };
82
+ for (const { filters, path } of [
83
+ { filters: { match: "any", groups: [campaign] }, path: ["filters", "match"] },
84
+ { filters: { groups: [{ match: "any", groups: [campaign] }] }, path: ["filters", "groups", 0, "match"] },
85
+ { filters: { groups: [{ ...campaign, match: "any" }] }, path: ["filters", "groups", 0, "match"] },
86
+ ]) {
87
+ const result = tool.inputSchema.safeParse({ name: "Readers", filters });
88
+ assert.equal(result.success, false);
89
+ if (!result.success) {
90
+ assert.deepEqual(result.error.issues[0].path, path);
91
+ }
92
+ }
93
+ assert.equal(tool.inputSchema.safeParse({
94
+ name: "Readers", filters: { groups: [campaign, { match: "any", tags: ["customers"], fields }] },
95
+ }).success, true);
96
+ });
97
+ test("root may be empty but nested groups must contain a condition", () => {
98
+ const { tool } = createTool();
99
+ for (const empty of [{}, { match: "any" }, { groups: [] }, { tags: [], excludeTags: [], customFields: { tier: [] } }]) {
100
+ assert.equal(tool.inputSchema.safeParse({ name: "Everyone", filters: empty }).success, true);
101
+ const result = tool.inputSchema.safeParse({ name: "Empty group", filters: { groups: [empty] } });
102
+ assert.equal(result.success, false);
103
+ if (!result.success)
104
+ assert.deepEqual(result.error.issues[0].path, ["filters", "groups", 0]);
105
+ }
106
+ });
107
+ test("nested group depth and child count are bounded", () => {
108
+ const { tool } = createTool();
109
+ const atDepthThree = { groups: [{ groups: [{ groups: [{ status: "subscribed" }] }] }] };
110
+ assert.equal(tool.inputSchema.safeParse({ name: "Three levels", filters: atDepthThree }).success, true);
111
+ assert.equal(tool.inputSchema.safeParse({ name: "Four levels", filters: { groups: [atDepthThree] } }).success, false);
112
+ assert.equal(tool.inputSchema.safeParse({ name: "Invalid fourth level", filters: {
113
+ groups: [{ groups: [{ groups: [{ groups: [null] }] }] }],
114
+ } }).success, false);
115
+ const groups = Array.from({ length: 10 }, () => ({ status: "subscribed" }));
116
+ assert.equal(tool.inputSchema.safeParse({ name: "Ten children", filters: { groups } }).success, true);
117
+ assert.equal(tool.inputSchema.safeParse({ name: "Eleven children", filters: { groups: [...groups, groups[0]] } }).success, false);
118
+ });
119
+ test("condition cap counts leaves across groups, not array values or group containers", () => {
120
+ const { tool } = createTool();
121
+ const groups = Array.from({ length: 5 }, () => ({ fields: Array.from({ length: 10 }, () => fields[0]) }));
122
+ assert.equal(tool.inputSchema.safeParse({ name: "Fifty conditions", filters: { groups } }).success, true);
123
+ assert.equal(tool.inputSchema.safeParse({ name: "Fifty-one conditions", filters: { status: "subscribed", groups } }).success, false);
124
+ const manyValues = Array.from({ length: 100 }, (_, index) => `list-${index}`);
125
+ assert.equal(tool.inputSchema.safeParse({ name: "One condition", filters: { groups: [{ tags: manyValues }] } }).success, true);
126
+ const fiftyCustomFields = Object.fromEntries(Array.from({ length: 50 }, (_, index) => [`key-${index}`, ["value"]]));
127
+ assert.equal(tool.inputSchema.safeParse({ name: "Fifty fields", filters: { customFields: fiftyCustomFields } }).success, true);
128
+ assert.equal(tool.inputSchema.safeParse({ name: "Fifty-one fields", filters: { customFields: fiftyCustomFields, excludeTags: ["staff"] } }).success, false);
129
+ });
130
+ test("MCP advertises bounded nested groups in the create tool JSON schema", async () => {
131
+ const { server } = createTool();
132
+ const client = new Client({ name: "test-client", version: "1" });
133
+ const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
134
+ await server.connect(serverTransport);
135
+ await client.connect(clientTransport);
136
+ try {
137
+ const { tools } = await client.listTools();
138
+ const schema = tools.find((tool) => tool.name === "migma_create_segment")?.inputSchema;
139
+ assert.ok(schema);
140
+ const serialized = JSON.stringify(schema);
141
+ assert.match(serialized, /"groups"/);
142
+ assert.match(serialized, /"maxItems":0/);
143
+ }
144
+ finally {
145
+ await client.close();
146
+ await server.close();
147
+ }
148
+ });
149
+ //# sourceMappingURL=segments.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"segments.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/segments.test.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,11 @@ export declare function decorateEmailPayload(data: unknown, options?: {
4
4
  includeHtml?: boolean;
5
5
  }): unknown;
6
6
  export declare function slimProject(data: unknown): unknown;
7
+ /**
8
+ * The brand an import produced, in the shape a user checks it in: logo, palette, fonts, tone, and
9
+ * socials. Only fields the import captured appear; undefined keys drop out of the JSON.
10
+ */
11
+ export declare function brandCard(data: unknown): Record<string, unknown> | null;
7
12
  export declare function compactProjectList(data: unknown, search?: string): unknown;
8
13
  export declare function stripExportInlineContent(data: unknown): unknown;
9
14
  //# sourceMappingURL=agent-payload.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-payload.d.ts","sourceRoot":"","sources":["../../src/tools/agent-payload.ts"],"names":[],"mappings":"AAeA,wBAAgB,kBAAkB,CAChC,cAAc,EAAE,MAAM,EACtB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GACnB,MAAM,CAGR;AAED,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,OAAO,EACZ,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,GAC/B,OAAO,GAAG,SAAS,GAAG,SAAS,CAWjC;AA8CD,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,OAAO,EACb,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,GACtC,OAAO,CA6BT;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAQlD;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,OAAO,EACb,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CA6BT;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAY/D"}
1
+ {"version":3,"file":"agent-payload.d.ts","sourceRoot":"","sources":["../../src/tools/agent-payload.ts"],"names":[],"mappings":"AAeA,wBAAgB,kBAAkB,CAChC,cAAc,EAAE,MAAM,EACtB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GACnB,MAAM,CAGR;AAED,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,OAAO,EACZ,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,GAC/B,OAAO,GAAG,SAAS,GAAG,SAAS,CAWjC;AA8CD,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,OAAO,EACb,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,GACtC,OAAO,CA6BT;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAQlD;AASD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CA0CvE;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,OAAO,EACb,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CA6BT;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAY/D"}
@@ -97,6 +97,56 @@ export function slimProject(data) {
97
97
  }
98
98
  return slim;
99
99
  }
100
+ const HEX_RE = /^#[0-9a-f]{3,8}$/i;
101
+ const TEXT_MAX = 400;
102
+ function text(value) {
103
+ return typeof value === "string" && value.trim() ? value.trim().slice(0, TEXT_MAX) : undefined;
104
+ }
105
+ /**
106
+ * The brand an import produced, in the shape a user checks it in: logo, palette, fonts, tone, and
107
+ * socials. Only fields the import captured appear; undefined keys drop out of the JSON.
108
+ */
109
+ export function brandCard(data) {
110
+ const project = asRecord(data);
111
+ if (!project)
112
+ return null;
113
+ const logos = asRecord(project.logoUrls);
114
+ const colors = asRecord(project.colors);
115
+ const headings = asRecord(asRecord(colors?.designSystem)?.headings);
116
+ const fonts = Array.isArray(project.fonts) ? project.fonts.map(asRecord) : [];
117
+ const fontFor = (usage) => text(fonts.find((font) => Array.isArray(font?.usage) && font.usage.includes(usage))?.family);
118
+ const palette = new Map();
119
+ const logoPalette = asRecord(asRecord(logos?.meta)?.primary)?.palette;
120
+ for (const [role, value] of [
121
+ ["page background", asRecord(colors?.background)?.page],
122
+ ["card background", asRecord(colors?.background)?.container],
123
+ ["text", colors?.text],
124
+ ["accent", colors?.accent],
125
+ ...(Array.isArray(logoPalette) ? logoPalette.slice(0, 3).map((hex) => ["logo", hex]) : []),
126
+ ]) {
127
+ const hex = text(value);
128
+ if (hex && HEX_RE.test(hex) && !palette.has(hex.toLowerCase()))
129
+ palette.set(hex.toLowerCase(), `${role} ${hex}`);
130
+ }
131
+ const socials = (Array.isArray(project.socials) ? project.socials : [])
132
+ .map((row) => text(asRecord(row)?.url))
133
+ .filter(Boolean);
134
+ const card = {
135
+ id: project._id ?? project.id,
136
+ name: project.name,
137
+ domain: text(project.domain),
138
+ description: text(project.description),
139
+ logo: text(logos?.primary),
140
+ favicon: text(logos?.favicon),
141
+ palette: palette.size ? [...palette.values()] : undefined,
142
+ headingFont: text(asRecord(headings?.h1)?.fontFamily) ?? fontFor("heading") ?? fontFor("headings"),
143
+ bodyFont: text(asRecord(headings?.paragraph)?.fontFamily) ?? fontFor("body"),
144
+ tone: text(asRecord(project.style)?.tone) === "auto" ? undefined : text(asRecord(project.style)?.tone),
145
+ voice: text(project.styleGuidelines),
146
+ socials: socials.length ? socials : undefined,
147
+ };
148
+ return cloneJson(card);
149
+ }
100
150
  export function compactProjectList(data, search) {
101
151
  const root = asRecord(data);
102
152
  if (!root || !Array.isArray(root.projects))
@@ -1 +1 @@
1
- {"version":3,"file":"agent-payload.js","sourceRoot":"","sources":["../../src/tools/agent-payload.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-payload.js","sourceRoot":"","sources":["../../src/tools/agent-payload.ts"],"names":[],"mappings":"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"}
@@ -26,7 +26,7 @@ export function registerBillingTools(server, client, grantedPermissions) {
26
26
  server.registerTool("migma_get_upgrade_link", {
27
27
  title: "Get Upgrade Link",
28
28
  annotations: OPEN_WORLD_MUTATING_TOOL,
29
- description: "Mint a Stripe link the user opens in their browser to upgrade or manage their Migma subscription. Nothing is charged by this call. Pass plan for a checkout link (new subscribers); omit plan to get the billing portal (existing subscribers). Use when the user is out of credits or needs a paid plan (e.g. to buy a domain). Always show the returned URL to the user — never try to pay yourself.",
29
+ description: "Mint a Stripe link the user opens in their browser to upgrade or manage their Migma subscription. Nothing is charged by this call. Pass plan for a checkout link (new subscribers); omit plan to get the billing portal (existing subscribers). Use when the user is out of credits or needs a paid plan (e.g. to buy a domain). The user completes checkout in their own browser.",
30
30
  inputSchema: z.object({
31
31
  plan: z
32
32
  .enum(UPGRADE_PLANS)
@@ -1 +1 @@
1
- {"version":3,"file":"billing.js","sourceRoot":"","sources":["../../src/tools/billing.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAE5E,MAAM,aAAa,GAAG;IACpB,OAAO;IACP,SAAS;IACT,UAAU;IACV,cAAc;IACd,gBAAgB;IAChB,iBAAiB;CACT,CAAC;AAEX,MAAM,UAAU,oBAAoB,CAClC,MAAiB,EACjB,MAAa,EACb,kBAA6B;IAE7B,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;QACjD,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;YACE,KAAK,EAAE,oBAAoB;YAC3B,WAAW,EAAE,cAAc;YAC3B,WAAW,EACT,4LAA4L;SAC/L,EACD,KAAK,IAAI,EAAE;YACT,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACvD,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,eAAe,CAAC,CAAC,EAAE,CAAC;QAClD,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;YACE,KAAK,EAAE,kBAAkB;YACzB,WAAW,EAAE,wBAAwB;YACrC,WAAW,EACT,wYAAwY;YAC1Y,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;gBACpB,IAAI,EAAE,CAAC;qBACJ,IAAI,CAAC,aAAa,CAAC;qBACnB,QAAQ,EAAE;qBACV,QAAQ,CACP,0HAA0H,CAC3H;aACJ,CAAC;SACH,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;YACb,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9E,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,IAAa;IAC/B,OAAO;QACL,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;SAC/D;KACF,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"}
1
+ {"version":3,"file":"billing.js","sourceRoot":"","sources":["../../src/tools/billing.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAE5E,MAAM,aAAa,GAAG;IACpB,OAAO;IACP,SAAS;IACT,UAAU;IACV,cAAc;IACd,gBAAgB;IAChB,iBAAiB;CACT,CAAC;AAEX,MAAM,UAAU,oBAAoB,CAClC,MAAiB,EACjB,MAAa,EACb,kBAA6B;IAE7B,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;QACjD,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;YACE,KAAK,EAAE,oBAAoB;YAC3B,WAAW,EAAE,cAAc;YAC3B,WAAW,EACT,4LAA4L;SAC/L,EACD,KAAK,IAAI,EAAE;YACT,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACvD,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,eAAe,CAAC,CAAC,EAAE,CAAC;QAClD,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;YACE,KAAK,EAAE,kBAAkB;YACzB,WAAW,EAAE,wBAAwB;YACrC,WAAW,EACT,oXAAoX;YACtX,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;gBACpB,IAAI,EAAE,CAAC;qBACJ,IAAI,CAAC,aAAa,CAAC;qBACnB,QAAQ,EAAE;qBACV,QAAQ,CACP,0HAA0H,CAC3H;aACJ,CAAC;SACH,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;YACb,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9E,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,IAAa;IAC/B,OAAO;QACL,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;SAC/D;KACF,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"}
@@ -1 +1 @@
1
- {"version":3,"file":"brand.d.ts","sourceRoot":"","sources":["../../src/tools/brand.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AA6D3C,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,KAAK,EACb,MAAM,EAAE,MAAM,EACd,kBAAkB,CAAC,EAAE,MAAM,EAAE,QA+H9B"}
1
+ {"version":3,"file":"brand.d.ts","sourceRoot":"","sources":["../../src/tools/brand.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AA6D3C,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,KAAK,EACb,MAAM,EAAE,MAAM,EACd,kBAAkB,CAAC,EAAE,MAAM,EAAE,QAoI9B"}