Skip to content

estimate_campaign_plan

Estimate a campaign

Read · mcpIdempotent

Turns a number of contacts, a horizon and a sending calendar into a campaign scenario: total emails, new people per sending day, peak emails per day, the mailboxes and domains it needs, and the smallest plan that carries it.

Description the model readsSent as is in tools/list.
Compute a campaign scenario from a number of distinct contacts, a horizon that includes the follow-ups, and a sending calendar: total emails, new people contacted per sending day, peak emails per day, the mailboxes and domains it needs, and the smallest plan that carries it. Every contact gets three emails (days 0, 3 and 7); campaigns send Monday to Friday, so use weekdays. Nothing is saved, imported or bought. Never derive contacts from a meetings target with an assumed reply or conversion rate.

The user says

I want to reach 1,500 dentists over the next month.

tools/call · Arguments the assistant sends
{
"name": "estimate_campaign_plan",
"arguments": {
"contacts": 1500,
"horizonDays": 30,
"calendar": "weekdays"
}
}
contactsintegerrequired1–1000000

Distinct people to contact.

horizonDaysintegerrequired8–366

Calendar days from the first email to the last follow-up.

calendar"every_day" | "weekdays"required

Use weekdays.

Input schema
{
"type": "object",
"properties": {
"contacts": {
"type": "integer",
"minimum": 1,
"maximum": 1000000,
"description": "Distinct people to contact."
},
"horizonDays": {
"type": "integer",
"minimum": 8,
"maximum": 366,
"description": "Calendar days from the first email to the last follow-up."
},
"calendar": {
"type": "string",
"enum": ["every_day", "weekdays"],
"description": "Use weekdays."
}
},
"required": ["contacts", "horizonDays", "calendar"]
}

Result kindcampaign_estimate

kind"campaign_estimate"
status"estimated" | "invalid"
contactsinteger
horizonDaysinteger
calendarstring
totalEmailsinteger | null
newContactsPerDayinteger | null
peakEmailsPerDayinteger | null
emailsIn30Daysinteger | null
mailboxesinteger | null
domainsinteger | null
planobject | null

The smallest plan that carries this scenario. Null when none does.

  • code string
  • label string
  • monthlyPriceCents integer
currentPlanobject | null

The plan the workspace pays for. Null without one.

  • code string
  • label string
coveredByCurrentPlanboolean

True when the plan they pay for already carries this scenario.

currencystring
assumptionsstring | null
messagestring | null
Output schema
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "campaign_estimate"
},
"status": {
"type": "string",
"enum": ["estimated", "invalid"]
},
"contacts": {
"type": "integer"
},
"horizonDays": {
"type": "integer"
},
"calendar": {
"type": "string"
},
"totalEmails": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"newContactsPerDay": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"peakEmailsPerDay": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"emailsIn30Days": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"mailboxes": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"domains": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"plan": {
"anyOf": [
{
"type": "object",
"properties": {
"code": {
"type": "string"
},
"label": {
"type": "string"
},
"monthlyPriceCents": {
"type": "integer"
}
},
"required": ["code", "label", "monthlyPriceCents"],
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "The smallest plan that carries this scenario. Null when none does."
},
"currentPlan": {
"anyOf": [
{
"type": "object",
"properties": {
"code": {
"type": "string"
},
"label": {
"type": "string"
}
},
"required": ["code", "label"],
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "The plan the workspace pays for. Null without one."
},
"coveredByCurrentPlan": {
"type": "boolean",
"description": "True when the plan they pay for already carries this scenario."
},
"currency": {
"type": "string"
},
"assumptions": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"message": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"kind",
"status",
"contacts",
"horizonDays",
"calendar",
"totalEmails",
"newContactsPerDay",
"peakEmailsPerDay",
"emailsIn30Days",
"mailboxes",
"domains",
"plan",
"currentPlan",
"coveredByCurrentPlan",
"currency",
"assumptions",
"message"
],
"additionalProperties": false
}
  • Every contact gets three emails (days 0, 3 and 7), and campaigns send Monday to Friday.
  • A simulation: nothing is saved, imported or bought.
  • Contacts are never derived from a meetings goal with an assumed reply rate.