# Spotify MCP server

Agent View of the PolicyLayer registry record for Spotify: identity, probed posture, risk grade, and all 544 tools classified. HTML page: https://policylayer.com/tools/novalux12-spotify-mcp

## Facts

- Server id: `@novalux12/spotify-mcp`
- Install: `npx -y @novalux12/spotify-mcp`
- Homepage: https://github.com/NovaLux12/spotify-mcp-server
- Registry record: grade F, identity unverified
- Lifecycle: active
- Rate-limited: no
- Tools: 544
- Tool categories present: Destructive, Execute, Financial, Read, Write
- Tags: novalux12 spotify mcp, payments, admin, automation
- Record last modified: 2026-08-31T20:51:26.218Z

## Tools (544)

| Tool | Category | Risk | Record |
| --- | --- | --- | --- |
| `cancel_wind_down` | Destructive | Critical | https://policylayer.com/tools/novalux12-spotify-mcp/cancel-wind-down.md |
| `dedupe_spotify_uris` | Destructive | Critical | https://policylayer.com/tools/novalux12-spotify-mcp/dedupe-spotify-uris.md |
| `delete_playback_bookmark` | Destructive | Critical | https://policylayer.com/tools/novalux12-spotify-mcp/delete-playback-bookmark.md |
| `delete_playlist_snapshot` | Destructive | Critical | https://policylayer.com/tools/novalux12-spotify-mcp/delete-playlist-snapshot.md |
| `delete_scene` | Destructive | Critical | https://policylayer.com/tools/novalux12-spotify-mcp/delete-scene.md |
| `playlist_dedupe_advanced` | Destructive | Critical | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-dedupe-advanced.md |
| `playlist_exclude_artists` | Destructive | Critical | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-exclude-artists.md |
| `playlist_filter_runtime` | Destructive | Critical | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-filter-runtime.md |
| `playlist_keep_artist` | Destructive | Critical | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-keep-artist.md |
| `playlist_keep_only` | Destructive | Critical | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-keep-only.md |
| `playlist_remove_artist` | Destructive | Critical | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-remove-artist.md |
| `playlist_subtract` | Destructive | Critical | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-subtract.md |
| `prune_old_snapshots` | Destructive | Critical | https://policylayer.com/tools/novalux12-spotify-mcp/prune-old-snapshots.md |
| `queue_playlist` | Destructive | Critical | https://policylayer.com/tools/novalux12-spotify-mcp/queue-playlist.md |
| `remove_duplicate_playlist_items` | Destructive | Critical | https://policylayer.com/tools/novalux12-spotify-mcp/remove-duplicate-playlist-items.md |
| `remove_from_library` | Destructive | Critical | https://policylayer.com/tools/novalux12-spotify-mcp/remove-from-library.md |
| `remove_from_library_by_playlist` | Destructive | Critical | https://policylayer.com/tools/novalux12-spotify-mcp/remove-from-library-by-playlist.md |
| `remove_from_playlist` | Destructive | Critical | https://policylayer.com/tools/novalux12-spotify-mcp/remove-from-playlist.md |
| `remove_playlist_range` | Destructive | Critical | https://policylayer.com/tools/novalux12-spotify-mcp/remove-playlist-range.md |
| `remove_saved_episode` | Destructive | Critical | https://policylayer.com/tools/novalux12-spotify-mcp/remove-saved-episode.md |
| `remove_saved_items` | Destructive | Critical | https://policylayer.com/tools/novalux12-spotify-mcp/remove-saved-items.md |
| `remove_saved_shows` | Destructive | Critical | https://policylayer.com/tools/novalux12-spotify-mcp/remove-saved-shows.md |
| `remove_unavailable_playlist_items` | Destructive | Critical | https://policylayer.com/tools/novalux12-spotify-mcp/remove-unavailable-playlist-items.md |
| `sleep_timer` | Destructive | Critical | https://policylayer.com/tools/novalux12-spotify-mcp/sleep-timer.md |
| `tag_management` | Destructive | Critical | https://policylayer.com/tools/novalux12-spotify-mcp/tag-management.md |
| `taste_checkpoint_diff` | Destructive | Critical | https://policylayer.com/tools/novalux12-spotify-mcp/taste-checkpoint-diff.md |
| `undo_mutation` | Destructive | Critical | https://policylayer.com/tools/novalux12-spotify-mcp/undo-mutation.md |
| `unpin_playlist` | Destructive | Critical | https://policylayer.com/tools/novalux12-spotify-mcp/unpin-playlist.md |
| `volume_ramp` | Destructive | Critical | https://policylayer.com/tools/novalux12-spotify-mcp/volume-ramp.md |
| `artistwatch_new_additions` | Execute | High | https://policylayer.com/tools/novalux12-spotify-mcp/artistwatch-new-additions.md |
| `base62_to_uri` | Execute | High | https://policylayer.com/tools/novalux12-spotify-mcp/base62-to-uri.md |
| `batch_parse_spotify_uris` | Execute | High | https://policylayer.com/tools/novalux12-spotify-mcp/batch-parse-spotify-uris.md |
| `collab_mix_from_followed` | Execute | High | https://policylayer.com/tools/novalux12-spotify-mcp/collab-mix-from-followed.md |
| `jump_to_chapter` | Execute | High | https://policylayer.com/tools/novalux12-spotify-mcp/jump-to-chapter.md |
| `listening_session_report` | Execute | High | https://policylayer.com/tools/novalux12-spotify-mcp/listening-session-report.md |
| `listening_session_start` | Execute | High | https://policylayer.com/tools/novalux12-spotify-mcp/listening-session-start.md |
| `new_music_from_saved_artists` | Execute | High | https://policylayer.com/tools/novalux12-spotify-mcp/new-music-from-saved-artists.md |
| `new_music_from_top_artists` | Execute | High | https://policylayer.com/tools/novalux12-spotify-mcp/new-music-from-top-artists.md |
| `parse_spotify_uri` | Execute | High | https://policylayer.com/tools/novalux12-spotify-mcp/parse-spotify-uri.md |
| `play` | Execute | High | https://policylayer.com/tools/novalux12-spotify-mcp/play.md |
| `play_at` | Execute | High | https://policylayer.com/tools/novalux12-spotify-mcp/play-at.md |
| `playlist_slice` | Execute | High | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-slice.md |
| `playlist_table_of_contents` | Execute | High | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-table-of-contents.md |
| `shows_without_new_episodes` | Execute | High | https://policylayer.com/tools/novalux12-spotify-mcp/shows-without-new-episodes.md |
| `spotify_doctor` | Execute | High | https://policylayer.com/tools/novalux12-spotify-mcp/spotify-doctor.md |
| `start_podcast_session` | Execute | High | https://policylayer.com/tools/novalux12-spotify-mcp/start-podcast-session.md |
| `top_genre_census` | Execute | High | https://policylayer.com/tools/novalux12-spotify-mcp/top-genre-census.md |
| `undo_preview` | Execute | High | https://policylayer.com/tools/novalux12-spotify-mcp/undo-preview.md |
| `whats_new` | Execute | High | https://policylayer.com/tools/novalux12-spotify-mcp/whats-new.md |
| `transfer_playback` | Financial | Critical | https://policylayer.com/tools/novalux12-spotify-mcp/transfer-playback.md |
| `transfer_playback_with_state` | Financial | Critical | https://policylayer.com/tools/novalux12-spotify-mcp/transfer-playback-with-state.md |
| `added_on_this_day` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/added-on-this-day.md |
| `album_anniversary_check` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/album-anniversary-check.md |
| `album_duration_report` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/album-duration-report.md |
| `album_edition_lint` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/album-edition-lint.md |
| `album_focus_report` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/album-focus-report.md |
| `album_openers_report` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/album-openers-report.md |
| `album_track_explorer` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/album-track-explorer.md |
| `album_track_stats` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/album-track-stats.md |
| `albums_runtime_batch` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/albums-runtime-batch.md |
| `artist_album_completeness` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/artist-album-completeness.md |
| `artist_album_timeline` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/artist-album-timeline.md |
| `artist_catalog_stats` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/artist-catalog-stats.md |
| `artist_collab_network` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/artist-collab-network.md |
| `artist_collaboration_network` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/artist-collaboration-network.md |
| `artist_collection_gaps` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/artist-collection-gaps.md |
| `artist_completeness_score` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/artist-completeness-score.md |
| `artist_debut_release_finder` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/artist-debut-release-finder.md |
| `artist_decade_span` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/artist-decade-span.md |
| `artist_deep_cuts` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/artist-deep-cuts.md |
| `artist_deep_dive` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/artist-deep-dive.md |
| `artist_discography_explorer` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/artist-discography-explorer.md |
| `artist_discography_gaps` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/artist-discography-gaps.md |
| `artist_discography_search` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/artist-discography-search.md |
| `artist_discography_stats` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/artist-discography-stats.md |
| `artist_discography_timeline` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/artist-discography-timeline.md |
| `artist_era_map` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/artist-era-map.md |
| `artist_era_sampler` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/artist-era-sampler.md |
| `artist_first_release` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/artist-first-release.md |
| `artist_genres_compact` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/artist-genres-compact.md |
| `artist_latest_release_report` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/artist-latest-release-report.md |
| `artist_latest_releases` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/artist-latest-releases.md |
| `artist_listening_clock` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/artist-listening-clock.md |
| `artist_live_albums_finder` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/artist-live-albums-finder.md |
| `artist_name_disambiguator` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/artist-name-disambiguator.md |
| `artist_reissue_detector` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/artist-reissue-detector.md |
| `artist_release_digest` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/artist-release-digest.md |
| `artist_representation_census` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/artist-representation-census.md |
| `artist_scout_from_playlists` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/artist-scout-from-playlists.md |
| `artist_singles_timeline` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/artist-singles-timeline.md |
| `artist_top_vs_saved` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/artist-top-vs-saved.md |
| `artist_velocity_report` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/artist-velocity-report.md |
| `audiobook_chapter_map` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/audiobook-chapter-map.md |
| `audiobook_library_progress` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/audiobook-library-progress.md |
| `audiobook_progress` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/audiobook-progress.md |
| `audiobooks_by_author` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/audiobooks-by-author.md |
| `b_sides_detector` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/b-sides-detector.md |
| `b_sides_finder` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/b-sides-finder.md |
| `backup_library` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/backup-library.md |
| `balance_playlist_pairs` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/balance-playlist-pairs.md |
| `binge_detector_report` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/binge-detector-report.md |
| `browse_category_deepdive` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/browse-category-deepdive.md |
| `canonicalize_spotify_uri` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/canonicalize-spotify-uri.md |
| `capture_playback_position` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/capture-playback-position.md |
| `catalog_batch_lookup` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/catalog-batch-lookup.md |
| `category_resolver` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/category-resolver.md |
| `chapter_bookmarks` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/chapter-bookmarks.md |
| `check_artist_releases` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/check-artist-releases.md |
| `check_episode_saved` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/check-episode-saved.md |
| `check_following_artists` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/check-following-artists.md |
| `check_in_library` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/check-in-library.md |
| `check_playlist_following` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/check-playlist-following.md |
| `check_saved_items` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/check-saved-items.md |
| `classify_spotify_uris` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/classify-spotify-uris.md |
| `clean_all_playlists` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/clean-all-playlists.md |
| `clone_playlist_cover` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/clone-playlist-cover.md |
| `collab_density_report` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/collab-density-report.md |
| `compare_devices` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/compare-devices.md |
| `compare_playlist_covers` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/compare-playlist-covers.md |
| `continue_last` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/continue-last.md |
| `count_uris_by_type` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/count-uris-by-type.md |
| `daily_pick` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/daily-pick.md |
| `dead_library_finder` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/dead-library-finder.md |
| `deep_cuts_finder` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/deep-cuts-finder.md |
| `deep_dive_report` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/deep-dive-report.md |
| `describe_listening_session` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/describe-listening-session.md |
| `describe_queue` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/describe-queue.md |
| `device_health` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/device-health.md |
| `device_sync_state` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/device-sync-state.md |
| `diff_playlist_snapshots` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/diff-playlist-snapshots.md |
| `diff_playlists` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/diff-playlists.md |
| `diff_since_snapshot` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/diff-since-snapshot.md |
| `discover_weekly_diff` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/discover-weekly-diff.md |
| `discovery_digest` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/discovery-digest.md |
| `discovery_ratio` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/discovery-ratio.md |
| `duplicate_saved_versions` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/duplicate-saved-versions.md |
| `episode_bookmark` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/episode-bookmark.md |
| `episode_context_bundle` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/episode-context-bundle.md |
| `episode_guest_census` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/episode-guest-census.md |
| `episode_runtime_report` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/episode-runtime-report.md |
| `era_distribution_report` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/era-distribution-report.md |
| `era_preference_report` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/era-preference-report.md |
| `explicit_content_ratio` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/explicit-content-ratio.md |
| `extract_playlist_range` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/extract-playlist-range.md |
| `extract_spotify_id` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/extract-spotify-id.md |
| `featuring_density_report` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/featuring-density-report.md |
| `filter_by_genre` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/filter-by-genre.md |
| `filter_playlist_by_artist` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/filter-playlist-by-artist.md |
| `filter_playlist_by_duration` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/filter-playlist-by-duration.md |
| `filter_playlist_by_era` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/filter-playlist-by-era.md |
| `find_canonical_track` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/find-canonical-track.md |
| `find_collaborations` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/find-collaborations.md |
| `find_duplicate_playlists` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/find-duplicate-playlists.md |
| `find_duplicate_saved_tracks` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/find-duplicate-saved-tracks.md |
| `find_duplicate_spotify_uris` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/find-duplicate-spotify-uris.md |
| `find_duplicate_tracks_across_playlists` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/find-duplicate-tracks-across-playlists.md |
| `find_duplicates_in_playlist` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/find-duplicates-in-playlist.md |
| `find_lost_since_snapshot` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/find-lost-since-snapshot.md |
| `find_new_since_snapshot` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/find-new-since-snapshot.md |
| `find_show_by_publisher` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/find-show-by-publisher.md |
| `find_tool` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/find-tool.md |
| `followed_playlists_audit` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/followed-playlists-audit.md |
| `following_analytics` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/following-analytics.md |
| `format_spotify_uri` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/format-spotify-uri.md |
| `genre_dive_search` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/genre-dive-search.md |
| `genre_trends_over_time` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/genre-trends-over-time.md |
| `get_album` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-album.md |
| `get_album_tracks` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-album-tracks.md |
| `get_artist` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-artist.md |
| `get_artist_albums` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-artist-albums.md |
| `get_artist_appearances` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-artist-appearances.md |
| `get_artist_discography` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-artist-discography.md |
| `get_artist_genres` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-artist-genres.md |
| `get_artist_singles` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-artist-singles.md |
| `get_artist_top_tracks` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-artist-top-tracks.md |
| `get_audiobook` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-audiobook.md |
| `get_audiobook_chapters` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-audiobook-chapters.md |
| `get_available_markets` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-available-markets.md |
| `get_categories` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-categories.md |
| `get_category` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-category.md |
| `get_category_playlists` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-category-playlists.md |
| `get_chapter` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-chapter.md |
| `get_context_inspect` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-context-inspect.md |
| `get_currently_playing` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-currently-playing.md |
| `get_device_volume_report` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-device-volume-report.md |
| `get_devices` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-devices.md |
| `get_episode` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-episode.md |
| `get_episode_details` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-episode-details.md |
| `get_followed_artists` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-followed-artists.md |
| `get_me` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-me.md |
| `get_newly_released_episodes` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-newly-released-episodes.md |
| `get_now_playing` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-now-playing.md |
| `get_playback_context` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-playback-context.md |
| `get_playback_snapshot` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-playback-snapshot.md |
| `get_playlist` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-playlist.md |
| `get_playlist_added_dates` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-playlist-added-dates.md |
| `get_playlist_cover` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-playlist-cover.md |
| `get_playlist_followers` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-playlist-followers.md |
| `get_playlist_items` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-playlist-items.md |
| `get_playlist_snapshot` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-playlist-snapshot.md |
| `get_queue` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-queue.md |
| `get_queue_snapshot` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-queue-snapshot.md |
| `get_recently_played` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-recently-played.md |
| `get_saved_albums` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-saved-albums.md |
| `get_saved_audiobooks` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-saved-audiobooks.md |
| `get_saved_counts` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-saved-counts.md |
| `get_saved_episodes` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-saved-episodes.md |
| `get_saved_shows` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-saved-shows.md |
| `get_saved_tracks` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-saved-tracks.md |
| `get_several_albums` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-several-albums.md |
| `get_several_artists` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-several-artists.md |
| `get_several_audiobooks` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-several-audiobooks.md |
| `get_several_chapters` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-several-chapters.md |
| `get_several_episodes` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-several-episodes.md |
| `get_several_shows` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-several-shows.md |
| `get_several_tracks` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-several-tracks.md |
| `get_show` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-show.md |
| `get_show_details` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-show-details.md |
| `get_show_episodes` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-show-episodes.md |
| `get_show_latest_episode` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-show-latest-episode.md |
| `get_top_artists` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-top-artists.md |
| `get_top_tracks` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-top-tracks.md |
| `get_track` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-track.md |
| `get_user_playlists` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-user-playlists.md |
| `get_user_playlists_by_id` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-user-playlists-by-id.md |
| `get_user_profile` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/get-user-profile.md |
| `grow_playlist` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/grow-playlist.md |
| `history_search` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/history-search.md |
| `inspect_tool` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/inspect-tool.md |
| `is_local_census` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/is-local-census.md |
| `is_valid_spotify_uri` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/is-valid-spotify-uri.md |
| `join_uri_list` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/join-uri-list.md |
| `label_discography_explorer` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/label-discography-explorer.md |
| `label_explorer` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/label-explorer.md |
| `last_heard` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/last-heard.md |
| `library_coverage_report` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/library-coverage-report.md |
| `library_genre_report` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/library-genre-report.md |
| `library_growth_report` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/library-growth-report.md |
| `library_hygiene` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/library-hygiene.md |
| `library_snapshot_diff` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/library-snapshot-diff.md |
| `library_to_playlist` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/library-to-playlist.md |
| `library_value_summary` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/library-value-summary.md |
| `list_all_chapters` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/list-all-chapters.md |
| `list_backups` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/list-backups.md |
| `list_device_presets` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/list-device-presets.md |
| `list_playback_bookmarks` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/list-playback-bookmarks.md |
| `list_playback_states` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/list-playback-states.md |
| `list_playlist_snapshots` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/list-playlist-snapshots.md |
| `list_saved_shows` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/list-saved-shows.md |
| `list_saved_snapshots` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/list-saved-snapshots.md |
| `list_scenes` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/list-scenes.md |
| `list_sessions` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/list-sessions.md |
| `list_show_episodes` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/list-show-episodes.md |
| `listening_clock` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/listening-clock.md |
| `listening_clock_heatmap` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/listening-clock-heatmap.md |
| `listening_consistency_score` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/listening-consistency-score.md |
| `listening_gaps_report` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/listening-gaps-report.md |
| `listening_heatmap` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/listening-heatmap.md |
| `listening_journal_append` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/listening-journal-append.md |
| `listening_recap_brief` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/listening-recap-brief.md |
| `listening_report` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/listening-report.md |
| `listening_streak_report` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/listening-streak-report.md |
| `listening_streaks` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/listening-streaks.md |
| `listening_week_in_time` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/listening-week-in-time.md |
| `longest_saved_tracks` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/longest-saved-tracks.md |
| `lyric_snippet_search` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/lyric-snippet-search.md |
| `make_spotify_uri` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/make-spotify-uri.md |
| `market_availability` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/market-availability.md |
| `market_validate` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/market-validate.md |
| `monthly_listening_report` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/monthly-listening-report.md |
| `mood_bucket_report` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/mood-bucket-report.md |
| `morning_briefing` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/morning-briefing.md |
| `most_replayed` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/most-replayed.md |
| `never_played_saved` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/never-played-saved.md |
| `normalize_spotify_uri` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/normalize-spotify-uri.md |
| `now_playing_history` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/now-playing-history.md |
| `orphaned_artist_check` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/orphaned-artist-check.md |
| `overlap_playlists` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/overlap-playlists.md |
| `pause` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/pause.md |
| `pause_everywhere` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/pause-everywhere.md |
| `peek_next` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/peek-next.md |
| `play_from_search` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/play-from-search.md |
| `playback_compare_states` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/playback-compare-states.md |
| `playback_health_check` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/playback-health-check.md |
| `playback_timeline` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/playback-timeline.md |
| `playlist_artist_heat` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-artist-heat.md |
| `playlist_balance` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-balance.md |
| `playlist_changelog` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-changelog.md |
| `playlist_clone_live` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-clone-live.md |
| `playlist_clone_snapshot` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-clone-snapshot.md |
| `playlist_collab_toggle` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-collab-toggle.md |
| `playlist_collaboration_report` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-collaboration-report.md |
| `playlist_diff` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-diff.md |
| `playlist_era_profile` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-era-profile.md |
| `playlist_flip_order` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-flip-order.md |
| `playlist_health_check` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-health-check.md |
| `playlist_history` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-history.md |
| `playlist_intersect` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-intersect.md |
| `playlist_intersection` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-intersection.md |
| `playlist_names_bulk_normalize` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-names-bulk-normalize.md |
| `playlist_overlap_matrix` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-overlap-matrix.md |
| `playlist_pair_check` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-pair-check.md |
| `playlist_resequence` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-resequence.md |
| `playlist_reverse` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-reverse.md |
| `playlist_rotate` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-rotate.md |
| `playlist_seed_shuffle` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-seed-shuffle.md |
| `playlist_shuffle` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-shuffle.md |
| `playlist_snapshot_detail` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-snapshot-detail.md |
| `playlist_sort` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-sort.md |
| `playlist_staleness_report` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-staleness-report.md |
| `playlist_staleness_score` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-staleness-score.md |
| `playlist_strip_episodes` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-strip-episodes.md |
| `playlist_swap_positions` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-swap-positions.md |
| `playlist_symmetric_difference` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-symmetric-difference.md |
| `playlist_trim` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-trim.md |
| `playlist_trim_to_duration` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-trim-to-duration.md |
| `playlist_union` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-union.md |
| `playlist_union_preview` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-union-preview.md |
| `predict_next_tracks` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/predict-next-tracks.md |
| `publisher_portfolio` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/publisher-portfolio.md |
| `queue_duplicate_check` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/queue-duplicate-check.md |
| `queue_profile` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/queue-profile.md |
| `queue_runtime_report` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/queue-runtime-report.md |
| `quota_probe` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/quota-probe.md |
| `read_playlist_snapshot` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/read-playlist-snapshot.md |
| `receipt_lookup` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/receipt-lookup.md |
| `refresh_smart_playlist` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/refresh-smart-playlist.md |
| `reorder_playlist_items` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/reorder-playlist-items.md |
| `repeat_listener_report` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/repeat-listener-report.md |
| `repeat_queue_toggle` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/repeat-queue-toggle.md |
| `room_level` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/room-level.md |
| `sample_playlist_tracks` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/sample-playlist-tracks.md |
| `saved_albums_by_decade` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/saved-albums-by-decade.md |
| `saved_albums_by_label` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/saved-albums-by-label.md |
| `saved_albums_by_year` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/saved-albums-by-year.md |
| `saved_library_delta` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/saved-library-delta.md |
| `saved_runtime_by_era` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/saved-runtime-by-era.md |
| `saved_shows_publisher_census` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/saved-shows-publisher-census.md |
| `saved_tracks_by_artist` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/saved-tracks-by-artist.md |
| `saved_tracks_roulette` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/saved-tracks-roulette.md |
| `saved_vs_playlist_coverage` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/saved-vs-playlist-coverage.md |
| `scene_sampler_search` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/scene-sampler-search.md |
| `scope_audit` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/scope-audit.md |
| `search` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/search.md |
| `search_advanced` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/search-advanced.md |
| `search_by_isrc` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/search-by-isrc.md |
| `search_deep` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/search-deep.md |
| `search_fresh` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/search-fresh.md |
| `search_history` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/search-history.md |
| `search_history_stats` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/search-history-stats.md |
| `search_market_diff` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/search-market-diff.md |
| `search_rerun` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/search-rerun.md |
| `search_saved_albums` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/search-saved-albums.md |
| `search_saved_audiobooks` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/search-saved-audiobooks.md |
| `search_saved_episodes` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/search-saved-episodes.md |
| `search_saved_shows` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/search-saved-shows.md |
| `search_saved_tracks` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/search-saved-tracks.md |
| `search_within_playlist` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/search-within-playlist.md |
| `seek` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/seek.md |
| `session_length_report` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/session-length-report.md |
| `session_stats` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/session-stats.md |
| `shortest_saved_tracks` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/shortest-saved-tracks.md |
| `show_activity_feed` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/show-activity-feed.md |
| `show_backlog_plan` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/show-backlog-plan.md |
| `show_backlog_report` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/show-backlog-report.md |
| `show_episode_search` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/show-episode-search.md |
| `show_episode_timeline` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/show-episode-timeline.md |
| `show_new_episodes` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/show-new-episodes.md |
| `show_recommendation_brief` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/show-recommendation-brief.md |
| `show_runtime_stats` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/show-runtime-stats.md |
| `shows_release_calendar` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/shows-release-calendar.md |
| `shuffle_state_report` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/shuffle-state-report.md |
| `skip_n` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/skip-n.md |
| `skip_next` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/skip-next.md |
| `skip_previous` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/skip-previous.md |
| `snapshot_added_at_report` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/snapshot-added-at-report.md |
| `snapshot_changelog` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/snapshot-changelog.md |
| `snapshot_diff_summary` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/snapshot-diff-summary.md |
| `snapshot_disk_usage` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/snapshot-disk-usage.md |
| `snapshot_integrity_check` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/snapshot-integrity-check.md |
| `snapshot_integrity_report` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/snapshot-integrity-report.md |
| `snapshot_new_tracks` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/snapshot-new-tracks.md |
| `snapshot_playlist` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/snapshot-playlist.md |
| `snapshot_registry_report` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/snapshot-registry-report.md |
| `snapshot_removed_tracks` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/snapshot-removed-tracks.md |
| `snapshot_retention_plan` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/snapshot-retention-plan.md |
| `snapshot_stats_report` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/snapshot-stats-report.md |
| `sort_uris_by_kind` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/sort-uris-by-kind.md |
| `split_playlist` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/split-playlist.md |
| `split_playlist_by_count` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/split-playlist-by-count.md |
| `split_playlist_by_duration` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/split-playlist-by-duration.md |
| `split_uri_list` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/split-uri-list.md |
| `spotify_uri_kind` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/spotify-uri-kind.md |
| `subscribe_to_show` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/subscribe-to-show.md |
| `surprise_me` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/surprise-me.md |
| `tag_listening_session` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/tag-listening-session.md |
| `take_playlist_snapshot` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/take-playlist-snapshot.md |
| `taste_shift_report` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/taste-shift-report.md |
| `title_length_outliers` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/title-length-outliers.md |
| `toolset_report` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/toolset-report.md |
| `top_artist_leaderboard` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/top-artist-leaderboard.md |
| `top_artist_ranking_delta` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/top-artist-ranking-delta.md |
| `top_artists_by_range` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/top-artists-by-range.md |
| `top_track_leaderboard` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/top-track-leaderboard.md |
| `top_track_ranking_delta` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/top-track-ranking-delta.md |
| `track_album_bundle` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/track-album-bundle.md |
| `track_enrichment_batch` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/track-enrichment-batch.md |
| `track_release_origin` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/track-release-origin.md |
| `track_rotation_report` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/track-rotation-report.md |
| `undo_last_mutation` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/undo-last-mutation.md |
| `unplayable_saved_check` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/unplayable-saved-check.md |
| `unsave_orphan_tracks` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/unsave-orphan-tracks.md |
| `unsubscribe_from_show` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/unsubscribe-from-show.md |
| `uri_kind_stats` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/uri-kind-stats.md |
| `uri_namespace_census` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/uri-namespace-census.md |
| `uri_shorthand_expand` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/uri-shorthand-expand.md |
| `uri_to_base62` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/uri-to-base62.md |
| `validate_spotify_uri` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/validate-spotify-uri.md |
| `verify_receipt` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/verify-receipt.md |
| `volume_report` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/volume-report.md |
| `watch_artists` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/watch-artists.md |
| `weekday_heatmap` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/weekday-heatmap.md |
| `weekday_listening_report` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/weekday-listening-report.md |
| `weekly_rotation_report` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/weekly-rotation-report.md |
| `where_was_i` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/where-was-i.md |
| `year_explorer` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/year-explorer.md |
| `year_in_review` | Read | Low | https://policylayer.com/tools/novalux12-spotify-mcp/year-in-review.md |
| `add_to_playlist` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/add-to-playlist.md |
| `add_to_queue` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/add-to-queue.md |
| `album_representative_plan` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/album-representative-plan.md |
| `apply_device_presets` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/apply-device-presets.md |
| `apply_scene` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/apply-scene.md |
| `apply_snapshot_changes` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/apply-snapshot-changes.md |
| `apply_volume_plan` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/apply-volume-plan.md |
| `archive_played_episodes` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/archive-played-episodes.md |
| `artist_complete_check` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/artist-complete-check.md |
| `artist_release_type_breakdown` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/artist-release-type-breakdown.md |
| `backup_first` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/backup-first.md |
| `batch_add_to_playlist` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/batch-add-to-playlist.md |
| `batch_add_to_queue` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/batch-add-to-queue.md |
| `checkpoint_playback` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/checkpoint-playback.md |
| `copy_playlist` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/copy-playlist.md |
| `create_playlist` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/create-playlist.md |
| `create_smart_playlist` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/create-smart-playlist.md |
| `decade_sampler_plan` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/decade-sampler-plan.md |
| `dedupe_playlist_apply` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/dedupe-playlist-apply.md |
| `dedupe_playlist_plan` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/dedupe-playlist-plan.md |
| `device_type_census` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/device-type-census.md |
| `episode_resume` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/episode-resume.md |
| `export_all_playlists` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/export-all-playlists.md |
| `export_followed_artists` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/export-followed-artists.md |
| `export_library_json` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/export-library-json.md |
| `export_listening_history` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/export-listening-history.md |
| `export_playlist` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/export-playlist.md |
| `export_playlist_json` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/export-playlist-json.md |
| `export_playlist_markdown` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/export-playlist-markdown.md |
| `export_profile_state` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/export-profile-state.md |
| `export_shows_opml` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/export-shows-opml.md |
| `export_snapshot_bundle` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/export-snapshot-bundle.md |
| `follow_artists` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/follow-artists.md |
| `front_to_back_plan` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/front-to-back-plan.md |
| `handoff` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/handoff.md |
| `import_from_sidecar` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/import-from-sidecar.md |
| `import_playlist` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/import-playlist.md |
| `import_profile_state` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/import-profile-state.md |
| `interleave_playlists_plan` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/interleave-playlists-plan.md |
| `library_growth_timeline` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/library-growth-timeline.md |
| `listening_history_export` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/listening-history-export.md |
| `listening_session_close` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/listening-session-close.md |
| `mark_episode_played_plan` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/mark-episode-played-plan.md |
| `merge_playlists` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/merge-playlists.md |
| `merge_playlists_plan` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/merge-playlists-plan.md |
| `merge_snapshot_changes_plan` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/merge-snapshot-changes-plan.md |
| `move_items_between_playlists` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/move-items-between-playlists.md |
| `move_tracks_between_playlists` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/move-tracks-between-playlists.md |
| `mutation_log_export` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/mutation-log-export.md |
| `mute` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/mute.md |
| `open_url_to_spotify_uri` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/open-url-to-spotify-uri.md |
| `pin_playlist` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/pin-playlist.md |
| `plan_podcast_session` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/plan-podcast-session.md |
| `plan_volume_level_across_devices` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/plan-volume-level-across-devices.md |
| `play_on` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/play-on.md |
| `playlist_add_by_search` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-add-by-search.md |
| `playlist_chunk_preview` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-chunk-preview.md |
| `playlist_cover_from_track` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-cover-from-track.md |
| `playlist_difference_plan` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-difference-plan.md |
| `playlist_edit_journal` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-edit-journal.md |
| `playlist_expression_algebra` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-expression-algebra.md |
| `playlist_fill_from_search` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-fill-from-search.md |
| `playlist_from_tags` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-from-tags.md |
| `playlist_move_block` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-move-block.md |
| `playlist_move_to_top` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-move-to-top.md |
| `playlist_template_apply` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-template-apply.md |
| `playlist_to_library` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/playlist-to-library.md |
| `queue_next` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/queue-next.md |
| `queue_next_episode` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/queue-next-episode.md |
| `queue_prune_plan` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/queue-prune-plan.md |
| `queue_replace_via_playlist` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/queue-replace-via-playlist.md |
| `quick_save_now` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/quick-save-now.md |
| `rename_device` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/rename-device.md |
| `replace_playlist_items` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/replace-playlist-items.md |
| `replay_session` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/replay-session.md |
| `resolve_artist` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/resolve-artist.md |
| `restore_library_snapshot` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/restore-library-snapshot.md |
| `restore_playback_state` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/restore-playback-state.md |
| `restore_playlist_from_snapshot` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/restore-playlist-from-snapshot.md |
| `restore_playlist_plan` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/restore-playlist-plan.md |
| `resume_playback_position` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/resume-playback-position.md |
| `reverse_playlist_plan` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/reverse-playlist-plan.md |
| `rotate_playlist_plan` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/rotate-playlist-plan.md |
| `save_artist_new_releases` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/save-artist-new-releases.md |
| `save_discover_weekly` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/save-discover-weekly.md |
| `save_episode` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/save-episode.md |
| `save_items` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/save-items.md |
| `save_playback_state` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/save-playback-state.md |
| `save_queue_as_playlist` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/save-queue-as-playlist.md |
| `save_release_radar` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/save-release-radar.md |
| `save_scene` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/save-scene.md |
| `save_show_digest` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/save-show-digest.md |
| `save_smart_playlist_rule` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/save-smart-playlist-rule.md |
| `save_to_library` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/save-to-library.md |
| `saved_albums_by_type` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/saved-albums-by-type.md |
| `saved_track_age_report` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/saved-track-age-report.md |
| `schedule_wind_down` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/schedule-wind-down.md |
| `seek_relative` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/seek-relative.md |
| `set_device_volume_preset` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/set-device-volume-preset.md |
| `set_repeat` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/set-repeat.md |
| `set_shuffle` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/set-shuffle.md |
| `set_volume` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/set-volume.md |
| `sidecar_export_bundle` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/sidecar-export-bundle.md |
| `sleep_timer_plan` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/sleep-timer-plan.md |
| `sort_playlist_apply` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/sort-playlist-apply.md |
| `sort_playlist_plan` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/sort-playlist-plan.md |
| `split_queue_plan` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/split-queue-plan.md |
| `spotify_uri_to_open_url` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/spotify-uri-to-open-url.md |
| `stale_saved_shows_plan` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/stale-saved-shows-plan.md |
| `switch_device` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/switch-device.md |
| `taste_checkpoint` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/taste-checkpoint.md |
| `unfollow_artists` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/unfollow-artists.md |
| `unmute` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/unmute.md |
| `update_playlist` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/update-playlist.md |
| `upload_playlist_cover` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/upload-playlist-cover.md |
| `volume_step` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/volume-step.md |
| `week_in_review_playlist` | Write | Medium | https://policylayer.com/tools/novalux12-spotify-mcp/week-in-review-playlist.md |

