You can write a Starlark rule with a directory output (`ctx.actions.declare_directory`) which is allowed to contain an arbitrary number of files, determined at execution time. However, subsequent rules will have to consume the directory as an indivisible unit; it's not possible for them to depend only on individual files inside the directory.
You might also want to consider a simpler solution: ask your users to pass the expected set of languages as a parameter to the rule, then use it to declare the expected output files. At execution time, fail if the set doesn't match the .mc file contents. This does mean that users have to edit a BUILD file whenever they add or remove a language from the .mc file.