@migma/mcp 1.1.1 → 1.3.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 (75) 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 +19 -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 +14 -0
  16. package/build/prompts/index.d.ts.map +1 -0
  17. package/build/prompts/index.js +70 -0
  18. package/build/prompts/index.js.map +1 -0
  19. package/build/tools/__tests__/catalog.test.d.ts +2 -0
  20. package/build/tools/__tests__/catalog.test.d.ts.map +1 -0
  21. package/build/tools/__tests__/catalog.test.js +38 -0
  22. package/build/tools/__tests__/catalog.test.js.map +1 -0
  23. package/build/tools/campaigns.d.ts +1 -1
  24. package/build/tools/campaigns.d.ts.map +1 -1
  25. package/build/tools/campaigns.js +244 -164
  26. package/build/tools/campaigns.js.map +1 -1
  27. package/build/tools/capabilities.d.ts +16 -0
  28. package/build/tools/capabilities.d.ts.map +1 -0
  29. package/build/tools/capabilities.js +108 -0
  30. package/build/tools/capabilities.js.map +1 -0
  31. package/build/tools/contacts.d.ts +1 -1
  32. package/build/tools/contacts.d.ts.map +1 -1
  33. package/build/tools/contacts.js +357 -125
  34. package/build/tools/contacts.js.map +1 -1
  35. package/build/tools/domains.d.ts +1 -1
  36. package/build/tools/domains.d.ts.map +1 -1
  37. package/build/tools/domains.js +99 -66
  38. package/build/tools/domains.js.map +1 -1
  39. package/build/tools/export.d.ts +1 -1
  40. package/build/tools/export.d.ts.map +1 -1
  41. package/build/tools/export.js +97 -78
  42. package/build/tools/export.js.map +1 -1
  43. package/build/tools/generate.d.ts +1 -1
  44. package/build/tools/generate.d.ts.map +1 -1
  45. package/build/tools/generate.js +171 -109
  46. package/build/tools/generate.js.map +1 -1
  47. package/build/tools/metrics.d.ts +4 -0
  48. package/build/tools/metrics.d.ts.map +1 -0
  49. package/build/tools/metrics.js +39 -0
  50. package/build/tools/metrics.js.map +1 -0
  51. package/build/tools/projects.d.ts +1 -1
  52. package/build/tools/projects.d.ts.map +1 -1
  53. package/build/tools/projects.js +89 -77
  54. package/build/tools/projects.js.map +1 -1
  55. package/build/tools/segments.d.ts +1 -1
  56. package/build/tools/segments.d.ts.map +1 -1
  57. package/build/tools/segments.js +91 -67
  58. package/build/tools/segments.js.map +1 -1
  59. package/build/tools/send.d.ts +1 -1
  60. package/build/tools/send.d.ts.map +1 -1
  61. package/build/tools/send.js +72 -64
  62. package/build/tools/send.js.map +1 -1
  63. package/build/tools/tags.d.ts +1 -1
  64. package/build/tools/tags.d.ts.map +1 -1
  65. package/build/tools/tags.js +77 -69
  66. package/build/tools/tags.js.map +1 -1
  67. package/build/tools/validate.d.ts +1 -1
  68. package/build/tools/validate.d.ts.map +1 -1
  69. package/build/tools/validate.js +54 -44
  70. package/build/tools/validate.js.map +1 -1
  71. package/build/tools/webhooks.d.ts +1 -1
  72. package/build/tools/webhooks.d.ts.map +1 -1
  73. package/build/tools/webhooks.js +67 -57
  74. package/build/tools/webhooks.js.map +1 -1
  75. package/package.json +4 -3
@@ -1,169 +1,249 @@
1
1
  import { z } from "zod";
