The glossaries bundle is supplied with the package mfirstuc which provides the command:
This makes the first object of ⟨stuff ⟩ uppercase unless ⟨stuff ⟩ starts with a control sequence followed by a non-empty group, in which case the first object in the group is converted to uppercase. Examples:
produces ABC (first object is {\em abc} so equivalent to \MakeUppercase{\em abc}), and
produces abc (\em doesn’t have an argument therefore first object is \em so equivalent to {\MakeUppercase{\em}abc}).
Note that non-Latin or accented characters appearing at the start of the text must be placed in a group (even if you are using the inputenc package) due to expansion issues.
Note also that
produces: ABC. This is because the first object in the argument of \makefirstuc is \abc, so it does \MakeUppercase{\abc}. Whereas:
produces: Abc. There is a short cut command which will do this:
This is equivalent to \expandafter\makefirstuc\expandafter{⟨stuff ⟩}. So
produces: Abc.
If you want to use an alternative command to convert to uppercase, for example \MakeTextUppercase,1 you can redefine \glsmakefirstuc. For example:
1defined in the textcase package