If i understand you correctly you ultimatly want a mopidy client to represent your collection in a genre/artist/album/track navigation tree. This is a common request with different approaches.
Let me elaborate a bit.
- Listing
It basically lists all genre/artist/album/performer/composer/year etc. over all backends and navigates down from there.
This is the old mpd way of doing things, as it pretty much only is working for local backends. Listing all spotify artists is not something you want to do. This is why empty queries now are deprecated.
To still enable listings for mpd client a new method get_distinct has been introduced.
With this method correctly implemented in a local Backend a mpd client like ncmpcpp that supports listings comes very close to what you want to achieve.
It lists all Artists from you local BE.
Now when you click on an Artist a query for that artist is run over all BE and you see your local and the spotify albums for that artist. So you only have to make sure, that only one song with the artist (or genre/year etc.) that you want to brose in spotify is present in your local files and Voila goal achieved.
2.) Browsing
Browsing is different from list in that it is specific to a Backend. Each BE implements its own Browse Tree. As different streaming BE have rather different browsable options, this is the preferred way of doing things now. AFAIK clients using the http protocol are limited to this method. If you don’t insist on a view over all BE, but to browse over spotifys tracks in more structured way you could tinker with the browse code in Mopidy-Spotify. This is probably the easiest and cleanest option.
Also you could write non local entries in a local BE repository like Mopidy-Local-Sqlite or Mopidy-BeetsLocal. But i dont think this is the best way of doing things.
3.) Caching
This is an approach as done by the web client rompr. The client maintains it own database of all songs and presents a consistent interface over all BE. Unfortunately the new mopidy version broke this approach, but you could checkout a setup with a pre mopidy v1.0 server. It does exactly what you want to achieve.
A similar approach i have been thinking about is to have a caching BE. This would be filled with a list of specific queries to specific BE giving more control than the previous mentioned approaches.
This BE that could be browsed or queried by caching clients like rompr.
HTH