Products

Ask your Fishbowl anything. Act on the answer. Build the report.

ILC MCP for Fishbowl connects the AI tools your team already uses to your live Fishbowl database: get answers from your data as it is right now, make changes that aren't written until you approve them, and build reports from a conversation. AI is becoming part of how every business runs — this is how your team reaches Fishbowl through it, safely and on your terms.

See it work
Ask

Your Fishbowl as it is right now

Every question runs against your live Fishbowl database. The order that shipped ten minutes ago, the stock that was just received, the PO issued this morning: it's all in the answer, with no copy to wait on.

Live, with no copy

Answers come straight from your Fishbowl database, usually in under a second per query. We don't copy your data to the cloud, and there are no inbound firewall ports to open.

Reads run on their own

Reading is safe, so it's automatic. Every read is still checked and row-capped, and system tables and password fields are always off-limits.

Approved queries

Your admins write and approve saved queries. Everyone else runs those, with their own inputs, and never sees the SQL. Admins manage access right from the chat: "Give James access to the BOM requirements query."

Your Fishbowl logins

Each person signs in with their own Fishbowl username and password, including MFA. Grant access by user or Fishbowl group. Deactivate someone in Fishbowl and their access stops.

Every step logged

See who asked, what they were trying to find out, and the exact query that ran. Results are not stored.

Your own instance

Every customer gets a separate instance. Nothing is shared between companies.

See it work

A real question, answered from Fishbowl

Type the question the way you would ask a coworker. The AI picks the right query, runs it against your live data, and explains the answer.

Fishbowl MCP connectedin Claude
Can we build 40 batches of chocolate chip cookies (BB2005) by Friday? What's short?
✓Checked your Fishbowl data · 2 read-only queries · 0.4 s

Yes on materials, with two things to resolve. Every ingredient for 40 batches of BB2005 is covered by available stock company-wide, except the items below.

IssueNeedStatus
Water13.2 fl ozZero on hand anywhere. It's set up as an Inventory part, so Fishbowl will treat it as short and the pick won't fully fill until stock is adjusted in.
Butter (BP203) at Main320 oz (20 lbs)Main has none. LA, MI and SLC each have 3,453 oz, so this only matters if you build at Main.

Everything else has plenty of room. The tightest ingredients are still well clear:

IngredientNeed for 40Available (all sites)Batches covered
Chocolate Chips (CR403)40 lbs349.5 lbs349
All Purpose Flour (B201)60 lbs591 lbs394
Chopped Walnuts (H902)20 lbs247.5 lbs495
White egg (BP204)80 ea1,455 ea727
Brown Sugar (C502)20 lbs481.5 lbs963

By site, LA and MI can each build all 40 from their own stock (apart from water). Main can too once butter is transferred in; its walnuts are the closest call at 25 lbs against 20 needed. SLC can't, since it only holds butter.

Two caveats:

  • This checks materials only. I didn't look at labor, oven capacity, or the schedule for the week, so "by Friday" depends on those.
  • Available stock already nets out current allocations, but not Entered manufacture orders that haven't been issued yet, which could be competing for the same ingredients.

Which site is the build planned for? I can check open manufacture orders there to confirm nothing else is competing for the butter or walnuts.

Main. Is anything else competing for the butter or walnuts there?
✓Checked your Fishbowl data · 3 read-only queries · 0.7 s

Two open manufacture orders at Main want the same ingredients, but they're small. Walnuts still cover everything with 2 lbs to spare, and the butter transfer needs to grow by about 3 lbs.

MOStatusScheduledBuildsButterWalnuts
45EnteredJul 181 × BB2005 Chocolate Chip Batch8 oz0.5 lb
46EnteredAug 81 × BB2003 Oatmeal Chocolate Chip Batch, 1 × FG2200 Sugar Cookie Batch40.5 oz2.5 lbs
Total competing48.5 oz (about 3 lbs)3 lbs

What that does to your 40 batches at Main:

IngredientOn hand at MainYour 40 batchesOther MOsResult
Walnuts (H902)25 lbs20 lbs3 lbs2 lbs left over
Butter (BP203)0320 oz48.5 ozTransfer in 368.5 oz (about 23 lbs) to cover all three

