Signal allows optional mitigation of MITM attack via security code verification.
SimpleX and some p2p networks non-optionally prevent this attack by passing keys or their hashes as part of the connection link / address.
The table here has this comparison under "2-factor key exchange": https://simplex.chat/blog/20240314-simplex-chat-v5-6-quantum-resistance-signal-double-ratchet-algorithm.html#end-to-end-encryption-security-attacks-and-defense
For example, Session, Cwtch and SimpleX have it. Signal and Matrix do not have it, but offer mitigation.