Skip to main content
Glama

get_audio_features

Retrieve audio analysis data for Spotify tracks including tempo, key, energy, danceability, and other musical characteristics. Analyze up to 100 tracks in a single API call to understand their sonic properties.

Instructions

Get audio features for one or more tracks (tempo, key, energy, danceability, etc).

Args: track_ids: Single track ID or list of track IDs (up to 100) Returns: Dict with 'features' list containing audio features for each track. Features include: tempo, key, mode, time_signature, danceability, energy, valence, loudness, speechiness, acousticness, instrumentalness, liveness. Note: Batch lookup is efficient - 100 tracks = 1 API call.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
track_idsYes

Implementation Reference

  • The handler function for the 'get_audio_features' tool. Registered via @mcp.tool() decorator. Normalizes input track IDs, calls Spotify API's audio_features endpoint, parses results using AudioFeatures Pydantic model, and returns structured features data.
    @mcp.tool() @log_tool_execution def get_audio_features(track_ids: str | list[str]) -> dict[str, Any]: """Get audio features for one or more tracks (tempo, key, energy, danceability, etc). Args: track_ids: Single track ID or list of track IDs (up to 100) Returns: Dict with 'features' list containing audio features for each track. Features include: tempo, key, mode, time_signature, danceability, energy, valence, loudness, speechiness, acousticness, instrumentalness, liveness. Note: Batch lookup is efficient - 100 tracks = 1 API call. """ try: # Normalize to list ids = [track_ids] if isinstance(track_ids, str) else track_ids if len(ids) > 100: raise ValueError("Maximum 100 track IDs per request (Spotify API limit)") logger.info(f"🎼 Getting audio features for {len(ids)} track(s)") result = spotify_client.audio_features(ids) features_list = [] for features in result: if features: audio = AudioFeatures( id=features["id"], tempo=features.get("tempo"), key=features.get("key"), mode=features.get("mode"), time_signature=features.get("time_signature"), danceability=features.get("danceability"), energy=features.get("energy"), valence=features.get("valence"), loudness=features.get("loudness"), speechiness=features.get("speechiness"), acousticness=features.get("acousticness"), instrumentalness=features.get("instrumentalness"), liveness=features.get("liveness"), ) features_list.append(audio.model_dump()) return {"features": features_list} except SpotifyException as e: raise convert_spotify_error(e) from e
  • Pydantic BaseModel defining the schema for audio features data returned by the tool. Used to structure and validate the output from Spotify's audio_features API.
    class AudioFeatures(BaseModel): """Audio features for a track.""" id: str tempo: float | None = None key: int | None = None mode: int | None = None time_signature: int | None = None danceability: float | None = None energy: float | None = None valence: float | None = None loudness: float | None = None speechiness: float | None = None acousticness: float | None = None instrumentalness: float | None = None liveness: float | None = None
  • The @mcp.tool() decorator registers the get_audio_features function as an MCP tool, using the function name as the tool name.
    @mcp.tool()

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/jamiew/spotify-mcp'

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