Possible solution:
Run a dedicated process on a dev-server machine that holds all the game servers in some kind of text format (the dev-server process finds and updates the game servers as the game client does right now and refreshes the information every "x" minutes) and pass the information to the game client which can process it further (represent it in GUI). Refresh button shouldn't trigger update on the whole game server list but only on the selected game server - it should trigger a direct communication b/w game client and game server (bypassing the dev-server machine).
The Friends function shouldn't be a problem if the dev-server holds all the players currently playing on all the servers.
A function should be added that allows a player to see the name and IP of the server on which he/she is currently playing.
The Remote function shouldn't just filter the requested server list with its avalable entries (which is very lazy) but should trigger a communication b/w game client and requested game server.