Skip to main content
Glama

Navidrome MCP Server

MCP-сервер (Model Context Protocol) для Navidrome. Claude Desktop, Claude Code, Cursor и другие MCP-клиенты могут просматривать вашу медиатеку, создавать плейлисты, открывать новую музыку и воспроизводить аудио через динамики вашего компьютера.

Содержание

Related MCP server: Spotify MCP Server

Возможности

🎵 Музыкальная библиотека

Просматривайте и ищите песни, альбомы, исполнителей, жанры и теги. Фильтры охватывают поисковый запрос, статус избранного, диапазон лет, порядок сортировки и значения тегов, и они комбинируются: «все мои избранные джазовые альбомы из 90-х, отсортированные по году» или «каждая песня с тегом Soundtrack и рейтингом 5 звёзд». Инструменты анализа тегов показывают, что есть в вашей библиотеке, чтобы вам не приходилось угадывать значения фильтров.

🔊 Локальное воспроизведение аудио

Требуется mpv на хосте, где запущен MCP-сервер (см. Установка mpv).

Аудио воспроизводится через динамики вашего компьютера без браузера или веб-интерфейса Navidrome. Поиск и воспроизведение за один шаг: «сыграй 5 случайных избранных альбомов», «поставь в очередь всё, что я отметил избранным из 90-х, отсортированное по году» или «добавь 10 случайных рок-песен к тому, что уже играет, вперемешку». У альбомов есть три режима перемешивания: сохранять порядок, перемешивать порядок альбомов или чередовать треки.

Очередь можно редактировать во время воспроизведения: переставлять или перемешивать, не прерывая текущую песню, а удаление текущего трека переключает на следующий. Сохранённые радиостанции Navidrome (Icecast, SHOUTcast) транслируются через mpv с живыми метаданными ICY, так что вы видите, что играет на станции. Воспроизведение отправляет скробблы обратно в Navidrome, так что счётчики проигрываний и недавняя активность остаются синхронизированными. mpv запускается при первом использовании, может переживать перезапуски MCP-клиента через сокет на пользователя (см. Настройка MPV Remote для правил времени жизни) и работает на Linux, macOS и Windows 11.

Это работает с голосовыми транспортами (Whisper STT + TTS) для устройства hands-free на Raspberry Pi или постоянно включённой машине.

🎛️ MPV Remote (веб-интерфейс)

Требуется mpv (так же, как для локального воспроизведения). Включён по умолчанию и запускается вместе с сервером.

Веб-интерфейс по адресу http://localhost:8808 даёт любому браузеру управление локальным воспроизведением: сейчас играет с обложкой, транспорт и перемотка, громкость и живая очередь, по которой можно кликать для перехода, обновляемая в реальном времени. Встроенный выбор запускает любой плейлист, ваши избранные песни или избранные альбомы прямо со страницы, так что он работает как пульт без ассистента. Включите Expose on LAN, чтобы управлять воспроизведением с телефона или планшета. Аудио всегда выходит из машины, на которой запущен сервер. Подробности настройки, времени жизни и безопасности — в Настройка MPV Remote.

Веб-интерфейс MPV Remote

🎶 Плейлисты

Создавайте, обновляйте, переставляйте и удаляйте плейлисты. Добавляйте песни, целые альбомы, дискографии исполнителей или конкретные диски одной операцией. Находите, в каких плейлистах есть данная песня. Стройте плейлисты на основе данных прослушивания: «плейлист "Скрытые жемчужины" из песен с 5 звёздами и менее чем 5 проигрываниями» или «по одному лучшему треку из каждого альбома моих топ-10 исполнителей в хронологическом порядке».

🎼 Музыкальные открытия (Last.fm)

Требуется ключ API Last.fm (бесплатно на last.fm/api), указанный на странице настроек.

Находите похожих исполнителей и треки, получайте биографии и лучшие треки, просматривайте мировые музыкальные чарты. Комбинируйте это со своей библиотекой, чтобы находить недостающие альбомы («альбомы, отсутствующие у моих топ-5 исполнителей, отсортированные по популярности»), заново открывать забытую музыку («треки, похожие на мои любимые, которые у меня есть, но я никогда не играю») или создавать плейлисты «Лучшее» из того, что у вас есть.

