Reported issues for Spotify MCP by NovaLux12
Pod holds 24 of 316 GitHub reports that passed its relevance review. This can include external user reports, maintainer-confirmed bugs, and concrete feature gaps. Treat them as evidence to inspect, not a count of distinct defects.
Back to Spotify MCP by NovaLux12.
Most discussed
bug(episodes): mark_episode_played is a phantom tool — nonexistent endpoint, swallows 404s, reports ok:true
Summary
mark_episode_played is a phantom tool: it calls an endpoint that does not exist in the Spotify Web API, swallows every failure, and reports ok: true — so agents believe episodes were marked played when nothing happened at all.
Evidence
src/tools/episodemgmt.ts (shipped in v1.22.0, tracked as completed issue #187):
// Primary attempt: PUT /me/episodes/{id} is not documented; try POST to mark via player
for (const id of ids) {
try {
await client.put(`/me/episode
[Read the thread](https://github.com/NovaLux12/spotify-mcp-server/issues/230) · 2026-08-26 · closed · 2 comments
### distribution: trusted-publishing cutover + GitHub App release tokens + Glama/metadata optimization
## Context
NpmReleaseResearch + RegistryOptimization sweeps. Maintainer decisions needed:
### npm (research recommendation)
- Migrate NPM_TOKEN secret → **npm trusted publishing** (OIDC): eliminates the long-lived secret, adds SLSA provenance automatically; requires one-time config on npmjs.com (package settings → Publishing access → GitHub Actions, repo/workflow pinning). Then remove NODE_AUTH_TOKEN and add --provenance to publish.
- Replace GITHUB_TOKEN in release.yml with an **actions/create
[Read the thread](https://github.com/NovaLux12/spotify-mcp-server/issues/113) · 2026-08-25 · closed · 2 comments
### mcp-patterns port: resource templates, completions, scope-aware hiding, elicitation confirmations
## Context
McpPatterns survey (provenance URLs in session report). Ranked portable patterns:
1. **RFC-6570 resource templates** over single-get endpoints (spotify://artist/{id}, /show/{id}/episodes, /audiobook/{id}/chapters...) — S. ResourceExpansion report has the full template table + TTL-cache notes.
2. **Argument/resource completions** — playlist names→IDs, device names→IDs (SDK ResourceTemplate complete callbacks) — S.
3. **Scope-aware tool hiding + SPOTIFY_READONLY=1** (GitHub MCP pattern
[Read the thread](https://github.com/NovaLux12/spotify-mcp-server/issues/111) · 2026-08-25 · closed · 2 comments
### feat: collab_mix_from_followed — exhaust2 candidate (P1)
**Domain:** Playlists/Library · **Bucket:** P1 · **Quota:** 🔴 per-artist album fan-out (disclosure; chunk 50, capped by artists_cap) · **Part of the exhaust2 feature swarm**
**Pitch:** Build a collaborative-style mix playlist from followed artists' recent releases: ≤N tracks per artist, newest first, mixed round-robin. local-compute composition.
**Endpoint(s):** GET /me/following + GET /artists/{id}/albums (chunked, conc 5) + POST
**Params:** artists_cap?, per_artist=1–5, days=30, name
Ships
[Read the thread](https://github.com/NovaLux12/spotify-mcp-server/issues/397) · 2026-08-27 · closed · 1 comment
### feat: library_to_playlist — exhaust2 candidate (P1)
**Domain:** Playlists/Library · **Bucket:** P1 · **Quota:** 🟡 getAllPages + chunked adds · **Part of the exhaust2 feature swarm**
**Pitch:** Export saved tracks (added-asc order) into a real, shareable playlist — "my library as a link".
**Endpoint(s):** GET /me/tracks + POST /playlists + POST uris
**Params:** name?, order=added_asc/desc, limit?
Ships as part of exhaust2 swarm; builder PR will close this issue. Verify against SPEC §9 (no deprecated endpoints) and the #329 gated-endpoint polic
[Read the thread](https://github.com/NovaLux12/spotify-mcp-server/issues/396) · 2026-08-27 · closed · 1 comment
### feat: saved_library_delta — exhaust2 candidate (P1)
**Domain:** Playlists/Library · **Bucket:** P1 · **Quota:** 🟡 snapshot load + getAllPages · **Part of the exhaust2 feature swarm**
**Pitch:** "What changed in my library since snapshot X": new saves, un-saves, per type — reads stored backup snapshots + fresh getAllPages diff.
**Endpoint(s):** GET /me/{type} + stored snapshot
**Params:** snapshot_id or date, type=all/tracks/albums
Ships as part of exhaust2 swarm; builder PR will close this issue. Verify against SPEC §9 (no deprecated endpoint
[Read the thread](https://github.com/NovaLux12/spotify-mcp-server/issues/395) · 2026-08-27 · closed · 1 comment
### feat: saved_tracks_by_artist — exhaust2 candidate (P1)
**Domain:** Playlists/Library · **Bucket:** P1 · **Quota:** 🟡 getAllPages + filter · **Part of the exhaust2 feature swarm**
**Pitch:** Library filter family: all saved tracks by one artist (getAllPages + client filter). The saved-shelf complement to artist discographies.
**Endpoint(s):** GET /me/tracks (getAllPages)
**Params:** artist_id or name, market?
Ships as part of exhaust2 swarm; builder PR will close this issue. Verify against SPEC §9 (no deprecated endpoints) and the #329 gated-endp
[Read the thread](https://github.com/NovaLux12/spotify-mcp-server/issues/394) · 2026-08-27 · closed · 1 comment
### feat: playlist_overlap_matrix — exhaust2 candidate (P1)
**Domain:** Playlists/Library · **Bucket:** P1 · **Quota:** 🟢 N GETs (≤10) · **Part of the exhaust2 feature swarm**
**Pitch:** local-compute: pairwise overlap % + Jaccard for up to 10 playlists at once — finds near-duplicate playlists before a cull.
**Endpoint(s):** GET /playlists/{id}/items ×N
**Params:** playlist_ids[2–10], min_overlap?
Ships as part of exhaust2 swarm; builder PR will close this issue. Verify against SPEC §9 (no deprecated endpoints) and the #329 gated-endpoint policy.
[Read the thread](https://github.com/NovaLux12/spotify-mcp-server/issues/393) · 2026-08-27 · closed · 1 comment
## Most recent
### eng: gated_surface_selfflag — graceful gating for app-registration-403 surface
**Domain:** Catalog/Search · **Bucket:** P1 · **Quota:** — · **Part of the exhaust2 feature swarm**
**Pitch:** Tools over the #329 gated class self-declare gating in their description and short-circuit with the graceful 403 contract (pairs with #330 gauntlet SKIP set)
**Endpoint(s):** —
**Params:** —
**Engineering card** — closes part of the #328/#329/#330 gating trio.
[Read the thread](https://github.com/NovaLux12/spotify-mcp-server/issues/429) · 2026-08-27 · closed · 0 comments
### eng: browse_403_graceful — graceful gating for app-registration-403 surface
**Domain:** Catalog/Search · **Bucket:** P0 · **Quota:** — · **Part of the exhaust2 feature swarm**
**Pitch:** Apply the existing graceful-403 wrapper to get_categories/get_category/get_category_playlists — raw "Forbidden" today
**Endpoint(s):** —
**Params:** —
**Engineering card** — closes part of the #328/#329/#330 gating trio.
[Read the thread](https://github.com/NovaLux12/spotify-mcp-server/issues/428) · 2026-08-27 · closed · 0 comments
### feat: device_sync_state — exhaust2 candidate (P2)
**Domain:** Portability/Analytics · **Bucket:** P2 · **Quota:** 🟢 (1 read) · **Part of the exhaust2 feature swarm**
**Pitch:** Reconcile sidecar device labels/volume presets against the live device list; flag dead labels, offer prune (dry_run).
**Endpoint(s):** GET /me/player/devices + sidecar
**Params:** prune?, dry_run
Ships as part of exhaust2 swarm; builder PR will close this issue. Verify against SPEC §9 (no deprecated endpoints) and the #329 gated-endpoint policy.
[Read the thread](https://github.com/NovaLux12/spotify-mcp-server/issues/427) · 2026-08-27 · closed · 0 comments
### feat: export_playlist_json — exhaust2 candidate (P2)
**Domain:** Portability/Analytics · **Bucket:** P2 · **Quota:** 🟢 (1 read) · **Part of the exhaust2 feature swarm**
**Pitch:** Full-fidelity JSON export of one playlist: items + added_at + added_by + URIs (CSV/M3U lose these).
**Endpoint(s):** /playlists/{id}/items
**Params:** playlist_id
Ships as part of exhaust2 swarm; builder PR will close this issue. Verify against SPEC §9 (no deprecated endpoints) and the #329 gated-endpoint policy.
[Read the thread](https://github.com/NovaLux12/spotify-mcp-server/issues/426) · 2026-08-27 · closed · 0 comments
### feat: receipt_lookup — exhaust2 candidate (P2)
**Domain:** Portability/Analytics · **Bucket:** P2 · **Quota:** 🟢 (0 calls) · **Part of the exhaust2 feature swarm**
**Pitch:** Find receipts by id, date range, or affected URI — closes the receipts.ts loop (issue → lookup).
**Endpoint(s):** local history
**Params:** id?, since?, uri?
Ships as part of exhaust2 swarm; builder PR will close this issue. Verify against SPEC §9 (no deprecated endpoints) and the #329 gated-endpoint policy.
[Read the thread](https://github.com/NovaLux12/spotify-mcp-server/issues/425) · 2026-08-27 · closed · 0 comments
### feat: undo_preview — exhaust2 candidate (P2)
**Domain:** Portability/Analytics · **Bucket:** P2 · **Quota:** 🟢 (0-2 reads) · **Part of the exhaust2 feature swarm**
**Pitch:** Dry-run for undo_mutation: show exactly what would be reverted (diff of before/after) without executing.
**Endpoint(s):** local history + optional check reads
**Params:** mutation_id
Ships as part of exhaust2 swarm; builder PR will close this issue. Verify against SPEC §9 (no deprecated endpoints) and the #329 gated-endpoint policy.
[Read the thread](https://github.com/NovaLux12/spotify-mcp-server/issues/424) · 2026-08-27 · closed · 0 comments
### feat: mutation_log_export — exhaust2 candidate (P2)
**Domain:** Portability/Analytics · **Bucket:** P2 · **Quota:** 🟢 (0 calls) · **Part of the exhaust2 feature swarm**
**Pitch:** Render the JSONL mutation history as CSV/markdown report, date/uri-filtered — audit trail you can read.
**Endpoint(s):** local history.jsonl
**Params:** from, to, format
Ships as part of exhaust2 swarm; builder PR will close this issue. Verify against SPEC §9 (no deprecated endpoints) and the #329 gated-endpoint policy.
[Read the thread](https://github.com/NovaLux12/spotify-mcp-server/issues/423) · 2026-08-27 · closed · 0 comments
### feat: listening_week_in_time — exhaust2 candidate (P1)
**Domain:** Portability/Analytics · **Bucket:** P1 · **Quota:** 🟡 (2-6 reads) · **Part of the exhaust2 feature swarm**
**Pitch:** Charts for any specific past week (within the 90-day recently-played window) via before/after cursor walk — retro "what was I playing then".
**Endpoint(s):** /me/player/recently-played?before/after
**Params:** week_start, top_n
Ships as part of exhaust2 swarm; builder PR will close this issue. Verify against SPEC §9 (no deprecated endpoints) and the #329 gated-end
[Read the thread](https://github.com/NovaLux12/spotify-mcp-server/issues/422) · 2026-08-27 · closed · 0 comments
### feat: export_shows_opml — exhaust2 candidate (P1)
**Domain:** Portability/Analytics · **Bucket:** P1 · **Quota:** 🟢 (1 read) · **Part of the exhaust2 feature swarm**
**Pitch:** Export saved shows as OPML XML — the one interchange format podcast apps actually speak.
**Endpoint(s):** GET /me/shows
**Params:** fetch_all
Ships as part of exhaust2 swarm; builder PR will close this issue. Verify against SPEC §9 (no deprecated endpoints) and the #329 gated-endpoint policy.
[Read the thread](https://github.com/NovaLux12/spotify-mcp-server/issues/420) · 2026-08-27 · closed · 0 comments
### feat: export_playlist_markdown — exhaust2 candidate (P1)
**Domain:** Portability/Analytics · **Bucket:** P1 · **Quota:** 🟢 (1 read) · **Part of the exhaust2 feature swarm**
**Pitch:** Markdown table variant of export_playlist — paste-ready tracklist doc for sharing/PRs.
**Endpoint(s):** /playlists/{id}/items
**Params:** playlist_id, include_added_at
Ships as part of exhaust2 swarm; builder PR will close this issue. Verify against SPEC §9 (no deprecated endpoints) and the #329 gated-endpoint policy.
[Read the thread](https://github.com/NovaLux12/spotify-mcp-server/issues/419) · 2026-08-27 · closed · 0 comments
### feat: listening_journal_append — exhaust2 candidate (P1)
**Domain:** Portability/Analytics · **Bucket:** P1 · **Quota:** 🟢 (0 calls) · **Part of the exhaust2 feature swarm**
**Pitch:** Attach a timestamped note to today's journal / a tagged session in the sidecar — makes tag_listening_session actually useful for recall.
**Endpoint(s):** sidecar only
**Params:** note, session?, tag?
Ships as part of exhaust2 swarm; builder PR will close this issue. Verify against SPEC §9 (no deprecated endpoints) and the #329 gated-endpoint policy.
[Read the thread](https://github.com/NovaLux12/spotify-mcp-server/issues/418) · 2026-08-27 · closed · 0 comments
### feat: artist_complete_check — exhaust2 candidate (P1)
**Domain:** Portability/Analytics · **Bucket:** P1 · **Quota:** 🟡 (2-4 reads) · **Part of the exhaust2 feature swarm**
**Pitch:** Collector completeness: artist's full album list vs my saved albums — what's missing, EP/live-deluxe breakdown.
**Endpoint(s):** GET /artists/{id}/albums + /me/albums
**Params:** include_singles?
Ships as part of exhaust2 swarm; builder PR will close this issue. Verify against SPEC §9 (no deprecated endpoints) and the #329 gated-endpoint policy.
[Read the thread](https://github.com/NovaLux12/spotify-mcp-server/issues/416) · 2026-08-27 · closed · 0 comments
### feat: chapter_bookmarks — exhaust2 candidate (P1)
**Domain:** Portability/Analytics · **Bucket:** P1 · **Quota:** 🟢 (0 calls on save) · **Part of the exhaust2 feature swarm**
**Pitch:** Named chapter+position bookmarks per audiobook in sidecar; jump later via jump_to_chapter. Write/read/delete.
**Endpoint(s):** sidecar only
**Params:** book_uri, label, position
Ships as part of exhaust2 swarm; builder PR will close this issue. Verify against SPEC §9 (no deprecated endpoints) and the #329 gated-endpoint policy.
[Read the thread](https://github.com/NovaLux12/spotify-mcp-server/issues/415) · 2026-08-27 · closed · 0 comments
### feat: audiobook_library_progress — exhaust2 candidate (P1)
**Domain:** Portability/Analytics · **Bucket:** P1 · **Quota:** 🟡 (N reads) · **Part of the exhaust2 feature swarm**
**Pitch:** All saved audiobooks with % complete + est. time remaining, sorted by progress — "what am I actually reading".
**Endpoint(s):** GET /me/audiobooks, /audiobooks/{id}
**Params:** sort
Ships as part of exhaust2 swarm; builder PR will close this issue. Verify against SPEC §9 (no deprecated endpoints) and the #329 gated-endpoint policy.
[Read the thread](https://github.com/NovaLux12/spotify-mcp-server/issues/414) · 2026-08-27 · closed · 0 comments
### feat: show_backlog_report — exhaust2 candidate (P1)
**Domain:** Portability/Analytics · **Bucket:** P1 · **Quota:** 🟡 (N reads) · **Part of the exhaust2 feature swarm**
**Pitch:** Per saved show: unplayed episodes (fully_played/resume_point), hours of backlog, newest-episode age — decide what to unsubscribe from.
**Endpoint(s):** GET /me/shows, /shows/{id}/episodes
**Params:** sort, min_hours
Ships as part of exhaust2 swarm; builder PR will close this issue. Verify against SPEC §9 (no deprecated endpoints) and the #329 gated-endpoint policy.
[Read the thread](https://github.com/NovaLux12/spotify-mcp-server/issues/413) · 2026-08-27 · closed · 0 comments
### feat: playlist_staleness_report — exhaust2 candidate (P1)
**Domain:** Portability/Analytics · **Bucket:** P1 · **Quota:** 🟡 (N reads, getAllPages) · **Part of the exhaust2 feature swarm**
**Pitch:** Per playlist: newest/oldest added_at, median item age, count added last 90d — find playlists rotting in place.
**Endpoint(s):** /me/playlists, /playlists/{id}/items?fields=added_at
**Params:** limit, sort
Ships as part of exhaust2 swarm; builder PR will close this issue. Verify against SPEC §9 (no deprecated endpoints) and the #329 gated-endpoint policy
[Read the thread](https://github.com/NovaLux12/spotify-mcp-server/issues/412) · 2026-08-27 · closed · 0 comments
The remaining reports are on [the project's issue tracker](https://github.com/NovaLux12/spotify-mcp-server/issues).