save_offer
Save the offer
Act · mcp:actIdempotentSaves what the user sells: the product, the problem it solves, the proof (traction, logos, results) and the constraints. It replaces the offer on record.
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.Example
Section titled “Example”The user says
We sell an AI receptionist for dental clinics. Save that as my offer.
{ "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." }}Arguments
Section titled “Arguments”whatIsSoldstringrequired3–1000 charsproblemSolvedstringrequired3–1000 charsproofstringoptional≤ 1000 charsTraction, logos, results. Empty if none.
constraintsstringoptional≤ 1000 charsBudget, 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
Section titled “Result”Result kindoffer
kind"offer"briefobjectwhatIsSoldstringproblemSolvedstringproofstringconstraintsstring
stepobjectThe journey step, as the VibeSell app numbers it, after this change.
indexintegertotalintegerlabelstring
appUrlstringOutput 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}Good to know
Section titled “Good to know”- 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.
Related tools
Section titled “Related tools”save_targetSave the target
save_playbookSave the playbook
get_workspace_contextRead the VibeSell workspace