From 08d69301b4153c620cdbf3af1360820c54d0aee4 Mon Sep 17 00:00:00 2001 From: Greg Methvin Date: Mon, 23 Feb 2026 02:07:20 -0800 Subject: [PATCH] Clarify sendAt behavior in create_campaign tool --- TOOLS.md | 2 +- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- src/tool-filter.ts | 2 +- src/tools/campaigns.ts | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/TOOLS.md b/TOOLS.md index 7f82f01..aa9f7bb 100644 --- a/TOOLS.md +++ b/TOOLS.md @@ -11,7 +11,7 @@ - **activate_triggered_campaign** ✏️✉️: Activate a triggered campaign (requires API triggered campaign activation enabled) - **archive_campaigns** ✏️: Archive one or more campaigns. Scheduled/recurring campaigns will be cancelled, running campaigns will be aborted. - **cancel_campaign** ✏️: Cancel a scheduled or recurring campaign -- **create_campaign** ✏️✉️: Create a new blast or triggered campaign from an existing template. If listIds are provided, the campaign will be a blast campaign, otherwise it will be a triggered campaign. Blast campaigns will be sent immediately if sendAt is not provided. +- **create_campaign** ✏️✉️: Create a new blast or triggered campaign from an existing template. If listIds are provided, the campaign will be a blast campaign; it is created in Ready state and will be sent at the given sendAt time, which is required. If listIds are not provided, the campaign will be a triggered campaign in Ready state that must be activated before it can send. - **deactivate_triggered_campaign** ✏️: Deactivate a triggered campaign (requires API triggered campaign deactivation enabled) - **get_campaign**: Get detailed information about a specific campaign - **get_campaign_metrics**: Get campaign performance metrics diff --git a/package.json b/package.json index 543e056..9a9ad72 100644 --- a/package.json +++ b/package.json @@ -75,7 +75,7 @@ }, "dependencies": { "@alcyone-labs/zod-to-json-schema": "4.0.10", - "@iterable/api": "0.6.0", + "@iterable/api": "0.6.1", "@modelcontextprotocol/sdk": "1.18.1", "@primno/dpapi": "2.0.1", "@types/json-schema": "7.0.15", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1e536bc..ea192db 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,8 +12,8 @@ importers: specifier: 4.0.10 version: 4.0.10(zod@4.1.11) '@iterable/api': - specifier: 0.6.0 - version: 0.6.0(typescript@5.9.3) + specifier: 0.6.1 + version: 0.6.1(typescript@5.9.3) '@modelcontextprotocol/sdk': specifier: 1.18.1 version: 1.18.1 @@ -654,8 +654,8 @@ packages: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} - '@iterable/api@0.6.0': - resolution: {integrity: sha512-rvDi8zOAzU62AhgIS9hCQtnwz4WGVO49nkKw687P2YDikmg7JXhYSx8XRyjwdFVsgeM1FHF1NCrqIkdNRJMmWQ==} + '@iterable/api@0.6.1': + resolution: {integrity: sha512-Mh/CmmKllWs9dMMZa2wJM13bdMZ6+21m1xhJ41MtRJrK6vIj5EJuxNsUbRF4J4jxoK/m59pqybXhBR/JPpsb0w==} engines: {node: '>=18.0.0'} '@jest/console@30.2.0': @@ -3226,7 +3226,7 @@ snapshots: '@istanbuljs/schema@0.1.3': {} - '@iterable/api@0.6.0(typescript@5.9.3)': + '@iterable/api@0.6.1(typescript@5.9.3)': dependencies: '@t3-oss/env-core': 0.13.8(typescript@5.9.3)(zod@4.1.11) axios: 1.13.2 diff --git a/src/tool-filter.ts b/src/tool-filter.ts index 743d48e..a4fc750 100644 --- a/src/tool-filter.ts +++ b/src/tool-filter.ts @@ -117,7 +117,7 @@ export const SEND_TOOLS: Set = new Set([ "send_campaign", "trigger_campaign", "schedule_campaign", - // Creating a blast campaign can send immediately if sendAt not provided + // Creating a blast campaign schedules a send (sendAt is required when listIds is provided) "create_campaign", // Triggered campaigns can cause sends upon activation; block unless explicitly allowed "activate_triggered_campaign", diff --git a/src/tools/campaigns.ts b/src/tools/campaigns.ts index 8fb380e..f9da002 100644 --- a/src/tools/campaigns.ts +++ b/src/tools/campaigns.ts @@ -47,7 +47,7 @@ export function createCampaignTools(client: IterableClient): Tool[] { createTool({ name: "create_campaign", description: - "Create a new blast or triggered campaign from an existing template. If listIds are provided, the campaign will be a blast campaign, otherwise it will be a triggered campaign. Blast campaigns will be sent immediately if sendAt is not provided.", + "Create a new blast or triggered campaign from an existing template. If listIds are provided, the campaign will be a blast campaign; it is created in Ready state and will be sent at the given sendAt time, which is required. If listIds are not provided, the campaign will be a triggered campaign in Ready state that must be activated before it can send.", schema: CreateCampaignParamsSchema, execute: (params) => client.createCampaign(params), }),