I was able to get this working using the following command in cygwin bash,
./cxcalc majormicrospecies -H 2.5 -M -f sdf input.sdf > output_results.sdf
with pwd being the marvin install /bin directory.
I'm sure if I put the bin directory in my path I could run this from any location but I didn't try that.
If this is run without the redirect,
./cxcalc majormicrospecies -H 2.5 -M -f sdf input.sdf output_results.sdf
you get a "file not found" error for output_results.sdf. There doesn't seem to be any explicit way to declare input and output file name arguments. If you run without the redirect and the output_results.sdf argument, the output is to the terminal.
Overall, this works well and processed ~2500 compounds in a few seconds. All data in the input sdf is propagated to the output sdf, including the molfile first line, which is important.
There appears to be an untrapped exception when the input file has a counterion. The molfile for the major microspecies is output to the sdf, but nothing else. None of the sdf attribute fields from the input sdf are included with the molfile and the > <_MOLCOUNT> field is also missing. If counterions are removed, this issue goes away. In most cases, it it best practice to leave input files untouched since they may represent the exact structure (including formulation) of the compound that went into the test tube. This makes it problematic to have to remove counterions and thus introduce the potential of permanent information loss.
I'm not sure what causes this issue since Marvin is actually processing the compound and creating the correct molfile output. There is no warning issued to stderr when this occurs, so I believe this to be untrapped.