@migma/mcp 1.1.0 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/index.d.ts +10 -0
- package/build/index.d.ts.map +1 -1
- package/build/index.js +36 -7
- package/build/index.js.map +1 -1
- package/build/prompts/index.d.ts +14 -0
- package/build/prompts/index.d.ts.map +1 -0
- package/build/prompts/index.js +70 -0
- package/build/prompts/index.js.map +1 -0
- package/build/tools/__tests__/catalog.test.d.ts +2 -0
- package/build/tools/__tests__/catalog.test.d.ts.map +1 -0
- package/build/tools/__tests__/catalog.test.js +27 -0
- package/build/tools/__tests__/catalog.test.js.map +1 -0
- package/build/tools/campaigns.d.ts.map +1 -1
- package/build/tools/campaigns.js +107 -14
- package/build/tools/campaigns.js.map +1 -1
- package/build/tools/capabilities.d.ts +16 -0
- package/build/tools/capabilities.d.ts.map +1 -0
- package/build/tools/capabilities.js +101 -0
- package/build/tools/capabilities.js.map +1 -0
- package/build/tools/contacts.d.ts.map +1 -1
- package/build/tools/contacts.js +51 -11
- package/build/tools/contacts.js.map +1 -1
- package/build/tools/domains.d.ts.map +1 -1
- package/build/tools/domains.js +61 -0
- package/build/tools/domains.js.map +1 -1
- package/build/tools/generate.d.ts.map +1 -1
- package/build/tools/generate.js +60 -7
- package/build/tools/generate.js.map +1 -1
- package/build/tools/projects.d.ts.map +1 -1
- package/build/tools/projects.js +21 -0
- package/build/tools/projects.js.map +1 -1
- package/build/tools/segments.d.ts.map +1 -1
- package/build/tools/segments.js +41 -7
- package/build/tools/segments.js.map +1 -1
- package/build/tools/send.d.ts.map +1 -1
- package/build/tools/send.js +29 -32
- package/build/tools/send.js.map +1 -1
- package/build/tools/tags.js +6 -6
- package/build/tools/tags.js.map +1 -1
- package/package.json +11 -3
package/build/tools/segments.js
CHANGED
|
@@ -1,4 +1,36 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
// Keep in sync with n/migma-backend/src/validators/audience-filters.schema.ts.
|
|
3
|
+
const fieldFilterSchema = z.object({
|
|
4
|
+
key: z.string().min(1).max(100),
|
|
5
|
+
mode: z.enum(["is", "is_not", "starts_with", "ends_with", "contains", "not_contains"]).default("is"),
|
|
6
|
+
values: z.array(z.string().min(1).max(200)).min(1).max(50),
|
|
7
|
+
});
|
|
8
|
+
const activityFilterSchema = z.object({
|
|
9
|
+
action: z.enum(["sent", "opened", "clicked"]),
|
|
10
|
+
channel: z.enum(["email"]).optional(),
|
|
11
|
+
mode: z.enum(["within", "before", "never", "between"]),
|
|
12
|
+
unit: z.enum(["hours", "days"]).optional(),
|
|
13
|
+
amount: z.number().int().positive().optional(),
|
|
14
|
+
from: z.coerce.date().optional(),
|
|
15
|
+
to: z.coerce.date().optional(),
|
|
16
|
+
campaignId: z.string().optional(),
|
|
17
|
+
}).refine((data) => data.mode !== "between", { message: "Activity mode 'between' is not yet supported" }).refine((data) => {
|
|
18
|
+
if (data.mode === "never")
|
|
19
|
+
return true;
|
|
20
|
+
if (data.unit === undefined || data.amount === undefined)
|
|
21
|
+
return false;
|
|
22
|
+
const cap = data.unit === "days" ? 365 : 8760;
|
|
23
|
+
return data.amount >= 1 && data.amount <= cap;
|
|
24
|
+
}, { message: "Activity 'within'/'before' requires unit and amount (days: 1-365, hours: 1-8760)" });
|
|
25
|
+
const segmentFiltersSchema = z.object({
|
|
26
|
+
tags: z.array(z.string()).optional(),
|
|
27
|
+
excludeTags: z.array(z.string()).optional(),
|
|
28
|
+
status: z.enum(["subscribed", "unsubscribed", "non-subscribed", "bounced"]).optional(),
|
|
29
|
+
validationStatus: z.enum(["valid", "invalid", "risky", "unknown"]).optional(),
|
|
30
|
+
customFields: z.record(z.array(z.string())).optional(),
|
|
31
|
+
fields: z.array(fieldFilterSchema).max(10).optional(),
|
|
32
|
+
activity: z.array(activityFilterSchema).optional(),
|
|
33
|
+
});
|
|
2
34
|
export function registerSegmentTools(server, client, config) {
|
|
3
35
|
server.registerTool("migma_list_segments", {
|
|
4
36
|
title: "List Segments",
|
|
@@ -7,12 +39,12 @@ export function registerSegmentTools(server, client, config) {
|
|
|
7
39
|
projectId: z
|
|
8
40
|
.string()
|
|
9
41
|
.optional()
|
|
10
|
-
.describe("Project ID.
|
|
42
|
+
.describe("Project ID. Local stdio uses MIGMA_PROJECT_ID if not provided; hosted remote clients should pass projectId."),
|
|
11
43
|
}),
|
|
12
44
|
}, async (args) => {
|
|
13
45
|
const projectId = args.projectId || config.projectId;
|
|
14
46
|
if (!projectId) {
|
|
15
|
-
return toolError("projectId is required. Provide
|
|
47
|
+
return toolError("projectId is required. Provide projectId, or set MIGMA_PROJECT_ID when using local stdio.");
|
|
16
48
|
}
|
|
17
49
|
const { data, error } = await client.segments.list(projectId);
|
|
18
50
|
if (error)
|
|
@@ -21,23 +53,25 @@ export function registerSegmentTools(server, client, config) {
|
|
|
21
53
|
});
|
|
22
54
|
server.registerTool("migma_create_segment", {
|
|
23
55
|
title: "Create Segment",
|
|
24
|
-
description: "Create a new audience segment with optional filters
|
|
56
|
+
description: "Create a new audience segment with optional filters.",
|
|
25
57
|
inputSchema: z.object({
|
|
26
58
|
name: z.string().describe("Segment name"),
|
|
27
59
|
description: z.string().optional().describe("Segment description"),
|
|
60
|
+
filters: segmentFiltersSchema.optional().describe("Segment filters. Conditions are AND'd. Use project field catalog keys for fields[].key."),
|
|
28
61
|
projectId: z
|
|
29
62
|
.string()
|
|
30
63
|
.optional()
|
|
31
|
-
.describe("Project ID.
|
|
64
|
+
.describe("Project ID. Local stdio uses MIGMA_PROJECT_ID if not provided; hosted remote clients should pass projectId."),
|
|
32
65
|
}),
|
|
33
66
|
}, async (args) => {
|
|
34
67
|
const projectId = args.projectId || config.projectId;
|
|
35
68
|
if (!projectId) {
|
|
36
|
-
return toolError("projectId is required. Provide
|
|
69
|
+
return toolError("projectId is required. Provide projectId, or set MIGMA_PROJECT_ID when using local stdio.");
|
|
37
70
|
}
|
|
38
71
|
const { data, error } = await client.segments.create({
|
|
39
72
|
name: args.name,
|
|
40
73
|
description: args.description,
|
|
74
|
+
filters: args.filters,
|
|
41
75
|
projectId,
|
|
42
76
|
});
|
|
43
77
|
if (error)
|
|
@@ -52,12 +86,12 @@ export function registerSegmentTools(server, client, config) {
|
|
|
52
86
|
projectId: z
|
|
53
87
|
.string()
|
|
54
88
|
.optional()
|
|
55
|
-
.describe("Project ID.
|
|
89
|
+
.describe("Project ID. Local stdio uses MIGMA_PROJECT_ID if not provided; hosted remote clients should pass projectId."),
|
|
56
90
|
}),
|
|
57
91
|
}, async (args) => {
|
|
58
92
|
const projectId = args.projectId || config.projectId;
|
|
59
93
|
if (!projectId) {
|
|
60
|
-
return toolError("projectId is required. Provide
|
|
94
|
+
return toolError("projectId is required. Provide projectId, or set MIGMA_PROJECT_ID when using local stdio.");
|
|
61
95
|
}
|
|
62
96
|
const { data, error } = await client.segments.remove(args.id, projectId);
|
|
63
97
|
if (error)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"segments.js","sourceRoot":"","sources":["../../src/tools/segments.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,UAAU,oBAAoB,CAClC,MAAiB,EACjB,MAAa,EACb,MAAc;IAEd,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,2CAA2C;QACxD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,SAAS,EAAE,CAAC;iBACT,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"segments.js","sourceRoot":"","sources":["../../src/tools/segments.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +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,
|
|
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,QAyFf"}
|
package/build/tools/send.js
CHANGED
|
@@ -2,7 +2,7 @@ import { z } from "zod";
|
|
|
2
2
|
export function registerSendTools(server, client, config) {
|
|
3
3
|
server.registerTool("migma_send_email", {
|
|
4
4
|
title: "Send Email",
|
|
5
|
-
description: "Send
|
|
5
|
+
description: "Send a generated email to an individual, tag, or segment from a configured sender. For series, provide emailId from generation status emails[].emailId. For single-email conversations, conversationId also works.",
|
|
6
6
|
inputSchema: z.object({
|
|
7
7
|
recipientType: z
|
|
8
8
|
.enum(["email", "tag", "segment"])
|
|
@@ -19,54 +19,51 @@ export function registerSendTools(server, client, config) {
|
|
|
19
19
|
from: z.string().describe("Sender email address (e.g. hello@yourbrand.migma.email)"),
|
|
20
20
|
fromName: z.string().describe("Sender display name"),
|
|
21
21
|
subject: z.string().describe("Email subject line"),
|
|
22
|
-
|
|
22
|
+
emailId: z
|
|
23
23
|
.string()
|
|
24
24
|
.optional()
|
|
25
|
-
.describe("
|
|
26
|
-
|
|
25
|
+
.describe("Generated email ID. Required for multi-email series so the API knows which email to send."),
|
|
26
|
+
conversationId: z
|
|
27
27
|
.string()
|
|
28
28
|
.optional()
|
|
29
|
-
.describe("
|
|
29
|
+
.describe("Conversation ID from a single generated email."),
|
|
30
|
+
variables: z
|
|
31
|
+
.record(z.string())
|
|
32
|
+
.optional()
|
|
33
|
+
.describe("Template variables for personalization (e.g. { first_name: 'Adam', code: 'ABC123' })"),
|
|
30
34
|
projectId: z
|
|
31
35
|
.string()
|
|
32
36
|
.optional()
|
|
33
|
-
.describe("Project ID.
|
|
37
|
+
.describe("Project ID. Local stdio uses MIGMA_PROJECT_ID if not provided; hosted remote clients should pass projectId. Resolved automatically from conversationId when omitted."),
|
|
38
|
+
transactional: z
|
|
39
|
+
.boolean()
|
|
40
|
+
.optional()
|
|
41
|
+
.describe("True for transactional emails (order confirmations, resets) — bypasses unsubscribe filters. Defaults to true for single sends, false for batch."),
|
|
42
|
+
idempotency_key: z
|
|
43
|
+
.string()
|
|
44
|
+
.max(100)
|
|
45
|
+
.optional()
|
|
46
|
+
.describe("Optional Idempotency-Key for safe retries; same key+body within 24h replays the original result."),
|
|
34
47
|
}),
|
|
35
48
|
}, async (args) => {
|
|
36
49
|
const projectId = args.projectId || config.projectId;
|
|
37
|
-
if (!
|
|
38
|
-
return toolError("
|
|
39
|
-
}
|
|
40
|
-
if (!args.conversationId && !args.template) {
|
|
41
|
-
return toolError("Either conversationId or template (HTML) is required.");
|
|
42
|
-
}
|
|
43
|
-
// If conversationId is provided but no template, export the HTML first
|
|
44
|
-
let template = args.template;
|
|
45
|
-
if (!template && args.conversationId) {
|
|
46
|
-
const { data: exportData, error: exportError } = await client.export.html(args.conversationId);
|
|
47
|
-
if (exportError) {
|
|
48
|
-
return toolError(`Failed to export HTML: ${exportError.message}`);
|
|
49
|
-
}
|
|
50
|
-
const fileUrl = exportData?.files?.[0]?.url;
|
|
51
|
-
if (!fileUrl) {
|
|
52
|
-
return toolError("No HTML file returned from export.");
|
|
53
|
-
}
|
|
54
|
-
const resp = await fetch(fileUrl);
|
|
55
|
-
template = await resp.text();
|
|
56
|
-
}
|
|
57
|
-
if (!template) {
|
|
58
|
-
return toolError("Could not resolve email template.");
|
|
50
|
+
if (!args.emailId && !args.conversationId) {
|
|
51
|
+
return toolError("emailId or conversationId is required.");
|
|
59
52
|
}
|
|
60
|
-
const
|
|
53
|
+
const sendParams = {
|
|
61
54
|
recipientType: args.recipientType,
|
|
62
55
|
recipientEmail: args.recipientEmail,
|
|
63
56
|
recipientId: args.recipientId,
|
|
64
57
|
from: args.from,
|
|
65
58
|
fromName: args.fromName,
|
|
66
59
|
subject: args.subject,
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
60
|
+
emailId: args.emailId,
|
|
61
|
+
conversationId: args.conversationId,
|
|
62
|
+
variables: args.variables,
|
|
63
|
+
transactional: args.transactional,
|
|
64
|
+
...(projectId ? { projectId } : {}),
|
|
65
|
+
};
|
|
66
|
+
const { data, error } = await client.sending.send(sendParams, args.idempotency_key ? { idempotencyKey: args.idempotency_key } : undefined);
|
|
70
67
|
if (error)
|
|
71
68
|
return toolError(error.message);
|
|
72
69
|
return toolResult(data);
|
package/build/tools/send.js.map
CHANGED
|
@@ -1 +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,oNAAoN;QACtN,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,
|
|
1
|
+
{"version":3,"file":"send.js","sourceRoot":"","sources":["../../src/tools/send.ts"],"names":[],"mappings":"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"}
|
package/build/tools/tags.js
CHANGED
|
@@ -7,12 +7,12 @@ export function registerTagTools(server, client, config) {
|
|
|
7
7
|
projectId: z
|
|
8
8
|
.string()
|
|
9
9
|
.optional()
|
|
10
|
-
.describe("Project ID.
|
|
10
|
+
.describe("Project ID. Local stdio uses MIGMA_PROJECT_ID if not provided; hosted remote clients should pass projectId."),
|
|
11
11
|
}),
|
|
12
12
|
}, async (args) => {
|
|
13
13
|
const projectId = args.projectId || config.projectId;
|
|
14
14
|
if (!projectId) {
|
|
15
|
-
return toolError("projectId is required. Provide
|
|
15
|
+
return toolError("projectId is required. Provide projectId, or set MIGMA_PROJECT_ID when using local stdio.");
|
|
16
16
|
}
|
|
17
17
|
const { data, error } = await client.tags.list({ projectId });
|
|
18
18
|
if (error)
|
|
@@ -32,12 +32,12 @@ export function registerTagTools(server, client, config) {
|
|
|
32
32
|
projectId: z
|
|
33
33
|
.string()
|
|
34
34
|
.optional()
|
|
35
|
-
.describe("Project ID.
|
|
35
|
+
.describe("Project ID. Local stdio uses MIGMA_PROJECT_ID if not provided; hosted remote clients should pass projectId."),
|
|
36
36
|
}),
|
|
37
37
|
}, async (args) => {
|
|
38
38
|
const projectId = args.projectId || config.projectId;
|
|
39
39
|
if (!projectId) {
|
|
40
|
-
return toolError("projectId is required. Provide
|
|
40
|
+
return toolError("projectId is required. Provide projectId, or set MIGMA_PROJECT_ID when using local stdio.");
|
|
41
41
|
}
|
|
42
42
|
const { data, error } = await client.tags.create({
|
|
43
43
|
name: args.name,
|
|
@@ -57,12 +57,12 @@ export function registerTagTools(server, client, config) {
|
|
|
57
57
|
projectId: z
|
|
58
58
|
.string()
|
|
59
59
|
.optional()
|
|
60
|
-
.describe("Project ID.
|
|
60
|
+
.describe("Project ID. Local stdio uses MIGMA_PROJECT_ID if not provided; hosted remote clients should pass projectId."),
|
|
61
61
|
}),
|
|
62
62
|
}, async (args) => {
|
|
63
63
|
const projectId = args.projectId || config.projectId;
|
|
64
64
|
if (!projectId) {
|
|
65
|
-
return toolError("projectId is required. Provide
|
|
65
|
+
return toolError("projectId is required. Provide projectId, or set MIGMA_PROJECT_ID when using local stdio.");
|
|
66
66
|
}
|
|
67
67
|
const { data, error } = await client.tags.remove(args.id, projectId);
|
|
68
68
|
if (error)
|
package/build/tools/tags.js.map
CHANGED
|
@@ -1 +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,
|
|
1
|
+
{"version":3,"file":"tags.js","sourceRoot":"","sources":["../../src/tools/tags.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,17 +1,25 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@migma/mcp",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.2",
|
|
4
4
|
"description": "Migma MCP server — generate, send, validate, and export AI-powered emails from any MCP-compatible client",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"migma-mcp": "./build/index.js"
|
|
8
8
|
},
|
|
9
9
|
"main": "./build/index.js",
|
|
10
|
+
"types": "./build/index.d.ts",
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"types": "./build/index.d.ts",
|
|
14
|
+
"import": "./build/index.js"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
10
17
|
"scripts": {
|
|
11
18
|
"build": "tsc",
|
|
12
19
|
"start": "node build/index.js",
|
|
13
20
|
"dev": "tsc --watch",
|
|
14
|
-
"typecheck": "tsc --noEmit"
|
|
21
|
+
"typecheck": "tsc --noEmit",
|
|
22
|
+
"test": "tsc && node --test \"build/**/*.test.js\""
|
|
15
23
|
},
|
|
16
24
|
"keywords": [
|
|
17
25
|
"migma",
|
|
@@ -23,7 +31,7 @@
|
|
|
23
31
|
"license": "MIT",
|
|
24
32
|
"dependencies": {
|
|
25
33
|
"@modelcontextprotocol/sdk": "^1.9.0",
|
|
26
|
-
"migma": "1.
|
|
34
|
+
"migma": "^1.3.3",
|
|
27
35
|
"zod": "^3.23.0"
|
|
28
36
|
},
|
|
29
37
|
"devDependencies": {
|