Like another commenter said, Mopidy can do it all in one instance. It works, but I personally find its integration with MPD clients to be a bit clunky so I don't use it all that much.
Personally I use Snapcast as an endpoint, plain MPD for local files, and navidrome for remote access to my library.
Snapcast supports Spotify endpoints, so I just switch to my Spotify stream when I want to listen to Spotify and to my MPD stream when I want to listen to local stuff.
This is more of an ecosystem than a single solution though, so it may not be what you're looking for.