Skip to content

save_offer

Save the offer

Act · mcp:actIdempotent

Saves what the user sells: the product, the problem it solves, the proof (traction, logos, results) and the constraints. It replaces the offer on record.

Description the model readsSent as is in tools/list.
Save what the user sells in their VibeSell workspace: what is sold, the problem it solves, the proof (traction, logos, results) and the constraints. Only facts the user gave, or that their own website states — read it with your own web tools. It replaces the offer on record.

The user says

We sell an AI receptionist for dental clinics. Save that as my offer.

tools/call · Arguments the assistant sends
{
"name": "save_offer",
"arguments": {
"whatIsSold": "An AI receptionist that books, moves and confirms appointments for dental clinics, day and night.",
"problemSolved": "Clinics lose patients when the phone rings unanswered, and the front desk spends hours on scheduling.",
"proof": "120 clinics in France; no-shows down 30% on average.",
"constraints": "French-speaking clinics only for now."
}
}
whatIsSoldstringrequired3–1000 chars
problemSolvedstringrequired3–1000 chars
proofstringoptional≤ 1000 chars

Traction, logos, results. Empty if none.

constraintsstringoptional≤ 1000 chars

Budget, timing, exclusions.

Input schema
{
"type": "object",
"properties": {
"whatIsSold": {
"type": "string",
"minLength": 3,
"maxLength": 1000
},
"problemSolved": {
"type": "string",
"minLength": 3,
"maxLength": 1000
},
"proof": {
"description": "Traction, logos, results. Empty if none.",
"type": "string",
"maxLength": 1000
},
"constraints": {
"description": "Budget, timing, exclusions.",
"type": "string",
"maxLength": 1000
}
},
"required": ["whatIsSold", "problemSolved"]
}

Result kindoffer

kind"offer"
briefobject
  • whatIsSold string
  • problemSolved string
  • proof string
  • constraints string
stepobject

The journey step, as the VibeSell app numbers it, after this change.

  • index integer
  • total integer
  • label string
appUrlstring
Output schema
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "offer"
},
"brief": {
"type": "object",
"properties": {
"whatIsSold": {
"type": "string"
},
"problemSolved": {
"type": "string"
},
"proof": {
"type": "string"
},
"constraints": {
"type": "string"
}
},
"required": ["whatIsSold", "problemSolved", "proof", "constraints"],
"additionalProperties": false
},
"step": {
"type": "object",
"properties": {
"index": {
"type": "integer"
},
"total": {
"type": "integer"
},
"label": {
"type": "string"
}
},
"required": ["index", "total", "label"],
"additionalProperties": false,
"description": "The journey step, as the VibeSell app numbers it, after this change."
},
"appUrl": {
"type": "string"
}
},
"required": ["kind", "brief", "step", "appUrl"],
"additionalProperties": false
}
  • Only facts the user gave, or that their own website states.
  • VibeSell's MCP does not browse: the assistant reads the user's website with its own web tools.