This just proves that you can cram pretty much anything into the client/server dichotomy if you just define "client", "server" and "request" broad enough. Similarly, I remember how desperately people tried to argue that Emacs follows the "Unix philosophy" as long as your LISP functions are doing just one thing, and do them well.
I don't know what you would gain from these things. Emacs follows the idea of LISP machines, I think that much anybody can agree on. From there, Emacs can be or do pretty much whatever you want. It's excellent in communicating with CLI tools - you can call that client/server if you want, but I wouldn't know what you'd gain from that definition. The reality is that Emacs has gone through a lot of fads and hypes over its decades of existence, and each time, it has taken something along the way. Heck, there's a whole semantic parsing engine buried within (CEDET), which nowadays is pretty much unused, because then LSPs came along, and now we have agents (which Emacs btw is a pretty decent frontend for).
Unix philosophy clearly favors and privileges certain methods of composition and interoperation. C-calls, program invocation, files and sockets/pipes. Calls inside various vms like lisp, java, python or wasm are not among those.
Emacs is a more usable interface to all those methods of composition than, say, a terminal emulator. Take dired for example; it presents the verbatim output of the ls command but allows me to interact with it in a much smoother way to rename, copy, and run arbitrary shell commands on them.
Why is it acceptable to compose simple modular tools in a bash script but not in an Emacs script?