@iterable/mcp 1.0.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 (140) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +318 -0
  3. package/TOOLS.md +133 -0
  4. package/dist/client-detection.d.ts +7 -0
  5. package/dist/client-detection.d.ts.map +1 -0
  6. package/dist/client-detection.js +22 -0
  7. package/dist/client-detection.js.map +1 -0
  8. package/dist/config.d.ts +25 -0
  9. package/dist/config.d.ts.map +1 -0
  10. package/dist/config.js +74 -0
  11. package/dist/config.js.map +1 -0
  12. package/dist/http-headers.d.ts +5 -0
  13. package/dist/http-headers.d.ts.map +1 -0
  14. package/dist/http-headers.js +5 -0
  15. package/dist/http-headers.js.map +1 -0
  16. package/dist/index.d.ts +3 -0
  17. package/dist/index.d.ts.map +1 -0
  18. package/dist/index.js +43 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/install.d.ts +41 -0
  21. package/dist/install.d.ts.map +1 -0
  22. package/dist/install.js +725 -0
  23. package/dist/install.js.map +1 -0
  24. package/dist/key-manager.d.ts +236 -0
  25. package/dist/key-manager.d.ts.map +1 -0
  26. package/dist/key-manager.js +776 -0
  27. package/dist/key-manager.js.map +1 -0
  28. package/dist/keys-cli.d.ts +8 -0
  29. package/dist/keys-cli.d.ts.map +1 -0
  30. package/dist/keys-cli.js +487 -0
  31. package/dist/keys-cli.js.map +1 -0
  32. package/dist/prompts.d.ts +15 -0
  33. package/dist/prompts.d.ts.map +1 -0
  34. package/dist/prompts.js +66 -0
  35. package/dist/prompts.js.map +1 -0
  36. package/dist/schema-utils.d.ts +22 -0
  37. package/dist/schema-utils.d.ts.map +1 -0
  38. package/dist/schema-utils.js +65 -0
  39. package/dist/schema-utils.js.map +1 -0
  40. package/dist/server.d.ts +13 -0
  41. package/dist/server.d.ts.map +1 -0
  42. package/dist/server.js +172 -0
  43. package/dist/server.js.map +1 -0
  44. package/dist/shutdown.d.ts +5 -0
  45. package/dist/shutdown.d.ts.map +1 -0
  46. package/dist/shutdown.js +68 -0
  47. package/dist/shutdown.js.map +1 -0
  48. package/dist/tool-filter.d.ts +19 -0
  49. package/dist/tool-filter.d.ts.map +1 -0
  50. package/dist/tool-filter.js +144 -0
  51. package/dist/tool-filter.js.map +1 -0
  52. package/dist/tools/campaigns.d.ts +7 -0
  53. package/dist/tools/campaigns.d.ts.map +1 -0
  54. package/dist/tools/campaigns.js +88 -0
  55. package/dist/tools/campaigns.js.map +1 -0
  56. package/dist/tools/catalogs.d.ts +7 -0
  57. package/dist/tools/catalogs.d.ts.map +1 -0
  58. package/dist/tools/catalogs.js +85 -0
  59. package/dist/tools/catalogs.js.map +1 -0
  60. package/dist/tools/events.d.ts +7 -0
  61. package/dist/tools/events.d.ts.map +1 -0
  62. package/dist/tools/events.js +34 -0
  63. package/dist/tools/events.js.map +1 -0
  64. package/dist/tools/experiments.d.ts +7 -0
  65. package/dist/tools/experiments.d.ts.map +1 -0
  66. package/dist/tools/experiments.js +16 -0
  67. package/dist/tools/experiments.js.map +1 -0
  68. package/dist/tools/export.d.ts +7 -0
  69. package/dist/tools/export.d.ts.map +1 -0
  70. package/dist/tools/export.js +41 -0
  71. package/dist/tools/export.js.map +1 -0
  72. package/dist/tools/index.d.ts +19 -0
  73. package/dist/tools/index.d.ts.map +1 -0
  74. package/dist/tools/index.js +44 -0
  75. package/dist/tools/index.js.map +1 -0
  76. package/dist/tools/journeys.d.ts +10 -0
  77. package/dist/tools/journeys.d.ts.map +1 -0
  78. package/dist/tools/journeys.js +25 -0
  79. package/dist/tools/journeys.js.map +1 -0
  80. package/dist/tools/lists.d.ts +7 -0
  81. package/dist/tools/lists.d.ts.map +1 -0
  82. package/dist/tools/lists.js +58 -0
  83. package/dist/tools/lists.js.map +1 -0
  84. package/dist/tools/messaging.d.ts +11 -0
  85. package/dist/tools/messaging.d.ts.map +1 -0
  86. package/dist/tools/messaging.js +103 -0
  87. package/dist/tools/messaging.js.map +1 -0
  88. package/dist/tools/snippets.d.ts +7 -0
  89. package/dist/tools/snippets.d.ts.map +1 -0
  90. package/dist/tools/snippets.js +46 -0
  91. package/dist/tools/snippets.js.map +1 -0
  92. package/dist/tools/subscriptions.d.ts +4 -0
  93. package/dist/tools/subscriptions.d.ts.map +1 -0
  94. package/dist/tools/subscriptions.js +37 -0
  95. package/dist/tools/subscriptions.js.map +1 -0
  96. package/dist/tools/templates.d.ts +7 -0
  97. package/dist/tools/templates.d.ts.map +1 -0
  98. package/dist/tools/templates.js +118 -0
  99. package/dist/tools/templates.js.map +1 -0
  100. package/dist/tools/users.d.ts +10 -0
  101. package/dist/tools/users.d.ts.map +1 -0
  102. package/dist/tools/users.js +74 -0
  103. package/dist/tools/users.js.map +1 -0
  104. package/dist/tools/webhooks.d.ts +7 -0
  105. package/dist/tools/webhooks.d.ts.map +1 -0
  106. package/dist/tools/webhooks.js +22 -0
  107. package/dist/tools/webhooks.js.map +1 -0
  108. package/dist/utils/cli-env.d.ts +11 -0
  109. package/dist/utils/cli-env.d.ts.map +1 -0
  110. package/dist/utils/cli-env.js +32 -0
  111. package/dist/utils/cli-env.js.map +1 -0
  112. package/dist/utils/endpoint-prompt.d.ts +14 -0
  113. package/dist/utils/endpoint-prompt.d.ts.map +1 -0
  114. package/dist/utils/endpoint-prompt.js +73 -0
  115. package/dist/utils/endpoint-prompt.js.map +1 -0
  116. package/dist/utils/formatting.d.ts +10 -0
  117. package/dist/utils/formatting.d.ts.map +1 -0
  118. package/dist/utils/formatting.js +12 -0
  119. package/dist/utils/formatting.js.map +1 -0
  120. package/dist/utils/password-prompt.d.ts +19 -0
  121. package/dist/utils/password-prompt.d.ts.map +1 -0
  122. package/dist/utils/password-prompt.js +37 -0
  123. package/dist/utils/password-prompt.js.map +1 -0
  124. package/dist/utils/sanitize.d.ts +13 -0
  125. package/dist/utils/sanitize.d.ts.map +1 -0
  126. package/dist/utils/sanitize.js +23 -0
  127. package/dist/utils/sanitize.js.map +1 -0
  128. package/dist/utils/tool-config.d.ts +13 -0
  129. package/dist/utils/tool-config.d.ts.map +1 -0
  130. package/dist/utils/tool-config.js +45 -0
  131. package/dist/utils/tool-config.js.map +1 -0
  132. package/dist/utils/ui.d.ts +90 -0
  133. package/dist/utils/ui.d.ts.map +1 -0
  134. package/dist/utils/ui.js +298 -0
  135. package/dist/utils/ui.js.map +1 -0
  136. package/dist/utils/url.d.ts +20 -0
  137. package/dist/utils/url.d.ts.map +1 -0
  138. package/dist/utils/url.js +53 -0
  139. package/dist/utils/url.js.map +1 -0
  140. package/package.json +105 -0
