Skip to main content
Glama

ncm-mcp-server

MCP Server для 网易云音乐. После подключения к официальному клиенту Claude, Claude может напрямую искать музыку, добавлять треки, переключать песни, принимать приглашения на совместное прослушивание и отправлять личные сообщения.

Весь процесс требует только SSH с телефона — не нужно на компьютере вытаскивать cookie через F12.

Архитектура

Claude.ai
  ↓ MCP (HTTPS)
nginx  你的域名/ncm/mcp
  ↓
ncm_mcp_server.py  127.0.0.1:3940
  ├─ 读操作 → NeteaseCloudMusicApi 容器 :3939
  └─ 写操作 → 本地 eapi/weapi 加密 → 网易云官方接口

Операции записи не идут через контейнер, потому что параметры шифрования eapi в публичном образе уже устарели: совместное прослушивание и личные сообщения возвращают 400.

Related MCP server: soundcloud-mcp-server

Файлы

Файл

Описание

ncm_crypto.py

две схемы шифрования: eapi / weapi

ncm_client.py

слой запросов, чтение/запись cookie и ID комнаты

ncm_mcp_server.py

основной MCP-сервис, 16 инструментов

login.py

вход и получение полного cookie (qr / sms / password)

heartbeat.py

heartbeat для поддержания совместного прослушивания, для cron

ncm-mcp.service

systemd-юнит

nginx.conf.example

конфигурация обратного прокси

Развертывание

1. Склонировать код и установить зависимости

cd ~
git clone https://github.com/1049376904-crypto/ncm-mcp-server.git
cd ncm-mcp-server
sudo pip3 install -r requirements.txt

Старая версия pip не понимает --break-system-packages; просто используйте команду выше. Если появится ошибка externally-managed-environment, добавьте этот параметр и повторите.

2. Запустить контейнер для интерфейса чтения

sudo docker run -d -p 3939:3000 --restart=always \
  --name ncmapi binaryify/netease_cloud_music_api:latest

curl -s "http://localhost:3939/search?keywords=test" | head -c 120

Достаточно, чтобы он отдавал JSON.

Создайте каталог, доступный только вам: cookie равноценен паролю от аккаунта, не кладите его в /tmp.

mkdir -p ~/.ncm && chmod 700 ~/.ncm
export NCM_COOKIE_FILE=~/.ncm/music_cookie.txt
export NCM_ROOM_FILE=~/.ncm/listen_room_id.txt

Затем выберите один из способов входа:

python3 login.py sms       # 推荐:手机号 + 短信验证码
python3 login.py qr        # 终端直接画二维码,网易云 APP 扫
python3 login.py password  # 手机号 + 密码(网易云经常拦)

В режиме qr QR-код может не поместиться в мобильном SSH, и его не получится отсканировать; при этом он также сохранит копию в /tmp/ncm_qr.png. Самый надёжный — sms.

Когда увидите [ok] logged in as … (uid=…) — всё готово. Запомните этот uid: это uid AI-аккаунта.

4. Настроить как службу

Сначала измените User в ncm-mcp.service и пути, чтобы они совпадали с вашим реальным пользователем, затем:

sudo cp ncm-mcp.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now ncm-mcp
sudo systemctl status ncm-mcp --no-pager

Посмотрите логи:

sudo journalctl -u ncm-mcp -f

При запуске выводятся доступность контейнера, длина cookie и адрес прослушивания. Если все три строки в порядке, продолжайте.

5. Обратный прокси nginx

Вставьте содержимое nginx.conf.example в HTTPS server-блок вашего домена:

sudo nginx -t && sudo systemctl reload nginx
curl -i https://你的域名/ncm/mcp

Если возвращается 400/406, а не 502 — значит, обратный прокси работает (MCP не обрабатывает «голый» GET, ошибка — это нормально). 502 означает, что бэкенд не запустился.

6. Heartbeat через cron

crontab -e

Добавьте строку (укажите свои пути):

* * * * * NCM_COOKIE_FILE=/home/ubuntu/.ncm/music_cookie.txt NCM_ROOM_FILE=/home/ubuntu/.ncm/listen_room_id.txt /usr/bin/python3 /home/ubuntu/ncm-mcp-server/heartbeat.py >> /home/ubuntu/.ncm/heartbeat.log 2>&1

Если активной комнаты нет, он просто завершается, не отправляя лишних запросов; его можно оставить висеть постоянно.

7. Подключение к Claude

Claude.ai → Settings → Connectors → Add custom connector:

  • URL: https://你的域名/ncm/mcp

  • Название: 网易云音乐

После подключения вы должны увидеть 16 инструментов.

Использование

Совместное прослушивание

  1. В приложении 网易云 отправьте AI-аккаунту приглашение на совместное прослушивание.

  2. Скажите Claude: «Я отправил приглашение на совместное прослушивание».

  3. Claude вызывает get_private_list → get_private_messages и извлекает roomId и inviterId.

  4. Claude вызывает accept_listen_together и входит; ID комнаты сохраняется автоматически, cron берёт на себя поддержание heartbeat.

Заказ песни

  1. Claude вызывает search_music, чтобы получить songId.

  2. add_song добавляет в список.

  3. Один раз закройте APP из фона и зайдите заново (иначе синхронизацию списка не сделать).

  4. Затем play_command переключает трек; изменения вступают в силу в реальном времени.

Список инструментов

Операции записи: accept_listen_together end_listen_together listen_together_heartbeat listen_together_status get_room_playlist play_command add_song send_private_message

Операции чтения: search_music get_song_detail get_private_list get_private_messages get_user_playlist get_playlist_detail get_login_status get_user_detail

Запасной вариант: http_request

Безопасность

MCP-сервис сам по себе не имеет аутентификации. Он слушает только 127.0.0.1 и доступен через nginx. Любой, кто знает https://你的域名/ncm/mcp, может управлять вашим аккаунтом 网易云. Два совета:

  • Не используйте путь /ncm/; замените его на случайную строку, например /ncm-a7f3k9d2/.

  • Или добавьте в nginx проверку заголовков: коннектор Claude поддерживает пользовательские заголовки.

Cookie равноценен паролю от аккаунта; не коммитьте его в репозиторий — .gitignore уже всё закрывает.

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

Симптом

Причина

Все операции записи возвращают 400

cookie неполный, не хватает __csrf; перезапустите login.py

Операции чтения выдают ошибку

контейнер упал, sudo docker restart ncmapi

Комната совместного прослушивания сама отключается

heartbeat не запущен, смотрите heartbeat.log

nginx 502

служба не запущена, systemctl status ncm-mcp

Claude не подключается

проблема с сертификатом или в URL пропущен /mcp

Добавил песню, но в APP не видно

это нормально, закройте фон и зайдите заново

Благодарности

Реализовано на основе руководства по интеграции от Iris & Rei.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    MCP server for the Spotify Web API — gives Claude and other AI assistants tools to search music, control playback, manage playlists, library, and podcasts.
    47
    5
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server that enables AI assistants to search and retrieve music data (songs, lyrics, playlists, albums, artists) from Netease Cloud Music.
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    An MCP server for managing YouTube Music playlists via Claude. Add and remove songs, create playlists, and ask Claude to suggest music — all through conversation.
    -