A few things worth knowing:

  • Both MOs are past their scheduled dates and still Entered, so neither has been issued and nothing is allocated yet. Whichever order gets issued and picked first takes the stock.
  • MO 45 is itself one batch of BB2005. If it's meant to be part of your 40, the real competition is only MO 46.
  • No open sales orders are selling butter or walnuts directly, and nothing is on order for either at Main, so the butter has to come from LA, MI or SLC (3,453 oz each).

I didn't check for transfer orders already moving butter toward Main.

A real 67-second session on our demo Fishbowl, replayed faster.

Behind the scenes

What your admin sees in the query log for this conversation.

5read-only queries
1.2 stotal query time
0changes to your data
0rows stored

Every step the AI took

  1. 1
    Checked the saved queries
    6 saved queries
  2. 2
    Read the Fishbowl notes index
    13 topic notes
  3. 3
    Can we build 40 batches of chocolate chip cookies (BB2005) by Friday? What's short?
    Saved query bom_build_requirements, approved by your admin
    ✓ passed read-only checkrow cap applied
    Show the SQL
    SELECT b.num AS bomNum, p.num AS rawPart, p.description, bi.quantity AS qtyPerBuild, lu.code AS bomUom, @builds AS builds, bi.quantity * CASE WHEN bi.oneTimeItem = 1 THEN 1 ELSE @builds END AS qtyNeeded, ROUND(bi.quantity * CASE WHEN bi.oneTimeItem = 1 THEN 1 ELSE @builds END * CASE WHEN bi.uomId = p.uomId THEN 1 ELSE uc.multiply / uc.factor END, 4) AS qtyNeededStockUom, pu.code AS stockUom, ROUND(COALESCE(inv.onHand, 0), 4) AS qtyOnHand, ROUND(COALESCE(inv.available, 0), 4) AS qtyAvailable, ROUND(COALESCE(inv.onOrder, 0), 4) AS qtyOnOrder, ROUND(GREATEST(bi.quantity * CASE WHEN bi.oneTimeItem = 1 THEN 1 ELSE @builds END * CASE WHEN bi.uomId = p.uomId THEN 1 ELSE uc.multiply / uc.factor END - COALESCE(inv.available, 0), 0), 4) AS shortfall, CASE WHEN bi.oneTimeItem = 1 THEN NULL ELSE FLOOR(COALESCE(inv.available, 0) / NULLIF(bi.quantity * CASE WHEN bi.uomId = p.uomId THEN 1 ELSE uc.multiply / uc.factor END, 0)) END AS buildsCoveredByAvailable, bi.oneTimeItem + 0 AS oneTimeItem, bi.variableQty + 0 AS variableQty, bg.name AS optionGroup, bi.groupDefault + 0 AS isGroupDefault, sb.num AS subAssemblyBom
    FROM bom AS b
    JOIN bomitem AS bi ON bi.bomId = b.id AND bi.typeId = 20
    JOIN part AS p ON p.id = bi.partId
    JOIN uom AS pu ON pu.id = p.uomId
    LEFT JOIN uom AS lu ON lu.id = bi.uomId
    LEFT JOIN uomconversion AS uc ON uc.fromUomId = bi.uomId AND uc.toUomId = p.uomId
    LEFT JOIN bomitemgroup AS bg ON bg.id = bi.bomItemGroupId
    LEFT JOIN bom AS sb ON sb.id = bi.stageBomId AND bi.stage = 1
    LEFT JOIN (SELECT t.PARTID AS partId, SUM(t.QTYONHAND) AS onHand, SUM(t.QTYONHAND - t.QTYALLOCATED - t.QTYNOTAVAILABLE) AS available, SUM(t.QTYONORDER) AS onOrder
    FROM qtyinventorytotals AS t
    GROUP BY t.PARTID) AS inv ON inv.partId = p.id
    WHERE b.num = @bom_num AND (@part_num IS NULL OR p.num = @part_num)
    ORDER BY bi.sortIdConfig, bi.id
    LIMIT 101
    11 rows · 184 ms
  4. 4
    Read Fishbowl notes · MANUFACTURING.md
  5. 5
    Can we build 40 batches of BB2005 by Friday, what's short: check part type of Water and per-warehouse availability of each raw good
    Follow-up to saved query: per location group breakdown and part type
    ✓ passed read-only checkrow cap applied
    Show the SQL
    SELECT p.num, pt.name AS partType, lg.name AS locationGroup, ROUND(t.QTYONHAND, 2) AS onHand, ROUND(t.QTYONHAND - t.QTYALLOCATED - t.QTYNOTAVAILABLE, 2) AS available, u.code AS uom
    FROM part AS p
    JOIN parttype AS pt ON pt.id = p.typeId
    JOIN uom AS u ON u.id = p.uomId
    LEFT JOIN qtyinventorytotals AS t ON t.PARTID = p.id
    LEFT JOIN locationgroup AS lg ON lg.id = t.LOCATIONGROUPID
    WHERE p.num IN ('B201', 'BD301', 'BP203', 'C502', 'BP204', 'BD302', 'B202', 'Water', 'B204', 'H902', 'CR403')
    ORDER BY p.num, lg.name
    LIMIT 101
    33 rows · 250 ms
  6. 6
    Is anything else competing for butter (BP203) or walnuts (H902) at Main: open manufacture orders consuming them
    ✓ passed read-only checkrow cap applied
    Show the SQL
    SELECT m.num AS moNum, ms.name AS moStatus, lg.name AS locationGroup, CAST(m.dateScheduled as CHAR) AS dateScheduled, pb.num AS bomNum, pmi.qtyToFulfill AS builds, p.num AS rawPart, mi.qtyToFulfill AS qtyNeeded, mi.qtyFulfilled AS qtyDone, u.code AS uom, mis.name AS lineStatus
    FROM mo AS m
    JOIN mostatus AS ms ON ms.id = m.statusId
    JOIN locationgroup AS lg ON lg.id = m.locationGroupId
    JOIN moitem AS mi ON mi.moId = m.id AND mi.typeId = 20
    JOIN moitemstatus AS mis ON mis.id = mi.statusId
    JOIN part AS p ON p.id = mi.partId
    LEFT JOIN uom AS u ON u.id = mi.uomId
    LEFT JOIN moitem AS pmi ON pmi.id = mi.parentId
    LEFT JOIN bom AS pb ON pb.id = pmi.bomId
    WHERE m.statusId IN (10, 20, 50) AND mi.statusId NOT IN (50, 60, 70) AND p.num IN ('BP203', 'H902')
    ORDER BY lg.name, m.dateScheduled, m.num
    LIMIT 101
    5 rows · 239 ms
  7. 7
    Is anything else competing for butter (BP203) or walnuts (H902) at Main: allocation and on-order breakdown per warehouse
    Second query: inventory totals breakdown (allocated, on order) by location group
    ✓ passed read-only checkrow cap applied
    Show the SQL
    SELECT p.num, lg.name AS locationGroup, t.*
    FROM qtyinventorytotals AS t
    JOIN part AS p ON p.id = t.PARTID
    JOIN locationgroup AS lg ON lg.id = t.LOCATIONGROUPID
    WHERE p.num IN ('BP203', 'H902')
    ORDER BY p.num, lg.name
    LIMIT 101
    6 rows · 277 ms
  8. 8
    Is anything else competing for butter (BP203) or walnuts (H902) at Main: open sales orders selling these parts directly
    Third query: open sales order lines for the two parts
    ✓ passed read-only checkrow cap applied
    Show the SQL
    SELECT 'SO' AS src, so.num AS orderNum, ss.name AS status, lg.name AS locationGroup, p.num AS part, si.qtyToFulfill AS qtyOrdered, si.qtyFulfilled AS qtyDone, u.code AS uom, CAST(si.dateScheduledFulfillment as CHAR) AS dateScheduled
    FROM soitem AS si
    JOIN so ON so.id = si.soId
    JOIN sostatus AS ss ON ss.id = so.statusId
    JOIN locationgroup AS lg ON lg.id = so.locationGroupId
    JOIN product AS pr ON pr.id = si.productId
    JOIN part AS p ON p.id = pr.partId
    LEFT JOIN uom AS u ON u.id = si.uomId
    WHERE so.statusId IN (10, 20, 25) AND si.qtyToFulfill > si.qtyFulfilled AND p.num IN ('BP203', 'H902')
    ORDER BY lg.name, so.num
    LIMIT 101
    0 rows · 203 ms

