FactorySemantics MES Open the plant
Integration and data

Connect it, and keep the data yours.

Four borders, each one a file you own rather than code you fork: the machines, the ERP, the database, and the agents. Each path below ends in a docs page and, where you are stuck, a discussion that stays findable for the next person.

Machines

A tag map, verified before it is trusted

A tag map names each machine's OPC UA tags and what they mean: the state word and how it reads as running, down or planned stop; the counters that book production; the process values; the setpoints that may be written and their bounds. Engineering fills in a worksheet, the CLI turns it into the map, and opc-verify proves it against the live server before a single booking is made.

Kepware and any OPC UA server work today. Ignition through its OPC UA server. Modbus and other protocols reach the MES through whatever already publishes them as OPC UA; a native driver is a module someone has yet to write, and the contract for it exists.

Do this
fsmes opc-browse       # what the server actually exposes
fsmes make-tag-map     # from Engineering's worksheet
fsmes opc-verify       # prove the map, tag by tag
fsmes seed-line        # create the equipment it describes
ERP

Orders in, confirmations out, retried and parked

Per operation, with cost centre and component consumption. Three adapters ship inside the package: ERPNext (nothing to install on the ERPNext side), REST against your own endpoint, and a B2MML-flavoured file drop for systems that only speak files. Messages that fail are retried with backoff and then parked on a screen where a person can see and resend them.

SAP and Oracle are the next modules and do not exist yet. What exists is the typed contract they will implement, so an integrator who has done one SAP interface has done this one.

Do this
fsmes run-erp-sync     # the worker: orders in, confirmations out
fsmes run-mock-erp     # a stand-in ERP to develop against
Database

SQLite on a laptop, PostgreSQL in a plant, the same models

One database per plant, in a directory you choose, on your hardware. Start on SQLite: one file, no server, and a backup is a file copy. Switch to PostgreSQL when there is more than one writer or the ids climb past a couple of million a day; the cutlery plant ran on it at 5% of a core. The storage layer is a module, so the switch is a registry entry, not a migration of the model.

Upgrades are Alembic migrations run by fsmes plant <name> migrate, which takes a backup first and writes a receipt after. Raw tag samples are evidence and are pruned on a stated schedule that the Ops screen shows; bookings, states, checks, ids and the append-only audit trail are kept. Retention is a setting, and a trend that ends at the window's edge reads as pruned, not as a silent machine.

Do this
fsmes init-db                    # create or upgrade the schema
fsmes plant all migrate          # backup first, receipt after
fsmes prune-evidence             # raw samples past their window
Agents

One MCP server per site, filtered by what the account may do

Every capability is an API and an agent tool first. Reads are free; writes take a dry run and a human approval, and every agent action is recorded under the agent's name and the person it acted for. Point any MCP client at the server and the tool list is exactly what that account is allowed to do.

A local model on an ordinary GPU covers the floor assistant, instruction drafting and the nightly narration; a hosted model is optional. The control path never depends on either.

Do this
python -m fsmes.mcp_server     # 85 tools
fsmes agent-eval bottling      # grade an agent against known truth
When you are stuck

Ask where the answer stays findable.

There is no chat server on purpose: a question answered in a discussion is an answer for the next plant a year later. Bugs go to issues, with a form that asks whether your plant is simulated or real. Response times are published in the maintainer routine, and a real plant's report gets looked at first.

A question

Q&A discussion

Tag maps, OEE reading strangely, an adapter that will not park. Search first; if it is not there, ask, and the answer becomes a docs page when it is asked twice.

Ask a question
A bug

Issue, from the field or the lab

The form asks for the version, the plant type, and whether it is simulated or real. Never the company. Fixes name the reporter and the plant type in the release notes.

Report a bug
Hands on the line

An integrator

The rollout to a real line is an integrator's work, and this page is what they work from. The partners page lists the ones who have shipped a pack; today that list is honest and short.

Find or become one