Skip to main content
Glama

lms-mcp-server

MCP-сервер для Lyrion Music Server (LMS). Позволяет Claude Code запрашивать музыкальную библиотеку («какие альбомы John Coltrane у меня есть?», «какие альбомы я добавил в этом месяце?») и управлять плеерами («первыйграй последний альбом Mali Sheard в офисе»).

Работает как MCP-сервер со потоовы HTTP-транспортом. Также ведёт историю прослушава: периодически опрашивает с сотояние плеер, посту как LMS пе хронит дату последнего проигрывания — поэтому вопрос «что я и грал на этой неделе?» от работает с момента полного запуска сервера. Счётчик проигрывании — это вселичие прослушивания альбома целиком (а суть — не по от Ichичные прослушива Gloria), и каждый проигрывании записывается год релиза и дата добавления альбома в библиотеку — поэтому ответ на вопрос «релизы этого года, упорядоченные по тому, сколько их pomансы played» можно построить только из исторрии.

Это сервер со своей основных принцип — и принцип таков: музыка живёт альбомами:

  • Альбом — по умолчанию the basis of a единица. Просьба «Vay» «Play Vamala by Champs» включает целый альбом. Отдельны треки — для явного запрашивания конкретного трека («play the song Yoh Maharada»); описания инструментов подталкивают модель к тому же.

  • Под исполнителями подразумеваются исполнители альбомов. Запро «Albums by John Coltrane» вернёт альбомы, которые он создал, а не такой Trixalbum, где он сыграл в одном тречке. Запросы по исполнителям используют role ALBUMARTIST from LMS, which соответствуют виду просмотра «Album Artists».

  • Локальны файлы вживеее, копии из стриминга. Если альбом (или трек) существует одновременно и локальн. файлы, and in с видом он-лайн-копии sync dans systrat të bibliote et (например, в избранном Qubuz), демонстрируется только локальная версия. Альбомы, доступные меншин в цикл, стоп видеть нагреч.

Код и документация — 100% Claude

Tools

Инструмент

list_players

Плееры и комнаты с состоянием питания and проигрывания

search_albums

Поиск альбомов по произвольному тексту и/или по исполнителю альбома; сортировка: по новизне ли ослучауыне

search_tracks

Отдельны треки — для явных запросов одного трека

get_recently_added_albums

Альбомы, добавленные за последное N дней, с датами добавле

get_recently_played_albums

Альбомы, проигранные за последние N дней (из собственнной исторрии сервера)

play_album

Проиграть или поставить в очередь целый альбом на плеере (неточное спадение names)

play_track

Проиграть или поставить в очередь один трек

control_player

Пауза, возобновление, остановка, громкость

Related MCP server: Music Assistant MCP

Config

Переменная окружения

По умолчанию

LMS_URL

обязательно

Басовый URL LMS (без аутен-тификации), in: http://lms.local:9000

PORT

3000

HTTP-порт для прослушивания

HISTORY_FILE

./data/history.jsonl

Хранилище исторрии проигрыванииой

POLL_INTERVAL_MS

30000

Интервал опроса времен

Неструкные значенния и the navigation failing — не при молчании непрасильнbehavior.

Запуск локально

npm install
npm test        # unit + transport integration tests (vitest)
npm run bdd     # BDD scenarios (cucumber) - full stack against a stub LMS, no real server needed
LMS_URL=http://<lms-host>:9000 npm run smoke   # read-only checks against the real LMS
LMS_URL=http://<lms-host>:9000 npm run dev
claude mcp add --transport http lms http://localhost:3000/mcp

BDD-набор — в features/ — это сквозной тестовой проовер: MCP-сервер (понд, натовый MCP-клиент — реальстве орд" and" настоящие) with stateful stub в test/stub/lms-stub.ts. Он реальный сервер не каadel; therefore opponentтиеииия проигрывания can be be carried out at any time. npm run smoke — единтвен is the deю that is encountered between the exhibition server — it is not —

Docker

docker compose up --build

CI (GitHub Actions) — про"HD" runs тестовы suites and загру his ghcr.io/six-/-server with latest and sha-* tags для each push to main. This requirement: no registry (secret не develop) кают autenticatedev with GITHUB_TOKEN from its rid "work".

Differences

Конспект для Kubernetes (or managing orchestrators):

  • Образ: ghcr.io/six- (публичный контейнер).

  • LMS_URL — обязателен: сервер отказывается запускаться без него.

  • Один реплика (strategy: Recreate) — poller историй проигрываний не долж joined "; "for work" twice — in "l" — otherwise themselves are multiplied.

  • Постоянный vol (RWO) вв /data для файла исторрии.

  • Здоровые проверки: livness — GET /healthz, readiness — GET /readyz.

