Thin wrappers over the public AudioScape developer API. Each call is tagged with
x-source: mcp so it's filterable on your
MCP activity dashboard.
search_music
scope: catalog:readNatural-language music search. Numeric query (single ID, or comma-delimited batch) and explicit asset_ids array short-circuit to a direct lookup. Returns real Roblox sound asset IDs.
Parameters
query (string)required — Free-text search query, or "<id>" / "<id1>,<id2>,..." for asset-ID lookup. Required when asset_ids is omitted.asset_ids (string[]) — Explicit batch lookup. Up to 100 numeric IDs. Wins over query, bypasses filters, returns matches in input order.limit (integer (1-100)) — Default 20.offset (integer (≥0)) — Pagination offset.filters.genres (string[]) — Filter by canonical genre, our slug, or legacy Roblox music_genre slug — all resolve to the canonical taxonomy.filters.duration ({min, max}) — Duration in seconds.filters.min_play_count (integer) — Quality floor by plays.filters.min_likes (integer) — Quality floor by likes.filters.created_after (YYYY-MM-DD) — Recency filter.
Returns
{ tracks[] (each with genre + genre_slug), artists[], albums[], meta { total, search_method ("semantic" | "text" | "id" | "ids-batch"), matched_artist?, missing_ids? } }
search_sfx
scope: catalog:readSFX text + UCS category search. Either query or filters.categories required.
Parameters
query (string) — Free-text. Optional if filters.categories is set.filters.categories (string[]) — UCS categories.filters.subcategories (string[]) — UCS subcategories.filters.duration ({min, max}) — Seconds.filters.min_likes (integer) — Quality floor.
Returns
{ tracks[], categories[], subcategories[], meta { total, search_method, synthesized_query? } }
browse_music
scope: catalog:readBrowse trending / by genre / by mood / by artist / by album. Daily-refreshed trending.
Parameters
type (enum)required — artist | album | genre | mood | trendingname (string) — Drill into a specific item (e.g. type=genre, name=lo-fi).limit (integer (1-100)) — Default 20.sort (enum) — popular (default) | alpha | recent. Drill-down only; ignored for list mode and trending. Tracks with no engagement are omitted under popular.
Returns
{ items[] } when listing items, { tracks[] } when drilled into one
get_sfx_taxonomy
scope: catalog:readFull UCS broader_category → category → subcategory tree. Edge-cached 10 min.
Returns
{ taxonomy[], meta { broader_category_count, category_count, subcategory_count } }
find_similar_music
scope: catalog:readAcoustically similar music tracks. Falls back to genre+popularity if acoustic fails.
Parameters
asset_id (string)required — Roblox sound asset ID.limit (integer (1-100)) — Default 20.filters ({ genres, duration }) — Same shape as search_music filters.
Returns
{ tracks[], meta { total } }
find_similar_sfx
scope: catalog:readAcoustically similar SFX. Falls back to category+popularity if acoustic fails.
Parameters
asset_id (string)required — Roblox sound asset ID.limit (integer (1-100)) — Default 20.filters ({ categories, subcategories, duration }) — Same as search_sfx.
Returns
{ tracks[], meta { total } }
get_track_structure
scope: catalog:readBeat grid + section labels (Intro/Verse/Chorus/Drop/Bridge/Outro) for sync work.
Parameters
asset_id (string)required — Roblox sound asset ID.
Returns
{ duration, bpm, beat_grid { times, downbeats }, sections [{ start, end, label, energy, bar_start, bar_end }], phrases }