🎤 Синхронизированные тексты песен

Включается на странице настроек (провайдер LRCLIB + user agent). Ключ API не нужен.

Получайте тексты с временными метками (формат LRC, миллисекундные метки) из сообщественной базы LRCLIB, сопоставляемые по названию, исполнителю, альбому и длительности. Если синхронизированной версии нет, возвращается обычный текст.

📻 Интернет-радио

Управляйте радиостанциями Navidrome и открывайте новые по всему миру. URL потоков проверяются перед добавлением (определение MP3, AAC, OGG и FLAC), а метаданные SHOUTcast/Icecast извлекаются. Работает массовое обслуживание: «проверь все мои станции и удали неработающие» или «протестируй эти 10 URL и добавь работающие».

Глобальное открытие использует Radio Browser (требуется user agent, задаётся на странице настроек). Он охватывает тысячи станций с фильтрами по жанру, стране, языку, кодеку, битрейту и популярности. Голоса и клики регистрируются, так что ваше использование влияет на рейтинг сообщества.

📊 Аналитика прослушивания

Доступ к счётчикам проигрываний, недавней активности, спискам с высоким рейтингом и самым проигрываемым, а также распределению тегов по библиотеке. Используйте это для сравнения привычек («жанры, которые я играю больше или меньше в этом году»), поиска забытых фаворитов и хитов-однодневок или создания плейлистов под настроение на основе ваших паттернов прослушивания.

⭐ Рейтинги и избранное

Отмечайте и снимайте отметки «избранное» с песен, альбомов и исполнителей. Устанавливайте рейтинг от 0 до 5 звёзд и просматривайте всё отмеченное или с высоким рейтингом. Читайте и записывайте сохранённую очередь Navidrome, которую веб-интерфейс использует для синхронизации между устройствами.

📚 Поддержка нескольких библиотек

Фильтруйте все операции по подмножеству ваших библиотек Navidrome. Установите значение по умолчанию на странице настроек (Default libraries, library.defaultLibraryIds) или переключайте активные библиотеки во время работы.

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

Категории инструментов, в заголовке которых указано требуется ..., регистрируются только при наличии соответствующей конфигурации.

Основная система

Инструмент

Описание

test_connection

Проверка подключения к Navidrome и отчёт о доступности функций/инструментов

Управление библиотекой

Инструмент

Описание

get_song

Подробные метаданные песни по ID

get_album

Подробные метаданные альбома по ID

get_artist

Подробные метаданные исполнителя по ID

get_song_playlists

Список всех плейлистов, содержащих данную песню

get_user_details

Профиль пользователя, доступные библиотеки и статус активной библиотеки

set_active_libraries

Установка активных библиотек для всех операций поиска/списка

Поиск

Инструмент

Описание

search_all

Поиск по исполнителям, альбомам и песням с фильтрами и сортировкой

search_songs

Поиск песен с расширенными фильтрами и сортировкой

search_albums

Поиск альбомов с расширенными фильтрами и сортировкой

search_artists

Поиск исполнителей с расширенными фильтрами и сортировкой

Плейлисты

Инструмент

Описание

list_playlists

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

get_playlist

Получение метаданных плейлиста по ID

create_playlist

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

update_playlist

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

delete_playlist

Удаление плейлиста

get_playlist_tracks

Получение содержимого плейлиста (JSON или M3U)

add_tracks_to_playlist

Добавление песен, альбомов, дискографий исполнителей или конкретных дисков одной операцией

remove_tracks_from_playlist

Удаление треков по позиции

reorder_playlist_track

Перемещение трека на новую позицию

Рейтинги и избранное

Инструмент

Описание

star_item

Отметить песню, альбом или исполнителя избранным

unstar_item

Снять отметку избранного

set_rating

Установить рейтинг от 0 до 5 звёзд

list_starred_items

Просмотр избранных песен, альбомов или исполнителей

list_top_rated

Просмотр элементов с наивысшим рейтингом

История прослушивания и сохранённая очередь

Инструмент

Описание

list_recently_played

Недавняя активность прослушивания с опциональным фильтром по времени

list_most_played

Самые проигрываемые песни, альбомы или исполнители

get_saved_queue

Чтение сохранённой очереди Navidrome (синхронизация веб-интерфейса)

