Manufacturing: Build BOMs and Work Orders with an LLM
Manage bills of materials and manufacturing work orders in Flourish from Claude, ChatGPT, or any MCP client, including non-cannabis work orders and cancelling work orders.
Use Flourish's MCP server to manage bills of materials (BOMs) and manufacturing work orders from your LLM interface — Claude, ChatGPT, Gemini, Grok, or any MCP-compatible client. This article covers the manufacturing-specific tools. For how to connect, what the permission markers mean, and general troubleshooting, see Connecting to Flourish with an LLM Using Our MCP Server.
Core things it can do
1. Search and review bills of materials
You can search BOMs by name, SKU/item name, input or output item/category, and active status, then open a single BOM to see its header and component lines.
2. Check whether you can build a BOM right now
For a given BOM and facility, it can compare what the recipe calls for against on-hand inventory for the output item and every component line — answering "can I build this here" without paging through packages. You can optionally ask for a specific quantity to make.
3. Create a new BOM
It can create a BOM from scratch for an item, with component lines (each an item or item category, a quantity, and a unit of measure), plus optional nickname, quantity-to-create, effective date, and work instructions.
4. Copy a BOM to a new item
It can clone an existing BOM onto a target item, copying the header and component lines as a starting point you can then adjust. This is the fastest way to set up a product line: build one BOM you trust, then clone it to each strain and swap the strain-specific input.
5. Update an existing BOM
It can add, update, or remove component lines on a BOM, or change header fields like nickname, quantity-to-create, effective date, work instructions, and active status. Only the fields you mention change — everything else is left alone.
6. Look up an item's default manufacturing setup
For a given item, it can return the default run type, machine, and BOM — at a specific facility, or company-wide if you don't name one.
7. Search and review work orders
You can search manufacturing work orders at a facility by name, status, lot number, reference fields, and scheduled date range, including in-progress and completed runs. Open a single work order to see full detail, including any non-cannabis outputs.
8. Create a draft work order
It can create a draft work order (status Created) for an item, optionally using an item's default BOM, with a machine, run type, shift, schedule, and input packages or consumable inventory. The BOM must make the item you're making. This only drafts the run — it does not start, complete, or move cannabis.
9. Update a draft work order
It can change a draft work order's input packages, consumables, machine, run type, shift, schedule, labor hours, employee count, and process fields like temperature, pressure, and duration. It can add a BOM to a work order that doesn't have one yet. Once a work order has a BOM, the BOM and the item to make can't be changed, the same as in the app. Work orders are only editable through MCP while their status is Created — once a run has started, edit it in the app instead.
10. Work with non-cannabis work orders
It can create and update draft work orders that make a non-cannabis item, such as T-shirts or a raw ingredient batch. The work order's planned non-cannabis outputs show in the reply when you create, update, or open a single work order. Updates that don't mention the outputs leave them in place. Search results don't list the outputs, so ask your AI client to open the work order when you need them. [VERIFY: not yet deployed at time of drafting — remove this item if it hasn't shipped with this release]
- A non-cannabis work order can't use cannabis input packages. If you ask for one, the assistant refuses, names the item, and creates nothing. Add non-cannabis ingredients as consumables instead.
- The assistant can't complete a work order. Complete it in the Flourish app; the lot number comes from the work order's Lot Number field.
11. Cancel a work order
It can cancel a manufacturing work order that hasn't been completed, and report the work order's new status. Cancelling releases the work order's allocations, so the inventory is available again, the same as clicking Cancel in the app. Completed work orders can't be cancelled. This tool cancels work orders only; cancel manufacturing runs in the app.
12. Reference data
It can list manufacturing machines and run types at a facility, company-wide shifts, and the manufacturing-run status catalog (id and label) used to interpret work order statuses.
Recommended Tool Permissions
Same rule of thumb as the main MCP article: read tools (names ending in _query or _get_by_id) are safe to allow freely. Write tools default to "Needs approval."
Tool | Type | Recommended Setting | Notes |
BOMs: Query ( | Read | Always allow | Searches BOMs by nickname, SKU, input/output item or category, active state. |
BOMs: Get by ID ( | Read | Always allow | Full BOM header and component lines. |
BOMs: Availability ( | Read | Always allow | BOM detail plus on-hand inventory for output and component items at one facility. |
BOM Defaults: Query ( | Read | Always allow | Default run type, machine, and BOM for an item. |
BOMs: Create ( | Write | Needs approval | Creates a new BOM header and component lines. |
BOMs: Clone ( | Write | Needs approval | Copies an existing BOM onto a target item. Each call creates a new BOM. |
BOMs: Update ( | Write (destructive) | Needs approval | Adds, edits, or removes component lines and header fields on an existing BOM. |
Work Orders: Query ( | Read | Always allow | Searches work orders, including in-progress and completed runs. Does not list non-cannabis outputs; use Get by ID for those. |
Work Orders: Get by ID ( | Read | Always allow | Full detail for a single work order, including non-cannabis outputs. |
Work Orders: Create ( | Write | Needs approval | Creates a draft work order (status Created) for a cannabis or non-cannabis item. Does not start, complete, or move cannabis. |
Work Orders: Update ( | Write (destructive) | Needs approval | Edits a draft work order. Only works while status is Created. Refuses a BOM change once a BOM is set. |
Work Orders: Cancel ( | Write (destructive) | Needs approval | Cancels a work order that isn't completed and releases its allocations. Not reversible. Work orders only, not manufacturing runs. |
Machines: Query ( | Read | Always allow | Lists manufacturing machines at a facility. |
Run Types: Query ( | Read | Always allow | Lists manufacturing run types at a facility. |
Shifts: Query ( | Read | Always allow | Lists company shift records used to schedule work. |
Manufacturing Status: Get ( | Read | Always allow | Static reference data for manufacturing-run statuses. |
Example Prompts
BOMs
- "Show me the BOM for [item name] and tell me whether I can build 50 units at [facility] right now."
- "Create a new BOM for [item] using [component A] at 2 grams and [component B] at 1 unit each." (write — asks first)
- "Clone the BOM for [item A] onto [item B] and call it 'Q4 recipe.'" (write — asks first)
- "Clone the Gelato 1g pre-roll BOM onto the 1g pre-rolls for Blue Dream, Runtz and Sour Diesel, and swap in each strain's flower." (write — asks first)
- "Add a third component line to BOM [nickname] for 0.5 grams of [item]." (write — asks first)
Work orders
- "What work orders are scheduled at [facility] this week, and what status is each in?"
- "Draft a work order for [item] using its default BOM, scheduled for tomorrow morning on [machine name]." (write — asks first)
- "Add 3 more input packages to work order [id] and bump labor hours to 4." (write — asks first)
- "Draft a work order to make 100 [non-cannabis item] using its BOM, then show me the planned outputs." (write — asks first)
- "Cancel work order [id]. It was scheduled by mistake." (write — asks first)
- "What manufacturing run types, machines, and shifts do we have set up at [facility]?"
Troubleshooting
My AI client says it can't find an item.
Give it the item name exactly as it appears in Flourish, or its SKU. Item search matches on name, retail display name, part number and SKU. If the item truly doesn't exist, create it in Flourish first; these tools can't create items.
A BOM or work order update was refused.
Work orders can only be edited through MCP while their status is Created — once a run has started, make the change in the app instead. A work order's BOM and item to make can't be changed once a BOM is set; create a new work order instead. For a BOM, confirm the BOM header ID and item ID match an existing BOM (resolve both via mfg_bom_query first).
Creating a work order was refused because the BOM makes a different item.
The BOM must make the item you're making. Ask your AI client to look up that item's BOMs with mfg_bom_query and pick one of those.
A non-cannabis work order refused my input packages.
Non-cannabis items can't use cannabis input packages. Add the ingredients as non-cannabis consumables instead.
I can't see a work order's non-cannabis outputs in search results.
Search results don't include them. Ask your AI client to open the work order by ID.
A cancel was refused.
Completed work orders can't be cancelled, and the tool cancels work orders only. Cancel a manufacturing run in the app.
A work order says a non-cannabis ingredient doesn't have enough quantity, but I have plenty.
This can happen when the ingredient's stock is split across several lots. The inventory lookup reports the total, but the work order draws from a single lot. For now, pick the specific lot in the app, or ask for a quantity that one lot can cover. A fix is in progress.
The availability check says a component is short, but I know we have stock.
mfg_bom_availability_get compares against on-hand inventory at one facility. If the component is stocked at a different facility, it won't show up here — check with packages_query or inventory_summary_query at that facility instead.
My AI client can't find a machine, run type, or shift I know exists.
Reference data queries default to active records only. Ask your AI client to include inactive machines or run types if you're looking for something that was deactivated.
How did we do?
Inbound Transfers: Receive Shipments with an LLM
Choosing a Model and Writing Good Prompts