Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

OffStereo

REMOTE · WWW.OFFSTEREO.COM · SCANNED SEP 20

Builds narrated, playable music stories, explores sample lineage, and saves verified playlists.

+3 this week 71 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security63
Transport & Reachability100
Schema Quality & AI Usability87
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Tool/resource definitions use about 6682 tokens (~39/item across 170 items; 12 tools + 158 resources), lean.Pass
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management33
  • Stability observed for 10 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage94
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 79% of tool parameters carry a description.Partial
  • Structured output schemas are declared (92% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 12 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 13 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities47
  • Spec-recency check failed: implements MCP spec 2024-11-05; the latest is 2026-07-28. See how to fix → Fail
  • Supports UI / widget rendering.Pass
Install

How do I install the OffStereo MCP server?

OffStereo is a hosted endpoint at https://www.offstereo.com/api/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · www.offstereo.com

# add to Claude Code
claude mcp add --transport http andzar22-offstereo 'https://www.offstereo.com/api/mcp'
// .cursor/mcp.json
{
  "mcpServers": {
    "andzar22-offstereo": {
      "url": "https://www.offstereo.com/api/mcp"
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "andzar22-offstereo": {
      "type": "http",
      "url": "https://www.offstereo.com/api/mcp"
    }
  }
}
# ~/.codex/config.toml
[mcp_servers.andzar22-offstereo]
url = "https://www.offstereo.com/api/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "andzar22-offstereo": {
      "type": "remote",
      "url": "https://www.offstereo.com/api/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add andzar22-offstereo --url 'https://www.offstereo.com/api/mcp' --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  andzar22-offstereo:
    url: "https://www.offstereo.com/api/mcp"
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "andzar22-offstereo": {
      "Transport": "http",
      "Url": "https://www.offstereo.com/api/mcp"
    }
  }
}
# add to Vellum
assistant mcp add andzar22-offstereo -t streamable-http -u 'https://www.offstereo.com/api/mcp'
// mcp.json
{
  "mcpServers": {
    "andzar22-offstereo": {
      "type": "http",
      "url": "https://www.offstereo.com/api/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 20 Sept 26 +1
    • Resource “OffStereo Spotify episode” now points somewhere else: ui://widget/offstereo-episode-v3.html → ui://widget/offstereo-episode-v1.html security
    • Resource “OffStereo Spotify episode” now points somewhere else: ui://widget/offstereo-episode-v2.html → ui://widget/offstereo-episode-v1.html security
    • Resource “OffStereo Spotify episode” now points somewhere else: ui://widget/offstereo-episode-v5.html → ui://widget/offstereo-episode-v1.html security
    • Resource “OffStereo Spotify episode” now points somewhere else: ui://widget/offstereo-episode-v4.html → ui://widget/offstereo-episode-v1.html security
    • Resource “OffStereo archive” now points somewhere else: ui://widget/offstereo-archive-v10.html → ui://widget/offstereo-archive-v9.html security
    • Resource “OffStereo archive” now points somewhere else: ui://widget/offstereo-archive-v3.html → ui://widget/offstereo-archive-v9.html security
    • Resource “OffStereo archive” now points somewhere else: ui://widget/offstereo-archive-v5.html → ui://widget/offstereo-archive-v9.html security
    • Resource “OffStereo archive” now points somewhere else: ui://widget/offstereo-archive-v6.html → ui://widget/offstereo-archive-v9.html security
    • Resource “OffStereo archive” now points somewhere else: ui://widget/offstereo-archive-v8.html → ui://widget/offstereo-archive-v9.html security
    • Resource “OffStereo archive” now points somewhere else: ui://widget/offstereo-archive-v12.html → ui://widget/offstereo-archive-v9.html security
    • Resource “OffStereo archive” now points somewhere else: ui://widget/offstereo-archive-v11.html → ui://widget/offstereo-archive-v9.html security
    • Resource “OffStereo archive” now points somewhere else: ui://widget/offstereo-archive.html → ui://widget/offstereo-archive-v9.html security
    • Resource “OffStereo archive” now points somewhere else: ui://widget/offstereo-archive-v2.html → ui://widget/offstereo-archive-v9.html security
    • Resource “OffStereo archive” now points somewhere else: ui://widget/offstereo-archive-v7.html → ui://widget/offstereo-archive-v9.html security
    • Resource “OffStereo archive” now points somewhere else: ui://widget/offstereo-archive-v4.html → ui://widget/offstereo-archive-v9.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v15.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v5.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v30.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v32.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v14.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v13.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v12.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v19.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v10.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v16.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v11.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v9.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v8.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v7.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v6.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v31.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v4.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v3.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v2.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v21.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v22.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v18.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v29.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v27.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v28.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v26.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v25.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v24.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v23.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v17.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo library” now points somewhere else: ui://widget/offstereo-library-v21.html → ui://widget/offstereo-library-v14.html security
    • Resource “OffStereo library” now points somewhere else: ui://widget/offstereo-library-v15.html → ui://widget/offstereo-library-v14.html security
    • Resource “OffStereo library” now points somewhere else: ui://widget/offstereo-library-v22.html → ui://widget/offstereo-library-v14.html security
    • Resource “OffStereo library” now points somewhere else: ui://widget/offstereo-library-v11.html → ui://widget/offstereo-library-v14.html security
    • Resource “OffStereo library” now points somewhere else: ui://widget/offstereo-library-v12.html → ui://widget/offstereo-library-v14.html security
    • Resource “OffStereo library” now points somewhere else: ui://widget/offstereo-library-v10.html → ui://widget/offstereo-library-v14.html security
    • Resource “OffStereo library” now points somewhere else: ui://widget/offstereo-library-v9.html → ui://widget/offstereo-library-v14.html security
    • Resource “OffStereo library” now points somewhere else: ui://widget/offstereo-library-v8.html → ui://widget/offstereo-library-v14.html security
    • Resource “OffStereo library” now points somewhere else: ui://widget/offstereo-library-v13.html → ui://widget/offstereo-library-v14.html security
    • Resource “OffStereo library” now points somewhere else: ui://widget/offstereo-library-v7.html → ui://widget/offstereo-library-v14.html security
    • Resource “OffStereo library” now points somewhere else: ui://widget/offstereo-library-v6.html → ui://widget/offstereo-library-v14.html security
    • Resource “OffStereo library” now points somewhere else: ui://widget/offstereo-library-v5.html → ui://widget/offstereo-library-v14.html security
    • Resource “OffStereo library” now points somewhere else: ui://widget/offstereo-library-v4.html → ui://widget/offstereo-library-v14.html security
    • Resource “OffStereo library” now points somewhere else: ui://widget/offstereo-library-v3.html → ui://widget/offstereo-library-v14.html security
    • Resource “OffStereo library” now points somewhere else: ui://widget/offstereo-library-v2.html → ui://widget/offstereo-library-v14.html security
    • Resource “OffStereo library” now points somewhere else: ui://widget/offstereo-library-v1.html → ui://widget/offstereo-library-v14.html security
    • Resource “OffStereo library” now points somewhere else: ui://widget/offstereo-library-v20.html → ui://widget/offstereo-library-v14.html security
    • Resource “OffStereo library” now points somewhere else: ui://widget/offstereo-library-v19.html → ui://widget/offstereo-library-v14.html security
    • Resource “OffStereo library” now points somewhere else: ui://widget/offstereo-library-v18.html → ui://widget/offstereo-library-v14.html security
    • Resource “OffStereo library” now points somewhere else: ui://widget/offstereo-library-v17.html → ui://widget/offstereo-library-v14.html security
    • Resource “OffStereo library” now points somewhere else: ui://widget/offstereo-library-v16.html → ui://widget/offstereo-library-v14.html security
    • Resource “OffStereo lineage player” now points somewhere else: ui://widget/offstereo-lineage-v8.html → ui://widget/offstereo-lineage-v9.html security
    • Resource “OffStereo lineage player” now points somewhere else: ui://widget/offstereo-lineage-v10.html → ui://widget/offstereo-lineage-v9.html security
    • Resource “OffStereo lineage player” now points somewhere else: ui://widget/offstereo-lineage-v6.html → ui://widget/offstereo-lineage-v9.html security
    • Resource “OffStereo lineage player” now points somewhere else: ui://widget/offstereo-lineage-v5.html → ui://widget/offstereo-lineage-v9.html security
    • Resource “OffStereo lineage player” now points somewhere else: ui://widget/offstereo-lineage-v4.html → ui://widget/offstereo-lineage-v9.html security
    • Resource “OffStereo lineage player” now points somewhere else: ui://widget/offstereo-lineage-v3.html → ui://widget/offstereo-lineage-v9.html security
    • Resource “OffStereo lineage player” now points somewhere else: ui://widget/offstereo-lineage-v2.html → ui://widget/offstereo-lineage-v9.html security
    • Resource “OffStereo lineage player” now points somewhere else: ui://widget/offstereo-lineage-v12.html → ui://widget/offstereo-lineage-v9.html security
    • Resource “OffStereo lineage player” now points somewhere else: ui://widget/offstereo-lineage-v13.html → ui://widget/offstereo-lineage-v9.html security
    • Resource “OffStereo lineage player” now points somewhere else: ui://widget/offstereo-lineage-v7.html → ui://widget/offstereo-lineage-v9.html security
    • Resource “OffStereo lineage player” now points somewhere else: ui://widget/offstereo-lineage-v14.html → ui://widget/offstereo-lineage-v9.html security
    • Resource “OffStereo lineage player” now points somewhere else: ui://widget/offstereo-lineage-v11.html → ui://widget/offstereo-lineage-v9.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v13.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v34.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v44.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v14.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v15.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v16.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v17.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-show-player.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v40.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v39.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v38.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v37.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v18.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v11.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v10.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v26.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v9.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v28.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v29.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v8.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v35.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v12.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v33.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v25.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v36.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v24.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v7.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v30.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v6.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v5.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v23.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v22.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v21.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v20.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v19.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v4.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v2.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v41.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v42.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v43.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v31.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v45.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo player” now points somewhere else: ui://widget/offstereo-player-v32.html → ui://widget/offstereo-player-v27.html security
    • Resource “OffStereo playlist” now points somewhere else: ui://widget/offstereo-playlist-v26.html → ui://widget/offstereo-playlist-v21.html security
    • Resource “OffStereo playlist” now points somewhere else: ui://widget/offstereo-playlist-v14.html → ui://widget/offstereo-playlist-v21.html security
    • Resource “OffStereo playlist” now points somewhere else: ui://widget/offstereo-playlist-v13.html → ui://widget/offstereo-playlist-v21.html security
    • Resource “OffStereo playlist” now points somewhere else: ui://widget/offstereo-playlist-v12.html → ui://widget/offstereo-playlist-v21.html security
    • Resource “OffStereo playlist” now points somewhere else: ui://widget/offstereo-playlist-v11.html → ui://widget/offstereo-playlist-v21.html security
    • Resource “OffStereo playlist” now points somewhere else: ui://widget/offstereo-playlist-v10.html → ui://widget/offstereo-playlist-v21.html security
    • Resource “OffStereo playlist” now points somewhere else: ui://widget/offstereo-playlist-v8.html → ui://widget/offstereo-playlist-v21.html security
    • Resource “OffStereo playlist” now points somewhere else: ui://widget/offstereo-playlist-v9.html → ui://widget/offstereo-playlist-v21.html security
    • Resource “OffStereo playlist” now points somewhere else: ui://widget/offstereo-playlist-v7.html → ui://widget/offstereo-playlist-v21.html security
    • Resource “OffStereo playlist” now points somewhere else: ui://widget/offstereo-playlist-v17.html → ui://widget/offstereo-playlist-v21.html security
    • Resource “OffStereo playlist” now points somewhere else: ui://widget/offstereo-playlist-v6.html → ui://widget/offstereo-playlist-v21.html security
    • Resource “OffStereo playlist” now points somewhere else: ui://widget/offstereo-playlist-v5.html → ui://widget/offstereo-playlist-v21.html security
    • Resource “OffStereo playlist” now points somewhere else: ui://widget/offstereo-playlist-v4.html → ui://widget/offstereo-playlist-v21.html security
    • Resource “OffStereo playlist” now points somewhere else: ui://widget/offstereo-playlist-v3.html → ui://widget/offstereo-playlist-v21.html security
    • Resource “OffStereo playlist” now points somewhere else: ui://widget/offstereo-playlist-v2.html → ui://widget/offstereo-playlist-v21.html security
    • Resource “OffStereo playlist” now points somewhere else: ui://widget/offstereo-playlist-v18.html → ui://widget/offstereo-playlist-v21.html security
    • Resource “OffStereo playlist” now points somewhere else: ui://widget/offstereo-playlist.html → ui://widget/offstereo-playlist-v21.html security
    • Resource “OffStereo playlist” now points somewhere else: ui://widget/offstereo-playlist-v23.html → ui://widget/offstereo-playlist-v21.html security
    • Resource “OffStereo playlist” now points somewhere else: ui://widget/offstereo-playlist-v24.html → ui://widget/offstereo-playlist-v21.html security
    • Resource “OffStereo playlist” now points somewhere else: ui://widget/offstereo-playlist-v25.html → ui://widget/offstereo-playlist-v21.html security
    • Resource “OffStereo playlist” now points somewhere else: ui://widget/offstereo-playlist-v27.html → ui://widget/offstereo-playlist-v21.html security
    • Resource “OffStereo playlist” now points somewhere else: ui://widget/offstereo-playlist-v19.html → ui://widget/offstereo-playlist-v21.html security
    • Resource “OffStereo playlist” now points somewhere else: ui://widget/offstereo-playlist-v28.html → ui://widget/offstereo-playlist-v21.html security
    • Resource “OffStereo playlist” now points somewhere else: ui://widget/offstereo-playlist-v20.html → ui://widget/offstereo-playlist-v21.html security
    • Resource “OffStereo playlist” now points somewhere else: ui://widget/offstereo-playlist-v29.html → ui://widget/offstereo-playlist-v21.html security
    • Resource “OffStereo playlist” now points somewhere else: ui://widget/offstereo-playlist-v30.html → ui://widget/offstereo-playlist-v21.html security
    • Resource “OffStereo playlist” now points somewhere else: ui://widget/offstereo-playlist-v32.html → ui://widget/offstereo-playlist-v21.html security
    • Resource “OffStereo playlist” now points somewhere else: ui://widget/offstereo-playlist-v31.html → ui://widget/offstereo-playlist-v21.html security
    • Resource “OffStereo playlist” now points somewhere else: ui://widget/offstereo-playlist-v33.html → ui://widget/offstereo-playlist-v21.html security
  • 19 Sept 26 0

    We did not load change detail this far back for this component, so this day may have recorded more than is shown.

    • Resource “OffStereo Spotify episode” now points somewhere else: ui://widget/offstereo-episode-v3.html → ui://widget/offstereo-episode-v1.html security
    • Resource “OffStereo Spotify episode” now points somewhere else: ui://widget/offstereo-episode-v2.html → ui://widget/offstereo-episode-v1.html security
    • Resource “OffStereo Spotify episode” now points somewhere else: ui://widget/offstereo-episode-v5.html → ui://widget/offstereo-episode-v1.html security
    • Resource “OffStereo Spotify episode” now points somewhere else: ui://widget/offstereo-episode-v4.html → ui://widget/offstereo-episode-v1.html security
    • Resource “OffStereo archive” now points somewhere else: ui://widget/offstereo-archive-v10.html → ui://widget/offstereo-archive-v9.html security
    • Resource “OffStereo archive” now points somewhere else: ui://widget/offstereo-archive-v3.html → ui://widget/offstereo-archive-v9.html security
    • Resource “OffStereo archive” now points somewhere else: ui://widget/offstereo-archive-v5.html → ui://widget/offstereo-archive-v9.html security
    • Resource “OffStereo archive” now points somewhere else: ui://widget/offstereo-archive-v6.html → ui://widget/offstereo-archive-v9.html security
    • Resource “OffStereo archive” now points somewhere else: ui://widget/offstereo-archive-v8.html → ui://widget/offstereo-archive-v9.html security
    • Resource “OffStereo archive” now points somewhere else: ui://widget/offstereo-archive-v12.html → ui://widget/offstereo-archive-v9.html security
    • Resource “OffStereo archive” now points somewhere else: ui://widget/offstereo-archive-v11.html → ui://widget/offstereo-archive-v9.html security
    • Resource “OffStereo archive” now points somewhere else: ui://widget/offstereo-archive.html → ui://widget/offstereo-archive-v9.html security
    • Resource “OffStereo archive” now points somewhere else: ui://widget/offstereo-archive-v2.html → ui://widget/offstereo-archive-v9.html security
    • Resource “OffStereo archive” now points somewhere else: ui://widget/offstereo-archive-v7.html → ui://widget/offstereo-archive-v9.html security
    • Resource “OffStereo archive” now points somewhere else: ui://widget/offstereo-archive-v4.html → ui://widget/offstereo-archive-v9.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v15.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v5.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v30.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v32.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v14.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v13.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v12.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v19.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v10.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v16.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v11.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v9.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v8.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v7.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v6.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v31.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v4.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v3.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v2.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v21.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v22.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v18.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v29.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v27.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v28.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v26.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v25.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v24.html → ui://widget/offstereo-discovery-v20.html security
    • Resource “OffStereo discovery” now points somewhere else: ui://widget/offstereo-discovery-v23.html → ui://widget/offstereo-discovery-v20.html security
    • Tool coverage: 100% → 92% functional
    • New tool “get_story_audio” functional
    • “make_playable” added an optional parameter “resumeShowId” cosmetic
  • 18 Sept 26 +1

    We did not load change detail this far back for this component, so this day may have recorded more than is shown.

  • 15 Sept 26 +1

    We did not load change detail this far back for this component, so this day may have recorded more than is shown.

  • 13 Sept 26 +1

    We did not load change detail this far back for this component, so this day may have recorded more than is shown.

  • 11 Sept 26 +1

    We did not load change detail this far back for this component, so this day may have recorded more than is shown.

  • 10 Sept 26 66

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 20 Sept 2026 · Probed https://www.offstereo.com/api/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=www.offstereo.com CN=YE2,O=Let's Encrypt,C=US 7 Sept 2026 6 Dec 2026 ECDSA 256 ECDSA-SHA384 6cbe9a1f9455339767dedd18ec1376a789b
SANs: www.offstereo.com
CN=YE2,O=Let's Encrypt,C=US (CA) CN=Root YE,O=ISRG,C=US 3 Sept 2025 2 Sept 2028 ECDSA 384 ECDSA-SHA384 4df3b15dd6c0784c507cd37b58e6f115
CN=Root YE,O=ISRG,C=US (CA) CN=ISRG Root X2,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 ECDSA-SHA384 872165fc34b6e5fba8add5b3705fb53a
CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) CN=ISRG Root X1,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 SHA256-RSA 6c8f1dc727c7117f7baf853ac980f9cd

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of www.offstereo.com. Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
com. present 19718 13 Verified
offstereo.com. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
strict-transport-security max-age=63072000; includeSubDomains

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://www.offstereo.com/api/mcp Verified 200
http (plaintext) http://www.offstereo.com/api/mcp HTTPS enforced 301 https://www.offstereo.com:443/api/mcp
MCP tools · 12 exposed · ~2,822 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
create_playlist ~403

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. After explicit approval, previewOnly=false with the approved tracks and the same concise editorial name creates one private playlist in the listener's active music service. Pass service only when the listener explicitly names Spotify or Apple Music. 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.

NameTypeReqDescription
allowSecondPlaylistbooleanTrue 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.
countnumberTarget song count for prompt-generated playlists (1-50, default 20).
namestringA concise editorial playlist title. Omit it when the listener did not supply a title; OffStereo derives one from the prompt.
pendingActionIdstringRetry token returned by a prior auth_required result.
previewOnlybooleanResolve 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.
promptstringA conceptual playlist request, e.g. 'connect A Tribe Called Quest to Steely Dan'.
requiredArtistsarrayEvery artist the user explicitly requires, especially endpoints in a request such as 'from Minnie Riperton to Solange'. OffStereo validates these before creating anything.
servicestringDestination service. Pass only when the listener explicitly names one; otherwise OffStereo uses the active service on their account.
tracksarray
NameTypeReqDescription
actionsarray
appleMusicobject
authReasonstring
connectUrlstringSign-in URL when status is auth_required.
connectionsobject
idstring
messagestring
objectstringyesAlways 'playlist'.
pendingActionIdstringRetry token for a safe re-call after sign-in.
privacyobjectRequested vs. confirmed privacy state.
retryToolstring
servicestring
spotifyobject
statusstringyespreview, created, partial, auth_required, or failed.
titlestring
tracksarray
unresolvedarraySongs that could not be confidently matched.
warningsarray
webUrlstring

No examples provided.

discover ~328

Discover genre-aware new releases, strong public-archive matches, or popular OffStereo shows. 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.

NameTypeReqDescription
allowBuildbooleanFalse preserves an explicit request not to create or build a story.
allowSavebooleanFalse preserves an explicit request not to create or save anything.
genresarrayyesEvery positively requested genre; [] when the request is not genre-filtered. Results do not pad with unrelated genres.
limitnumberMaximum total results (1-20).
perGenreLimitnumberMaximum results from each named genre for a balanced new-release request.
playableOnlybooleanTrue limits results to music with audio that plays inside ChatGPT.
querystringArchive query, or the listener's release-discovery wording when it contains genres, balance, count, or no-padding constraints.
typestringyesDiscovery mode. search aliases archive; dated music-history requests use music_today.
NameTypeReqDescription
actionsarray
allowBuildboolean
allowSaveboolean
archiveUrlstring
datestringISO date for music-today results.
eventsarrayDated music-history events (music-today).
exactarrayStrong archive matches (show_search).
idstring
matchedGenresarray
notestring
objectstringyesdiscovery or show_search.
playableOnlyboolean
querystring
recentarray
relatedarray
releasesarrayNew releases (new_releases mode).
requestedGenresarray
sectionsarray
showsarrayRelated playable OffStereo shows.
statusstringyes
titlestring
webUrlstring

No examples provided.

explore_lineage ~95

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.

NameTypeReqDescription
artiststringArtist for a track-level lineage.
topicstringArtist/topic request such as 'notable samples used by Nas'.
trackstringTrack title for a track-level lineage.
NameTypeReqDescription
actionsarray
activeBranchobject|null
chaptersarray
citationsarray
descriptionstring
idstringyesStable session id, reused for get_session and steer_session.
modestring
nowPlayingContextobject|null
objectstringyesplayable_session, lineage, or lineage_show.
playbackDirectiveobjectOne-shot transport request the mounted card applies.
progressobjectCurrent build stage and message.
queuearrayOrdered narration and track items.
queueUpdateobjectMost recent model-authored queue change.
resumeStackarray
statusstringyesLifecycle: building, partial, ready, failed, and similar.
storyScopeobject|nullCount-level result assessment.
thesisstring
titlestringyes
warningsarray
webLabelstring|null
webUrlstring|null

No examples provided.

get_session ~59

Application polling for an already-mounted OffStereo card. It refreshes one PlayableSession in place. A selected library story opens through make_playable(existingSessionId), while playback and contextual follow-ups use steer_session.

NameTypeReqDescription
sessionIdstringyes
NameTypeReqDescription
actionsarray
activeBranchobject|null
chaptersarray
citationsarray
descriptionstring
idstringyesStable session id, reused for get_session and steer_session.
modestring
nowPlayingContextobject|null
objectstringyesplayable_session, lineage, or lineage_show.
playbackDirectiveobjectOne-shot transport request the mounted card applies.
progressobjectCurrent build stage and message.
queuearrayOrdered narration and track items.
queueUpdateobjectMost recent model-authored queue change.
resumeStackarray
statusstringyesLifecycle: building, partial, ready, failed, and similar.
storyScopeobject|nullCount-level result assessment.
thesisstring
titlestringyes
warningsarray
webLabelstring|null
webUrlstring|null

No examples provided.

get_story_audio ~206

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.

NameTypeReqDescription
showIdstringThe show id, from find_shows, make_playable or get_show.
slugstringThe show's slug, as find_shows returns it. Use either this or showId.

No output schema declared.

No examples provided.

make_playable ~697

Create one playable OffStereo card for a direct standalone-song or narrated-story request. Discovery and Music Today already play their songs, so keep those results in their original card unless the listener asks for dedicated controls. experience=single_track returns exactly one recording with no narration or library save; pass artist plus track. experience=story progressively creates a sourced story; mode=fresh starts a new build. Pass artist plus album for an exact record and trackCount for an exact requested length. Spotify, Apple Music, and SoundCloud URLs are story seeds unless the listener requests only the recording. Playlist requests use create_playlist. existingSessionId opens a selected library story; get_session is reserved for card polling. The mounted card owns live progress and playback. Assistant prose should avoid restating transient stages such as building, recording, or still working because they become stale as the card updates, and should wait for Ready before stating final counts. A tool call opens the card without starting playback.

NameTypeReqDescription
albumstringExact album or EP title, paired with artist when the listener names or shows a specific record.
artiststringExact artist, paired with track for a one-song card or with album for an album-focused story.
existingSessionIdstringThe chosen library story id for opening through the canonical player contract; get_session remains application polling.
experiencestringsingle_track means one immediate song card with no narration or story creation; story means the full progressive narrated experience.
lengthstringshort fits an explicitly quick, brief, or concise narrated story and targets three narration-and-record chapters; standard keeps the full editorial arc.
modestringfresh starts an explicitly new story; auto may reuse an exact strong match.
personalizationstringlibrary uses connected-listener taste as retrieval seeds; none is the default.
promptstringWhat the listening experience should explain.
resumeShowIdstringRebuild 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 belon…
sourceTextstringSource text or conversation context to adapt.
sourceUrlstringAn http(s) article or source URL to adapt.
titlestringShort canonical artist, track, album, or subject title for the card, especially useful for an identified image or a prompt that also contains workflow instructions.
trackstringExact song title, paired with artist for reliable single_track matching.
trackCountnumberExact number of songs requested for a narrated story (2-12). Use 1 with experience=single_track.
tracksarrayOptional: exact records the story should always include as playable tracks — e.g. every song a paired video names. They are pinned into the show in this order and curation fills the remaining slots u…
videoModebooleanWhen 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, a…
NameTypeReqDescription
actionsarray
activeBranchobject|null
chaptersarray
citationsarray
descriptionstring
idstringyesStable session id, reused for get_session and steer_session.
modestring
nowPlayingContextobject|null
objectstringyesplayable_session, lineage, or lineage_show.
playbackDirectiveobjectOne-shot transport request the mounted card applies.
progressobjectCurrent build stage and message.
queuearrayOrdered narration and track items.
queueUpdateobjectMost recent model-authored queue change.
resumeStackarray
statusstringyesLifecycle: building, partial, ready, failed, and similar.
storyScopeobject|nullCount-level result assessment.
thesisstring
titlestringyes
warningsarray
webLabelstring|null
webUrlstring|null

No examples provided.

manage_owned_item ~157

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.

NameTypeReqDescription
actionstringyes
confirmbooleanRecords the listener's explicit confirmation of the named destructive operation.
idstringyesOffStereo session id or saved playlist id.
itemTypestringyes
servicestringRequired for playlists.
NameTypeReqDescription
actionstring
authReasonstring
connectUrlstring
idstring
itemTypestring
messagestring
objectstringyesAlways 'item_management'.
recoverableboolean
servicestring
statusstringyesconfirmation_required, archived, restored, removed_from_library, unsupported, or auth_required.
titlestring
webUrlstring

No examples provided.

music_today ~285

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.

NameTypeReqDescription
allowBuildbooleanFalse preserves an explicit request not to create or build a story.
allowSavebooleanFalse preserves an explicit request not to create or save anything.
datestringISO date YYYY-MM-DD for dateMode=explicit; absent for dateMode=today.
dateModestringyestoday represents the listener's current day; explicit represents one named calendar date.
limitnumberMaximum total results across the already-combined response (1-20, default 8). Honor an explicit result count.
playableOnlybooleanTrue limits music-history results to rows with audio playable in ChatGPT.
NameTypeReqDescription
actionsarray
allowBuildboolean
allowSaveboolean
archiveUrlstring
datestringISO date for music-today results.
eventsarrayDated music-history events (music-today).
exactarrayStrong archive matches (show_search).
idstring
matchedGenresarray
notestring
objectstringyesdiscovery or show_search.
playableOnlyboolean
querystring
recentarray
relatedarray
releasesarrayNew releases (new_releases mode).
requestedGenresarray
sectionsarray
showsarrayRelated playable OffStereo shows.
statusstringyes
titlestring
webUrlstring

No examples provided.

my_offstereo ~56

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.

NameTypeReqDescription
limitnumberShows to return (1-50).
NameTypeReqDescription
actionsarray
idstring
objectstringyesAlways 'library'.
showsarrayyes
statusstring
titlestring

No examples provided.

prepare_episode ~132

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.

NameTypeReqDescription
sessionIdstringyesThe completed OffStereo story id from the active player or the listener's library.
NameTypeReqDescription
chaptersarrayFinal reconciled chapter markers.
desktopHandoffobjectA ready-to-forward request for a desktop agent to finish the private save.
howToPublishobjectEditorial, audio, safety, and step-by-step publish guidance.
includedTracksarray
notestring
objectstringyesAlways 'spotify_episode'.
omittedTracksarraySongs disclosed as omitted from the timeline.
publishStateobjectIdempotent publish receipt location and resume rules.
requiresobjectExternal dependencies the caller provides: the save-to-spotify CLI and network access, with install and source details.
showobjectThe finished episode: id, title, description, coverUrl, episodeAudioUrl, durationMs, and audio metadata.
spotifyTargetobjectTarget Spotify show identity and settings.
statusstringyesAlways 'prepared'.
timelineobjectOrdered timeline items plus completeness and chapter status.

No examples provided.

save_session ~98

Explicitly save the matched music from one listening session as a private playlist in the listener's active music service. Pass service only when the listener explicitly names Spotify or Apple Music. Unmatched songs are excluded and reported. If sign-in is needed, OffStereo preserves the request for one safe retry.

NameTypeReqDescription
namestring
pendingActionIdstring
servicestring
sessionIdstring
NameTypeReqDescription
actionsarray
appleMusicobject
authReasonstring
connectUrlstringSign-in URL when status is auth_required.
connectionsobject
idstring
messagestring
objectstringyesAlways 'playlist'.
pendingActionIdstringRetry token for a safe re-call after sign-in.
privacyobjectRequested vs. confirmed privacy state.
retryToolstring
servicestring
spotifyobject
statusstringyespreview, created, partial, auth_required, or failed.
titlestring
tracksarray
unresolvedarraySongs that could not be confidently matched.
warningsarray
webUrlstring

No examples provided.

steer_session ~306

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.

NameTypeReqDescription
acknowledgeDirectiveIdstringMounted-card acknowledgement for the exact one-shot playback directive it has finished applying. Periodic cursor syncs omit this field.
activeItemIdstring
instructionstringyes
playbackStatestring
positionMsnumber
queueTrackobjectOne 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.
sessionIdstring
NameTypeReqDescription
actionsarray
activeBranchobject|null
chaptersarray
citationsarray
descriptionstring
idstringyesStable session id, reused for get_session and steer_session.
modestring
nowPlayingContextobject|null
objectstringyesplayable_session, lineage, or lineage_show.
playbackDirectiveobjectOne-shot transport request the mounted card applies.
progressobjectCurrent build stage and message.
queuearrayOrdered narration and track items.
queueUpdateobjectMost recent model-authored queue change.
resumeStackarray
statusstringyesLifecycle: building, partial, ready, failed, and similar.
storyScopeobject|nullCount-level result assessment.
thesisstring
titlestringyes
warningsarray
webLabelstring|null
webUrlstring|null

No examples provided.

Common questions

What is the OffStereo MCP server?

OffStereo is an MCP server listed in the public MCP registry as io.github.andzar22/offstereo. Builds narrated, playable music stories, explores sample lineage, and saves verified playlists. This page covers its hosted endpoint (https://www.offstereo.com/api/mcp).

Is the OffStereo MCP server safe to use?

OffStereo scores 71 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the OffStereo MCP server expose?

OffStereo exposes 12 tools: make_playable, get_session, steer_session, discover, music_today, and 7 more. Their descriptions and schemas cost roughly 2,822 tokens of context every time the server is loaded.

Does the OffStereo MCP server require authentication?

No. We connected to OffStereo without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the OffStereo MCP server still maintained?

OffStereo is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.