If you don't want to use MLAPI's messaging system, you don't have to. You can use a thin layer called "Custom Messages" to implement your own behaviour and add custom targeting. They are unbound to any game object. Custom messages can be used in combination with RPC messages.
Custom messages comes in two forms: named and unnamed.
To send messages from client to client, server to client, and client to server through the provided
clientId. For example, from client to server provide
NetworkManager.Singleton.ServerClientId as the
Unnamed messages can be thought of as a single sending channel. A message sent has one receive handler, this is useful for building your own custom messaging system.
If you want a completed messaging system, you can use named messages. The receiver registers one listen handler for each message type, and the sender can choose what type to send.