@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
package/README.md CHANGED
@@ -57,24 +57,6 @@ and include indirect effects:
57
57
 
58
58
  Annotations do not replace authorization, scope checks, or explicit send approval.
59
59
 
60
- ## Sending needs a confirmation the server checks
61
-
62
- `migma_send_email`, `migma_send_campaign`, and `migma_schedule_campaign` take two
63
- calls. The first sends nothing: it returns a summary built from live data
64
- (audience, recipient count, sender, subject, timing) and a `confirmationToken`.
65
- Mail goes out, or the schedule is saved, only when the same call is repeated
66
- with that token after the user approves the summary. The token expires after
67
- 10 minutes, is signed with the caller's API key, and stops working when any
68
- detail that decides who gets what, from whom, or when changes. A confirmed call
69
- without `idempotency_key` uses a key derived from the token, so repeating it
70
- replays the first result.
71
-
72
- `migma_send_email` sends marketing mail unless `transactional: true` is set for
73
- a single recipient whose From root domain has a verified transactional identity
74
- (`notify.<root>`, see `migma_provision_stream`). Tag and segment sends are always
75
- marketing, so unsubscribed contacts are skipped. Sends, schedules, and new
76
- campaign drafts refuse a From on a domain the account cannot send from.
77
-
78
60
  ## Brand selection
79
61
 
80
62
  Tools with an optional `projectId` use, in order: the argument, `MIGMA_PROJECT_ID`
@@ -122,3 +104,25 @@ The worker does not automatically retry a failed or stalled rewrite.
122
104
 
123
105
  Section and image complexity, provider behavior, and retries affect total work.
124
106
  No fixed maximum edit latency is established.
