← MCP overview
MCP Server

MCP tool catalog

Every tool the AudioScape MCP exposes. The server is closed-source, but the surface area is fully public — you can audit what tools exist without running the implementation.


Catalog tools

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:read

Natural-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)requiredFree-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:read

SFX 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:read

Browse trending / by genre / by mood / by artist / by album. Daily-refreshed trending.

Parameters

  • type (enum)requiredartist | album | genre | mood | trending
  • name (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:read

Full 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:read

Acoustically similar music tracks. Falls back to genre+popularity if acoustic fails.

Parameters

  • asset_id (string)requiredRoblox 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:read

Acoustically similar SFX. Falls back to category+popularity if acoustic fails.

Parameters

  • asset_id (string)requiredRoblox 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:read

Beat grid + section labels (Intro/Verse/Chorus/Drop/Bridge/Outro) for sync work.

Parameters

  • asset_id (string)requiredRoblox sound asset ID.

Returns

{ duration, bpm, beat_grid { times, downbeats }, sections [{ start, end, label, energy, bar_start, bar_end }], phrases }

Scaffolders

Generate Luau wiring for the two integration patterns we see most often. Both emit headless code — they wire data flow and RemoteEvents, not UI primitives. Generated code is pre-wired for the studio/production split using Roblox Secrets.

scaffold_picker_ui

scope: catalog:read

Generate Luau wiring for an in-game music or SFX picker UI (search + trending + categories/genres + filters). Headless — emits data flow, not UI primitives. Pre-wired for HttpService:GetSecret.

Parameters

  • media (enum)required"music" or "sfx"
  • surfaces (string[])Subset of [search, trending, genres, categories, filters]
  • with_analytics (boolean)Wire trackSearchClick. Default true.
  • server_path (string)Default src/server/AudioScapePickerService.server.luau
  • client_path (string)Default src/client/AudioScapePicker.client.luau

Returns

Markdown with two Luau files (ServerScript + LocalScript) and wire-up notes.

scaffold_lobby_player

scope: catalog:read

Generate a server-side music player wiring with vibe-based queue seeding and engagement RemoteEvents. Pre-wired for HttpService:GetSecret.

Parameters

  • vibe (string | { preset })requiredFree-text or preset (chill_lobby, combat, ambient_exploration, retro_arcade, cozy_idle, trending)
  • engagement (string[])Subset of [like, dislike, skip, favorite]. Default all.
  • queue_size (integer (1-50))Default 10.
  • with_auto_refill (boolean)Re-queue when queue empties. Default true.
  • server_path (string)Default src/server/AudioScapeLobbyMusic.server.luau

Returns

Markdown with one Luau ServerScript + RemoteEvent bind snippets for the client.

Lifecycle

Helpers for moving from chat-driven exploration to a published game: probe auth, hand off to a portal page for production key creation, and verify the Studio integration is wired correctly.provision_production_key never returns the key value through this MCP — the user creates and copies it on the portal in their browser. verify_studio_setup is designed to pair with a Roblox Studio MCP for programmatic Studio probing, with a manual checklist fallback.

validate_setup

scope: catalog:read

Probe API reachability + auth. Use at session start to confirm setup.

Returns

{ ok, api_key_id, user_id, scopes, latency_ms }

provision_production_key

scope: catalog:read

Returns a portal link the user opens to create + copy a production API key for their Roblox game, plus the Roblox Secret recipe. The key value is REVEALED IN THE USER'S BROWSER, never returned through this MCP. Always ask the user for game_name first.

Parameters

  • game_name (string (1-80))requiredDisplay name for the key (shown on /keys).
  • secret_name (string)Roblox Secret name. Default "AudioScapeKey".

Returns

Markdown 2-step recipe + structured meta { portal_url, secret_name, secret_domain, next_step }.

verify_studio_setup

scope: catalog:read

Returns a structured checklist (Catalog SDK installed, HTTP enabled, Secret configured) with execute_luau probe hints designed to chain with Studio's built-in MCP server, plus manual fallback questions when no Studio MCP is available.

Parameters

  • secret_name (string)Roblox Secret name to probe. Default "AudioScapeKey".

Returns

{ checks [{ id, title, studio_mcp_probe { kind, luau_snippet }, manual_question, if_missing }], ai_instruction }

verify_mixer_setup

scope: catalog:read

Read-only preflight for the Mixer SDK (runtime audio engine) at ReplicatedStorage.AudioScape.AudioScape. Reads the Version attribute (no require), semver-compares to the bundled version, and routes a missing/outdated SDK to get_mixer_sdk. Separate from verify_studio_setup, which checks the Catalog SDK.

Returns

{ expected_version, target_path, checks [{ id, title, studio_mcp_probe { kind, luau_snippet }, manual_question, if_missing }], ai_instruction }

get_mixer_sdk

scope: audio:write

Returns a version-stamped installer for the Mixer SDK that creates/upgrades ReplicatedStorage.AudioScape.AudioScape. Idempotent by version; preserves existing Sounds/Soundtrack and bus settings. Requires explicit user permission — the AI applies the returned Luau via the Roblox Studio MCP after the user agrees.

Parameters

  • confirmed_user_permission (boolean)requiredMust be true. Set only after the user agrees to install/upgrade the Mixer SDK; otherwise the tool refuses.

Returns

{ version, target_path, source_repo, source_commit, studio_mcp { tool, datamodel_type, luau_snippet }, manual_fallback { instructions, luau_snippet } }

Resources

Markdown documents auto-loaded by your AI client when working in an AudioScape context. They give Claude/Cursor/Codex persistent context without you needing to re-feed SDK files every session.

  • audioscape://docs/sdk-method-referenceSDK method reference
  • audioscape://docs/pattern-picker-uiPattern: picker UI
  • audioscape://docs/pattern-lobby-playerPattern: lobby player
  • audioscape://docs/pattern-client-accessPattern: client-side SDK access
  • audioscape://docs/pattern-analyticsPattern: analytics events
  • audioscape://docs/gotchasCommon gotchas