I actually mostly use original KeePass 2 with KeePassNatMsg plugin, which can be used for KeePass to be able to talk to KeePassXC Browser extension, since the latter is made for KeePassXC specifically. KeePass 2 has supported OTP codes for a while, you can check under password entry's Advanced tab, More button. I recall there was no GUI initially to set it up, but it was explained in documentation how to manually add TimeOtp-Secret-Base32 string.
For alternative UI to set it up, you need KeeOtp2 plugin, this one can also scan QR codes containing the secret. And due to different ways of storing OTP secrets between forks/plugins, I actually have my secrets stored in two ways for widest compatibility:

KeeOtp2 is currently also the only way to manage Steam's OTP in plain old KeePass 2 (if you need it, since it uses non-standard algorithm). There is now unmaintained app that could be used in place of Android app, Steam Desktop Authenticator, that let you get your hands on the secret, then when you have it, you only ever need KeePass. On Android, I settled with KeePassDX, it also manages both standard OTP and non-standard Steam implementation.
Though there isn't any XUL extension that could pull OTP codes from KeePass. Probably PassiFox would be a good starting point, but again, programming! Bleh...