save_queue

Сохранение очереди в Navidrome для синхронизации веб-интерфейса

clear_saved_queue

Очистка сохранённой очереди Navidrome

Метаданные и теги

Инструмент

Описание

search_by_tags

Поиск по значениям тегов (жанр, тип релиза, носитель и т.д.)

get_tag_distribution

Счётчики использования тегов по библиотеке

get_filter_options

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

Открытия Last.fm (требуется ключ API Last.fm)

Инструмент

Описание

get_similar_artists

Поиск исполнителей, похожих на данного

get_similar_tracks

Поиск треков, похожих на данный

get_artist_info

Биография исполнителя и теги

get_top_tracks_by_artist

Лучшие треки исполнителя

get_trending_music

Трендовые исполнители, треки и теги из чартов Last.fm

get_artist_albums

Полная дискография с типами релизов и годами (MusicBrainz), жанрами и популярностью (Last.fm) и флагом наличия в библиотеке для каждого альбома. Отвечает на вопрос «каких альбомов X мне не хватает?»

get_album_info

Детали альбома: треклист с длительностями, год и тип, жанры, сводка из вики, популярность и принадлежность к библиотеке. Работает для альбомов, которых у вас нет

Тексты песен (требуется провайдер LRCLIB, задаётся на странице настроек)

Инструмент

Описание

get_lyrics

Тексты песен с синхронизацией по времени (LRC) и обычные тексты, сопоставляемые по названию/исполнителю/альбому/длительности

Управление радиостанциями

Инструмент

Описание

list_radio_stations

Список всех сохранённых радиостанций Navidrome

get_radio_station

Подробная информация о станции по ID

create_radio_station

Создание одной или нескольких станций (JSON-массив, опционально validateBeforeAdd)

delete_radio_station

Удаление станции

validate_radio_stream

Проверка http(s) URL потока на доступность и наличие аудиоконтента

Глобальный поиск радиостанций (требуется user agent Radio Browser)

Инструмент

Описание

discover_radio_stations

Поиск станций по всему миру через Radio Browser

get_radio_filters

Доступные значения фильтров (теги, страны, языки, кодеки)

get_station_by_uuid

Подробная информация о станции Radio Browser

click_station

Регистрация клика воспроизведения для метрик популярности

vote_station

Голосование за станцию

Локальное воспроизведение (требуется mpv)

По умолчанию воспроизведение транслирует исходный файл (см. Формат транскодирования в Первичная настройка).

Инструмент

Описание

play_songs

Воспроизведение одной или нескольких песен. mode: 'replace' | 'append', опционально shuffle

play_albums

Воспроизведение одного или нескольких альбомов. mode плюс shuffle: 'none' | 'albums' | 'songs' (сохранить порядок, перемешать альбомы или перемешать треки)

play_albums_search

Поиск и воспроизведение альбомов за один шаг. Принимает все фильтры search_albums плюс mode и shuffle

play_songs_search

Поиск и воспроизведение песен за один шаг. Принимает все фильтры search_songs плюс mode и shuffle

play_playlist

Загрузка треков плейлиста в очередь по playlistId. Поддерживает mode и shuffle

play_radio_station

Воспроизведение сохранённой радиостанции Navidrome. Заменяет очередь, так как радио не может смешиваться с песнями или альбомами

pause

Пауза воспроизведения (позиция сохраняется)

resume

Возобновление воспроизведения

next

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

previous

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

seek

Перемещение в пределах текущего трека (абсолютное или относительное)

set_volume

Установка внутренней громкости mpv (0-100)

now_playing

Текущие название/исполнитель/альбом/позиция/длительность и индекс в очереди (или станция + метаданные ICY для радио)

playback_status

Проверка состояния движка (запущен, версия mpv, простой) без запуска mpv

get_play_queue

Снимок текущей очереди с метаданными и индексом текущего трека

clear_play_queue

Очистка очереди и остановка воспроизведения

shuffle_play_queue

Перемешивание порядка очереди без изменения состава. Текущий трек продолжает играть и перемещается в начало

move_in_play_queue

Перемещение элемента очереди между индексами. Никогда не меняет то, что играет

remove_from_play_queue

Удаление элемента. mpv переходит к следующему треку, если удалён текущий