## Tool descriptions

- `cancel_wind_down` — Cancel the in-process wind-down ramp, if one is running
- `dedupe_spotify_uris` — Remove duplicate Spotify references from a list, preserving first-seen order, comparing canonical URI forms where possible — local, no network.
- `delete_playback_bookmark` — Delete one captured playback bookmark file from the local backup dir. Preview by default — pass dry_run=false to delete.
- `delete_playlist_snapshot` — Delete one local playlist snapshot file; dry_run=true (default) only reports what would be removed
- `delete_scene` — Delete a saved playback scene from the local sidecar
- `playlist_dedupe_advanced` — Remove duplicate items from a playlist, matching by URI (exact copies) OR by track name
- `playlist_exclude_artists` — Remove every track by one or more artist IDs from a playlist — the
- `playlist_filter_runtime` — Keep only items whose duration falls inside a window (e.g. min_sec 120 → drop intros/interludes;
- `playlist_keep_artist` — Inverse filter: keep ONLY tracks by one artist in a playlist and drop everything else.
- `playlist_keep_only` — Inverse removal: keep only matching items (by uri / artist / type / query) and drop
- `playlist_remove_artist` — Remove every track by one artist from a playlist (match by artist name, case-insensitive,
- `playlist_subtract` — Remove tracks of B..N from A. Quota: 🟢 N GETs + DELETE or PUT.
- `prune_old_snapshots` — Delete old local snapshots, keeping the newest N per playlist and optionally dropping those older than a cutoff; dry_run=true (default) only reports what would go
- `queue_playlist` — Queue all tracks from a playlist/album/artist URI in order (cap 200). mode=append adds to end; mode=replace is not supported — Spotify has no queue-clear endpoint.
- `remove_duplicate_playlist_items` — Remove duplicate items from a playlist: keeps the first occurrence of each track and removes
- `remove_from_library` — Preferred. Accepts the widest URI mix (track, album, episode, show, audiobook, user, playlist) in one request. Remove one or more items from the user
- `remove_from_library_by_playlist` — Remove from Liked Songs any tracks that also appear in a given playlist. Quota: 🟡 2 GETs + DELETE (chunked).
- `remove_from_playlist` — Remove tracks or episodes from a playlist. Max 100 entries per call.
- `remove_playlist_range` — Delete a positional range of a playlist (0-based start, EXCLUSIVE end; negative values
- `remove_saved_episode` — Remove episodes from your library (DELETE /me/episodes) after cross-checking which are
- `remove_saved_items` — Legacy per-type variant (kept for grandfathered app credentials that lack unified /me/library access). Prefer remove_from_library. Remove one or more items from the user
- `remove_saved_shows` — Bulk-remove shows from your library (DELETE /me/shows) after cross-checking which of the
- `remove_unavailable_playlist_items` — Remove unavailable (null track) items from a playlist — actionable companion to playlist_health_check. Targets only unavailable occurrences by position so healthy copies are preserved. Read-only dry_run preview available.
- `sleep_timer` — Keep music playing and auto-pause after N minutes: registers an in-process timer (cancel-safe; calling again replaces it) that fires PUT /me/player/pause on expiry. No fade — distinct from stepped schedule_wind_down. Quota: 🟢 1 read now…
- `tag_management` — Declare or retract genre tags for an artist in your local sidecar (~/.spotify-mcp/genre-tags.json), which library_genre_report and filter_by_genre consume. add requires at least one tag; remove drops the listed tags, or the artist entire…
- `taste_checkpoint_diff` — Diff two saved taste checkpoints: new entrants, drop-offs, genre drift and Jaccard
- `undo_mutation` — Undo a specific mutation by receipt ID. Inverts: playlist_items add→remove, library save→remove. Non-reversible kinds return not reversible. Supports dry_run.
- `unpin_playlist` — Unfollow (unpin) a playlist. DELETE /playlists/{id}/followers. Supports dry_run and elicitation for bulk use.
- `volume_ramp` — Generic volume ramp to a target percent over N minutes (up OR down, step-controlled, optional end-state pause/play) — a superset of schedule_wind_down (which is down-only with floor+pause). Quota: 🟢 stepped PUT /me/player/volume writes …
- `artistwatch_new_additions` — Watches your FOLLOWED artists for new material: walks /me/following, probes each artist\
- `base62_to_uri` — Reinterpret a base62 ID string as a Spotify entity ID and build the full spotify: URI for a given kind, offline.
- `batch_parse_spotify_uris` — Parse a batch of Spotify references into kind/ID parts in one local pass — no network calls; one result row per input.
- `collab_mix_from_followed` — Build a collaborative-style mix playlist from your FOLLOWED artists\
- `jump_to_chapter` — Start playing a specific audiobook chapter (1-based number) by resuming the audiobook context at that chapter. Use dry_run to preview without touching playback.
- `listening_session_report` — Report a listening session (or the most recent one when no id is given): duration, start/end snapshots and closed status. Read-only.
- `listening_session_start` — Start a local listening-session log: captures the current playback snapshot into a session file under the backup dir; close it later with listening_session_close. Writes only a local sidecar file.
- `new_music_from_saved_artists` — Newest releases across the artists you follow (and optionally those in your saved albums), sorted by release date — your personal new-release feed. Quota: 🔴 followed-artist walk + per-artist album peeks.
- `new_music_from_top_artists` — Fresh-music digest from YOUR listening: probes the latest release of each of your top artists (from
- `parse_spotify_uri` — Parse a single spotify: URI into its entity kind and ID parts without any network call; reports validity and a parse error when malformed.
- `play` — Start or resume playback. Optionally target specific content.
- `play_at` — Start playback at a specific position — accepts H:MM:SS / MM:SS / seconds string or position_ms. Wraps PUT /me/player/play with offset/position_ms. 🟢 (1 write).
- `playlist_slice` — Copy a slice of one playlist — positions start..end, first/last N, or an added-at date
- `playlist_table_of_contents` — Build a table of contents for a playlist: totals, runtime, and
- `shows_without_new_episodes` — Find saved shows with no episode released inside the lookback window (
- `spotify_doctor` — Run local diagnostics: token presence/expiry, auth-time scopes vs write tools enabled by active toolsets, Premium gating notes, rate-limit cooldown, and a config snapshot. Read-only, best-effort live account probe for product/country whe…
- `start_podcast_session` — Plan a podcast session (see plan_podcast_session) and start it on a device. Limitation: Spotify cannot apply resume offsets when queueing — only the first episode can start at its resume point (via PUT /me/player/play on its show context…
- `top_genre_census` — Build a weighted genre census from your top artists (rank-weighted across the three windows; genres resolved via the batch /artists endpoint, default 40 artists per window). Quota: 3× GET /me/top/artists + 1× GET /artists?ids=.
- `undo_preview` — Dry-run for undo_mutation: shows exactly what a receipt-driven revert WOULD do (diff of
- `whats_new` — Personal new-releases radar: derive what
- `transfer_playback` — Move playback to a different Spotify Connect device
- `transfer_playback_with_state` — Transfer playback to another device while restoring the full state: same track, position, shuffle and repeat. Preview by default — pass dry_run=false to execute the transfer.
- `added_on_this_day` — Show tracks you saved on this calendar day (month + day) in previous years — your library
- `album_anniversary_check` — Upcoming album anniversaries for an artist within the next
- `album_duration_report` — Runtime profile for an artist\
- `album_edition_lint` — Lint your saved albums for the same record kept across multiple editions (same name after edition-noise stripping + primary artist, distinct album IDs). Read-only.
- `album_focus_report` — Deep focus report on one album: track-by-track listing with cumulative runtime, duration statistics, edition
- `album_openers_report` — List track 1 (the side-A opener) of every studio album by an artist, chronologically — the
- `album_track_explorer` — Full track listing for one album with per-track cross-album duplicate counts — spot which songs are unique to this release vs recycled across the discography. Quota: 🔴 one album fetch + one paginated discography walk.
- `album_track_stats` — [local-compute] Track-length statistics for one album: min/max/mean/median plus a longest-track callout,
- `albums_runtime_batch` — [local-compute] Runtime per album — total and mean track length — for up to 20 albums in one pass
- `artist_album_completeness` — Checks how complete your saved-album library is for one artist: canonical studio-album titles from the
- `artist_album_timeline` — [local-compute] Chronological release table (oldest → newest) with inter-release gap days, median gap and the longest drought highlighted. Quota: 🟡 one paginated /artists/{id}/albums walk.
- `artist_catalog_stats` — Numbers-only catalog profile for one artist: release totals by group, summed track counts, average tracks per
- `artist_collab_network` — [local-compute] Featured/collab artists extracted from an artist\
- `artist_collaboration_network` — Builds a depth-2 collaboration web for one artist from discography walks alone: first-degree collaborators
- `artist_collection_gaps` — List an artist\
- `artist_completeness_score` — For your top N saved-track artists, fetch each artist\u2019s top tracks and score how many of them you have saved (0–100%). Read-only, capped at 25 artists.
- `artist_debut_release_finder` — Dig up an artist\
- `artist_decade_span` — Histogram of an artist\
- `artist_deep_cuts` — Finds an artist\
- `artist_deep_dive` — Builds a one-artist dossier from the artist object plus a full discography walk: genres, release counts by
- `artist_discography_explorer` — Overview stats for one artist\
- `artist_discography_gaps` — Chronological discography table (oldest to newest by default) with per-release gap-in-days versus the previous
- `artist_discography_search` — Full-text filter over an artist\
- `artist_discography_stats` — [local-compute] Discography shape for one artist: release counts by album/single/compilation, first and
- `artist_discography_timeline` — [local-compute] Chronological release table (year · type · name · tracks) built from a paginated
- `artist_era_map` — Cluster an artist\
- `artist_era_sampler` — Splits an artist discography into equal year-span eras and deterministically picks representative releases per
- `artist_first_release` — Locates an artist\
- `artist_genres_compact` — Up to 50 artist IDs → name·genres two-column projection (compact roster view over several-artists).
- `artist_latest_release_report` — Reports on an artist\
- `artist_latest_releases` — Fetch the most recent N releases from an artist\
- `artist_listening_clock` — Profile WHEN you play one specific artist (hour-of-day histogram plus daypart split; defaults to your most-played artist in the history window). Quota: GET /me/player/recently-played cursor walk.
- `artist_live_albums_finder` — List an artist\
- `artist_name_disambiguator` — Resolves an ambiguous artist name: runs a typed artist search and profiles each candidate (genres, active
- `artist_reissue_detector` — Detect alternate versions (live/deluxe/remaster/expanded editions) in an artist\
- `artist_release_digest` — Show a digest of new releases since the last check for a watchlist.
- `artist_representation_census` — Census of your saved tracks by credited artist: rank the top N artists by how many saved tracks they appear on. Read-only.
- `artist_scout_from_playlists` — Find new-to-you artists: pull the artist roster from one of your playlists and rank the ones you have NOT saved any tracks of — discovery from your own rotation. Quota: 🔴 playlist walk + saved-tracks membership check.
- `artist_singles_timeline` — Chronological singles timeline for an artist (date · title · track count) — the 45-rpm history in one table. Quota: 🟡 one paginated /artists/{id}/albums walk (singles group).
- `artist_top_vs_saved` — Compares your top artists (from /me/top/artists) against your own library: saved-album and saved-track counts
- `artist_velocity_report` — Classify each top artist’s momentum by comparing short_term and long_term ranks (surging / climbing / steady / slipping / falling / new_entry). Quota: 2× GET /me/top/artists.
- `audiobook_chapter_map` — [local-compute] Chapter-by-chapter duration map, total runtime and the mid-point chapter for one audiobook.
- `audiobook_library_progress` — All saved audiobooks with % complete and estimated time remaining, sorted by progress —
- `audiobook_progress` — Audiobook progress rollup: chapters total, played count, current chapter, percent complete. Quota: 🟡 2 GETs (audiobook + chapters).
- `audiobooks_by_author` — Author catalogue via the
- `b_sides_detector` — Detect B-sides: tracks that appear on an artist\
- `b_sides_finder` — Surfaces an artist\
- `backup_library` — Snapshot your ENTIRE library to a local JSON file (read-only against Spotify): liked tracks, saved albums/shows/episodes/audiobooks, followed artists, and every playlist with its items. Walks capped at SPOTIFY_MCP_FETCH_ALL_CAP (default …
- `balance_playlist_pairs` — Plan (and optionally commit) rebalancing 2–10 playlists to similar track counts or
- `binge_detector_report` — Flag artists whose recently-played counts exceed a play threshold (default ≥5 plays) with span and track coverage, sorted by intensity. Quota: GET /me/player/recently-played cursor walk.
- `browse_category_deepdive` — Category → playlists → optional items peek in one call (GET /browse/categories/{id} + /playlists (+ /playlists/{id}/tracks peek)). Quota: 🟡 2–3 calls.
- `canonicalize_spotify_uri` — Canonicalise a batch of Spotify references in one local pass: * scheme, known kind, 22-char base62 ID, tracking params stripped — no network.
- `capture_playback_position` — Bookmark the current track, playback position and device to a local JSON file under the backup dir so it can be resumed later with resume_playback_position. Writes only a local sidecar file, never touches Spotify.
- `catalog_batch_lookup` — Resolve a mixed list of Spotify URIs (tracks/albums/artists/shows/episodes/audiobooks/chapters) in partitioned batch calls. Quota: 🟡 1 per distinct type + chunking.
- `category_resolver` — Free-text genre/vibe → best-matching browse category ID via local fuzzy match over GET /browse/categories
- `chapter_bookmarks` — Named chapter+position bookmarks per audiobook, stored in the local sidecar (jump later
- `check_artist_releases` — Check watched artists for new releases since last check (or within lookback_days).
- `check_episode_saved` — Check which episodes are already saved in your library (GET /me/episodes/contains) —
- `check_following_artists` — Check if the user follows specific artists — this tests FOLLOW state, not library-saved state (for that use check_in_library). Rows carry {id, uri, follows}; returns a boolean per ID. Max 50.
- `check_in_library` — Preferred. Accepts the widest URI mix (track, album, episode, show, audiobook, artist, user, playlist) in one request. Check whether items are saved in or followed by the user — this tests LIBRARY-SAVED/FOLLOWED state, distinct from chec…
- `check_playlist_following` — Check if you follow 1–50 playlists (fans out one call per playlist, concurrency 5). Quota: 🟢 1–50 GETs.
- `check_saved_items` — Legacy per-type variant (kept for grandfathered app credentials that lack unified /me/library access). Prefer check_in_library. Check whether items are saved in the user
- `classify_spotify_uris` — Classify each reference in a batch: reference form, entity kind, canonical-form verdict, and per-row issues — one local pass, no network calls.
- `clean_all_playlists` — Scan every playlist in your library for duplicate items (repeated URIs, and on opt-in
- `clone_playlist_cover` — Copy cover image from source playlist to target. Quota: 🟢 GET images + PUT images (plus image fetch).
- `collab_density_report` — Measure collaboration density: how many of your saved tracks credit 2+ artists, with the top collaborations ranked. Read-only.
- `compare_devices` — List every available Spotify device ranked by active state, then device type (Computer > Smartphone > Tablet > TV > Speaker), then volume. Read-only.
- `compare_playlist_covers` — Compare two playlists covers: URL equality, dimensions. Quota: 🟢 2 GETs.
- `continue_last` — Resume the most recent checkpoint without knowing its name (sidecar lookup by saved_at). Pairs with checkpoint_playback. Quota: 🟡 2-3 writes (play + shuffle/repeat best-effort).
- `count_uris_by_type` — Count how many references in a batch belong to each entity kind (track, album, artist, …) — a local tally, no network calls.
- `daily_pick` — Deterministic
- `dead_library_finder` — Find saved tracks that never appear in your recent history AND sit in none of your
- `deep_cuts_finder` — Surface deep cuts: album tracks past position 2 that are neither the title track nor released as singles — the forgotten album material, per album. Quota: 🔴 paginated walk + batched /albums lookups.
- `deep_dive_report` — Deep-dive one artist: recently-played counts, which of their tracks rotate, and their rank in each top-artists window (accepts ID, URI, or URL). Quota: GET /me/player/recently-played + 3× GET /me/top/artists.
- `describe_listening_session` — Playback history timeline from recently-played, optionally grouped into sessions (30-min gap via detectSessions). 🟢 (1 page) / 🟡 (2 pages). Read-only.
- `describe_queue` — Enriched queue view: currently playing + up-next with durations, total remaining, and source context label. 🟢 (1 read) or 🟡 (2 if include_context resolves playlist/album name).
- `device_health` — Device availability & capability report — merges GET /me/player/devices + GET /me/player active id + sidecar labels/presets. 🟢 (1-2 reads, local merge). Read-only.
- `device_sync_state` — Reconcile sidecar device labels/volume presets (and scene device hints) against the
- `diff_playlist_snapshots` — Diff two local snapshots of a playlist and report every added and removed track between them
- `diff_playlists` — Compare two playlists fully paged: tracks only in A, only in B (by track ID), and tracks present in both but at different positions. Rendered rows are capped by max_results; totals are always accurate.
- `diff_since_snapshot` — Compare current playlist state to a stored snapshot
- `discover_weekly_diff` — This week\
- `discovery_digest` — One combined discovery digest from your own data: latest releases from your top artists with freshness flags,
- `discovery_ratio` — Measure what share of your recently-played tracks are NOT in your top tracks (discovery vs staple listening; default compares against medium_term). Quota: GET /me/player/recently-played + 1× GET /me/top/tracks.
- `duplicate_saved_versions` — Find songs you saved more than once from different albums (same normalised track name + primary artist, distinct album IDs). Read-only.
- `episode_bookmark` — Bookmark the current podcast-episode position to the sidecar (title, show, progress, optional note) — where_was_i is audiobooks-only today. Quota: 🟢 1 read (GET /me/player).
- `episode_context_bundle` — Episode + parent show + neighbouring episodes (prev/next by release date) in one card.
- `episode_guest_census` — Census recurring GUESTS across a show\
- `episode_runtime_report` — Runtime statistics for one show\
- `era_distribution_report` — Histogram of releases across eras: pass artist_id for that artist\
- `era_preference_report` — Compare the decade mix (album release eras) of your recently-played tracks against a top-tracks window, highlighting where recent listening skews older or newer (default medium_term). Quota: GET /me/player/recently-played + 1× GET /me/to…
- `explicit_content_ratio` — Share of your saved tracks flagged explicit, with the top explicit artists. Read-only.
- `extract_playlist_range` — Extract a positional range of a playlist (0-based start, EXCLUSIVE end; negative values
- `extract_spotify_id` — Extract the bare 22-char entity ID from any Spotify reference — URI, open.spotify.com URL (embed/intl forms ok), or bare ID — with zero network calls.
- `featuring_density_report` — Measure how many of your saved track titles carry a
- `filter_by_genre` — List URIs of your saved tracks or albums whose artists carry a given genre tag (case-insensitive tag-name match against your sidecar). Output is directly usable as create_playlist / add_to_playlist input. Read-only.
- `filter_playlist_by_artist` — Filter a playlist by artist (IDs/URIs or names, matched on id or exact name) and either
- `filter_playlist_by_duration` — Filter a playlist by track duration (min/max seconds) and either report the matches
- `filter_playlist_by_era` — Filter a playlist by album release era (decade and/or year window) and either report the
- `find_canonical_track` — [local-compute] Given a title + artist, search all versions, group by (artist, title) and rank them —
- `find_collaborations` — Finds tracks where two artists appear together: walks artist A\
- `find_duplicate_playlists` — Scan your playlists for exact and near-duplicate track sets. Exact = identical URI sets (order-insensitive); near = Jaccard overlap >= threshold. Read-only.
- `find_duplicate_saved_tracks` — Read-only duplicate detection over your saved (liked) tracks: flags the same recording
- `find_duplicate_spotify_uris` — List duplicate Spotify references in a batch with counts and positions, comparing canonical URI forms — computed locally with no network calls.
- `find_duplicate_tracks_across_playlists` — Find tracks that appear in more than one of the given playlists (cross-playlist dupes). Quota: 🟡 N GETs (one per playlist).
- `find_duplicates_in_playlist` — Find duplicate tracks in a playlist: repeated URIs plus relinked copies of the same song appearing under different URIs.
- `find_lost_since_snapshot` — Compare a live playlist against a snapshot and list snapshot tracks that have since disappeared from the playlist
- `find_new_since_snapshot` — Compare a live playlist against a snapshot and list tracks added to the playlist since it was taken
- `find_show_by_publisher` — Search the catalog and match shows whose PUBLISHER (network) matches your query — the
- `find_tool` — Search the live tool registry by name or description substring — the fastest way to discover which of the 500+ tools handles a job
- `followed_playlists_audit` — Inventory of followed vs owned playlists: counts, collab, public, follower totals. Quota: 🟢 GET /me/playlists paged.
- `following_analytics` — Analytics over followed artists: genre/popularity rollups via batch /artists?ids= enrichment. Quota: 🟢 GET /me/following + GET /artists batches.
- `format_spotify_uri` — Format an entity kind + ID pair into a canonical spotify: URI locally; validates the ID shape and returns null when the pair is malformed.
- `genre_dive_search` — Search artists by genre keyword (e.g.
- `genre_trends_over_time` — How your taste shifts — per-period top genres via artist genres/tags, with deltas and emerging/declining tags. Read-only.
- `get_album` — Get album details and track list by ID
- `get_album_tracks` — List the tracks of an album with pagination
- `get_artist` — Get artist info by ID
- `get_artist_albums` — List an artist
- `get_artist_appearances` — List albums an artist appears on (GET /artists/{id}/albums?include_groups=appears_on). Quota: 🟢 single.
- `get_artist_discography` — Get filtered discography for an artist (GET /artists/{id}/albums with album-type filtering)
- `get_artist_genres` — Get genres for an artist (focused view of GET /artists/{id})
- `get_artist_singles` — List an artist
- `get_artist_top_tracks` — Get an artist
- `get_audiobook` — Get full details for an audiobook by ID.${MARKET_NOTE}
- `get_audiobook_chapters` — List the chapters of an audiobook with pagination.${MARKET_NOTE}
- `get_available_markets` — List the country codes of every market where Spotify is available. Removed by Spotify\u2019s February 2026 Web API changes — unavailable for newer app registrations
- `get_categories` — List Spotify browse categories (GET /browse/categories)
- `get_category` — Get a single Spotify browse category by ID (GET /browse/categories/{id}). Quota: 🟢 single.
- `get_category_playlists` — Get playlists for a browse category (GET /browse/categories/{id}/playlists)
- `get_chapter` — Get full details for a single audiobook chapter by ID. Resume position requires the user-read-playback-position scope.${MARKET_NOTE}
- `get_context_inspect` — Inspect the currently-playing context (playlist/album/artist) in detail, including the position of the current track within that context when it is enumerable. Read-only.
- `get_currently_playing` — Lightweight poll of what is playing right now: the item and progress only. For full session state (shuffle/repeat mode, active device, volume) use get_now_playing instead.
- `get_device_volume_report` — Report volume_percent, supports_volume and active state for every Spotify device, highlighting the currently active device. Read-only.
- `get_devices` — List available Spotify Connect devices
- `get_episode` — Get full details for a podcast episode
- `get_episode_details` — Fetch full metadata for one episode (duration, release date, resume point, show, description).
- `get_followed_artists` — Get all artists the user follows (cursor-based pagination)
- `get_me` — Get the current user
- `get_newly_released_episodes` — Collect episodes released since a date across ALL saved shows, merged newest-first and
- `get_now_playing` — Full device/session state for what is playing right now — item, progress, plus shuffle/repeat mode, active device, and volume. For a lightweight item+progress poll use get_currently_playing instead.
- `get_playback_context` — Resolve the current playback context URI (from GET /me/player) to catalog metadata — playlist/album/artist/show name, owner, track count. 🟢/🟡 (1-2 reads). Read-only.
- `get_playback_snapshot` — Return the full current playback state compactly: device, track/episode, position, shuffle/repeat and context. Read-only.
- `get_playlist` — Get a playlist
- `get_playlist_added_dates` — List when each track was added to a playlist (added_at + added_by). Quota: 🟢 GET /playlists/{id}/items paged.
- `get_playlist_cover` — Get a playlist
- `get_playlist_followers` — Get follower count for a playlist, optionally including public owner profile
- `get_playlist_items` — List a playlist
- `get_playlist_snapshot` — Expose snapshot_id + item count for optimistic concurrency. Quota: 🟢 2 GETs.
- `get_queue` — Get the current playback queue
- `get_queue_snapshot` — Return the full upcoming queue with per-track runtime and the total queue runtime. Read-only.
- `get_recently_played` — Get recently played tracks with timestamps
- `get_saved_albums` — Get albums saved in the user
- `get_saved_audiobooks` — List the audiobooks saved in the current user
- `get_saved_counts` — Library size snapshot: total counts for tracks/albums/shows/episodes/audiobooks/playlists via limit=1 reads — no item paging. Quota: 🟢 6 GETs.
- `get_saved_episodes` — Get podcast episodes saved in the user
- `get_saved_shows` — Get podcast shows saved in the user
- `get_saved_tracks` — Get tracks saved in the user
- `get_several_albums` — Get full details for several albums by ID in a single call (up to 20 per request)
- `get_several_artists` — Get full details for several artists by ID in a single call (up to 50 per request)
- `get_several_audiobooks` — Get full details for several audiobooks by ID in a single call (up to 50 per request). Audiobooks are only available in the US, UK, Canada, Ireland, New Zealand and Australia markets.
- `get_several_chapters` — Get full details for several audiobook chapters by ID in a single call (up to 50 per request)
- `get_several_episodes` — Get full details for several podcast episodes by ID in a single call (up to 50 per request)
- `get_several_shows` — Get full details for several podcast shows by ID in a single call (up to 50 per request)
- `get_several_tracks` — Get full details for several tracks by ID in a single call (up to 50 per request)
- `get_show` — Get full details for a podcast show
- `get_show_details` — Fetch full metadata for one show (description, publisher, episode count, languages, media type).
- `get_show_episodes` — List a podcast show
- `get_show_latest_episode` — Return the single newest episode of a show with duration, description, and resume point —
- `get_top_artists` — Get the user
- `get_top_tracks` — Get the user
- `get_track` — Get full details for a track by ID
- `get_user_playlists` — List the current user
- `get_user_playlists_by_id` — List another Spotify user
- `get_user_profile` — Get any Spotify user
- `grow_playlist` — Propose tracks to grow one of your playlists using ONLY your own listening data (no recommendations): finds tracks appearing in >=2 of your OTHER playlists, boosts ones sharing an artist with the target playlist, excludes tracks already …
- `history_search` — Search local portability/backups for files matching a query (filename substring). Quota: 🟢 local only (no API).
- `inspect_tool` — Show one tool\
- `is_local_census` — Count your saved tracks flagged as local files (is_local true) and list them — these often fail to play on other devices. Read-only.
- `is_valid_spotify_uri` — Boolean validity check for a single Spotify reference — true only for well-formed spotify: URIs with a 22-char base62 ID; evaluated locally.
- `join_uri_list` — Join an array of Spotify references into a single delimited string — comma, semicolon, newline, or a custom glue; local only.
- `label_discography_explorer` — Group an artist\
- `label_explorer` — Census of record labels across your saved albums (label comes from chunked full-album fan-in); pass a label
- `last_heard` — For 1-10 artists: when did you last actually play them (recently-played cursor walk) + the gap — answers
- `library_coverage_report` — Report coverage between your saved tracks and playlists: orphan saved tracks (liked but not in any playlist) and unsaved playlist items. Read-only.
- `library_genre_report` — Aggregate your saved library by user-declared genre tags. Scans all saved tracks and albums, joins each item\
- `library_growth_report` — How fast your library is growing — buckets saved tracks/albums/shows/episodes by added_at period (weekly/monthly/yearly). Read-only.
- `library_hygiene` — Read-only album completion & consolidation analysis over your liked tracks: flags
- `library_snapshot_diff` — Diff two portability/library sidecar JSON files (library.json or playlists.json): added/removed counts + samples. Quota: 🟢 local only (no API).
- `library_to_playlist` — Export your saved tracks (or saved albums\
- `library_value_summary` — One mega-report over your saved library: totals, runtime, explicit/local/unplayable counts, collab + featuring density, growth streaks, era histogram, duplicate-version and edition-lint counts, and top artists. Read-only.
- `list_all_chapters` — List every chapter of an audiobook in one complete table (index, name, duration, resume point). Walks all pages of the chapters endpoint, so long books are not truncated the way they are in the Spotify app.
- `list_backups` — List previous library backups (newest first) with path, creation date, size, and the _meta.counts summary from each snapshot
- `list_device_presets` — List stored device name labels and volume presets.
- `list_playback_bookmarks` — List all captured playback bookmarks stored locally under the backup dir, newest last. Read-only.
- `list_playback_states` — List saved playback state snapshots from the local sidecar.
- `list_playlist_snapshots` — List stored snapshots (optionally filtered by playlist_id)
- `list_saved_shows` — List the shows saved in your library with publisher, episode count, and saved date —
- `list_saved_snapshots` — List local playlist snapshots (newest first) with path, creation time, size, and the _meta summary; optionally filtered to one playlist
- `list_scenes` — List saved playback scenes from the local sidecar
- `list_sessions` — List tagged listening sessions (optionally filter by tag). Auto-detect mode can also scan recently-played gaps.
- `list_show_episodes` — Page one show\
- `listening_clock` — Profile when you listen by local hour (24-bucket histogram plus daypart totals and peak hour) from recently-played history (default 150 items). Quota: GET /me/player/recently-played cursor walk.
- `listening_clock_heatmap` — Render a weekday × hour listening heatmap from recently-played history with the peak cell highlighted (default 150 items). Quota: GET /me/player/recently-played cursor walk.
- `listening_consistency_score` — Score how consistent your listening is (0-100) from recently-played history: active-day coverage, hour spread, and weekday balance with each component shown (default 150 items). Quota: GET /me/player/recently-played cursor walk.
- `listening_gaps_report` — Find the quiet stretches in your recently-played history: every inactivity gap above a threshold (default ≥120 minutes) with the longest gaps listed (default 150 items). Quota: GET /me/player/recently-played cursor walk.
- `listening_heatmap` — When do you listen? Buckets recently-played tracks into 168 hourly slots (24h x 7d) and reports peak/quiet windows. Read-only.
- `listening_journal_append` — Attach a timestamped note to today\
- `listening_recap_brief` — Produce a one-call recap of your recent listening: headline plays, top artist/track, leaderboard leaders, peak hour, busiest weekday, discovery ratio, and streak status (default 200 history items). Quota: GET /me/player/recently-played +…
- `listening_report` — Aggregate listening report: compares your top tracks between two time windows (rising / constant / fading), plus era histogram, discovery ratio, repeat overlap with recently played, and hour-of-day buckets
- `listening_streak_report` — Compute consecutive-day listening streaks from recently-played history, including the longest streak and whether it is still alive (default 150 items). Quota: GET /me/player/recently-played cursor walk.
- `listening_streaks` — Compute consecutive-day listening streaks from recently-played history (up to 150 items). Quota: GET /me/player/recently-played cursor walk.
- `listening_week_in_time` — Charts for any specific past week within the ~90-day recently-played window, via a
- `longest_saved_tracks` — Rank your saved tracks by duration, longest first. Read-only.
- `lyric_snippet_search` — Finds candidate tracks for a remembered lyric or title fragment: runs quoted-phrase /search over tracks and
- `make_spotify_uri` — Construct a spotify: URI from kind + ID with strict validation — rejects wrong-length IDs and unknown kinds before anything is built.
- `market_availability` — Per-entity multi-market preview — checks if a track/episode/album is playable in each of 1-10 given markets (N× GET /{type}/{id}?market=X). Reports per-market available/404 plus full available_markets. 🟡 (N reads, 1-10). Read-only.
- `market_validate` — Validate ISO 3166-1 market codes against GET /markets (cached) and optionally return the account market from /me. Quota: 🟢 1–2 calls.
- `monthly_listening_report` — Calendar-month listening report: top tracks/artists, estimated minutes, active days and
- `mood_bucket_report` — Segment recently-played plays into daypart × familiarity buckets (fresh tracks vs staples from your top tracks, default medium_term) as a lightweight listening-mood proxy. Quota: GET /me/player/recently-played + 1× GET /me/top/tracks.
- `morning_briefing` — Daily digest in one call: new releases from followed artists + new episodes from saved
- `most_replayed` — Most-replayed tracks in the recent window: play counts per track from recently-played, deduped —
- `never_played_saved` — List saved tracks absent from your recently-played window. Honest bounds: recently-played only covers roughly your last 50 plays, so this is
- `normalize_spotify_uri` — Normalise any accepted Spotify reference form (URI with extra segments, URL with tracking params, bare ID) into its canonical lowercase spotify: URI, offline.
- `now_playing_history` — Merged listening stream — recently-played plus currently-playing item on top (deduped). 🟡 (2 reads). Read-only.
- `orphaned_artist_check` — Find asymmetries in your library: artists you saved tracks from but never saved an album of, and vice versa. Read-only.
- `overlap_playlists` — Find tracks shared across playlists: reports how many playlists each track appears in and lists tracks present in at least min_overlap playlists (default: all of them), most-shared first.
- `pause` — Pause playback on the active device
- `pause_everywhere` — Pause every live Connect device (attempts PUT /me/player/pause per non-restricted device) — kills the
- `peek_next` — Queue lookahead — next N tracks with durations and total runway. Right-sized via max_results. 🟢 (1 read). Read-only.
- `play_from_search` — Search Spotify by name and immediately play the best match. Works for songs and podcast episodes — no URI needed.
- `playback_compare_states` — Diff two saved playback snapshots (sidecar only, no API). Shows item/shuffle/repeat/progress/device/context changes. 🟢 (0 API calls).
- `playback_health_check` — Probe the playback stack end to end: token validity, available devices, current playback state and queue readability — reporting pass/fail per probe. Read-only.
- `playback_timeline` — Progress forecast — elapsed/remaining for current track and optional queue runway, plus ETA wall-clock. 🟢/🟡 (1 read; +1 if include_queue). Read-only.
- `playlist_artist_heat` — Local artist-concentration check: top-artist share, an HHI concentration index, and the
- `playlist_balance` — Split a playlist into N balanced new playlists: sequential chunks (part 1 = first third, …)
- `playlist_changelog` — Diff ONE playlist across two backup snapshots (older → newer): tracks added, removed, and
- `playlist_clone_live` — Clone a playlist AS IT IS RIGHT NOW into a NEW playlist (name, optional description and
- `playlist_clone_snapshot` — Restore a playlist from a local backup snapshot as a NEW playlist (never overwrites the
- `playlist_collab_toggle` — Toggle collaborative/public flags (guards public=true && collaborative=true 400). Quota: 🟢 GET + PUT.
- `playlist_collaboration_report` — Report who added what to a playlist (counts + first/last timestamps, most-active)
- `playlist_diff` — Compare two playlists: what is only in A, only in B, and in both — plus whether the shared
- `playlist_era_profile` — Local release-era profile: decade histogram, median track age, and a time-capsule verdict.
- `playlist_flip_order` — Reverse a playlist: last item becomes first, written as one atomic replace. The standard
- `playlist_health_check` — Audit a playlist for unavailable, local, duplicate, and empty issues (read-only)
- `playlist_history` — List your local backup snapshots (from backup_now): file name, created timestamp, and the
- `playlist_intersect` — Keep only the tracks present in ALL of 2–10 playlists, written as one atomic replace —
- `playlist_intersection` — Report the tracks present in ALL of 2–10 playlists, including which of the source
- `playlist_names_bulk_normalize` — One-shot name hygiene across your library: strip
- `playlist_overlap_matrix` — Pairwise Jaccard overlap for 2–10 playlists — which of your mixes have drifted into the
- `playlist_pair_check` — Pairwise relationship report for two playlists: sizes, overlap, Jaccard similarity, and
- `playlist_resequence` — Sort a playlist in place — by track name, artist, album, duration, or date added — written
- `playlist_reverse` — Reverse a playlist in one atomic replace. Quota: 🟢 GET all + PUT/POST.
- `playlist_rotate` — Rotate a playlist by N positions: positive N moves the first N items to the end, negative N
- `playlist_seed_shuffle` — Shuffle a playlist in place (Fisher–Yates) with an optional deterministic seed — same seed,
- `playlist_shuffle` — Fisher-Yates shuffle a playlist (seeded optional). Quota: 🟢 GET all + PUT/POST.
- `playlist_snapshot_detail` — Inspect one playlist inside a local backup snapshot: its item_count as recorded plus the
- `playlist_sort` — Sort a playlist in place by added_at/name/artist/duration/popularity. Quota: 🟢 GET all + PUT/POST.
- `playlist_staleness_report` — Per-playlist staleness report: newest/oldest added_at, median item age and count added
- `playlist_staleness_score` — Local staleness check: days since the most-recent / median added_at in a playlist, a
- `playlist_strip_episodes` — Purify a playlist after collab drift: strip every podcast EPISODE (or every TRACK) with one
- `playlist_swap_positions` — Swap the items at two 1-based positions — e.g. flip tracks 3 and 7. Positions may be any
- `playlist_symmetric_difference` — Tracks in exactly one of two playlists (XOR). Quota: 🟢 2 GETs.
- `playlist_trim` — Trim playlist to N items (keep first/last/random). Quota: 🟢 GET all + PUT/POST.
- `playlist_trim_to_duration` — Fit a playlist to a target runtime (e.g.
- `playlist_union` — Union of 2–10 playlists into target (deduped, first-seen order). Quota: 🟢 N GETs + PUT/POST.
- `playlist_union_preview` — Preview the union of 2–10 playlists as a first-seen-ordered sequence, with per-playlist
- `predict_next_tracks` — Predict the next N tracks that will play from the queue, each with its own runtime and the cumulative time until it plays. Read-only.
- `publisher_portfolio` — Per-publisher portfolio across your saved shows: show count, listed episode totals, and
- `queue_duplicate_check` — Check the upcoming queue for duplicate tracks/episodes and report each duplicate group with its positions and wasted runtime. Read-only.
- `queue_profile` — Composition profile of the current queue: unique artists, albums, track-vs-episode mix, longest consecutive block by one artist. Quota: 🟢 1 read (GET /me/player/queue), local compute.
- `queue_runtime_report` — Compute runtime statistics for the upcoming queue: total, average, longest and shortest items plus time remaining on the current track. Read-only.
- `quota_probe` — Fire 2-3 lightweight authenticated reads and report Retry-After / quota state plus a
- `read_playlist_snapshot` — Read one local playlist snapshot and return its meta plus the captured track rows (truncated by max_results)
- `receipt_lookup` — Find mutation receipts by id, date range or affected URI — closes the receipts loop
- `refresh_smart_playlist` — Refresh a persisted smart playlist: rebuild candidates from the stored rule and recreate the playlist content.
- `reorder_playlist_items` — Move a range of items within a playlist. Spotify semantics: when insert_before > range_start, the effective destination shifts down by range_length because the moved range is lifted out first (e.g. moving [2] to insert_before=4 lands it …
- `repeat_listener_report` — Quantify repeat listening in recently-played history: share of plays going to tracks heard more than once plus consecutive same-track replays (default 150 items). Quota: GET /me/player/recently-played cursor walk.
- `repeat_queue_toggle` — One-call queue-repeat helper — sets repeat=context/off and optionally shuffle in 1-2 writes. 🟢.
- `room_level` — Level the room: read the active device volume and apply the same percent to every other live device. Quota: 🟡 1 read + N writes (one volume PUT per target device).
- `sample_playlist_tracks` — Draw a uniform random sample of N tracks from a playlist — deterministic when a seed is
- `saved_albums_by_decade` — Group your saved albums by release decade (from each album release_date) and show a histogram. Read-only.
- `saved_albums_by_label` — Group your saved albums by record label (from each album payload) and rank labels by count. Read-only.
- `saved_albums_by_year` — Histogram of your saved albums by release year. Read-only.
- `saved_library_delta` — Diff your current saved tracks/albums against a local backup snapshot (from backup_now):
- `saved_runtime_by_era` — Total listening runtime of your saved tracks grouped by the release decade of each track\u2019s album. Read-only.
- `saved_shows_publisher_census` — Count your saved shows by publisher and rank the biggest presses in your subscriptions —
- `saved_tracks_by_artist` — List your SAVED tracks for one artist (
- `saved_tracks_roulette` — Deal N random cards from your saved tracks into a FRESH playlist — an instant rediscovery
- `saved_vs_playlist_coverage` — Report which of your saved tracks appear in none of your owned/followed playlists, with a coverage ratio. Read-only.
- `scene_sampler_search` — Build a scene sampler: search artists by a scene/genre keyword, then fetch each act\
- `scope_audit` — Decode the current token
- `search` — Search Spotify
- `search_advanced` — Structured advanced-search composer: builds a valid Spotify filter query from typed fields and runs it.
- `search_by_isrc` — Exact track resolution from an ISRC via the
- `search_deep` — Paged catalog search that walks past the API limit of 10 results per type. Fetches up to 5 pages of 10 results per requested type server-side, dedupes by id, and returns compact rows (name | artists | album | URI).
- `search_fresh` — Query-scoped newness: runs your query with Spotify\
- `search_history` — Recall past searches (local sidecar, 90-day expiry). Optionally filter by query substring.
- `search_history_stats` — Analytics over the local search-history sidecar: top queries, type breakdown, recency. Quota: 🟢 local only (no API).
- `search_market_diff` — Same query run in two markets with the result sets diffed — availability/regional insight in one card.
- `search_rerun` — Re-execute a stored search by history id via GET /search.
- `search_saved_albums` — Search saved albums (client-side filter over bounded walk). Quota: 🟢 GET /me/albums paged.
- `search_saved_audiobooks` — Search saved audiobooks (bounded walk + client-side filter). Quota: 🟢 GET /me/audiobooks paged.
- `search_saved_episodes` — Search saved episodes (bounded walk + client-side filter). Quota: 🟢 GET /me/episodes paged.
- `search_saved_shows` — Search saved podcast shows (bounded walk + client-side filter). Quota: 🟢 GET /me/shows paged.
- `search_saved_tracks` — Search your Liked Songs (saved tracks) by text query and optional facets — client-side filter over a bounded walk of /me/tracks. For catalog-wide search use search. Reports walk truncation.
- `search_within_playlist` — Text search inside a single playlist (client-side filter over full item walk). Quota: 🟢 GET /playlists/{id}/items paged.
- `seek` — Seek to a position in the current track
- `session_length_report` — Split recently-played history into listening sessions by inactivity gap (default 30 minutes) and report size/duration stats plus a distribution (default 150 items). Quota: GET /me/player/recently-played cursor walk.
- `session_stats` — Session-size distribution from recently-played via detectSessions (30-min gap): session count, median/mean tracks per session, longest session, avg session length. Quota: 🟢 1-2 reads, local compute.
- `shortest_saved_tracks` — Rank your saved tracks by duration, shortest first. Read-only.
- `show_activity_feed` — Chronological feed of the most recent episodes across ALL your saved shows, merged and
- `show_backlog_plan` — Plan (dry-run only, never mutates) your podcast backlog: unlistened episodes across saved
- `show_backlog_report` — Per saved podcast show: unplayed episodes (resume_point), hours of backlog and
- `show_episode_search` — Full-text search within one show\
- `show_episode_timeline` — [local-compute] One show\
- `show_new_episodes` — Find new episodes across your saved podcast shows: reports episodes
- `show_recommendation_brief` — Cross-reference newly released episodes against your saved-episode and recently-played
- `show_runtime_stats` — [local-compute] Runtime profile for one show: total and average episode runtime plus release cadence
- `shows_release_calendar` — Estimate each saved show\
- `shuffle_state_report` — Report the current shuffle and repeat state, the device they apply to and the active context. Read-only.
- `skip_n` — Advance N tracks at once via N sequential POST /me/player/next calls. Quota: 🔴 N writes (1-20, one call per skip — Spotify has no batch-skip endpoint).
- `skip_next` — Skip to the next track in the queue or context
- `skip_previous` — Skip to the previous track. If more than 3 seconds in, restarts the current track first.
- `snapshot_added_at_report` — Report when the tracks in a snapshot were added to the playlist, bucketed by month (YYYY-MM)
- `snapshot_changelog` — Build a chronological changelog of a playlist from every local snapshot, describing the changes between consecutive snapshots
- `snapshot_diff_summary` — One-paragraph summary of the differences between two snapshots: counts plus the first few changed tracks
- `snapshot_disk_usage` — Report disk usage of the snapshot directory: total size, file count, per-playlist breakdown, and the largest files
- `snapshot_integrity_check` — Validate one snapshot (or all of them): JSON parses, required _meta keys exist, and the declared track_count matches the tracks array
- `snapshot_integrity_report` — Aggregate health report over all local snapshots: valid vs corrupt files, per-playlist coverage, and the age of each playlist’s newest snapshot
- `snapshot_new_tracks` — List only the tracks added between an older and a newer snapshot of a playlist
- `snapshot_playlist` — Snapshot a playlist\
- `snapshot_registry_report` — Registry view of every local snapshot: per playlist, all snapshot ids with taken_at and track counts, plus naming anomalies in the snapshot directory
- `snapshot_removed_tracks` — List only the tracks removed between an older and a newer snapshot of a playlist
- `snapshot_retention_plan` — Report which snapshots a keep-last-N (+ optional age cutoff) retention policy would keep or delete — never deletes anything
- `snapshot_stats_report` — Compute stats for one snapshot: track count, unique URIs, duplicates, and the oldest/newest added_at dates
- `sort_uris_by_kind` — Sort Spotify references into deterministic groups by entity kind (track, album, artist, playlist, show, episode, audiobook, user) and return them labelled per group — offline.
- `split_playlist` — Split a playlist into N chunks (new playlists). Quota: 🟡 GET all + N POST /me/playlists + N POST items.
- `split_playlist_by_count` — Split a playlist into N roughly-equal parts, each written to a NEW playlist named
- `split_playlist_by_duration` — Split a playlist greedily into consecutive parts of a target runtime (e.g. 60-minute
- `split_uri_list` — Split a delimited string of Spotify references into a clean array — accepts comma, semicolon, whitespace, or newline separators; local only.
- `spotify_uri_kind` — Report the entity kind of a single Spotify reference (uri/url/bare ID) locally, or null when the kind segment is missing or unknown.
- `subscribe_to_show` — Save one or more shows to your library (PUT /me/shows) — previews a deterministic PLAN by
- `tag_listening_session` — Tag a listening session (auto-detected 30-min gaps from recently-played) with labels.
- `take_playlist_snapshot` — Capture a live playlist’s items (uri, name, added_at) into a timestamped local JSON snapshot file; dry_run=true previews the walk and target filename without writing.
- `taste_shift_report` — Compare short_term vs long_term top artists+tracks: rising/falling + Jaccard similarity. Quota: 4× GET /me/top/*.
- `title_length_outliers` — Statistical outliers in saved-track title length (characters): mean/median plus the longest and shortest titles. Read-only.
- `toolset_report` — Report the active toolsets and registration modules, plus the live registered tool count — answers
- `top_artist_leaderboard` — Score top artists across all three time windows with recency-weighted points (short×3, medium×2, long×1) and rank the combined leaderboard. Quota: 3× GET /me/top/artists.
- `top_artist_ranking_delta` — Show how each top artist’s rank moved between two time windows (climbers first; default compares short_term against medium_term). Quota: 2× GET /me/top/artists.
- `top_artists_by_range` — Top artists for each time window with rank deltas (short vs long). Quota: up to 3× GET /me/top/artists.
- `top_track_leaderboard` — Score top tracks across all three time windows with recency-weighted points (short×3, medium×2, long×1) and rank the combined leaderboard. Quota: 3× GET /me/top/tracks.
- `top_track_ranking_delta` — Show how each top track’s rank moved between two time windows (climbers first; default compares short_term against medium_term). Quota: 2× GET /me/top/tracks.
- `track_album_bundle` — Context card for one track: the track plus its full album metadata and the album\
- `track_enrichment_batch` — Up to 50 track IDs → enriched rows: album release date, label and artist genres joined back onto each track
- `track_release_origin` — Find where a track first appeared: walks an artist\
- `track_rotation_report` — Report how many times each track appears in recently-played history and bucket them into heavy/regular/light rotation (default 150 history items). Quota: GET /me/player/recently-played cursor walk.
- `undo_last_mutation` — Undo the most recent reversible mutation (receipt FIFO). Same inversion semantics as undo_mutation. Supports dry_run.
- `unplayable_saved_check` — Audit your saved library for tracks the API marks unplayable (is_playable false or a restrictions block) and show why. Read-only.
- `unsave_orphan_tracks` — Find saved tracks that appear in no playlist (orphans) and optionally unsave them. Quota: 🟡 walks library + all playlists (capped). Destructive when dry_run=false.
- `unsubscribe_from_show` — Remove ONE saved show from your library (DELETE /me/shows) after confirming what it is —
- `uri_kind_stats` — Aggregate statistics over a batch of Spotify references: counts per form, per kind, share percentages, and the modal kind — all computed locally.
- `uri_namespace_census` — Census of a batch of Spotify references grouped by reference form (uri/url/id/invalid) and by entity kind — a local frequency table, no network calls.
- `uri_shorthand_expand` — Expand shorthand Spotify refs like
- `uri_to_base62` — Strip a spotify: URI (or URL) down to its raw base62 ID string, locally; null when the reference has no extractable ID.
- `validate_spotify_uri` — Validate a Spotify reference against the URI grammar and 22-char base62 ID rule locally, returning a field-by-field validity report.
- `verify_receipt` — Verify that a previous mutation actually landed on Spotify by looking up its receipt
- `volume_report` — Read-only volume snapshot across all devices, including sidecar presets vs live deltas —
- `watch_artists` — Add artists to a local watchlist sidecar for new-release polling
- `weekday_heatmap` — Plays bucketed by weekday × daypart (morning/afternoon/evening/night) — listening_heatmap is hour-of-day; this adds the weekly dimension. Quota: 🟢 1-2 reads, local compute.
- `weekday_listening_report` — Break recently-played history down by weekday (plays, unique tracks, unique artists, busiest day; Mon→Sun ordering, default 150 items). Quota: GET /me/player/recently-played cursor walk.
- `weekly_rotation_report` — Track day-by-day rotation from recently-played history: plays, unique tracks/artists, and first-heard-this-window tracks per day (oldest→newest, default 150 items). Quota: GET /me/player/recently-played cursor walk.
- `where_was_i` — Orient yourself in an audiobook: matches current playback against the full chapter list and reports which chapter you are on, how far into it, and how much listening time remains.
- `year_explorer` — Time-machine view of one release year built from your own library plus a small catalog supplement: saved
- `year_in_review` — Spotify-Wrapped substitute: top tracks/artists across all top-list time ranges, decade
- `add_to_playlist` — Add tracks or episodes to a playlist. Max 100 URIs per call.
- `add_to_queue` — Add a track or episode to the end of the playback queue
- `album_representative_plan` — Builds a deterministic
- `apply_device_presets` — Apply all stored per-device volume presets via PUT /me/player/volume.
- `apply_scene` — Apply a saved scene: resolve its device hint, transfer playback, then set volume/shuffle/repeat and start the saved context (in that order; missing targets are skipped)
- `apply_snapshot_changes` — Execute a merge plan on the live playlist (replay the changes between two snapshots); dry_run=true (default) only returns the plan
- `apply_volume_plan` — Set one target volume level across all (or selected) Spotify devices via per-device PUT /me/player/volume. Preview by default — pass dry_run=false to apply.
- `archive_played_episodes` — Remove fully-played episodes from your episode library in bulk (checks resume_point.fully_played). Batch DELETE /me/episodes; elicitation >50; dry_run supported.
- `artist_complete_check` — Collector completeness: the artist
- `artist_release_type_breakdown` — Break an artist\
- `backup_first` — Create a pre-flight library snapshot before a destructive operation. Returns snapshot file path and counts for later restore. Read-only against Spotify.
- `batch_add_to_playlist` — Add tracks from multiple source URIs (tracks, albums, artists, playlists) to a target playlist in one call. Dedupes within the batch and optionally against the existing playlist. Batches writes in groups of 100. Dry-run previews without …
- `batch_add_to_queue` — Add multiple URIs to the playback queue in one shot. POSTs each URI to /me/player/queue and returns a summary of queued/failed counts. Quota: 🟡 N writes (one POST per URI).
- `checkpoint_playback` — One-shot timestamped auto-named playback checkpoint (cp-2026-08-27T21:05 style) — saves you naming slots for save_playback_state. Quota: 🟢 1 read + local sidecar write.
- `copy_playlist` — Duplicate an existing playlist into a new playlist, preserving track order. Creates the new playlist then adds tracks in batches of 100. Dry-run reports what would be created.
- `create_playlist` — Create a new playlist for the current user. Set dry_run=true to preview without creating.
- `create_smart_playlist` — Create a playlist from rules over your own listening data: top tracks (by time range),
- `decade_sampler_plan` — Read-only sampling plan across decades: groups your saved albums by release decade and deterministically picks
- `dedupe_playlist_apply` — Remove duplicate uris from a playlist keeping the first (or last) occurrence: backs up
- `dedupe_playlist_plan` — Census every duplicate uri in a playlist — groups, all positions, and the exact keep-
- `device_type_census` — Census of available Spotify devices grouped by type, with counts, names and volume range per group. Read-only.
- `episode_resume` — Jump straight back to the newest (or a named) episode bookmark: transfer + play with position + seek (2-3 writes). Pairs with episode_bookmark. Quota: 🟡 2-3 writes.
- `export_all_playlists` — Export every owned (or all) playlist with metadata + items to a sidecar file. Quota: GET /me/playlists + N×GET /playlists/{id}/items; capped by fetchAllCap.
- `export_followed_artists` — Export your followed artists to a local directory as JSON or CSV. Fields: uri, name, genres. The file\
- `export_library_json` — Export your full library (saved tracks, albums, shows, episodes, audiobooks) to a local directory as JSON or CSV sidecar files. Respects SPOTIFY_MCP_FETCH_ALL_CAP per type; when capped, reports cap_reached + truncated and a prose footer (
- `export_listening_history` — Export your listening history (recently played) to a JSON or CSV sidecar by walking /me/player/recently-played with before-cursor pagination. Respects SPOTIFY_MCP_FETCH_ALL_CAP; writes file 0600 and reports path + counts. Analogous to ex…
- `export_playlist` — Export a playlist
- `export_playlist_json` — Full-fidelity JSON export of one playlist: items + added_at + added_by + URIs (the
- `export_playlist_markdown` — Export one playlist as a paste-ready markdown table (the doc-friendly variant of
- `export_profile_state` — Export local sidecar stores (scenes, genre-tags, playback-ext, search-history, mutations, artist-watchlist) to a single schema-versioned JSON archive. Note: artist-watchlist defaults to ./data/artist-watchlist.json (cwd-relative, not ~/.…
- `export_shows_opml` — Export your saved shows as OPML XML — the interchange format podcast apps speak.
- `export_snapshot_bundle` — Bundle selected snapshots (all of one playlist, or explicit ids) into a single portable JSON export file locally; dry_run=true (default) previews the bundle
- `follow_artists` — Follow one or more artists (1–50 IDs). Requires user-follow-modify.
- `front_to_back_plan` — Full front-to-back listening plan for one album: ordered track listing with cumulative start times and
- `handoff` — Move playback to another device preserving the current track and play position (and optionally set the target volume) — a lossless
- `import_from_sidecar` — Additive restore from a portability sidecar (library.json / playlists.json): re-adds missing saved items and creates missing playlists. Skips existing. dry_run=true by default. Quota: 🟢 local read + 🟡 contains-check + writes when dry_r…
- `import_playlist` — Parse an M3U or CSV document (the inverse of export_playlist) and append its Spotify URIs to a target playlist. Pass the document inline via content or read it from input_path. Skips non-Spotify lines, dedupes within the batch, and adds …
- `import_profile_state` — Restore local sidecar stores from a profile-state archive. Merge adds to existing stores; overwrite replaces them. Refuses archives newer than this server\
- `interleave_playlists_plan` — Plan (and optionally commit) interleaving 2–10 playlists — round-robin one track each or
- `library_growth_timeline` — Show how fast your saved-track library grew: adds per month, busiest month, and your longest/current monthly add streaks. Read-only.
- `listening_history_export` — Export your recently-played history as a paginated chronological table (oldest→newest; supports offset continuation; default walks up to 500 items). Quota: GET /me/player/recently-played cursor walk.
- `listening_session_close` — Close a listening session: captures an end-of-session playback snapshot, stamps the duration and marks the session log closed. Writes only a local sidecar file.
- `mark_episode_played_plan` — Plan (never execute — Spotify removed the mark-played API, issue #230) which episodes to
- `merge_playlists` — Merge multiple playlists into one. Deduplicates tracks across sources (first-seen order wins) and adds them in batches of 100. Pass target_playlist_id to append to an existing playlist (it is NOT cleared) or new_name to create a fresh pl…
- `merge_playlists_plan` — Plan (and optionally commit) merging 2–10 playlists in order into a NEW playlist
- `merge_snapshot_changes_plan` — Read-only plan to replay the changes between two snapshots onto the live playlist (add new and/or remove lost tracks)
- `move_items_between_playlists` — Bulk rehome items between playlists. Mode copy keeps the source intact; mode move removes from source after copying. Supports dedupe against target and optional name/artist filter.
- `move_tracks_between_playlists` — Move matching tracks (by uris, name substring, or artist) from one playlist to another:
- `mutation_log_export` — Render the JSONL mutation history as a CSV or markdown report, date/uri-filtered —
- `mute` — Set volume to 0 while remembering the previous level in the sidecar — one word beats volume_step ×N. unmute restores it. Quota: 🟢 1 read + 1 write.
- `open_url_to_spotify_uri` — Convert an open.spotify.com URL (including /embed/ forms with ?si= tracking params) into a canonical spotify: URI locally.
- `pin_playlist` — Follow (pin) a playlist to your library. PUT /playlists/{id}/followers.
- `plan_podcast_session` — Greedy-pack your saved podcast episodes into a listening session of a given length. Episodes play their remaining time (duration minus resume position); fully played ones are skipped. Scanning stops at the first unplayed episode that doesn
- `plan_volume_level_across_devices` — Plan setting every (volume-capable) Spotify device to one target volume level — returns the exact per-device PUT calls without executing anything. Read-only planner.
- `play_on` — Play a context/uris/search query on a named device (resolves device name → id via GET /me/player/devices, then PUT /me/player/play). 🟡 (1 read + 1 write; +1 if volume/shuffle). Supports device name substring or exact id.
- `playlist_chunk_preview` — Read-only pagination preview: how a playlist splits into write-sized chunks (the 100-URI
- `playlist_cover_from_track` — Set the playlist cover from a track album art: pick by position in the playlist, pass any track URI, or default to the first track with art. Fetches the image (largest JPEG candidate ≤ 256 KB) and PUTs /playlists/{id}/images. Quota: 🟢 G…
- `playlist_difference_plan` — Plan (and optionally commit) the set difference
- `playlist_edit_journal` — Journal a playlist\
- `playlist_expression_algebra` — Mini set-algebra over playlists:
- `playlist_fill_from_search` — Grow a playlist to N items from search queries you supply: round-robin one pick per query per pass, first unseen track match wins, chunked adds. Complements listening-data grow_playlist. Quota: 🟡 len(queries) searches + chunked adds.
- `playlist_from_tags` — Create or refresh a playlist from saved library items whose artists carry the given
- `playlist_move_block` — Move a contiguous block of items (1-based start + count) so its first item lands at a target
- `playlist_move_to_top` — Bring matching items (uris / artist / query) to the FRONT of a playlist in one atomic
- `playlist_template_apply` — Create an instant mood/vibe playlist from a template (focus, wind-down, gym, commute) composed from your existing listening data. Creates a new playlist and fills it.
- `playlist_to_library` — Save all tracks of a playlist to your Liked Songs (library). Quota: 🟢 GET playlist items + PUT /me/tracks (chunked 50).
- `queue_next` — Queue a track/episode to play next (tail insert with honest disclosure — Spotify has no insert-next API; tail placement is the API reality). Optionally notes temp-playlist workaround. 🟢 (1 write)
- `queue_next_episode` — Find the next unplayed episode of a show (not in recently-played and not fully played) within an episodes_back lookahead and queue it — podcast binge glue. Quota: 🟡 2-3 reads + 1 write (POST /me/player/queue).
- `queue_prune_plan` — Plan pruning the upcoming queue: identify redundant duplicate entries (and optionally podcast episodes) to drop, and emit a clean re-queue list. Spotify has no queue-removal endpoint, so this is a plan you act on with queue playback. Rea…
- `queue_replace_via_playlist` — Honest no-clear-endpoint workaround to replace the live queue: snapshot it, optionally filter (drop dupes / keep only given artists), build a playlist, and start it as the playback context — the live queue is replaced via context switch …
- `quick_save_now` — One-call
- `rename_device` — Rename a device locally (sidecar label — Spotify has no rename endpoint).
- `replace_playlist_items` — Replace ALL items in a playlist with the supplied URIs, overwriting the current contents. Lists longer than 100 URIs are sent in chunks internally (replace + appends).
- `replay_session` — Replay a tagged listening session: queue its tracks or create a playlist.
- `resolve_artist` — Resolve an artist name or URI to a Spotify artist ID via search
- `restore_library_snapshot` — STRICTLY ADDITIVE restore of a library snapshot written by backup_library_snapshot. Adds only what is missing: saves absent tracks/albums/shows/episodes/audiobooks, follows unfollowed artists, and creates NEW playlists named
- `restore_playback_state` — Restore a saved playback state snapshot (seeks, shuffle/repeat, queue context) to a device.
- `restore_playlist_from_snapshot` — Make a live playlist match a snapshot (add missing, remove extra tracks); dry_run=true (default) returns the deterministic PLAN without touching Spotify
- `restore_playlist_plan` — Read-only plan of exactly which tracks would be added/removed to make a live playlist match a snapshot — never mutates
- `resume_playback_position` — Resume a captured playback bookmark: transfer playback to the bookmarked device and seek to the bookmarked position. Preview by default — pass dry_run=false to execute.
- `reverse_playlist_plan` — Plan (and optionally commit) reversing a playlist\
- `rotate_playlist_plan` — Plan (and optionally commit) rotating a playlist by N positions — positive moves the
- `save_artist_new_releases` — Find new releases for an artist and save unsaved albums to Your Library (diffs against /me/library/contains)
- `save_discover_weekly` — Archive your Discover Weekly into a regular playlist (creates or overwrites the archive). Resolves Discover Weekly via /me/playlists exact match first, falling back to search (unverified); dry_run previews; idempotent if archive already …
- `save_episode` — Save episodes to your library (PUT /me/episodes) — previews a PLAN with episode names by
- `save_items` — Legacy per-type variant (kept for grandfathered app credentials that lack unified /me/library access). Prefer save_to_library. Save one or more items to the user
- `save_playback_state` — Snapshot current playback state to a named local slot (sidecar JSON).
- `save_queue_as_playlist` — Capture the current playback queue as a durable playlist. Reads GET /me/player/queue, creates (or appends to) a playlist, adds URIs in batches of 100 preserving order. Handles mixed track/episode URIs.
- `save_release_radar` — Archive your Release Radar into a regular playlist (creates or overwrites the archive). Resolves Release Radar via /me/playlists exact match first, falling back to search (unverified); dry_run previews; idempotent if archive already matc…
- `save_scene` — Save a named playback scene (device + volume + shuffle/repeat + optional context) to the local sidecar (~/.spotify-mcp/scenes.json)
- `save_show_digest` — Create or update a digest playlist from the latest show_new_episodes radar (auto-save helper).
- `save_smart_playlist_rule` — Persist a smart-playlist rule to the local sidecar for later refresh (mirrors backup sidecar pattern).
- `save_to_library` — Preferred. Accepts the widest URI mix (track, album, episode, show, audiobook, user, playlist) in one request. Save one or more items to the user
- `saved_albums_by_type` — Group your saved albums by album_type (album / single / compilation / EP). Read-only.
- `saved_track_age_report` — Histogram of when you saved each liked track (added_at): age buckets plus a per-year add histogram. Read-only.
- `schedule_wind_down` — Ramp playback volume down to a floor over N minutes (stepping every step_minutes), then pause. Runs in-process until done or cancelled via cancel_wind_down.
- `seek_relative` — Relative seek — forward/back by delta_ms from current progress (GET /me/player then PUT /me/player/seek, clamped to [0, duration]). 🟢 (1 read + 1 write).
- `set_device_volume_preset` — Store a per-device volume preset (0–100) in the local sidecar.
- `set_repeat` — Set repeat mode: off, context (repeat playlist/album), or track (repeat single track)
- `set_shuffle` — Enable or disable shuffle mode
- `set_volume` — Set playback volume (0–100)
- `sidecar_export_bundle` — One-call export of ALL local sidecar state (scenes, device presets, tags, smart rules,
- `sleep_timer_plan` — Plan a sleep timer: pick the leading queue items whose cumulative runtime best approximates a target duration, then a final pause call. Read-only planner.
- `sort_playlist_apply` — Sort a playlist in place by name, artist, album, duration, added-at date or release era:
- `sort_playlist_plan` — Plan a sort of a playlist by name, artist, album, duration, added-at date or release era
- `split_queue_plan` — Plan splitting the upcoming queue into runtime-bounded playlist chunks (default 30 minutes each). Preview by default — pass dry_run=false to actually create the playlists and fill them.
- `spotify_uri_to_open_url` — Convert a spotify: URI (or bare ID + kind) into its https://open.spotify.com share URL locally, stripping nothing else.
- `stale_saved_shows_plan` — Build a PLAN for pruning saved shows that have published nothing within the staleness
- `switch_device` — Transfer playback to a device by fuzzy name or sidecar label — pure handoff, no content args (complements play_on which plays content, and handoff which is pos-preserving id-only). Quota: 🟢 1 read + 1 write.
- `taste_checkpoint` — Save a snapshot of your current top artists/tracks/genres to a dated sidecar slot for
- `unfollow_artists` — Unfollow one or more artists (1–50 IDs). Requires user-follow-modify. Set dry_run=true to preview.
- `unmute` — Restore the volume level remembered by mute (falls back to 50% if nothing remembered). Quota: 🟢 1 write (sidecar read is local).
- `update_playlist` — Update a playlist
- `upload_playlist_cover` — Replace a playlist
- `volume_step` — Nudge volume up/down by a step (reads current volume via GET /me/player, then PUT /me/player/volume clamped 0-100). 🟡 (1 read + 1 write).
- `week_in_review_playlist` — Create a

## Related servers

- Delx Mcp A2a (1082 tools) — https://policylayer.com/tools/io-github-davidmosiah-delx-mcp-a2a.md
- Delx Protocol — Agent Recovery & Continuity (1076 tools) — https://policylayer.com/tools/io-github-davidmosiah-delx-protocol.md
- Delx MCP Server (740 tools) — https://policylayer.com/tools/io-github-davidmosiah-delx-mcp-server.md
- Binance MCP Server (734 tools) — https://policylayer.com/tools/nirholas-binance-mcp.md
- Yaver (664 tools) — https://policylayer.com/tools/io-github-kivanccakmak-yaver.md
- Chaoxing Agent (565 tools) — https://policylayer.com/tools/chaoxing-agent.md
- GoHighLevel MCP Server (559 tools) — https://policylayer.com/tools/busybee3333-go-high-level-mcp-2026-complete.md
- Allmcp (501 tools) — https://policylayer.com/tools/allmcp.md

## For agents

This record is a snapshot. Live verdicts and the full registry:

- Check every server in your MCP config at once: `npx -y policylayer stack`
- Vet a server before you add it: install the mcp-precheck skill — `npx skills add https://policylayer.com` (skill text: https://policylayer.com/skill.md)
- Query the registry over MCP: endpoint `https://api.policylayer.com/mcp` — tools `check_mcp_server`, `check_mcp_stack`, `check_tool`, `search_registry`, `get_change_events`

---

Source: the PolicyLayer MCP registry — one continuously verified record per MCP server. Full record: https://policylayer.com/registry?q=novalux12-spotify-mcp · API: https://policylayer.com/registry/api · Recommended policies for every tool: https://policylayer.com/policies/novalux12-spotify-mcp
