MCP apps

Widgets and quotes

Plans and quotes render as an interactive card inside the chat, and the guided quote walks the buyer to a price.

Tools with a card

Four tools return a card as well as text: list_plans shows a plan picker with a monthly and annual toggle; recommend_plan, quote_price and get_a_quote show a quote with trial and demo buttons. The other tools answer in text, with citations.

The guided quote

get_a_quote is a whole sales conversation in one tool. Each call:

  1. Merges anything the buyer has already said (team size, must-haves, billing) into the session.
  2. Checks each answer and asks again, with a reason, if it's invalid.
  3. Asks the next missing question, one at a time.
  4. When nothing is missing, returns the quote and the next step.

The questions come from the site. Must-haves are the features that actually separate the plans. When a site lists prices without a feature comparison, the buyer picks the plan instead. Pass restart: true to start over.

Lead capture

capture_lead sends the buyer's details to the company's team. It asks for an email, then a name (skipping either if the buyer already gave it), saves the lead with the buyer's quote attached, and shows a confirmation card. The quote card's Email me this quote button starts it.

When the Origami team has connected the company's CRM webhook, each lead is posted to it as JSON:

POST <your webhook URL>
x-origami-event: lead.created
x-origami-signature: sha256=<HMAC-SHA256 of the body>

{
  "event": "lead.created",
  "sentAt": "2026-10-15T04:12:09.000Z",
  "data": {
    "id": "6f1c…", "app": "acme-com", "company": "Acme",
    "name": "Jo Lee", "email": "jo@acme.com",
    "quote": { "recommendation": "Business", "price": { "monthlyTotal": 360, "yearlyTotal": 4320, "billing": "annual" } },
    "answers": { "team_size": 20, "billing": "annual" },
    "session": "…", "channel": "chatgpt", "at": "2026-10-15T04:12:08.000Z"
  }
}

Check the signature by computing the HMAC-SHA256 of the raw request body with your shared secret and comparing it to the header. Webhooks must use HTTPS and aren't retried yet, so every lead is also kept in Origami.

How flows work

The quote and lead capture are both flows: a graph of steps that runs as one tool. Question steps ask one thing and validate the answer, action steps do work (price a plan, send a lead), and a card step ends the run. Edges can branch on the buyer's answers, and state is kept per session on the server, so the assistant never has to carry it.

Host compatibility

The widget is one HTML document served as two resources:

  • ui://origami/app.html with the MCP Apps profile, for Claude and other MCP hosts. It talks to the host over postMessage: ui/initialize, tool results, tools/call, ui/open-link and size changes.
  • ui://origami/app.openai.html for ChatGPT, using window.openai.

Tools point to the widget through _meta, so each host picks the version it understands. The card follows the host's light or dark theme.