Not sure about the context of your question but I don't think the granularity of calls has anything to do with the type of EJB. In general when you are making calls over the network (web service calls, remote ejb calls etc.) you want to design your APIs such that your calls will be coarse grained. Relating the idea to EJBs, since SLSB and SFSB are generally invoked over the network, it makes sense to design them with coarse grained operations. Some may argue that if your SLSB is local, fine grained calls may be okay but I discourage that practice because you never know when you may have to expose the ejb to remote client or as web service.
Same goes for Entity Beans. EBs are typically invoked by a "co-located SLSB" and because the underlying assumption is that an entity bean is NOT being invoked over the network it is okay to have fine grained operations on them.
The message: granularity depends (among other things) on whether you are making local or remote calls.
MDB - No Client: You don't write a client for an MDB - that's true, but the container (application server) is the client for your MDB. When a message arrives, the container invokes the MDB and passes the message on to it.