Exact definitions of either may vary, but generally, Model Predictive Control can handle constraints, i.e. constraints on the input signal, output signal or states. However, this requires a lot of computational power to calculate the solution to the control problem given the constraints, and the problem might even not be feasible, and one need to choose what to do in that case.
GPC does not handle constraints, and is a much easier computational problem to solve. In GPC the model representation is on internal form, as opposed to state space form, which makes it possible to rather easily make an indirect adaptive controller, i.e. one where the system is identified recursively, and the controller is updated with the new system parameters, but in general GPC can also run without adaptation. Note that GPC and LQR are very similar, but GPC relies on predictions, where LQR is based on that all future control inputs also are optimal.
RS