AI connector

Run your flower shop from an AI assistant. Connect Meta Muse, Claude, ChatGPT or any MCP client to your BouquetOS workspace to look up and record orders, track purchase orders, and ask how the shop is doing.

Last updated 14 October 2026

What it is

The BouquetOS connector is a remote Model Context Protocol (MCP) server. Once you connect it, your assistant can call the tools listed below on your behalf. It always acts as you, in your workspace, with no more access than you have in the BouquetOS console.

Set it up

In your assistant — ChatGPT, Claude, Meta Muse or another MCP client — add a custom connector (it may be called an “MCP server”, “app” or “plugin”) with the URL https://mcp.bouquetos.com/mcp. No client id or secret is needed: the assistant registers itself. Then:

  1. Pick your workspace. The assistant opens a BouquetOS page asking which workspace to connect. Enter the first part of your console address — yourshop in yourshop.app.bouquetos.com.
  2. Sign in. You sign in on your own workspace’s usual login page. The assistant never sees your password.
  3. Approve. A consent screen names the assistant and what it is asking for. Untick “Also let it create and update orders and purchase orders” to connect it read-only.

You are returned to the assistant, which can now call the tools your account allows. To disconnect, remove the connector in your assistant. If a shop admin disables your BouquetOS account, the connection stops working on the assistant’s next request.

Authorization details

For developers and directory reviewers:

Permissions

The connector mirrors the console. A tool you couldn’t use in BouquetOS is never offered to your assistant, so it never shows up in the tool list:

Tools

Read tools only look. Write tools change records inside BouquetOS. Sensitive write tools can also act outside BouquetOS in ways that can’t be undone, such as making Shopify email your customer; assistants should confirm with you before calling them. Date inputs are in the shop’s time zone (America/Los_Angeles); returned times are ISO 8601 in UTC; every tool returns JSON text.

Every tool declares all three MCP hints — readOnlyHint, destructiveHint and openWorldHint — explicitly; the Hints column lists those set to true. Destructive tools overwrite existing data or trigger something that can’t be recalled. Open-world tools reach beyond your workspace: create_order sends a delivery address to Google Maps and can publish booked-slot counts to your Shopify storefront, update_status and update_order can make Shopify email your customer, and upload_image publishes the image at a public URL.

Orders

ToolTypeWhat it doesKey inputsReturnsSide effectsHintsWho · scope
list_orders_for_dayReadOrders whose fulfillment falls on a date, earliest first.date (YYYY-MM-DD, shop time)Array of orders (fields below)Noneread-onlyAny role · read
get_orderReadOne order by id.idOrder (fields below)Noneread-onlyAny role · read
search_orderReadFind orders from a name, phone, item or date range.at least one of query, date_from, date_to, status, source, fulfillment_type; optional limit (1–100, default 20)Trimmed summaries (id, order number, customer, fulfillment time and type, status, total, currency, items summary)Noneread-onlyAny role · read
create_orderWriteRecord a new sales order (source “chat”).customer_name, items_summary, fulfillment_at (ISO 8601), fulfillment_type (pickup | delivery), payment_method, total_amount; fulfillment_address for delivery; optional phone, recipient, paid_amount, items, notes, image_url, override_date_rules, idempotency_key{ id, summary }, plus duplicate: true on an idempotent repeatNotifies no customer. A delivery address is sent to Google Maps for a drive-time estimate. If the shop caps bookings per storefront time slot, the new booked count is published to its Shopify storefront.open-worldAny role · write; override_date_rules admin only
update_statusSensitive writeMove an order (and all its items) to a new status.id, statusThe updated order (fields below)For orders imported from the shop’s Shopify store, the change is pushed to Shopify and Shopify emails the customer (see status side effects). Emails can’t be recalled.destructive · open-worldAny role · write
update_orderSensitive writeChange any supplied fields of an order; items, if given, replace the list.id plus any of: customer and recipient details, fulfillment type, time and address, driver, items, image URLs, design and card notes, amounts, payment method, currency, status, notesThe updated order (fields below)Overwrites the supplied fields. A status change behaves exactly like update_status. A new delivery address is sent to Google Maps.destructive · open-worldAny role · write
upload_imageWriteStore a bouquet reference image to attach to an order.image_base64 (≤ 10 MB), mime_type (JPEG/PNG/WEBP/GIF), optional filename{ url, bytes }Uploads to object storage at a public URL: anyone with the URL can view it.open-worldAny role · write

Purchase orders

