[eluser]theprodigy[/eluser]
First, I would like to say that my way of thinking may differ from the next, or even differ from the majority, but this is how I look at it.
The controller is for the business logic, and the view to display things to the user. That is basically agreed upon by the majority.
Apart from that, I usually use the models for things OUTSIDE the web app. Things like database calls, pre-defined emails, API calls, etc.
Libraries I use as objects within the controller. Some of the more basic functionality, like users, vehicles, systems, etc, etc.
Depending on how complex the app gets, I sometimes have the controller communicate strictly with the libraries, and the libraries communicate with the models. I'll use the controller to set/get the attributes of the library object, then call a save function. The save function in the library calls the insert method of the model. In complex apps, it seems to be easier that way. In smaller, scaled down apps, it's easier to leave the libraries out of the picture.
This is just my two cents, but I hope it helps.