107
+
108
+ ## Automations
109
+
110
+ Migma's MCP server lets agents design emails, create automations from text or workflow screenshots, manage audiences and campaigns, and inspect results.
111
+
112
+ Use `migma_get_capabilities` to discover the tools and required permissions. For an automation, use `migma_get_automation_capabilities`, then `migma_generate_automation` and `migma_get_automation_generation`. Generation creates an off draft and returns a review link. Keep the same job ID when checking progress.
113
+
114
+ Creation does not activate delivery. `migma_activate_automation` requires an explicit user request, passing setup checks, and the `definitionHash` from the reviewed `migma_get_automation` result. List summaries omit this hash, and imported migration drafts can omit it until they become native reviewed flows. Trigger and wait edits require the same reviewed hash. If Migma returns `AUTOMATION_GRAPH_CHANGED`, reload and review the flow before retrying instead of silently using a newer hash. Existing flows can be inspected, validated, paused, and checked through contact-run tools.
115
+
116
+ `migma_list_automations` accepts `cursor`, `limit` (1-200), and `includeArchived`; use the returned `nextCursor` to continue. Archived flows are omitted unless requested.
117
+
118
+ `migma_get_automation_metrics` accepts `startDate`, `endDate`, and `timezone` together for the canvas send-date report. Omitting all three preserves lifetime metrics and returns `period: "lifetime"`. Keep the returned window, cohort, coverage, revenue status, and reporting warnings; unavailable numbers are not zero. Never add automation values to the corresponding campaign totals. `migma_generate_automation` accepts `emailCount: 0` for action-only journeys.
119
+
120
+ See [automation tools and API](https://docs.migma.ai/automations/chat-and-api) and [image-to-automation](https://docs.migma.ai/automations/from-image). Generation needs `campaign:write` + `email:write`; polling and reads need `campaign:read`. Setup checks and lifecycle changes need `campaign:write`.
121
+
122
+ ## Forms
123
+
124
+ `migma_list_forms`, `migma_get_form`, `migma_create_form`, `migma_update_form`, `migma_publish_form`, `migma_pause_form`, `migma_delete_form`, `migma_submit_form` and `migma_list_form_submissions` manage signup forms. Create and update save a draft; only `migma_publish_form` changes the hosted page and embeds. A form's ID is the `formId` for `form.submitted` and `form.confirmed` automation triggers. Pause and delete return `FORM_USED_BY_AUTOMATION` while an enabled automation starts from the form. Reads need `campaign:read`, writes `campaign:write`, and submission history also `audience:read`.
125
+
126
+ `migma_submit_form` signs up one person who asked to join, through a live form's own rules: its fields, tags, double opt-in and form automations. It only adds: an existing contact keeps its status (including unsubscribed and bounced), and the result is the same either way. It returns `state` (`received`, or `confirmation_pending` when a double opt-in email was sent) and `duplicate` (this email was already submitted to the form with this API key, so nothing new was recorded). The submission records the API key and time as consent evidence. If the caller has the person's original signup request, `consent.ip` and `consent.userAgent` preserve that evidence; never substitute the MCP host or agent's request details. It needs `campaign:write` and `audience:write`, sends an `Idempotency-Key` per call (pass `idempotency_key` to retry an uncertain call), and is rate limited per API key. Use the contact import tools, not this one, to add contacts in bulk.
127
+
128
+ Run `npm test` to compile and verify tool registration, permissions, review metadata, and API transport. Use the current local `migma-node` SDK build when testing unreleased changes. Publish the updated MCP package and update the backend's pinned `@migma/mcp` dependency together when releasing.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AA0BrD,MAAM,MAAM,2BAA2B,GAAG;IACxC,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACzB,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,KAAK,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,eAAe,CAAC;CAC3B,CAAC;AAUF,eAAO,MAAM,yBAAyB,QAA0P,CAAC;AAqBjS,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,2BAAgC,GAAG,SAAS,CA0CzF;AAED,oFAAoF;AACpF,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,IAAI,CAAC,2BAA2B,EAAE,SAAS,CAAM,GAAG,SAAS,CAE3G;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAEzD;AAGD,wBAAgB,mBAAmB,cAOlC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AA6BrD,MAAM,MAAM,2BAA2B,GAAG;IACxC,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACzB,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,KAAK,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,eAAe,CAAC;CAC3B,CAAC;AAYF,eAAO,MAAM,yBAAyB,QAA0P,CAAC;AAqBjS,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,2BAAgC,GAAG,SAAS,CA6CzF;AAED,oFAAoF;AACpF,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,IAAI,CAAC,2BAA2B,EAAE,SAAS,CAAM,GAAG,SAAS,CAE3G;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAEzD;AAGD,wBAAgB,mBAAmB,cAOlC"}
package/build/index.js CHANGED
@@ -24,14 +24,19 @@ import { registerSegmentTools } from "./tools/segments.js";
24
24
  import { registerWebhookTools } from "./tools/webhooks.js";
25
25
  import { registerCampaignTools } from "./tools/campaigns.js";
26
26
  import { registerMetricsTools } from "./tools/metrics.js";
27
+ import { registerAutomationTools } from "./tools/automations.js";
28
+ import { registerWebsiteTools } from "./tools/websites.js";
29
+ import { registerFormTools } from "./tools/forms.js";
27
30
  import { applyToolReviewMetadata, registerCapabilitiesTool, } from "./tools/capabilities.js";
28
- import { registerMigmaPrompts } from "./prompts/index.js";
31
+ import { MIGMA_CHAT_VOICE, registerMigmaPrompts } from "./prompts/index.js";
29
32
  const COMMON_SERVER_INSTRUCTIONS = [
30
- "After connecting, read the migma_get_context setup block. Reuse the known brand and reference; unknown is not missing. Setup must not block drafts.",
33
+ MIGMA_CHAT_VOICE,
34
+ "After connecting, read migma_get_context setup block. Reuse known brand and reference; unknown is not missing. Setup must not block drafts. No tours, recaps, forced next step or tool IDs.",
31
35
  "Use one write channel; after browser edits call migma_list_emails. One migma_generate_email call makes a whole series: pass count and supplied images through the structured images argument.",
32
36
  "Show every Previews image and editor link before editing or validating. Edit requested existing emails instead of making copies.",
33
37
  "Save lasting rules with migma_update_brand_guidelines and liked styles with migma_save_reference when asked. Never invent prices, offers or product claims.",
34
- "Nothing reaches a real inbox without the user saying yes: send and schedule tools first return a summary (audience, count, sender, subject, timing) with a confirmationToken and send nothing; show it with the preview, and call again with the token only after the user approves. Resolve date/timezone before scheduling. Say done only after the tool confirms.",
38
+ "Nothing reaches a real inbox without the user saying yes: show audience, count, sender, subject, preview and timing, then wait. Resolve date/timezone before scheduling. Say done only after tool confirms.",
39
+ "For flows, use migma_generate_automation and show the draft. Activate only when the user explicitly asks.",
35
40
  ].join(" ");
36
41
  export const MIGMA_SERVER_INSTRUCTIONS = `${COMMON_SERVER_INSTRUCTIONS} Checkout links are for the user to open. Offer available billing only when asked or credits block the task; get consent and chosen plan first. Existing subscribers use billing portal. A link is not proof of payment.`;
37
42
  function completeConfig(config) {
@@ -83,6 +88,9 @@ export function createMigmaMcpServer(options = {}) {
83
88
  registerWebhookTools(server, lazyClient, permissions);
84
89
  registerCampaignTools(server, lazyClient, config, permissions);
85
90
  registerMetricsTools(server, lazyClient, permissions);
91
+ registerAutomationTools(server, lazyClient, config, permissions);
92
+ registerWebsiteTools(server, lazyClient, permissions);
93
+ registerFormTools(server, lazyClient, config, permissions);
86
94
  registerMigmaPrompts(server);
87
95
  // Register last so the catalog reflects every tool above it.
88
96
  registerCapabilitiesTool(server, permissions, profile);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare const MIGMA_CHAT_VOICE = "Use the user's language, like a WhatsApp chat: 1-2 short sentences, simple words, result first. Show previews and returned links; ask one question only for required input or approval, otherwise act.";
2
3
  export interface Workflow {
3
4
  name: string;
4
5
  summary: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;;GAIG;AACH,eAAO,MAAM,SAAS,EAAE,QAAQ,EA6F/B,CAAC;AAmBF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,QAcrD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,eAAO,MAAM,gBAAgB,2MAC6K,CAAC;AAE3M,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;;GAIG;AACH,eAAO,MAAM,SAAS,EAAE,QAAQ,EA2G/B,CAAC;AAmBF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,QAcrD"}
@@ -1,9 +1,24 @@
1
+ export const MIGMA_CHAT_VOICE = "Use the user's language, like a WhatsApp chat: 1-2 short sentences, simple words, result first. Show previews and returned links; ask one question only for required input or approval, otherwise act.";
1
2
  /**
2
3
  * The guided workflows this server ships. Each is registered as an MCP prompt
3
4
  * and also mirrored inside migma_get_capabilities.workflows so an agent can
4
5
  * discover them without fetching every prompt.
5
6
  */
6
7
  export const WORKFLOWS = [
8
+ {
9
+ name: "build_automation_from_text_or_image",
10
+ summary: "Describe a contact journey or recreate a workflow screenshot, then review and manage the automation.",
11
+ steps: [
12
+ "migma_list_projects — choose the brand; reuse a known projectId.",
13
+ "migma_get_automation_capabilities — ground the trigger, steps, and connections in this project.",
14
+ "migma_generate_automation — pass the brief and optional user-provided workflow imageUrls. Keep jobId; the draft stays off.",
15
+ "migma_get_automation_generation — poll to completion, show the review link and clarify unresolved details.",
16
+ "migma_get_automation — inspect the exact flow and keep its definitionHash for any edit or activation.",
17
+ "migma_validate_automation — check setup before activation. Explain the specific fixes if blocked.",
18
+ "migma_activate_automation — only if the user explicitly requests turning on this reviewed flow; pass confirmed:true and the inspected definitionHash as expectedDefinitionHash. On AUTOMATION_GRAPH_CHANGED, reload and review before retrying.",
19
+ "migma_list_automation_runs and migma_get_automation_run — explain progress using recorded outcomes. migma_pause_automation pauses when requested.",
20
+ ],
21
+ },
7
22
  {
8
23
  name: "export_unsubscribers",
9
24
  summary: "Export unsubscribed contacts as a complete CSV for consent reconciliation.",
@@ -62,8 +77,8 @@ export const WORKFLOWS = [
62
77
  "migma_send_test_email — only after the user has seen the images and asks to test.",
63
78
  "migma_list_domains + migma_list_segments / migma_list_tags — pick the sender and audience. No domain that can send: migma_setup_domain and give the user its connectUrl. Audience in Klaviyo, Mailchimp or HubSpot: migma_list_provider_import_sources, then migma_import_contacts_from_provider; each source becomes a segment to target.",
64
79
  "migma_create_campaign — create a draft campaign from the generated email.",
65
- "migma_send_campaign — call without confirmationToken to get the summary (audience, count, sender, subject, timing). Show it with the final preview; only after the user approves, call again with the returned confirmationToken.",
66
- "migma_schedule_campaign — use instead of immediate send when the timing is in the future. Resolve exact date, time, and timezone; 'Friday' or 'Black Friday' alone is not enough. Same two calls: summary first, then the confirmationToken after the user approves. Say 'Scheduled' only after the tool confirms the saved schedule and include its date and time.",
80
+ "migma_send_campaign — only after explicit user approval of audience, count, sender, subject, timing, and final preview; pass idempotency_key for safe retries.",
81
+ "migma_schedule_campaign — use instead of immediate send when the approved timing is in the future. Resolve exact date, time, and timezone; 'Friday' or 'Black Friday' alone is not enough. Say 'Scheduled' only after the tool confirms the saved schedule and include its date and time.",
67
82
  "migma_get_campaign_stats — read delivery and engagement metrics when requested; a scheduled campaign has not been sent.",
68
83
  ],
69
84
  },
@@ -76,8 +91,8 @@ export const WORKFLOWS = [
76
91
  "migma_create_segment — create the chosen segment using those fields as filters; include status subscribed for marketing. Membership counts are not delivery counts.",
77
92
  "migma_generate_email — one call creates the email or series (pass count); poll status and show preview images immediately (no validate first).",
78
93
  "migma_create_campaign — create a campaign targeting the new segment.",
79
- "migma_send_campaign — call without confirmationToken for the summary, show it, and repeat with the token only after the user approves.",
80
- "migma_schedule_campaign — use instead for future delivery, with exact date, time, and timezone; same summary-then-token approval. Report scheduling only after confirmation.",
94
+ "migma_send_campaign — only after explicit user approval of audience, count, sender, subject, timing, and final preview; use an idempotency_key for safe retries.",
95
+ "migma_schedule_campaign — use instead for approved future delivery, with exact date, time, and timezone. Report scheduling only after confirmation.",
81
96
  "migma_get_campaign_stats — read the campaign results.",
82
97
  ],
83
98
  },
@@ -102,7 +117,7 @@ function workflowMessage(workflow) {
102
117
  role: "user",
103
118
  content: {
104
119
  type: "text",
105
- text: `${workflow.summary}\n\nHandle these steps internally; explain only the result and what you need from me:\n${stepLines}\n\nStart with migma_get_context and reuse the working brand. Check migma_get_capabilities only when access is unclear. Use the brief and reference already given; drafts need no audience or sending-domain setup. A draft, queued edit, link, or pending domain is not proof of completion. Use only returned download/editor links and checked compatibility results.`,
120
+ text: `${workflow.summary}\n\nHandle these steps internally; explain only the result and what you need from me:\n${stepLines}\n\nStart with migma_get_context and reuse the working brand. Check migma_get_capabilities only when access is unclear. ${MIGMA_CHAT_VOICE} Use the brief and reference already given; drafts need no audience or sending-domain setup. For slow work, one short acknowledgment is enough. No hype, headings, recap, forced next step, or repeated setup questions. Stop when done. Keep tool names and IDs internal unless asked. Expand for requested detail, material errors, and complete approval details. A draft, queued edit, link, or pending domain is not proof of completion. Use only returned download/editor links and checked compatibility results.`,
106
121
  },
107
122
  },
108
123
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAe;IACnC;QACE,IAAI,EAAE,sBAAsB;QAC5B,OAAO,EAAE,4EAA4E;QACrF,KAAK,EAAE;YACL,gDAAgD;YAChD,wLAAwL;YACxL,yLAAyL;YACzL,2LAA2L;SAC5L;KACF;IACD;QACE,IAAI,EAAE,mCAAmC;QACzC,OAAO,EAAE,+GAA+G;QACxH,KAAK,EAAE;YACL,gDAAgD;YAChD,uPAAuP;YACvP,oLAAoL;YACpL,6NAA6N;YAC7N,iQAAiQ;YACjQ,+LAA+L;SAChM;KACF;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,OAAO,EACL,wFAAwF;QAC1F,KAAK,EAAE;YACL,0JAA0J;YAC1J,6FAA6F;YAC7F,oPAAoP;YACpP,qLAAqL;YACrL,qIAAqI;YACrI,mOAAmO;SACpO;KACF;IACD;QACE,IAAI,EAAE,kCAAkC;QACxC,OAAO,EACL,uEAAuE;QACzE,KAAK,EAAE;YACL,oJAAoJ;YACpJ,6EAA6E;YAC7E,uJAAuJ;YACvJ,4RAA4R;YAC5R,+NAA+N;YAC/N,wIAAwI;YACxI,gLAAgL;YAChL,6WAA6W;SAC9W;KACF;IACD;QACE,IAAI,EAAE,uBAAuB;QAC7B,OAAO,EACL,uFAAuF;QACzF,KAAK,EAAE;YACL,uFAAuF;YACvF,4KAA4K;YAC5K,mKAAmK;YACnK,mFAAmF;YACnF,4UAA4U;YAC5U,2EAA2E;YAC3E,mOAAmO;YACnO,qWAAqW;YACrW,yHAAyH;SAC1H;KACF;IACD;QACE,IAAI,EAAE,wBAAwB;QAC9B,OAAO,EACL,gFAAgF;QAClF,KAAK,EAAE;YACL,mGAAmG;YACnG,+HAA+H;YAC/H,qKAAqK;YACrK,gJAAgJ;YAChJ,sEAAsE;YACtE,wIAAwI;YACxI,8KAA8K;YAC9K,uDAAuD;SACxD;KACF;IACD;QACE,IAAI,EAAE,2BAA2B;QACjC,OAAO,EACL,+EAA+E;QACjF,KAAK,EAAE;YACL,oNAAoN;YACpN,+QAA+Q;YAC/Q,kMAAkM;YAClM,mFAAmF;SACpF;KACF;CACF,CAAC;AAEF,SAAS,eAAe,CAAC,QAAkB;IACzC,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK;SAC7B,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;SACrC,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO;QACL,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,MAAe;gBACrB,OAAO,EAAE;oBACP,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,GAAG,QAAQ,CAAC,OAAO,0FAA0F,SAAS,0WAA0W;iBACve;aACF;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,CAAC,cAAc,CACnB,QAAQ,CAAC,IAAI,EACb;YACE,KAAK,EAAE,QAAQ,CAAC,IAAI;iBACjB,KAAK,CAAC,GAAG,CAAC;iBACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;iBAClD,IAAI,CAAC,GAAG,CAAC;YACZ,WAAW,EAAE,QAAQ,CAAC,OAAO;SAC9B,EACD,GAAG,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAChC,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=automations.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automations.test.d.ts","sourceRoot":"","sources":["../../../src/tools/__tests__/automations.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,259 @@
1
+ import assert from 'node:assert/strict';
2
+ import test from 'node:test';
3
+ import { createMigmaMcpServer } from '../../index.js';
4
+ import { getToolRequiredScopes, TOOL_CATALOG } from '../capabilities.js';
5
+ function tools(permissions) {
6
+ return createMigmaMcpServer({ config: { apiKey: 'test-key', baseUrl: 'https://api.example.test/v1', projectId: 'brand' }, permissions })._registeredTools;
7
+ }
8
+ test('automation discovery honors read/write scopes and marks activation as external', () => {
9
+ const read = tools(['campaign:read']);
10
+ assert.ok(read.migma_get_automation_capabilities);
11
+ assert.ok(read.migma_list_automation_runs);
12
+ assert.ok(read.migma_get_automation_metrics);
13
+ assert.equal(read.migma_generate_automation, undefined);
14
+ assert.equal(read.migma_activate_automation, undefined);
15
+ const all = tools();
16
+ assert.deepEqual(getToolRequiredScopes('migma_generate_automation'), ['campaign:write', 'email:write']);
17
+ assert.equal(all.migma_generate_automation.annotations.idempotentHint, false);
18
+ assert.match(TOOL_CATALOG.find(tool => tool.name === 'migma_generate_automation')?.summary ?? '', /Reuse idempotency_key/);
19
+ assert.equal(all.migma_activate_automation.annotations.openWorldHint, true);
20
+ assert.equal(all.migma_activate_automation.inputSchema.safeParse({ automationId: 'flow', confirmed: false }).success, false);
21
+ assert.equal(all.migma_activate_automation.inputSchema.safeParse({ automationId: 'flow', confirmed: true }).success, false);
22
+ assert.equal(all.migma_activate_automation.inputSchema.safeParse({ automationId: 'flow', confirmed: true, expectedDefinitionHash: 'not-a-hash' }).success, false);
23
+ assert.equal(all.migma_activate_automation.inputSchema.safeParse({ automationId: 'flow', confirmed: true, expectedDefinitionHash: 'a'.repeat(64) }).success, true);
24
+ });
25
+ test('activation preserves public API error code and checklist data in structured MCP content', async (t) => {
26
+ const data = {
27
+ checklist: [{ key: 'sender', status: 'missing', message: 'Choose a verified sender' }],
28
+ failing: [{ key: 'sender', status: 'missing', message: 'Choose a verified sender' }],
29
+ fixes: [{ key: 'sender', fix: 'Verify a sender', message: 'Choose a verified sender' }],
30
+ };
31
+ t.mock.method(globalThis, 'fetch', async () => new Response(JSON.stringify({
32
+ success: false,
33
+ error: 'Fix the automation checks before activation',
34
+ code: 'AUTOMATION_VALIDATION_FAILED',
35
+ data,
36
+ }), { status: 400 }));
37
+ const result = await tools().migma_activate_automation.handler({ automationId: 'flow', confirmed: true, expectedDefinitionHash: 'a'.repeat(64) }, {});
38
+ assert.equal(result.isError, true);
39
+ assert.equal(result.content[0].text, 'Fix the automation checks before activation');
40
+ assert.deepEqual(result.structuredContent, {
41
+ error: {
42
+ message: 'Fix the automation checks before activation',
43
+ statusCode: 400,
44
+ code: 'AUTOMATION_VALIDATION_FAILED',
45
+ data,
46
+ },
47
+ });
48
+ });
49
+ test('automation mutations carry the exact reviewed definition hash', async (t) => {
50
+ const requests = [];
51
+ t.mock.method(globalThis, 'fetch', async (url, init) => {
52
+ requests.push({ url, body: JSON.parse(init.body) });
53
+ return new Response(JSON.stringify({ success: true, data: { id: 'flow', status: 'draft' } }), { status: 200 });
54
+ });
55
+ const all = tools();
56
+ const trigger = { type: 'event', event: { name: 'contact.subscribed' } };
57
+ await all.migma_activate_automation.handler({ automationId: 'flow', confirmed: true, expectedDefinitionHash: 'a'.repeat(64) }, {});
58
+ await all.migma_update_automation_trigger.handler({ automationId: 'flow', trigger, expectedDefinitionHash: 'b'.repeat(64) }, {});
59
+ await all.migma_update_automation_wait.handler({ automationId: 'flow', stepId: 'wait-1', duration: 'P2D', expectedDefinitionHash: 'c'.repeat(64) }, {});
60
+ assert.deepEqual(requests.map(request => request.body), [
61
+ { confirmed: true, expectedDefinitionHash: 'a'.repeat(64) },
62
+ { trigger, expectedDefinitionHash: 'b'.repeat(64) },
63
+ { duration: 'P2D', expectedDefinitionHash: 'c'.repeat(64) },
64
+ ]);
65
+ });
66
+ test('unkeyed automation generation uses distinct replay identities and stays non-idempotent', async (t) => {
67
+ const keys = [];
68
+ t.mock.method(globalThis, 'fetch', async (_url, init) => {
69
+ keys.push(init.headers['Idempotency-Key']);
70
+ return new Response(JSON.stringify({ success: true, data: { jobId: `job-${keys.length}`, status: 'queued' } }), { status: 202 });
71
+ });
72
+ const tool = tools().migma_generate_automation;
73
+ await tool.handler({ brief: 'Welcome subscribers' }, {});
74
+ await tool.handler({ brief: 'Welcome subscribers' }, {});
75
+ assert.equal(tool.annotations.idempotentHint, false);
76
+ assert.equal(keys.length, 2);
77
+ assert.ok(keys[0]);
78
+ assert.ok(keys[1]);
79
+ assert.notEqual(keys[0], keys[1]);
80
+ });
81
+ test('automation reporting preserves unavailable values rather than filling zeros', async (t) => {
82
+ const report = { nodes: [{ nodeId: 'node', campaignId: 'campaign', reporting: { status: 'unavailable', source: 'unavailable' } }], edges: [], reporting: { status: 'unavailable', source: 'campaigns', warnings: ['Tracking is unavailable'] } };
83
+ t.mock.method(globalThis, 'fetch', async (url) => {
84
+ assert.equal(url, 'https://api.example.test/v1/automations/flow/metrics');
85
+ return new Response(JSON.stringify({ success: true, data: report }), { status: 200 });
86
+ });
87
+ const result = await tools().migma_get_automation_metrics.handler({ automationId: 'flow' }, {});
88
+ assert.deepEqual(JSON.parse(result.content[0].text), { ...report, period: 'lifetime' });
89
+ });
90
+ test('workflow image generation sends one off-draft request with the supplied retry key', async (t) => {
91
+ const calls = [];
92
+ t.mock.method(globalThis, 'fetch', async (url, init) => {
93
+ calls.push({ url, init });
94
+ return new Response(JSON.stringify({ success: true, data: { jobId: 'job', status: 'queued' } }), { status: 202 });
95
+ });
96
+ const result = await tools().migma_generate_automation.handler({ brief: 'Recreate the branches', imageUrls: ['https://example.test/flow.png'], idempotency_key: 'retry-001' }, {});
97
+ assert.equal(result.isError, undefined);
98
+ assert.equal(calls.length, 1);
99
+ assert.equal(calls[0].url, 'https://api.example.test/v1/automations/generate');
100
+ assert.equal(calls[0].init.headers['Idempotency-Key'], 'retry-001');
101
+ assert.deepEqual(JSON.parse(calls[0].init.body), { projectId: 'brand', brief: 'Recreate the branches', imageUrls: ['https://example.test/flow.png'] });
102
+ assert.equal(JSON.parse(result.content[0].text).status, 'queued');
103
+ });
104
+ test('automation tools use the account\'s only brand when projectId is omitted', async (t) => {
105
+ const brandId = '665f1e928c2a9e4d8f123123';
106
+ const client = {
107
+ projects: {
108
+ list: async () => ({
109
+ data: {
110
+ projects: [{ _id: brandId, name: 'Only brand', domain: 'example.test' }],
111
+ pagination: { total: 1, limit: 10, offset: 0, hasMore: false },
112
+ },
113
+ }),
114
+ },
115
+ };
116
+ t.mock.method(globalThis, 'fetch', async (url) => {
117
+ const request = new URL(url);
118
+ assert.equal(request.pathname, '/v1/automations');
119
+ assert.equal(request.searchParams.get('projectId'), brandId);
120
+ return new Response(JSON.stringify({ success: true, data: [] }), { status: 200 });
121
+ });
122
+ const registered = createMigmaMcpServer({
123
+ client,
124
+ config: { apiKey: 'automation-single-brand', baseUrl: 'https://api.example.test/v1' },
125
+ permissions: ['campaign:read'],
126
+ })._registeredTools;
127
+ const result = await registered.migma_list_automations.handler({}, {});
128
+ assert.equal(result.isError, undefined);
129
+ assert.deepEqual(JSON.parse(result.content[0].text), []);
130
+ });
131
+ test('automation lists forward bounded pagination and archived visibility', async (t) => {
132
+ const tool = tools(['campaign:read']).migma_list_automations;
133
+ assert.equal(tool.inputSchema.safeParse({ cursor: 'next', limit: 1, includeArchived: true }).success, true);
134
+ assert.equal(tool.inputSchema.safeParse({ limit: 0 }).success, false);
135
+ assert.equal(tool.inputSchema.safeParse({ limit: 201 }).success, false);
136
+ assert.equal(tool.inputSchema.safeParse({ cursor: 'x'.repeat(201) }).success, false);
137
+ assert.equal(tool.inputSchema.safeParse({ includeArchived: 'true' }).success, false);
138
+ assert.equal(tool.inputSchema.safeParse({ status: 'archived' }).success, false);
139
+ t.mock.method(globalThis, 'fetch', async (url) => {
140
+ assert.equal(url, 'https://api.example.test/v1/automations?projectId=brand&cursor=next&limit=25&includeArchived=true');
141
+ return new Response(JSON.stringify({ success: true, data: { automations: [], count: 0, nextCursor: null } }), { status: 200 });
142
+ });
143
+ const result = await tool.handler({ cursor: 'next', limit: 25, includeArchived: true }, {});
144
+ assert.deepEqual(JSON.parse(result.content[0].text), { automations: [], count: 0, nextCursor: null });
145
+ });
146
+ test('validation surfaces exact blockers without making an activation call', async (t) => {
147
+ let calls = 0;
148
+ const checks = { ready: false, checklist: [{ key: 'sender', status: 'missing', message: 'Choose a verified sender' }] };
149
+ t.mock.method(globalThis, 'fetch', async (url) => {
150
+ calls++;
151
+ assert.equal(url, 'https://api.example.test/v1/automations/flow/validate');
152
+ return new Response(JSON.stringify({ success: true, data: checks }), { status: 200 });
153
+ });
154
+ const result = await tools().migma_validate_automation.handler({ automationId: 'flow' }, {});
155
+ assert.deepEqual(JSON.parse(result.content[0].text), checks);
156
+ assert.equal(calls, 1);
157
+ });
158
+ test('selected reporting window uses report and preserves period, coverage, and unavailable totals', async (t) => {
159
+ const window = { startDate: '2026-03-28', endDate: '2026-03-30', timezone: 'Europe/Madrid' };
160
+ const report = { version: 1, cohort: 'send-date', scope: 'all-versions', window,
161
+ nodes: [], totals: null, coverage: { since: '2026-03-29T00:00:00Z', complete: false },
162
+ revenue: { status: 'unavailable' }, reporting: { status: 'partial', warnings: ['Incomplete history'] } };
163
+ t.mock.method(globalThis, 'fetch', async (url) => {
164
+ const request = new URL(url);
165
+ assert.equal(request.pathname, '/v1/automations/flow/report');
166
+ assert.deepEqual(Object.fromEntries(request.searchParams), window);
167
+ return new Response(JSON.stringify({ success: true, data: report }), { status: 200 });
168
+ });
169
+ const tool = tools(['campaign:read']).migma_get_automation_metrics;
170
+ assert.equal(tool.inputSchema.safeParse({ automationId: 'flow', ...window }).success, true);
171
+ const result = await tool.handler({ automationId: 'flow', ...window }, {});
172
+ assert.deepEqual(JSON.parse(result.content[0].text), report);
173
+ });
174
+ test('invalid and partial reporting windows fail before transport instead of falling back to lifetime', async (t) => {
175
+ t.mock.method(globalThis, 'fetch', async () => { throw new Error('Transport must not be called'); });
176
+ const tool = tools().migma_get_automation_metrics;
177
+ const window = { automationId: 'flow', startDate: '2026-01-01', endDate: '2026-12-31', timezone: 'UTC' };
178
+ assert.equal(tool.inputSchema.safeParse(window).success, true);
179
+ assert.equal(tool.inputSchema.safeParse({ automationId: 'flow' }).success, true);
180
+ for (const args of [
181
+ { automationId: 'flow', startDate: '2026-01-01' },
182
+ { automationId: 'flow', startDate: '2026-01-01', endDate: '2026-01-02' },
183
+ { automationId: 'flow', timezone: 'UTC' },
184
+ { ...window, startDate: '2026-02-30' },
185
+ { ...window, endDate: '2025-12-31' },
186
+ { ...window, endDate: '2027-01-02' },
187
+ { ...window, timezone: 'Invalid/Zone' },
188
+ ]) {
189
+ assert.equal(tool.inputSchema.safeParse(args).success, false, JSON.stringify(args));
190
+ const result = await tool.handler(args, {});
191
+ assert.equal(result.isError, true);
192
+ assert.doesNotMatch(result.content[0].text, /Transport must not be called/);
193
+ }
194
+ });
195
+ test('explicit zero-email generation is accepted and transported without losing zero', async (t) => {
196
+ const tool = tools().migma_generate_automation;
197
+ for (const emailCount of [-1, 13, 0.5]) {
198
+ assert.equal(tool.inputSchema.safeParse({ brief: 'Add a tag', emailCount }).success, false);
199
+ }
200
+ const args = { brief: 'Add an existing tag after signup, with no emails', emailCount: 0, idempotency_key: 'action-only' };
201
+ assert.equal(tool.inputSchema.safeParse(args).success, true);
202
+ t.mock.method(globalThis, 'fetch', async (_url, init) => {
203
+ assert.equal(JSON.parse(init.body).emailCount, 0);
204
+ return new Response(JSON.stringify({ success: true, data: { jobId: 'job', status: 'queued' } }), { status: 202 });
205
+ });
206
+ const result = await tool.handler(args, {});
207
+ assert.equal(result.isError, undefined);
208
+ });
209
+ test('automation writes send one replay key per call and reuse it on transport retries', async (t) => {
210
+ const calls = [];
211
+ t.mock.method(globalThis, 'fetch', async (_url, init) => {
212
+ calls.push({ method: init.method, key: init.headers['Idempotency-Key'] });
213
+ // The first attempt of every call is lost; the transport retries it.
214
+ return calls.length % 2
215
+ ? new Response(JSON.stringify({ success: false, error: 'Unavailable' }), { status: 503 })
216
+ : new Response(JSON.stringify({ success: true, data: { id: 'flow' } }), { status: 200 });
217
+ });
218
+ t.mock.method(globalThis, 'setTimeout', (callback) => { callback(); return 0; });
219
+ const all = tools();
220
+ const hash = 'a'.repeat(64);
221
+ await all.migma_validate_automation.handler({ automationId: 'flow' }, {});
222
+ await all.migma_activate_automation.handler({ automationId: 'flow', confirmed: true, expectedDefinitionHash: hash }, {});
223
+ await all.migma_pause_automation.handler({ automationId: 'flow' }, {});
224
+ await all.migma_update_automation_trigger.handler({ automationId: 'flow', expectedDefinitionHash: hash, trigger: { type: 'event', event: { name: 'contact.subscribed' } } }, {});
225
+ await all.migma_update_automation_wait.handler({ automationId: 'flow', stepId: 'wait', duration: 'P2D', expectedDefinitionHash: hash, idempotency_key: 'wait-edit' }, {});
226
+ assert.equal(calls.length, 10);
227
+ for (let i = 0; i < calls.length; i += 2) {
228
+ assert.ok(calls[i].key);
229
+ assert.equal(calls[i + 1].key, calls[i].key, 'a retried attempt replays the same change');
230
+ }
231
+ assert.equal(new Set(calls.map(call => call.key)).size, 5);
232
+ assert.equal(calls[6].method, 'PUT');
233
+ assert.equal(calls[8].key, 'wait-edit');
234
+ });
235
+ test('trigger and wait inputs match the public API limits before transport', () => {
236
+ const all = tools();
237
+ const base = { automationId: 'flow', expectedDefinitionHash: 'a'.repeat(64) };
238
+ const trigger = (propertyFilters) => ({ ...base, trigger: { type: 'event', event: { name: 'form.submitted', propertyFilters } } });
239
+ const valid = { path: 'formId', op: 'eq', value: 'form' };
240
+ const schema = all.migma_update_automation_trigger.inputSchema;
241
+ assert.equal(schema.safeParse(trigger([valid, { path: 'email', op: 'exists' }])).success, true);
242
+ assert.equal(schema.safeParse(trigger([{ ...valid, value: null }])).success, false, 'null is not a filter value');
243
+ assert.equal(schema.safeParse(trigger([{ path: 'formId', op: 'eq' }])).success, false, 'value operators need a value');
244
+ assert.equal(schema.safeParse(trigger([{ ...valid, path: 'a'.repeat(201) }])).success, false);
245
+ assert.equal(schema.safeParse(trigger(Array(21).fill(valid))).success, false);
246
+ const wait = all.migma_update_automation_wait.inputSchema;
247
+ assert.equal(wait.safeParse({ ...base, stepId: 's'.repeat(160), duration: 'P2D' }).success, true);
248
+ assert.equal(wait.safeParse({ ...base, stepId: 's'.repeat(161), duration: 'P2D' }).success, false);
249
+ assert.equal(wait.safeParse({ ...base, stepId: 'wait', duration: 'P'.padEnd(51, '1') }).success, false);
250
+ });
251
+ test('run detail forwards the requested history size', async (t) => {
252
+ t.mock.method(globalThis, 'fetch', async (url) => {
253
+ assert.equal(url, 'https://api.example.test/v1/automations/flow/runs/run?historyLimit=50');
254
+ return new Response(JSON.stringify({ success: true, data: { id: 'run', history: [], historyTotal: 0 } }), { status: 200 });
255
+ });
256
+ const result = await tools().migma_get_automation_run.handler({ automationId: 'flow', runId: 'run', historyLimit: 50 }, {});
257
+ assert.equal(result.isError, undefined);
258
+ });
259
+ //# sourceMappingURL=automations.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automations.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/automations.test.ts"],"names":[],"mappings":"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"}
@@ -33,29 +33,4 @@ test("favorite retries always set true and surface backend errors", async () =>
33
33
  }
34
34
  assert.deepEqual(calls, [{ id: "email-1", favorite: true }, { id: "email-1", favorite: true }]);
35
35
  });
36
- test("every tool that takes arguments publishes them in tools/list", async () => {
37
- const { Client } = await import("@modelcontextprotocol/sdk/client/index.js");
38
- const { InMemoryTransport } = await import("@modelcontextprotocol/sdk/inMemory.js");
39
- const { createMigmaMcpServer } = await import("../../index.js");
40
- const server = createMigmaMcpServer({ config: { apiKey: "test" } });
41
- const registered = server._registeredTools;
42
- const client = new Client({ name: "schema-check", version: "1" });
43
- const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
44
- await server.connect(serverTransport);
45
- await client.connect(clientTransport);
46
- try {
47
- const { tools: listed } = await client.listTools();
48
- for (const tool of listed) {
49
- const declared = Object.keys(registered[tool.name]?.inputSchema?.shape ?? {});
50
- const published = Object.keys(tool.inputSchema.properties ?? {});
51
- assert.deepEqual(published.sort(), declared.sort(), tool.name);
52
- }
53
- assert.ok(listed.some(t => t.name === "migma_save_reference" && t.inputSchema.properties?.emailId));
54
- assert.ok(listed.some(t => t.name === "migma_update_brand_guidelines" && t.inputSchema.properties?.instructions));
55
- }
56
- finally {
57
- await client.close();
58
- await server.close();
59
- }
60
- });
61
36
  //# sourceMappingURL=brand.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"brand.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/brand.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"brand.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/brand.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,SAAS,KAAK,CAAC,MAAe;IAC5B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7D,kBAAkB,CAAC,MAAM,EAAE,MAAe,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;IACtF,OAAQ,MAIN,CAAC,gBAAgB,CAAC;AACtB,CAAC;AAED,IAAI,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;IAC/E,IAAI,SAAkB,CAAC;IACvB,MAAM,UAAU,GAAG,KAAK,CAAC,EAAE,QAAQ,EAAE;YACnC,qBAAqB,EAAE,KAAK,EAAE,EAAU,EAAE,IAAY,EAAE,EAAE;gBACxD,SAAS,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;gBACzB,OAAO,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;YACrC,CAAC;SACF,EAAE,CAAC,CAAC;IACL,MAAM,UAAU,CAAC,6BAA6B,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACxH,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;AACpH,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;IAC7E,MAAM,KAAK,GAAc,EAAE,CAAC;IAC5B,MAAM,UAAU,GAAG,KAAK,CAAC,EAAE,MAAM,EAAE;YACjC,WAAW,EAAE,KAAK,EAAE,EAAU,EAAE,QAAiB,EAAE,EAAE;gBACnD,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC7B,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,wBAAwB,EAAE,EAAE,CAAC;YAC1D,CAAC;SACF,EAAE,CAAC,CAAC;IACL,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;QACzF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC;IACjE,CAAC;IACD,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAClG,CAAC,CAAC,CAAC"}
@@ -6,13 +6,10 @@ import { InMemoryTransport } from "@modelcontextprotocol/sdk/inMemory.js";
6
6
  import { registerCampaignTools } from "../campaigns.js";
7
7
  function fixture(permissions) {
8
8
  const calls = [];
9
- const client = {
10
- domains: { list: async () => ({ data: [{ domain: "example.test", isVerified: true, status: "verified" }], error: null }) },
11
- campaigns: { create: async (body, options) => {
9
+ const client = { campaigns: { create: async (body, options) => {
12
10
  calls.push({ body, options });
13
11
  return { data: { id: "campaign-1" }, error: null };
14
- } },
15
- };
12
+ } } };
16
13
  const server = new McpServer({ name: "test", version: "1" });
17
14
  registerCampaignTools(server, client, { apiKey: "offline", projectId: "brand-1" }, permissions);
18
15
  const tools = server._registeredTools;
@@ -1 +1 @@
1
- {"version":3,"file":"campaign-recipients.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/campaign-recipients.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"campaign-recipients.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/campaign-recipients.test.ts"],"names":[],"mappings":"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"}