Skip to main content
Glama
Spotify MCP Server

Spotify MCP Server

by llyfn

Spotify MCP Server

PyPI

Сервер Model Context Protocol (MCP), предоставляющий инструменты для взаимодействия со Spotify Web API. Позволяет ИИ-ассистентам, таким как Claude, искать музыку, управлять воспроизведением, плейлистами и многим другим.

Возможности

  • Поиск — поиск треков, альбомов, исполнителей, плейлистов, шоу, эпизодов и аудиокниг

  • Управление воспроизведением — воспроизведение, пауза, пропуск, перемотка, громкость, перемешивание, повтор, управление очередью

  • Плейлисты — создание, обновление, добавление/удаление/изменение порядка треков

  • Библиотека — просмотр и управление сохраненными треками, альбомами, шоу, эпизодами и аудиокнигами

  • Обзор — получение сведений об альбомах, информации об исполнителях, метаданных треков

  • Подкасты и аудиокниги — просмотр шоу, эпизодов, аудиокниг и глав

  • Профиль пользователя — просмотр профиля, топ-исполнителей/треков, отслеживаемых исполнителей

  • 44 инструмента, охватывающих все не устаревшие конечные точки Spotify Web API

Related MCP server: Spotify MCP Server

Предварительные требования

  • uv — установите с помощью curl -LsSf https://astral.sh/uv/install.sh | sh

  • Учетная запись Spotify Developer

  • Приложение Spotify с Client ID и Client Secret

Получение учетных данных Spotify

  1. Перейдите на панель управления разработчика Spotify

  2. Нажмите Create App

  3. Заполните данные приложения:

    • App name: Выберите любое имя (например, "My MCP Server")

    • App description: Необязательно

    • Redirect URI: http://127.0.0.1:8888/callback

    • Which API/SDKs are you planning to use?: Выберите Web API

  4. Нажмите Save

  5. На странице вашего приложения найдите Client ID

  6. Нажмите Show client secret, чтобы увидеть ваш Client Secret

Важно: Redirect URI должен в точности совпадать с http://127.0.0.1:8888/callback (или тем, что вы указали в SPOTIFY_REDIRECT_URI). Не используйте localhost — используйте 127.0.0.1.

Установка

Выберите свой клиент ниже. Все примеры используют uvx для получения сервера по требованию — без клонирования и ручной установки.

Claude Code

claude mcp add spotify \
  -e SPOTIFY_CLIENT_ID=your_client_id \
  -e SPOTIFY_CLIENT_SECRET=your_client_secret \
  -- uvx mcp-server-spotify

Другие MCP-клиенты

Большинство MCP-клиентов настраивают серверы через JSON-файл. Добавьте эту запись в конфигурацию MCP вашего клиента:

{
  "mcpServers": {
    "spotify": {
      "command": "uvx",
      "args": ["mcp-server-spotify"],
      "env": {
        "SPOTIFY_CLIENT_ID": "your_client_id",
        "SPOTIFY_CLIENT_SECRET": "your_client_secret"
      }
    }
  }
}

Запуск из локальной копии

Для разработки или если вы хотите запустить измененную копию:

git clone https://github.com/llyfn/spotify-mcp.git
cd spotify-mcp && uv sync

Затем укажите своему клиенту путь к локальной копии вместо uvx:

"command": "uv",
"args": ["--directory", "/absolute/path/to/spotify-mcp", "run", "mcp-server-spotify"]

Конфигурация

Переменная

Обязательно

По умолчанию

Описание

SPOTIFY_CLIENT_ID

Да

—

Client ID вашего приложения Spotify

SPOTIFY_CLIENT_SECRET

Да

—

Client Secret вашего приложения Spotify

SPOTIFY_REDIRECT_URI

Нет

http://127.0.0.1:8888/callback

OAuth redirect URI

Аутентификация

Сервер использует поток Authorization Code Spotify:

  1. При первом использовании сервер открывает в вашем браузере страницу входа в Spotify

  2. Spotify попросит вас одобрить доступ — сервер запрашивает все области (scopes), необходимые для полного набора инструментов (воспроизведение, библиотека, плейлисты и данные пользователя)

  3. После авторизации Spotify перенаправляет на локальный сервер обратного вызова

  4. Сервер обменивает код авторизации на токены доступа/обновления

  5. Токены безопасно хранятся в ~/.spotify-mcp/credentials.json

  6. Токены автоматически обновляются по истечении срока действия

