propose_domains
Propose sending domains
Act · mcp:actAsks the userOpens at: Target confirmed, choosing a plan30 calls / 10 minCalls a providerFor 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.
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.Example
Section titled “Example”The user says
Ana Duval will sign the emails. Find names around “dentalflow”.
{ "name": "propose_domains", "arguments": { "domains": [ "getdentalflow.com", "trydentalflow.com", "dentalflowhq.com", "usedentalflow.com" ], "mailboxOwners": [ { "firstName": "Ana", "lastName": "Duval" } ], "mailboxesPerDomain": 3 }}Arguments
Section titled “Arguments”domainsstring[]required3–120 chars1–20 itemsCandidate 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–10mailboxOwnersobject[]required1–10 itemsReal 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>"}].
firstNamestringrequired1–60 charslastNamestringrequired1–60 chars
originPatternstringoptional2–60 charsOnly 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 itemsThe 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.
cardstringrequired — The card id this answer was given to.answerstringrequired — 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
Section titled “Result”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": {}}Good to know
Section titled “Good to know”- 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.