freqblog avatar

FreqBlog Music Metadata

com.freqblog/music-metadata

If you need an alternative to Spotify's audio features API, this pulls track metadata including BPM, key, mood classifications, and genre tags. It's hosted at mcp.freqblog.com and works over streamable HTTP, so you can query it without managing authentication flows or dealing with Spotify's rate limits. Reach for this when you're building music discovery tools, DJ software, playlist generators, or anything that needs to understand the musical characteristics of tracks. The focus is on actual audio analysis rather than user listening data, making it useful for music-first applications where you care more about tempo and tonality than popularity metrics.

tools
12
transport
HTTP
last updated
Jul 14, 2026

Install

From registry metadata
$ npx add-mcp https://mcp.freqblog.com/mcp --name music-metadata

Run in your terminal. add-mcp asks which agents to add it to (Claude Code, Codex, Cursor and more). Add -g to install it for every project.

Review the command, arguments and environment values before installing. MCP servers run with your local permissions.

Other ways

Claude Code

$ claude mcp add --transport http music-metadata https://mcp.freqblog.com/mcp

Run in your terminal. Add --scope user to make it available in every project.

Tools

Verified live · 12 tools

Verified live against the running server on Nov 6, 2026.

get_audio_featuresGet audio features for ONE track — BPM, musical key (name + Camelot + Open Key), energy, danceability, valence, acousticness, loudness, mood, mood_vector, genre, time signature, duration and more. Fields follow the layout of Spotify's retired /audio-features endpoint. Provide...5 params

Get audio features for ONE track — BPM, musical key (name + Camelot + Open Key), energy, danceability, valence, acousticness, loudness, mood, mood_vector, genre, time signature, duration and more. Fields follow the layout of Spotify's retired /audio-features endpoint. Provide...