Every query is checked before it runs: reads only, no system tables or password fields, and a row cap on every result. The question and the SQL are logged for your admins. The data itself is not stored.

See 17 more real questions →

Act

Nothing changes without your yes

Reads run on their own because reading is safe. A change is different: every write — a new order, an import — is shown to you as a preview first and waits for your confirmation. It runs under your own Fishbowl login and can never do something you couldn't do yourself.

Preview, then confirm

The AI prepares the change and shows you exactly what it will create or update. You approve it, and only then is it written. No surprise edits.

Orders from chat

Turn an answer, or a spreadsheet, into a sales order, purchase order, manufacture order, or transfer order. Each one is created under that person's own Fishbowl login, limited to what they're allowed to create.

Imports from chat

Parts, customers, vendors, pricing, inventory moves, receiving, picking, shipping — the same imports your team does by hand, prepared from a conversation or a file and committed on your approval.

Your permissions, always

The AI acts as you. If your Fishbowl login can't do it, neither can the AI. Admins decide who can prepare which changes, by user or Fishbowl group.

Every change logged

Who prepared it, who confirmed it, what was written, and when. A full, auditable trail for every action — not just reads.

Custom tools for your rules

For agentic ERP work, we build tools around your business rules — approval limits, preferred vendors, how a rush order is priced — so the rules live in the tool and the AI can't skip them.

