@migma/mcp 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/build/client.d.ts +4 -0
  2. package/build/client.d.ts.map +1 -0
  3. package/build/client.js +11 -0
  4. package/build/client.js.map +1 -0
  5. package/build/config.d.ts +17 -0
  6. package/build/config.d.ts.map +1 -0
  7. package/build/config.js +20 -0
  8. package/build/config.js.map +1 -0
  9. package/build/index.d.ts +3 -0
  10. package/build/index.d.ts.map +1 -0
  11. package/build/index.js +41 -0
  12. package/build/index.js.map +1 -0
  13. package/build/tools/contacts.d.ts +5 -0
  14. package/build/tools/contacts.d.ts.map +1 -0
  15. package/build/tools/contacts.js +134 -0
  16. package/build/tools/contacts.js.map +1 -0
  17. package/build/tools/domains.d.ts +4 -0
  18. package/build/tools/domains.d.ts.map +1 -0
  19. package/build/tools/domains.js +54 -0
  20. package/build/tools/domains.js.map +1 -0
  21. package/build/tools/export.d.ts +4 -0
  22. package/build/tools/export.d.ts.map +1 -0
  23. package/build/tools/export.js +95 -0
  24. package/build/tools/export.js.map +1 -0
  25. package/build/tools/generate.d.ts +5 -0
  26. package/build/tools/generate.d.ts.map +1 -0
  27. package/build/tools/generate.js +74 -0
  28. package/build/tools/generate.js.map +1 -0
  29. package/build/tools/projects.d.ts +5 -0
  30. package/build/tools/projects.d.ts.map +1 -0
  31. package/build/tools/projects.js +74 -0
  32. package/build/tools/projects.js.map +1 -0
  33. package/build/tools/segments.d.ts +5 -0
  34. package/build/tools/segments.d.ts.map +1 -0
  35. package/build/tools/segments.js +81 -0
  36. package/build/tools/segments.js.map +1 -0
  37. package/build/tools/send.d.ts +5 -0
  38. package/build/tools/send.d.ts.map +1 -0
  39. package/build/tools/send.js +67 -0
  40. package/build/tools/send.js.map +1 -0
  41. package/build/tools/tags.d.ts +5 -0
  42. package/build/tools/tags.d.ts.map +1 -0
  43. package/build/tools/tags.js +86 -0
  44. package/build/tools/tags.js.map +1 -0
  45. package/build/tools/validate.d.ts +4 -0
  46. package/build/tools/validate.d.ts.map +1 -0
  47. package/build/tools/validate.js +63 -0
  48. package/build/tools/validate.js.map +1 -0
  49. package/build/tools/webhooks.d.ts +4 -0
  50. package/build/tools/webhooks.d.ts.map +1 -0
  51. package/build/tools/webhooks.js +74 -0
  52. package/build/tools/webhooks.js.map +1 -0
  53. package/package.json +40 -0
