stage_campaign
Prepare the campaign
Act · mcp:actOpens at: Setting up the sending infrastructure30 calls / 10 minCalls a providerIdempotentCreates the campaign at the email provider from the approved sequence, as a draft: it sends nothing and is not active. Until it is launched, its dates can still change.
Create the campaign at the email provider from the approved sequence saved under this name, as a draft: it sends nothing and is not active. Ask the user first when it should start — a day they name (and an end only if they want one), or as soon as it is launched — and pass dates only when they named a day. Until it is launched its dates can still change: call this again with every date it should carry, or removeDates alone. Then read the launch figures with get_campaign and call launch_campaign.Example
Section titled “Example”The user says
Prepare the campaign to start on Monday 3 November.
{ "name": "stage_campaign", "arguments": { "name": "Dentists FR — missed calls", "startDate": "2026-11-03" }}Arguments
Section titled “Arguments”namestringrequired2–120 charsThe name the sequence was saved under — the same one you approved. Never guess it: read it back with get_workspace_context.
startDatestringoptionalOnly when the founder chose to schedule it: the first day it may send, as YYYY-MM-DD — exactly the calendar date they gave you. If they name a weekday or a delay instead of a date, ask them for the date rather than working it out. On a campaign already staged, pass the start it should carry even when only its end moves.
endDatestringoptionalOnly with startDate, and only if the founder wants the campaign to stop on a given day: that day, as YYYY-MM-DD. On it the provider ends the campaign even if some leads were never reached — tell them so before you pass it. On a campaign already staged with an end, leaving it out drops that end.
removeDatesbooleanoptionalOnly when the founder wants a campaign that is not launched yet to carry no date any more, so that it sends as soon as it is launched: true, with no startDate and no endDate. Once launched, it then sends inside its weekly window straight away.
Input schema
{ "type": "object", "properties": { "name": { "type": "string", "minLength": 2, "maxLength": 120, "description": "The name the sequence was saved under — the same one you approved. Never guess it: read it back with get_workspace_context." }, "startDate": { "description": "Only when the founder chose to schedule it: the first day it may send, as YYYY-MM-DD — exactly the calendar date they gave you. If they name a weekday or a delay instead of a date, ask them for the date rather than working it out. On a campaign already staged, pass the start it should carry even when only its end moves.", "type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$" }, "endDate": { "description": "Only with startDate, and only if the founder wants the campaign to stop on a given day: that day, as YYYY-MM-DD. On it the provider ends the campaign even if some leads were never reached — tell them so before you pass it. On a campaign already staged with an end, leaving it out drops that end.", "type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$" }, "removeDates": { "description": "Only when the founder wants a campaign that is not launched yet to carry no date any more, so that it sends as soon as it is launched: true, with no startDate and no endDate. Once launched, it then sends inside its weekly window straight away.", "type": "boolean" } }, "required": ["name"]}Result
Section titled “Result”Result kindcampaign
kind"campaign"outcomestring | nullWhat the call that rendered it did, in a sentence. Null for a plain read.
campaignobject | nullThe live campaign, or the last one when none is live. Null before any.
idstring — The campaign id launch, stop and resume take. Never invent one.namestringstatestringstateLabelstringlivebooleanstartsOnstring | nullendsOnstring | nullstatsobject | null — The last counters read from the provider. Null until a first reading.
launchRecapobject | nullWhat the user confirms before a launch. Null before the sending setup step.
completeboolean — False while one of the four figures is missing.contactsinteger — Leads ready to be pushed into the campaign.sendingMailboxesstring[]firstDayEmailsinteger | nullwindowobject | null — The weekly sending window, in the workspace's timezone.
appUrlstringOutput schema
{ "type": "object", "properties": { "kind": { "type": "string", "const": "campaign" }, "outcome": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "What the call that rendered it did, in a sentence. Null for a plain read." }, "campaign": { "anyOf": [ { "type": "object", "properties": { "id": { "type": "string", "description": "The campaign id launch, stop and resume take. Never invent one." }, "name": { "type": "string" }, "state": { "type": "string" }, "stateLabel": { "type": "string" }, "live": { "type": "boolean" }, "startsOn": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "endsOn": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "stats": { "anyOf": [ { "type": "object", "properties": { "sent": { "type": "integer" }, "replies": { "type": "integer" }, "opens": { "type": "integer" }, "bounces": { "type": "integer" }, "measuredAt": { "type": "string", "description": "When the provider's counters were last read." } }, "required": ["sent", "replies", "opens", "bounces", "measuredAt"], "additionalProperties": false }, { "type": "null" } ], "description": "The last counters read from the provider. Null until a first reading." } }, "required": [ "id", "name", "state", "stateLabel", "live", "startsOn", "endsOn", "stats" ], "additionalProperties": false }, { "type": "null" } ], "description": "The live campaign, or the last one when none is live. Null before any." }, "launchRecap": { "anyOf": [ { "type": "object", "properties": { "complete": { "type": "boolean", "description": "False while one of the four figures is missing." }, "contacts": { "type": "integer", "description": "Leads ready to be pushed into the campaign." }, "sendingMailboxes": { "type": "array", "items": { "type": "string" } }, "firstDayEmails": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] }, "window": { "anyOf": [ { "type": "object", "properties": { "days": { "type": "array", "items": { "type": "string" } }, "from": { "type": "string" }, "to": { "type": "string" } }, "required": ["days", "from", "to"], "additionalProperties": false }, { "type": "null" } ], "description": "The weekly sending window, in the workspace's timezone." } }, "required": [ "complete", "contacts", "sendingMailboxes", "firstDayEmails", "window" ], "additionalProperties": false }, { "type": "null" } ], "description": "What the user confirms before a launch. Null before the sending setup step." }, "appUrl": { "type": "string" } }, "required": ["kind", "outcome", "campaign", "launchRecap", "appUrl"], "additionalProperties": false}Good to know
Section titled “Good to know”- The assistant asks the user when it should start — a day they name, or as soon as it is launched — and passes dates only when they named a day.
- To change the dates before launch: call it again with every date it should carry, or removeDates alone.
- Then read the launch figures with get_campaign, and call launch_campaign.