play_queue_index

Переход к элементу очереди по указанному индексу. Не меняет порядок

Установка и настройка

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

  • Node.js 20+ (скачать)

  • Запущенный сервер Navidrome

  • MCP-совместимый клиент (Claude Desktop, Claude Code, Cursor или другой MCP-клиент с поддержкой локального stdio)

  • Опционально: mpv для локального воспроизведения аудио

Быстрая установка

Установите опубликованный пакет (автообновление при запуске):

npm install -g navidrome-mcp

Пакет: navidrome-mcp на npm.

Для сборки для разработки:

git clone https://github.com/Blakeem/Navidrome-MCP.git
cd Navidrome-MCP
pnpm install
pnpm build

Настройка вашего MCP-клиента

Конфигурация MCP-клиента только сообщает клиенту, как запустить сервер. Ваши учётные данные Navidrome и все параметры хранятся в локальном settings.json, редактируемом через страницу настроек в браузере, поэтому никакие секреты не попадают в JSON клиента или окружение. Страница настроек открывается при первом запуске (см. Первичная настройка).

Для Claude Desktop отредактируйте claude_desktop_config.json (расположение: %APPDATA%/Claude/ в Windows, ~/Library/Application Support/Claude/ в macOS, ~/.config/Claude/ в Linux). Другие MCP-клиенты используют ту же структуру JSON.

{
  "mcpServers": {
    "navidrome": {
      "command": "npx",
      "args": ["navidrome-mcp"]
    }
  }
}

Для ручной сборки замените command/args на:

"command": "node",
"args": ["/absolute/path/to/Navidrome-MCP/dist/index.js"]

Первичная настройка

При первом запуске без конфигурации страница настроек открывается в вашем браузере. Это происходит независимо от того, запустили ли вы MCP-сервер или автономный веб-плеер (navidrome-web). Если браузер не может открыться (например, через SSH), URL выводится в консоль, а ненастроенный MCP-сервер предоставляет инструмент open_settings, который возвращает его. Откройте страницу настроек в любое время с помощью:

npx navidrome-config

Введите URL Navidrome, имя пользователя и пароль, а также любые дополнительные функции. Затем нажмите Проверить соединение и Сохранить. Это создаёт локальный settings.json (структура: settings.example.json). Настройки загружаются при запуске и не перезагружаются на лету, поэтому перезапустите то, что вы запустили: закройте и снова откройте MCP-клиент или повторно запустите navidrome-web. При обновлении со старой настройки через env форма предзаполняется вашими предыдущими значениями env/.env. Проверьте и сохраните.

Машины без графического интерфейса и контейнеры: страница настроек привязывается только к loopback, поэтому хост без браузера (VPS, Docker-контейнер) настраивается с помощью переменных окружения. Когда settings.json не существует, сервер работает с NAVIDROME_URL, NAVIDROME_USERNAME и NAVIDROME_PASSWORD, плюс дополнительные переменные, такие как MCP_TRANSPORT и LASTFM_API_KEY. settings.json, если он создан, всегда имеет приоритет над env.

Обязательно: URL Navidrome, имя пользователя, пароль.

Опционально (задаётся на странице настроек):

  • Библиотеки по умолчанию: разделённые запятыми ID библиотек, активируемые по умолчанию. Пусто — все.

  • API-ключ Last.fm: включает поиск Last.fm.

  • User agent Radio Browser: включает глобальный поиск станций.

  • Поставщик текстов песен (LRCLIB) + user agent: включает получение текстов песен.

  • Путь к mpv: расположение бинарного файла mpv, если его нет в PATH. Пусто — автоопределение.

  • Формат транскодирования: по умолчанию raw, который транслирует исходный файл для наилучшего качества и надёжной перемотки. Установите кодек (например, mp3, opus) для медленных или тарифицируемых соединений. Битрейт применяется только при заданном кодеке.

  • Веб-интерфейс (порт / хост / expose / включён / автооткрытие браузера): настраивает MPV Remote (см. Настройка MPV Remote). По умолчанию localhost:8808.

  • Транспорт (тип / хост / порт): способ, которым сервер предоставляет протокол MCP. По умолчанию stdio, локальный транспорт, используемый настольными клиентами. Установите type в http, чтобы запустить сервер как сетевой процесс (см. Работа через HTTP).

