Brackets are for numerical addresses only.
It might be possible to break a loop by adding a header and having a global rule look for it, but it's of course better to avoid creating the loop in the first place. Check console or logs to see if the looping message actually is sent out by MercuryE or if it loops locally on the Mercury server. Unless the MX record for mydomain.de points to IP 11.22.33.44 there shouldn't be a loop.
I've tested forwarding messages from Mercury to another Mercury server and to a common webmail provider, and in both cases the TO: header is unchanged and the original recipient address is shown in the client. It could be that the server program used for your German MTA behaves differently though.
The rule you describe should work assuming that the message actually had a TO: header containing user123@mydomain.de. It would miss on header CC: unless that was selected too (an would definitely miss on BCC as that isn't a header). Try using action Log a console message when testing if a rule triggers or not.