This function will be called by CallFunctionByNameWithArguments method and using BlueprintNativeEvent is improperly.
If I try to define ServerMsg function in blueprint, I got the message:
Error: The function name in node Server Msg is already used
Error: Cannot override '::ServerMsg' at Server Msg which declarated in a parent with a different signature!
You can declare UFUNCTION() functions as virtual. However you can not override them inside blueprints. Only inside other C++ classes. You probably already seen that you can not see the function you declared virtual, inside blueprint editors overridable functions list.
If you want to override a function inside blueprints, you will need to use BlueprintNativeEvent or BlueprintImplementableEvent as UFUNCTION() specifiers.
I use my server for remote function calling CLIENT <–> SERVER
At case CLIENT → SERVER call I just use defined method name in C++ and place the string with the method and parameters to CallFunctionByNameWithArguments for implicit call.
But in future I think realisation can be moved also in blueprints for more extensibility.
As far as i understand, you are trying to call a function ?server has access to? from client computer. I am not experienced with networking so i cannot be of much help.
Maybe by using replication you can achieve the same effect or you can post another question regarding possible different approaches to this.