Add follow-up
Add a follow-up email at the end of a campaign's sequence, with a delay after the previous email.
MCP tool mailshake_write → add_follow_up
Appends a follow-up to the sequence of a campaign. With reply_to_previous true it goes out as a reply in the same thread and has no subject of its own; with false it is a new email and needs subject. Follow-ups stop for a recipient who replies or becomes a lead, and bounced or unsubscribed recipients get none. On a campaign that already ran, the delay counts from each recipient's last send, so recipients who waited longer get the email at once. By default you confirm each call; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| campaign_id integer required | integer | Campaign ID from list_campaigns. |
| body string required | string | Body of the follow-up. Text replacements such as {{first}} work. |
| delay_days integer required | integer | Days to wait after the previous email in the sequence. |
| reply_to_previous boolean | boolean | true to send as a reply in the same thread. Default: true. |
| subject string | string | Subject line. Needed only when reply_to_previous is false. |
tools/call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "mailshake_write",
"arguments": {
"operation": "add_follow_up",
"arguments": {
"campaign_id": 4821,
"body": "Hi {{first}}, one last note. Is client reporting still on your list this quarter?",
"delay_days": 5,
"reply_to_previous": true
}
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"campaign_id": 4821,
"message_id": 90314,
"type": "follow-up",
"position": 4,
"reply_to_id": 90311,
"delay_days": 5,
"subject": null
},
"isError": false
}