При запуске в headless-среде (SSH, Docker) URL для авторизации будет выведен в stderr — скопируйте и вставьте его в браузер вручную.

Повторная аутентификация

Чтобы выполнить повторную аутентификацию (например, после отзыва доступа), удалите сохраненные учетные данные:

rm ~/.spotify-mcp/credentials.json

Доступные инструменты

Поиск

Инструмент

Описание

search

Поиск треков, альбомов, исполнителей, плейлистов, шоу, эпизодов или аудиокниг

Альбомы

Инструмент

Описание

get_album

Получение сведений об альбоме по ID

get_album_tracks

Получение треков в альбоме

Исполнители

Инструмент

Описание

get_artist

Получение сведений об исполнителе по ID

get_artist_albums

Получение альбомов исполнителя

Треки

Инструмент

Описание

get_track

Получение сведений о треке по ID

Плейлисты

Инструмент

Описание

get_playlist

Получение сведений о плейлисте

update_playlist

Обновление названия, описания или видимости плейлиста

get_playlist_items

Получение элементов плейлиста

add_playlist_items

Добавление треков/эпизодов в плейлист

remove_playlist_items

Удаление элементов из плейлиста

reorder_playlist_items

Изменение порядка элементов в плейлисте

get_my_playlists

Получение плейлистов текущего пользователя

create_playlist

Создание нового плейлиста

Библиотека

Инструмент

Описание

get_saved_tracks

Получение сохраненных треков

get_saved_albums

Получение сохраненных альбомов

get_saved_shows

Получение сохраненных шоу

get_saved_episodes

Получение сохраненных эпизодов

get_saved_audiobooks

Получение сохраненных аудиокниг

save_to_library

Сохранение элементов в библиотеку

remove_from_library

Удаление элементов из библиотеки

check_saved_in_library

Проверка наличия элементов в библиотеке

Плеер

Инструмент

Описание

get_playback_state

Получение текущего состояния воспроизведения

get_currently_playing

Получение текущего воспроизводимого трека

play

Запуск или возобновление воспроизведения

pause

Пауза воспроизведения

next_track

Пропуск к следующему треку

previous_track

Пропуск к предыдущему треку

seek

Перемотка к позиции в треке

set_repeat

Установка режима повтора (трек/контекст/выкл)

set_volume

Установка громкости воспроизведения

toggle_shuffle

Переключение режима перемешивания

transfer_playback

Перенос воспроизведения на другое устройство

get_devices

Получение доступных устройств

add_to_queue

Добавление элемента в очередь воспроизведения

get_queue

Получение очереди воспроизведения

get_recently_played

Получение недавно прослушанных треков

Шоу и подкасты

Инструмент

Описание

get_show

Получение сведений о шоу

get_show_episodes

Получение эпизодов шоу

Аудиокниги

Инструмент

Описание

get_audiobook

Получение сведений об аудиокниге

get_audiobook_chapters

Получение глав аудиокниги

get_chapter

Получение сведений о главе

Пользователи

Инструмент

Описание

get_my_profile

Получение профиля текущего пользователя

get_my_top_items

Получение топ-исполнителей или треков

Отслеживание исполнителей/пользователей использует те же инструменты save_to_library / remove_from_library / check_saved_in_library — передайте URI исполнителя или пользователя.

Участие в разработке

См. CONTRIBUTING.md для настройки среды разработки и руководств.

Лицензия

MIT — подробности см. в LICENSE.

Available Tools

47 tools
add_playlist_itemsA

Add tracks or episodes to a playlist. Auto-chunks at 100 items per request.

    Args:
        playlist_id: The Spotify ID of the playlist.
        uris: List of Spotify URIs to add (e.g. ["spotify:track:xxx"]).
        position: Position to insert items (0-based). Appends to end if not specified.
            When chunking, subsequent chunks insert immediately after the previous.
    

Inputs: uris (required), playlist_id (required), position. Returns: result

