Skip to content

propose_email

Show an email of the sequence

Act · mcp:actAsks the userOpens at: Target confirmed, choosing a plan

Shows the user one email of their 3-email sequence and lets them settle it. For every change they ask for, the assistant rewrites that same email and calls it again with the same position, then moves to the next one.

Description the model readsSent as is in tools/list.
Show the user ONE email of their 3-email sequence and let them settle it: start at position 1, write each next one as a follow-up of the one they settled, and on every change they ask for, rewrite that same email and call this again with the same position. It returns a question: put it to the user and call this again with their answer, never yours. The first email carries no link, no image and no pixel, or it is refused. Nothing is saved or sent here.

The user says

Write my first email — short, no fluff.

tools/call · Arguments the assistant sends
{
"name": "propose_email",
"arguments": {
"position": 1,
"subject": "Missed calls at {{companyName}}",
"body": "Hi {{firstName}},\n\nHow many calls does your front desk miss on a busy Monday?\n\nWe answer them for 120 clinics in France, day and night.\n\nWorth a quick chat?\n\nAna"
}
}
positionintegerrequired1–3

Which email of the sequence this is. The first one is 1.

subjectstringrequired1–200 chars
bodystringrequired1–4000 chars

The email itself. The only personalisation variables that exist are {{firstName}}, {{lastName}}, {{companyName}}, spelled exactly like that; the server refuses the first email of a sequence when it carries any other one.

answersobject[]optional≤ 12 items

The user's answers to the cards this tool showed, each with the id of its card. Pass back the list the last call returned, plus the new answer.

  • card stringrequired — The card id this answer was given to.
  • answer stringrequired — The choice id, or the user's own words.
Input schema
{
"type": "object",
"properties": {
"position": {
"type": "integer",
"minimum": 1,
"maximum": 3,
"description": "Which email of the sequence this is. The first one is 1."
},
"subject": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"body": {
"type": "string",
"minLength": 1,
"maxLength": 4000,
"description": "The email itself. The only personalisation variables that exist are {{firstName}}, {{lastName}}, {{companyName}}, spelled exactly like that; the server refuses the first email of a sequence when it carries any other one."
},
"answers": {
"description": "The user's answers to the cards this tool showed, each with the id of its card. Pass back the list the last call returned, plus the new answer.",
"maxItems": 12,
"type": "array",
"items": {
"type": "object",
"properties": {
"card": {
"type": "string",
"description": "The card id this answer was given to."
},
"answer": {
"type": "string",
"description": "The choice id, or the user's own words."
}
},
"required": ["card", "answer"]
}
}
},
"required": ["position", "subject", "body"]
}

Result kindchoicesending_choiceemail_step

Output schema
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": ["choice", "sending_choice", "email_step"],
"description": "choice: a question to put to the user. sending_choice and email_step: what their answer recorded."
}
},
"required": ["kind"],
"additionalProperties": {}
}
  • Start at position 1; write each next email as a follow-up of the one the user settled.
  • The first email is refused if it carries a link, an image or a pixel.
  • Nothing is saved or sent here: save_sequence records what was settled.