Skip to content

propose_domains

Propose sending domains

Act · mcp:actAsks the userOpens at: Target confirmed, choosing a plan30 calls / 10 minCalls a provider

For names of the user's own: checks candidate .com domains, sizes them, and shows the user the whole setup — the names and the addresses on them — for them to keep. Keeping names buys nothing.

Description the model readsSent as is in tools/list.
For names of the user's own: check candidate domains (.com), size them, and show the user the whole setup — the names and the addresses on them — for them to keep. Pass candidate names built on their brand and mailboxOwners, the real people who sign the emails (first and last name; never invent one, never contact@). It returns the setup as a question: put it to the user, then call this again with their answer. Keeping names buys nothing.

The user says

Ana Duval will sign the emails. Find names around “dentalflow”.

tools/call · Arguments the assistant sends
{
"name": "propose_domains",
"arguments": {
"domains": [
"getdentalflow.com",
"trydentalflow.com",
"dentalflowhq.com",
"usedentalflow.com"
],
"mailboxOwners": [
{
"firstName": "Ana",
"lastName": "Duval"
}
],
"mailboxesPerDomain": 3
}
}
domainsstring[]required3–120 chars1–20 items

Candidate domain names, without protocol. Only .com can be bought for now. Give it more than the plan needs: it keeps the ones that are free and proposes exactly as many as the capacity plan calls for. Build them on the brand or website the founder gave you; when they gave neither, ask for it together with who signs before calling this. Never make one up, and a signer's name is not their brand unless they say so.

mailboxesPerDomainintegeroptional1–10
mailboxOwnersobject[]required1–10 items

Real people the emails will be signed by — ASK THE FOUNDER FIRST, never invent them. The proposal shows the addresses built from these names, so without them there is nothing to show. One object per person, first and last name apart — never one string, never a list of strings: [{"firstName": "<first name>", "lastName": "<last name>"}].

  • firstName stringrequired1–60 chars
  • lastName stringrequired1–60 chars
originPatternstringoptional2–60 chars

Only when you wrote these names yourself: the pattern you built them on, e.g. get{brand}. Leave it out for names the provider gave you.

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": {
"domains": {
"minItems": 1,
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"minLength": 3,
"maxLength": 120
},
"description": "Candidate domain names, without protocol. Only .com can be bought for now. Give it more than the plan needs: it keeps the ones that are free and proposes exactly as many as the capacity plan calls for. Build them on the brand or website the founder gave you; when they gave neither, ask for it together with who signs before calling this. Never make one up, and a signer's name is not their brand unless they say so."
},
"mailboxesPerDomain": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"mailboxOwners": {
"minItems": 1,
"maxItems": 10,
"type": "array",
"items": {
"type": "object",
"properties": {
"firstName": {
"type": "string",
"minLength": 1,
"maxLength": 60
},
"lastName": {
"type": "string",
"minLength": 1,
"maxLength": 60
}
},
"required": ["firstName", "lastName"]
},
"description": "Real people the emails will be signed by — ASK THE FOUNDER FIRST, never invent them. The proposal shows the addresses built from these names, so without them there is nothing to show. One object per person, first and last name apart — never one string, never a list of strings: [{\"firstName\": \"<first name>\", \"lastName\": \"<last name>\"}]."
},
"originPattern": {
"description": "Only when you wrote these names yourself: the pattern you built them on, e.g. get{brand}. Leave it out for names the provider gave you.",
"type": "string",
"minLength": 2,
"maxLength": 60
},
"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": ["domains", "mailboxOwners"]
}

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": {}
}
  • mailboxOwners are the real people who sign — asked of the user, never invented, never a role address like contact@.
  • Give more candidates than needed: it keeps the free ones and proposes exactly as many as the sizing calls for.
  • It returns the setup as a question; the assistant calls it again with the user's answer.