Parameters* required
artistvalue
Artist name. Only used with `track`; required when the title is <=2 characters.
isrcvalue
ISRC, e.g. 'USUM71900001'.
mbidvalue
MusicBrainz recording ID (UUID). The precise key when there is no ISRC, e.g. pre-1986 recordings.
spotify_idvalue
Spotify track ID, 'spotify:track:...' URI, or open.spotify.com URL. Resolved per request by reading the track's title from Spotify's public embed page and matching it against our catalogue (no Spot...
trackvalue
Track title. Use with `artist` when known. Supply AT LEAST ONE of track/isrc/mbid/spotify_id. Sending several is fine — they resolve by precedence (track > isrc > mbid > spotify_id) and the rest ar...
get_audio_features_batchGet audio features for MANY tracks in one call (up to 50 processed) — ideal for analysing a whole playlist at once. Identify each item by name (`track`/`artist`), by `isrc` (matched exactly first — best for CJK / K-pop / niche tracks whose fuzzy name-match misses), or both (IS...1 params

Get audio features for MANY tracks in one call (up to 50 processed) — ideal for analysing a whole playlist at once. Identify each item by name (`track`/`artist`), by `isrc` (matched exactly first — best for CJK / K-pop / niche tracks whose fuzzy name-match misses), or both (IS...

Parameters* required
tracks*array
List of {track?, artist?, isrc?} objects. Up to 50 are processed per call; any extra (up to 200 accepted) come back skipped. Each item should carry `track` or `isrc`.
search_catalogFull-text search the catalog by any mix of track / artist / album tokens. Use this to resolve a fuzzy, partial, or misspelled name into concrete tracks BEFORE calling get_audio_features. Each hit carries `chart_peak`: the best chart position we hold, 1-100 with 100 = a number-...2 params

Full-text search the catalog by any mix of track / artist / album tokens. Use this to resolve a fuzzy, partial, or misspelled name into concrete tracks BEFORE calling get_audio_features. Each hit carries `chart_peak`: the best chart position we hold, 1-100 with 100 = a number-...

Parameters* required
limitinteger
Max results (default 10).default: 10
q*string
Search query — any mix of artist / track / album tokens.
find_tracks_by_bpmFind catalog tracks near a target tempo. Returns tracks whose BPM is within +/-`tolerance` of `bpm`, ordered by closeness then by an internal catalogue ordering key (not an audience metric) — useful for DJ set planning, workout playlists, or tempo-matching. Each returned track...3 params

Find catalog tracks near a target tempo. Returns tracks whose BPM is within +/-`tolerance` of `bpm`, ordered by closeness then by an internal catalogue ordering key (not an audience metric) — useful for DJ set planning, workout playlists, or tempo-matching. Each returned track...

Parameters* required
bpm*number
Target tempo in BPM.
limitinteger
Max tracks (default 10).default: 10
tolerancenumber
Plus/minus BPM window (default 2).default: 2
find_tracks_by_keyFind catalog tracks in a given musical key — for harmonic mixing and key-locked playlists. `key` accepts Camelot ("8A"), Open Key ("1m"), or a key name ("A-Minor", "F#-Major"). Returns tracks ordered by an internal catalogue ordering key (not an audience metric), each with ful...2 params

Find catalog tracks in a given musical key — for harmonic mixing and key-locked playlists. `key` accepts Camelot ("8A"), Open Key ("1m"), or a key name ("A-Minor", "F#-Major"). Returns tracks ordered by an internal catalogue ordering key (not an audience metric), each with ful...

Parameters* required
key*string
Camelot ('8A'), Open Key ('1m'), or key name ('A-Minor', 'F#-Major').
limitinteger
Max tracks (default 10).default: 10
find_compatible_keysGiven a Camelot key (e.g. "8A", "12B"), return the harmonically compatible keys for DJ mixing — the same key, the relative major/minor, and the adjacent +/-1 keys on the Camelot wheel. With `extended=true` also returns the +7/-7 energy-boost / energy-drop keys. Pure music theo...2 params

Given a Camelot key (e.g. "8A", "12B"), return the harmonically compatible keys for DJ mixing — the same key, the relative major/minor, and the adjacent +/-1 keys on the Camelot wheel. With `extended=true` also returns the +7/-7 energy-boost / energy-drop keys. Pure music theo...

Parameters* required
camelot*string
Camelot key, e.g. '8A' or '12B'.
extendedboolean
Also return the +7/-7 energy-boost / energy-drop keys.default: false
score_transitionScore how well one catalog track mixes into another (0-100) — the pairwise DJ transition score no raw key/BPM API gives you. Combines Camelot-wheel key compatibility, octave-aware BPM proximity (half/double-time counts as a match), and energy smoothness. Returns the overall `s...2 params

Score how well one catalog track mixes into another (0-100) — the pairwise DJ transition score no raw key/BPM API gives you. Combines Camelot-wheel key compatibility, octave-aware BPM proximity (half/double-time counts as a match), and energy smoothness. Returns the overall `s...

Parameters* required
from_track_id*string
The track you're mixing FROM — a catalog itunes_track_id, e.g. 'apple_ad1829eeccb70f9a'.
to_track_id*string
The candidate track you're mixing INTO — a catalog itunes_track_id.
suggest_next_trackGiven a seed track, return the top-N catalog tracks to play NEXT, ranked by transition score. Each suggestion carries the same `score`, per-component scores and human `reason` as score_transition (e.g. "11B->11B same key, 118->117 BPM (-0.29), energy +0.12"), plus its `genre`...7 params

Given a seed track, return the top-N catalog tracks to play NEXT, ranked by transition score. Each suggestion carries the same `score`, per-component scores and human `reason` as score_transition (e.g. "11B->11B same key, 118->117 BPM (-0.29), energy +0.12"), plus its `genre`...

Parameters* required
bpm_driftnumber
Max BPM difference pre-filter before scoring (default 12).default: 12
cross_genrestring
Genre handling: 'auto' (default) keeps picks in a mixable genre lane so an off-genre track that only shares key/BPM sinks to the bottom; 'strict' = same genre-family only; 'allow' = genre-blind (ha...default: auto
exclude_same_artistboolean
Drop tracks by the seed's artist (default false).default: false
max_key_distanceinteger
Max Camelot-wheel hops pre-filter before scoring (default 2).default: 2
min_scoreinteger
Drop candidates below this overall transition score (default 0).default: 0
ninteger
How many next-track suggestions to return (default 10).default: 10
seed_track_id*string
The track currently playing — a catalog itunes_track_id.
build_setlistOrder a crate of 2-100 catalog tracks into a beat-matched DJ set that follows an energy arc, keeping each consecutive transition harmonically and tempo-smooth. `arc` is one of peak_time (default — builds to a peak then eases), warmup, cooldown, or flat. Returns the `arc`, `cou...3 params

Order a crate of 2-100 catalog tracks into a beat-matched DJ set that follows an energy arc, keeping each consecutive transition harmonically and tempo-smooth. `arc` is one of peak_time (default — builds to a peak then eases), warmup, cooldown, or flat. Returns the `arc`, `cou...

Parameters* required
arcstring
Energy arc: 'peak_time' (default), 'warmup', 'cooldown', or 'flat'.default: peak_time
start_track_idvalue
Optional fixed opener — must be one of track_ids.
track_ids*array
The crate to order — 2 to 100 catalog itunes_track_ids.
get_recommendationsRecommended tracks for one or more seed tracks, in the shape of Spotify's retired GET /v1/recommendations. Blends up to 5 catalog seed tracks into a single point in audio-feature space and returns the nearest catalogue tracks, RE-RANKED by genre affinity (so a feature-close cr...9 params

Recommended tracks for one or more seed tracks, in the shape of Spotify's retired GET /v1/recommendations. Blends up to 5 catalog seed tracks into a single point in audio-feature space and returns the nearest catalogue tracks, RE-RANKED by genre affinity (so a feature-close cr...

Parameters* required
artistvalue
Artist name narrowing the track seed (case-insensitive).
cross_genrestring
Genre handling (mirrors suggest_next_track): 'auto' (default) re-ranks by genre affinity so a feature-close cross-genre track can't outrank same-genre picks; 'strict' = same genre-family only (off-...default: auto
exclude_seed_artistsboolean
Drop tracks by any of the seed artists (default false).default: false
limitinteger
Number of recommendations to return (default 20).default: 20
maxvalue
HARD upper bounds, e.g. {'tempo': 130}. Same attributes as `min`. Combine the two for a range.
minvalue
HARD lower bounds, e.g. {'tempo': 100, 'energy': 0.5}. Tracks below the bound — and tracks we hold no analysed value for — are dropped. Attributes: acousticness, danceability, duration_ms, energy,...
seed_tracksvalue
1-5 catalog itunes_track_ids to base recommendations on, e.g. ['apple_ad1829eeccb70f9a'] (blended into a feature-space centroid). Omit and use track(+artist) to seed by name instead.
targetvalue
PREFERRED values, e.g. {'energy': 0.8}. Tracks nearer the value rank higher; unlike min/max nothing is removed. Same attributes as `min`.
trackvalue
Seed by track NAME instead of an id — resolved to the best catalog match (echoed back as seed_query). Pair with artist to disambiguate. Ignored when seed_tracks is given.
get_related_artistsArtists related to a seed artist, in the shape of Spotify's retired GET /v1/artists/{id}/related-artists. No artist graph exists, so we derive one: build the seed artist's track-vector centroid, take its nearest catalogue tracks, aggregate by artist (each scored on its top-3 t...2 params

Artists related to a seed artist, in the shape of Spotify's retired GET /v1/artists/{id}/related-artists. No artist graph exists, so we derive one: build the seed artist's track-vector centroid, take its nearest catalogue tracks, aggregate by artist (each scored on its top-3 t...

Parameters* required
artist*string
Seed artist name (as it appears in the catalog; case-insensitive).
limitinteger
Number of related artists to return (default 20).default: 20
tag_trackGet a compact, clearly labelled tag list for a track — energy / danceability / valence / acousticness / instrumentalness (instrumental vs vocal, judged on the 30-second preview), plus a mood tag and a broad genre tag. It is a tag-shaped projection of the same open-data analysi...6 params

Get a compact, clearly labelled tag list for a track — energy / danceability / valence / acousticness / instrumentalness (instrumental vs vocal, judged on the 30-second preview), plus a mood tag and a broad genre tag. It is a tag-shaped projection of the same open-data analysi...

Parameters* required
artistvalue
Artist name. Only used with `track`; improves accuracy.
isrcvalue
ISRC, e.g. 'USUM71900001'.
mbidvalue
MusicBrainz recording ID (UUID). Tags come from AcousticBrainz for that exact recording.
spotify_idvalue
Spotify track ID, 'spotify:track:...' URI, or open.spotify.com URL. Resolved per request by reading the track's title from Spotify's public embed page and matching it against our catalogue (no Spot...
trackvalue
Track title. Use with `artist` when known. Supply AT LEAST ONE of track/isrc/mbid/spotify_id/track_id. Sending several is fine — they resolve by precedence (track > isrc > track_id > mbid > spotify...
track_idvalue
Catalog itunes_track_id from a search_catalog or get_audio_features result.

Sponsors

Details

Category
Media & Entertainment
Transport
HTTP
Registry
MCP registry, active
Tools verified
Nov 6, 2026

Related Media & Entertainment MCP servers

View all
1br0ski777 avatarSocial Profile Enrichment APIbr0ski777/social-profile-x402Social media profile lookup for GitHub, Twitter/X, LinkedIn, YouTube. x402.0stars
2dailyaiagents-cpu avatarFounder Letter Audiodailyaiagents-cpu/dailyai-osRenders a Cooper-edited founder letter to MP3 via ElevenLabs TTS0stars
3mambalabsdev avatarMcp Media Url Transcribermambalabsdev/mcp-media-url-transcriberTranscribe direct audio and video file links on your own speech to text API key0stars
4shubhamekapure avatarSocial Search Mcpshubhamekapure/social-search-mcpDeep social media search for LLMs: Facebook, Reddit, LinkedIn, Instagram & more.0stars
5trendsmcp-ai avatarSpotify Trends MCPtrendsmcp-ai/trends-mcpSpotify podcast and artist trends over time, with growth metrics. Free key at trendsmcp.ai47stars
6malamutemayhem avatarYouTube MCP by UnClickmalamutemayhem/unclickSearch YouTube and get video, channel, playlist, and caption details. By UnClick.4stars