Функции включаются, когда их настройки присутствуют.

Установка mpv (опционально)

mpv — это кроссплатформенный медиаплеер. Сервер регистрирует инструменты воспроизведения, когда обнаруживает mpv при запуске. Без него сервер по-прежнему управляет вашей библиотекой и сохранённой очередью Navidrome, но не воспроизводит звук.

macOS (через Homebrew):

brew install mpv

Linux:

sudo apt install mpv       # Debian / Ubuntu / Mint / PopOS
sudo dnf install mpv       # Fedora / RHEL / CentOS Stream
sudo pacman -S mpv         # Arch / Manjaro
sudo zypper install mpv    # openSUSE

Windows:

winget install shinchiro.mpv   # winget is included on Windows 11
scoop install mpv
choco install mpv

Используйте полный ID shinchiro.mpv. Обычный winget install mpv предложит выбрать между ним и неофициальным пакетом из Store. Сборка shinchiro — та, на которую ссылается mpv.io для Windows.

Примечание о PATH в Windows. Пакет shinchiro.mpv устанавливается в C:\Program Files\MPV Player\ и **не** добавляет себя в PATH. Либо:

  • Добавьте эту папку в PATH (Свойства системы → Переменные среды → Path → Создать), затем откройте новый терминал, либо

  • Укажите путь к mpv на странице настроек (playback.mpvPath) как полный путь к mpv.exe, например C:\Program Files\MPV Player\mpv.exe.

Другие способы установки (scoop, choco, ручной zip) используют другие папки. Если mpv --version не работает в новом терминале, найдите mpv.exe и примените одно из исправлений выше.

Готовый бинарный файл с mpv.io также подойдёт. Проверьте с помощью mpv --version. Затем перезапустите ваш MCP-клиент, чтобы сервер заново обнаружил mpv.

Настройка MPV Remote

Включение и время работы

Панель включена по умолчанию. Сервер запускает её как отдельный процесс navidrome-web, и порт привязывается немедленно, поэтому страница доступна до начала воспроизведения. Хосты без mpv не запускают её. Настройки плеера находятся за значком шестерёнки в плеере, а кнопки шестерёнки и питания появляются только для браузеров на хост-машине.

Переживает ли воспроизведение закрытие вашего AI-клиента:

  • По умолчанию (выкл): плеер, запущенный через MCP, и mpv останавливаются, когда MCP-сервер закрывается или перезапускается.

  • Продолжать воспроизведение после закрытия MCP-сервера (webui.persistAfterMcpExit, на странице настроек или в модальном окне шестерёнки): плеер продолжает работать. Остановите его кнопкой питания.

  • Запущен вручную (navidrome-web, ниже): всегда работает независимо. MCP-сервер подключается к нему и никогда его не завершает.

mpv останавливается, когда останавливается плеер, без фонового таймаута простоя. Чтобы отключить панель, снимите флажок Включить сопутствующую панель управления на странице настроек (webui.enabled).

Запуск автономно

Запустите плеер независимо от любого MCP-клиента:

navidrome-web                # after: npm install -g navidrome-mcp
# or, from a dev clone / manual build:
node dist/web/main.js

Он читает settings.json, открывает ваш браузер и работает в фоновом режиме, пока вы не остановите его кнопкой питания. Он сосуществует с экземпляром, запущенным через MCP: процесс, который первым привязывает порт, владеет им, а другой подключается. Журналы записываются в navidrome-web.log в вашем каталоге конфигурации.

Если ещё ничего не настроено, при запуске откроется страница настроек вместо плеера (см. Настройка при первом запуске). Заполните её и сохраните. Затем перезапустите navidrome-web.

Ярлык на рабочем столе (рекомендуется)

Создаёт значок для двойного клика на вашей платформе. Он запускает плеер в фоновом режиме без окна терминала и открывает ваш браузер. Если плеер уже запущен, он только открывает браузер.

navidrome-web-shortcut       # after: npm install -g navidrome-mcp
# or, from a dev clone (see Development):
pnpm make:launcher

