server - IAC WILL MSDPThis seems to imply that the server should offer its COMMANDS as soon as the handshake has been made - but the handshake section only mentions that "Once the server receives IAC DO MSDP both the client and the server can send MSDP sub-negotiations."
client - IAC DO MSDP
server - IAC SB MSDP MSDP_VAR "COMMANDS" MSDP_VAL "LIST" MSDP_VAL "REPORT" MSDP_VAL "SEND" IAC SE
client - IAC SB MSDP MSDP_VAR "LIST" MSDP_VAL "VARIABLES" IAC SE
server - IAC SB MSDP MSDP_VAR "VARIABLES" MSDP_VAL "HINT" IAC SE
client - IAC SB MSDP MSDP_VAR "SEND" MSDP_VAL "HINT" IAC SE
server - IAC SB MSDP MSDP_VAR "HINT" MSDP_VAL "THE GAME" IAC SE
Server: IAC WILL MSDP
Client: IAC DO MSDP
Server: IAC DO MSDP
Client: IAC WILL MSDP
That really doesn't look right to me.
Indeed, it seems almost certainly wrong in an asymmetrical protocol. A transmitted WILL X says "I am willing to perform the server-side part of option X, and wish you to perform the client-side portion." A transmitted DO X says, "I am willing to perform the client-side part of option X, and I wish you to perform the server-side portion."
You can look at NAWS for inspiration for this (although it's probably a bad example, because in the cases we're interested in, the NAWS server is the mud client and vice versa). If NAWS were to follow the pattern described above, then both the mud server and mud client would be sending information about their screen sizes to each other.