See it work

A real change, previewed and confirmed

A buyer asks, in plain language, to set up a new part and place a starter order. The AI checks what it's allowed to do, asks what it needs, then prepares a new part and a purchase order — and writes nothing until each one is confirmed.

Fishbowl MCP connectedin Claude
can you set up a new part for us and get a small starter order placed with one of our vendors for it?
✓Prepared the change · you confirmed · committed

You have rights to create both the part and the purchase order. Before I create anything, I need these details, since a part is permanent once it's in Fishbowl:

The part

  • Part number and description
  • Unit of measure (each, case, lb…)
  • Type: inventory, non-inventory, or service. I'll assume inventory if you don't say.
  • Is it tracked by lot, serial, or expiration date? Optional.

The starter order

  • Vendor. These are your most active ones right now:
  • Rocky Mountain Chocolate
  • Williams Treat Company
  • A&B Distribution
  • Brent's Food Supply
  • Mike's Salt
  • Chuck's Flour Shop
  • Johnson Manufacturing
  • Or any other vendor you name.
  • Quantity and unit cost
  • The vendor's part number, if it differs from yours. Optional.
  • Should the PO go in as a bid request (draft) or issued (sent to the vendor)? I'd suggest a bid request so you can review it in Fishbowl first.

Once you reply, I'll prepare both and show you a preview. Nothing gets committed until you approve it.

let's add a new ingredient - Dark Cocoa Powder, call it DARK-COCOA. we buy it by the pound, regular inventory part, nothing tracked. put in a starter order to Brent's Food Supply for 100 lbs at about a dollar a pound, and just make it a bid request so we can look it over first.
✓Prepared the change · you confirmed · committed

The part is ready to create. Here's the preview:

New part: DARK-COCOA

FieldValue
DescriptionDark Cocoa Powder
Unit of measurePound (lbs)
TypeInventory
PO item typePurchase
TrackingNone
ActiveYes

This creates a new part. It doesn't update an existing one.