add_to_queueA

Add a track or episode to the playback queue.

    Args:
        uri: Spotify URI of the item to add. E.g. "spotify:track:xxx".
        device_id: ID of the device. If not provided, uses the active device.
    

Inputs: uri (required), device_id. Returns: result

check_saved_in_libraryB

Check whether items are saved or artists/users/playlists are followed.

    Auto-chunks at 40 URIs per request.

    Args:
        uris: Spotify URIs: track, album, episode, show, audiobook, artist, user, or
            playlist (e.g. ["spotify:track:xxx", "spotify:artist:yyy"]).
    

Inputs: uris (required). Returns: result

create_playlistB

Create a new playlist for the current user.

    Args:
        name: Name for the new playlist.
        description: Description for the playlist.
        public: Whether the playlist should be public (default True).
    

Inputs: name (required), public, description. Returns: result

get_albumA

Get details of a Spotify album by its ID.

    Args:
        album_id: The Spotify ID of the album.
        market: ISO 3166-1 alpha-2 country code; affects availability/relinking.
    

Inputs: album_id (required), market. Returns: result

get_album_tracksA

Get tracks of a Spotify album.

    Args:
        album_id: The Spotify ID of the album.
        limit: Maximum number of tracks to return (1-50, default 20).
        offset: Index of the first track to return (default 0).
        market: ISO 3166-1 alpha-2 country code.
    

Inputs: album_id (required), limit, market, offset. Returns: result

get_artistA

Get details of a Spotify artist by their ID.

    Args:
        artist_id: The Spotify ID of the artist.
    

Inputs: artist_id (required). Returns: result

get_artist_albumsB

Get albums by a Spotify artist.

    Args:
        artist_id: The Spotify ID of the artist.
        include_groups: Comma-separated album types: album, single, appears_on, compilation.
        limit: Maximum number of albums to return (1-10, default 10).
        offset: Index of the first album to return (default 0).
        market: ISO 3166-1 alpha-2 country code.
    

Inputs: artist_id (required), limit, market, offset, +1 more. Returns: result

get_audiobookB

Get details of a Spotify audiobook.

    Args:
        audiobook_id: The Spotify ID of the audiobook.
        market: ISO 3166-1 alpha-2 country code.
    

Inputs: audiobook_id (required), market. Returns: result

get_audiobook_chaptersA

Get chapters of a Spotify audiobook.

    Args:
        audiobook_id: The Spotify ID of the audiobook.
        limit: Maximum number of chapters to return (1-50, default 20).
        offset: Index of the first chapter to return (default 0).
        market: ISO 3166-1 alpha-2 country code.
    

Inputs: audiobook_id (required), limit, market, offset. Returns: result

get_chapterA

Get details of a specific audiobook chapter.

    Args:
        chapter_id: The Spotify ID of the chapter.
        market: ISO 3166-1 alpha-2 country code.
    

Inputs: chapter_id (required), market. Returns: result

get_currently_playingB

Get the currently playing track or episode.

Inputs: no named parameters. Returns: result

get_devicesA

Get the user's available Spotify devices.

Inputs: no named parameters. Returns: result

get_episodeA

Get details of a podcast episode.

    Args:
        episode_id: The Spotify ID of the episode.
        market: ISO 3166-1 alpha-2 country code.
    

Inputs: episode_id (required), market. Returns: result

get_followed_artistsA

Get the current user's followed artists. Cursor-paginated.

    To follow or unfollow, use `save_to_library` / `remove_from_library` with Spotify URIs.

    Args:
        limit: Maximum number of artists to return (1-50, default 20).
        after: Cursor (last artist ID from previous page) to fetch the next page.
    

Inputs: after, limit. Returns: result

get_my_playlistsA

Get the current user's playlists.

    Args:
        limit: Maximum number of playlists to return (1-50, default 20).
        offset: Index of the first playlist to return (default 0).
    

Inputs: limit, offset. Returns: result

get_my_profileA

Get the current user's Spotify profile.

Inputs: no named parameters. Returns: result

get_my_top_itemsB

