Products

Ask your Fishbowl data questions in ChatGPT or Claude

ILC MCP for Fishbowl connects the AI tools your team already uses to your live Fishbowl database. Answers come from your data as it is right now. It is read-only, and you decide who can ask what.

See what you can ask
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 12 more real questions →

Live answers

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.

Read-only

Every query is checked before it runs. Anything other than a read is refused, and so are system tables and password fields.

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 queries by user or Fishbowl group. Deactivate someone in Fishbowl and their access stops.

Every query 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.

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

We meet with you to learn what your team needs to know and who should see 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 and the AI writes the query. For the rest of your team, we build saved queries for their top questions 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.

What's next

Planned, not available yet

We're building these now. If one matters to you, tell us. It helps us decide what comes first.

Custom tools for your workflows

For agentic ERP work, we build tools around your business rules: approval limits, preferred vendors, how a rush order is priced. The rules live in the tool itself, so the AI can't skip or misread them the way it can with written instructions.

Orders from chat

Turn an answer, or a spreadsheet, into a sales order or purchase order. You see a preview first, and nothing is created until you say yes. Each order is created under that person's own Fishbowl login, limited to what they're allowed to create.

Reports from chat

A direction we're exploring. Today we build custom Fishbowl reports for you, reviewed by our team.

Hide fields and tables

Keep specific data, like costs or customer details, away from the AI entirely.

Activity history

A full activity view for admins, with retention settings you control.

Fishbowl API tools

Use Fishbowl's own API for the jobs that are better handled there than in a query.

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 and run the queries you've approved, 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.

Can the AI change my Fishbowl data?

No. Today it is read-only. Every query is checked before it runs, and anything other than a read is refused.

Do you keep a copy of my data?

No. Queries run against your live Fishbowl database. We log the question that was asked and the query 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 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 anything they want?

Your admins can. Everyone else runs the saved queries your admins have approved, with their own inputs: a BOM, a date range, a customer. That keeps answers consistent and keeps sensitive data where it belongs.

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 run the open orders query," and it is done, using your Fishbowl users and groups. Each query can also carry a usage note, like "internal use only", that comes back with every answer.

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 many queries you want us to build. Request a demo and we will scope it with you.

See it on your own Fishbowl questions

Tell us what your team asks most often, and we'll show you how it would work.