Next step: the bid request to Brent's Food Supply. Fishbowl won't check the PO until the part exists, so I'll prepare it right after this part is created. Here's my plan for it:

  • Line: 100 lbs of DARK-COCOA at $1.00/lb, for a total of $100.00
  • Status: Bid Request
  • Location group: Main
  • Remit-to: Brent's Food Supply, 777 South Delivery Lane, Salt Lake City, UT 84111
  • Carrier: Will Call
  • Ship-to: I'll copy it from your last Brent's PO (#231): "Default Address, Main Street." That looks like a placeholder. If you'd like your real warehouse address on this PO, send it to me. Otherwise I'll use that one so it matches your past orders.

Should I create the part now? The preview expires in about 30 minutes.

yep, that all looks right - go ahead and create the part, and the placeholder address is fine for now. then go ahead and put the bid request in to Brent's.
✓Prepared the change · you confirmed · committed

I created the part and the bid request in Fishbowl:

  • DARK-COCOA (Dark Cocoa Powder) is a new inventory part, bought in pounds, with no tracking.
  • PO 232 went to Brent's Food Supply as a Bid Request. It's for 100 lbs of DARK-COCOA at $1.00/lb, $100.00 total, with Will Call as the carrier, from location group Main.

PO 232 is waiting in Fishbowl for you to review. Once the price is confirmed, issue it from there. You'll also want to put your real warehouse address in place of the placeholder ship-to before it goes to Brent's.

A real 89-second session on our demo Fishbowl, replayed faster.

Behind the scenes

What your admin sees in the query log for this conversation.

2changes committed
✓you confirmed first
4read-only checks
✓who/what/when logged

Every step the AI took

  1. 1
    Checked its write permissions
    48 import types you're allowed to write
  2. 2
    List active vendors with recent purchase order activity so the user can pick one for a starter order
    ✓ passed read-only checkrow cap applied
    Show the SQL
    SELECT v.name, COUNT(p.id) AS po_count, MAX(p.dateIssued) AS last_po
    FROM vendor AS v
    LEFT JOIN po AS p ON p.vendorId = v.id
    WHERE v.activeFlag = 1
    GROUP BY v.id, v.name
    ORDER BY last_po DESC
    LIMIT 15
    14 rows · 294 ms
  3. 3
    Checked the available import types
  4. 4
    Check that part DARK-COCOA doesn't exist yet, find the pound unit of measure, and confirm the exact vendor name for Brent's Food Supply
    ✓ passed read-only checkrow cap applied
    Show the SQL
    SELECT (SELECT COUNT(*)
    FROM part
    WHERE num = @num) AS part_exists, (SELECT GROUP_CONCAT(CONCAT(name, '|', code))
    FROM uom
    WHERE code IN ('lb', 'lbs') OR name LIKE '%pound%') AS lb_uoms, (SELECT name
    FROM vendor
    WHERE name LIKE 'Brent%'
    LIMIT 1) AS vendor_name
    LIMIT 101
    1 row · 175 ms
  5. 5
    Read Fishbowl notes · IMPORT_Parts.md
  6. 6
    Read Fishbowl notes · ORDER_PurchaseOrder.md
  7. 7
    Get remit-to, ship-to, carrier and location group from recent Brent's Food Supply POs to reuse on the new bid request
    ✓ passed read-only checkrow cap applied
    Show the SQL
    SELECT p.num, p.remitToName, p.remitAddress, p.remitCity, p.remitZip, rs.code AS remitState, p.shipToName, p.shipToAddress, p.shipToCity, p.shipToZip, ss.code AS shipState, c.name AS carrier, lg.name AS locationGroup
    FROM po AS p
    JOIN vendor AS v ON v.id = p.vendorId
    LEFT JOIN stateconst AS rs ON rs.id = p.remitStateId
    LEFT JOIN stateconst AS ss ON ss.id = p.shipToStateId
    LEFT JOIN carrier AS c ON c.id = p.carrierId
    LEFT JOIN locationgroup AS lg ON lg.id = p.locationGroupId
    WHERE v.name = @vendor
    ORDER BY p.dateCreated DESC
    LIMIT 3
    3 rows · 188 ms
  8. 8
    Find the company's own address to use as the ship-to on the purchase order
    ✓ passed read-only checkrow cap applied
    Show the SQL
    ? rows · ? ms
  9. 9
    Prepared the import (preview)
    Show the file it prepared parts-import.csv
    Exactly what you saw and approved before anything was written.
    PartNumberPartDescriptionUOMPartTypePOItemTypeActive
    DARK-COCOADark Cocoa PowderlbsInventoryPurchasetrue
    Parts: 1 row, setting Active, POItemType, PartDescription, PartNumber, PartType, UOM.
  10. 10
    Committed the import
    committed
  11. 11
    Prepared the order (preview) · admin
    Show the file it prepared purchase_order.json
    Exactly what you saw and approved before anything was written.
    {
      "items": [
        {
          "uom": "lbs",
          "part": "DARK-COCOA",
          "price": 1,
          "quantity": 100
        }
      ],
      "vendor": "Brent's Food Supply",
      "carrier": "Will Call",
      "ship_to": {
        "zip": "00000",
        "city": "none",
        "name": "Default Address",
        "state": "UT",
        "address": "Main Street"
      },
      "remit_to": {
        "zip": "84111",
        "city": "Salt Lake City",
        "name": "Brent's Food Supply",
        "state": "UT",
        "address": "777 South Delivery Lane"
      },
      "location_group": "Main"
    }
    Purchase order to Brent's Food Supply, 1 line(s), total 100.00, status Bid Request.
  12. 12
    Committed the order
    order 232 created

Reads are checked and row-capped. Every change was shown to you as a preview and written only after you confirmed — under your own Fishbowl login, limited to what you can do. The request, the preview, and the committed action are all logged for your admins.

What's supported

Every order and import type

Beyond that example, these are the transactions and imports the AI can prepare for you today — each one previewed and written only on your confirmation.

Transaction types

TypeWhat it creates
Sales OrderOrders your customers place — items, pricing, status, dates.
Purchase OrderOrders you place with vendors to restock.
Manufacture OrderBuilds that consume components and produce finished goods.
Transfer OrderMoves stock between your warehouses.

Import types · 44 supported

FamilyImports
Parts & productsParts, Products, Product Tree, Product Tree Categories, Part / Product Renaming, Part Units of Measure, Units of Measure, UOM Conversions, Part Costs, Part Standard Costs
InventoryAdd Inventory, Part & Quantity, Inventory Moves, Reorder Levels, Default Locations, Locations, Scrap
Customers & pricingCustomers, Customer Parts, Customer Group Relations, Discounts, Product Pricing, Associated Pricing, Associated Pricing Types, Pricing Rules
VendorsVendors, Vendor Parts, Vendor Cost Rules
FulfillmentPicking, Packing, Shipping, Receiving, Ship Carton Tracking
Finance & taxPayments, Payment Terms, Tax Rates, Currencies, QuickBooks Classes
Setup & custom fieldsCarriers, Countries & States, Custom Fields, Custom Field Lists, Custom Field Data, Memo Data
Report

Four report formats, one conversation

For years we've built custom Fishbowl reports by hand. Now the AI drafts them with you — and the same preview-and-approve rule applies: nothing is installed until you've seen it.

Jasper reports

The full Fishbowl report format. Drafted from your description, compiled, and checked before it ever reaches your report list.

BI reports

Dashboard-style reporting for the numbers your team watches, built from a conversation about what you need to see.

Data Module queries

Saved queries with their prompts turned into inputs, ready for your team to run — new ones built, existing ones reused.

CloudPages

Shareable pages driven by your Fishbowl data, drafted and published on your say-so.

Previewed, with diagnostics

Before anything is installed, the AI runs diagnostics and shows you the result, so you approve a report you've actually seen work.

Versioned and reversible

Every report carries history. Your admins can read a version, roll it back, or uninstall it — all from the chat.

See it work

A real report, previewed before it's installed

Someone asks for a CloudPage showing what inventory is worth at each location — and to see it first. The AI drafts it, builds each section, renders a live preview, and installs it only after you've looked.

Fishbowl MCP connectedin Claude
can you build us a CloudPage in Fishbowl that shows what our inventory is worth at each location? show me a preview before you install it.
✓Drafted · previewed · installed on your approval

The draft is ready to look at — nothing is installed yet.

Preview (live data, read-only): https://your-fishbowl.cloudpages.app/preview/inventory-value-by-location

What it shows

  • One row per location, with its type, number of distinct parts, quantity on hand and value.
  • Rows are grouped by location group (LA, Main, MI, SLC), with qty and value subtotals for each group.
  • An optional location group filter, and CSV/XLSX export.
  • It loads as soon as it opens.

What your data shows right now (I checked this with the same query)

GroupValue
LA$44,870
MI$32,803
Main$19,117
SLC$4,002
Total≈ $100,792

Things to check while you look

  • Value is on-hand qty × Fishbowl's current average cost per part. I couldn't read your costing-method setting, because that table is blocked. If you're on FIFO or Standard cost, these numbers won't exactly match your GL. I can switch the page to cost layers or standard cost instead.
  • Receiving, Shipping and Manufacturing locations are included. For example, Main/Receiving holds about $5.8k. Tell me if you want stock-type locations only.
  • LA has a location called "ZZTESTLOC" with $19.60 in it. You may want to clean that up, or I can exclude it.
  • There's no grand-total row on the page. CloudPages supports only one subtotal level, so I chose per-group subtotals. The overall total is one XLSX export away.

Once you've looked at the preview, tell me any changes, or just say "install". After it's installed, an admin will need to grant access to the page in Fishbowl.

that looks great - go ahead and install it. average cost is fine for now.
✓Drafted · previewed · installed on your approval

The Inventory Value by Location page is now installed in Fishbowl as version 1, with the page ID inventory-value-by-location.

To start using it:

  • Open the page: reopen the CloudPages module to see it now. Otherwise it appears within about 10 minutes.
  • Grant access: no one can open the page until an admin gives a group access to its entry in Fishbowl. Make sure your own group is included.

The preview reported no errors.

If you want to switch to FIFO or standard cost later, I can update this page in place, and the access grants will still apply. Each install is kept as a version, so you can roll back if needed.

Preview · read-only
Inventory Value by Location S M L › Parameters Run Export XLSX Export CSV Markdown Columns Search: Location group Location Type Parts Qty on hand Value (avg cost) LA (6) LA Stock Stock 48 78,882.25 $35,433.20 LA Stock 100 Stock 38 31,964.81 $8,896.44 LA Stock 200 Stock 1 1,093.00 $399.47 LA Stock 300 Stock 1 3,028.00 $120.94 LA ZZTESTLOC Stock 1 4.00 $19.60 LA Receiving Receiving 2 3.00 $0.37 Total 114,975.06 $44,870.02 Main (3) Main Stock Stock 20 23,174.97 $13,289.04 Main Receiving Receiving 28 11,905.96 $5,768.62 Main Shipping Shipping 6 19.00 $58.90 Total 35,099.94 $19,116.56 MI (2) MI Stock Room Stock 50 73,355.25 $32,799.66 MI Store Front Store Front 1 10.00 $3.55 Total 73,365.25 $32,803.21 SLC (3) SLC Stock 100 Stock 1 5,235.00 $4,001.12 SLC Receiving Receiving 4 4.00 $1.12 SLC Manufacturing Manufacturing 1 4.00 $0.12 Total 5,243.00 $4,002.36 Showing 1 to 14 of 14 entries

The page the AI rendered for review — nothing was installed until it was approved.

A real 170-second session on our demo Fishbowl, replayed faster.

Behind the scenes

What your admin sees in the query log for this conversation.

1installed on your approval
✓previewed first
2read-only checks
✓who/what/when logged

Every step the AI took

  1. 1
    Read the Fishbowl notes index
    64 topic notes
  2. 2
    Read Fishbowl notes · CLOUDPAGES.md
  3. 3
    Read Fishbowl notes · INVENTORY.md
  4. 4
    Check costing method and size of inventory data before building an inventory value by location page
    ✓ passed read-only checkrow cap applied
    Show the SQL
    ? rows · ? ms
  5. 5
    Inventory value at average cost per location, grouped by location group
    dropped sysproperties check; run the actual report query
    ✓ passed read-only checkrow cap applied
    Show the SQL
    SELECT lg.name AS location_group, l.name AS location, lt.name AS location_type, COUNT(DISTINCT t.partId) AS part_count, SUM(t.qty) AS qty_on_hand, ROUND(SUM(t.qty * COALESCE(pc.avgCost, 0)), 2) AS inventory_value
    FROM tag AS t
    JOIN location AS l ON l.id = t.locationId
    JOIN locationgroup AS lg ON lg.id = l.locationGroupId
    JOIN locationtype AS lt ON lt.id = l.typeId
    JOIN part AS p ON p.id = t.partId
    LEFT JOIN partcost AS pc ON pc.partId = t.partId
    WHERE t.typeId IN (30, 40) AND t.qty <> 0
    GROUP BY lg.name, l.name, lt.name
    ORDER BY lg.name, inventory_value DESC
    LIMIT 201
    14 rows · 326 ms
  6. 6
    Drafted the page
    report draft (v1)
  7. 7
    Built a section of the page · query
    section built
  8. 8
    Built a section of the page · parameters
    section built
  9. 9
    Built a section of the page · columns
    section built
  10. 10
    Built a section of the page · settings
    section built
  11. 11
    Built a section of the page · demo
    section built
  12. 12
    Rendered a live preview · https://your-fishbowl.cloudpages.app/preview/inventory-value-by-location
    live preview rendered
  13. 13
    Checked the preview for errors
    no errors
  14. 14
    Installed the page

Reads are checked and row-capped. Every change was shown to you as a preview and written only after you confirmed — under your own Fishbowl login, limited to what you can do. The request, the preview, and the committed action are all logged for your admins.

See all 4 reporting examples — Jasper, BI, CloudPages, saved queries →

What's supported

Every report format

Beyond that example, these are the formats the AI can build with you — drafted, previewed, and installed only on your approval.

FormatWhat it is
Jasper reportThe full Fishbowl report format — drafted, compiled, and installed.
BI reportDashboard-style reporting on the numbers your team watches.
Data Module querySaved queries with their prompts turned into inputs.
CloudPageShareable pages driven by your live Fishbowl data.
It learns your business

Fishbowl knowledge built in

Out of the box, the AI has our notes on how Fishbowl works: sales, purchasing, receiving, shipping, inventory, manufacturing, accounting, setup, and reporting. That comes from 10+ years of Fishbowl work.

As your team uses it, the AI writes down what it learns about your setup, like your part numbering or how you use location groups, so the next session starts from there. Your admins can read, edit, and roll back those notes, and share how-to guides with specific Fishbowl groups.

How it works

Getting started

Show us your questions and workflows

We meet with you to learn what your team needs to know, what they create by hand today, and who should be able to do what.

We set it up

We install our Integration Server next to your Fishbowl and create your instance. You'll need Fishbowl Advanced.

We set up your power users

Your executives and power users get admin access, so they can ask anything, prepare changes, and build reports. For the rest of your team, we set up the saved queries, approved changes, and reports they need, and grant them to the right people.

Your team connects

Each person adds the connector in ChatGPT or Claude and signs in with their Fishbowl login. That's it.

FAQ

Common questions

What is MCP?

MCP (Model Context Protocol) is an open standard that lets AI assistants like ChatGPT and Claude connect to other software. An MCP server gives the AI a set of tools it can use, and nothing more. ILC MCP for Fishbowl is an MCP server for your Fishbowl: its tools let the AI read your data, prepare changes you approve, and build reports, under the rules you set.

What do I need to run it?

Fishbowl Advanced and ILC's Integration Server, which we install for you. Your Fishbowl stays where it is. The connection goes out from your site, so there are no firewall ports to open.

Which AI tools does it work with?

ChatGPT and Claude today, connected as a custom connector. Other tools that support MCP can connect with a token your admin creates. Ask us about the one you use.

Is there documentation?

Yes. Step-by-step guides for connecting each AI tool and for using ILC MCP for Fishbowl — asking questions, approving changes, and building reports — are in our documentation. Read the documentation →

Can the AI change my Fishbowl data?

Yes, when you tell it to — and only then. Reads run on their own. A change, like a new order or an import, is shown to you as a preview first and is not written until you confirm it. It runs under your own Fishbowl login, limited to what you're allowed to do, and every step is logged.

So is it still safe?

That's the point of the design. Nothing is written or installed without a preview and your explicit yes. The AI acts as you, with your Fishbowl permissions — it can never do something you couldn't do yourself. Admins decide who can prepare what, and the full log shows who did what, when.

Do you keep a copy of my data?

No. Everything runs against your live Fishbowl database. We log the question that was asked, the change that was prepared, and the action that ran, so you can audit them, but not the rows that came back.

Who on my team can use it?

Only the people your admin allows. Each person signs in with their own Fishbowl login, and you choose which saved queries, which changes, and which reports each user or Fishbowl group can run. If you deactivate a user in Fishbowl, their access stops on the next request.

Can my team ask or do anything they want?

Your admins can. Everyone else works from the saved queries, approved changes, and reports your admins have set up, with their own inputs: a BOM, a date range, a customer. That keeps answers consistent and keeps sensitive actions where they belong.

How do admins manage who can run what?

From the AI chat itself. An admin can say "Give James access to the BOM requirements query" or "Let the Purchasing group prepare purchase orders," and it is done, using your Fishbowl users and groups. Each item can also carry a usage note, like "internal use only", that comes back every time.

What can it build in reporting?

Jasper reports, BI reports, Data Module queries, and CloudPages — drafted from a conversation, previewed with diagnostics, and installed only when you say so. Your admins can read, roll back, and manage every version.

Can I use the Data module queries we already have?

Yes. Your admin can turn on Fishbowl Data module queries so the AI can run them, with their prompts turned into inputs.

How much does it cost?

It depends on how many people use it and how much we build with you — queries, approved changes, and reports. Request a demo and we will scope it with you.

See it on your own Fishbowl

Tell us what your team asks most often, what they create by hand, and the reports they wish they had — and we'll show you how it would work.