@@ -0,0 +1,4 @@
1
+ import { Migma } from "migma";
2
+ import type { Config } from "./config.js";
3
+ export declare function getClient(config: Config): Migma;
4
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +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,CAO/C"}
@@ -0,0 +1,11 @@
1
+ import { Migma } from "migma";
2
+ let instance = null;
3
+ export function getClient(config) {
4
+ if (!instance) {
5
+ instance = new Migma(config.apiKey, {
6
+ baseUrl: config.baseUrl,
7
+ });
8
+ }
9
+ return instance;
10
+ }
11
+ //# sourceMappingURL=client.js.map
@@ -0,0 +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,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"}
@@ -0,0 +1,17 @@
1
+ import { z } from "zod";
2
+ export declare const configSchema: z.ZodObject<{
3
+ apiKey: z.ZodString;
4
+ projectId: z.ZodOptional<z.ZodString>;
5
+ baseUrl: z.ZodOptional<z.ZodString>;
6
+ }, "strip", z.ZodTypeAny, {
7
+ apiKey: string;
8
+ projectId?: string | undefined;
9
+ baseUrl?: string | undefined;
10
+ }, {
11
+ apiKey: string;
12
+ projectId?: string | undefined;
13
+ baseUrl?: string | undefined;
14
+ }>;
15
+ export type Config = z.infer<typeof configSchema>;
16
+ export declare function loadConfig(): Config;
17
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +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,CAenC"}
@@ -0,0 +1,20 @@
1
+ import { z } from "zod";
2
+ export const configSchema = z.object({
3
+ apiKey: z.string().describe("Migma API key (sk_live_...)"),
4
+ projectId: z.string().optional().describe("Default project ID"),
5
+ baseUrl: z.string().url().optional().describe("Custom API base URL"),
6
+ });
7
+ export function loadConfig() {
8
+ const apiKey = process.env.MIGMA_API_KEY;
9
+ if (!apiKey) {
10
+ console.error("MIGMA_API_KEY environment variable is required. " +
11
+ "Get your API key from https://migma.ai/settings?tab=api-keys");
12
+ process.exit(1);
13
+ }
14
+ return configSchema.parse({
15
+ apiKey,
16
+ projectId: process.env.MIGMA_PROJECT_ID || undefined,
17
+ baseUrl: process.env.MIGMA_BASE_URL || undefined,
18
+ });
19
+ }
20
+ //# sourceMappingURL=config.js.map
@@ -0,0 +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,kDAAkD;YAChD,8DAA8D,CACjE,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,YAAY,CAAC,KAAK,CAAC;QACxB,MAAM;QACN,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,SAAS;QACpD,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,SAAS;KACjD,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/build/index.js ADDED
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env node
2
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
+ import { loadConfig } from "./config.js";
5
+ import { getClient } from "./client.js";
6
+ import { registerProjectTools } from "./tools/projects.js";
7
+ import { registerGenerateTools } from "./tools/generate.js";
8
+ import { registerSendTools } from "./tools/send.js";
9
+ import { registerValidateTools } from "./tools/validate.js";
10
+ import { registerExportTools } from "./tools/export.js";
11
+ import { registerDomainTools } from "./tools/domains.js";
12
+ import { registerContactTools } from "./tools/contacts.js";
13
+ import { registerTagTools } from "./tools/tags.js";
14
+ import { registerSegmentTools } from "./tools/segments.js";
15
+ import { registerWebhookTools } from "./tools/webhooks.js";
16
+ async function main() {
17
+ const config = loadConfig();
18
+ const client = getClient(config);
19
+ const server = new McpServer({
20
+ name: "migma",
21
+ version: "1.0.0",
22
+ });
23
+ registerProjectTools(server, client, config);
24
+ registerGenerateTools(server, client, config);
25
+ registerSendTools(server, client, config);
26
+ registerValidateTools(server, client);
27
+ registerExportTools(server, client);
28
+ registerDomainTools(server, client);
29
+ registerContactTools(server, client, config);
30
+ registerTagTools(server, client, config);
31
+ registerSegmentTools(server, client, config);
32
+ registerWebhookTools(server, client);
33
+ const transport = new StdioServerTransport();
34
+ await server.connect(transport);
35
+ console.error("Migma MCP server running on stdio");
36
+ }
37
+ main().catch((error) => {
38
+ console.error("Failed to start Migma MCP server:", error);
39
+ process.exit(1);
40
+ });
41
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAEjC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAErC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;AACrD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;IAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { Migma } from "migma";
3
+ import type { Config } from "../config.js";
4
+ export declare function registerContactTools(server: McpServer, client: Migma, config: Config): void;
5
+ //# sourceMappingURL=contacts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contacts.d.ts","sourceRoot":"","sources":["../../src/tools/contacts.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;AAE3C,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,KAAK,EACb,MAAM,EAAE,MAAM,QAmJf"}
@@ -0,0 +1,134 @@
1
+ import { z } from "zod";
2
+ export function registerContactTools(server, client, config) {
3
+ server.registerTool("migma_list_contacts", {
4
+ title: "List Contacts",
5
+ description: "List contacts with optional filters. Supports pagination via page number.",
6
+ inputSchema: z.object({
7
+ projectId: z
8
+ .string()
9
+ .optional()
10
+ .describe("Project ID. Uses MIGMA_PROJECT_ID if not provided."),
11
+ limit: z
12
+ .number()
13
+ .int()
14
+ .min(1)
15
+ .max(100)
16
+ .optional()
17
+ .describe("Max results (default 20)"),
18
+ page: z.number().int().min(1).optional().describe("Page number"),
19
+ status: z
20
+ .enum(["active", "unsubscribed", "bounced", "complained"])
21
+ .optional()
22
+ .describe("Filter by status"),
23
+ search: z.string().optional().describe("Search by email or name"),
24
+ tag: z
25
+ .string()
26
+ .optional()
27
+ .describe("Filter by tag ID"),
28
+ }),
29
+ }, async (args) => {
30
+ const projectId = args.projectId || config.projectId;
31
+ if (!projectId) {
32
+ return toolError("projectId is required. Provide it as a parameter or set MIGMA_PROJECT_ID.");
33
+ }
34
+ const { data, error } = await client.contacts.list({
35
+ projectId,
36
+ limit: args.limit,
37
+ page: args.page,
38
+ status: args.status,
39
+ search: args.search,
40
+ tags: args.tag,
41
+ });
42
+ if (error)
43
+ return toolError(error.message);
44
+ return toolResult(data);
45
+ });
46
+ server.registerTool("migma_add_contact", {
47
+ title: "Add Contact",
48
+ description: "Create a new contact/subscriber.",
49
+ inputSchema: z.object({
50
+ email: z.string().email().describe("Contact email address"),
51
+ firstName: z.string().optional().describe("First name"),
52
+ lastName: z.string().optional().describe("Last name"),
53
+ tags: z.array(z.string()).optional().describe("Tag IDs to assign"),
54
+ customFields: z
55
+ .record(z.unknown())
56
+ .optional()
57
+ .describe("Custom field values"),
58
+ projectId: z
59
+ .string()
60
+ .optional()
61
+ .describe("Project ID. Uses MIGMA_PROJECT_ID if not provided."),
62
+ }),
63
+ }, async (args) => {
64
+ const projectId = args.projectId || config.projectId;
65
+ if (!projectId) {
66
+ return toolError("projectId is required. Provide it as a parameter or set MIGMA_PROJECT_ID.");
67
+ }
68
+ const { data, error } = await client.contacts.create({
69
+ email: args.email,
70
+ firstName: args.firstName,
71
+ lastName: args.lastName,
72
+ tags: args.tags,
73
+ customFields: args.customFields,
74
+ projectId,
75
+ });
76
+ if (error)
77
+ return toolError(error.message);
78
+ return toolResult(data);
79
+ });
80
+ server.registerTool("migma_get_contact", {
81
+ title: "Get Contact",
82
+ description: "Get detailed information about a contact by ID.",
83
+ inputSchema: z.object({
84
+ id: z.string().describe("Contact ID"),
85
+ projectId: z
86
+ .string()
87
+ .optional()
88
+ .describe("Project ID. Uses MIGMA_PROJECT_ID if not provided."),
89
+ }),
90
+ }, async (args) => {
91
+ const projectId = args.projectId || config.projectId;
92
+ if (!projectId) {
93
+ return toolError("projectId is required. Provide it as a parameter or set MIGMA_PROJECT_ID.");
94
+ }
95
+ const { data, error } = await client.contacts.get(args.id, projectId);
96
+ if (error)
97
+ return toolError(error.message);
98
+ return toolResult(data);
99
+ });
100
+ server.registerTool("migma_remove_contact", {
101
+ title: "Remove Contact",
102
+ description: "Delete a contact by ID.",
103
+ inputSchema: z.object({
104
+ id: z.string().describe("Contact ID"),
105
+ projectId: z
106
+ .string()
107
+ .optional()
108
+ .describe("Project ID. Uses MIGMA_PROJECT_ID if not provided."),
109
+ }),
110
+ }, async (args) => {
111
+ const projectId = args.projectId || config.projectId;
112
+ if (!projectId) {
113
+ return toolError("projectId is required. Provide it as a parameter or set MIGMA_PROJECT_ID.");
114
+ }
115
+ const { data, error } = await client.contacts.remove(args.id, projectId);
116
+ if (error)
117
+ return toolError(error.message);
118
+ return toolResult(data);
119
+ });
120
+ }
121
+ function toolResult(data) {
122
+ return {
123
+ content: [
124
+ { type: "text", text: JSON.stringify(data, null, 2) },
125
+ ],
126
+ };
127
+ }
128
+ function toolError(message) {
129
+ return {
130
+ content: [{ type: "text", text: message }],
131
+ isError: true,
132
+ };
133
+ }
134
+ //# sourceMappingURL=contacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contacts.js","sourceRoot":"","sources":["../../src/tools/contacts.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 registerDomainTools(server: McpServer, client: Migma): void;
4
+ //# sourceMappingURL=domains.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domains.d.ts","sourceRoot":"","sources":["../../src/tools/domains.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAGnC,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,QAkDnE"}
@@ -0,0 +1,54 @@
1
+ import { z } from "zod";
2
+ export function registerDomainTools(server, client) {
3
+ server.registerTool("migma_list_domains", {
4
+ title: "List Domains",
5
+ description: "List all sending domains (both custom and managed).",
6
+ }, async () => {
7
+ const { data, error } = await client.domains.list();
8
+ if (error)
9
+ return toolError(error.message);
10
+ return toolResult(data);
11
+ });
12
+ server.registerTool("migma_create_managed_domain", {
13
+ title: "Create Managed Domain",
14
+ description: "Create an instant managed sending domain (no DNS setup required). The domain will be <prefix>.migma.email.",
15
+ inputSchema: z.object({
16
+ prefix: z
17
+ .string()
18
+ .describe("Domain prefix (e.g. 'mycompany' → mycompany.migma.email)"),
19
+ }),
20
+ }, async (args) => {
21
+ const { data, error } = await client.domains.createManaged({
22
+ prefix: args.prefix,
23
+ });
24
+ if (error)
25
+ return toolError(error.message);
26
+ return toolResult(data);
27
+ });
28
+ server.registerTool("migma_verify_domain", {
29
+ title: "Verify Domain",
30
+ description: "Verify DNS records for a custom sending domain.",
31
+ inputSchema: z.object({
32
+ domain: z.string().describe("The domain to verify (e.g. mail.yourbrand.com)"),
33
+ }),
34
+ }, async (args) => {
35
+ const { data, error } = await client.domains.verify(args.domain);
36
+ if (error)
37
+ return toolError(error.message);
38
+ return toolResult(data);
39
+ });
40
+ }
41
+ function toolResult(data) {
42
+ return {
43
+ content: [
44
+ { type: "text", text: JSON.stringify(data, null, 2) },
45
+ ],
46
+ };
47
+ }
48
+ function toolError(message) {
49
+ return {
50
+ content: [{ type: "text", text: message }],
51
+ isError: true,
52
+ };
53
+ }
54
+ //# sourceMappingURL=domains.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domains.js","sourceRoot":"","sources":["../../src/tools/domains.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,MAAa;IAClE,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,qDAAqD;KACnE,EACD,KAAK,IAAI,EAAE;QACT,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACpD,IAAI,KAAK;YAAE,OAAO,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3C,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,6BAA6B,EAC7B;QACE,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EACT,4GAA4G;QAC9G,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,QAAQ,CAAC,0DAA0D,CAAC;SACxE,CAAC;KACH,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC;YACzD,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QACH,IAAI,KAAK;YAAE,OAAO,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3C,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,iDAAiD;QAC9D,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;SAC9E,CAAC;KACH,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjE,IAAI,KAAK;YAAE,OAAO,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3C,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CACF,CAAC;AACJ,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"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { Migma } from "migma";
3
+ export declare function registerExportTools(server: McpServer, client: Migma): void;
4
+ //# sourceMappingURL=export.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/tools/export.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAGnC,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,QA+GnE"}
@@ -0,0 +1,95 @@
1
+ import { z } from "zod";
2
+ export function registerExportTools(server, client) {
3
+ server.registerTool("migma_export_html", {
4
+ title: "Export as HTML",
5
+ description: "Export a generated email as production-ready HTML. Returns a download URL.",
6
+ inputSchema: z.object({
7
+ conversationId: z.string().describe("The conversation/generation ID"),
8
+ }),
9
+ }, async (args) => {
10
+ const { data, error } = await client.export.html(args.conversationId);
11
+ if (error)
12
+ return toolError(error.message);
13
+ return toolResult(data);
14
+ });
15
+ server.registerTool("migma_export_mjml", {
16
+ title: "Export as MJML",
17
+ description: "Export a generated email as MJML markup.",
18
+ inputSchema: z.object({
19
+ conversationId: z.string().describe("The conversation/generation ID"),
20
+ }),
21
+ }, async (args) => {
22
+ const { data, error } = await client.export.mjml(args.conversationId);
23
+ if (error)
24
+ return toolError(error.message);
25
+ return toolResult(data);
26
+ });
27
+ server.registerTool("migma_export_pdf", {
28
+ title: "Export as PDF",
29
+ description: "Export a generated email as a PDF document.",
30
+ inputSchema: z.object({
31
+ conversationId: z.string().describe("The conversation/generation ID"),
32
+ }),
33
+ }, async (args) => {
34
+ const { data, error } = await client.export.pdf(args.conversationId);
35
+ if (error)
36
+ return toolError(error.message);
37
+ return toolResult(data);
38
+ });
39
+ server.registerTool("migma_export_klaviyo", {
40
+ title: "Export for Klaviyo",
41
+ description: "Export a generated email in Klaviyo-compatible format. Choose between HTML, hybrid, or code export types.",
42
+ inputSchema: z.object({
43
+ conversationId: z.string().describe("The conversation/generation ID"),
44
+ type: z
45
+ .enum(["html", "hybrid", "code"])
46
+ .optional()
47
+ .describe("Klaviyo export type (default: html)"),
48
+ }),
49
+ }, async (args) => {
50
+ const { data, error } = await client.export.klaviyo(args.conversationId, args.type);
51
+ if (error)
52
+ return toolError(error.message);
53
+ return toolResult(data);
54
+ });
55
+ server.registerTool("migma_export_mailchimp", {
56
+ title: "Export for Mailchimp",
57
+ description: "Export a generated email in Mailchimp-compatible format.",
58
+ inputSchema: z.object({
59
+ conversationId: z.string().describe("The conversation/generation ID"),
60
+ }),
61
+ }, async (args) => {
62
+ const { data, error } = await client.export.mailchimp(args.conversationId);
63
+ if (error)
64
+ return toolError(error.message);
65
+ return toolResult(data);
66
+ });
67
+ server.registerTool("migma_export_hubspot", {
68
+ title: "Export for HubSpot",
69
+ description: "Export a generated email in HubSpot-compatible format.",
70
+ inputSchema: z.object({
71
+ conversationId: z.string().describe("The conversation/generation ID"),
72
+ }),
73
+ }, async (args) => {
74
+ const { data, error } = await client.export.hubspot({
75
+ conversationId: args.conversationId,
76
+ });
77
+ if (error)
78
+ return toolError(error.message);
79
+ return toolResult(data);
80
+ });
81
+ }
82
+ function toolResult(data) {
83
+ return {
84
+ content: [
85
+ { type: "text", text: JSON.stringify(data, null, 2) },
86
+ ],
87
+ };
88
+ }
89
+ function toolError(message) {
90
+ return {
91
+ content: [{ type: "text", text: message }],
92
+ isError: true,
93
+ };
94
+ }
95
+ //# sourceMappingURL=export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/tools/export.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { Migma } from "migma";
3
+ import type { Config } from "../config.js";
4
+ export declare function registerGenerateTools(server: McpServer, client: Migma, config: Config): void;
5
+ //# sourceMappingURL=generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/tools/generate.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;AAE3C,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,KAAK,EACb,MAAM,EAAE,MAAM,QAgFf"}
@@ -0,0 +1,74 @@
1
+ import { z } from "zod";
2
+ export function registerGenerateTools(server, client, config) {
3
+ server.registerTool("migma_generate_email", {
4
+ title: "Generate Email",
5
+ description: "Generate an AI-powered email from a text prompt. Uses the project's brand identity (colors, fonts, logos, tone). Polls until generation completes and returns the finished HTML and subject line.",
6
+ inputSchema: z.object({
7
+ projectId: z
8
+ .string()
9
+ .optional()
10
+ .describe("Project/brand ID. Uses MIGMA_PROJECT_ID env var if not provided."),
11
+ prompt: z.string().min(1).describe("Email generation prompt"),
12
+ languages: z
13
+ .array(z.string())
14
+ .max(5)
15
+ .optional()
16
+ .describe("Languages (e.g. ['en', 'fr']). Default: ['en']"),
17
+ }),
18
+ }, async (args) => {
19
+ const projectId = args.projectId || config.projectId;
20
+ if (!projectId) {
21
+ return toolError("projectId is required. Provide it as a parameter or set MIGMA_PROJECT_ID.");
22
+ }
23
+ const { data, error } = await client.emails.generateAndWait({
24
+ projectId,
25
+ prompt: args.prompt,
26
+ languages: args.languages,
27
+ });
28
+ if (error)
29
+ return toolError(error.message);
30
+ return toolResult(data);
31
+ });
32
+ server.registerTool("migma_get_generation_status", {
33
+ title: "Get Generation Status",
34
+ description: "Check the status of an email generation. Returns status, progress, and result if completed.",
35
+ inputSchema: z.object({
36
+ conversationId: z.string().describe("The conversation/generation ID"),
37
+ }),
38
+ }, async (args) => {
39
+ const { data, error } = await client.emails.getGenerationStatus(args.conversationId);
40
+ if (error)
41
+ return toolError(error.message);
42
+ return toolResult(data);
43
+ });
44
+ server.registerTool("migma_send_test_email", {
45
+ title: "Send Test Email",
46
+ description: "Send a test email for a generated conversation to a specific email address.",
47
+ inputSchema: z.object({
48
+ conversationId: z.string().describe("The conversation/generation ID"),
49
+ to: z.string().email().describe("Recipient email address"),
50
+ }),
51
+ }, async (args) => {
52
+ const { data, error } = await client.emails.sendTest({
53
+ conversationId: args.conversationId,
54
+ to: args.to,
55
+ });
56
+ if (error)
57
+ return toolError(error.message);
58
+ return toolResult(data);
59
+ });
60
+ }
61
+ function toolResult(data) {
62
+ return {
63
+ content: [
64
+ { type: "text", text: JSON.stringify(data, null, 2) },
65
+ ],
66
+ };
67
+ }
68
+ function toolError(message) {
69
+ return {
70
+ content: [{ type: "text", text: message }],
71
+ isError: true,
72
+ };
73
+ }
74
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/tools/generate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { Migma } from "migma";
3
+ import type { Config } from "../config.js";
4
+ export declare function registerProjectTools(server: McpServer, client: Migma, config: Config): void;
5
+ //# sourceMappingURL=projects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/tools/projects.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;AAE3C,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,KAAK,EACb,MAAM,EAAE,MAAM,QAyEf"}
@@ -0,0 +1,74 @@
1
+ import { z } from "zod";
2
+ export function registerProjectTools(server, client, config) {
3
+ server.registerTool("migma_list_projects", {
4
+ title: "List Projects",
5
+ description: "List all Migma projects (brands). Returns project IDs, names, domains, and statuses.",
6
+ inputSchema: z.object({
7
+ limit: z
8
+ .number()
9
+ .int()
10
+ .min(1)
11
+ .max(100)
12
+ .optional()
13
+ .describe("Max results (default 20)"),
14
+ offset: z
15
+ .number()
16
+ .int()
17
+ .min(0)
18
+ .optional()
19
+ .describe("Pagination offset"),
20
+ }),
21
+ }, async (args) => {
22
+ const { data, error } = await client.projects.list({
23
+ limit: args.limit,
24
+ offset: args.offset,
25
+ });
26
+ if (error)
27
+ return toolError(error.message);
28
+ return toolResult(data);
29
+ });
30
+ server.registerTool("migma_get_project", {
31
+ title: "Get Project Details",
32
+ description: "Get detailed information about a Migma project/brand including colors, fonts, logos, and tone of voice.",
33
+ inputSchema: z.object({
34
+ projectId: z.string().describe("The project ID"),
35
+ }),
36
+ }, async (args) => {
37
+ const { data, error } = await client.projects.get(args.projectId);
38
+ if (error)
39
+ return toolError(error.message);
40
+ return toolResult(data);
41
+ });
42
+ server.registerTool("migma_import_brand", {
43
+ title: "Import Brand",
44
+ description: "Import a brand from one or more website URLs. Extracts colors, fonts, logos, and tone of voice. Polls until import completes.",
45
+ inputSchema: z.object({
46
+ urls: z
47
+ .array(z.string())
48
+ .min(1)
49
+ .max(10)
50
+ .describe("Website URLs to import brand from"),
51
+ }),
52
+ }, async (args) => {
53
+ const { data, error } = await client.projects.importAndWait({
54
+ urls: args.urls,
55
+ });
56
+ if (error)
57
+ return toolError(error.message);
58
+ return toolResult(data);
59
+ });
60
+ }
61
+ function toolResult(data) {
62
+ return {
63
+ content: [
64
+ { type: "text", text: JSON.stringify(data, null, 2) },
65
+ ],
66
+ };
67
+ }
68
+ function toolError(message) {
69
+ return {
70
+ content: [{ type: "text", text: message }],
71
+ isError: true,
72
+ };
73
+ }
74
+ //# sourceMappingURL=projects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/tools/projects.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { Migma } from "migma";
3
+ import type { Config } from "../config.js";
4
+ export declare function registerSegmentTools(server: McpServer, client: Migma, config: Config): void;
5
+ //# sourceMappingURL=segments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"segments.d.ts","sourceRoot":"","sources":["../../src/tools/segments.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;AAE3C,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,KAAK,EACb,MAAM,EAAE,MAAM,QAuFf"}
@@ -0,0 +1,81 @@
1
+ import { z } from "zod";
2
+ export function registerSegmentTools(server, client, config) {
3
+ server.registerTool("migma_list_segments", {
4
+ title: "List Segments",
5
+ description: "List all audience segments for a project.",
6
+ inputSchema: z.object({
7
+ projectId: z
8
+ .string()
9
+ .optional()
10
+ .describe("Project ID. Uses MIGMA_PROJECT_ID if not provided."),
11
+ }),
12
+ }, async (args) => {
13
+ const projectId = args.projectId || config.projectId;
14
+ if (!projectId) {
15
+ return toolError("projectId is required. Provide it as a parameter or set MIGMA_PROJECT_ID.");
16
+ }
17
+ const { data, error } = await client.segments.list(projectId);
18
+ if (error)
19
+ return toolError(error.message);
20
+ return toolResult(data);
21
+ });
22
+ server.registerTool("migma_create_segment", {
23
+ title: "Create Segment",
24
+ description: "Create a new audience segment with optional filters (tags, status, custom fields).",
25
+ inputSchema: z.object({
26
+ name: z.string().describe("Segment name"),
27
+ description: z.string().optional().describe("Segment description"),
28
+ projectId: z
29
+ .string()
30
+ .optional()
31
+ .describe("Project ID. Uses MIGMA_PROJECT_ID if not provided."),
32
+ }),
33
+ }, async (args) => {
34
+ const projectId = args.projectId || config.projectId;
35
+ if (!projectId) {
36
+ return toolError("projectId is required. Provide it as a parameter or set MIGMA_PROJECT_ID.");
37
+ }
38
+ const { data, error } = await client.segments.create({
39
+ name: args.name,
40
+ description: args.description,
41
+ projectId,
42
+ });
43
+ if (error)
44
+ return toolError(error.message);
45
+ return toolResult(data);
46
+ });
47
+ server.registerTool("migma_delete_segment", {
48
+ title: "Delete Segment",
49
+ description: "Delete a segment by ID.",
50
+ inputSchema: z.object({
51
+ id: z.string().describe("Segment ID"),
52
+ projectId: z
53
+ .string()
54
+ .optional()
55
+ .describe("Project ID. Uses MIGMA_PROJECT_ID if not provided."),
56
+ }),
57
+ }, async (args) => {
58
+ const projectId = args.projectId || config.projectId;
59
+ if (!projectId) {
60
+ return toolError("projectId is required. Provide it as a parameter or set MIGMA_PROJECT_ID.");
61
+ }
62
+ const { data, error } = await client.segments.remove(args.id, projectId);
63
+ if (error)
64
+ return toolError(error.message);
65
+ return toolResult(data);
66
+ });
67
+ }
68
+ function toolResult(data) {
69
+ return {
70
+ content: [
71
+ { type: "text", text: JSON.stringify(data, null, 2) },
72
+ ],
73
+ };
74
+ }
75
+ function toolError(message) {
76
+ return {
77
+ content: [{ type: "text", text: message }],
78
+ isError: true,
79
+ };
80
+ }
81
+ //# sourceMappingURL=segments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"segments.js","sourceRoot":"","sources":["../../src/tools/segments.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { Migma } from "migma";
3
+ import type { Config } from "../config.js";
4
+ export declare function registerSendTools(server: McpServer, client: Migma, config: Config): void;
5
+ //# sourceMappingURL=send.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../src/tools/send.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;AAE3C,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,KAAK,EACb,MAAM,EAAE,MAAM,QA+Df"}
@@ -0,0 +1,67 @@
1
+ import { z } from "zod";
2
+ export function registerSendTools(server, client, config) {
3
+ server.registerTool("migma_send_email", {
4
+ title: "Send Email",
5
+ description: "Send an email to an individual, tag, or segment. Requires a sending domain (custom or managed). Use recipientType to choose the target.",
6
+ inputSchema: z.object({
7
+ recipientType: z
8
+ .enum(["email", "tag", "segment"])
9
+ .describe("Who to send to: a single email, a tag group, or a segment"),
10
+ recipientEmail: z
11
+ .string()
12
+ .email()
13
+ .optional()
14
+ .describe("Recipient email (required when recipientType is 'email')"),
15
+ recipientId: z
16
+ .string()
17
+ .optional()
18
+ .describe("Tag or segment ID (required when recipientType is 'tag' or 'segment')"),
19
+ from: z.string().describe("Sender email address (e.g. hello@yourbrand.migma.email)"),
20
+ fromName: z.string().describe("Sender display name"),
21
+ subject: z.string().describe("Email subject line"),
22
+ template: z.string().describe("Email HTML content"),
23
+ projectId: z
24
+ .string()
25
+ .optional()
26
+ .describe("Project ID. Uses MIGMA_PROJECT_ID env var if not provided."),
27
+ variables: z
28
+ .record(z.unknown())
29
+ .optional()
30
+ .describe("Template variables for personalization (e.g. { name: 'Sarah' })"),
31
+ }),
32
+ }, async (args) => {
33
+ const projectId = args.projectId || config.projectId;
34
+ if (!projectId) {
35
+ return toolError("projectId is required. Provide it as a parameter or set MIGMA_PROJECT_ID.");
36
+ }
37
+ const { data, error } = await client.sending.send({
38
+ recipientType: args.recipientType,
39
+ recipientEmail: args.recipientEmail,
40
+ recipientId: args.recipientId,
41
+ from: args.from,
42
+ fromName: args.fromName,
43
+ subject: args.subject,
44
+ template: args.template,
45
+ variables: args.variables,
46
+ providerType: "migma",
47
+ projectId,
48
+ });
49
+ if (error)
50
+ return toolError(error.message);
51
+ return toolResult(data);
52
+ });
53
+ }
54
+ function toolResult(data) {
55
+ return {
56
+ content: [
57
+ { type: "text", text: JSON.stringify(data, null, 2) },
58
+ ],
59
+ };
60
+ }
61
+ function toolError(message) {
62
+ return {
63
+ content: [{ type: "text", text: message }],
64
+ isError: true,
65
+ };
66
+ }
67
+ //# sourceMappingURL=send.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send.js","sourceRoot":"","sources":["../../src/tools/send.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,UAAU,iBAAiB,CAC/B,MAAiB,EACjB,MAAa,EACb,MAAc;IAEd,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,KAAK,EAAE,YAAY;QACnB,WAAW,EACT,yIAAyI;QAC3I,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,aAAa,EAAE,CAAC;iBACb,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;iBACjC,QAAQ,CAAC,2DAA2D,CAAC;YACxE,cAAc,EAAE,CAAC;iBACd,MAAM,EAAE;iBACR,KAAK,EAAE;iBACP,QAAQ,EAAE;iBACV,QAAQ,CAAC,0DAA0D,CAAC;YACvE,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,uEAAuE,CACxE;YACH,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yDAAyD,CAAC;YACpF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;YACpD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;YAClD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;YACnD,SAAS,EAAE,CAAC;iBACT,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,4DAA4D,CAC7D;YACH,SAAS,EAAE,CAAC;iBACT,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;iBACnB,QAAQ,EAAE;iBACV,QAAQ,CAAC,iEAAiE,CAAC;SAC/E,CAAC;KACH,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC;QACrD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,SAAS,CACd,2EAA2E,CAC5E,CAAC;QACJ,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;YAChD,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,YAAY,EAAE,OAAO;YACrB,SAAS;SACV,CAAC,CAAC;QACH,IAAI,KAAK;YAAE,OAAO,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3C,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CACF,CAAC;AACJ,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"}
@@ -0,0 +1,5 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { Migma } from "migma";
3
+ import type { Config } from "../config.js";
4
+ export declare function registerTagTools(server: McpServer, client: Migma, config: Config): void;
5
+ //# sourceMappingURL=tags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../src/tools/tags.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;AAE3C,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,KAAK,EACb,MAAM,EAAE,MAAM,QA2Ff"}
@@ -0,0 +1,86 @@
1
+ import { z } from "zod";
2
+ export function registerTagTools(server, client, config) {
3
+ server.registerTool("migma_list_tags", {
4
+ title: "List Tags",
5
+ description: "List all tags for a project.",
6
+ inputSchema: z.object({
7
+ projectId: z
8
+ .string()
9
+ .optional()
10
+ .describe("Project ID. Uses MIGMA_PROJECT_ID if not provided."),
11
+ }),
12
+ }, async (args) => {
13
+ const projectId = args.projectId || config.projectId;
14
+ if (!projectId) {
15
+ return toolError("projectId is required. Provide it as a parameter or set MIGMA_PROJECT_ID.");
16
+ }
17
+ const { data, error } = await client.tags.list({ projectId });
18
+ if (error)
19
+ return toolError(error.message);
20
+ return toolResult(data);
21
+ });
22
+ server.registerTool("migma_create_tag", {
23
+ title: "Create Tag",
24
+ description: "Create a new tag for organizing contacts.",
25
+ inputSchema: z.object({
26
+ name: z.string().describe("Tag name"),
27
+ color: z
28
+ .string()
29
+ .optional()
30
+ .describe("Hex color (e.g. #FF5733)"),
31
+ description: z.string().optional().describe("Tag description"),
32
+ projectId: z
33
+ .string()
34
+ .optional()
35
+ .describe("Project ID. Uses MIGMA_PROJECT_ID if not provided."),
36
+ }),
37
+ }, async (args) => {
38
+ const projectId = args.projectId || config.projectId;
39
+ if (!projectId) {
40
+ return toolError("projectId is required. Provide it as a parameter or set MIGMA_PROJECT_ID.");
41
+ }
42
+ const { data, error } = await client.tags.create({
43
+ name: args.name,
44
+ color: args.color,
45
+ description: args.description,
46
+ projectId,
47
+ });
48
+ if (error)
49
+ return toolError(error.message);
50
+ return toolResult(data);
51
+ });
52
+ server.registerTool("migma_delete_tag", {
53
+ title: "Delete Tag",
54
+ description: "Delete a tag by ID.",
55
+ inputSchema: z.object({
56
+ id: z.string().describe("Tag ID"),
57
+ projectId: z
58
+ .string()
59
+ .optional()
60
+ .describe("Project ID. Uses MIGMA_PROJECT_ID if not provided."),
61
+ }),
62
+ }, async (args) => {
63
+ const projectId = args.projectId || config.projectId;
64
+ if (!projectId) {
65
+ return toolError("projectId is required. Provide it as a parameter or set MIGMA_PROJECT_ID.");
66
+ }
67
+ const { data, error } = await client.tags.remove(args.id, projectId);
68
+ if (error)
69
+ return toolError(error.message);
70
+ return toolResult(data);
71
+ });
72
+ }
73
+ function toolResult(data) {
74
+ return {
75
+ content: [
76
+ { type: "text", text: JSON.stringify(data, null, 2) },
77
+ ],
78
+ };
79
+ }
80
+ function toolError(message) {
81
+ return {
82
+ content: [{ type: "text", text: message }],
83
+ isError: true,
84
+ };
85
+ }
86
+ //# sourceMappingURL=tags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tags.js","sourceRoot":"","sources":["../../src/tools/tags.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,UAAU,gBAAgB,CAC9B,MAAiB,EACjB,MAAa,EACb,MAAc;IAEd,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,8BAA8B;QAC3C,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,SAAS,EAAE,CAAC;iBACT,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,oDAAoD,CAAC;SAClE,CAAC;KACH,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC;QACrD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,SAAS,CACd,2EAA2E,CAC5E,CAAC;QACJ,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QAC9D,IAAI,KAAK;YAAE,OAAO,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3C,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,2CAA2C;QACxD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;YACrC,KAAK,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,0BAA0B,CAAC;YACvC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YAC9D,SAAS,EAAE,CAAC;iBACT,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,oDAAoD,CAAC;SAClE,CAAC;KACH,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC;QACrD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,SAAS,CACd,2EAA2E,CAC5E,CAAC;QACJ,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;YAC/C,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,SAAS;SACV,CAAC,CAAC;QACH,IAAI,KAAK;YAAE,OAAO,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3C,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,qBAAqB;QAClC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACjC,SAAS,EAAE,CAAC;iBACT,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,oDAAoD,CAAC;SAClE,CAAC;KACH,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC;QACrD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,SAAS,CACd,2EAA2E,CAC5E,CAAC;QACJ,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QACrE,IAAI,KAAK;YAAE,OAAO,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3C,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CACF,CAAC;AACJ,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"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { Migma } from "migma";
3
+ export declare function registerValidateTools(server: McpServer, client: Migma): void;
4
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/tools/validate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAGnC,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,QA6DrE"}
@@ -0,0 +1,63 @@
1
+ import { z } from "zod";
2
+ export function registerValidateTools(server, client) {
3
+ server.registerTool("migma_validate_email", {
4
+ title: "Validate Email",
5
+ description: "Run all email validations: compatibility across 30+ clients, broken links, spelling/grammar, and spam score. Returns a comprehensive report.",
6
+ inputSchema: z.object({
7
+ html: z.string().describe("Email HTML to validate"),
8
+ subject: z.string().optional().describe("Email subject line"),
9
+ }),
10
+ }, async (args) => {
11
+ const { data, error } = await client.validation.all({
12
+ html: args.html,
13
+ subject: args.subject,
14
+ });
15
+ if (error)
16
+ return toolError(error.message);
17
+ return toolResult(data);
18
+ });
19
+ server.registerTool("migma_validate_compatibility", {
20
+ title: "Validate Compatibility",
21
+ description: "Check email rendering compatibility across 30+ email clients (Gmail, Outlook, Apple Mail, etc.). Returns a score out of 100.",
22
+ inputSchema: z.object({
23
+ html: z.string().describe("Email HTML to check"),
24
+ }),
25
+ }, async (args) => {
26
+ const { data, error } = await client.validation.compatibility({
27
+ html: args.html,
28
+ });
29
+ if (error)
30
+ return toolError(error.message);
31
+ return toolResult(data);
32
+ });
33
+ server.registerTool("migma_validate_deliverability", {
34
+ title: "Validate Deliverability",
35
+ description: "Analyze email for spam triggers and predict inbox placement. Returns a spam score and recommendations.",
36
+ inputSchema: z.object({
37
+ html: z.string().describe("Email HTML to analyze"),
38
+ subject: z.string().optional().describe("Email subject line"),
39
+ }),
40
+ }, async (args) => {
41
+ const { data, error } = await client.validation.deliverability({
42
+ html: args.html,
43
+ subject: args.subject,
44
+ });
45
+ if (error)
46
+ return toolError(error.message);
47
+ return toolResult(data);
48
+ });
49
+ }
50
+ function toolResult(data) {
51
+ return {
52
+ content: [
53
+ { type: "text", text: JSON.stringify(data, null, 2) },
54
+ ],
55
+ };
56
+ }
57
+ function toolError(message) {
58
+ return {
59
+ content: [{ type: "text", text: message }],
60
+ isError: true,
61
+ };
62
+ }
63
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/tools/validate.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 registerWebhookTools(server: McpServer, client: Migma): void;
4
+ //# sourceMappingURL=webhooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../../src/tools/webhooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAGnC,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,QA4EpE"}
@@ -0,0 +1,74 @@
1
+ import { z } from "zod";
2
+ export function registerWebhookTools(server, client) {
3
+ server.registerTool("migma_list_webhooks", {
4
+ title: "List Webhooks",
5
+ description: "List all configured webhooks.",
6
+ }, async () => {
7
+ const { data, error } = await client.webhooks.list();
8
+ if (error)
9
+ return toolError(error.message);
10
+ return toolResult(data);
11
+ });
12
+ server.registerTool("migma_create_webhook", {
13
+ title: "Create Webhook",
14
+ description: "Create a webhook to receive event notifications (e.g. email.generation.completed, subscriber.added).",
15
+ inputSchema: z.object({
16
+ url: z.string().url().describe("Webhook endpoint URL"),
17
+ events: z
18
+ .array(z.string())
19
+ .min(1)
20
+ .describe("Event types to subscribe to (e.g. email.generation.completed, subscriber.added)"),
21
+ description: z
22
+ .string()
23
+ .optional()
24
+ .describe("Webhook description"),
25
+ }),
26
+ }, async (args) => {
27
+ const { data, error } = await client.webhooks.create({
28
+ url: args.url,
29
+ events: args.events,
30
+ description: args.description,
31
+ });
32
+ if (error)
33
+ return toolError(error.message);
34
+ return toolResult(data);
35
+ });
36
+ server.registerTool("migma_test_webhook", {
37
+ title: "Test Webhook",
38
+ description: "Send a test event to a webhook endpoint.",
39
+ inputSchema: z.object({
40
+ webhookId: z.string().describe("Webhook ID"),
41
+ }),
42
+ }, async (args) => {
43
+ const { data, error } = await client.webhooks.test(args.webhookId);
44
+ if (error)
45
+ return toolError(error.message);
46
+ return toolResult(data);
47
+ });
48
+ server.registerTool("migma_delete_webhook", {
49
+ title: "Delete Webhook",
50
+ description: "Delete a webhook by ID.",
51
+ inputSchema: z.object({
52
+ webhookId: z.string().describe("Webhook ID"),
53
+ }),
54
+ }, async (args) => {
55
+ const { data, error } = await client.webhooks.remove(args.webhookId);
56
+ if (error)
57
+ return toolError(error.message);
58
+ return toolResult(data);
59
+ });
60
+ }
61
+ function toolResult(data) {
62
+ return {
63
+ content: [
64
+ { type: "text", text: JSON.stringify(data, null, 2) },
65
+ ],
66
+ };
67
+ }
68
+ function toolError(message) {
69
+ return {
70
+ content: [{ type: "text", text: message }],
71
+ isError: true,
72
+ };
73
+ }
74
+ //# sourceMappingURL=webhooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../src/tools/webhooks.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "@migma/mcp",
3
+ "version": "1.0.0",
4
+ "description": "Migma MCP server — generate, send, validate, and export AI-powered emails from any MCP-compatible client",
5
+ "type": "module",
6
+ "bin": {
7
+ "migma-mcp": "./build/index.js"
8
+ },
9
+ "main": "./build/index.js",
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "start": "node build/index.js",
13
+ "dev": "tsc --watch",
14
+ "typecheck": "tsc --noEmit"
15
+ },
16
+ "keywords": [
17
+ "migma",
18
+ "mcp",
19
+ "model-context-protocol",
20
+ "email",
21
+ "ai"
22
+ ],
23
+ "license": "MIT",
24
+ "dependencies": {
25
+ "@modelcontextprotocol/sdk": "^1.9.0",
26
+ "migma": "^1.0.5",
27
+ "zod": "^3.23.0"
28
+ },
29
+ "devDependencies": {
30
+ "@types/node": "^22.0.0",
31
+ "typescript": "^5.7.0"
32
+ },
33
+ "engines": {
34
+ "node": ">=18.0.0"
35
+ },
36
+ "files": [
37
+ "build",
38
+ "README.md"
39
+ ]
40
+ }