ToolTypeWhat it doesKey inputsReturnsSide effectsHintsWho · scope
list_purchase_ordersReadPurchase orders created in a month, newest first.optional month (YYYY-MM, default current), supplier, status, currencyPOs (fields below), per-currency totals for the filtered set, past supplier namesNoneread-onlyAdmin · Purchase orders module · read
get_purchase_orderReadOne purchase order by id.idThe PO (fields below)Noneread-onlyAdmin · Purchase orders module · read
create_purchase_orderWriteRecord a purchase from a supplier.currency, items (name, quantity, unit_price, optional unit and notes); optional supplier, status, expected_at, shipping_amount, tax_amount, notes, idempotency_keyThe created PO (fields below), plus duplicate: true on an idempotent repeatInternal record only — the supplier is not contacted.noneAdmin · Purchase orders module · write
update_purchase_orderWriteChange supplied fields, e.g. mark received or fix a price.id plus any create field; items, if given, replace the listThe updated PO (fields below)Overwrites the supplied fields. Supplier is not contacted.destructiveAdmin · Purchase orders module · write

Analytics

ToolTypeWhat it doesKey inputsReturnsSide effectsHintsWho · scope
get_sales_dashboardReadToday’s KPIs, month-to-date revenue, top products, orders needing attention.optional weeks (heatmap span)Dashboard snapshotNoneread-onlyAdmin · Orders module · read
get_sales_seriesReadRevenue (or purchase-order cost) over a range, with the change vs the previous period.metric (revenue | cost), range (7d | 30d | quarter | year | ytd)Bucketed seriesNoneread-onlyAdmin · Orders module · read (cost needs Purchase orders)
get_expense_seriesReadOverhead and labor costs over a range.rangeBucketed seriesNoneread-onlyAdmin · Orders + Cost center modules · read
get_cost_center_summaryReadRecurring burn, one-off overhead and labor for a period.optional period (mtd | last_month | last_7d | last_30d)Summary with flags for missing figuresNoneread-onlyAdmin · Cost center module · read

What the tools return

Tools return only the fields an assistant needs to answer you and to make a correct change — never whole database rows.

Order: id, orderNumber (the shop’s own number, e.g. a Shopify order’s #1001), source, status, fulfillmentType, fulfillmentAt, fulfillmentWindowEnd, pickupTimeUnknown, customer name, phone and email, recipient name and phone, fulfillmentAddress, driver, driverPickupAt, estimatedDriveMinutes, itemsSummary, items (name, qty, price, notes), imageUrls, exactDesign, designNote, noteCard, notes, totalAmount, paidAmount, paymentPending, paymentMethod (a label such as “cash” or “zelle”), currency.

Purchase order: id, supplier, status, currency, totalAmount, shippingAmount, taxAmount, createdAt (the order date the monthly list filters on), expectedAt, receivedAt, notes, items (name, quantity, unit, unitPrice, subtotal, notes).

Never returned: internal workspace and sync identifiers, raw Shopify or import payloads, receipt links, request or trace ids, internal timestamps, and payment card details (BouquetOS stores none). Money amounts are plain numbers in the record’s currency.

Status side effects

Order statuses:

new → confirmed → in_prep → ready_for_pickup (pickup) or delivering (delivery) → completed; or cancelled at any point.

Changing the status of an order that came from the shop’s connected Shopify store is mirrored to Shopify, and Shopify sends its own customer emails:

Orders created in BouquetOS or by the assistant notify no one when their status changes. Setting the status an order already has changes nothing.

Purchase-order statuses: ordered, in_transit, received (stamps the received date), cancelled. They are internal and notify no one.

Safe retries (idempotency)

create_order and create_purchase_order accept an optional idempotency_key (8–200 characters). Send a fresh key, such as a UUID, for each record you mean to create, and the same key again if you retry after a timeout or error. A repeat call with a key your workspace has already used creates nothing: it returns the record the first call created, with "duplicate": true. Two simultaneous calls with the same key also produce one record. Keys are scoped to your workspace and to the kind of record, and they don’t expire. Without a key, every call creates a new record.

Updates are naturally safe to repeat: applying the same change twice leaves the same result.

Errors

Rate limits

Sign-in and token endpoints are rate-limited per IP address: token requests 20 a minute, authorization 30 a minute, client registration 5 a minute, token revocation 30 a minute. Exceeding them returns 429. The /mcp endpoint itself has no fixed per-call limit today; please keep request rates reasonable. We may throttle traffic that degrades the service for other shops, and will update this page if we add a limit.

Your data

See the privacy policy and merchant terms for the full picture.

Support

Questions, problems or a security report: support@bouquetos.com.