Reported issues for Spotify MCP
Pod holds 24 of 316 problems reported by people outside the maintainer team. Issues filed by the project's own owners, members and collaborators are excluded entirely — a maintainer's release checklist is not a warning to a prospective user.
Back to Spotify MCP.
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).