@migma/mcp 1.1.2 → 1.3.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 (71) hide show
  1. package/build/client.d.ts.map +1 -1
  2. package/build/client.js +3 -1
  3. package/build/client.js.map +1 -1
  4. package/build/config.d.ts.map +1 -1
  5. package/build/config.js +22 -4
  6. package/build/config.js.map +1 -1
  7. package/build/index.d.ts +1 -0
  8. package/build/index.d.ts.map +1 -1
  9. package/build/index.js +14 -11
  10. package/build/index.js.map +1 -1
  11. package/build/permissions.d.ts +2 -0
  12. package/build/permissions.d.ts.map +1 -0
  13. package/build/permissions.js +17 -0
  14. package/build/permissions.js.map +1 -0
  15. package/build/prompts/index.d.ts.map +1 -1
  16. package/build/prompts/index.js +4 -3
  17. package/build/prompts/index.js.map +1 -1
  18. package/build/tools/__tests__/catalog.test.js +20 -9
  19. package/build/tools/__tests__/catalog.test.js.map +1 -1
  20. package/build/tools/campaigns.d.ts +1 -1
  21. package/build/tools/campaigns.d.ts.map +1 -1
  22. package/build/tools/campaigns.js +244 -222
  23. package/build/tools/campaigns.js.map +1 -1
  24. package/build/tools/capabilities.d.ts.map +1 -1
  25. package/build/tools/capabilities.js +14 -5
  26. package/build/tools/capabilities.js.map +1 -1
  27. package/build/tools/contacts.d.ts +1 -1
  28. package/build/tools/contacts.d.ts.map +1 -1
  29. package/build/tools/contacts.js +356 -156
  30. package/build/tools/contacts.js.map +1 -1
  31. package/build/tools/domains.d.ts +1 -1
  32. package/build/tools/domains.d.ts.map +1 -1
  33. package/build/tools/domains.js +98 -96
  34. package/build/tools/domains.js.map +1 -1
  35. package/build/tools/export.d.ts +1 -1
  36. package/build/tools/export.d.ts.map +1 -1
  37. package/build/tools/export.js +97 -78
  38. package/build/tools/export.js.map +1 -1
  39. package/build/tools/generate.d.ts +1 -1
  40. package/build/tools/generate.d.ts.map +1 -1
  41. package/build/tools/generate.js +217 -109
  42. package/build/tools/generate.js.map +1 -1
  43. package/build/tools/metrics.d.ts +4 -0
  44. package/build/tools/metrics.d.ts.map +1 -0
  45. package/build/tools/metrics.js +39 -0
  46. package/build/tools/metrics.js.map +1 -0
  47. package/build/tools/projects.d.ts +1 -1
  48. package/build/tools/projects.d.ts.map +1 -1
  49. package/build/tools/projects.js +95 -77
  50. package/build/tools/projects.js.map +1 -1
  51. package/build/tools/segments.d.ts +1 -1
  52. package/build/tools/segments.d.ts.map +1 -1
  53. package/build/tools/segments.js +91 -67
  54. package/build/tools/segments.js.map +1 -1
  55. package/build/tools/send.d.ts +1 -1
  56. package/build/tools/send.d.ts.map +1 -1
  57. package/build/tools/send.js +72 -69
  58. package/build/tools/send.js.map +1 -1
  59. package/build/tools/tags.d.ts +1 -1
  60. package/build/tools/tags.d.ts.map +1 -1
  61. package/build/tools/tags.js +77 -69
  62. package/build/tools/tags.js.map +1 -1
  63. package/build/tools/validate.d.ts +1 -1
  64. package/build/tools/validate.d.ts.map +1 -1
  65. package/build/tools/validate.js +54 -44
  66. package/build/tools/validate.js.map +1 -1
  67. package/build/tools/webhooks.d.ts +1 -1
  68. package/build/tools/webhooks.d.ts.map +1 -1
  69. package/build/tools/webhooks.js +67 -57
  70. package/build/tools/webhooks.js.map +1 -1
  71. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAI1C,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAY/C"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAI1C,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAc/C"}
