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
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- rekordbox_mcp/server.py:290-302 (handler)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]
- rekordbox_mcp/database.py:212-266 (helper)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 []
- rekordbox_mcp/models.py:70-92 (schema)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