MCP-сервер и Codex skill для управления Яндекс Станцией
Yandex Station MCP
Отдельный MCP-сервер для управления Яндекс Станцией / колонкой с Алисой: музыка, радио, громкость, пауза, следующий трек, TTS и текстовые команды Алисе.
Код использует подходы из проекта AlexxIT/YandexStation под лицензией MIT. Это неофициальный API Яндекса, поэтому он может измениться.
Что умеет
- получить список колонок аккаунта;
- отправить Алисе текстовую команду:
включи радио Европа плюс; - произнести текст через колонку;
- произнести уведомление с заданной громкостью;
- поставить громкость;
- play / pause / next / previous;
- stop;
- быстрые команды для музыки и радио.
- таймеры, будильники, напоминания;
- погода и новости;
- список и запуск сценариев Яндекс Умного дома;
- диагностика подключения без вывода токенов.
Ограничения
- Это не официальный API Яндекса.
- Нужна авторизация Яндекса через QR.
- Токены хранятся только локально и не должны попадать в GitHub.
- Для облачного управления интеграция создает/обновляет служебный сценарий в аккаунте Яндекса с именем вида
ХА <device_id>. - Облачный режим не всегда дает точное состояние воспроизведения. Он хорошо отправляет команды, но не всегда знает, что сейчас играет.
Установка
git clone https://github.com/yasg1988/yandex-station-mcp.git
cd yandex-station-mcp
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
Авторизация через QR
python yandex_station_mcp\auth_qr.py
Скрипт покажет ссылку. Откройте ее в браузере, войдите в Яндекс и подтвердите вход. После успешного входа будет создан локальный файл:
yandex_station_mcp/yandex_tokens.json
Не публикуйте этот файл.
Проверка списка станций
python yandex_station_mcp\cli.py list
Проверка команды
python yandex_station_mcp\cli.py command "включи радио Европа плюс"
Подключение MCP в Codex
Пример C:\Users\<USER>\.codex\config.toml:
[mcp_servers.yandex-station]
command = "python"
args = ["D:\\path\\to\\yandex-station-mcp\\yandex_station_mcp\\server.py"]
startup_timeout_ms = 20000
[mcp_servers.yandex-station.env]
YANDEX_TOKEN_FILE = "D:\\path\\to\\yandex-station-mcp\\yandex_station_mcp\\yandex_tokens.json"
# YANDEX_STATION_ID = "опционально"
# YANDEX_STATION_NAME = "опционально"
Если колонок несколько, можно задать колонку по умолчанию через YANDEX_STATION_ID или YANDEX_STATION_NAME. Если переменные не заданы, используется первая доступная колонка аккаунта.
MCP tools
station_liststation_statusstation_defaultstation_diagnosticsstation_commandstation_saystation_notifystation_volumestation_playstation_pausestation_stopstation_nextstation_previousstation_radiostation_musicstation_timerstation_alarmstation_reminderstation_weatherstation_newsstation_scenario_liststation_scenario_run
CLI команды
python yandex_station_mcp\cli.py list
python yandex_station_mcp\cli.py diagnostics
python yandex_station_mcp\cli.py notify "Задача завершена" --volume 0.4
python yandex_station_mcp\cli.py stop
python yandex_station_mcp\cli.py timer 10 --text "проверить духовку"
python yandex_station_mcp\cli.py alarm "7:30"
python yandex_station_mcp\cli.py reminder "купить хлеб" "завтра в 9"
python yandex_station_mcp\cli.py weather
python yandex_station_mcp\cli.py news
python yandex_station_mcp\cli.py scenarios
python yandex_station_mcp\cli.py scenario "Название сценария"
Примеры фраз для Codex
включи радио Европа плюс на колонкесделай Алису потишепоставь громкость Алисы 30 процентовпопроси Алису включить мою волнускажи через колонку: ужин готовуведомь через колонку: задача завершенапоставь таймер на 10 минутпоставь будильник на 7:30напомни завтра в 9 купить хлебзапусти сценарий Вечер
Уведомление Codex через колонку после завершения задачи
В репозитории есть готовый hook-скрипт:
hooks/codex_stop_notify.py
Он срабатывает на событии Codex CLI Stop, ставит громкость 0.4 и произносит:
Сообщение от Кодекс: я закончил задачу
Пример блока для C:\Users\<USER>\.codex\config.toml:
[[hooks.Stop]]
[[hooks.Stop.hooks]]
type = "command"
command = 'python "D:\path\to\yandex-station-mcp\hooks\codex_stop_notify.py"'
timeout = 30
statusMessage = "Уведомляю через Яндекс Станцию"
После добавления hook откройте в Codex CLI команду /hooks и подтвердите доверие к hook-команде. Это нужно один раз после добавления или изменения hook.
Чтобы временно отключить уведомление без удаления hook, запустите Codex с переменной окружения:
$env:CODEX_YANDEX_NOTIFY_DISABLED = "1"
codex