@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.
- package/LICENSE +21 -0
- package/README.md +318 -0
- package/TOOLS.md +133 -0
- package/dist/client-detection.d.ts +7 -0
- package/dist/client-detection.d.ts.map +1 -0
- package/dist/client-detection.js +22 -0
- package/dist/client-detection.js.map +1 -0
- package/dist/config.d.ts +25 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +74 -0
- package/dist/config.js.map +1 -0
- package/dist/http-headers.d.ts +5 -0
- package/dist/http-headers.d.ts.map +1 -0
- package/dist/http-headers.js +5 -0
- package/dist/http-headers.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -0
- package/dist/install.d.ts +41 -0
- package/dist/install.d.ts.map +1 -0
- package/dist/install.js +725 -0
- package/dist/install.js.map +1 -0
- package/dist/key-manager.d.ts +236 -0
- package/dist/key-manager.d.ts.map +1 -0
- package/dist/key-manager.js +776 -0
- package/dist/key-manager.js.map +1 -0
- package/dist/keys-cli.d.ts +8 -0
- package/dist/keys-cli.d.ts.map +1 -0
- package/dist/keys-cli.js +487 -0
- package/dist/keys-cli.js.map +1 -0
- package/dist/prompts.d.ts +15 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/prompts.js +66 -0
- package/dist/prompts.js.map +1 -0
- package/dist/schema-utils.d.ts +22 -0
- package/dist/schema-utils.d.ts.map +1 -0
- package/dist/schema-utils.js +65 -0
- package/dist/schema-utils.js.map +1 -0
- package/dist/server.d.ts +13 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +172 -0
- package/dist/server.js.map +1 -0
- package/dist/shutdown.d.ts +5 -0
- package/dist/shutdown.d.ts.map +1 -0
- package/dist/shutdown.js +68 -0
- package/dist/shutdown.js.map +1 -0
- package/dist/tool-filter.d.ts +19 -0
- package/dist/tool-filter.d.ts.map +1 -0
- package/dist/tool-filter.js +144 -0
- package/dist/tool-filter.js.map +1 -0
- package/dist/tools/campaigns.d.ts +7 -0
- package/dist/tools/campaigns.d.ts.map +1 -0
- package/dist/tools/campaigns.js +88 -0
- package/dist/tools/campaigns.js.map +1 -0
- package/dist/tools/catalogs.d.ts +7 -0
- package/dist/tools/catalogs.d.ts.map +1 -0
- package/dist/tools/catalogs.js +85 -0
- package/dist/tools/catalogs.js.map +1 -0
- package/dist/tools/events.d.ts +7 -0
- package/dist/tools/events.d.ts.map +1 -0
- package/dist/tools/events.js +34 -0
- package/dist/tools/events.js.map +1 -0
- package/dist/tools/experiments.d.ts +7 -0
- package/dist/tools/experiments.d.ts.map +1 -0
- package/dist/tools/experiments.js +16 -0
- package/dist/tools/experiments.js.map +1 -0
- package/dist/tools/export.d.ts +7 -0
- package/dist/tools/export.d.ts.map +1 -0
- package/dist/tools/export.js +41 -0
- package/dist/tools/export.js.map +1 -0
- package/dist/tools/index.d.ts +19 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +44 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/journeys.d.ts +10 -0
- package/dist/tools/journeys.d.ts.map +1 -0
- package/dist/tools/journeys.js +25 -0
- package/dist/tools/journeys.js.map +1 -0
- package/dist/tools/lists.d.ts +7 -0
- package/dist/tools/lists.d.ts.map +1 -0
- package/dist/tools/lists.js +58 -0
- package/dist/tools/lists.js.map +1 -0
- package/dist/tools/messaging.d.ts +11 -0
- package/dist/tools/messaging.d.ts.map +1 -0
- package/dist/tools/messaging.js +103 -0
- package/dist/tools/messaging.js.map +1 -0
- package/dist/tools/snippets.d.ts +7 -0
- package/dist/tools/snippets.d.ts.map +1 -0
- package/dist/tools/snippets.js +46 -0
- package/dist/tools/snippets.js.map +1 -0
- package/dist/tools/subscriptions.d.ts +4 -0
- package/dist/tools/subscriptions.d.ts.map +1 -0
- package/dist/tools/subscriptions.js +37 -0
- package/dist/tools/subscriptions.js.map +1 -0
- package/dist/tools/templates.d.ts +7 -0
- package/dist/tools/templates.d.ts.map +1 -0
- package/dist/tools/templates.js +118 -0
- package/dist/tools/templates.js.map +1 -0
- package/dist/tools/users.d.ts +10 -0
- package/dist/tools/users.d.ts.map +1 -0
- package/dist/tools/users.js +74 -0
- package/dist/tools/users.js.map +1 -0
- package/dist/tools/webhooks.d.ts +7 -0
- package/dist/tools/webhooks.d.ts.map +1 -0
- package/dist/tools/webhooks.js +22 -0
- package/dist/tools/webhooks.js.map +1 -0
- package/dist/utils/cli-env.d.ts +11 -0
- package/dist/utils/cli-env.d.ts.map +1 -0
- package/dist/utils/cli-env.js +32 -0
- package/dist/utils/cli-env.js.map +1 -0
- package/dist/utils/endpoint-prompt.d.ts +14 -0
- package/dist/utils/endpoint-prompt.d.ts.map +1 -0
- package/dist/utils/endpoint-prompt.js +73 -0
- package/dist/utils/endpoint-prompt.js.map +1 -0
- package/dist/utils/formatting.d.ts +10 -0
- package/dist/utils/formatting.d.ts.map +1 -0
- package/dist/utils/formatting.js +12 -0
- package/dist/utils/formatting.js.map +1 -0
- package/dist/utils/password-prompt.d.ts +19 -0
- package/dist/utils/password-prompt.d.ts.map +1 -0
- package/dist/utils/password-prompt.js +37 -0
- package/dist/utils/password-prompt.js.map +1 -0
- package/dist/utils/sanitize.d.ts +13 -0
- package/dist/utils/sanitize.d.ts.map +1 -0
- package/dist/utils/sanitize.js +23 -0
- package/dist/utils/sanitize.js.map +1 -0
- package/dist/utils/tool-config.d.ts +13 -0
- package/dist/utils/tool-config.d.ts.map +1 -0
- package/dist/utils/tool-config.js +45 -0
- package/dist/utils/tool-config.js.map +1 -0
- package/dist/utils/ui.d.ts +90 -0
- package/dist/utils/ui.d.ts.map +1 -0
- package/dist/utils/ui.js +298 -0
- package/dist/utils/ui.js.map +1 -0
- package/dist/utils/url.d.ts +20 -0
- package/dist/utils/url.d.ts.map +1 -0
- package/dist/utils/url.js +53 -0
- package/dist/utils/url.js.map +1 -0
- package/package.json +105 -0
package/dist/utils/ui.js
ADDED
|
@@ -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
|
+
}
|