For posterity and easy of searching; I've duplicated this from my other thread:
Ok, just tried pre-creating the variable name using a 'Variable set' block - it works!
So; exact config to make MQTT Client message receive work:
1/ use two 'variable set' blocks to set variables 'topic', 'msg' (and from the source, maybe 'error'?) to some default values. put these in the flow before the Plugin Event for 'MQTT Client:Message Arrived'.
2/ In a 'Plugin Event' block, select 'Message Arrived' from MQTT Client, and set 'vartopic' to topic, and 'varmessage' to msg (no % symbol!).
3/ Set 'Allow plug-in to assign any variable' - important!
4/ then in subsequent blocks you should be able to use '= topic' and '= msg' to access the MQTT message which was received.