Skip to content

order_sending_setup

Order the sending setup

Act · mcp:actApproval cardIrreversibleCalls a provider

Prepares the purchase of exactly the domains and mailboxes the user kept. It opens an approval card: only the user's click, on the card or in VibeSell, places the order.

Description the model readsSent as is in tools/list.
Prepare the purchase of the sending domains and mailboxes the user kept — exactly those names and those people, nothing broader. It does NOT buy: it opens an approval card, and only the user's click on it, here or in VibeSell, places the order. Needs an active plan. Never say the order is placed before the result says done.

The user says

Keep these names and set them up.

tools/call · Arguments the assistant sends
{
"name": "order_sending_setup",
"arguments": {
"domains": ["getdentalflow.com", "trydentalflow.com", "dentalflowhq.com"],
"mailboxesPerDomain": 3,
"mailboxOwners": [
{
"firstName": "Ana",
"lastName": "Duval"
}
],
"summary": "Register 3 domains and set up 9 mailboxes signed by Ana Duval"
}
}
domainsstring[]required3–120 chars1–20 items

Only domains reported available by quote_infrastructure, called with the same preWarmed value — .com only for now.

preWarmedbooleanoptional

true only for warmed domains the founder kept — any other warmed name is refused. The domains then come from the provider's shelf and carry NO named address: mailboxOwners is ignored, and you must never promise them an address named after their people.

mailboxesPerDomainintegerrequired1–10

Ignored for warmed stock: the provider sets that count.

mailboxOwnersobject[]optional1–10 items

Real people the mailboxes will be from — ASK THE FOUNDER, never invent them. Required unless preWarmed, where it is ignored. Cold email sent from a role address (contact@, hello@) or a fake identity destroys deliverability. Their names become the addresses, varied per person; naming too few people for mailboxesPerDomain gets the order refused.

  • firstName stringrequired1–60 chars
  • lastName stringrequired1–60 chars
summarystringrequired3–300 chars

What is bought, in one sentence.

Input schema
{
"type": "object",
"properties": {
"domains": {
"minItems": 1,
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"minLength": 3,
"maxLength": 120
},
"description": "Only domains reported available by quote_infrastructure, called with the same preWarmed value — .com only for now."
},
"preWarmed": {
"description": "true only for warmed domains the founder kept — any other warmed name is refused. The domains then come from the provider's shelf and carry NO named address: mailboxOwners is ignored, and you must never promise them an address named after their people.",
"type": "boolean"
},
"mailboxesPerDomain": {
"type": "integer",
"minimum": 1,
"maximum": 10,
"description": "Ignored for warmed stock: the provider sets that count."
},
"mailboxOwners": {
"description": "Real people the mailboxes will be from — ASK THE FOUNDER, never invent them. Required unless preWarmed, where it is ignored. Cold email sent from a role address (contact@, hello@) or a fake identity destroys deliverability. Their names become the addresses, varied per person; naming too few people for mailboxesPerDomain gets the order refused.",
"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"]
}
},
"summary": {
"type": "string",
"minLength": 3,
"maxLength": 300,
"description": "What is bought, in one sentence."
}
},
"required": ["domains", "mailboxesPerDomain", "summary"]
}

Result kindapproval

kind"approval"
status"pending" | "done" | "not_done" | "rejected"

pending: waits for the user's click. done: approved and carried out. not_done: approved but refused when run. rejected: the user said no.

approvalobject
  • id string
  • action string
  • summary string
  • impact string
  • irreversible boolean
  • expiresAt string
outcomestring | null

What happened once decided, in a sentence.

decideHereboolean

True when the card shows Approve and Reject; otherwise the user decides in VibeSell.

appUrlstring

Where the user approves or rejects it in VibeSell.

Output schema
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "approval"
},
"status": {
"type": "string",
"enum": ["pending", "done", "not_done", "rejected"],
"description": "pending: waits for the user's click. done: approved and carried out. not_done: approved but refused when run. rejected: the user said no."
},
"approval": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"action": {
"type": "string"
},
"summary": {
"type": "string"
},
"impact": {
"type": "string"
},
"irreversible": {
"type": "boolean"
},
"expiresAt": {
"type": "string"
}
},
"required": ["id", "action", "summary", "impact", "irreversible", "expiresAt"],
"additionalProperties": false
},
"outcome": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "What happened once decided, in a sentence."
},
"decideHere": {
"type": "boolean",
"description": "True when the card shows Approve and Reject; otherwise the user decides in VibeSell."
},
"appUrl": {
"type": "string",
"description": "Where the user approves or rejects it in VibeSell."
}
},
"required": ["kind", "status", "approval", "outcome", "decideHere", "appUrl"],
"additionalProperties": false
}
  • Needs an active plan. Domains and mailboxes are included in it.
  • A registered domain cannot be given back: it stays registered whether the user sends from it or not.
  • Once approved, the mailboxes are set up and their warmup starts on its own; the user gets an email when they are ready.