I think you should probably use the search tool for source codes because there are many. Most of them are most likely 10-15 years old source codes.
I really have no idea what source code you should use, but for learning purposes, I guess any source code is good and you can try seeing the difference between those source codes.
Some information about the current 97d server state is that most of the 97D + 99i servers today are just made from repacks of very old files with many bugs. (One reason why those servers are.. let's say.. decaying) Because there's no way maintaining and upgrading an old repack with no source code for Data Server and Game Server.
Another reason no one is doing any 97D development is because they are already using 97D repacks with no source codes but with custom things, GUIs, etc, so reimplementing those custom things would take time and probably everyone wants already coded source codes with those custom things.
And don't get confused about "Bugless" server repacks. There's no such thing as bugless repacks if they didn't fix those with a source code.
What's gonna interest you, that would be Data Server, Connect Server(this is not mandatory, but if you wanna see the login packet parsing and packet structs, you can have it), Game Server and Main.exe source code.
A bit more details on these server apps:
Data Server - the bridge for data flow and packets information. (inserting, updating, deleting data from an SQL Server)
(GS -> DS -> SQL, SQL -> DS -> GS)
Connect Server - the bridge between Client and GameServer or GameServers (think it more like a Login Server)
When a client is connecting to a server, the first packets are parsed in Connect Server. This will tell the GS if that client can connect or not. (Username, passwords, account data, etc) then it will close the Connect Server connection and make a new connection to Game Server if that account passed the login methods and it's a valid account.
Game Server - the MU server's logic and packet parsing is here (Client is directly communicating with the Game Server)
Everything which you are seeing in-game, mobs, npcs, players is implemented here, therefore is called the game logic.
You can add, reuse, update, upgrade anything in here, as long as you are sending the correct packets to the client and the client should respond or not according to that packet. Every data packet is handled here by a huge switch case.
Main.exe - The client itself and everything which the client does is in here. Every packet from GS is handled here (same huge switch case), stats, attributes, damage, etc, everything is calculated from the data received from the Game Server. Implementing custom things, such as new GUIs, windows, features, everything will come in here and the data would be from the Game Server, with the static strings values, ofc.
If you want to learn Mu core development, just go with any repacks which does have the source code too. I hope it helps.