Get the current user's top artists or tracks.

    Args:
        item_type: Type of items: "artists" or "tracks" (default "tracks").
        time_range: "short_term" (~4wk), "medium_term" (~6mo), or "long_term" (all time).
        limit: Maximum number of items to return (1-50, default 20).
        offset: Index of the first item to return (default 0).
    

Inputs: limit, offset, item_type, time_range. Returns: result

get_playback_stateA

Get the current playback state including track, device, and progress.

Inputs: no named parameters. Returns: result

get_playlistA

Get details of a Spotify playlist.

    Shows playlist metadata plus the first 20 tracks. For more tracks or
    pagination, use `get_playlist_items`.

    Args:
        playlist_id: The Spotify ID of the playlist.
        market: ISO 3166-1 alpha-2 country code; affects track availability.
    

Inputs: playlist_id (required), market. Returns: result

get_playlist_itemsB

Get items (tracks/episodes) in a playlist.

    Args:
        playlist_id: The Spotify ID of the playlist.
        limit: Maximum number of items to return (1-50, default 20).
        offset: Index of the first item to return (default 0).
        market: ISO 3166-1 alpha-2 country code.
    

Inputs: playlist_id (required), limit, market, offset. Returns: result

get_queueB

Get the current playback queue.

Inputs: no named parameters. Returns: result

get_recently_playedB

Get the user's recently played tracks.

    Args:
        limit: Maximum number of items to return (1-50, default 20).
        after: Unix-ms cursor; return items played AFTER this timestamp.
        before: Unix-ms cursor; return items played BEFORE this timestamp.
            Only one of `after` / `before` may be set.
    

Inputs: after, limit, before. Returns: result

get_saved_albumsA

Get the current user's saved albums.

    Args:
        limit: Maximum number of albums to return (1-50, default 20).
        offset: Index of the first album to return (default 0).
    

Inputs: limit, offset. Returns: result

get_saved_audiobooksA

Get the current user's saved audiobooks.

    Args:
        limit: Maximum number of audiobooks to return (1-50, default 20).
        offset: Index of the first audiobook to return (default 0).
    

Inputs: limit, offset. Returns: result

get_saved_episodesA

Get the current user's saved episodes.

    Args:
        limit: Maximum number of episodes to return (1-50, default 20).
        offset: Index of the first episode to return (default 0).
    

Inputs: limit, offset. Returns: result

get_saved_showsA

Get the current user's saved shows (podcasts).

    Args:
        limit: Maximum number of shows to return (1-50, default 20).
        offset: Index of the first show to return (default 0).
    

Inputs: limit, offset. Returns: result

get_saved_tracksA

Get the current user's saved tracks.

    Args:
        limit: Maximum number of tracks to return (1-50, default 20).
        offset: Index of the first track to return (default 0).
    

Inputs: limit, offset. Returns: result

get_showA

Get details of a Spotify show (podcast).

    Args:
        show_id: The Spotify ID of the show.
        market: ISO 3166-1 alpha-2 country code; affects availability.
    

Inputs: show_id (required), market. Returns: result

get_show_episodesA

Get episodes of a Spotify show.

    Args:
        show_id: The Spotify ID of the show.
        limit: Maximum number of episodes to return (1-50, default 20).
        offset: Index of the first episode to return (default 0).
        market: ISO 3166-1 alpha-2 country code.
    

Inputs: show_id (required), limit, market, offset. Returns: result

get_trackA

Get details of a Spotify track by its ID.

    Args:
        track_id: The Spotify ID of the track.
        market: ISO 3166-1 alpha-2 country code; affects availability/relinking.
    

Inputs: track_id (required), market. Returns: result

next_trackA

Skip to the next track.

    Args:
        device_id: ID of the device. If not provided, uses the active device.
    

Inputs: device_id. Returns: result

pauseB

Pause playback on the active device.

    Args:
        device_id: ID of the device to pause. If not provided, pauses the active device.
    

Inputs: device_id. Returns: result

playA

Start or resume playback.

    Args:
        device_id: ID of the device to play on. Uses active device if omitted.
        context_uri: Spotify URI of context (album, artist, playlist).
        uris: List of Spotify track URIs to play. E.g. ["spotify:track:xxx"].
        offset_position: Position in the context to start playback (0-based index).
        position_ms: Position in milliseconds to seek to.
    