2
- export function registerCampaignTools(server, client, config) {
3
- server.registerTool("migma_list_campaigns", {
4
- title: "List Campaigns",
5
- description: "List campaigns for a project. Filter by status (draft, scheduled, sending, throttled, ab_testing, sent, failed, cancelled).",
6
- inputSchema: z.object({
7
- projectId: z
8
- .string()
9
- .optional()
10
- .describe("Project ID. Local stdio uses MIGMA_PROJECT_ID if not provided; hosted remote clients should pass projectId."),
11
- status: z
12
- .enum(["draft", "scheduled", "sending", "throttled", "ab_testing", "sent", "failed", "cancelled"])
13
- .optional()
14
- .describe("Filter by campaign status"),
15
- page: z.number().optional().describe("Page number (default 1)"),
16
- limit: z.number().optional().describe("Results per page (default 20)"),
17
- archived: z.boolean().optional().describe("Set to true to show only archived campaigns"),
18
- }),
19
- }, async (args) => {
20
- const projectId = args.projectId || config.projectId;
21
- if (!projectId) {
22
- return toolError("projectId is required. Provide projectId, or set MIGMA_PROJECT_ID when using local stdio.");
23
- }
24
- const listParams = {
25
- projectId,
26
- status: args.status,
27
- page: args.page,
28
- limit: args.limit,
29
- archived: args.archived,
30
- };
31
- const { data, error } = await client.campaigns.list(listParams);
32
- if (error)
33
- return toolError(error.message);
34
- return toolResult(data);
35
- });
36
- server.registerTool("migma_create_campaign", {
37
- title: "Create Campaign",
38
- description: "Create a campaign from a generated email. Use emailId for the exact email, especially series slots. The campaign starts in draft status; use migma_send_campaign or migma_schedule_campaign to send it.",
39
- inputSchema: z.object({
40
- projectId: z
41
- .string()
42
- .optional()
43
- .describe("Project ID. Local stdio uses MIGMA_PROJECT_ID if not provided; hosted remote clients should pass projectId."),
44
- name: z.string().describe("Campaign name"),
45
- conversationId: z
46
- .string()
47
- .describe("Conversation ID that owns the generated email"),
48
- emailId: z
49
- .string()
50
- .optional()
51
- .describe("Generated email ID from result.emails[].emailId. Recommended for series slots."),
52
- subject: z
53
- .string()
54
- .optional()
55
- .describe("Email subject (auto-populated from conversation if omitted)"),
56
- preheaderText: z.string().optional().describe("Preheader text"),
57
- from: z.string().describe("Sender email address (e.g. hello@yourbrand.migma.email)"),
58
- fromName: z.string().describe("Sender display name"),
59
- replyTo: z.string().optional().describe("Reply-to email address"),
60
- recipientType: z
61
- .enum(["audience", "tag"])
62
- .describe("Send to a segment (audience) or a tag"),
63
- recipientId: z.string().describe("Segment or tag ID"),
64
- topicId: z.string().optional().describe("Topic ID for preference filtering"),
65
- providerType: z
66
- .enum(["ses", "resend", "sendgrid", "mailgun", "migma"])
67
- .optional()
68
- .describe("Email provider (default: migma)"),
69
- }),
70
- }, async (args) => {
71
- const projectId = args.projectId || config.projectId;
72
- if (!projectId) {
73
- return toolError("projectId is required. Provide projectId, or set MIGMA_PROJECT_ID when using local stdio.");
74
- }
75
- const params = {
76
- projectId,
77
- name: args.name,
78
- conversationId: args.conversationId,
79
- emailId: args.emailId,
80
- subject: args.subject,
81
- preheaderText: args.preheaderText,
82
- from: args.from,
83
- fromName: args.fromName,
84
- replyTo: args.replyTo,
85
- recipientType: args.recipientType,
86
- recipientId: args.recipientId,
87
- topicId: args.topicId,
88
- providerType: args.providerType,
89
- };
90
- const { data, error } = await client.campaigns.create(params);
91
- if (error)
92
- return toolError(error.message);
93
- return toolResult(data);
94
- });
95
- server.registerTool("migma_send_campaign", {
96
- title: "Send Campaign",
97
- description: "Send a draft or scheduled campaign immediately. The campaign must be in 'draft' or 'scheduled' status.",
98
- inputSchema: z.object({
99
- campaignId: z.string().describe("Campaign ID to send"),
100
- }),
101
- }, async (args) => {
102
- const { data, error } = await client.campaigns.send(args.campaignId);
103
- if (error)
104
- return toolError(error.message);
105
- return toolResult(data);
106
- });
107
- server.registerTool("migma_schedule_campaign", {
108
- title: "Schedule Campaign",
109
- description: "Schedule a campaign for future delivery. The scheduledAt time must be in the future.",
110
- inputSchema: z.object({
111
- campaignId: z.string().describe("Campaign ID to schedule"),
112
- scheduledAt: z
113
- .string()
114
- .describe("ISO 8601 datetime for sending (e.g. 2026-03-15T14:00:00Z)"),
115
- scheduledTimezone: z
116
- .string()
117
- .optional()
118
- .describe("IANA timezone (e.g. America/New_York). Defaults to UTC."),
119
- }),
120
- }, async (args) => {
121
- const { data, error } = await client.campaigns.schedule(args.campaignId, {
122
- scheduledAt: args.scheduledAt,
123
- scheduledTimezone: args.scheduledTimezone,
2
+ import { canUse } from "../permissions.js";
3
+ export function registerCampaignTools(server, client, config, grantedPermissions) {
4
+ if (canUse(grantedPermissions, ["campaign:read"])) {
5
+ server.registerTool("migma_list_campaigns", {
6
+ title: "List Campaigns",
7
+ description: "List campaigns for a project. Filter by status (draft, pending_review, scheduled, sending, throttled, ab_testing, sent, failed, cancelled).",
8
+ annotations: { readOnlyHint: true },
9
+ inputSchema: z.object({
10
+ projectId: z
11
+ .string()
12
+ .optional()
13
+ .describe("Project ID. Local stdio uses MIGMA_PROJECT_ID if not provided; hosted remote clients should pass projectId."),
14
+ status: z
15
+ .enum(["draft", "pending_review", "scheduled", "sending", "throttled", "ab_testing", "sent", "failed", "cancelled"])
16
+ .optional()
17
+ .describe("Filter by campaign status"),
18
+ page: z.number().optional().describe("Page number (default 1)"),
19
+ limit: z.number().optional().describe("Results per page (default 20)"),
20
+ archived: z.boolean().optional().describe("Set to true to show only archived campaigns"),
21
+ }),
22
+ }, async (args) => {
23
+ const projectId = args.projectId || config.projectId;
24
+ if (!projectId) {
25
+ return toolError("projectId is required. Provide projectId, or set MIGMA_PROJECT_ID when using local stdio.");
26
+ }
27
+ const listParams = {
28
+ projectId,
29
+ status: args.status,
30
+ page: args.page,
31
+ limit: args.limit,
32
+ archived: args.archived,
33
+ };
34
+ const { data, error } = await client.campaigns.list(listParams);
35
+ if (error)
36
+ return toolError(error.message);
37
+ return toolResult(data);
124
38
  });
125
- if (error)
126
- return toolError(error.message);
127
- return toolResult(data);
128
- });
129
- server.registerTool("migma_cancel_campaign", {
130
- title: "Cancel Campaign",
131
- description: "Cancel a scheduled campaign. Only campaigns with 'scheduled' status can be cancelled.",
132
- inputSchema: z.object({
133
- campaignId: z.string().describe("Campaign ID to cancel"),
134
- }),
135
- }, async (args) => {
136
- const { data, error } = await client.campaigns.cancel(args.campaignId);
137
- if (error)
138
- return toolError(error.message);
139
- return toolResult(data);
140
- });
141
- server.registerTool("migma_archive_campaign", {
142
- title: "Archive Campaign",
143
- description: "Archive a campaign to hide it from the default list. Works for any status.",
144
- inputSchema: z.object({
145
- campaignId: z.string().describe("Campaign ID to archive"),
146
- }),
147
- }, async (args) => {
148
- const campaigns = client.campaigns;
149
- const { data, error } = await campaigns.archive(args.campaignId);
150
- if (error)
151
- return toolError(error.message);
152
- return toolResult(data);
153
- });
154
- server.registerTool("migma_unarchive_campaign", {
155
- title: "Unarchive Campaign",
156
- description: "Unarchive a previously archived campaign, restoring it to the default list.",
157
- inputSchema: z.object({
158
- campaignId: z.string().describe("Campaign ID to unarchive"),
159
- }),
160
- }, async (args) => {
161
- const campaigns = client.campaigns;
162
- const { data, error } = await campaigns.unarchive(args.campaignId);
163
- if (error)
164
- return toolError(error.message);
165
- return toolResult(data);
166
- });
39
+ }
40
+ if (canUse(grantedPermissions, ["campaign:write"])) {
41
+ server.registerTool("migma_create_campaign", {
42
+ title: "Create Campaign",
43
+ description: "Create a campaign from a generated email. Use emailId for the exact email, especially series slots. The campaign starts in draft status; use migma_send_campaign or migma_schedule_campaign to send it.",
44
+ inputSchema: z.object({
45
+ projectId: z
46
+ .string()
47
+ .optional()
48
+ .describe("Project ID. Local stdio uses MIGMA_PROJECT_ID if not provided; hosted remote clients should pass projectId."),
49
+ name: z.string().describe("Campaign name"),
50
+ conversationId: z
51
+ .string()
52
+ .describe("Conversation ID that owns the generated email"),
53
+ emailId: z
54
+ .string()
55
+ .optional()
56
+ .describe("Generated email ID from result.emails[].emailId. Recommended for series slots."),
57
+ subject: z
58
+ .string()
59
+ .optional()
60
+ .describe("Email subject (auto-populated from conversation if omitted)"),
61
+ preheaderText: z.string().optional().describe("Preheader text"),
62
+ from: z.string().describe("Sender email address (e.g. hello@yourbrand.migma.email)"),
63
+ fromName: z.string().describe("Sender display name"),
64
+ replyTo: z.string().optional().describe("Reply-to email address"),
65
+ recipientType: z
66
+ .enum(["audience", "tag"])
67
+ .describe("Send to a segment (audience) or a tag"),
68
+ recipientId: z.string().describe("Segment or tag ID"),
69
+ topicId: z.string().optional().describe("Topic ID for preference filtering"),
70
+ providerType: z
71
+ .enum(["ses", "resend", "sendgrid", "mailgun", "migma"])
72
+ .optional()
73
+ .describe("Email provider (default: migma)"),
74
+ idempotency_key: z
75
+ .string()
76
+ .max(100)
77
+ .optional()
78
+ .describe("Optional Idempotency-Key for safe retries; same key+body within 24h replays the original result."),
79
+ }),
80
+ }, async (args) => {
81
+ const projectId = args.projectId || config.projectId;
82
+ if (!projectId) {
83
+ return toolError("projectId is required. Provide projectId, or set MIGMA_PROJECT_ID when using local stdio.");
84
+ }
85
+ const params = {
86
+ projectId,
87
+ name: args.name,
88
+ conversationId: args.conversationId,
89
+ emailId: args.emailId,
90
+ subject: args.subject,
91
+ preheaderText: args.preheaderText,
92
+ from: args.from,
93
+ fromName: args.fromName,
94
+ replyTo: args.replyTo,
95
+ recipientType: args.recipientType,
96
+ recipientId: args.recipientId,
97
+ topicId: args.topicId,
98
+ providerType: args.providerType,
99
+ };
100
+ const { data, error } = await client.campaigns.create(params, args.idempotency_key ? { idempotencyKey: args.idempotency_key } : undefined);
101
+ if (error)
102
+ return toolError(error.message);
103
+ return toolResult(data);
104
+ });
105
+ }
106
+ if (canUse(grantedPermissions, ["campaign:write"])) {
107
+ server.registerTool("migma_send_campaign", {
108
+ title: "Send Campaign",
109
+ description: "Send a draft or scheduled campaign immediately. The campaign must be in 'draft' or 'scheduled' status.",
110
+ inputSchema: z.object({
111
+ campaignId: z.string().describe("Campaign ID to send"),
112
+ idempotency_key: z
113
+ .string()
114
+ .max(100)
115
+ .optional()
116
+ .describe("Optional Idempotency-Key for safe retries; same key+body within 24h replays the original result."),
117
+ }),
118
+ }, async (args) => {
119
+ const { data, error } = await client.campaigns.send(args.campaignId, args.idempotency_key ? { idempotencyKey: args.idempotency_key } : undefined);
120
+ if (error)
121
+ return toolError(error.message);
122
+ return toolResult(data);
123
+ });
124
+ }
125
+ if (canUse(grantedPermissions, ["campaign:write"])) {
126
+ server.registerTool("migma_schedule_campaign", {
127
+ title: "Schedule Campaign",
128
+ description: "Schedule a campaign for future delivery. The scheduledAt time must be in the future.",
129
+ inputSchema: z.object({
130
+ campaignId: z.string().describe("Campaign ID to schedule"),
131
+ scheduledAt: z
132
+ .string()
133
+ .describe("ISO 8601 datetime for sending (e.g. 2026-03-15T14:00:00Z)"),
134
+ scheduledTimezone: z
135
+ .string()
136
+ .optional()
137
+ .describe("IANA timezone (e.g. America/New_York). Defaults to UTC."),
138
+ idempotency_key: z
139
+ .string()
140
+ .max(100)
141
+ .optional()
142
+ .describe("Optional Idempotency-Key for safe retries; same key+body within 24h replays the original result."),
143
+ }),
144
+ }, async (args) => {
145
+ const { data, error } = await client.campaigns.schedule(args.campaignId, {
146
+ scheduledAt: args.scheduledAt,
147
+ scheduledTimezone: args.scheduledTimezone,
148
+ }, args.idempotency_key ? { idempotencyKey: args.idempotency_key } : undefined);
149
+ if (error)
150
+ return toolError(error.message);
151
+ return toolResult(data);
152
+ });
153
+ }
154
+ if (canUse(grantedPermissions, ["campaign:read"])) {
155
+ server.registerTool("migma_get_campaign_stats", {
156
+ title: "Get Campaign Stats",
157
+ description: "Aggregated engagement metrics for a campaign: totalSent, totalDelivered, uniqueOpens/totalOpens, uniqueClicks/totalClicks, unsubscribes, bounces, openRate, clickRate (0-100), and lastUpdated. May include botOpens/botClicks/mppOpens (Apple Mail Privacy Protection and bot detection) when available. Stats are sourced from the tracking worker and may be cached or slightly stale.",
158
+ annotations: { readOnlyHint: true },
159
+ inputSchema: z.object({
160
+ campaignId: z.string().describe("Campaign ID to fetch stats for"),
161
+ }),
162
+ }, async (args) => {
163
+ const { data, error } = await client.campaigns.stats(args.campaignId);
164
+ if (error)
165
+ return toolError(error.message);
166
+ return toolResult(data);
167
+ });
168
+ }
169
+ if (canUse(grantedPermissions, ["campaign:read"])) {
170
+ server.registerTool("migma_get_campaign_logs", {
171
+ title: "Get Campaign Logs",
172
+ description: "Per-recipient delivery logs for a campaign, cursor-paginated. Each row comes straight from the tracking worker's D1 table, so fields are snake_case: to_email, from_email, subject, status, opened_at, clicked_at, open_count, click_count, bounce_type, complaint_type, suppression_type, created_at. Returns { emails, nextCursor, hasMore }.",
173
+ annotations: { readOnlyHint: true },
174
+ inputSchema: z.object({
175
+ campaignId: z.string().describe("Campaign ID to fetch logs for"),
176
+ limit: z
177
+ .number()
178
+ .int()
179
+ .min(1)
180
+ .max(100)
181
+ .optional()
182
+ .describe("Max rows per page (default 20, capped at 100)"),
183
+ cursor: z
184
+ .string()
185
+ .optional()
186
+ .describe("Pagination cursor from a previous response's nextCursor"),
187
+ status: z
188
+ .enum(["delivered", "opened", "clicked", "bounced", "complained"])
189
+ .optional()
190
+ .describe("Filter rows by delivery/engagement status"),
191
+ }),
192
+ }, async (args) => {
193
+ const { data, error } = await client.campaigns.logs(args.campaignId, {
194
+ limit: args.limit,
195
+ cursor: args.cursor,
196
+ status: args.status,
197
+ });
198
+ if (error)
199
+ return toolError(error.message);
200
+ return toolResult(data);
201
+ });
202
+ }
203
+ if (canUse(grantedPermissions, ["campaign:write"])) {
204
+ server.registerTool("migma_cancel_campaign", {
205
+ title: "Cancel Campaign",
206
+ description: "Cancel a scheduled campaign. Only campaigns with 'scheduled' status can be cancelled.",
207
+ inputSchema: z.object({
208
+ campaignId: z.string().describe("Campaign ID to cancel"),
209
+ }),
210
+ }, async (args) => {
211
+ const { data, error } = await client.campaigns.cancel(args.campaignId);
212
+ if (error)
213
+ return toolError(error.message);
214
+ return toolResult(data);
215
+ });
216
+ }
217
+ if (canUse(grantedPermissions, ["campaign:write"])) {
218
+ server.registerTool("migma_archive_campaign", {
219
+ title: "Archive Campaign",
220
+ description: "Archive a campaign to hide it from the default list. Works for any status.",
221
+ inputSchema: z.object({
222
+ campaignId: z.string().describe("Campaign ID to archive"),
223
+ }),
224
+ }, async (args) => {
225
+ const campaigns = client.campaigns;
226
+ const { data, error } = await campaigns.archive(args.campaignId);
227
+ if (error)
228
+ return toolError(error.message);
229
+ return toolResult(data);
230
+ });
231
+ }
232
+ if (canUse(grantedPermissions, ["campaign:write"])) {
233
+ server.registerTool("migma_unarchive_campaign", {
234
+ title: "Unarchive Campaign",
235
+ description: "Unarchive a previously archived campaign, restoring it to the default list.",
236
+ inputSchema: z.object({
237
+ campaignId: z.string().describe("Campaign ID to unarchive"),
238
+ }),
239
+ }, async (args) => {
240
+ const campaigns = client.campaigns;
241
+ const { data, error } = await campaigns.unarchive(args.campaignId);
242
+ if (error)
243
+ return toolError(error.message);
244
+ return toolResult(data);
245
+ });
246
+ }
167
247
  }
168
248
  function toolResult(data) {
169
249
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"campaigns.js","sourceRoot":"","sources":["../../src/tools/campaigns.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"campaigns.js","sourceRoot":"","sources":["../../src/tools/campaigns.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export interface ToolCatalogEntry {
3
+ name: string;
4
+ domain: string;
5
+ summary: string;
6
+ write: boolean;
7
+ idempotent: boolean;
8
+ }
9
+ /**
10
+ * Single source of truth for the tools this server exposes. A test asserts this
11
+ * matches the actually-registered tool names so the catalog can't silently drift.
12
+ * `idempotent` is true only for write tools that accept an `idempotency_key`.
13
+ */
14
+ export declare const TOOL_CATALOG: ToolCatalogEntry[];
15
+ export declare function registerCapabilitiesTool(server: McpServer): void;
16
+ //# sourceMappingURL=capabilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../src/tools/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,gBAAgB,EA+E1C,CAAC;AAEF,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,QAwCzD"}
@@ -0,0 +1,108 @@
1
+ import { createRequire } from "node:module";
2
+ import { z } from "zod";
3
+ import { WORKFLOWS } from "../prompts/index.js";
4
+ /**
5
+ * Single source of truth for the tools this server exposes. A test asserts this
6
+ * matches the actually-registered tool names so the catalog can't silently drift.
7
+ * `idempotent` is true only for write tools that accept an `idempotency_key`.
8
+ */
9
+ export const TOOL_CATALOG = [
10
+ // Projects / brands
11
+ { name: "migma_list_projects", domain: "projects", summary: "List Migma projects (brands) with ids, names, domains, and statuses.", write: false, idempotent: false },
12
+ { name: "migma_get_project", domain: "projects", summary: "Get a project's brand details: colors, fonts, logos, tone of voice.", write: false, idempotent: false },
13
+ { name: "migma_import_brand", domain: "projects", summary: "Import a brand from website URLs and poll until the import completes.", write: true, idempotent: false },
14
+ { name: "migma_get_field_catalog", domain: "projects", summary: "List subscriber fields, fill rates, and example values for template variables.", write: false, idempotent: false },
15
+ // Email generation
16
+ { name: "migma_generate_email", domain: "emails", summary: "Generate one email or a series from a prompt using the project's brand.", write: true, idempotent: false },
17
+ { name: "migma_get_generation_status", domain: "emails", summary: "Check a generation's status; returns per-email ids, HTML, subjects, screenshots.", write: false, idempotent: false },
18
+ { name: "migma_send_test_email", domain: "emails", summary: "Send a test email for a generated email id or single-email conversation.", write: true, idempotent: false },
19
+ { name: "migma_get_email", domain: "emails", summary: "Fetch one generated email by emailId with HTML, subject, screenshots, and variable requirements.", write: false, idempotent: false },
20
+ { name: "migma_edit_email", domain: "emails", summary: "Edit a generated email with a natural-language prompt; returns the new version.", write: true, idempotent: false },
21
+ { name: "migma_get_email_metrics", domain: "emails", summary: "Aggregate performance for one generated email across its API sends: delivery, opens, clicks, bounces, unsubscribes + time series.", write: false, idempotent: false },
22
+ { name: "migma_get_email_logs", domain: "emails", summary: "Per-recipient send log for one generated email, cursor-paginated.", write: false, idempotent: false },
23
+ // Sending
24
+ { name: "migma_send_email", domain: "sending", summary: "Send a generated email to an individual, tag, or segment.", write: true, idempotent: true },
25
+ { name: "migma_get_sending_metrics", domain: "sending", summary: "Get account sending usage, limits, remaining capacity, and monthly delivery outcomes.", write: false, idempotent: false },
26
+ // Campaigns
27
+ { name: "migma_list_campaigns", domain: "campaigns", summary: "List campaigns for a project, optionally filtered by status.", write: false, idempotent: false },
28
+ { name: "migma_create_campaign", domain: "campaigns", summary: "Create a draft campaign from a generated email.", write: true, idempotent: true },
29
+ { name: "migma_send_campaign", domain: "campaigns", summary: "Send a draft or scheduled campaign immediately.", write: true, idempotent: true },
30
+ { name: "migma_schedule_campaign", domain: "campaigns", summary: "Schedule a campaign for future delivery.", write: true, idempotent: true },
31
+ { name: "migma_cancel_campaign", domain: "campaigns", summary: "Cancel a scheduled campaign.", write: true, idempotent: false },
32
+ { name: "migma_archive_campaign", domain: "campaigns", summary: "Archive a campaign to hide it from the default list.", write: true, idempotent: false },
33
+ { name: "migma_unarchive_campaign", domain: "campaigns", summary: "Restore a previously archived campaign.", write: true, idempotent: false },
34
+ { name: "migma_get_campaign_stats", domain: "campaigns", summary: "Aggregated engagement metrics for a campaign (cached, may be slightly stale).", write: false, idempotent: false },
35
+ { name: "migma_get_campaign_logs", domain: "campaigns", summary: "Per-recipient delivery logs for a campaign, cursor-paginated.", write: false, idempotent: false },
36
+ // Validation
37
+ { name: "migma_validate_email", domain: "validation", summary: "Run all validations: client compatibility, links, spelling, spam score.", write: false, idempotent: false },
38
+ { name: "migma_validate_compatibility", domain: "validation", summary: "Check rendering compatibility across 30+ email clients.", write: false, idempotent: false },
39
+ { name: "migma_validate_deliverability", domain: "validation", summary: "Analyze spam triggers and predict inbox placement.", write: false, idempotent: false },
40
+ // Export
41
+ { name: "migma_export_html", domain: "export", summary: "Export a generated email as production-ready HTML.", write: false, idempotent: false },
42
+ { name: "migma_export_mjml", domain: "export", summary: "Export a generated email as MJML markup.", write: false, idempotent: false },
43
+ { name: "migma_export_pdf", domain: "export", summary: "Export a generated email as a PDF document.", write: false, idempotent: false },
44
+ { name: "migma_export_klaviyo", domain: "export", summary: "Export a generated email in Klaviyo-compatible format.", write: false, idempotent: false },
45
+ { name: "migma_export_mailchimp", domain: "export", summary: "Export a generated email in Mailchimp-compatible format.", write: false, idempotent: false },
46
+ { name: "migma_export_hubspot", domain: "export", summary: "Export a generated email in HubSpot-compatible format.", write: false, idempotent: false },
47
+ // Domains
48
+ { name: "migma_list_domains", domain: "domains", summary: "List all sending domains (custom and managed).", write: false, idempotent: false },
49
+ { name: "migma_create_managed_domain", domain: "domains", summary: "Create an instant managed sending domain with no DNS setup.", write: true, idempotent: false },
50
+ { name: "migma_verify_domain", domain: "domains", summary: "Verify DNS records for a custom sending domain.", write: true, idempotent: false },
51
+ { name: "migma_provision_stream", domain: "domains", summary: "Provision one transactional or marketing sending identity on a domain.", write: true, idempotent: false },
52
+ { name: "migma_setup_domain", domain: "domains", summary: "Provision both transactional and marketing identities on a domain in one call.", write: true, idempotent: false },
53
+ // Contacts
54
+ { name: "migma_list_contacts", domain: "contacts", summary: "List contacts with optional filters and pagination.", write: false, idempotent: false },
55
+ { name: "migma_add_contact", domain: "contacts", summary: "Create a new contact/subscriber.", write: true, idempotent: true },
56
+ { name: "migma_bulk_import_contacts", domain: "contacts", summary: "Bulk import contacts from structured data.", write: true, idempotent: true },
57
+ { name: "migma_create_contact_import", domain: "contacts", summary: "Import contacts from a CSV file or CSV text; runs in the background.", write: true, idempotent: false },
58
+ { name: "migma_get_contact_import", domain: "contacts", summary: "Get a CSV contact import's status and counts.", write: false, idempotent: false },
59
+ { name: "migma_get_contact", domain: "contacts", summary: "Get details about a contact by id.", write: false, idempotent: false },
60
+ { name: "migma_remove_contact", domain: "contacts", summary: "Delete a contact by id.", write: true, idempotent: false },
61
+ { name: "migma_batch_delete_contacts_by_email", domain: "contacts", summary: "Delete up to 1000 contacts by email in one call.", write: true, idempotent: false },
62
+ // Tags
63
+ { name: "migma_list_tags", domain: "tags", summary: "List all tags for a project.", write: false, idempotent: false },
64
+ { name: "migma_create_tag", domain: "tags", summary: "Create a tag for organizing contacts.", write: true, idempotent: false },
65
+ { name: "migma_delete_tag", domain: "tags", summary: "Delete a tag by id.", write: true, idempotent: false },
66
+ // Segments
67
+ { name: "migma_list_segments", domain: "segments", summary: "List all audience segments for a project.", write: false, idempotent: false },
68
+ { name: "migma_create_segment", domain: "segments", summary: "Create an audience segment with optional filters.", write: true, idempotent: false },
69
+ { name: "migma_delete_segment", domain: "segments", summary: "Delete a segment by id.", write: true, idempotent: false },
70
+ // Webhooks
71
+ { name: "migma_list_webhooks", domain: "webhooks", summary: "List all configured webhooks.", write: false, idempotent: false },
72
+ { name: "migma_create_webhook", domain: "webhooks", summary: "Create a webhook to receive event notifications.", write: true, idempotent: false },
73
+ { name: "migma_test_webhook", domain: "webhooks", summary: "Send a test event to a webhook endpoint.", write: true, idempotent: false },
74
+ { name: "migma_delete_webhook", domain: "webhooks", summary: "Delete a webhook by id.", write: true, idempotent: false },
75
+ // Meta
76
+ { name: "migma_get_capabilities", domain: "meta", summary: "Self-describe this server: tools, workflows, idempotency, and brand scoping. Call this first.", write: false, idempotent: false },
77
+ ];
78
+ export function registerCapabilitiesTool(server) {
79
+ const { version } = createRequire(import.meta.url)("../../package.json");
80
+ server.registerTool("migma_get_capabilities", {
81
+ title: "Get Capabilities",
82
+ description: "Self-describe this server: the full tool catalog, guided workflows, idempotency contract, and brand-scoping rules. Call this first so you can plan a sequence of tool calls.",
83
+ annotations: { readOnlyHint: true },
84
+ inputSchema: z.object({}),
85
+ }, async () => {
86
+ const catalog = {
87
+ server: "migma",
88
+ version,
89
+ brandScoping: "API key is account-scoped; pass projectId per tool (or set MIGMA_PROJECT_ID). Resources in another project return 404.",
90
+ idempotency: {
91
+ header: "Idempotency-Key",
92
+ maxLength: 100,
93
+ ttlHours: 24,
94
+ conflictCode: "IDEMPOTENCY_CONFLICT",
95
+ },
96
+ tools: TOOL_CATALOG,
97
+ workflows: WORKFLOWS,
98
+ errors: "Tools return text; failures include the API error message. HTTP errors map to Migma error responses.",
99
+ docs: "https://docs.migma.ai",
100
+ };
101
+ return {
102
+ content: [
103
+ { type: "text", text: JSON.stringify(catalog, null, 2) },
104
+ ],
105
+ };
106
+ });
107
+ }
108
+ //# sourceMappingURL=capabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/tools/capabilities.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 registerContactTools(server: McpServer, client: Migma, config: Config): void;
4
+ export declare function registerContactTools(server: McpServer, client: Migma, config: Config, grantedPermissions?: string[]): void;
5
5
  //# sourceMappingURL=contacts.d.ts.map
@@ -1 +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;AAI3C,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,KAAK,EACb,MAAM,EAAE,MAAM,QA2Jf"}
1
+ {"version":3,"file":"contacts.d.ts","sourceRoot":"","sources":["../../src/tools/contacts.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAyB,KAAK,EAAE,MAAM,OAAO,CAAC;AAE1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAS3C,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,KAAK,EACb,MAAM,EAAE,MAAM,EACd,kBAAkB,CAAC,EAAE,MAAM,EAAE,QAsY9B"}