First the output (code below):

Short answer
Use the patch mtpro2-patch.tex I developed over the years (my “shameless plug”).
\documentclass{report}
\usepackage{amsmath}
\usepackage{mtpro2}
\input{mtpro2-patch}% https://github.com/RuixiZhang42/font-pairing-guide/blob/master/mtpro2-patch.tex
\begin{document}
Every \verb|cases| uses curly brace:
[
\begin{cases}
a_n=2 a_{n-1}+1, \quad \forall,n\geq 2,\
a_1=1.\
\end{cases}
\qquad
\begin{cases}
a_n=a_{n-1}+a_{n-2},\quad \forall,n\geq 3,\
a_1=1,\
a_2=1,\
\end{cases}
]
\straightbraces
Now, every \verb|cases| uses straight brace:
[
\begin{cases}
a_n=2 a_{n-1}+1, \quad \forall,n\geq 2,\
a_1=1.\
\end{cases}
\qquad
\begin{cases}
a_n=a_{n-1}+a_{n-2},\quad \forall,n\geq 3,\
a_1=1,\
a_2=1,\
\end{cases}
]
\end{document}
Long answer
The following provides essentially a brief documentation for one small part of mtpro2-patch.tex.
\documentclass{report}
\usepackage{amsmath}
\usepackage{mtpro2}
\makeatletter
% First, we need a test to see which braces are in force.
% The mtpro2 package provides 3 sets of braces. We treat
% curly braces as one type, while morphed and straight
% braces as another type.
\expandafter\def\csname mtp2@lcbrace\endcsname
{\delimiter"4266308 }% define our own left curly brace
\newcommand*@ifcurlybraces{%
\expandafter\ifx\csname mtp2@lcbrace\endcsname\lbrace
\expandafter@firstoftwo
\else
\expandafter@secondoftwo
\fi
}
% Next, we redefine the cases environment.
% If curly braces are in force, we use the \LEFTRIGHT construction.
% Otherwise, we use the \left...\right construction.
\newsavebox\mtp@matrix@cases
\renewenvironment{cases}{%
\matrix@check\cases
\setbox\mtp@matrix@cases\hbox\bgroup$%
\let@ifnextchar\new@ifnextchar
\def\arraystretch{1.1}% less than 1000/\delimiterfactor, my personal preference
\array{@{}l@{\quad}l@{}}%
}{%
\endarray
\m@th$\egroup
@ifcurlybraces{%
\LEFTRIGHT@\lbrace.{,\copy\mtp@matrix@cases}%
}{%
\left\lbrace\copy\mtp@matrix@cases\right.%
}%
}
\makeatother
\begin{document}
Every \verb|cases| uses curly brace:
[
\begin{cases}
a_n=2 a_{n-1}+1, \quad \forall,n\geq 2,\
a_1=1.\
\end{cases}
\qquad
\begin{cases}
a_n=a_{n-1}+a_{n-2},\quad \forall,n\geq 3,\
a_1=1,\
a_2=1,\
\end{cases}
]
\straightbraces
Now, every \verb|cases| uses straight brace:
[
\begin{cases}
a_n=2 a_{n-1}+1, \quad \forall,n\geq 2,\
a_1=1.\
\end{cases}
\qquad
\begin{cases}
a_n=a_{n-1}+a_{n-2},\quad \forall,n\geq 3,\
a_1=1,\
a_2=1,\
\end{cases}
]
\end{document}
\left\{and gets whatever the font supplies. – David Carlisle Sep 30 '20 at 13:58\left\{and the font specifies what is returned. The designer of the mtpro fonts has (unusually) made some additional glyphs which are not in the chained sequence that makes up the variable sized delimiter. TeX has no access to the information at all. – David Carlisle Sep 30 '20 at 14:38\left\{and the font specifies what is returned". I am having a hard time believe it. What mechanism a font has to recognize what is\left\{and specify what is used? One of the character (above) is NOT even in the font, how can it choose to return it? – Paulo Ney Oct 13 '20 at 04:18\lbraceis\DeclareMathDelimiter{\lbrace}{\mathopen}{symbols}{"66}{largesymbols}{"08}which is a latex macro equivalent to the primitive definition in plain tex\def\lbrace{\delimiter"4266308 }so all tex knows is a normal { is character hex 66 from math family 4 and if you use\leftand need something bigger then use the character 8 from math family 3. How or if the cmex font that is family 3 specifies how to construct a larger brace is in the font metrics and not accessible to tex macros – David Carlisle Oct 13 '20 at 06:42