[Command] and [Server] functions both run on the server and can also be called by a local player but what is the difference between them?
They actually do quite different things according to the documentation:
[Command] functions are invoked on the player GameObject associated with a connection
A [Server] method returns immediately if NetworkServer.active is not true, and generates a warning on the console
But be sure to be mindful of the comment by Draco18s:
It may not be advisable to learn UNet too deeply, it is being deprecated and replaced in the next six to 12 months