The stand alone StreamByter app should do what you want. You are wanting to operate on a MIDI stream - MDP2 focuses on either input or output.
You could to it in MPD2 in a brute force way - but you would need two controls for each individual note - one to receive and one to transmit. Then a supercontrol to set the transpose amount.
Here is a SB post discussing real time transposition by a variable amount, set by a CC. One of the important considerations is transposing the note off events the same as note on to preclude stuck notes. https://audeonic.boards.net/thread/422/realtime-transposer-incoming-on-events
If you search on the Audeonic soapbox for transpose, there are a few more examples, such as using program change to control the transpose.
MDP2 might still have a role in this by providing the UI to control the transpose in SB.
EDIT -- the SB examples are all somewhat complicated. I will try to post a "simple" SB code fragment that just does a preset transpose - hopefully in the next day or so.
Edit 2 - turns out the stand alone SB has the transpose function built in. A few comments that might help you - the three values in the if load determine which channel to transpose, and which cc will control transposition. As distributed, this is 00 B0 13, or Chanel 0, B (which is the value for CCs, don’t change), and 13 for the cc value (in decimal = 19).
To use MDP2 to control the transposition, you need a single knob control, CC, channel 00, cc19. Default value 64 = no transpose, Higher values transpose up, lower values transpose down.