MUCKs provide a way to write in-world applications.
These applications can do anything from show you the description of the room you're in to creating a full roleplaying system and anything and everything inbetween.
The two main ways to do this include MPI and MUF.
MPI is an interpretted language with a LISP-like syntax available to all players. Because it is universally available, MPI includes some security features that restrict its power. In general, MPI can only read props on the triggering object and on objects controlled by the controller of the object on which the MPI string is stored, and can only set props on the latter... on objects controlled by the owner of the MPI object. Other than setting props as mentioned, it is difficult (but not impossible) to significantly modify the database with MPI, but is ideally suited for message-handling. And because it is interpretted, it is well-suited for one-off programming tasks: no separate compiling and linking operations are needed, nor is a separate program object for holding the code. (Reference: Manual: MPI)
MUF is an extensible, structured, stack-based, compiled language.
MUF — a dialect of FORTH — is one of two programming languages implemented on all MUCKs, the other being MPI. The speed and efficiency of MUF make MUCKs readily user-extensible: powerful new commands and programs can be soft-coded into the database. Although the only place you'll be able to use it is on MUCKs, MUF is a real programming language: once you've learned it, you can truthfully say you know how to program computers, and concepts and habits of thought you pick up as a Mucker will be useful in learning languages with widespread RL applications. (Reference: Manual: MUF)