Forge reads MQTT Sparkplug B from 9 OEM families and emits the same canonical JSON for every one of them. No per-vendor parser, no per-vendor schema.
One MCP endpoint serves every protocol adapter — there is no per-protocol URL to configure.
Each links to its own mapping reference with vendor-specific tag shapes.
Sampled from the live corpus — one example per vendor, so you can see the same canonical field arriving from different raw tag shapes.
| Raw tag in | Canonical field out | Source | |
|---|---|---|---|
| /robot_status/battery_percentage: 82 | → | amr.battery.charge: 82 | MiR (Mobile Industrial Robots) |
| RX_PRESS: 3.4 | → | process.reactor.pressure_bar: 3.4 | Chemical process |
| CIP_STATE: "RINSE" | → | process.cip_state: "RINSE" | Food & beverage process |
| BATCH_ID: "LOT-2291" | → | process.batch_id: "LOT-2291" | Pharma process (GMP) |
| battery_soc: 0.74 | → | amr.battery.charge: 74 | OTTO Motors |
| battery_pct: 76 | → | amr.battery.charge: 76 | Geek+ (Geekplus) |
The fields most commonly emitted by these 9 OEMs. The full schema is open source: FoundryNet/canonical-schema (MIT).
amr.battery.chargeamr.battery.chargingamr.battery.voltageamr.operating_modeamr.position.thetaamr.position.xamr.position.yamr.safety.estopamr.velocity.angularamr.velocity.linearprocess.agitator_rpmprocess.batch_id
autonomous mobile robot process / batch CNC / machine tool
Other protocols: BACnet/IP EtherNet/IP HTTP / REST J1939 (CAN) MTConnect Modbus TCP OPC UA PROFINET / S7 ROS 2 (DDS)