offstereo
Registry code: 0b7248ddadc04fa5
Builds narrated, playable music stories, explores sample lineage, and saves verified playlists.
from a public catalogue that lists it, not from the operator
- endpoint
- https://www.offstereo.com/api/mcp
- protocol
- streamable-http ·2024-11-05
- authentication
- none observed
- public key
- none — nobody has proven they own this listing · is it yours? claim it
- karma
- 0 · newcomer
- Is offstereo live?
- Yes — it answered the hub's last check (checked 42m ago). It answered 100% of checks over the last 30 days.
- Is offstereo free to use?
- Partly — some of its tools are open, others need a key or payment.
- What tools does offstereo have?
- 18 tools: update_editorial_brief, get_editorial_status, steer_session, create_playlist, prepare_episode, get_story_audio, make_playable, explore_lineage, ….
- Is offstereo safe to connect?
- The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
90 days 99.5%· all time 99.5%
last good check
of 18 tools
- degraded → live
- live → degraded· timeout after 20000ms
- degraded → live
- degraded → live
- live → degraded· HTTP 500
- used for
- create a playlist from an idea
- explore music sample lineage
- discover new music releases
- get today in music history
- save a listening session as a playlist
- takes → gives
- text → data, audio
- tools
- 6 reads6 changes data
Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.
through this hub
successful
what callers paid
Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.
music_today reads open 22h ago
Call exactly once for a 'today in music' or dated music-history request. One response already combines album anniversaries, artist birthdays and memorials, current releases, current US song-chart context, and related playable OffStereo stories; use that one combined call rather than separate history, releases, charts, or shows calls. dateMode=today uses the listener's current day and omits date; dateMode=explicit pairs with a named YYYY-MM-DD date. limit is the maximum total across the combined response, playableOnly limits rows to music that plays in ChatGPT, and allowBuild=false plus allowSave=false preserves a read-only request. This is the only dated-music tool in the current schema.
{ "type": "object", "required": [ "dateMode" ], "properties": { "date": { "type": "string", "description": "ISO date YYYY-MM-DD for dateMode=explicit; absent for dateMode=today." }, "limit": { "type": "number", "description": "Maximum total results across the already-combined response (1-20, default 8). Honor an explicit result count." }, "dateMode": { "enum": [ "today", "explicit" ], "type": "string", "description": "today represents the listener's current day; explicit represents one named calendar date." }, "allowSave": { "type": "boolean", "description": "False preserves an explicit request not to create or save anything." }, "allowBuild": { "type": "boolean", "description": "False preserves an explicit request not to create or build a story." }, "playableOnly": { "type": "boolean", "description": "True limits music-history results to rows with audio playable in ChatGPT." } } }arguments 36 linesget_session reads auth-required 40h ago
Application polling for an already-mounted OffStereo card. It refreshes one PlayableSession in place. An optional narration playback receipt can continue the existing research run and requires write access. A selected library story opens through make_playable(existingSessionId), while playback and contextual follow-ups use steer_session.
{ "type": "object", "required": [ "sessionId" ], "properties": { "sessionId": { "type": "string" }, "playingItemId": { "type": "string", "description": "Application receipt emitted for the exact queue item after its media provider confirms narration playback. Requires offstereo.write because it can continue research generation." } } }arguments 15 linesmy_offstereo reads auth-required 15h ago
Call once to return the signed-in listener's OffStereo library overview, currently including their completed, unarchived shows. This is the primary personal-library tool.
{ "type": "object", "properties": { "limit": { "type": "number", "description": "Shows to return (1-50)." } } }arguments 9 linesupdate_editorial_brief unknown never probed
Operator only. Apply the editor’s explicit reply to a previously read brief. Requires its current revision and a stable unique requestId reused on retries. Select three IDs, choose a lead, change an angle, add a source-backed candidate, or hold/resume BEFORE the build deadline. add_candidate requires pitch with a unique ID, title, dated whyNow, discovery, listeningPayoff, source URLs and named mediaIdeas. It only adds an unverified proposal; use a separate select action for an explicitly requested swap after reading the new revision. Existing research and playback verification still apply. Requires an explicit editor instruction; locked editions cannot be changed. Does not modify saved stories.
{ "type": "object", "required": [ "date", "revision", "requestId", "change" ], "properties": { "date": { "type": "string", "description": "Pacific edition date YYYY-MM-DD. Brief defaults to tomorrow; status defaults to today." }, "change": { "type": "object", "properties": { "id": { "type": "string" }, "ids": { "type": "array", "items": { "type": "string" } }, "note": { "type": "string" }, "pitch": { "type": "object", "required": [ "id", "title", "whyNow", "discovery", "listeningPayoff", "signalDate", "sources", "mediaIdeas" ], "properties": { "id": { "type": "string", "maxLength": 100, "minLength": 1 }, "title": { "type": "string", "maxLength": 160, "minLength": 1 }, "whyNow": { "type": "string", "maxLength": 700, "minLength": 1 }, "sources": { "type": "array", "items": { "type": "string", "format": "uri" }, "maxItems": 6, "minItems": 1 }, "discovery": { "type": "string", "maxLength": 900, "minLength": 1 }, "mediaIdeas": { "type": "array", "items": { "type": "string", "maxLength": 240, "minLength": 1 }, "maxItems": 8, "minItems": 1 }, "signalDate": { "type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$" }, "mediaSequence": { "type": "array", "items": { "type": "object", "required": [ "work", "artistOrCreator", "purpose" ], "properties": { "work": { "type": "string" }, "purpose": { "type": "string" }, "recordings": { "type": "array", "items": { "type": "object", "required": [ "title", "artist" ], "properties": { "album": { "type": "string" }, "title": { "type": "string" }, "artist": { "type": "string" }, "version": { "type": "string" } } }, "maxItems": 4 }, "artistOrCreator": { "type": "string" } } }, "maxItems": 8, "minItems": 1 }, "listeningPayoff": { "type": "string", "maxLength": 900, "minLength": 1 }, "verificationQuestions": { "type": "array", "items": { "type": "string", "maxLength": 400, "minLength": 1 }, "maxItems": 4, "minItems": 1 } }, "additionalProperties": false }, "action": { "enum": [ "select", "lead", "angle", "add_candidate", "hold", "resume" ], "type": "string" } } }, "revision": { "type": "integer", "minimum": 1 }, "requestId": { "type": "string", "maxLength": 120, "minLength": 8 } }, "additionalProperties": false }arguments 176 linesget_editorial_status unknown never probed
Operator only. Read the saved OffStereo edition production status, substitutions and held pitches. Includes production.alerts for depleted provider credits. Notify the editor by text when authorized, deduplicate by alert id, and do not claim delivery without a phone receipt. Report actionable failures or substitutions; no generation and no publication mutation.
{ "type": "object", "properties": { "date": { "type": "string", "description": "Pacific edition date YYYY-MM-DD. Brief defaults to tomorrow; status defaults to today." } }, "additionalProperties": false }arguments 10 linessteer_session changes data unknown never probed
Control and contextual follow-ups for the active player: pause, resume, skip, play the next song, append one exact next song, adjust the music level, explain why a song is present, open an explicitly requested documented sample lineage, or return to the story. The result updates the mounted card in place. For an AI-DJ transition to a newly chosen record, pass queueTrack with exact artist and title; OffStereo resolves it and appends it to this same widget so the current song can finish and auto-advance. Keeping the transition in this queue avoids a second make_playable call. Use instruction='Queue this as the next song without interrupting the current song' to queue ahead, or 'Play this next now' to append and immediately advance. A why-this-song question preserves the queue. sessionId identifies the active session, and activeItemId plus positionMs preserve exact continuity when the card supplies them.
{ "type": "object", "required": [ "instruction" ], "properties": { "sessionId": { "type": "string" }, "positionMs": { "type": "number" }, "queueTrack": { "type": "object", "required": [ "artist", "title" ], "properties": { "title": { "type": "string" }, "artist": { "type": "string" }, "reason": { "type": "string", "description": "A concise, factual transition reason for why this record follows the current one." } }, "description": "One exact new record to append to the active widget queue. Use this instead of opening another one-song widget when the listener asks the AI DJ to choose what comes next." }, "instruction": { "type": "string" }, "activeItemId": { "type": "string" }, "playbackState": { "enum": [ "playing", "paused" ], "type": "string" }, "acknowledgeDirectiveId": { "type": "string", "description": "Mounted-card acknowledgement for the exact one-shot playback directive it has finished applying. Periodic cursor syncs omit this field." } } }arguments 51 linescreate_playlist changes data unknown never probed
Create one playlist from a natural-language idea or explicit track list. Call exactly once per listener turn: do not inspect the result and make a corrective second call or stack another playlist card in the same response. previewOnly=true returns one authoritative playlist that can be heard before saving and needs no music-service connection. For the normal save flow, use save_to_offstereo with the returned preview id; it saves privately to OffStereo and offers Continue to Apple Music on the website. Only for an explicitly requested direct music-service save after approval, previewOnly=false with the approved tracks and the same concise editorial name creates one private playlist in the listener's active music service. Apple Music is the public save destination; Spotify saving requires an explicitly enabled test deployment. Pass service only when the listener explicitly names a destination. requiredArtists carries every artist the listener named as required. allowSecondPlaylist is true only for an explicit request for a separate additional playlist. Sign-in recovery preserves the exact request and pendingActionId for a safe retry.
{ "type": "object", "properties": { "name": { "type": "string", "description": "A concise editorial playlist title. Omit it when the listener did not supply a title; OffStereo derives one from the prompt." }, "count": { "type": "number", "description": "Target song count for prompt-generated playlists (1-50, default 20)." }, "prompt": { "type": "string", "description": "A conceptual playlist request, e.g. 'connect A Tribe Called Quest to Steely Dan'." }, "tracks": { "type": "array", "items": { "type": "object", "required": [ "artist", "title" ], "properties": { "title": { "type": "string" }, "artist": { "type": "string" } } } }, "service": { "enum": [ "spotify", "apple_music" ], "type": "string", "description": "Destination service. Pass only when the listener explicitly names one; otherwise OffStereo uses the active service on their account." }, "previewOnly": { "type": "boolean", "description": "Resolve one unified playlist preview without saving or requiring a music-service connection. True when the listener asks to hear, inspect, or approve the songs before saving." }, "pendingActionId": { "type": "string", "description": "Retry token returned by a prior auth_required result." }, "requiredArtists": { "type": "array", "items": { "type": "string" }, "description": "Every artist the user explicitly requires, especially endpoints in a request such as 'from Minnie Riperton to Solange'. OffStereo validates these before creating anything." }, "allowSecondPlaylist": { "type": "boolean", "description": "True only when the listener explicitly requests another separate playlist. Omit or pass false otherwise; this does not authorize a second create_playlist call in the same response." } } }arguments 62 linesprepare_episode changes data unknown never probed
Prepare one finished OffStereo story to become a private Spotify episode after the listener explicitly asks. OffStereo packages its completed intro, ordered narration, sign-off, branded title, show notes, OffStereo cover, chapters, and song timeline, then returns an honest handoff: the episode is not in Spotify until the listener finishes with Spotify's Save to Spotify helper on their own computer. Use the active or selected story's sessionId. This is for a narrated story, not a playlist or an unfinished build.
{ "type": "object", "required": [ "sessionId" ], "properties": { "sessionId": { "type": "string", "description": "The completed OffStereo story id from the active player or the listener's library." } } }arguments 12 linesget_story_audio reads unknown 15h ago
Get a finished OffStereo story as ONE downloadable MP3 — the narrated story, without the records. Use this on any surface where a player card cannot render: send it as a WhatsApp or Telegram voice note, attach it to an email, play it over a phone or speaker, or hand it to someone as a file. The URL is public and needs no OffStereo account, so it can be forwarded to anyone. It is narration only, which is why it is freely shareable — say so rather than promising the songs; the songs are at webUrl. Prefer this over reading a summary aloud in your own synthetic voice: this is the produced story, already voiced. Only finished shows have audio — poll get_show until status is ready.
{ "type": "object", "properties": { "slug": { "type": "string", "description": "The show's slug, as find_shows returns it. Use either this or showId." }, "showId": { "type": "string", "description": "The show id, from find_shows, make_playable or get_show." } } }arguments 13 linesmake_playable changes data unknown never probed
Create one playable OffStereo card for an ordered listening queue, recording, video, or narrated story. For original recordings, rare mixtapes, or DJ mixes, look on external music/video providers first and use experience=media. Do not search the OffStereo story archive first or create a narrated story unless the listener asks for an OffStereo story. For a quick playlist without narration, use experience=media with tracks for exact catalog songs, or mediaItems to interleave catalog songs, YouTube videos, SoundCloud recordings, and Internet Archive tracks in the requested order. Repeated entries are preserved. Verify any claimed sample relationships before selecting pairs; a quick queue does not require producing a researched story. A bare Archive item URL queues its complete ordered track list; an exact file URL selects that recording. A single external recording can also use sourceUrl or provider-specific search fields. Catalog songs use available previews; external recordings retain their provider's playback limits. Discovery and Music Today already play their songs, so keep those results in their original card unless dedicated controls are requested. experience=single_track remains a one-song shortcut with artist plus track. experience=story progressively creates requested narration; mode=fresh starts a new build. Pass artist plus album for an album story and trackCount for its requested length. Direct queues do not save to a library; save_to_offstereo preserves the selection, while create_playlist exports eligible songs to a music service. existingSessionId opens a saved session; get_session polls an already mounted card. The mounted card owns live progress and playback; avoid restating transient stages in prose. A tool call opens the card without starting playback.
{ "type": "object", "properties": { "mode": { "enum": [ "auto", "fresh" ], "type": "string", "description": "fresh starts an explicitly new story; auto may reuse an exact strong match." }, "album": { "type": "string", "description": "Exact album or EP title, paired with artist when the listener names or shows a specific record." }, "title": { "type": "string", "description": "Short canonical artist, track, album, or subject title for the card, especially useful for an identified image or a prompt that also contains workflow instructions." }, "track": { "type": "string", "description": "Exact song title, paired with artist for reliable single_track matching." }, "artist": { "type": "string", "description": "Exact artist, paired with track for a one-song card or with album for an album-focused story." }, "length": { "enum": [ "short", "standard" ], "type": "string", "description": "short fits an explicitly quick, brief, or concise narrated story and targets three narration-and-record chapters; standard keeps the full editorial arc." }, "prompt": { "type": "string", "description": "For experience=media, the original recording, mixtape, DJ mix, or video to find and play; otherwise what the listening story should explain." }, "tracks": { "type": "array", "items": { "type": "object", "required": [ "artist", "title" ], "properties": { "title": { "type": "string", "description": "Exact track title." }, "artist": { "type": "string", "description": "Exact artist." } } }, "description": "With experience=media, 1–20 exact catalog songs form the entire ordered queue, preserving repeats, without narration or extra curation. Do not combine with mediaItems or a single-source request. With experience=story, these are required records pinned in order while curation fills remaining slots up to trackCount." }, "requestId": { "type": "string", "description": "Optional UUID for a new progressive story request. Reuse the same UUID when retrying the same request to avoid duplicate work." }, "sourceUrl": { "type": "string", "description": "For experience=media, a YouTube video, SoundCloud recording, or Internet Archive item/file URL. A bare Archive item expands its complete ordered track list; a file URL selects one recording. Use mediaItems for multiple sources. For a requested story, an http(s) article or source URL to adapt." }, "videoMode": { "type": "boolean", "description": "When true, the story opens on a third-person editorial hook with no DJ greeting or time-of-day welcome — for a companion story paired with a video. Pair with an explicit `title` so page title, URL, and register all match the video." }, "experience": { "enum": [ "story", "single_track", "media" ], "type": "string", "description": "media creates immediate playback without narration: an ordered tracks or mediaItems queue, a complete Archive item, or one recording/video through sourceUrl or provider search. single_track is the existing one-song shortcut; story requests progressive narration. No library save occurs automatically." }, "mediaItems": { "type": "array", "items": { "type": "object", "required": [ "provider" ], "properties": { "title": { "type": "string", "description": "Exact song title for catalog entries only." }, "artist": { "type": "string", "description": "Exact artist for catalog entries only." }, "provider": { "enum": [ "catalog", "youtube", "soundcloud", "archive" ], "type": "string" }, "sourceUrl": { "type": "string", "description": "Exact external source URL, required for youtube, soundcloud, or archive." } }, "additionalProperties": false }, "maxItems": 20, "minItems": 1, "description": "Ordered mixed-media queue for experience=media. Interleave catalog songs, videos, SoundCloud recordings, and Archive item/file links. Use catalog with artist/title; external providers with sourceUrl. Bare Archive items expand in place into all tracks, up to 200 recordings in the final queue. Preserve requested order and repeats. Use instead of tracks or single-source fields; unresolved entries fail the request without saving a partial queue." }, "sourceText": { "type": "string", "description": "Source text or conversation context to adapt." }, "trackCount": { "type": "number", "description": "Exact number of songs requested for a narrated story (2-12). Use 1 with experience=single_track." }, "resumeShowId": { "type": "string", "description": "Rebuild an unfinished show in place, keeping its id and URL, instead of creating a second one. Pass the id of a show whose `retryable` is true. Rejected for a show that already finished or that belongs to someone else." }, "mediaProvider": { "enum": [ "auto", "youtube", "soundcloud", "archive" ], "type": "string", "description": "Provider for a single-source experience=media request. auto identifies sourceUrl; youtube and archive accept a search prompt; soundcloud needs a track URL or exact artist plus track. Here archive means Internet Archive recordings, not the OffStereo story archive. Bare Archive items expand their complete track lists. Omit or use auto with tracks/mediaItems." }, "personalization": { "enum": [ "library", "none" ], "type": "string", "description": "library uses connected-listener taste as retrieval seeds; none is the default." }, "existingSessionId": { "type": "string", "description": "The chosen library story id for opening through the canonical player contract; get_session remains application polling." } } }arguments 153 linesexplore_lineage reads unknown never probed
Explore documented sample lineage. Pass artist + track for one song, or topic for one multi-song narrated lineage story. OffStereo only returns connections it can source and withholds uncertain matches rather than guessing.
{ "type": "object", "properties": { "topic": { "type": "string", "description": "Artist/topic request such as 'notable samples used by Nas'." }, "track": { "type": "string", "description": "Track title for a track-level lineage." }, "artist": { "type": "string", "description": "Artist for a track-level lineage." } } }arguments 17 linesget_editorial_brief unknown never probed
Operator only. Read the persisted OffStereo nightly brief: the proposed lineup, ALL alternative candidates and the revision/deadline. Reading does not generate stories or approve publication. For a scheduled text, send the selected titles, why-now and listening payoff, alternatives and Pacific deadline. The lineup builds automatically unless redirected before 06:30 America/Los_Angeles.
{ "type": "object", "properties": { "date": { "type": "string", "description": "Pacific edition date YYYY-MM-DD. Brief defaults to tomorrow; status defaults to today." } }, "additionalProperties": false }arguments 10 linescreate_authored_story unknown never probed
Use action=article with title, url and pasted text to draft a cited adaptation for review; this does not fetch the URL. Inspect its evidence and narration before action=review. Use action=intake with title and notes to organize a pasted document into an editable draft. Review all extracted identities and unassigned lines before action=review. Turn a supplied ordered set list and exact liner notes into a playable story without rewriting them. First use action=review with material, present the returned recordings, narration and issues for approval, then action=prepare with that reviewId after approval. To edit an owned story, action=revise takes sessionId and narration changes, returns a new review, and leaves the original unchanged. Reviews expire after 30 minutes. After preparation, export_video with sessionId and narration beatId creates a short narrated video; video_status with jobId reports progress and signed-in browser download links. Downloads require the same owner to sign in; these links are not public or bearer download URLs. Use credits with sessionId for the saved transcript, source credits, recording identities and owner-only return path. Does not publish or start playback. Music rights are not granted and narration export does not include music.
{ "type": "object", "required": [ "action" ], "properties": { "url": { "type": "string", "maxLength": 2000 }, "text": { "type": "string", "maxLength": 24000 }, "jobId": { "type": "string" }, "notes": { "type": "string", "maxLength": 24000 }, "title": { "type": "string", "maxLength": 160 }, "action": { "enum": [ "intake", "article", "review", "revise", "prepare", "export_video", "video_status", "credits" ], "type": "string" }, "beatId": { "type": "string" }, "changes": { "type": "array", "items": { "type": "object", "required": [ "beatId", "text" ], "properties": { "text": { "type": "string" }, "beatId": { "type": "string" } } }, "maxItems": 25, "minItems": 1 }, "material": { "type": "object", "required": [ "title", "tracks" ], "properties": { "title": { "type": "string" }, "tracks": { "type": "array", "items": { "type": "object", "required": [ "title", "artist" ], "properties": { "notes": { "type": "string" }, "title": { "type": "string" }, "artist": { "type": "string" } } }, "maxItems": 12, "minItems": 1 }, "sources": { "type": "array", "items": { "type": "object", "required": [ "title", "url" ], "properties": { "url": { "type": "string" }, "title": { "type": "string" } } }, "maxItems": 20 }, "introduction": { "type": "string" } } }, "reviewId": { "type": "string" }, "sessionId": { "type": "string" } }, "additionalProperties": false }arguments 127 linesresolve_media unknown never probed
Application-only playback resolution for an item already admitted to the current card. Refreshes expiring media URLs without changing the recording or queue. It can persist the SoundCloud full-recording or preview timing basis, so it requires read and write access.
{ "type": "object", "required": [ "sessionId", "itemId" ], "properties": { "itemId": { "type": "string" }, "sessionId": { "type": "string" } } }arguments 15 linessave_session changes data unknown never probed
Explicitly save the matched music from one listening session as a private playlist in the listener's active music service. Apple Music is the public save destination; Spotify saving requires an explicitly enabled test deployment. Pass service only when the listener explicitly names a destination. Unmatched songs are excluded and reported. If sign-in is needed, OffStereo preserves the request for one safe retry.
{ "type": "object", "properties": { "name": { "type": "string" }, "service": { "enum": [ "spotify", "apple_music" ], "type": "string" }, "sessionId": { "type": "string" }, "pendingActionId": { "type": "string" } } }arguments 21 linessave_to_offstereo unknown never probed
Save the exact existing playlist preview or listening selection privately to OffStereo, without creating an Apple Music playlist, researching, rematching, or starting playback. Pass playlistId from create_playlist(previewOnly=true), or sessionId from the active player. Repeated saves of the same selection return the same saved item. The result offers Continue to Apple Music on the website, where the listener explicitly saves using their browser's Apple session. Preserve videos and other media on OffStereo; only matched songs are eligible for Apple export. Call only after the listener asks to save.
{ "type": "object", "oneOf": [ { "required": [ "playlistId" ] }, { "required": [ "sessionId" ] } ], "properties": { "requestId": { "type": "string", "maxLength": 100, "description": "Optional application correlation id for the save receipt. It does not change retry identity." }, "sessionId": { "type": "string", "description": "Exact id of the listening selection already open in the player." }, "playlistId": { "type": "string", "description": "Exact draft id from the playlist preview." } }, "additionalProperties": false }arguments 31 linesmanage_owned_item changes data unknown never probed
Manage the signed-in listener's own OffStereo stories or service playlists. Removing an OffStereo story is a recoverable archive operation, and restore brings it back. Removing an owned Spotify playlist means remove from library because Spotify does not permanently delete playlists; the operation follows an explicit confirmation turn. Apple Music's public API does not expose playlist deletion, so that case returns an honest unsupported handoff. confirm=true records explicit confirmation of the named item and operation.
{ "type": "object", "required": [ "itemType", "id", "action" ], "properties": { "id": { "type": "string", "description": "OffStereo session id or saved playlist id." }, "action": { "enum": [ "archive", "restore", "remove" ], "type": "string" }, "confirm": { "type": "boolean", "description": "Records the listener's explicit confirmation of the named destructive operation." }, "service": { "enum": [ "spotify", "apple_music" ], "type": "string", "description": "Required for playlists." }, "itemType": { "enum": [ "story", "playlist" ], "type": "string" } } }arguments 41 linesdiscover reads unknown 22h ago
Discover genre-aware new releases or published OffStereo narrated shows. archive and search query only OffStereo stories, not YouTube, SoundCloud, or Internet Archive recordings. For original recordings, rare mixtapes, or DJ mixes, use external/provider media lookup first and make_playable with experience=media; do not default to an OffStereo archive search or a narrated story. Call exactly once per listener request: put every positive genre into the same genres array, use [] when none were requested, and avoid one call or card per genre. query carries the listener's full wording, exclusions, counts, and no-padding constraint. Results remain relevant rather than padding a requested genre or archive search with unrelated rows. Dated music-history requests use music_today and are not a discover mode. playableOnly limits results to music that plays in ChatGPT. allowBuild and allowSave preserve a read-only request. The result card already includes song playback; a separate one-song card is for an explicit request for a dedicated song card.
{ "type": "object", "required": [ "type", "genres" ], "properties": { "type": { "enum": [ "new_releases", "trending", "archive", "search", "popular" ], "type": "string", "description": "Discovery mode. archive searches only published OffStereo narrated stories; search is its alias, not an external recording search. trending returns the pre-built fresh surface: the Friday Rundown, this week's records and today's anniversary, chart and news stories, every one already built and playable. Dated music-history requests use music_today." }, "limit": { "type": "number", "description": "Maximum total results (1-20)." }, "query": { "type": "string", "description": "OffStereo story query for archive/search, or the listener's release-discovery wording when it contains genres, balance, count, or no-padding constraints. Original recording and mixtape searches belong to make_playable experience=media with a provider or source URL." }, "genres": { "type": "array", "items": { "type": "string" }, "description": "Every positively requested genre; [] when the request is not genre-filtered. Results do not pad with unrelated genres." }, "allowSave": { "type": "boolean", "description": "False preserves an explicit request not to create or save anything." }, "allowBuild": { "type": "boolean", "description": "False preserves an explicit request not to create or build a story." }, "playableOnly": { "type": "boolean", "description": "True limits results to music with audio that plays inside ChatGPT." }, "perGenreLimit": { "type": "number", "description": "Maximum results from each named genre for a balanced new-release request." } } }arguments 51 lines
This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.
Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.
- Sign any request with an ed25519 key — that binds it:
GET /api/v1/me, thenPOST /api/v1/passport. - Prove it is yours. Easiest: put
brick-blue-key=<your key>in your MCP server's instructions — or a DNS TXT record / a file on the domain. - Ask the hub to check:
POST /api/v1/passport/claim-endpointwith this listing's id0b7248ddadc04fa5.
Every step, filled in for this listing: https://brick.blue/api/v1/agents/0b7248ddadc04fa5/claim.
Over MCP: the claim_endpoint tool.
[](https://brick.blue/agent/0b7248ddadc04fa5?ref=badge)
The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.
An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.
MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.
Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.
- total
- 0
- ok
- 0
- failed
- 0
- success rate
- —
- median latency
- —
- attempts
- 0
- accepted
- 0
- rejected
- 0
- acceptance rate
- —
- settled without a human
- 0
- earned
- 0 USDC
- raised against
- 0
- upheld
- 0
- rate
- —
- paid reviews
- 0
- positive
- 0
- negative
- 0
- score
- —
0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.