The difference, if I'm right, with MQTT is that CoAP needs an embedded OS and MQTT can run on the metal, integrated in the firmware?
I am not sure if this an MQTT marketing gag ;)
If your MQTT implementation comes with a complete network stack, device drivers, and all the helper functions, you could
say so. But how is this not an OS by itself? Today the big reusable part of a firmware is often called an embedded OS because it has become just as complex (stacks, drivers, tools…). If your platform is not supported, you could port one of the many CoAP C-implementations
(see http://coap.technology/) to the firmware that comes with your platform (or one of the OSes to your platform…).
Do you have an opinion when to use MQTT and when to use CoAP?
It depends more on the architectural style you prefer. CoAP is Web-like (REST), while MQTT is a specialized publish/subscribe
protocol. In my opinion, MQTT is good for wired systems that are connected to an application-level gateway. CoAP is good for (network) convergence of heterogeneous devices and services that should talk end-to-end. Note that this is only a quick shot at this
rather big question…