Skip to main content
Glama

get_playlists

Retrieve all playlists with metadata from the rekordbox database using MCP server for querying DJ data.

Instructions

Get all playlists from the rekordbox database.

Returns: List of playlists with metadata

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • MCP tool handler for 'get_playlists', decorated with @mcp.tool() which registers it. Implements the core logic: ensures DB connection, calls database.get_playlists(), serializes Playlist models to dicts using model_dump().
    @mcp.tool() async def get_playlists() -> List[Dict[str, Any]]: """ Get all playlists from the rekordbox database. Returns: List of playlists with metadata """ await ensure_database_connected() playlists = await db.get_playlists() return [playlist.model_dump() for playlist in playlists]
  • Core helper method in RekordboxDatabase class that queries pyrekordbox for playlists, filters active ones, calculates track counts, detects folder/smart types, constructs and returns List[Playlist] models.
    async def get_playlists(self) -> List[Playlist]: """ Get all playlists from the database. Returns: List of playlist objects """ if not self.db: raise RuntimeError("Database not connected") try: # Get all playlists, filtering out soft-deleted ones all_playlists = list(self.db.get_playlist()) active_playlists = [p for p in all_playlists if getattr(p, 'rb_local_deleted', 0) == 0] playlists = [] for playlist in active_playlists: # Get track count for this playlist try: playlist_songs = list(self.db.get_playlist_songs(PlaylistID=playlist.ID)) # Filter out soft-deleted song-playlist relationships active_songs = [s for s in playlist_songs if getattr(s, 'rb_local_deleted', 0) == 0] track_count = len(active_songs) except Exception: track_count = 0 # Check if this is a smart playlist is_smart = getattr(playlist, 'is_smart_playlist', False) or False smart_criteria = None if is_smart and hasattr(playlist, 'SmartList') and playlist.SmartList: smart_criteria = str(playlist.SmartList) # Check if this is a folder (has children) is_folder = getattr(playlist, 'is_folder', False) or False if not is_folder and hasattr(playlist, 'Attribute'): # Attribute 1 seems to indicate folders is_folder = playlist.Attribute == 1 playlists.append(Playlist( id=str(playlist.ID), name=playlist.Name or "", track_count=track_count, created_date=getattr(playlist, 'created_at', '') or "", modified_date=getattr(playlist, 'updated_at', '') or "", is_folder=is_folder, is_smart_playlist=is_smart, smart_criteria=smart_criteria, parent_id=str(playlist.ParentID) if playlist.ParentID and playlist.ParentID != "root" else None )) return playlists except Exception as e: logger.error(f"Failed to get playlists: {e}") return []
  • Pydantic BaseModel defining the Playlist data structure used throughout get_playlists implementations for type safety and serialization.
    class Playlist(BaseModel): """ Rekordbox playlist model. """ id: str = Field(..., description="Unique playlist identifier") name: str = Field(..., description="Playlist name") parent_id: Optional[str] = Field(None, description="Parent folder ID") is_folder: bool = Field(False, description="Whether this is a folder") is_smart_playlist: bool = Field(False, description="Whether this is a smart/intelligent playlist") track_count: int = Field(0, ge=0, description="Number of tracks in playlist") created_date: Optional[str] = Field(None, description="Date playlist was created") modified_date: Optional[str] = Field(None, description="Date playlist was last modified") smart_criteria: Optional[str] = Field(None, description="Smart playlist criteria (XML)") @field_validator('created_date', 'modified_date', mode='before') @classmethod def validate_date(cls, v): """Convert datetime objects to strings.""" if hasattr(v, 'strftime'): # datetime object return v.strftime("%Y-%m-%d %H:%M:%S") return str(v) if v is not None else None

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/davehenke/rekordbox-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server