If you want to have applications communicating with each other via MIDI on a Mac, here is a short explanation how to do this. As an example, if you want to use the MIDI harmonizer application to feed its output notes to your sequencer, in my case Logic, or any other stand-alone plug-in, you will have to create a virtual port where both applications can make use of in order to feed and access the MIDI stream. Besides this you would have to set the right MIDI virtual output port in your sending application as well as select the right MIDI virtual input port in your receiving application. When using Logic, you would have to route the actual virtual port into your sequencer input.
1: create a virtual port
In Finder, click on Go | Utilities and select the Audio MIDI Setup application.
Make sure the MIDI Devices tab on top of the Audio MIDI Setup window is selected.
Double click on the IAC Driver icon, the IAC Driver Properties window will open.
Now create a port by clicking on the + button, and name it for example "To Logic".
2: set the virtual port as output port in the sending application
In this example, select "IAC Driver To Logic" as MIDI output port in the MIDI Harmonizer.
3: select the virtual port as input port in the receiving application
In your receiving application, select the virtual port as MIDI input port. In Logic, the new virtual port is automatically added to all input ports and automatically fed into the sequencer.
4: route the virtual input port to your sequencer in Logic
To avoid duplation of incoming notes in Logic, you would have to make sure only input from the virtual port is routed into Logic. By default, the sum of all input ports are routed into Logic. The problem with this can be that both the physical MIDI input port used as input for your sending application (e.g. the MIDI Harmonizer input) as well as the input from the virtual port (e.g. the MIDI Harmonizer output) are being fed into Logic, in this case duplicating the original input note in Logic.
In Logic Pro click on Window | Environment and select Click & Ports from the drop-down list in the upper left corner. Make sure you only have a cable running from your desired virtual port in the Physical Input box towards other objects in your Environment, the SUM output should not be used. In this example route a cable from the "To Logic" port to the Input Notes object. That's it!