Inputs: uris, device_id, context_uri, position_ms, +1 more. Returns: result

previous_trackA

Skip to the previous track.

    Args:
        device_id: ID of the device. If not provided, uses the active device.
    

Inputs: device_id. Returns: result

remove_from_libraryA

Remove items from the user's library, or unfollow artists, users, and playlists.

    Auto-chunks at 40 URIs per request.

    Args:
        uris: Spotify URIs: track, album, episode, show, audiobook, artist, user, or
            playlist (e.g. ["spotify:track:xxx", "spotify:playlist:yyy"]).
    

Inputs: uris (required). Returns: result

remove_playlist_itemsA

Remove tracks or episodes from a playlist. Auto-chunks at 100 items per request.

    Args:
        playlist_id: The Spotify ID of the playlist.
        uris: List of Spotify URIs to remove (e.g. ["spotify:track:xxx"]).
    

Inputs: uris (required), playlist_id (required). Returns: result

reorder_playlist_itemsB

Reorder items in a playlist.

    Args:
        playlist_id: The Spotify ID of the playlist.
        range_start: Position of the first item to be reordered.
        insert_before: Position where the items should be inserted.
        range_length: Number of items to reorder (default 1).
    

Inputs: playlist_id (required), range_start (required), insert_before (required), range_length. Returns: result

save_to_libraryA

Save items to the user's library, or follow artists, users, and playlists.

    Auto-chunks at 40 URIs per request.

    Args:
        uris: Spotify URIs: track, album, episode, show, audiobook, artist, user, or
            playlist (e.g. ["spotify:track:xxx", "spotify:artist:yyy"]).
    

Inputs: uris (required). Returns: result

seekA

Seek to a position in the currently playing track.

    Args:
        position_ms: Position in milliseconds to seek to.
        device_id: ID of the device. If not provided, uses the active device.
    

Inputs: position_ms (required), device_id. Returns: result

set_repeatA

Set the repeat mode for playback.

    Args:
        state: Repeat mode: "track", "context", or "off".
        device_id: ID of the device. If not provided, uses the active device.
    

Inputs: state (required), device_id. Returns: result

set_volumeA

Set the playback volume.

    Args:
        volume_percent: Volume level (0-100).
        device_id: ID of the device. If not provided, uses the active device.
    

Inputs: volume_percent (required), device_id. Returns: result

toggle_shuffleA

Set or toggle shuffle mode for playback.

    Args:
        state: True to enable, False to disable. If omitted, flips the current state.
        device_id: ID of the device. If not provided, uses the active device.
    

Inputs: state, device_id. Returns: result

transfer_playbackA

Transfer playback to a different device.

    Args:
        device_id: ID of the device to transfer to.
        play: Whether to start playing on the new device (default True).
    

Inputs: device_id (required), play. Returns: result

update_playlistB

Update a playlist's name, description, or visibility.

    Args:
        playlist_id: The Spotify ID of the playlist.
        name: New name for the playlist.
        description: New description for the playlist.
        public: Whether the playlist should be public.
    

Inputs: playlist_id (required), name, public, description. Returns: result

whoamiA

Diagnostic: show auth status, profile basics, active device, and configured scopes.

Inputs: no named parameters. Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.5/5.0

    Scored across 47 tools

    Disambiguation4/5

    Tools target distinct resources and actions, but there are minor overlaps: get_playlist vs get_playlist_items and get_playback_state vs get_currently_playing could be confused, though descriptions clarify the differences.

    Naming Consistency4/5

    Mostly consistent snake_case with verb_noun (get_track, add_playlist_items), but some tools are single imperatives (play, pause, search) or use an adjective_noun form (next_track), slightly breaking the pattern.

    Tool Count2/5

    With 47 tools, the server far exceeds the recommended 3-15 range and crosses the 25+ threshold for 'too many', making it heavy and potentially overwhelming despite the broad Spotify domain.

    Completeness4/5

    Core CRUD for playlists, library, and playback is covered, but notable gaps remain such as no delete_playlist and no access to recommendations, audio features, or artist top tracks—minor omissions agents can work around.

    Maintenance

    ActivitySlowing
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers