@migma/mcp 1.9.0 → 1.9.1-automations.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/README.md +22 -18
  2. package/build/index.d.ts.map +1 -1
  3. package/build/index.js +11 -3
  4. package/build/index.js.map +1 -1
  5. package/build/prompts/index.d.ts +1 -0
  6. package/build/prompts/index.d.ts.map +1 -1
  7. package/build/prompts/index.js +20 -5
  8. package/build/prompts/index.js.map +1 -1
  9. package/build/tools/__tests__/automations.test.d.ts +2 -0
  10. package/build/tools/__tests__/automations.test.d.ts.map +1 -0
  11. package/build/tools/__tests__/automations.test.js +259 -0
  12. package/build/tools/__tests__/automations.test.js.map +1 -0
  13. package/build/tools/__tests__/brand.test.js +0 -25
  14. package/build/tools/__tests__/brand.test.js.map +1 -1
  15. package/build/tools/__tests__/campaign-recipients.test.js +2 -5
  16. package/build/tools/__tests__/campaign-recipients.test.js.map +1 -1
  17. package/build/tools/__tests__/catalog.test.js +20 -26
  18. package/build/tools/__tests__/catalog.test.js.map +1 -1
  19. package/build/tools/__tests__/forms.test.d.ts +2 -0
  20. package/build/tools/__tests__/forms.test.d.ts.map +1 -0
  21. package/build/tools/__tests__/forms.test.js +127 -0
  22. package/build/tools/__tests__/forms.test.js.map +1 -0
  23. package/build/tools/__tests__/provider-imports.test.js +0 -23
  24. package/build/tools/__tests__/provider-imports.test.js.map +1 -1
  25. package/build/tools/__tests__/review-annotations.test.js +10 -4
  26. package/build/tools/__tests__/review-annotations.test.js.map +1 -1
  27. package/build/tools/__tests__/websites.test.d.ts +2 -0
  28. package/build/tools/__tests__/websites.test.d.ts.map +1 -0
  29. package/build/tools/__tests__/websites.test.js +138 -0
  30. package/build/tools/__tests__/websites.test.js.map +1 -0
  31. package/build/tools/automations.d.ts +22 -0
  32. package/build/tools/automations.d.ts.map +1 -0
  33. package/build/tools/automations.js +134 -0
  34. package/build/tools/automations.js.map +1 -0
  35. package/build/tools/brand.d.ts.map +1 -1
  36. package/build/tools/brand.js +7 -10
  37. package/build/tools/brand.js.map +1 -1
  38. package/build/tools/campaigns.d.ts +0 -2
  39. package/build/tools/campaigns.d.ts.map +1 -1
  40. package/build/tools/campaigns.js +13 -144
  41. package/build/tools/campaigns.js.map +1 -1
  42. package/build/tools/capabilities.d.ts +3 -1
  43. package/build/tools/capabilities.d.ts.map +1 -1
  44. package/build/tools/capabilities.js +54 -6
  45. package/build/tools/capabilities.js.map +1 -1
  46. package/build/tools/contacts.d.ts.map +1 -1
  47. package/build/tools/contacts.js +15 -30
  48. package/build/tools/contacts.js.map +1 -1
  49. package/build/tools/context.js +1 -1
  50. package/build/tools/context.js.map +1 -1
  51. package/build/tools/forms.d.ts +6 -0
  52. package/build/tools/forms.d.ts.map +1 -0
  53. package/build/tools/forms.js +97 -0
  54. package/build/tools/forms.js.map +1 -0
  55. package/build/tools/generate.js +2 -2
  56. package/build/tools/generate.js.map +1 -1
  57. package/build/tools/send.d.ts.map +1 -1
  58. package/build/tools/send.js +8 -92
  59. package/build/tools/send.js.map +1 -1
  60. package/build/tools/websites.d.ts +4 -0
  61. package/build/tools/websites.d.ts.map +1 -0
  62. package/build/tools/websites.js +114 -0
  63. package/build/tools/websites.js.map +1 -0
  64. package/package.json +3 -3
  65. package/build/tools/__tests__/campaign-schedule.test.d.ts +0 -2
  66. package/build/tools/__tests__/campaign-schedule.test.d.ts.map +0 -1
  67. package/build/tools/__tests__/campaign-schedule.test.js +0 -43
  68. package/build/tools/__tests__/campaign-schedule.test.js.map +0 -1
  69. package/build/tools/__tests__/send-confirmation.test.d.ts +0 -2
  70. package/build/tools/__tests__/send-confirmation.test.d.ts.map +0 -1
  71. package/build/tools/__tests__/send-confirmation.test.js +0 -170
  72. package/build/tools/__tests__/send-confirmation.test.js.map +0 -1
  73. package/build/tools/send-confirmation.d.ts +0 -64
  74. package/build/tools/send-confirmation.d.ts.map +0 -1
  75. package/build/tools/send-confirmation.js +0 -150
  76. package/build/tools/send-confirmation.js.map +0 -1
