@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,115 +1,177 @@
1
1
  import { z } from "zod";
2
- export function registerGenerateTools(server, client, config) {
3
- server.registerTool("migma_generate_email", {
4
- title: "Generate Email",
5
- description: "Generate one email or a series from a text prompt. Uses the project's brand identity and returns finished HTML, subject lines, email IDs, and screenshots when complete.",
6
- inputSchema: z.object({
7
- projectId: z
8
- .string()
9
- .optional()
10
- .describe("Project/brand ID. Local stdio uses MIGMA_PROJECT_ID if not provided; hosted remote clients should pass projectId."),
11
- prompt: z.string().min(1).describe("Email generation prompt"),
12
- languages: z
13
- .array(z.string())
14
- .max(5)
15
- .optional()
16
- .describe("Languages (e.g. ['en', 'fr']). Default: ['en']"),
17
- count: z
18
- .number()
19
- .int()
20
- .min(1)
21
- .max(12)
22
- .optional()
23
- .describe("Target email count for a series. Omit to infer from prompt."),
24
- }),
25
- }, async (args) => {
26
- const projectId = args.projectId || config.projectId;
27
- if (!projectId) {
28
- return toolError("projectId is required. Provide projectId, or set MIGMA_PROJECT_ID when using local stdio.");
29
- }
30
- const { data, error } = await client.emails.generateAndWait({
31
- projectId,
32
- prompt: args.prompt,
33
- languages: args.languages,
34
- count: args.count,
2
+ import { canUse } from "../permissions.js";
3
+ export function registerGenerateTools(server, client, config, grantedPermissions) {
4
+ if (canUse(grantedPermissions, ["email:write", "email:read"])) {
5
+ server.registerTool("migma_generate_email", {
6
+ title: "Generate Email",
7
+ description: "Generate one email or a series from a text prompt. Uses the project's brand identity and returns finished HTML, subject lines, email IDs, and screenshots when complete. Charges 1 email credit per email produced, taken after generation finishes; a run that produces no email is not charged.",
8
+ inputSchema: z.object({
9
+ projectId: z
10
+ .string()
11
+ .optional()
12
+ .describe("Project/brand ID. Local stdio uses MIGMA_PROJECT_ID if not provided; hosted remote clients should pass projectId."),
13
+ prompt: z.string().min(1).describe("Email generation prompt"),
14
+ languages: z
15
+ .array(z.string())
16
+ .max(5)
17
+ .optional()
18
+ .describe("Languages (e.g. ['en', 'fr']). Default: ['en']"),
19
+ count: z
20
+ .number()
21
+ .int()
22
+ .min(1)
23
+ .max(12)
24
+ .optional()
25
+ .describe("Target email count for a series. Omit to infer from prompt."),
26
+ }),
27
+ }, async (args) => {
28
+ const projectId = args.projectId || config.projectId;
29
+ if (!projectId) {
30
+ return toolError("projectId is required. Provide projectId, or set MIGMA_PROJECT_ID when using local stdio.");
31
+ }
32
+ const { data, error } = await client.emails.generateAndWait({
33
+ projectId,
34
+ prompt: args.prompt,
35
+ languages: args.languages,
36
+ count: args.count,
37
+ });
38
+ if (error)
39
+ return toolError(error.message);
40
+ return toolResult(data);
35
41
  });
36
- if (error)
37
- return toolError(error.message);
38
- return toolResult(data);
39
- });
40
- server.registerTool("migma_get_generation_status", {
41
- title: "Get Generation Status",
42
- description: "Check the status of an email generation. When complete, result.emails[] contains each generated email's emailId, HTML, subject, and screenshot URLs.",
43
- inputSchema: z.object({
44
- conversationId: z.string().describe("The conversation/generation ID"),
45
- }),
46
- }, async (args) => {
47
- const { data, error } = await client.emails.getGenerationStatus(args.conversationId);
48
- if (error)
49
- return toolError(error.message);
50
- return toolResult(data);
51
- });
52
- server.registerTool("migma_send_test_email", {
53
- title: "Send Test Email",
54
- description: "Send a test email for a generated email ID or a single-email conversation.",
55
- inputSchema: z.object({
56
- emailId: z
57
- .string()
58
- .optional()
59
- .describe("Generated email ID from result.emails[].emailId"),
60
- conversationId: z
61
- .string()
62
- .optional()
63
- .describe("Conversation ID. Works when the conversation contains a single email."),
64
- to: z.string().email().describe("Recipient email address"),
65
- }),
66
- }, async (args) => {
67
- if (!args.emailId && !args.conversationId) {
68
- return toolError("emailId or conversationId is required.");
69
- }
70
- const sendTestParams = {
71
- emailId: args.emailId,
72
- conversationId: args.conversationId,
73
- to: args.to,
74
- };
75
- const { data, error } = await client.emails.sendTest(sendTestParams);
76
- if (error)
77
- return toolError(error.message);
78
- return toolResult(data);
79
- });
80
- server.registerTool("migma_get_email", {
81
- title: "Get Email",
82
- description: "Fetch one generated email by emailId. Returns email-safe HTML, subject, screenshot URLs, and metadata.",
83
- inputSchema: z.object({
84
- emailId: z.string().describe("Generated email ID from result.emails[].emailId"),
85
- }),
86
- }, async (args) => {
87
- const { data, error } = await client.emails.get(args.emailId);
88
- if (error)
89
- return toolError(error.message);
90
- return toolResult(data);
91
- });
92
- server.registerTool("migma_edit_email", {
93
- title: "Edit Email",
94
- description: "Edit one generated email with a natural-language prompt. Returns the updated HTML, subject, screenshot URLs, and metadata.",
95
- inputSchema: z.object({
96
- emailId: z.string().describe("Generated email ID from result.emails[].emailId"),
97
- prompt: z
98
- .string()
99
- .min(1)
100
- .describe("Edit instruction, e.g. 'Make the welcome email shorter and more transactional.'"),
101
- label: z.string().optional().describe("Optional version label for this edit."),
102
- }),
103
- }, async (args) => {
104
- const emails = client.emails;
105
- const { data, error } = await emails.edit(args.emailId, {
106
- prompt: args.prompt,
107
- label: args.label,
42
+ }
43
+ if (canUse(grantedPermissions, ["email:read"])) {
44
+ server.registerTool("migma_get_generation_status", {
45
+ title: "Get Generation Status",
46
+ description: "Check the status of an email generation. When complete, result.emails[] contains each generated email's emailId, HTML, subject, and screenshot URLs.",
47
+ annotations: { readOnlyHint: true },
48
+ inputSchema: z.object({
49
+ conversationId: z.string().describe("The conversation/generation ID"),
50
+ }),
51
+ }, async (args) => {
52
+ const { data, error } = await client.emails.getGenerationStatus(args.conversationId);
53
+ if (error)
54
+ return toolError(error.message);
55
+ return toolResult(data);
108
56
  });
109
- if (error)
110
- return toolError(error.message);
111
- return toolResult(data);
112
- });
57
+ }
58
+ if (canUse(grantedPermissions, ["email:send"])) {
59
+ server.registerTool("migma_send_test_email", {
60
+ title: "Send Test Email",
61
+ description: "Send a test email for a generated email ID or a single-email conversation.",
62
+ inputSchema: z.object({
63
+ emailId: z
64
+ .string()
65
+ .optional()
66
+ .describe("Generated email ID from result.emails[].emailId"),
67
+ conversationId: z
68
+ .string()
69
+ .optional()
70
+ .describe("Conversation ID. Works when the conversation contains a single email."),
71
+ to: z.string().email().describe("Recipient email address"),
72
+ }),
73
+ }, async (args) => {
74
+ if (!args.emailId && !args.conversationId) {
75
+ return toolError("emailId or conversationId is required.");
76
+ }
77
+ const sendTestParams = {
78
+ emailId: args.emailId,
79
+ conversationId: args.conversationId,
80
+ to: args.to,
81
+ };
82
+ const { data, error } = await client.emails.sendTest(sendTestParams);
83
+ if (error)
84
+ return toolError(error.message);
85
+ return toolResult(data);
86
+ });
87
+ }
88
+ if (canUse(grantedPermissions, ["email:read"])) {
89
+ server.registerTool("migma_get_email", {
90
+ title: "Get Email",
91
+ description: "Fetch one generated email by emailId. Returns email-safe HTML, subject, screenshot URLs, variable requirements, and metadata.",
92
+ annotations: { readOnlyHint: true },
93
+ inputSchema: z.object({
94
+ emailId: z.string().describe("Generated email ID from result.emails[].emailId"),
95
+ }),
96
+ }, async (args) => {
97
+ const { data, error } = await client.emails.get(args.emailId);
98
+ if (error)
99
+ return toolError(error.message);
100
+ return toolResult(data);
101
+ });
102
+ }
103
+ if (canUse(grantedPermissions, ["email:write"])) {
104
+ server.registerTool("migma_edit_email", {
105
+ title: "Edit Email",
106
+ description: "Edit one generated email with a natural-language prompt. Returns the updated HTML, subject, screenshot URLs, and metadata. Charges 0.5 email credit, the same as an edit in the dashboard, taken only after the edit persists.",
107
+ inputSchema: z.object({
108
+ emailId: z.string().describe("Generated email ID from result.emails[].emailId"),
109
+ prompt: z
110
+ .string()
111
+ .min(1)
112
+ .describe("Edit instruction, e.g. 'Make the welcome email shorter and more transactional.'"),
113
+ label: z.string().optional().describe("Optional version label for this edit."),
114
+ }),
115
+ }, async (args) => {
116
+ const emails = client.emails;
117
+ const { data, error } = await emails.edit(args.emailId, {
118
+ prompt: args.prompt,
119
+ label: args.label,
120
+ });
121
+ if (error)
122
+ return toolError(error.message);
123
+ return toolResult(data);
124
+ });
125
+ }
126
+ if (canUse(grantedPermissions, ["email:read"])) {
127
+ server.registerTool("migma_get_email_metrics", {
128
+ title: "Get Email Metrics",
129
+ description: "Aggregate performance for one generated email across every API send of it: summary (totalEmails, delivered, opened, clicked, bounced, complained, unsubscribed, plus 0-100 rates), a daily timeSeries, and countryBreakdown. Sourced from the tracking worker (may be slightly stale, ~30-day raw window). Opens are directional — Apple Mail Privacy Protection and bots inflate them; clicks and delivery events are stronger signals.",
130
+ annotations: { readOnlyHint: true },
131
+ inputSchema: z.object({
132
+ emailId: z.string().describe("Generated email ID from result.emails[].emailId"),
133
+ }),
134
+ }, async (args) => {
135
+ const { data, error } = await client.emails.metrics(args.emailId);
136
+ if (error)
137
+ return toolError(error.message);
138
+ return toolResult(data);
139
+ });
140
+ }
141
+ if (canUse(grantedPermissions, ["email:read"])) {
142
+ server.registerTool("migma_get_email_logs", {
143
+ title: "Get Email Logs",
144
+ description: "Per-recipient send log for one generated email, cursor-paginated. Each row comes from the tracking worker's D1 table (snake_case): to_email, from_email, subject, status, opened_at, clicked_at, open_count, click_count, bounce_type, complaint_type, created_at. Returns { emails, nextCursor, hasMore }.",
145
+ annotations: { readOnlyHint: true },
146
+ inputSchema: z.object({
147
+ emailId: z.string().describe("Generated email ID from result.emails[].emailId"),
148
+ limit: z
149
+ .number()
150
+ .int()
151
+ .min(1)
152
+ .max(100)
153
+ .optional()
154
+ .describe("Max rows per page (default 20, capped at 100)"),
155
+ cursor: z
156
+ .string()
157
+ .optional()
158
+ .describe("Pagination cursor from a previous response's nextCursor"),
159
+ status: z
160
+ .enum(["delivered", "opened", "clicked", "bounced", "complained", "suppressed", "sent"])
161
+ .optional()
162
+ .describe("Filter rows by delivery/engagement status"),
163
+ }),
164
+ }, async (args) => {
165
+ const { data, error } = await client.emails.logs(args.emailId, {
166
+ limit: args.limit,
167
+ cursor: args.cursor,
168
+ status: args.status,
169
+ });
170
+ if (error)
171
+ return toolError(error.message);
172
+ return toolResult(data);
173
+ });
174
+ }
113
175
  }
114
176
  function toolResult(data) {
115
177
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/tools/generate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/tools/generate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { Migma } from "migma";
3
+ export declare function registerMetricsTools(server: McpServer, client: Migma, grantedPermissions?: string[]): void;
4
+ //# sourceMappingURL=metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/tools/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAInC,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,KAAK,EACb,kBAAkB,CAAC,EAAE,MAAM,EAAE,QA2B9B"}
@@ -0,0 +1,39 @@
1
+ import { z } from "zod";
2
+ import { canUse } from "../permissions.js";
3
+ export function registerMetricsTools(server, client, grantedPermissions) {
4
+ if (canUse(grantedPermissions, ["email:read"])) {
5
+ server.registerTool("migma_get_sending_metrics", {
6
+ title: "Get Sending Metrics",
7
+ description: "Get account sending usage, delivery outcomes, daily and monthly limits, remaining capacity, and optional monthly history.",
8
+ annotations: { readOnlyHint: true },
9
+ inputSchema: z.object({
10
+ months: z
11
+ .number()
12
+ .int()
13
+ .min(1)
14
+ .max(12)
15
+ .optional()
16
+ .describe("Number of monthly history periods to include (1-12)"),
17
+ }),
18
+ }, async (args) => {
19
+ const { data, error } = await client.metrics.sending({ months: args.months });
20
+ if (error)
21
+ return toolError(error.message);
22
+ return toolResult(data);
23
+ });
24
+ }
25
+ }
26
+ function toolResult(data) {
27
+ return {
28
+ content: [
29
+ { type: "text", text: JSON.stringify(data, null, 2) },
30
+ ],
31
+ };
32
+ }
33
+ function toolError(message) {
34
+ return {
35
+ content: [{ type: "text", text: message }],
36
+ isError: true,
37
+ };
38
+ }
39
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/tools/metrics.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,MAAM,UAAU,oBAAoB,CAClC,MAAiB,EACjB,MAAa,EACb,kBAA6B;IAE7B,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;QAC/C,MAAM,CAAC,YAAY,CACjB,2BAA2B,EAC3B;YACE,KAAK,EAAE,qBAAqB;YAC5B,WAAW,EACT,2HAA2H;YAC7H,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;YACnC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;gBACpB,MAAM,EAAE,CAAC;qBACN,MAAM,EAAE;qBACR,GAAG,EAAE;qBACL,GAAG,CAAC,CAAC,CAAC;qBACN,GAAG,CAAC,EAAE,CAAC;qBACP,QAAQ,EAAE;qBACV,QAAQ,CAAC,qDAAqD,CAAC;aACnE,CAAC;SACH,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;YACb,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAC9E,IAAI,KAAK;gBAAE,OAAO,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC3C,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC,CACF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,IAAa;IAC/B,OAAO;QACL,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;SAC/D;KACF,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,OAAe;IAChC,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QACnD,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC"}
@@ -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 registerProjectTools(server: McpServer, client: Migma, config: Config): void;
4
+ export declare function registerProjectTools(server: McpServer, client: Migma, config: Config, grantedPermissions?: string[]): void;
5
5
  //# sourceMappingURL=projects.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/tools/projects.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAS3C,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,KAAK,EACb,MAAM,EAAE,MAAM,QAsGf"}
1
+ {"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/tools/projects.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAU3C,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,KAAK,EACb,MAAM,EAAE,MAAM,EACd,kBAAkB,CAAC,EAAE,MAAM,EAAE,QAiH9B"}
@@ -1,83 +1,95 @@
1
1
  import { z } from "zod";
2
- export function registerProjectTools(server, client, config) {
3
- server.registerTool("migma_list_projects", {
4
- title: "List Projects",
5
- description: "List all Migma projects (brands). Returns project IDs, names, domains, and statuses.",
6
- inputSchema: z.object({
7
- limit: z
8
- .number()
9
- .int()
10
- .min(1)
11
- .max(100)
12
- .optional()
13
- .describe("Max results (default 20)"),
14
- offset: z
15
- .number()
16
- .int()
17
- .min(0)
18
- .optional()
19
- .describe("Pagination offset"),
20
- }),
21
- }, async (args) => {
22
- const { data, error } = await client.projects.list({
23
- limit: args.limit,
24
- offset: args.offset,
2
+ import { canUse } from "../permissions.js";
3
+ export function registerProjectTools(server, client, config, grantedPermissions) {
4
+ if (canUse(grantedPermissions, ["email:read"])) {
5
+ server.registerTool("migma_list_projects", {
6
+ title: "List Projects",
7
+ description: "List all Migma projects (brands). Returns project IDs, names, domains, and statuses.",
8
+ annotations: { readOnlyHint: true },
9
+ inputSchema: z.object({
10
+ limit: z
11
+ .number()
12
+ .int()
13
+ .min(1)
14
+ .max(100)
15
+ .optional()
16
+ .describe("Max results (default 20)"),
17
+ offset: z
18
+ .number()
19
+ .int()
20
+ .min(0)
21
+ .optional()
22
+ .describe("Pagination offset"),
23
+ }),
24
+ }, async (args) => {
25
+ const { data, error } = await client.projects.list({
26
+ limit: args.limit,
27
+ offset: args.offset,
28
+ });
29
+ if (error)
30
+ return toolError(error.message);
31
+ return toolResult(data);
25
32
  });
26
- if (error)
27
- return toolError(error.message);
28
- return toolResult(data);
29
- });
30
- server.registerTool("migma_get_project", {
31
- title: "Get Project Details",
32
- description: "Get detailed information about a Migma project/brand including colors, fonts, logos, and tone of voice.",
33
- inputSchema: z.object({
34
- projectId: z.string().describe("The project ID"),
35
- }),
36
- }, async (args) => {
37
- const { data, error } = await client.projects.get(args.projectId);
38
- if (error)
39
- return toolError(error.message);
40
- return toolResult(data);
41
- });
42
- server.registerTool("migma_import_brand", {
43
- title: "Import Brand",
44
- description: "Import a brand from one or more website URLs. Extracts colors, fonts, logos, and tone of voice. Polls until import completes.",
45
- inputSchema: z.object({
46
- urls: z
47
- .array(z.string())
48
- .min(1)
49
- .max(10)
50
- .describe("Website URLs to import brand from"),
51
- }),
52
- }, async (args) => {
53
- const { data, error } = await client.projects.importAndWait({
54
- urls: args.urls,
33
+ }
34
+ if (canUse(grantedPermissions, ["email:read"])) {
35
+ server.registerTool("migma_get_project", {
36
+ title: "Get Project Details",
37
+ description: "Get detailed information about a Migma project/brand including colors, fonts, logos, and tone of voice.",
38
+ annotations: { readOnlyHint: true },
39
+ inputSchema: z.object({
40
+ projectId: z.string().describe("The project ID"),
41
+ }),
42
+ }, async (args) => {
43
+ const { data, error } = await client.projects.get(args.projectId);
44
+ if (error)
45
+ return toolError(error.message);
46
+ return toolResult(data);
55
47
  });
56
- if (error)
57
- return toolError(error.message);
58
- return toolResult(data);
59
- });
60
- server.registerTool("migma_get_field_catalog", {
61
- title: "Get Project Field Catalog",
62
- description: "Get the project's subscriber field catalog: which fields exist (e.g. firstName, company), how often each is populated (fillRate 0–1), example values, and whether the field is auto-filled at send time. Use this to discover available template variables before drafting an email. Optionally scope by segmentId or tag.",
63
- inputSchema: z.object({
64
- projectId: z.string().describe("The project ID"),
65
- segmentId: z
66
- .string()
67
- .optional()
68
- .describe("Restrict the catalog to subscribers in this segment"),
69
- tag: z
70
- .string()
71
- .optional()
72
- .describe("Restrict the catalog to subscribers with this tag id"),
73
- }),
74
- }, async (args) => {
75
- const projects = client.projects;
76
- const { data, error } = await projects.fieldCatalog(args.projectId, { segmentId: args.segmentId, tag: args.tag });
77
- if (error)
78
- return toolError(error.message);
79
- return toolResult(data);
80
- });
48
+ }
49
+ if (canUse(grantedPermissions, ["project:write", "email:read"])) {
50
+ server.registerTool("migma_import_brand", {
51
+ title: "Import Brand",
52
+ description: "Import a brand from one or more website URLs. Extracts colors, fonts, logos, and tone of voice. Polls until import completes.",
53
+ inputSchema: z.object({
54
+ urls: z
55
+ .array(z.string())
56
+ .min(1)
57
+ .max(10)
58
+ .describe("Website URLs to import brand from"),
59
+ }),
60
+ }, async (args) => {
61
+ const { data, error } = await client.projects.importAndWait({
62
+ urls: args.urls,
63
+ });
64
+ if (error)
65
+ return toolError(error.message);
66
+ return toolResult(data);
67
+ });
68
+ }
69
+ if (canUse(grantedPermissions, ["audience:read"])) {
70
+ server.registerTool("migma_get_field_catalog", {
71
+ title: "Get Project Field Catalog",
72
+ description: "Get the project's subscriber field catalog: which fields exist (e.g. firstName, company), how often each is populated (fillRate 0–1), example values, and whether the field is auto-filled at send time. Use this to discover available template variables before drafting an email. Optionally scope by segmentId or tag.",
73
+ annotations: { readOnlyHint: true },
74
+ inputSchema: z.object({
75
+ projectId: z.string().describe("The project ID"),
76
+ segmentId: z
77
+ .string()
78
+ .optional()
79
+ .describe("Restrict the catalog to subscribers in this segment"),
80
+ tag: z
81
+ .string()
82
+ .optional()
83
+ .describe("Restrict the catalog to subscribers with this tag id"),
84
+ }),
85
+ }, async (args) => {
86
+ const projects = client.projects;
87
+ const { data, error } = await projects.fieldCatalog(args.projectId, { segmentId: args.segmentId, tag: args.tag });
88
+ if (error)
89
+ return toolError(error.message);
90
+ return toolResult(data);
91
+ });
92
+ }
81
93
  }
82
94
  function toolResult(data) {
83
95
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/tools/projects.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/tools/projects.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 registerSegmentTools(server: McpServer, client: Migma, config: Config): void;
4
+ export declare function registerSegmentTools(server: McpServer, client: Migma, config: Config, grantedPermissions?: string[]): void;
5
5
  //# sourceMappingURL=segments.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"segments.d.ts","sourceRoot":"","sources":["../../src/tools/segments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAyC3C,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,KAAK,EACb,MAAM,EAAE,MAAM,QA2Ff"}
1
+ {"version":3,"file":"segments.d.ts","sourceRoot":"","sources":["../../src/tools/segments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AA0D3C,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,KAAK,EACb,MAAM,EAAE,MAAM,EACd,kBAAkB,CAAC,EAAE,MAAM,EAAE,QAkG9B"}