package/build/client.js CHANGED
@@ -3,7 +3,9 @@ let instance = null;
3
3
  export function getClient(config) {
4
4
  if (!instance) {
5
5
  if (!config.apiKey) {
6
- throw new Error("MIGMA_API_KEY is required. Get your API key from https://migma.ai/settings?tab=api-keys");
6
+ throw new Error("Local MCP needs a key. Connect https://migma.ai/mcp for browser OAuth, " +
7
+ "run migma login, or fetch https://api.migma.ai/auth.md. " +
8
+ "CI/servers can set MIGMA_API_KEY.");
7
9
  }
8
10
  instance = new Migma(config.apiKey, {
9
11
  baseUrl: config.baseUrl,
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAG9B,IAAI,QAAQ,GAAiB,IAAI,CAAC;AAElC,MAAM,UAAU,SAAS,CAAC,MAAc;IACtC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CACb,yFAAyF,CAC1F,CAAC;QACJ,CAAC;QACD,QAAQ,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE;YAClC,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAG9B,IAAI,QAAQ,GAAiB,IAAI,CAAC;AAElC,MAAM,UAAU,SAAS,CAAC,MAAc;IACtC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CACb,yEAAyE;gBACvE,0DAA0D;gBAC1D,mCAAmC,CACtC,CAAC;QACJ,CAAC;QACD,QAAQ,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE;YAClC,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,YAAY;;;;;;;;;;;;EAIvB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD,wBAAgB,UAAU,IAAI,MAAM,CAcnC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,YAAY;;;;;;;;;;;;EAIvB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAkBlD,wBAAgB,UAAU,IAAI,MAAM,CAenC"}
package/build/config.js CHANGED
@@ -1,14 +1,32 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import { join } from "node:path";
1
4
  import { z } from "zod";
2
5
  export const configSchema = z.object({
3
- apiKey: z.string().describe("Migma API key (sk_live_...)"),
6
+ apiKey: z.string().describe("Scoped Migma API key for Local MCP (sk_live_...)"),
4
7
  projectId: z.string().optional().describe("Default project ID"),
5
8
  baseUrl: z.string().url().optional().describe("Custom API base URL"),
6
9
  });
10
+ const CLI_CONFIG_FILE = join(homedir(), ".migma", "config.json");
11
+ function readCliConfigApiKey() {
12
+ if (!existsSync(CLI_CONFIG_FILE))
13
+ return undefined;
14
+ try {
15
+ const parsed = JSON.parse(readFileSync(CLI_CONFIG_FILE, "utf-8"));
16
+ return typeof parsed.apiKey === "string" && parsed.apiKey.trim()
17
+ ? parsed.apiKey.trim()
18
+ : undefined;
19
+ }
20
+ catch {
21
+ return undefined;
22
+ }
23
+ }
7
24
  export function loadConfig() {
8
- const apiKey = process.env.MIGMA_API_KEY;
25
+ const apiKey = process.env.MIGMA_API_KEY || readCliConfigApiKey();
9
26
  if (!apiKey) {
10
- console.error("Warning: MIGMA_API_KEY not set. Tools will fail until configured. " +
11
- "Get your API key from https://migma.ai/settings?tab=api-keys");
27
+ console.error("Warning: Local MCP needs a key. Connect https://migma.ai/mcp for browser OAuth, " +
28
+ "run migma login, or fetch https://api.migma.ai/auth.md. " +
29
+ "CI/servers can set MIGMA_API_KEY.");
12
30
  }
13
31
  return configSchema.parse({
14
32
  apiKey: apiKey || "",
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAC1D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IAC/D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;CACrE,CAAC,CAAC;AAIH,MAAM,UAAU,UAAU;IACxB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IACzC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CACX,oEAAoE;YAClE,8DAA8D,CACjE,CAAC;IACJ,CAAC;IAED,OAAO,YAAY,CAAC,KAAK,CAAC;QACxB,MAAM,EAAE,MAAM,IAAI,EAAE;QACpB,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,SAAS;QACpD,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,SAAS;KACjD,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;IAC/E,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IAC/D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;CACrE,CAAC,CAAC;AAIH,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;AAEjE,SAAS,mBAAmB;IAC1B,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC;QAAE,OAAO,SAAS,CAAC;IACnD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAE/D,CAAC;QACF,OAAO,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;YAC9D,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;YACtB,CAAC,CAAC,SAAS,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,mBAAmB,EAAE,CAAC;IAClE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CACX,kFAAkF;YAChF,0DAA0D;YAC1D,mCAAmC,CACtC,CAAC;IACJ,CAAC;IAED,OAAO,YAAY,CAAC,KAAK,CAAC;QACxB,MAAM,EAAE,MAAM,IAAI,EAAE;QACpB,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,SAAS;QACpD,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,SAAS;KACjD,CAAC,CAAC;AACL,CAAC"}
package/build/index.d.ts CHANGED
@@ -6,6 +6,7 @@ export type CreateMigmaMcpServerOptions = {
6
6
  config?: Partial<Config>;
7
7
  client?: Migma;
8
8
  getClient?: () => Migma;
9
+ permissions?: string[];
9
10
  version?: string;
10
11
  };
11
12
  export declare function createMigmaMcpServer(options?: CreateMigmaMcpServerOptions): McpServer;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAenC,MAAM,MAAM,2BAA2B,GAAG;IACxC,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACzB,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,KAAK,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAqBF,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,2BAAgC,GAAG,SAAS,CAyBzF;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAEzD;AAGD,wBAAgB,mBAAmB,cAOlC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAgBnC,MAAM,MAAM,2BAA2B,GAAG;IACxC,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACzB,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,KAAK,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAqBF,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,2BAAgC,GAAG,SAAS,CA2BzF;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAEzD;AAGD,wBAAgB,mBAAmB,cAOlC"}
package/build/index.js CHANGED
@@ -16,6 +16,7 @@ import { registerTagTools } from "./tools/tags.js";
16
16
  import { registerSegmentTools } from "./tools/segments.js";
17
17
  import { registerWebhookTools } from "./tools/webhooks.js";
18
18
  import { registerCampaignTools } from "./tools/campaigns.js";
19
+ import { registerMetricsTools } from "./tools/metrics.js";
19
20
  import { registerCapabilitiesTool } from "./tools/capabilities.js";
20
21
  import { registerMigmaPrompts } from "./prompts/index.js";
21
22
  function completeConfig(config) {
@@ -37,22 +38,24 @@ function createLazyClient(config, clientFactory) {
37
38
  export function createMigmaMcpServer(options = {}) {
38
39
  const config = completeConfig(options.config);
39
40
  const lazyClient = options.client || createLazyClient(config, options.getClient);
41
+ const { permissions } = options;
40
42
  const { version } = createRequire(import.meta.url)("../package.json");
41
43
  const server = new McpServer({
42
44
  name: "migma",
43
45
  version: options.version || version,
44
46
  });
45
- registerProjectTools(server, lazyClient, config);
46
- registerGenerateTools(server, lazyClient, config);
47
- registerSendTools(server, lazyClient, config);
48
- registerValidateTools(server, lazyClient);
49
- registerExportTools(server, lazyClient);
50
- registerDomainTools(server, lazyClient);
51
- registerContactTools(server, lazyClient, config);
52
- registerTagTools(server, lazyClient, config);
53
- registerSegmentTools(server, lazyClient, config);
54
- registerWebhookTools(server, lazyClient);
55
- registerCampaignTools(server, lazyClient, config);
47
+ registerProjectTools(server, lazyClient, config, permissions);
48
+ registerGenerateTools(server, lazyClient, config, permissions);
49
+ registerSendTools(server, lazyClient, config, permissions);
50
+ registerValidateTools(server, lazyClient, permissions);
51
+ registerExportTools(server, lazyClient, permissions);
52
+ registerDomainTools(server, lazyClient, permissions);
53
+ registerContactTools(server, lazyClient, config, permissions);
54
+ registerTagTools(server, lazyClient, config, permissions);
55
+ registerSegmentTools(server, lazyClient, config, permissions);
56
+ registerWebhookTools(server, lazyClient, permissions);
57
+ registerCampaignTools(server, lazyClient, config, permissions);
58
+ registerMetricsTools(server, lazyClient, permissions);
56
59
  registerMigmaPrompts(server);
57
60
  // Register last so the catalog reflects every tool above it.
58
61
  registerCapabilitiesTool(server);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function canUse(granted: string[] | undefined, required: string[]): boolean;
2
+ //# sourceMappingURL=permissions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../src/permissions.ts"],"names":[],"mappings":"AASA,wBAAgB,MAAM,CACpB,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS,EAC7B,QAAQ,EAAE,MAAM,EAAE,GACjB,OAAO,CAMT"}
@@ -0,0 +1,17 @@
1
+ const READ_PERMISSIONS = new Set([
2
+ "email:read",
3
+ "campaign:read",
4
+ "audience:read",
5
+ "domain:read",
6
+ "webhook:read",
7
+ "email:validate",
8
+ ]);
9
+ export function canUse(granted, required) {
10
+ if (granted === undefined)
11
+ return true;
12
+ if (required.length > 0 && required.every((permission) => READ_PERMISSIONS.has(permission))) {
13
+ return true;
14
+ }
15
+ return required.every((permission) => granted.includes(permission));
16
+ }
17
+ //# sourceMappingURL=permissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../src/permissions.ts"],"names":[],"mappings":"AAAA,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;IAC/B,YAAY;IACZ,eAAe;IACf,eAAe;IACf,aAAa;IACb,cAAc;IACd,gBAAgB;CACjB,CAAC,CAAC;AAEH,MAAM,UAAU,MAAM,CACpB,OAA6B,EAC7B,QAAkB;IAElB,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QAC5F,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;AACtE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;;GAIG;AACH,eAAO,MAAM,SAAS,EAAE,QAAQ,EAuC/B,CAAC;AAmBF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,QAcrD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;;GAIG;AACH,eAAO,MAAM,SAAS,EAAE,QAAQ,EAwC/B,CAAC;AAmBF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,QAcrD"}
@@ -9,7 +9,8 @@ export const WORKFLOWS = [
9
9
  summary: "Generate an email, test it, and send it as a campaign to a tag or segment, then read the results.",
10
10
  steps: [
11
11
  "migma_get_capabilities — see available tools and the idempotency contract.",
12
- "migma_generate_email — generate the email (or series) from a prompt.",
12
+ "migma_generate_email — start generation; keep conversationId.",
13
+ "migma_get_generation_status — poll until completed. Or migma_list_emails to see designs already in the project.",
13
14
  "migma_send_test_email — send a test to yourself and review it.",
14
15
  "migma_list_domains + migma_list_segments / migma_list_tags — pick the sender and audience.",
15
16
  "migma_create_campaign — create a draft campaign from the generated email.",
@@ -23,7 +24,7 @@ export const WORKFLOWS = [
23
24
  steps: [
24
25
  "migma_get_field_catalog — discover which subscriber fields exist and how often they're populated.",
25
26
  "migma_create_segment — create a segment using those fields as filters.",
26
- "migma_generate_email — generate the email for that audience.",
27
+ "migma_generate_email — start generation; poll migma_get_generation_status.",
27
28
  "migma_create_campaign — create a campaign targeting the new segment.",
28
29
  "migma_send_campaign — send the campaign (use an idempotency_key for safe retries).",
29
30
  "migma_get_campaign_stats — read the campaign results.",
@@ -35,7 +36,7 @@ export const WORKFLOWS = [
35
36
  steps: [
36
37
  "migma_import_brand — import the brand from one or more website URLs.",
37
38
  "migma_get_project — confirm the extracted colors, fonts, logos, and tone.",
38
- "migma_generate_email — generate an on-brand email for the project.",
39
+ "migma_generate_email — start generation; poll migma_get_generation_status.",
39
40
  "migma_send_test_email — send a test and review the result.",
40
41
  ],
41
42
  },
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAe;IACnC;QACE,IAAI,EAAE,uBAAuB;QAC7B,OAAO,EACL,mGAAmG;QACrG,KAAK,EAAE;YACL,4EAA4E;YAC5E,sEAAsE;YACtE,gEAAgE;YAChE,4FAA4F;YAC5F,2EAA2E;YAC3E,0GAA0G;YAC1G,kEAAkE;SACnE;KACF;IACD;QACE,IAAI,EAAE,wBAAwB;QAC9B,OAAO,EACL,+FAA+F;QACjG,KAAK,EAAE;YACL,mGAAmG;YACnG,wEAAwE;YACxE,8DAA8D;YAC9D,sEAAsE;YACtE,oFAAoF;YACpF,uDAAuD;SACxD;KACF;IACD;QACE,IAAI,EAAE,2BAA2B;QACjC,OAAO,EACL,4EAA4E;QAC9E,KAAK,EAAE;YACL,sEAAsE;YACtE,2EAA2E;YAC3E,oEAAoE;YACpE,4DAA4D;SAC7D;KACF;CACF,CAAC;AAEF,SAAS,eAAe,CAAC,QAAkB;IACzC,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK;SAC7B,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;SACrC,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO;QACL,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,MAAe;gBACrB,OAAO,EAAE;oBACP,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,+BAA+B,QAAQ,CAAC,IAAI,eAAe,QAAQ,CAAC,OAAO,mCAAmC,SAAS,uIAAuI;iBACrQ;aACF;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,CAAC,cAAc,CACnB,QAAQ,CAAC,IAAI,EACb;YACE,KAAK,EAAE,QAAQ,CAAC,IAAI;iBACjB,KAAK,CAAC,GAAG,CAAC;iBACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;iBAClD,IAAI,CAAC,GAAG,CAAC;YACZ,WAAW,EAAE,QAAQ,CAAC,OAAO;SAC9B,EACD,GAAG,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAChC,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAe;IACnC;QACE,IAAI,EAAE,uBAAuB;QAC7B,OAAO,EACL,mGAAmG;QACrG,KAAK,EAAE;YACL,4EAA4E;YAC5E,+DAA+D;YAC/D,iHAAiH;YACjH,gEAAgE;YAChE,4FAA4F;YAC5F,2EAA2E;YAC3E,0GAA0G;YAC1G,kEAAkE;SACnE;KACF;IACD;QACE,IAAI,EAAE,wBAAwB;QAC9B,OAAO,EACL,+FAA+F;QACjG,KAAK,EAAE;YACL,mGAAmG;YACnG,wEAAwE;YACxE,4EAA4E;YAC5E,sEAAsE;YACtE,oFAAoF;YACpF,uDAAuD;SACxD;KACF;IACD;QACE,IAAI,EAAE,2BAA2B;QACjC,OAAO,EACL,4EAA4E;QAC9E,KAAK,EAAE;YACL,sEAAsE;YACtE,2EAA2E;YAC3E,4EAA4E;YAC5E,4DAA4D;SAC7D;KACF;CACF,CAAC;AAEF,SAAS,eAAe,CAAC,QAAkB;IACzC,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK;SAC7B,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;SACrC,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO;QACL,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,MAAe;gBACrB,OAAO,EAAE;oBACP,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,+BAA+B,QAAQ,CAAC,IAAI,eAAe,QAAQ,CAAC,OAAO,mCAAmC,SAAS,uIAAuI;iBACrQ;aACF;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,CAAC,cAAc,CACnB,QAAQ,CAAC,IAAI,EACb;YACE,KAAK,EAAE,QAAQ,CAAC,IAAI;iBACjB,KAAK,CAAC,GAAG,CAAC;iBACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;iBAClD,IAAI,CAAC,GAAG,CAAC;YACZ,WAAW,EAAE,QAAQ,CAAC,OAAO;SAC9B,EACD,GAAG,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAChC,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -2,19 +2,17 @@ import assert from "node:assert/strict";
2
2
  import test from "node:test";
3
3
  import { createMigmaMcpServer } from "../../index.js";
4
4
  import { TOOL_CATALOG } from "../capabilities.js";
5
- /**
6
- * Guards against catalog drift: every tool the server actually registers must
7
- * have a TOOL_CATALOG entry, and the catalog must not list tools that don't
8
- * exist. The server exposes registrations on the private `_registeredTools`
9
- * map, which we read here purely for the test.
10
- */
11
- function registeredToolNames() {
5
+ function registeredTools(permissions) {
12
6
  const server = createMigmaMcpServer({
13
7
  config: { apiKey: "sk_live_test" },
8
+ permissions,
14
9
  });
15
- const registered = server._registeredTools;
16
- return Object.keys(registered);
10
+ return server._registeredTools;
17
11
  }
12
+ function registeredToolNames(permissions) {
13
+ return Object.keys(registeredTools(permissions));
14
+ }
15
+ const READ_TOOL_NAMES = TOOL_CATALOG.filter((entry) => !entry.write).map((entry) => entry.name);
18
16
  test("TOOL_CATALOG matches the registered tool set exactly", () => {
19
17
  const registered = new Set(registeredToolNames());
20
18
  const catalog = new Set(TOOL_CATALOG.map((entry) => entry.name));
@@ -24,4 +22,17 @@ test("TOOL_CATALOG matches the registered tool set exactly", () => {
24
22
  assert.deepEqual(extraInCatalog, [], `TOOL_CATALOG entries that aren't registered: ${extraInCatalog.join(", ")}`);
25
23
  assert.equal(catalog.size, TOOL_CATALOG.length, "TOOL_CATALOG has duplicate names");
26
24
  });
25
+ test("read tools register even when only email:read is granted", () => {
26
+ const emailReadTools = registeredToolNames(["email:read"]).sort();
27
+ assert.deepEqual(emailReadTools, [...READ_TOOL_NAMES].sort());
28
+ assert.equal(emailReadTools.includes("migma_send_email"), false);
29
+ assert.equal(emailReadTools.includes("migma_create_webhook"), false);
30
+ assert.equal(registeredToolNames().length, TOOL_CATALOG.length);
31
+ });
32
+ test("read tools advertise readOnlyHint", () => {
33
+ const registered = registeredTools(["email:read"]);
34
+ for (const name of READ_TOOL_NAMES) {
35
+ assert.equal(registered[name]?.annotations?.readOnlyHint, true, `${name} should set readOnlyHint`);
36
+ }
37
+ });
27
38
  //# sourceMappingURL=catalog.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/catalog.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;;;;GAKG;AACH,SAAS,mBAAmB;IAC1B,MAAM,MAAM,GAAG,oBAAoB,CAAC;QAClC,MAAM,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE;KACnC,CAAC,CAAC;IACH,MAAM,UAAU,GACd,MACD,CAAC,gBAAgB,CAAC;IACnB,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACjC,CAAC;AAED,IAAI,CAAC,sDAAsD,EAAE,GAAG,EAAE;IAChE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAEjE,MAAM,kBAAkB,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAChF,MAAM,cAAc,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAE5E,MAAM,CAAC,SAAS,CACd,kBAAkB,EAClB,EAAE,EACF,+CAA+C,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC/E,CAAC;IACF,MAAM,CAAC,SAAS,CACd,cAAc,EACd,EAAE,EACF,gDAAgD,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC5E,CAAC;IACF,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,MAAM,EAAE,kCAAkC,CAAC,CAAC;AACtF,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"catalog.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/catalog.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
2
  import type { Migma } from "migma";
3
3
  import type { Config } from "../config.js";
4
- export declare function registerCampaignTools(server: McpServer, client: Migma, config: Config): void;
4
+ export declare function registerCampaignTools(server: McpServer, client: Migma, config: Config, grantedPermissions?: string[]): void;
5
5
  //# sourceMappingURL=campaigns.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"campaigns.d.ts","sourceRoot":"","sources":["../../src/tools/campaigns.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;AAO3C,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,KAAK,EACb,MAAM,EAAE,MAAM,QAmSf"}
1
+ {"version":3,"file":"campaigns.d.ts","sourceRoot":"","sources":["../../src/tools/campaigns.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;AAQ3C,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,KAAK,EACb,MAAM,EAAE,MAAM,EACd,kBAAkB,CAAC,EAAE,MAAM,EAAE,QAwT9B"}