Ярлык содержит абсолютные пути к вашему node и собранному плееру, поэтому работает без PATH. Он создаёт:

  • Linux: Navidrome Player.desktop на рабочем столе и в меню приложений (~/.local/share/applications). В GNOME в первый раз нажмите правой кнопкой → Allow Launching.

  • macOS: Navidrome Player.app на рабочем столе (при желании перетащите в /Applications).

  • Windows: Navidrome Player.vbs на рабочем столе и в меню «Пуск». (Если рабочий стол перенаправлен в OneDrive, файл окажется там.)

Повторно запустите генератор после перемещения или пересборки проекта, чтобы обновить пути.

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

Все настройки необязательны и находятся в разделе Web UI страницы настроек, ниже указаны их пути в settings.json. После сохранения перезапустите клиент. Исключение — persistAfterMcpExit, который модальное окно с шестерёнкой применяет на лету.

Параметр (settings.json)

По умолчанию

Эффект

webui.enabled

true

Установите false, чтобы отключить панель.

webui.port

8808

Порт, на котором слушает HTTP-сервер. Выберите свободный порт, если 8808 занят на вашем хосте.

webui.host

127.0.0.1

Адрес привязки. Переопределяйте только если нужен конкретный интерфейс. Обычно правильный вариант — Expose on LAN.

webui.expose

false

Привязка к 0.0.0.0, чтобы другие устройства в вашей LAN могли получить доступ к панели.

webui.autoOpenBrowser

false

Открывать плеер в браузере при запуске MCP-сервера. Запуск navidrome-web напрямую всегда открывает браузер.

webui.persistAfterMcpExit

false

Оставить запущенный через MCP плеер (и mpv) работать после закрытия или перезапуска MCP-сервера. Переключается на лету в модальном окне с шестерёнкой в плеере.

