decide_approval
Decide an approval card
Act · mcp:actCard onlyCalls a providerApproves or rejects an approval card. Called by the VibeSell card in Claude when the user clicks Approve or Reject — hidden from the model, and given to no other host.
Approve or reject an approval card. Called by the VibeSell card when the user clicks; never by the model.Example
Section titled “Example”The user says
(The user clicks Approve on the card.)
{ "name": "decide_approval", "arguments": { "approvalId": "0ea4e28d-df68-4ab6-bf2f-ad51e6f7e51d", "decision": "approve" }}Arguments
Section titled “Arguments”approvalIdstringrequireddecision"approve" | "reject"requiredInput schema
{ "type": "object", "properties": { "approvalId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "decision": { "type": "string", "enum": ["approve", "reject"] } }, "required": ["approvalId", "decision"]}Result
Section titled “Result”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.
approvalobjectidstringactionstringsummarystringimpactstringirreversiblebooleanexpiresAtstring
outcomestring | nullWhat happened once decided, in a sentence.
decideHerebooleanTrue when the card shows Approve and Reject; otherwise the user decides in VibeSell.
appUrlstringWhere 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}Good to know
Section titled “Good to know”- Declared with _meta.ui.visibility: ["app"]: the Claude app keeps it from the model.
- Codex, Claude Code and other hosts never receive it: there, the user decides in the VibeSell app.
- The decision goes through the same check as the app: one winner, with the account's spending rights at the time of the click.
Related tools
Section titled “Related tools”list_pending_approvalsList pending approvals
order_sending_setupOrder the sending setup
launch_campaignLaunch the campaign