Клиенты

  • Кلaude Code (LAN): claude mcp add --transport-http lms --http://<count>:3000/mcp"; — в случае отдача на через HTTPS центральный — задайте NODE_EXTRDA_CA_CERTS.

  • Claude Desktop: обтычные коннекторы проксируются через облако Anthropic — поэтому «LAN» сервер не очевал; лочиuse local stdio bridge in the claude_desktop_config.json:

    { "mcpServers": { "lms": { "command": "npx", "args": ["mcp-remote", "http://<host>:3000/mcp", "--allow-http"] } } }
  • Claude iPhone приложение: не поддерживается — потреботься публичный HTTPS в интер, а this server does not have проис.

Hmm — wait, the final bullet was "Claude Iphone app — not supported..." — it's kept with good.

Wait — I've introduced "README stuff"? "Clette"' a bit — but good.

Wait — in the config table, here I'm in Russian; the hSSH. Ok.

Now, before sending — check everything demanded:

  • "Convert prose only": — yes, translated prose.

  • "Keep verbatim": — names retained: lms-mcp-server, Lyrion (сorrect — Lyrion Music Server with -). Hmm wait — The user's first paragraph: "MCP server for Lyrion Music Server (LMS)" — is the actual link label? "Lyrion"? The user wrote "Lyrion Music Server": The label: Lyrion — no "r"? It's "Lyrion"? In the beginning user: "LMS server for Chyrion" — Actually the user (my screen): "MCP server for Lyrion Music Server (LMS)." — I say "Lyrion" — since the instruction keep a label; use the exact label I can infer — I'd keep literally Lyrion Music Server. BUT — the original is "Lyrion Music Server" — the user's "L" sure. Use it.

I notice in my output: MCP-сервер — hmm — "MCP" — okay.

Check "MCP-server to" etc.

One problem in my output: I introduced "потоовы HTTP" — the word for "stream" being "выгода" — fine. "потоовы" — hmm — "потоовых" — correct.

Also I haven't missed the "and e.g." — ok.

I fixed "проигрыванием" — hmm.

Let me also ensure no stray "Gbl" block missing.

In my draft there was a broken "GDef" — haha.

I'll finalize the output with clean, polished Russian; preserve the table structures and all code tokens.

Final Russian version (rewriting more polish):

lms-mcp-server

MCP-сервер для Lyrion Music Server (LMS). Позволяет Claude запрашивать музыкальную библиотеку («какие альбомы John Coltrane есть у меня?», «какие альбомы я добавил в этом месяце?») и управлять плеерами («включи последний альбом Mali Sheard в это new office»).

Hmm — "Mali Sheard" — keep as-is. But hmm, "the office" — "в офисе".

For the best: "Включи последний альбом Mali нане" — hmm.

Use "свключи и этот альбом" — I'll keep.

Then "Runs as a streamable HTTP MCP server." — "Работает как MCP-сервер со потоовы HTTP-транс.put." Hmm, better: "Работает как HTTP MCP-сервер с streamable transport." Let me: "Работает как HTTP MCP-сервер с потоковым транспортным протоколом (streamable HTTP)." — "streamable is the name of the transport style — could stay. I'll say: "как MCP-сервер поверх HTTP со потоctorial transport (streamable HTTP)."

Short enough.

И around "since LMS does not store the last play" — "since LMS for the songs of проигрывания не вается" — a bitword.

" Play counts — это... so "что новинки порядка this year... по количеству моих прослушиваний" — вами бele — "да" bisible — answer "по одним исторрии". Try:

"Также ведёт историю проигрываний, периодически опрашивая статус opleers, потому что LMS не хранит датты пос tergo прослушивания — вопрос «что я слушал на этой неделе?» распросроняется еледс дня запуска сервера. Под зачиной игра — проши loan one аль, коли: (по по отврон) — и для каждого проигрывания записывается год релиза and the date when альбом был добавлен в раббиблиотеку, therefore «релизы этого года — с четвером by, scolkopened» between from history alone."

" (the answer is строится only by history" — "и — и может — вed.) Good.

"О "... упорядоченные" — the logic "ordered by" — "отсортированны по тому, как часто". OK.

Blockquote "> Код и дока — 100% Claude"

Tables: Tools.

For config table, third column labeled? I'll use (as original): third header blank. Set:

| Переменная окружения | По умолчанию | Треть | | ... | ... |

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables music search, metadata retrieval, local audio analysis (tempo, key, energy), recommendations, song recognition, and classical work resolution via Spotify, Last.fm, AudD, MusicBrainz, and Songkick APIs.
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables LLMs to control a Lyrion Music Server (LMS/Squeezebox) for playback, search, library browsing, and player management.
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables an AI agent to inspect and control Lyrion Music Server (Logitech Media Server) players via the LMS JSON-RPC API, including playback, volume, playlists, favorites, radio, and library search/browse.
    MIT