@@ -0,0 +1,298 @@
1
+ /**
2
+ * Beautiful CLI UI utilities with modern styling
3
+ */
4
+ import boxen from "boxen";
5
+ import chalk from "chalk";
6
+ import Table from "cli-table3";
7
+ import figlet from "figlet";
8
+ import gradient from "gradient-string";
9
+ // Unified brand/theme palette (Iterable official logo colors)
10
+ // Dots: Purple (top), Pink (left), Cyan (right), Teal (bottom)
11
+ // Light diamond tints used for gradients and subtle accents
12
+ const THEME = {
13
+ // Brand core
14
+ primary: "#5F40D8", // Iterable purple
15
+ accent: "#16C5FF", // Iterable cyan
16
+ brandTeal: "#5DB5A1", // Iterable teal
17
+ brandPink: "#E64F7C", // Iterable pink
18
+ lightLavender: "#E8DFF5",
19
+ lightCyan: "#D4F1F9",
20
+ lightPink: "#FDE2ED",
21
+ lightTeal: "#D5F0EB",
22
+ // UI semantics (mapped to closest brand hues)
23
+ success: "#5DB5A1", // use brand teal for success
24
+ warning: "#F59E0B", // keep amber for accessibility (non-brand)
25
+ error: "#E64F7C", // map error to brand pink (high contrast)
26
+ info: "#16C5FF", // map info to brand cyan
27
+ // Neutrals
28
+ neutralDark: "#111827", // gray-900
29
+ neutral: "#6B7280", // gray-500
30
+ neutralLight: "#E5E7EB", // gray-200
31
+ neutralLighter: "#CBD5E1", // slate-300 (better on dark)
32
+ purpleBright: "#C4B5FD", // violet-300 for dark legibility
33
+ };
34
+ function headerGradient(dark) {
35
+ // Two-color brand gradient per request
36
+ // Dark bg: Purple → Pink
37
+ // Light bg: LightLavender → LightPink
38
+ const start = dark ? THEME.primary : THEME.lightLavender;
39
+ const end = dark ? THEME.brandPink : THEME.lightPink;
40
+ return gradient(start, end);
41
+ }
42
+ // Emoji icons for consistent branding
43
+ export const icons = {
44
+ rocket: "🚀",
45
+ key: "🔑",
46
+ check: "✅",
47
+ cross: "❌",
48
+ warning: "⚠️",
49
+ info: "ℹ️",
50
+ sparkles: "✨",
51
+ lock: "🔒",
52
+ globe: "🌍",
53
+ zap: "⚡",
54
+ party: "🎉",
55
+ target: "🎯",
56
+ bulb: "💡",
57
+ fire: "🔥",
58
+ };
59
+ /**
60
+ * Display the Iterable logo in ANSI art with version info
61
+ */
62
+ // Detect terminal background (best-effort) using COLORFGBG; default to dark
63
+ function isDarkBackground() {
64
+ const cfg = process.env.COLORFGBG;
65
+ if (!cfg)
66
+ return true;
67
+ const parts = cfg.split(";");
68
+ const bg = parseInt(parts[parts.length - 1] || "", 10);
69
+ if (Number.isNaN(bg))
70
+ return true;
71
+ return bg <= 7; // 0-7 dark, 8-15 light
72
+ }
73
+ export function showIterableLogo(version) {
74
+ console.clear();
75
+ const dark = isDarkBackground();
76
+ const titleColor = dark ? THEME.neutralLight : THEME.neutralDark;
77
+ const versionColor = dark ? THEME.neutralLighter : THEME.neutral;
78
+ // Gradient colors are chosen inside headerGradient(dark)
79
+ const big1 = figlet.textSync("ITERABLE", { font: "ANSI Shadow" }).split("\n");
80
+ const maxLen = Math.max(...big1.map((l) => l.length), 32);
81
+ const grad = headerGradient(dark);
82
+ const bar = "━".repeat(maxLen);
83
+ const lines = [];
84
+ lines.push(grad(bar));
85
+ big1.forEach((l) => lines.push(grad(l.padEnd(maxLen))));
86
+ lines.push(grad(bar));
87
+ lines.push(chalk.bold.hex(titleColor)("Iterable MCP Server") +
88
+ " " +
89
+ chalk.hex(versionColor)(`v${version}`));
90
+ // Beta disclaimer (more gray + dim under version)
91
+ const disclaimerHex = THEME.neutral; // intentionally more gray than version text
92
+ lines.push(chalk.hex(disclaimerHex).dim("This is currently in beta and it can make mistakes."));
93
+ lines.push(chalk.hex(disclaimerHex).dim("Please exercise caution when using this with production API keys."));
94
+ lines.push(grad(bar));
95
+ const content = lines.join("\n");
96
+ console.log(boxen(content, {
97
+ padding: { top: 1, bottom: 1, left: 4, right: 4 },
98
+ margin: { top: 1, bottom: 1 },
99
+ borderStyle: "round",
100
+ borderColor: dark ? THEME.accent : THEME.primary,
101
+ }));
102
+ }
103
+ /**
104
+ * Display a beautiful header with bold ASCII art and gorgeous gradient
105
+ */
106
+ export function showHeader(text, subtitle) {
107
+ console.clear();
108
+ console.log();
109
+ // Bold, gorgeous ASCII art using "ANSI Shadow" font
110
+ const asciiArt = figlet.textSync(text, {
111
+ font: "ANSI Shadow",
112
+ horizontalLayout: "default",
113
+ verticalLayout: "default",
114
+ });
115
+ // Apply beautiful, accessible gradient based on background
116
+ const dark = isDarkBackground();
117
+ console.log(headerGradient(dark)(asciiArt));
118
+ if (subtitle) {
119
+ console.log(chalk.gray(centerText(subtitle)));
120
+ }
121
+ console.log();
122
+ }
123
+ /**
124
+ * Center text in the terminal
125
+ */
126
+ function centerText(text) {
127
+ const width = process.stdout.columns || 80;
128
+ const padding = Math.max(0, Math.floor((width - text.length) / 2));
129
+ return " ".repeat(padding) + text;
130
+ }
131
+ /**
132
+ * Display a beautiful box with content
133
+ */
134
+ export function showBox(title, content, options = {}) {
135
+ const { icon, theme = "primary", padding = 1 } = options;
136
+ const displayTitle = icon ? `${icon} ${title}` : title;
137
+ const lines = Array.isArray(content) ? content : [content];
138
+ const message = lines.join("\n");
139
+ console.log(boxen(message, {
140
+ title: displayTitle,
141
+ titleAlignment: "center",
142
+ padding,
143
+ margin: { top: 1, bottom: 1 },
144
+ borderStyle: "round",
145
+ borderColor: theme === "primary" ? "magenta" : theme === "success" ? "green" : theme === "warning" ? "yellow" : theme === "error" ? "red" : "cyan",
146
+ }));
147
+ }
148
+ /**
149
+ * Display a success message
150
+ */
151
+ export function showSuccess(message) {
152
+ console.log(chalk.hex(THEME.success)(" " + icons.check + " " + message));
153
+ }
154
+ /**
155
+ * Display an error message
156
+ */
157
+ export function showError(message) {
158
+ console.log(chalk.hex(THEME.error)(" " + icons.cross + " " + message));
159
+ }
160
+ /**
161
+ * Display a warning message
162
+ */
163
+ export function showWarning(message) {
164
+ console.log(chalk.hex(THEME.warning)(" " + icons.warning + " " + message));
165
+ }
166
+ /**
167
+ * Display an info message
168
+ */
169
+ export function showInfo(message) {
170
+ console.log(chalk.hex(THEME.info)(" " + icons.info + " " + message));
171
+ }
172
+ /**
173
+ * Display a tip message
174
+ */
175
+ export function showTip(message) {
176
+ console.log(chalk.hex(THEME.accent)(" " + icons.bulb + " " + message));
177
+ }
178
+ /**
179
+ * Create a beautiful table
180
+ */
181
+ export function createTable(options) {
182
+ const { head, colWidths, style = "normal" } = options;
183
+ const padding = style === "compact" ? { left: 1, right: 1 } : style === "spacious" ? { left: 2, right: 2 } : { left: 1, right: 1 };
184
+ return new Table({
185
+ head: head.map((h) => chalk.bold.hex(THEME.accent)(h)),
186
+ ...(colWidths && { colWidths }),
187
+ style: {
188
+ head: [],
189
+ border: ["cyan"],
190
+ "padding-left": padding.left,
191
+ "padding-right": padding.right,
192
+ },
193
+ chars: {
194
+ top: "─",
195
+ "top-mid": "┬",
196
+ "top-left": "╭",
197
+ "top-right": "╮",
198
+ bottom: "─",
199
+ "bottom-mid": "┴",
200
+ "bottom-left": "╰",
201
+ "bottom-right": "╯",
202
+ left: "│",
203
+ "left-mid": "├",
204
+ mid: "─",
205
+ "mid-mid": "┼",
206
+ right: "│",
207
+ "right-mid": "┤",
208
+ middle: "│",
209
+ },
210
+ });
211
+ }
212
+ /**
213
+ * Display a section header
214
+ */
215
+ export function showSection(title, icon) {
216
+ console.log();
217
+ // Reduce emoji usage by default; enable via ITERABLE_UI_ICONS=true
218
+ const showIcons = process.env.ITERABLE_UI_ICONS === "true";
219
+ const displayTitle = icon && showIcons ? `${icon} ${title}` : title;
220
+ const dark = isDarkBackground();
221
+ const titleHex = dark ? THEME.purpleBright : THEME.primary;
222
+ const lineHex = dark ? THEME.neutralLighter : THEME.neutral;
223
+ console.log(chalk.bold.hex(titleHex)(displayTitle));
224
+ console.log(chalk.hex(lineHex)("─".repeat(Math.min(displayTitle.length + 2, 60))));
225
+ }
226
+ /**
227
+ * Display a completion message with celebration
228
+ */
229
+ export function showCompletion(title, nextSteps, tips) {
230
+ console.log();
231
+ console.log(chalk.bold.hex(THEME.success)(title));
232
+ console.log(chalk.hex(isDarkBackground() ? THEME.neutralLighter : THEME.neutral)("─".repeat(50)));
233
+ console.log();
234
+ if (nextSteps && nextSteps.length > 0) {
235
+ console.log(chalk.bold.hex(THEME.primary)("Next Steps"));
236
+ console.log();
237
+ nextSteps.forEach((step, idx) => {
238
+ console.log(chalk.whiteBright(` ${idx + 1}. ${step}`));
239
+ });
240
+ console.log();
241
+ }
242
+ if (tips && tips.length > 0) {
243
+ console.log(chalk.bold.hex(THEME.accent)("Pro Tips"));
244
+ console.log();
245
+ const muted = chalk.hex(isDarkBackground() ? THEME.neutralLighter : THEME.neutral);
246
+ tips.forEach((tip) => {
247
+ console.log(muted(` • ${tip}`));
248
+ });
249
+ console.log();
250
+ }
251
+ console.log(chalk.hex(THEME.success)("Your Iterable MCP server is ready to go!"));
252
+ console.log();
253
+ }
254
+ /**
255
+ * Format a key-value pair for display
256
+ */
257
+ export function formatKeyValue(key, value, color = chalk.white) {
258
+ const muted = chalk.hex(isDarkBackground() ? THEME.neutralLighter : THEME.neutral);
259
+ return ` ${muted(key + ":")} ${color(value)}`;
260
+ }
261
+ /**
262
+ * Create a beautiful divider
263
+ */
264
+ export function showDivider(style = "light") {
265
+ const char = style === "light" ? "─" : "═";
266
+ console.log(chalk.hex(isDarkBackground() ? THEME.neutralLighter : THEME.neutral)(char.repeat(60)));
267
+ }
268
+ /**
269
+ * Display a progress indicator
270
+ */
271
+ export function showProgress(message, done = false) {
272
+ if (done) {
273
+ console.log(chalk.green(` ${icons.check} ${message}`));
274
+ }
275
+ else {
276
+ console.log(chalk.cyan(` ${chalk.bold("•")} ${message}...`));
277
+ }
278
+ }
279
+ /**
280
+ * Format a macOS Keychain entry label for selection lists
281
+ */
282
+ export function formatKeychainChoiceLabel(name, endpoint, isActive, env) {
283
+ const activeBadge = isActive ? chalk.bgGreen.black(" ACTIVE ") + " " : " ";
284
+ const flags = env
285
+ ? (() => {
286
+ const muted = chalk.hex(isDarkBackground() ? THEME.neutralLighter : THEME.neutral);
287
+ const on = (s) => chalk.green(s);
288
+ const off = (s) => chalk.gray(s);
289
+ const pii = env.ITERABLE_USER_PII === "true" ? on("On") : off("Off");
290
+ const writes = env.ITERABLE_ENABLE_WRITES === "true" ? on("On") : off("Off");
291
+ const sends = env.ITERABLE_ENABLE_SENDS === "true" ? on("On") : off("Off");
292
+ return `${muted("PII:")} ${pii} ${muted("• Writes:")} ${writes} ${muted("• Sends:")} ${sends}`;
293
+ })()
294
+ : "";
295
+ const flagSuffix = flags ? " " + flags : "";
296
+ return `${activeBadge}${chalk.bold(name)} ${chalk.cyan(endpoint)}${flagSuffix}`;
297
+ }
298
+ //# sourceMappingURL=ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/utils/ui.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * URL-related helpers
3
+ */
4
+ /**
5
+ * Return true if the hostname is a localhost variant.
6
+ * Accepts IPv4/IPv6 loopback and "localhost".
7
+ */
8
+ export declare function isLocalhostHost(hostname: string): boolean;
9
+ /**
10
+ * True if URL uses https, or is localhost over http(s).
11
+ */
12
+ export declare function isHttpsOrLocalhost(url: URL): boolean;
13
+ /**
14
+ * Sanitize a URL string for safe logging:
15
+ * - Removes query string
16
+ * - Masks likely PII in path segments (emails)
17
+ * - Masks long opaque IDs (segments > 24 chars)
18
+ */
19
+ export declare function sanitizeUrlForLogs(fullUrl: string): string;
20
+ //# sourceMappingURL=url.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAUzD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAEpD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAkB1D"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * URL-related helpers
3
+ */
4
+ /**
5
+ * Return true if the hostname is a localhost variant.
6
+ * Accepts IPv4/IPv6 loopback and "localhost".
7
+ */
8
+ export function isLocalhostHost(hostname) {
9
+ if (!hostname)
10
+ return false;
11
+ const lower = hostname.toLowerCase();
12
+ return (lower === "localhost" ||
13
+ lower === "127.0.0.1" ||
14
+ lower === "::1" ||
15
+ // Some callers historically checked startsWith("localhost:")
16
+ lower.startsWith("localhost:"));
17
+ }
18
+ /**
19
+ * True if URL uses https, or is localhost over http(s).
20
+ */
21
+ export function isHttpsOrLocalhost(url) {
22
+ return url.protocol === "https:" || isLocalhostHost(url.hostname);
23
+ }
24
+ /**
25
+ * Sanitize a URL string for safe logging:
26
+ * - Removes query string
27
+ * - Masks likely PII in path segments (emails)
28
+ * - Masks long opaque IDs (segments > 24 chars)
29
+ */
30
+ export function sanitizeUrlForLogs(fullUrl) {
31
+ try {
32
+ const u = new URL(fullUrl);
33
+ u.search = ""; // drop query params
34
+ const emailRe = /.+@.+\..+/;
35
+ const sanitizedPath = u.pathname
36
+ .split("/")
37
+ .map((seg) => {
38
+ if (!seg)
39
+ return seg;
40
+ if (emailRe.test(seg))
41
+ return "[REDACTED_EMAIL]";
42
+ if (seg.length > 24)
43
+ return "[ID]";
44
+ return seg;
45
+ })
46
+ .join("/");
47
+ return `${u.origin}${sanitizedPath}`;
48
+ }
49
+ catch {
50
+ return "[UNPARSEABLE_URL]";
51
+ }
52
+ }
53
+ //# sourceMappingURL=url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url.js","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5B,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IACrC,OAAO,CACL,KAAK,KAAK,WAAW;QACrB,KAAK,KAAK,WAAW;QACrB,KAAK,KAAK,KAAK;QACf,6DAA6D;QAC7D,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,CAC/B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAQ;IACzC,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACpE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,oBAAoB;QACnC,MAAM,OAAO,GAAG,WAAW,CAAC;QAC5B,MAAM,aAAa,GAAG,CAAC,CAAC,QAAQ;aAC7B,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACX,IAAI,CAAC,GAAG;gBAAE,OAAO,GAAG,CAAC;YACrB,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;gBAAE,OAAO,kBAAkB,CAAC;YACjD,IAAI,GAAG,CAAC,MAAM,GAAG,EAAE;gBAAE,OAAO,MAAM,CAAC;YACnC,OAAO,GAAG,CAAC;QACb,CAAC,CAAC;aACD,IAAI,CAAC,GAAG,CAAC,CAAC;QACb,OAAO,GAAG,CAAC,CAAC,MAAM,GAAG,aAAa,EAAE,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,mBAAmB,CAAC;IAC7B,CAAC;AACH,CAAC"}
package/package.json ADDED
@@ -0,0 +1,105 @@
1
+ {
2
+ "name": "@iterable/mcp",
3
+ "version": "1.0.0",
4
+ "description": "Model Context Protocol server for Iterable API",
5
+ "keywords": [
6
+ "mcp",
7
+ "iterable",
8
+ "api",
9
+ "server",
10
+ "model-context-protocol"
11
+ ],
12
+ "author": "Greg Methvin",
13
+ "license": "MIT",
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "git+https://github.com/Iterable/mcp-server.git"
17
+ },
18
+ "main": "dist/index.js",
19
+ "types": "dist/index.d.ts",
20
+ "type": "module",
21
+ "bin": {
22
+ "iterable-mcp": "dist/index.js"
23
+ },
24
+ "files": [
25
+ "dist",
26
+ "README.md",
27
+ "TOOLS.md",
28
+ "LICENSE"
29
+ ],
30
+ "engines": {
31
+ "node": ">=18.0.0"
32
+ },
33
+ "packageManager": "pnpm@10.20.0",
34
+ "publishConfig": {
35
+ "access": "public"
36
+ },
37
+ "pnpm": {
38
+ "minimumReleaseAge": 4320,
39
+ "minimumReleaseAgeExclude": [
40
+ "@iterable/*"
41
+ ]
42
+ },
43
+ "scripts": {
44
+ "build": "pnpm lint:fix && tsc --project tsconfig.build.json && pnpm update-tools && chmod +x dist/index.js",
45
+ "build:clean": "rm -rf dist && pnpm build",
46
+ "build:dev": "tsc --incremental && pnpm update-tools && chmod +x dist/index.js",
47
+ "build:watch": "tsc --incremental --watch",
48
+ "check": "tsc --noEmit && eslint \"src/**/*.ts\" \"tests/**/*.ts\" --quiet",
49
+ "dev": "tsx watch src/index.ts",
50
+ "format": "prettier --write \"src/**/*.ts\" \"tests/**/*.ts\" --log-level=warn",
51
+ "install-dev": "pnpm install && pnpm build && npm link --force --silent",
52
+ "install-dev:claude-desktop": "pnpm install-dev && node dist/index.js setup --claude-desktop --local",
53
+ "install-dev:claude-desktop:debug": "pnpm install-dev && node dist/index.js setup --claude-desktop --debug --local",
54
+ "install-dev:claude-code": "pnpm install-dev && node dist/index.js setup --claude-code --local",
55
+ "install-dev:claude-code:debug": "pnpm install-dev && node dist/index.js setup --claude-code --debug --local",
56
+ "install-dev:cursor": "pnpm install-dev && node dist/index.js setup --cursor --local",
57
+ "install-dev:cursor:debug": "pnpm install-dev && node dist/index.js setup --cursor --debug --local",
58
+ "lint:fix": "eslint \"src/**/*.ts\" \"tests/**/*.ts\" --fix --quiet",
59
+ "prepublishOnly": "pnpm build",
60
+ "prestart": "pnpm build",
61
+ "pretest": "pnpm --silent build",
62
+ "start": "node dist/index.js",
63
+ "test": "jest",
64
+ "test:integration": "jest --testPathPatterns=integration",
65
+ "test:unit": "jest --testPathPatterns=unit",
66
+ "test:watch": "jest --watch",
67
+ "update-tools": "node scripts/update-tools.js"
68
+ },
69
+ "dependencies": {
70
+ "@alcyone-labs/zod-to-json-schema": "4.0.10",
71
+ "@iterable/api": "0.1.0",
72
+ "@modelcontextprotocol/sdk": "1.18.1",
73
+ "@types/json-schema": "7.0.15",
74
+ "boxen": "8.0.1",
75
+ "chalk": "5.6.2",
76
+ "cli-table3": "0.6.5",
77
+ "commander": "14.0.2",
78
+ "figlet": "1.9.3",
79
+ "gradient-string": "3.0.0",
80
+ "inquirer": "12.10.0",
81
+ "ora": "9.0.0",
82
+ "zod": "4.1.11"
83
+ },
84
+ "devDependencies": {
85
+ "@eslint/js": "9.39.1",
86
+ "@jest/globals": "30.2.0",
87
+ "@swc/core": "1.15.0",
88
+ "@swc/jest": "0.2.39",
89
+ "@types/figlet": "1.7.0",
90
+ "@types/gradient-string": "1.1.6",
91
+ "@types/inquirer": "9.0.9",
92
+ "@types/jest": "30.0.0",
93
+ "@types/node": "24.10.0",
94
+ "@typescript-eslint/eslint-plugin": "8.46.3",
95
+ "@typescript-eslint/parser": "8.46.3",
96
+ "esbuild": "0.25.12",
97
+ "eslint": "9.39.1",
98
+ "eslint-plugin-simple-import-sort": "12.1.1",
99
+ "jest": "30.2.0",
100
+ "prettier": "3.6.2",
101
+ "tsx": "4.20.6",
102
+ "typescript": "5.9.3"
103
+ },
104
+ "sideEffects": false
105
+ }