mu4e is based on the mu e-mail searching/indexer. The latter is a C-program; there are different ways to communicate with a client that is emacs-based.
One way to implement this, would be to call the mu command-line tool with some
parameters and then parse the output. In fact, that was the first approach – mu4e would
invoke e.g., mu find and process the output in
However, with this approach, we need to load the entire e-mail Xapian database (in
which the message is stored) for each invocation. Wouldn’t it be nicer to keep a running
mu instance around? Indeed, it would - and thus, the mu server sub-command was
born. Running mu server starts a simple shell, in which you can give commands to
mu, which then spits out the results/errors.
mu server is not meant for
humans, but it can be used manually, which is great for debugging.