There's good coverage of the options you want might to explore int he VLDB documentation set
https://docs.oracle.com/en/database/oracle/oracle-database/19/vldbg/degree-parallel.html#GUID-70CAEDE1-A8D2-464A-9A0B-FDEAFBCA85C3 But one thing I like to do in such situations is
a) I'll take a single query on the quiet system and ramp up parallel level until the CPU is totally saturated. Often that will be more than the number of cores on the system, because a query spends part of its time on CPU and part doing IO. But that gives me an upper bound on what my machine can *really* do. I'll then set parallel_max_servers to that, because often the default is much higher.
b) This now guarantees that I'm very unlikely to overload my machine to the point where I have more servers than the machine could cope with. Then its case of deciding what any individual query is going to be allowed to get. Maybe for low user populations, I'll let them get close to the limit with a single query. For others, I might set a more restrictive limit to always have some headroom. Or I might look at statement queueing.
With that information, then I'd do some testing with the policy set to LIMITED or AUTO and see you go.