Als een sensor, bijvoorbeeld een microcontroller met een temperatuursensor, wil communiceren via MQTT, moet hij eerst verbinding maken met de broker. Bij het MQTT-protocol is poort 1883 gereserveerd voor onversleutelde en poort 8883 voor versleutelde communicatie. MQTT is, anders dan bijvoorbeeld HTTP, een statusbehoudend protocol. Een verbinding kan dus ook blijven bestaan als er geen gegevens worden verzonden.
Als de sensor een temperatuurwaarde wil doorgeven, verstuurt hij een bericht van het type PUBLISH
. Elk bericht bevat een liefst beschrijvende topic en een inhoud, de payload. Het topic lijkt qua opbouw op een Unix-bestandspad. De secties worden gescheiden door een /. Bij de formulering heeft de beheerder van de MQTT-omgeving de vrije hand. In een thuisnetwerk kan de sensor het topic house/rooms/wc/sensors/temperature
met de waarde 22.5
aan de broker doorgeven. Daarmee is zijn taak volbracht en hoeft hij zich verder geen zorgen te maken voor welke apparaten deze informatie belangrijk is.

Een apparaat dat berichten wil ontvangen, maakt verbinding met de broker en abonneert zich met de opdracht SUBSCRIBE
op een of meer topics. Voor het opvragen van meer waarden zijn er twee jokertekens (die dus niet in de naam van een topic voor kunnen komen).
Met #
worden alle berichten op de lagere niveaus aangevraagd. Dat teken kan dus alleen aan het einde staan: house/rooms/wc/#
is een abonnement voor alle berichten die op de wc van toepassing zijn. +
is het teken voor een niveau: house/rooms/+/sensors/temperature
is een abonnement op alle temperaturen. Een MQTT-compatibele radiatorthermostaat kan zo bijvoorbeeld alle sensorwaarden van een huis opvragen en daar op reageren. De broker slaat de abonnementen op en geeft de binnenkomende berichten onmiddellijk door aan alle abonnees die op dat moment verbonden zijn. Als een abonnee zich later aanmeldt, krijgt hij die informatie niet meer.
De zender kan bij het publiceren dan ook de retain-vlag zetten. Die geeft aan dat het bericht direct moet worden doorgegeven na een SUBSCRIBE
. In dat geval slaat de broker de laatste waarde voor het topic op en geeft die door (en dus niet alle eerdere berichten uit het verleden).