get_playlists
Retrieve all playlists and their metadata from a rekordbox DJ database. Access playlist information for DJ set organization and track management.
Instructions
Get all playlists from the rekordbox database.
Returns: List of playlists with metadata
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- rekordbox_mcp/server.py:290-302 (handler)The main MCP tool handler for 'get_playlists', registered via @mcp.tool() decorator. Ensures database connection, retrieves playlists from the database layer, and serializes them to dictionaries for the MCP response.@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]
- rekordbox_mcp/models.py:70-92 (schema)Pydantic BaseModel defining the schema/structure of each Playlist object returned by the tool. Includes fields like id, name, track_count, is_smart_playlist, etc., with validation.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
- rekordbox_mcp/database.py:212-266 (helper)Core helper method in RekordboxDatabase class that implements the playlist fetching logic: queries pyrekordbox database, filters active playlists, computes track counts by querying playlist_songs, determines folder/smart types, and constructs 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 []