@@ -0,0 +1,138 @@
1
+ import assert from "node:assert/strict";
2
+ import test from "node:test";
3
+ import { createMigmaMcpServer } from "../../index.js";
4
+ const PROJECT_ID = "665f1e928c2a9e4d8f123123";
5
+ const WEBSITE_ID = "665f1e928c2a9e4d8f123456";
6
+ const site = {
7
+ id: WEBSITE_ID,
8
+ projectId: PROJECT_ID,
9
+ name: "Main storefront",
10
+ origins: ["https://shop.example.com"],
11
+ environment: "test",
12
+ status: "enabled",
13
+ collectorUrl: "https://collector.example.com",
14
+ createdAt: "2026-10-01T08:00:00.000Z",
15
+ updatedAt: "2026-10-01T08:00:00.000Z",
16
+ };
17
+ function registeredTools(client, permissions) {
18
+ return createMigmaMcpServer({
19
+ config: { apiKey: "test-key" },
20
+ client: client,
21
+ permissions,
22
+ })._registeredTools;
23
+ }
24
+ test("website tools follow audience scopes and never expose identity issuance", () => {
25
+ const client = { websites: {} };
26
+ const read = registeredTools(client, ["audience:read"]);
27
+ assert.ok(read.migma_list_websites);
28
+ assert.ok(read.migma_get_website_events);
29
+ assert.equal(read.migma_create_website, undefined);
30
+ assert.equal(read.migma_update_website, undefined);
31
+ const write = registeredTools(client, ["audience:write"]);
32
+ assert.ok(write.migma_create_website);
33
+ assert.ok(write.migma_update_website);
34
+ assert.equal(write.migma_list_websites, undefined);
35
+ assert.equal(write.migma_issue_website_identity, undefined);
36
+ });
37
+ test("website schemas enforce exact origins, IDs, bounds, and updates", () => {
38
+ const tools = registeredTools({ websites: {} });
39
+ const create = tools.migma_create_website.inputSchema;
40
+ assert.equal(create.safeParse({
41
+ projectId: PROJECT_ID,
42
+ name: "Main storefront",
43
+ origins: ["https://shop.example.com"],
44
+ environment: "test",
45
+ }).success, true);
46
+ assert.equal(create.safeParse({
47
+ projectId: PROJECT_ID,
48
+ name: "Main storefront",
49
+ origins: ["http://shop.example.com"],
50
+ environment: "test",
51
+ }).success, false);
52
+ assert.equal(create.safeParse({
53
+ projectId: PROJECT_ID,
54
+ name: "Main storefront",
55
+ origins: ["https://shop.example.com/path"],
56
+ environment: "test",
57
+ }).success, false);
58
+ assert.equal(create.safeParse({
59
+ projectId: PROJECT_ID,
60
+ name: "Main storefront",
61
+ origins: ["not a URL"],
62
+ environment: "test",
63
+ }).success, false);
64
+ assert.equal(create.safeParse({ name: "Missing project", origins: ["https://shop.example.com"], environment: "test" }).success, false);
65
+ assert.equal(tools.migma_update_website.inputSchema.safeParse({ websiteId: WEBSITE_ID }).success, false);
66
+ assert.equal(tools.migma_update_website.inputSchema.safeParse({ websiteId: WEBSITE_ID, status: "disabled" }).success, true);
67
+ });
68
+ test("website tools call the SDK with one stable creation key", async () => {
69
+ const calls = [];
70
+ const client = {
71
+ websites: {
72
+ async list(projectId) {
73
+ calls.push(["list", projectId]);
74
+ return { data: [site], error: null };
75
+ },
76
+ async create(input, key) {
77
+ calls.push(["create", input, key]);
78
+ return { data: site, error: null };
79
+ },
80
+ async update(id, input) {
81
+ calls.push(["update", id, input]);
82
+ return { data: { ...site, ...input }, error: null };
83
+ },
84
+ async events(id) {
85
+ calls.push(["events", id]);
86
+ return { data: { status: "available", events: [], sampleWindowHours: 24, sampledRows: 1000 }, error: null };
87
+ },
88
+ },
89
+ };
90
+ const tools = registeredTools(client);
91
+ await tools.migma_list_websites.handler({ projectId: PROJECT_ID }, {});
92
+ await tools.migma_create_website.handler({
93
+ projectId: PROJECT_ID,
94
+ name: site.name,
95
+ origins: site.origins,
96
+ environment: "test",
97
+ idempotency_key: "storefront-setup-1",
98
+ }, {});
99
+ await tools.migma_update_website.handler({ websiteId: WEBSITE_ID, status: "disabled" }, {});
100
+ const history = await tools.migma_get_website_events.handler({ websiteId: WEBSITE_ID }, {});
101
+ assert.deepEqual(calls, [
102
+ ["list", PROJECT_ID],
103
+ ["create", { projectId: PROJECT_ID, name: site.name, origins: site.origins, environment: "test" }, "storefront-setup-1"],
104
+ ["update", WEBSITE_ID, { status: "disabled" }],
105
+ ["events", WEBSITE_ID],
106
+ ]);
107
+ assert.deepEqual(JSON.parse(history.content[0].text), {
108
+ status: "available",
109
+ events: [],
110
+ sampleWindowHours: 24,
111
+ sampledRows: 1000,
112
+ });
113
+ });
114
+ test("website creation without a caller key uses separate keys and does not advertise safe replay", async () => {
115
+ const keys = [];
116
+ const tools = registeredTools({
117
+ websites: {
118
+ async create(_input, key) {
119
+ keys.push(key);
120
+ return { data: site, error: null };
121
+ },
122
+ },
123
+ }, ["audience:write"]);
124
+ const input = {
125
+ projectId: PROJECT_ID,
126
+ name: site.name,
127
+ origins: site.origins,
128
+ environment: "test",
129
+ };
130
+ const result = await tools.migma_create_website.handler(input, {});
131
+ await tools.migma_create_website.handler(input, {});
132
+ assert.equal(result.isError, undefined);
133
+ assert.equal(tools.migma_create_website.annotations?.idempotentHint, false);
134
+ assert.equal(keys.length, 2);
135
+ assert.notEqual(keys[0], keys[1]);
136
+ assert.match(keys[0], /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/);
137
+ });
138
+ //# sourceMappingURL=websites.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websites.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/websites.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { MigmaClient, type Migma } from 'migma';
3
+ import type { Config } from '../config.js';
4
+ /** Public API failures keep their status, server code and data for the agent. */
5
+ export declare function publicApiToolError(error: unknown): {
6
+ content: {
7
+ type: "text";
8
+ text: string;
9
+ }[];
10
+ structuredContent: {
11
+ error: {
12
+ data?: Record<string, unknown> | undefined;
13
+ code?: string | undefined;
14
+ statusCode?: number | undefined;
15
+ message: string;
16
+ };
17
+ };
18
+ isError: boolean;
19
+ };
20
+ /** Uses the public transport so hosted MCP also works with older SDK hosts. */
21
+ export declare function registerAutomationTools(server: McpServer, resolverClient: Migma, config: Config, grantedPermissions?: string[], suppliedClient?: Pick<MigmaClient, 'get' | 'post' | 'put' | 'patch'>): void;
22
+ //# sourceMappingURL=automations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automations.d.ts","sourceRoot":"","sources":["../../src/tools/automations.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,KAAK,KAAK,EAAE,MAAM,OAAO,CAAC;AAEhD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAI3C,iFAAiF;AACjF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO;;;;;;;;;;;;;;EA4BhD;AAED,+EAA+E;AAC/E,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,SAAS,EACjB,cAAc,EAAE,KAAK,EACrB,MAAM,EAAE,MAAM,EACd,kBAAkB,CAAC,EAAE,MAAM,EAAE,EAC7B,cAAc,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC,QAkIrE"}
@@ -0,0 +1,134 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { MigmaClient } from 'migma';
3
+ import { z } from 'zod';
4
+ import { canUse } from '../permissions.js';
5
+ import { resolveProjectId } from './projects.js';
6
+ /** Public API failures keep their status, server code and data for the agent. */
7
+ export function publicApiToolError(error) {
8
+ const value = error !== null && typeof error === 'object'
9
+ ? error
10
+ : {};
11
+ const message = error instanceof Error
12
+ ? error.message
13
+ : typeof value.message === 'string'
14
+ ? value.message
15
+ : 'Could not complete this automation request.';
16
+ const code = typeof value.serverCode === 'string'
17
+ ? value.serverCode
18
+ : typeof value.code === 'string'
19
+ ? value.code
20
+ : undefined;
21
+ const data = value.data !== null && typeof value.data === 'object' && !Array.isArray(value.data)
22
+ ? value.data
23
+ : undefined;
24
+ const structured = {
25
+ message,
26
+ ...(typeof value.statusCode === 'number' && { statusCode: value.statusCode }),
27
+ ...(code !== undefined && { code }),
28
+ ...(data !== undefined && { data }),
29
+ };
30
+ return {
31
+ content: [{ type: 'text', text: message }],
32
+ structuredContent: { error: structured },
33
+ isError: true,
34
+ };
35
+ }
36
+ /** Uses the public transport so hosted MCP also works with older SDK hosts. */
37
+ export function registerAutomationTools(server, resolverClient, config, grantedPermissions, suppliedClient) {
38
+ let transport = suppliedClient;
39
+ const client = () => transport ??= new MigmaClient(config.apiKey, {
40
+ baseUrl: config.baseUrl || 'https://api.migma.ai/v1', maxRetries: 2, retryDelay: 1000,
41
+ });
42
+ const project = z.string().optional().describe("Brand ID from migma_list_projects. Defaults to MIGMA_PROJECT_ID for local stdio, then the account's only brand.");
43
+ const id = z.string().min(1).describe('Automation ID returned by list, get, or generation status.');
44
+ const definitionHash = z.string().regex(/^[a-fA-F0-9]{64}$/).describe('Exact definitionHash returned by migma_get_automation for the flow the user reviewed. Never fetch a newer hash automatically.');
45
+ const day = z.string().regex(/^\d{4}-\d{2}-\d{2}$/).refine(value => {
46
+ const date = new Date(`${value}T00:00:00Z`);
47
+ return value >= '1970-01-01' && Number.isFinite(date.getTime()) && date.toISOString().slice(0, 10) === value;
48
+ }, 'Invalid calendar date');
49
+ const metricsInput = z.object({
50
+ automationId: id,
51
+ startDate: day.optional().describe('Inclusive start date, YYYY-MM-DD. Supply endDate and timezone too.'),
52
+ endDate: day.optional().describe('Inclusive end date, YYYY-MM-DD. Period may span at most 366 days.'),
53
+ timezone: z.string().min(1).max(100).refine(value => {
54
+ try {
55
+ new Intl.DateTimeFormat('en', { timeZone: value });
56
+ return true;
57
+ }
58
+ catch {
59
+ return false;
60
+ }
61
+ }, 'Invalid time zone').optional().describe('IANA time zone, for example Europe/Madrid. Required with dates.'),
62
+ }).superRefine((value, ctx) => {
63
+ const fields = ['startDate', 'endDate', 'timezone'];
64
+ if (!fields.some(field => value[field] !== undefined))
65
+ return;
66
+ for (const field of fields) {
67
+ if (value[field] === undefined)
68
+ ctx.addIssue({ code: z.ZodIssueCode.custom, path: [field], message: 'Supply startDate, endDate, and timezone together.' });
69
+ }
70
+ if (value.startDate && value.endDate && (value.startDate > value.endDate
71
+ || Date.parse(value.endDate) - Date.parse(value.startDate) >= 366 * 86400000)) {
72
+ ctx.addIssue({ code: z.ZodIssueCode.custom, path: ['endDate'], message: 'Choose an ordered period of up to 366 days.' });
73
+ }
74
+ });
75
+ // Matches the public API: at most 20 filters, values only for value operators.
76
+ const propertyFilter = z.object({
77
+ path: z.string().trim().min(1).max(200),
78
+ op: z.enum(['eq', 'neq', 'gt', 'lt', 'gte', 'lte', 'contains', 'starts_with', 'ends_with', 'exists', 'is_empty']),
79
+ value: z.union([z.string(), z.number(), z.boolean()]).optional(),
80
+ }).strict().refine(filter => ['exists', 'is_empty'].includes(filter.op) || filter.value !== undefined, { message: 'value is required for this operator', path: ['value'] });
81
+ const trigger = z.object({ type: z.literal('event'), event: z.object({
82
+ name: z.string().trim().min(1), origin: z.string().trim().min(1).optional(), eventVersion: z.string().trim().min(1).optional(),
83
+ propertyFilters: z.array(propertyFilter).max(20).optional(),
84
+ }).strict() }).strict();
85
+ // One replay identity per tool call, reused by the transport's own retries.
86
+ const retryKey = z.string().min(1).max(100).optional().describe('Reuse the same key only when retrying this exact change after an uncertain result.');
87
+ const keyed = (args) => ({ idempotencyKey: args.idempotency_key || randomUUID() });
88
+ const path = (value) => `/automations/${encodeURIComponent(value)}`;
89
+ const projectId = (value) => resolveProjectId(resolverClient, config, value);
90
+ const register = (name, title, description, inputSchema, permissions, run) => {
91
+ if (!canUse(grantedPermissions, permissions))
92
+ return;
93
+ server.registerTool(name, { title, description, inputSchema }, async (args) => {
94
+ try {
95
+ const result = await run(args);
96
+ if (result.error)
97
+ return publicApiToolError(result.error);
98
+ return { content: [{ type: 'text', text: JSON.stringify(result.data) }] };
99
+ }
100
+ catch (error) {
101
+ return publicApiToolError(error);
102
+ }
103
+ });
104
+ };
105
+ const read = ['campaign:read'];
106
+ const write = ['campaign:write'];
107
+ register('migma_get_automation_capabilities', 'Automation Capabilities', 'Discover supported automation steps, real trigger events and connection requirements for a brand. Use before promising a trigger or integration.', z.object({ projectId: project }), read, async (args) => client().get('/automations/capabilities', { projectId: await projectId(args.projectId) }));
108
+ register('migma_list_automations', 'List Automations', 'Find saved automation drafts, active flows, and paused flows for a brand, newest edited first. Use nextCursor to continue a page. Archived flows are omitted unless includeArchived is true. Use the returned ID for follow-up work.', z.object({
109
+ projectId: project,
110
+ cursor: z.string().max(200).optional().describe('Opaque nextCursor returned by the previous page.'),
111
+ limit: z.number().int().min(1).max(200).optional().describe('Page size; defaults to 200.'),
112
+ includeArchived: z.boolean().optional().describe('Include archived flows; defaults to false.'),
113
+ }).strict(), read, async (args) => client().get('/automations', {
114
+ projectId: await projectId(args.projectId), cursor: args.cursor, limit: args.limit, includeArchived: args.includeArchived,
115
+ }));
116
+ register('migma_get_automation', 'Get Automation', 'Read an automation and its review link. Native reviewed flows include definitionHash; list summaries do not, and imported migration drafts can omit it. Keep an observed definitionHash with the reviewed flow because activation and edits require that exact value.', z.object({ automationId: id }), read, args => client().get(path(args.automationId)));
117
+ register('migma_get_automation_metrics', 'Automation Campaign Reports', 'Read delivery and unique human engagement. Supply startDate, endDate, and timezone together for the same send-date report as the canvas; resolve requested dates and timezone first. Omit all three only for lifetime metrics, returned with period:lifetime. Preserve cohort, window, coverage, revenue status, and reporting warnings. The period report counts every version of each email step (sends before an edit included) and returns bounced, unsubscribed and complained with their rates, attributed orders and net sales per delivered email per currency, plus definitions: explain numbers with those definitions. A null rate means nothing was delivered; sales are attributed (last click within 5 days), never proof the email caused them. Missing numbers are unavailable, never zero. Completed journeys are not delivery metrics; never add these to the same campaign totals.', metricsInput, read, async (args) => {
118
+ const { automationId, startDate, endDate, timezone } = metricsInput.parse(args);
119
+ if (startDate && endDate && timezone)
120
+ return client().get(`${path(automationId)}/report`, { startDate, endDate, timezone });
121
+ const result = await client().get(`${path(automationId)}/metrics`);
122
+ return result.error ? result : { ...result, data: { ...result.data, period: 'lifetime' } };
123
+ });
124
+ register('migma_generate_automation', 'Create Automation from Text or Image', 'Build a draft automation and branded emails from a brief or workflow screenshots. Preserves visible timing and branches; reports missing details. Returns a jobId: poll migma_get_automation_generation. Creates a draft that stays off. Use this for recurring/triggered journeys, not a standalone email design.', z.object({ projectId: project, brief: z.string().trim().min(1).max(12000), name: z.string().trim().min(1).max(160).optional(), emailCount: z.number().int().min(0).max(12).optional().describe('Number of emails; use 0 for an action-only journey with no email steps.'), imageUrls: z.array(z.string().url().max(2048).refine(value => new URL(value).protocol === 'https:', 'Use HTTPS image URLs')).max(5).optional().describe('Public HTTPS workflow screenshots supplied by the user. Never invent URLs.'), idempotency_key: z.string().min(1).max(100).optional().describe('Keep the same key when retrying the same submission.') }), ['campaign:write', 'email:write'], async (args) => client().post('/automations/generate', { projectId: await projectId(args.projectId), brief: args.brief, name: args.name, emailCount: args.emailCount, imageUrls: args.imageUrls }, { idempotencyKey: args.idempotency_key || randomUUID() }));
125
+ register('migma_get_automation_generation', 'Automation Generation Status', 'Poll the jobId from migma_generate_automation. On completion show the review link and unresolved details. A completed generation is still an off draft.', z.object({ jobId: z.string().min(1) }), read, args => client().get(`/automations/generations/${encodeURIComponent(args.jobId)}`));
126
+ register('migma_validate_automation', 'Check Automation Setup', 'Check graph, email assets, audience, triggers and sending setup. Prepares delivery drafts but never activates or sends. Show actionable blockers in plain language.', z.object({ automationId: id, idempotency_key: retryKey }), write, args => client().post(`${path(args.automationId)}/validate`, undefined, keyed(args)));
127
+ register('migma_activate_automation', 'Turn On Automation', 'Turn on the exact reviewed automation ONLY when the user explicitly asks to activate it. First call migma_get_automation, review the flow, and pass its definitionHash unchanged. Validate first. If AUTOMATION_GRAPH_CHANGED is returned, reload and review the changed flow before retrying. Never fetch a fresh hash automatically or treat creating a flow as activation consent.', z.object({ automationId: id, confirmed: z.literal(true).describe('True only when the user explicitly requested activation of this automation.'), expectedDefinitionHash: definitionHash, idempotency_key: retryKey }), write, args => client().post(`${path(args.automationId)}/activate`, { confirmed: args.confirmed, expectedDefinitionHash: args.expectedDefinitionHash }, keyed(args)));
128
+ register('migma_pause_automation', 'Pause Automation', 'Pause this flow when requested. Stops new entries and future automation steps; queued automation emails wait at the final delivery check. Messages already being sent to a provider cannot be recalled. Reactivate the unchanged flow to resume existing contacts.', z.object({ automationId: id, idempotency_key: retryKey }), write, args => client().post(`${path(args.automationId)}/pause`, undefined, keyed(args)));
129
+ register('migma_update_automation_trigger', 'Edit Automation Start Rule', 'Update the existing flow start rule after inspecting it with migma_get_automation. Pass the returned definitionHash unchanged and preserve filters the user did not ask to change (at most 20; values are strings, numbers or booleans). If AUTOMATION_GRAPH_CHANGED is returned, reload and review before retrying. Saves to the same canvas. Only draft/paused flows with no contacts in progress are editable; contacts in progress must finish or be cancelled in Migma under Results → Activity.', z.object({ automationId: id, expectedDefinitionHash: definitionHash, trigger, idempotency_key: retryKey }), write, args => client().put(`${path(args.automationId)}/trigger`, { trigger: args.trigger, expectedDefinitionHash: args.expectedDefinitionHash }, keyed(args)));
130
+ register('migma_update_automation_wait', 'Edit Automation Wait', 'Change one existing wait duration, preserving its connections. First inspect the flow with migma_get_automation, use the actual wait step ID, and pass its definitionHash unchanged. If AUTOMATION_GRAPH_CHANGED is returned, reload and review before retrying. Draft/paused flows with no contacts in progress only. Duration is positive ISO 8601, at most 365 days; examples P2D or PT1H.', z.object({ automationId: id, stepId: z.string().min(1).max(160), duration: z.string().min(1).max(50), expectedDefinitionHash: definitionHash, idempotency_key: retryKey }), write, args => client().patch(`${path(args.automationId)}/steps/${encodeURIComponent(args.stepId)}`, { duration: args.duration, expectedDefinitionHash: args.expectedDefinitionHash }, keyed(args)));
131
+ register('migma_list_automation_runs', 'Automation Activity', 'Inspect contact journeys: status, current step, next run time, and failureReason, exitReason or suppressionReason when recorded. Contact email and name need audience:read. Use the returned cursor for the next page. Runs cannot be cancelled here; the user can cancel them in Migma under Results → Activity.', z.object({ automationId: id, status: z.enum(['active', 'waiting', 'completed', 'failed', 'exited', 'suppressed']).optional(), cursor: z.string().optional(), limit: z.number().int().min(1).max(100).optional() }), read, args => client().get(`${path(args.automationId)}/runs`, { status: args.status, cursor: args.cursor, limit: args.limit }));
132
+ register('migma_get_automation_run', 'Automation Contact Timeline', 'Read one contact journey with its reasons and most recent steps (historyTotal says how many were kept). Completed means the journey ended, not proof of inbox delivery.', z.object({ automationId: id, runId: z.string().min(1), historyLimit: z.number().int().min(1).max(100).optional().describe('Most recent steps to return; default 25.') }), read, args => client().get(`${path(args.automationId)}/runs/${encodeURIComponent(args.runId)}`, { historyLimit: args.historyLimit }));
133
+ }
134
+ //# sourceMappingURL=automations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automations.js","sourceRoot":"","sources":["../../src/tools/automations.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"brand.d.ts","sourceRoot":"","sources":["../../src/tools/brand.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AA0D3C,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,KAAK,EACb,MAAM,EAAE,MAAM,EACd,kBAAkB,CAAC,EAAE,MAAM,EAAE,QAyH9B"}
1
+ {"version":3,"file":"brand.d.ts","sourceRoot":"","sources":["../../src/tools/brand.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AA0D3C,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,KAAK,EACb,MAAM,EAAE,MAAM,EACd,kBAAkB,CAAC,EAAE,MAAM,EAAE,QA0H9B"}
@@ -44,12 +44,11 @@ export function registerBrandTools(server, client, config, grantedPermissions) {
44
44
  .optional()
45
45
  .describe("The complete standing guidelines text, not a diff. An empty string clears the rules only when the user asks to remove them."),
46
46
  imageStyle: imageStyleSchema.optional(),
47
+ })
48
+ .refine((value) => value.instructions !== undefined || Object.values(value.imageStyle ?? {}).some(field => field !== undefined), {
49
+ message: "Provide instructions or at least one imageStyle field.",
47
50
  }),
