Skip to main content
Glama
davehenke

rekordbox-mcp

get_tracks_by_bpm_range

Filter and retrieve tracks from a rekordbox database based on a specified beats-per-minute range to match tempo requirements for DJ sets or music organization.

Instructions

Get tracks within a specific BPM range.

Args: bpm_min: Minimum BPM bpm_max: Maximum BPM

Returns: List of tracks within the BPM range

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
bpm_minYes
bpm_maxYes

Implementation Reference

  • The primary handler for the 'get_tracks_by_bpm_range' tool. Decorated with @mcp.tool() for automatic registration in FastMCP. Implements the core logic by creating SearchOptions and delegating to the database search.
    @mcp.tool()
    async def get_tracks_by_bpm_range(bpm_min: float, bpm_max: float) -> List[Dict[str, Any]]:
        """
        Get tracks within a specific BPM range.
        
        Args:
            bpm_min: Minimum BPM
            bpm_max: Maximum BPM
            
        Returns:
            List of tracks within the BPM range
        """
        if not db:
            raise RuntimeError("Database not initialized.")
        
        search_options = SearchOptions(bpm_min=bpm_min, bpm_max=bpm_max, limit=1000)
        tracks = await db.search_tracks(search_options)
        return [track.model_dump() for track in tracks]
  • Pydantic model defining SearchOptions used in the tool handler for input validation and filtering criteria, including bpm_min and bpm_max with range validation.
    class SearchOptions(BaseModel):
        """
        Search criteria for track queries.
        """
        
        query: str = Field("", description="General search query")
        artist: Optional[str] = Field(None, description="Filter by artist name")
        title: Optional[str] = Field(None, description="Filter by track title")
        album: Optional[str] = Field(None, description="Filter by album name")
        genre: Optional[str] = Field(None, description="Filter by genre")
        key: Optional[str] = Field(None, description="Filter by musical key")
        bpm_min: Optional[float] = Field(None, ge=0, description="Minimum BPM")
        bpm_max: Optional[float] = Field(None, ge=0, description="Maximum BPM")
        rating_min: Optional[int] = Field(None, ge=0, le=5, description="Minimum rating")
        rating_max: Optional[int] = Field(None, ge=0, le=5, description="Maximum rating")
        play_count_min: Optional[int] = Field(None, ge=0, description="Minimum play count")
        play_count_max: Optional[int] = Field(None, ge=0, description="Maximum play count")
        limit: int = Field(50, ge=1, le=1000, description="Maximum number of results")
        
        @field_validator('bpm_max')
        @classmethod
        def validate_bpm_range(cls, v, info):
            """Ensure bpm_max is greater than bpm_min."""
            if v and info.data.get('bpm_min') and v < info.data['bpm_min']:
                raise ValueError('bpm_max must be greater than bpm_min')
            return v
        
        @field_validator('rating_max')
        @classmethod
        def validate_rating_range(cls, v, info):
            """Ensure rating_max is greater than rating_min."""
            if v and info.data.get('rating_min') and v < info.data['rating_min']:
                raise ValueError('rating_max must be greater than rating_min')
            return v

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