Credentials were understood and rejected, or the client is not permitted to connect at all. Code 4 is the narrower bad-username-or-password case.
This is a configuration or addressing mistake on the wire, upstream of anything Forge sees. Where Forge helps is the step after you fix it: once the point returns data, its vendor tag name maps to a canonical field automatically, so you do not also have to hand-maintain a name table for every point you just re-addressed.
One MCP endpoint serves every protocol adapter. 16,908 curated mappings, 366 canonical fields.
Other MQTT / Sparkplug B codes: CONNACK 1 CONNACK 2 CONNACK 3 Sparkplug NDATA before NBIRTH Sparkplug seq out of order
Equipment that speaks MQTT / Sparkplug B: MiR (Mobile Industrial Robots) Chemical process Food & beverage process Pharma process (GMP) OTTO Motors Geek+ (Geekplus) Locus Robotics Omron AMR (LD/HD) Trumpf
MQTT / Sparkplug B protocol hub
Other protocols: Modbus OPC UA FANUC FOCAS EtherNet/IP PROFINET / S7 BACnet/IP J1939 (CAN) MTConnect ROS 2 (DDS) SNMP MAVLink HTTP / REST CSV ingest