Использование в качестве пульта для телефона/планшета

  1. Включите Expose on LAN на странице настроек и сохраните.

  2. Перезапустите MCP-клиент (или перезапустите navidrome-web).

  3. Плеер записывает LAN-URL, по которым он доступен, в момент привязки (например, http://192.168.1.42:8808). Откройте один из них в браузере телефона и добавьте в закладки.

Примечание по безопасности

Веб-интерфейс не имеет аутентификации. Любой, кто может дотянуться до порта, может ставить на паузу, перематывать, искать, менять громкость и переставлять очередь.

  • С webui.host=127.0.0.1 (по умолчанию) он доступен только с самой машины, что безопасно.

  • С Expose on LAN (webui.expose=true) он доступен любому устройству в LAN. Это нормально для доверенной домашней сети, но не выставляйте его в публичный интернет. Нет ограничения частоты запросов, а управляющий API позволяет менять очередь и запускать плейлисты. Настройки плеера и кнопка питания остаются доступны только через loopback и скрыты для удалённых браузеров, так что телефон в вашей LAN может управлять воспроизведением, но не может менять настройки или выключать плеер. Основная страница настроек никогда не выставляется наружу. При включённом expose GET /healthz возвращает 404 вне хоста, чтобы не раскрывать отпечаток версии; проверяйте здоровье плеера с его хоста.

Работа по HTTP

По умолчанию сервер говорит по MCP через stdio. Клиент запускает его как дочерний процесс и общается через stdin/stdout. Это работает для десктопного клиента на той же машине, но недоступно по сети.

Установка транспорта в http заставляет сервер привязать сокет и обслуживать MCP Streamable HTTP transport на /mcp. Тогда он работает как отдельный процесс, к которому сетевые MCP-клиенты подключаются напрямую, без моста supergateway или mcp-proxy.

Добавьте блок transport в ваш settings.json. host по умолчанию равен 127.0.0.1 (только loopback). Установите expose: true, чтобы привязаться ко всем интерфейсам (0.0.0.0) и позволить удалённому клиенту подключиться; явный host переопределяет expose. Установите authToken, чтобы требовать bearer-аутентификацию. Это рекомендуется всегда, когда порт доступен за пределами loopback, а на странице настроек для этого есть кнопка Generate:

"transport": {
  "type": "http",
  "port": 3000,
  "expose": true,
  "authToken": "a-long-random-secret"
}

Укажите HTTP-совместимому MCP-клиенту адрес http://<host>:<port>/mcp:

{
  "mcpServers": {
    "navidrome": {
      "type": "http",
      "url": "http://your-host:3000/mcp",
      "headers": { "Authorization": "Bearer a-long-random-secret" }
    }
  }
}

Когда задан токен, каждый запрос к /mcp должен нести Authorization: Bearer <token> (сравнение за постоянное время), всё остальное получает 401. Если транспорт привязывается к не-loopback адресу без токена, сервер при запуске пишет предупреждение в лог, а не отказывается стартовать, так что развёртывание, ограниченное файрволом или NetworkPolicy, всё равно работает. GET /healthz никогда не закрывается токеном. Это неаутентифицированная конечная точка живости для проверок контейнеров: возвращает 200 {"status":"ok"} и не делает вызовов к Navidrome.

Фильтрация хостов (защита от DNS-ребinding): при привязке по умолчанию (loopback без токена) запросы, чей заголовок Host не является loopback-алиасом, отклоняются, так что вредоносная веб-страница не сможет управлять сервером через ваш браузер. Установка authToken или привязка к не-loopback адресу отключает автоматический фильтр. Удалённое развёртывание доступно по именам, которые сервер заранее знать не может, а bearer-токен уже блокирует ребinding (заманённый браузер не сможет подставить ваш токен). Чтобы закрепить допустимые имена, задайте transport.allowedHosts — он применяется всегда, когда присутствует. transport.allowedOrigins задавайте только для браузерных клиентов: он проверяет заголовок Origin.

Транспорт также можно настроить через переменные окружения: MCP_TRANSPORT (stdio|http), MCP_HTTP_HOST, MCP_HTTP_PORT, MCP_HTTP_EXPOSE (true — привязка ко всем интерфейсам), MCP_HTTP_AUTH_TOKEN и MCP_HTTP_ALLOWED_HOSTS / MCP_HTTP_ALLOWED_ORIGINS (через запятую). У веб-интерфейса есть соответствующее семейство WEBUI_* (WEBUI_ENABLED, WEBUI_PORT, WEBUI_HOST, WEBUI_EXPOSE, WEBUI_AUTO_OPEN_BROWSER, WEBUI_PERSIST_AFTER_MCP_EXIT). Они применяются, когда settings.json не существует, и предзаполняют форму настроек при первом запуске (см. Настройка при первом запуске).

Одна учётная запись, общее состояние: каждый HTTP-сеанс обслуживается одним процессом, держащим одну аутентифицированную учётную запись Navidrome, а выбор активной библиотеки глобален для процесса. Вызов set_active_libraries меняет фильтр библиотек для всех подключённых сеансов, и get_user_details отражает этот общий выбор.

Безопасность: сервер держит аутентифицированный сеанс Navidrome, поэтому открытый порт — это полный контроль над библиотекой без каких-либо учётных данных. Выставление порта за пределы localhost — осознанное действие (expose: true или явный не-loopback host). Если вы это делаете, задайте токен аутентификации или ограничьте доступ файрволом, Kubernetes NetworkPolicy или обратным прокси с TLS. Оставляйте транспорт stdio по умолчанию, если удалённый доступ не нужен.

Откуда идёт звук. Транспорт определяет, кто может достучаться до MCP-протокола, и не перемещает аудио. mpv работает рядом с процессом сервера, поэтому звук издаёт машина, на которой запущен сервер. HTTP на машине вне контейнера даёт удалённый MCP-доступ с работающим воспроизведением: запустите сервер на машине, подключённой к колонкам, укажите удалённым клиентам http://that-machine:3000/mcp и задайте authToken. Контейнер даёт постоянно доступную конечную точку только для инструментов библиотеки (поиск, плейлисты, оценки, метаданные радио, Last.fm, тексты песен) без аудио.

Для контейнеров см. Running in Docker: образ, варианты развёртывания, монтируемая конфигурация и особенности аудио.

Примечание о ChatGPT Desktop

Поддержка MCP в ChatGPT (веб и десктоп) требует размещённого HTTPS-эндпоинта и не работает с локальными stdio-серверами. Этот сервер умеет обслуживать MCP по HTTP (см. Работа по HTTP), так что вы можете разместить его за обратным прокси с TLS вместо моста вроде mcp-remote. Для самостоятельно размещённого музыкального сервера проще использовать Claude Desktop, Claude Code, Cursor или другой клиент с поддержкой stdio.

Устранение неполадок

Проблемы с подключением

  • Убедитесь, что Navidrome запущен и доступен

  • Проверьте, что Navidrome URL на странице настроек содержит протокол (http:// или https://)

  • Используйте кнопку Test connection на странице настроек (или проверьте учётные данные через curl / браузер) перед сохранением

Специфика macOS

  • См. macOS Troubleshooting Guide. Частая проблема — не найден путь к Node.js; решается симлинками или полными путями.

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

  • Используйте абсолютные пути в конфигурационных файлах

  • Проверяйте JSON на валидность (никаких висячих запятых)

  • Перезапускайте MCP-клиент после изменений

Известные ограничения

  • Нет звука без mpv. Вместо этого используйте веб-интерфейс Navidrome или Subsonic-клиент (см. Установка mpv).

  • В «недавно прослушанном» нет меток времени. Navidrome отдаёт счётчики воспроизведений и статус завершения, но не время последнего прослушивания.

  • Сохранённая очередь ≠ живая очередь. Инструменты *_saved_queue работают с серверной очередью Navidrome (синхронизация веб-интерфейса). Инструменты *_play_queue работают с локальным плейлистом mpv.

Разработка

git clone https://github.com/Blakeem/Navidrome-MCP.git
cd Navidrome-MCP
pnpm install
pnpm build
node dist/config-app/main.js   # opens the settings page; fill in + Save
# (writes settings.json to your OS config dir; see settings.example.json)

pnpm dev          # hot reload
pnpm test         # watch-mode tests
pnpm test:run     # one-shot tests
pnpm check:all    # lint + typecheck + dead-code
pnpm build        # production bundle

Тестирование автономного веб-плеера из dev-сборки

Это путь из исходников, чтобы попробовать плеер до того, как релиз попадёт в npm (опубликованный пакет может отставать от dev). Это касается и MCP-сервера, поскольку оба запускаются из одного dist/.

# 1. Build (also bundles the web UI's static assets into dist/)
pnpm build

# 2. Configure if needed; writes settings.json to your OS config dir
node dist/config-app/main.js     # opens the settings page; fill in + Save

# 3. Run the standalone player directly
node dist/web/main.js            # serves http://127.0.0.1:8808 and opens your browser

Чтобы сделать из этой сборки значок для двойного клика (глобальная установка не нужна):

pnpm make:launcher               # writes a shortcut to your Desktop + app menu

Заметки для Windows (PowerShell):

  • Используйте pnpm build, затем node dist\web\main.js — то же самое, что выше, но с обратными слэшами.

  • pnpm make:launcher записывает Navidrome Player.vbs на рабочий стол и в меню «Пуск». Он запускает node dist\web\main.js без окна консоли и встраивает абсолютный путь к этому каталогу, так что повторно запускайте его после перемещения папки.

  • Если перенаправленный/OneDrive рабочий стол скрывает файл, копия в меню «Пуск» всё равно работает (Пуск → введите «Navidrome»).

  • Для воспроизведения должен быть установлен mpv. Задайте playback.mpvPath на странице настроек, если его нет в PATH.

После npm install -g navidrome-mcp те же сценарии запускаются как navidrome-web, navidrome-config и navidrome-web-shortcut без клонирования и сборки.

Тестирование с MCP Inspector:

pnpm build
npx @modelcontextprotocol/inspector node dist/index.js                  # web UI
npx @modelcontextprotocol/inspector --cli node dist/index.js \
  --method tools/call --tool-name search_all --tool-arg query="jazz"    # CLI

Лицензия

  • Код: AGPL-3.0

  • Документация: CC-BY-SA-4.0

Поддержка


Сделано с ❤️ для сообщества Navidrome

Maintenance

ActivityActive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    B
    quality
    D
    maintenance
    Enables music management through search, playlist creation, and intelligent recommendations. Supports searching by song, artist, or album, creating and managing playlists, and getting music recommendations based on genre and mood.
    7
    13
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables interaction with Spotify through natural language for music discovery, playback control, library management, and playlist creation. Supports searching for music, controlling playback, managing saved tracks, and getting personalized recommendations based on mood and preferences.
    109
    5
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Blakeem/Navidrome-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server