Skip to content

KeyError: 'tracks' in parse_playlist breaks playlist list & search #58

Description

@tanigami

Summary

Both Playlists.get (list current user's playlists) and Search with qtype=playlist consistently fail with:

Unexpected error occurred: 'tracks'

Other functionality (playback control, track/album/artist info, track search) works fine.

Reproduction

# Fails
SpotifyPlaylist(action="get")
SpotifySearch(query="anything", qtype="playlist")

Root cause

In src/spotify_mcp/utils.py, parse_playlist() unconditionally accesses nested keys:

'total_tracks': playlist_item['tracks']['total'],

Recent Spotify Web API responses for current_user_playlists() and search(type='playlist') include items where tracks is missing or None (Spotify changed search result shapes in late 2024 — many entries are now sparse/null).

The if not item: continue guard at line 136 of parse_search_results only catches fully null items, not partial ones.

Suggested fix

Defensive access in parse_playlist:

tracks_field = playlist_item.get('tracks') or {}
narrowed_item = {
    'name': playlist_item.get('name'),
    'id': playlist_item.get('id'),
    'owner': (playlist_item.get('owner') or {}).get('display_name'),
    'user_is_owner': (playlist_item.get('owner') or {}).get('display_name') == username,
    'total_tracks': tracks_field.get('total', 0),
}

Environment

  • spotify-mcp installed via uvx --from git+https://github.com/varunneal/spotify-mcp
  • Python 3.12

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions