In reply to graeme_jessiman:
You may have noticed that uvm_driver includes a single TLM connection, and is a parameterized class that you specialize with the sequence item type. On the other hand, uvm_monitor does not include any TLM connections and is not parameterized. As Graeme said, how you use the monitor depends on your protocol.
My typical agents have a single monitor, with two TLM analysis ports, one for input transactions, and one for outputs. The run_phase() has two parallel threads to process these two streams.