48
51
  }, async (args) => {
49
- // Checked here, not with .refine: a refined schema publishes no properties to clients.
50
- if (args.instructions === undefined && !Object.values(args.imageStyle ?? {}).some(field => field !== undefined)) {
51
- return toolError("Provide instructions or at least one imageStyle field.");
52
- }
53
52
  const projectId = await resolveProjectId(client, config, args.projectId);
54
53
  if (!brandClient.projects.updateBrandGuidelines) {
55
54
  return toolError("This Migma SDK build cannot update brand guidelines yet.");
@@ -98,14 +97,12 @@ export function registerBrandTools(server, client, config, grantedPermissions) {
98
97
  .url()
99
98
  .optional()
100
99
  .describe("Public HTTPS screenshot of the design, when the user shared one."),
100
+ })
101
+ .refine((value) => (value.emailId !== undefined) !== (value.html !== undefined || value.title !== undefined), { message: "Pass either emailId, or title + html for a pasted design, not both." })
102
+ .refine((value) => value.emailId !== undefined || (value.title && value.html), {
103
+ message: "A pasted design needs both title and html.",
101
104
  }),
102
105
  }, async (args) => {
103
- if ((args.emailId !== undefined) === (args.html !== undefined || args.title !== undefined)) {
104
- return toolError("Pass either emailId, or title + html for a pasted design, not both.");
105
- }
106
- if (args.emailId === undefined && !(args.title && args.html)) {
107
- return toolError("A pasted design needs both title and html.");
108
- }
109
106
  if (args.emailId) {
110
107
  if (!brandClient.emails.setFavorite) {
111
108
  return toolError("This Migma SDK build cannot favorite emails yet.");
@@ -1 +1 @@
1
- {"version":3,"file":"brand.js","sourceRoot":"","sources":["../../src/tools/brand.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEnE,MAAM,WAAW,GAAG,MAAM,CAAC;AAC3B,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAChC,MAAM,SAAS,GAAG,GAAG,CAAC;AAgCtB,MAAM,gBAAgB,GAAG,CAAC;KACvB,MAAM,CAAC;IACN,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,GAAG,CAAC,SAAS,CAAC;SACd,QAAQ,EAAE;SACV,QAAQ,CAAC,0EAA0E,CAAC;IACvF,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,SAAS,CAAC;SACd,QAAQ,EAAE;SACV,QAAQ,CAAC,wCAAwC,CAAC;IACrD,cAAc,EAAE,CAAC;SACd,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,+CAA+C,CAAC;CAC7D,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,UAAU,kBAAkB,CAChC,MAAiB,EACjB,MAAa,EACb,MAAc,EACd,kBAA6B;IAE7B,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC,eAAe,CAAC,CAAC;QAAE,OAAO;IAC3D,MAAM,WAAW,GAAG,MAAqB,CAAC;IAE1C,MAAM,CAAC,YAAY,CACjB,+BAA+B,EAC/B;QACE,KAAK,EAAE,yBAAyB;QAChC,WAAW,EAAE,gBAAgB;QAC7B,WAAW,EACT,wRAAwR;QAC1R,WAAW,EAAE,CAAC;aACX,MAAM,CAAC;YACN,SAAS,EAAE,CAAC;iBACT,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,oDAAoD,CAAC;YACjE,YAAY,EAAE,CAAC;iBACZ,MAAM,EAAE;iBACR,IAAI,EAAE;iBACN,GAAG,CAAC,gBAAgB,CAAC;iBACrB,QAAQ,EAAE;iBACV,QAAQ,CAAC,6HAA6H,CAAC;YAC1I,UAAU,EAAE,gBAAgB,CAAC,QAAQ,EAAE;SACxC,CAAC;KACL,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,uFAAuF;QACvF,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,EAAE,CAAC;YAChH,OAAO,SAAS,CAAC,wDAAwD,CAAC,CAAC;QAC7E,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACzE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,qBAAqB,EAAE,CAAC;YAChD,OAAO,SAAS,CAAC,0DAA0D,CAAC,CAAC;QAC/E,CAAC;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC;QAC/C,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,qBAAqB,CAAC,SAAS,EAAE;YAClF,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5D,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,sBAAsB,EACtB;QACE,KAAK,EAAE,wCAAwC;QAC/C,WAAW,EAAE,aAAa;QAC1B,WAAW,EACT,m0BAAm0B;QACr0B,WAAW,EAAE,CAAC;aACX,MAAM,CAAC;YACN,OAAO,EAAE,CAAC;iBACP,MAAM,EAAE;iBACR,IAAI,EAAE;iBACN,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,EAAE;iBACV,QAAQ,CAAC,qKAAqK,CAAC;YAClL,SAAS,EAAE,CAAC;iBACT,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,wEAAwE,CAAC;YACrF,KAAK,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,IAAI,EAAE;iBACN,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,GAAG,CAAC;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,4DAA4D,CAAC;YACzE,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,IAAI,EAAE;iBACN,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,WAAW,CAAC;iBAChB,QAAQ,EAAE;iBACV,QAAQ,CAAC,uDAAuD,CAAC;YACpE,aAAa,EAAE,CAAC;iBACb,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,QAAQ,EAAE;iBACV,QAAQ,CAAC,kEAAkE,CAAC;SAChF,CAAC;KACL,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,EAAE,CAAC;YAC3F,OAAO,SAAS,CAAC,qEAAqE,CAAC,CAAC;QAC1F,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7D,OAAO,SAAS,CAAC,4CAA4C,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;gBACpC,OAAO,SAAS,CAAC,kDAAkD,CAAC,CAAC;YACvE,CAAC;YACD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACjF,IAAI,KAAK;gBAAE,OAAO,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC3C,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACzE,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,WAAW,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE;YACrE,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;YAChC,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,IAAI;YACjB,eAAe,EAAE,QAAQ;YACzB,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACrE,CAAC,CAAC;QACH,IAAI,KAAK;YAAE,OAAO,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,CAAC,IAAI,IAAI,EAAE,CAAmD,CAAC;QAC7E,OAAO,UAAU,CAAC;YAChB,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE;YAClB,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE;YACxB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE;YACtB,eAAe,EAAE,QAAQ;SAC1B,CAAC,CAAC;IACL,CAAC,CACF,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,IAAa;IAC/B,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;KAC1E,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,OAAe;IAChC,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;KACpD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"brand.js","sourceRoot":"","sources":["../../src/tools/brand.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,4 @@ 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
4
  export declare function registerCampaignTools(server: McpServer, client: Migma, config: Config, grantedPermissions?: string[]): void;
5
- /** Campaign rows carry the full template and theme; the agent needs the facts only. */
6
- export declare function compactCampaign(data: unknown, warnings?: string[]): unknown;
7
5
  //# sourceMappingURL=campaigns.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"campaigns.d.ts","sourceRoot":"","sources":["../../src/tools/campaigns.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAmB3C,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,KAAK,EACb,MAAM,EAAE,MAAM,EACd,kBAAkB,CAAC,EAAE,MAAM,EAAE,QAuW9B;AAwGD,uFAAuF;AACvF,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,GAAE,MAAM,EAAO,GAAG,OAAO,CAS/E"}
1
+ {"version":3,"file":"campaigns.d.ts","sourceRoot":"","sources":["../../src/tools/campaigns.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAU3C,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,KAAK,EACb,MAAM,EAAE,MAAM,EACd,kBAAkB,CAAC,EAAE,MAAM,EAAE,QAmU9B"}