@iterable/mcp 1.5.0 → 1.6.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.
- package/{LICENSE → LICENSE.md} +1 -1
- package/README.md +88 -153
- package/TOOLS.md +6 -3
- package/dist/tool-filter.d.ts.map +1 -1
- package/dist/tool-filter.js +7 -3
- package/dist/tool-filter.js.map +1 -1
- package/dist/tools/campaigns.js +5 -5
- package/dist/tools/campaigns.js.map +1 -1
- package/dist/tools/experiments.d.ts.map +1 -1
- package/dist/tools/experiments.js +19 -1
- package/dist/tools/experiments.js.map +1 -1
- package/package.json +4 -3
package/{LICENSE → LICENSE.md}
RENAMED
package/README.md
CHANGED
|
@@ -44,7 +44,7 @@ By default, the setup wizard configures the server in a safe, read‑only mode (
|
|
|
44
44
|
npx @iterable/mcp setup --advanced
|
|
45
45
|
```
|
|
46
46
|
|
|
47
|
-
What you
|
|
47
|
+
What you'll choose (optional):
|
|
48
48
|
- **User PII** (`ITERABLE_USER_PII`): access user profile data, including email addresses, phone numbers, and custom data fields.
|
|
49
49
|
- **Writes** (`ITERABLE_ENABLE_WRITES`): create, update, and delete resources such as templates, lists, catalogs, campaigns, snippets, and user profiles.
|
|
50
50
|
- **Sends** (`ITERABLE_ENABLE_SENDS`): send messages (email, SMS, push, in-app, WhatsApp), trigger campaigns and journeys, schedule and abort campaigns, and track events. Requires writes to be enabled. *Note: creating a blast campaign will schedule it for delivery, matching the behavior of the underlying Iterable API; there is no way to create a draft campaign. If you only need to draft content, you can do so with sends disabled by working with templates instead.*
|
|
@@ -53,25 +53,68 @@ What you’ll choose (optional):
|
|
|
53
53
|
|
|
54
54
|
Note that permission settings are saved per key (see key management section below), allowing you to enable different permissions for different projects, e.g. only enable writes and sends for a sandbox project and disable them in production.
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
## What you can do
|
|
57
|
+
|
|
58
|
+
See the [available tools](TOOLS.md) for all tools with descriptions. All tools map directly to [Iterable API endpoints](https://api.iterable.com/api/docs).
|
|
59
|
+
|
|
60
|
+
Try these prompts:
|
|
61
|
+
- *"Get details on campaign 12345"*
|
|
62
|
+
- *"What email templates are available?"*
|
|
63
|
+
- *"Show me all my product catalogs"*
|
|
64
|
+
- *"What journeys are currently active?"*
|
|
65
|
+
- *"Show me events for user@example.com from the last 30 days"*
|
|
66
|
+
- *"Create a campaign called 'Holiday Sale' using template 456"*
|
|
67
|
+
- *"Export all user data from January 2024"*
|
|
68
|
+
- *"List users in my 'VIP Customers' list"*
|
|
69
|
+
|
|
70
|
+
## API Key Management
|
|
71
|
+
|
|
72
|
+
**Key Storage:**
|
|
73
|
+
|
|
74
|
+
API keys are stored in the `~/.iterable-mcp/keys.json` file and managed via the `npx @iterable/mcp keys` commands. On macOS the actual API key values are stored in the system Keychain. On Windows, API key values are encrypted using the Windows Data Protection API (DPAPI). On Linux, the API key values are stored directly in the file with restricted permissions (0o600).
|
|
75
|
+
|
|
76
|
+
Each key is tied to its API endpoint (US, EU, or custom) and to its permissions (view PII, write operations, send messages).
|
|
77
|
+
|
|
78
|
+
**How Key Selection Works:**
|
|
79
|
+
- You can store multiple API keys with different names (e.g., "production", "staging", "dev")
|
|
80
|
+
- Only ONE key is marked as **active** at a time
|
|
81
|
+
- The MCP server automatically uses whichever key is currently active
|
|
82
|
+
- Your first key is automatically set as active
|
|
83
|
+
- Switch between keys using the `activate` command
|
|
57
84
|
|
|
58
85
|
```bash
|
|
59
|
-
|
|
60
|
-
iterable
|
|
86
|
+
# List stored keys (shows which one is active with ● ACTIVE badge)
|
|
87
|
+
npx @iterable/mcp keys list
|
|
88
|
+
|
|
89
|
+
# Add a new key (interactive: prompts for name, region/endpoint, and API key)
|
|
90
|
+
# Your first key becomes active automatically
|
|
91
|
+
npx @iterable/mcp keys add
|
|
92
|
+
|
|
93
|
+
# Switch to a different key by name or ID (also switches endpoint)
|
|
94
|
+
npx @iterable/mcp keys activate production
|
|
95
|
+
npx @iterable/mcp keys activate staging
|
|
96
|
+
|
|
97
|
+
# Update an existing key (interactive: prompts for new values)
|
|
98
|
+
npx @iterable/mcp keys update <name-or-id>
|
|
99
|
+
|
|
100
|
+
# Delete a key by ID (requires ID for safety)
|
|
101
|
+
# Note: Cannot delete the currently active key - activate another first
|
|
102
|
+
npx @iterable/mcp keys delete <key-id>
|
|
61
103
|
```
|
|
62
104
|
|
|
63
|
-
|
|
105
|
+
## Advanced setup
|
|
64
106
|
|
|
65
|
-
|
|
107
|
+
### Prefer a global install?
|
|
66
108
|
|
|
67
|
-
|
|
109
|
+
If you'd rather not use `npx`, you can install globally. This lets you use `iterable-mcp` as a shorthand for `npx @iterable/mcp`.
|
|
68
110
|
|
|
69
111
|
```bash
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
pnpm install-dev:cursor # or install-dev:claude-desktop, install-dev:claude-code, or install-dev:gemini-cli
|
|
112
|
+
pnpm add -g @iterable/mcp
|
|
113
|
+
iterable-mcp setup
|
|
73
114
|
```
|
|
74
115
|
|
|
116
|
+
**Note:** The setup command automatically configures the correct command path.
|
|
117
|
+
|
|
75
118
|
### Claude Code
|
|
76
119
|
|
|
77
120
|
The `setup --claude-code` command automatically configures Claude Code by running `claude mcp add` for you.
|
|
@@ -79,20 +122,14 @@ The `setup --claude-code` command automatically configures Claude Code by runnin
|
|
|
79
122
|
Alternatively, you can configure it manually:
|
|
80
123
|
|
|
81
124
|
```bash
|
|
82
|
-
# Add your API key first (see API Key Management section
|
|
83
|
-
iterable
|
|
125
|
+
# Add your API key first (see API Key Management section above)
|
|
126
|
+
npx @iterable/mcp keys add
|
|
84
127
|
|
|
85
128
|
# Then configure Claude Code
|
|
86
129
|
claude mcp add iterable -- npx -y @iterable/mcp
|
|
87
130
|
|
|
88
131
|
# Verify it was added
|
|
89
132
|
claude mcp list
|
|
90
|
-
|
|
91
|
-
# Optional: Configure privacy settings
|
|
92
|
-
claude mcp add iterable \
|
|
93
|
-
--env ITERABLE_USER_PII=false \
|
|
94
|
-
--env ITERABLE_ENABLE_WRITES=false \
|
|
95
|
-
-- npx -y @iterable/mcp
|
|
96
133
|
```
|
|
97
134
|
|
|
98
135
|
If you have already configured Claude Desktop successfully, you can run this command to copy your MCP server settings to Claude Code:
|
|
@@ -119,7 +156,7 @@ All five use the same configuration format:
|
|
|
119
156
|
**Recommended: Using key manager:**
|
|
120
157
|
```bash
|
|
121
158
|
# First, add your API key (interactive prompts)
|
|
122
|
-
iterable
|
|
159
|
+
npx @iterable/mcp keys add
|
|
123
160
|
```
|
|
124
161
|
|
|
125
162
|
Then edit your config file:
|
|
@@ -180,69 +217,19 @@ Alternatively, you can manually edit your configuration file (after adding your
|
|
|
180
217
|
|
|
181
218
|
No `env` section is needed if using the key manager.
|
|
182
219
|
|
|
183
|
-
## What you can do
|
|
184
|
-
|
|
185
|
-
See [TOOLS.md](TOOLS.md) for all available tools with descriptions. All tools map directly to [Iterable API endpoints](https://api.iterable.com/api/docs).
|
|
186
|
-
|
|
187
|
-
Try these prompts:
|
|
188
|
-
- *"How many campaigns do I have running?"*
|
|
189
|
-
- *"Get details on campaign 12345"*
|
|
190
|
-
- *"Show me events for user@example.com from the last 30 days"*
|
|
191
|
-
- *"Create a campaign called 'Holiday Sale' using template 456"*
|
|
192
|
-
- *"What email templates are available?"*
|
|
193
|
-
- *"Export all user data from January 2024"*
|
|
194
|
-
- *"List users in my 'VIP Customers' list"*
|
|
195
|
-
- *"Show me all my product catalogs"*
|
|
196
|
-
- *"What journeys are currently active?"*
|
|
197
|
-
- *"Send a welcome email to new-user@company.com"*
|
|
198
|
-
|
|
199
|
-
## Configuration & security
|
|
200
|
-
|
|
201
|
-
### API Key Management
|
|
202
|
-
|
|
203
|
-
**Key Storage:**
|
|
204
|
-
|
|
205
|
-
API keys are stored in the `~/.iterable-mcp/keys.json` file and managed via the `iterable-mcp keys` commands. On macOS the actual API key values are stored in the system Keychain. On Linux, the API key values are stored directly in the file with restricted permissions (0o600). On Windows, the file is protected by default NTFS home directory permissions.
|
|
206
|
-
|
|
207
|
-
Each key is tied to its API endpoint (US, EU, or custom) and to its permissions (view PII, write operations, send messages).
|
|
208
|
-
|
|
209
|
-
**How Key Selection Works:**
|
|
210
|
-
- You can store multiple API keys with different names (e.g., "production", "staging", "dev")
|
|
211
|
-
- Only ONE key is marked as **active** at a time
|
|
212
|
-
- The MCP server automatically uses whichever key is currently active
|
|
213
|
-
- Your first key is automatically set as active
|
|
214
|
-
- Switch between keys using the `activate` command
|
|
215
|
-
|
|
216
|
-
```bash
|
|
217
|
-
# List stored keys (shows which one is active with ● ACTIVE badge)
|
|
218
|
-
iterable-mcp keys list
|
|
219
|
-
|
|
220
|
-
# Add a new key (interactive: prompts for name, region/endpoint, and API key)
|
|
221
|
-
# Your first key becomes active automatically
|
|
222
|
-
iterable-mcp keys add
|
|
223
|
-
|
|
224
|
-
# Switch to a different key by name or ID (also switches endpoint)
|
|
225
|
-
iterable-mcp keys activate production
|
|
226
|
-
iterable-mcp keys activate staging
|
|
227
|
-
|
|
228
|
-
# Delete a key by ID (requires ID for safety)
|
|
229
|
-
# Note: Cannot delete the currently active key - activate another first
|
|
230
|
-
iterable-mcp keys delete <key-id>
|
|
231
|
-
|
|
232
|
-
# To update a key: delete the old one and add a new one with the same name
|
|
233
|
-
```
|
|
234
|
-
|
|
235
220
|
### Environment variables
|
|
236
221
|
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
|
240
|
-
|
|
241
|
-
| `
|
|
242
|
-
| `
|
|
243
|
-
| `ITERABLE_USER_PII` |
|
|
244
|
-
| `ITERABLE_ENABLE_WRITES` |
|
|
245
|
-
| `ITERABLE_ENABLE_SENDS` |
|
|
222
|
+
Variables marked as **managed** are automatically configured by the key manager. They take precedence over environment variables when both are present. Setting environment variables directly is useful for CI/CD pipelines, Docker containers, or other non-interactive environments where the key manager isn't available.
|
|
223
|
+
|
|
224
|
+
| Variable | Managed | Description |
|
|
225
|
+
|----------|-------------|-------------|
|
|
226
|
+
| `ITERABLE_API_KEY` | ✅ | Your Iterable API key. Required if not using key manager |
|
|
227
|
+
| `ITERABLE_BASE_URL` | ✅ | Base URL for the Iterable API (default: `https://api.iterable.com`) |
|
|
228
|
+
| `ITERABLE_USER_PII` | ✅ | Set to `true` to enable tools that access user PII data (default: `false`) |
|
|
229
|
+
| `ITERABLE_ENABLE_WRITES` | ✅ | Set to `true` to enable tools that perform write operations (default: `false`) |
|
|
230
|
+
| `ITERABLE_ENABLE_SENDS` | ✅ | Set to `true` to enable tools that can send messages (default: `false`). Requires writes to be enabled |
|
|
231
|
+
| `ITERABLE_DEBUG` | | Set to `true` for API request logging |
|
|
232
|
+
| `LOG_LEVEL` | | Set to `debug` for troubleshooting |
|
|
246
233
|
|
|
247
234
|
### Custom endpoints
|
|
248
235
|
|
|
@@ -252,117 +239,65 @@ iterable-mcp keys delete <key-id>
|
|
|
252
239
|
- Not allowed: plain `http://` on non-local hosts (use `https://` instead)
|
|
253
240
|
- When a non-`*.iterable.com` domain is provided, the CLI will ask for confirmation.
|
|
254
241
|
|
|
255
|
-
## Development
|
|
256
|
-
|
|
257
|
-
### Running tests
|
|
258
|
-
|
|
259
|
-
The project includes both unit and integration tests:
|
|
260
|
-
|
|
261
|
-
```bash
|
|
262
|
-
# Run all tests
|
|
263
|
-
pnpm test
|
|
264
|
-
|
|
265
|
-
# Run only unit tests (no API key required)
|
|
266
|
-
pnpm test:unit
|
|
267
|
-
|
|
268
|
-
# Run only integration tests (requires valid API key)
|
|
269
|
-
pnpm test:integration
|
|
270
|
-
```
|
|
271
|
-
|
|
272
|
-
### Integration tests
|
|
273
|
-
|
|
274
|
-
Integration tests make real API calls to Iterable and require a valid API key.
|
|
275
|
-
|
|
276
|
-
**Setup:**
|
|
277
|
-
|
|
278
|
-
1. Set your API key as an environment variable:
|
|
279
|
-
```bash
|
|
280
|
-
export ITERABLE_API_KEY=your_actual_api_key
|
|
281
|
-
```
|
|
282
|
-
|
|
283
|
-
2. Or add a key to key manager (interactive):
|
|
284
|
-
```bash
|
|
285
|
-
iterable-mcp keys add
|
|
286
|
-
```
|
|
287
|
-
|
|
288
|
-
**Note:** The key name can be anything (e.g., "dev", "test", "staging"). The system automatically uses whichever key is marked as **active**. Your first key is automatically set as active. If you have multiple keys, use `iterable-mcp keys activate <name>` to switch between them.
|
|
289
|
-
|
|
290
|
-
3. Run the integration tests:
|
|
291
|
-
```bash
|
|
292
|
-
pnpm test:integration
|
|
293
|
-
```
|
|
294
|
-
|
|
295
|
-
**Note:** Integration tests require a valid API key (env var or active key manager key). The suite fails fast if none is found.
|
|
296
|
-
|
|
297
|
-
### Development workflow
|
|
298
|
-
|
|
299
|
-
```bash
|
|
300
|
-
# Install dependencies
|
|
301
|
-
pnpm install
|
|
302
|
-
|
|
303
|
-
# Build the project
|
|
304
|
-
pnpm build
|
|
305
|
-
|
|
306
|
-
# Build and watch for changes
|
|
307
|
-
pnpm build:watch
|
|
308
|
-
|
|
309
|
-
# Run in development mode
|
|
310
|
-
pnpm dev
|
|
311
|
-
|
|
312
|
-
# Install locally for testing
|
|
313
|
-
pnpm run install-dev
|
|
314
|
-
```
|
|
315
|
-
|
|
316
242
|
## Troubleshooting
|
|
317
243
|
|
|
318
|
-
- Claude CLI missing: install `claude` CLI, then re-run `iterable
|
|
244
|
+
- Claude CLI missing: install `claude` CLI, then re-run `npx @iterable/mcp setup --claude-code`.
|
|
319
245
|
- macOS Keychain issues: Ensure Keychain is accessible and re-run setup if needed.
|
|
320
246
|
|
|
321
247
|
### Client-specific limitations
|
|
322
248
|
|
|
323
249
|
#### Windsurf (Codeium)
|
|
324
250
|
|
|
325
|
-
**Tool limit:** Windsurf has a [maximum limit of 100 tools](https://docs.windsurf.com/windsurf/cascade/mcp) that Cascade can access at any given time. When all permissions are enabled (`ITERABLE_USER_PII=true`, `ITERABLE_ENABLE_WRITES=true`, `ITERABLE_ENABLE_SENDS=true`), the Iterable MCP server exposes **
|
|
251
|
+
**Tool limit:** Windsurf has a [maximum limit of 100 tools](https://docs.windsurf.com/windsurf/cascade/mcp) that Cascade can access at any given time. When all permissions are enabled (`ITERABLE_USER_PII=true`, `ITERABLE_ENABLE_WRITES=true`, `ITERABLE_ENABLE_SENDS=true`), the Iterable MCP server exposes **105 tools**, which exceeds this limit.
|
|
326
252
|
|
|
327
253
|
**Workaround:** Use restricted permissions to stay under the 100-tool limit:
|
|
328
254
|
- With default permissions (all disabled): 26 tools ✅
|
|
329
255
|
- With PII only: 37 tools ✅
|
|
330
|
-
- With PII + writes:
|
|
331
|
-
- With all permissions:
|
|
256
|
+
- With PII + writes: 87 tools ✅
|
|
257
|
+
- With all permissions: 105 tools ❌ (exceeds Windsurf limit)
|
|
332
258
|
|
|
333
259
|
You can configure permissions when adding a key:
|
|
334
260
|
```bash
|
|
335
|
-
iterable
|
|
261
|
+
npx @iterable/mcp keys add --advanced
|
|
336
262
|
```
|
|
337
263
|
|
|
338
264
|
Or update an existing key's permissions:
|
|
339
265
|
```bash
|
|
340
|
-
iterable
|
|
266
|
+
npx @iterable/mcp keys update <key-name> --advanced
|
|
341
267
|
```
|
|
342
268
|
|
|
343
269
|
**Process persistence:** After switching API keys with `keys activate`, you must **fully restart Windsurf** (quit and reopen the application). Windsurf keeps MCP server processes running in the background, and they don't automatically reload when you switch keys.
|
|
344
270
|
|
|
345
271
|
#### Antigravity
|
|
346
272
|
|
|
347
|
-
**Tool limit:** Antigravity has a maximum limit of 100 tools per MCP server. When all permissions are enabled (`ITERABLE_USER_PII=true`, `ITERABLE_ENABLE_WRITES=true`, `ITERABLE_ENABLE_SENDS=true`), the Iterable MCP server exposes **
|
|
273
|
+
**Tool limit:** Antigravity has a maximum limit of 100 tools per MCP server. When all permissions are enabled (`ITERABLE_USER_PII=true`, `ITERABLE_ENABLE_WRITES=true`, `ITERABLE_ENABLE_SENDS=true`), the Iterable MCP server exposes **105 tools**, which exceeds this limit.
|
|
348
274
|
|
|
349
275
|
**Workaround:** Use restricted permissions to stay under the 100-tool limit:
|
|
350
276
|
- With default permissions (all disabled): 26 tools ✅
|
|
351
277
|
- With PII only: 37 tools ✅
|
|
352
|
-
- With PII + writes:
|
|
353
|
-
- With all permissions:
|
|
278
|
+
- With PII + writes: 87 tools ✅
|
|
279
|
+
- With all permissions: 105 tools ❌ (exceeds Antigravity limit)
|
|
354
280
|
|
|
355
281
|
You can configure permissions when adding a key:
|
|
356
282
|
```bash
|
|
357
|
-
iterable
|
|
283
|
+
npx @iterable/mcp keys add --advanced
|
|
358
284
|
```
|
|
359
285
|
|
|
360
286
|
Or update an existing key's permissions:
|
|
361
287
|
```bash
|
|
362
|
-
iterable
|
|
288
|
+
npx @iterable/mcp keys update <key-name> --advanced
|
|
363
289
|
```
|
|
364
290
|
|
|
291
|
+
## Contributing
|
|
292
|
+
|
|
293
|
+
See the [contributing guidelines](CONTRIBUTING.md) for development setup, building from source, and running tests.
|
|
294
|
+
|
|
295
|
+
## Security
|
|
296
|
+
|
|
297
|
+
See the [security policy](SECURITY.md) for reporting vulnerabilities.
|
|
298
|
+
|
|
365
299
|
## Beta Feature Reminder
|
|
300
|
+
|
|
366
301
|
Iterable's MCP server is currently in beta. MCP functionality may change, be
|
|
367
302
|
suspended, or be discontinued at any time without notice. This software is
|
|
368
303
|
provided "as is" and is open source and ready for you to experiment with. For
|
|
@@ -370,4 +305,4 @@ more information, refer to [Iterable Beta Terms](https://iterable.com/trust/beta
|
|
|
370
305
|
|
|
371
306
|
## License
|
|
372
307
|
|
|
373
|
-
This project is licensed under the MIT License
|
|
308
|
+
This project is licensed under the MIT License. See the [license](LICENSE.md) for details.
|
package/TOOLS.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Available Iterable MCP Tools (
|
|
1
|
+
# Available Iterable MCP Tools (108 tools)
|
|
2
2
|
|
|
3
3
|
**Legend:**
|
|
4
4
|
- 🔒 = Requires enabling user PII access
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
- **activate_triggered_campaign** ✏️✉️: Activate a triggered campaign (requires API triggered campaign activation enabled)
|
|
12
12
|
- **archive_campaigns** ✏️: Archive one or more campaigns. Scheduled/recurring campaigns will be cancelled, running campaigns will be aborted.
|
|
13
13
|
- **cancel_campaign** ✏️: Cancel a scheduled or recurring campaign
|
|
14
|
-
- **
|
|
14
|
+
- **create_blast_campaign** ✏️: Create a new blast campaign from an existing template. The campaign is created without being scheduled. Use schedule_campaign to schedule it for delivery.
|
|
15
15
|
- **create_triggered_campaign** ✏️: Create a new triggered campaign from an existing template. The campaign is created in Ready state and must be activated before it can send.
|
|
16
16
|
- **deactivate_triggered_campaign** ✏️: Deactivate a triggered campaign (requires API triggered campaign deactivation enabled)
|
|
17
17
|
- **get_campaign**: Get detailed information about a specific campaign
|
|
@@ -49,8 +49,11 @@
|
|
|
49
49
|
- **track_bulk_events** 🔒✏️✉️: Track multiple events in a single request for better performance
|
|
50
50
|
- **track_event** 🔒✏️✉️: Track a custom event for a user
|
|
51
51
|
|
|
52
|
-
## Experiments (
|
|
52
|
+
## Experiments (4 tools)
|
|
53
|
+
- **get_experiment**: Get detailed information about a specific experiment by ID, including variants summary and constraints
|
|
53
54
|
- **get_experiment_metrics**: Get experiment metrics for A/B testing analysis (currently supports email experiments only)
|
|
55
|
+
- **get_experiment_variants**: Get variant content for an experiment, including subject lines, preheaders, HTML source, and plain text
|
|
56
|
+
- **list_experiments**: List experiments with optional filtering by campaign, status, and date range. Supports pagination.
|
|
54
57
|
|
|
55
58
|
## Journeys (2 tools)
|
|
56
59
|
- **get_journeys**: Get journeys (workflows) with optional pagination and state filtering
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-filter.d.ts","sourceRoot":"","sources":["../src/tool-filter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,eAAO,MAAM,aAAa,EAAE,GAAG,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"tool-filter.d.ts","sourceRoot":"","sources":["../src/tool-filter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,eAAO,MAAM,aAAa,EAAE,GAAG,CAAC,MAAM,CA+DpC,CAAC;AAEH,eAAO,MAAM,eAAe,EAAE,GAAG,CAAC,MAAM,CAyCtC,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,GAAG,CAAC,MAAM,CAwBjC,CAAC;AAEH;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,EAAE,CAO1E"}
|
package/dist/tool-filter.js
CHANGED
|
@@ -8,7 +8,7 @@ export const NON_PII_TOOLS = new Set([
|
|
|
8
8
|
"archive_campaigns",
|
|
9
9
|
"bulk_delete_catalog_items",
|
|
10
10
|
"cancel_campaign",
|
|
11
|
-
"
|
|
11
|
+
"create_blast_campaign",
|
|
12
12
|
"create_triggered_campaign",
|
|
13
13
|
"create_catalog",
|
|
14
14
|
"create_list",
|
|
@@ -29,7 +29,9 @@ export const NON_PII_TOOLS = new Set([
|
|
|
29
29
|
"get_channels",
|
|
30
30
|
"get_child_campaigns",
|
|
31
31
|
"get_email_template",
|
|
32
|
+
"get_experiment",
|
|
32
33
|
"get_experiment_metrics",
|
|
34
|
+
"get_experiment_variants",
|
|
33
35
|
"get_inapp_template",
|
|
34
36
|
"get_journeys",
|
|
35
37
|
"get_list_size",
|
|
@@ -43,6 +45,7 @@ export const NON_PII_TOOLS = new Set([
|
|
|
43
45
|
"get_templates",
|
|
44
46
|
"get_user_fields",
|
|
45
47
|
"get_webhooks",
|
|
48
|
+
"list_experiments",
|
|
46
49
|
"partial_update_catalog_item",
|
|
47
50
|
"preview_email_template",
|
|
48
51
|
"preview_inapp_template",
|
|
@@ -75,7 +78,9 @@ export const READ_ONLY_TOOLS = new Set([
|
|
|
75
78
|
"get_child_campaigns",
|
|
76
79
|
"get_email_template",
|
|
77
80
|
"get_embedded_messages",
|
|
81
|
+
"get_experiment",
|
|
78
82
|
"get_experiment_metrics",
|
|
83
|
+
"get_experiment_variants",
|
|
79
84
|
"get_export_files",
|
|
80
85
|
"get_export_jobs",
|
|
81
86
|
"get_in_app_messages",
|
|
@@ -99,6 +104,7 @@ export const READ_ONLY_TOOLS = new Set([
|
|
|
99
104
|
"get_user_events_by_user_id",
|
|
100
105
|
"get_user_fields",
|
|
101
106
|
"get_webhooks",
|
|
107
|
+
"list_experiments",
|
|
102
108
|
"preview_email_template",
|
|
103
109
|
"preview_inapp_template",
|
|
104
110
|
]);
|
|
@@ -111,8 +117,6 @@ export const SEND_TOOLS = new Set([
|
|
|
111
117
|
"send_campaign",
|
|
112
118
|
"trigger_campaign",
|
|
113
119
|
"schedule_campaign",
|
|
114
|
-
// Creating a blast campaign schedules a send
|
|
115
|
-
"create_and_schedule_campaign",
|
|
116
120
|
// Triggered campaigns can cause sends upon activation; block unless explicitly allowed
|
|
117
121
|
"activate_triggered_campaign",
|
|
118
122
|
// Journey triggers enqueue users which may send
|
package/dist/tool-filter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-filter.js","sourceRoot":"","sources":["../src/tool-filter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,CAAC,MAAM,aAAa,GAAgB,IAAI,GAAG,CAAC;IAChD,gBAAgB;IAChB,6BAA6B;IAC7B,mBAAmB;IACnB,2BAA2B;IAC3B,iBAAiB;IACjB,
|
|
1
|
+
{"version":3,"file":"tool-filter.js","sourceRoot":"","sources":["../src/tool-filter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,CAAC,MAAM,aAAa,GAAgB,IAAI,GAAG,CAAC;IAChD,gBAAgB;IAChB,6BAA6B;IAC7B,mBAAmB;IACnB,2BAA2B;IAC3B,iBAAiB;IACjB,uBAAuB;IACvB,2BAA2B;IAC3B,gBAAgB;IAChB,aAAa;IACb,gBAAgB;IAChB,+BAA+B;IAC/B,gBAAgB;IAChB,qBAAqB;IACrB,aAAa;IACb,gBAAgB;IAChB,kBAAkB;IAClB,cAAc;IACd,sBAAsB;IACtB,eAAe;IACf,4BAA4B;IAC5B,kBAAkB;IAClB,mBAAmB;IACnB,cAAc;IACd,cAAc;IACd,qBAAqB;IACrB,oBAAoB;IACpB,gBAAgB;IAChB,wBAAwB;IACxB,yBAAyB;IACzB,oBAAoB;IACpB,cAAc;IACd,eAAe;IACf,WAAW;IACX,mBAAmB;IACnB,mBAAmB;IACnB,kBAAkB;IAClB,aAAa;IACb,cAAc;IACd,2BAA2B;IAC3B,eAAe;IACf,iBAAiB;IACjB,cAAc;IACd,kBAAkB;IAClB,6BAA6B;IAC7B,wBAAwB;IACxB,wBAAwB;IACxB,sBAAsB;IACtB,mBAAmB;IACnB,eAAe;IACf,kBAAkB;IAClB,+BAA+B;IAC/B,sBAAsB;IACtB,uBAAuB;IACvB,uBAAuB;IACvB,sBAAsB;IACtB,qBAAqB;IACrB,gBAAgB;IAChB,gBAAgB;IAChB,uBAAuB;IACvB,uBAAuB;IACvB,sBAAsB;IACtB,qBAAqB;CACtB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAgB,IAAI,GAAG,CAAC;IAClD,cAAc;IACd,sBAAsB;IACtB,eAAe;IACf,4BAA4B;IAC5B,kBAAkB;IAClB,mBAAmB;IACnB,cAAc;IACd,cAAc;IACd,qBAAqB;IACrB,oBAAoB;IACpB,uBAAuB;IACvB,gBAAgB;IAChB,wBAAwB;IACxB,yBAAyB;IACzB,kBAAkB;IAClB,iBAAiB;IACjB,qBAAqB;IACrB,oBAAoB;IACpB,cAAc;IACd,wBAAwB;IACxB,eAAe;IACf,gBAAgB;IAChB,WAAW;IACX,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,kBAAkB;IAClB,aAAa;IACb,cAAc;IACd,2BAA2B;IAC3B,eAAe;IACf,mBAAmB;IACnB,qBAAqB;IACrB,0BAA0B;IAC1B,4BAA4B;IAC5B,iBAAiB;IACjB,cAAc;IACd,kBAAkB;IAClB,wBAAwB;IACxB,wBAAwB;CACzB,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAgB,IAAI,GAAG,CAAC;IAC7C,8BAA8B;IAC9B,eAAe;IACf,kBAAkB;IAClB,mBAAmB;IACnB,uFAAuF;IACvF,6BAA6B;IAC7B,gDAAgD;IAChD,iBAAiB;IACjB,+CAA+C;IAC/C,aAAa;IACb,mBAAmB;IACnB,kCAAkC;IAClC,YAAY;IACZ,UAAU;IACV,eAAe;IACf,eAAe;IACf,WAAW;IACX,aAAa;IACb,yDAAyD;IACzD,2BAA2B;IAC3B,yBAAyB;IACzB,0BAA0B;IAC1B,2BAA2B;CAC5B,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa,EAAE,MAAuB;IAChE,OAAO,KAAK,CAAC,MAAM,CACjB,CAAC,IAAI,EAAE,EAAE,CACP,CAAC,MAAM,CAAC,YAAY,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrD,CAAC,MAAM,CAAC,WAAW,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtD,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CACpD,CAAC;AACJ,CAAC"}
|
package/dist/tools/campaigns.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* MCP tools for Iterable campaign operations
|
|
3
3
|
*/
|
|
4
|
-
import { AbortCampaignParamsSchema, ActivateTriggeredCampaignParamsSchema, ArchiveCampaignsParamsSchema, CancelCampaignParamsSchema,
|
|
4
|
+
import { AbortCampaignParamsSchema, ActivateTriggeredCampaignParamsSchema, ArchiveCampaignsParamsSchema, CancelCampaignParamsSchema, CreateBlastCampaignParamsSchema, CreateTriggeredCampaignParamsSchema, DeactivateTriggeredCampaignParamsSchema, GetCampaignMetricsParamsSchema, GetCampaignParamsSchema, GetCampaignsParamsSchema, GetChildCampaignsParamsSchema, ScheduleCampaignParamsSchema, SendCampaignParamsSchema, TriggerCampaignParamsSchema, } from "@iterable/api";
|
|
5
5
|
import { createTool } from "../schema-utils.js";
|
|
6
6
|
export function createCampaignTools(client) {
|
|
7
7
|
return [
|
|
@@ -24,10 +24,10 @@ export function createCampaignTools(client) {
|
|
|
24
24
|
execute: (params) => client.getCampaignMetrics(params),
|
|
25
25
|
}),
|
|
26
26
|
createTool({
|
|
27
|
-
name: "
|
|
28
|
-
description: "Create a new blast campaign from an existing template
|
|
29
|
-
schema:
|
|
30
|
-
execute: (params) => client.
|
|
27
|
+
name: "create_blast_campaign",
|
|
28
|
+
description: "Create a new blast campaign from an existing template. The campaign is created without being scheduled. Use schedule_campaign to schedule it for delivery.",
|
|
29
|
+
schema: CreateBlastCampaignParamsSchema,
|
|
30
|
+
execute: (params) => client.createBlastCampaign(params),
|
|
31
31
|
}),
|
|
32
32
|
createTool({
|
|
33
33
|
name: "create_triggered_campaign",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"campaigns.js","sourceRoot":"","sources":["../../src/tools/campaigns.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,yBAAyB,EACzB,qCAAqC,EACrC,4BAA4B,EAC5B,0BAA0B,EAC1B,
|
|
1
|
+
{"version":3,"file":"campaigns.js","sourceRoot":"","sources":["../../src/tools/campaigns.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"experiments.d.ts","sourceRoot":"","sources":["../../src/tools/experiments.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"experiments.d.ts","sourceRoot":"","sources":["../../src/tools/experiments.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAOpD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAI/D,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,EAAE,CA+BpE"}
|
|
@@ -1,10 +1,28 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* MCP tools for Iterable experiment operations
|
|
3
3
|
*/
|
|
4
|
-
import { GetExperimentMetricsParamsSchema } from "@iterable/api";
|
|
4
|
+
import { GetExperimentMetricsParamsSchema, GetExperimentParamsSchema, GetExperimentVariantsParamsSchema, ListExperimentsParamsSchema, } from "@iterable/api";
|
|
5
5
|
import { createTool } from "../schema-utils.js";
|
|
6
6
|
export function createExperimentTools(client) {
|
|
7
7
|
return [
|
|
8
|
+
createTool({
|
|
9
|
+
name: "list_experiments",
|
|
10
|
+
description: "List experiments with optional filtering by campaign, status, and date range. Supports pagination.",
|
|
11
|
+
schema: ListExperimentsParamsSchema,
|
|
12
|
+
execute: (params) => client.listExperiments(params),
|
|
13
|
+
}),
|
|
14
|
+
createTool({
|
|
15
|
+
name: "get_experiment",
|
|
16
|
+
description: "Get detailed information about a specific experiment by ID, including variants summary and constraints",
|
|
17
|
+
schema: GetExperimentParamsSchema,
|
|
18
|
+
execute: (params) => client.getExperiment(params),
|
|
19
|
+
}),
|
|
20
|
+
createTool({
|
|
21
|
+
name: "get_experiment_variants",
|
|
22
|
+
description: "Get variant content for an experiment, including subject lines, preheaders, HTML source, and plain text",
|
|
23
|
+
schema: GetExperimentVariantsParamsSchema,
|
|
24
|
+
execute: (params) => client.getExperimentVariants(params),
|
|
25
|
+
}),
|
|
8
26
|
createTool({
|
|
9
27
|
name: "get_experiment_metrics",
|
|
10
28
|
description: "Get experiment metrics for A/B testing analysis (currently supports email experiments only)",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"experiments.js","sourceRoot":"","sources":["../../src/tools/experiments.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,
|
|
1
|
+
{"version":3,"file":"experiments.js","sourceRoot":"","sources":["../../src/tools/experiments.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,gCAAgC,EAChC,yBAAyB,EACzB,iCAAiC,EACjC,2BAA2B,GAC5B,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,MAAM,UAAU,qBAAqB,CAAC,MAAsB;IAC1D,OAAO;QACL,UAAU,CAAC;YACT,IAAI,EAAE,kBAAkB;YACxB,WAAW,EACT,oGAAoG;YACtG,MAAM,EAAE,2BAA2B;YACnC,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC;SACpD,CAAC;QACF,UAAU,CAAC;YACT,IAAI,EAAE,gBAAgB;YACtB,WAAW,EACT,wGAAwG;YAC1G,MAAM,EAAE,yBAAyB;YACjC,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC;SAClD,CAAC;QACF,UAAU,CAAC;YACT,IAAI,EAAE,yBAAyB;YAC/B,WAAW,EACT,yGAAyG;YAC3G,MAAM,EAAE,iCAAiC;YACzC,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC;SAC1D,CAAC;QACF,UAAU,CAAC;YACT,IAAI,EAAE,wBAAwB;YAC9B,WAAW,EACT,6FAA6F;YAC/F,MAAM,EAAE,gCAAgC;YACxC,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC;SACzD,CAAC;KACH,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@iterable/mcp",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.6.1",
|
|
4
4
|
"description": "Model Context Protocol server for Iterable API",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"mcp",
|
|
@@ -38,7 +38,8 @@
|
|
|
38
38
|
"minimumReleaseAge": 4320,
|
|
39
39
|
"minimumReleaseAgeExclude": [
|
|
40
40
|
"@iterable/*"
|
|
41
|
-
]
|
|
41
|
+
],
|
|
42
|
+
"overrides": {}
|
|
42
43
|
},
|
|
43
44
|
"scripts": {
|
|
44
45
|
"build": "pnpm lint:fix && tsc --project tsconfig.build.json && pnpm update-tools && chmod +x dist/index.js",
|
|
@@ -75,7 +76,7 @@
|
|
|
75
76
|
},
|
|
76
77
|
"dependencies": {
|
|
77
78
|
"@alcyone-labs/zod-to-json-schema": "4.0.10",
|
|
78
|
-
"@iterable/api": "0.
|
|
79
|
+
"@iterable/api": "0.8.2",
|
|
79
80
|
"@modelcontextprotocol/sdk": "1.18.1",
|
|
80
81
|
"@primno/dpapi": "2.0.1",
|
|
81
82
|
"@types/json-schema": "7.0.15",
|