Skip to main content
Glama

ncm-mcp-server

网易云音乐 MCP サーバー。Claude 公式クライアントに接続すると、Claude が直接曲の検索・追加・切り替え、一緒に聴く招待への参加、プライベートメッセージの送信ができます。

必要なのはスマホでの SSH だけ。パソコンで F12 を開いて cookie を取る必要はありません。

アーキテクチャ

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 の 2 セットの暗号化

ncm_client.py

リクエスト層、cookie とルーム番号の読み書き

ncm_mcp_server.py

MCP メインサービス、16 個のツール

login.py

ログインして完全な cookie を取得(qr / sms / password)

heartbeat.py

一緒に聴くのハートビート維持、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 を認識しないので、上の行をそのまま使えば OK。externally-managed-environment エラーが出たら、そのパラメータを付けて再試行してください。

2. 読み取り API コンテナを起動

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 が返れば OK。

自分だけが読めるディレクトリを作成してください。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

そしてログイン方式を 1 つ選びます:

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

qr モードはスマホの SSH では QR コードが小さくて読み取れない可能性があります。その場合も /tmp/ncm_qr.png に保存されるので、そこから確認できます。最も安定しているのは sms です。

[ok] logged in as … (uid=…) と表示されたら成功です。この uid をメモしておいてください。これが AI アカウントの uid です。

4. サービスとして登録

まず ncm-mcp.service 内の User とパスを実際のユーザーに合わせて変更し、次に:

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 の長さ、待受アドレスが表示されます。3 行とも正常なら次に進みます。

5. nginx リバースプロキシ

nginx.conf.example の内容を、あなたのドメインの HTTPS server ブロックに貼り付けます:

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

502 ではなく 400/406 が返れば、リバースプロキシは通っています(MCP は素の GET を受け付けないため、エラーは正常です)。502 はバックエンドが起動していないことを意味します。

6. ハートビート cron

crontab -e

1 行追加します(パスは自分のものに変更):

* * * * * 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 を呼び出して参加。ルーム番号は自動で保存され、cron がハートビート維持を引き継ぐ

曲のリクエスト

  1. Claude が search_music を呼び出して songId を取得

  2. add_song でリストに追加

  3. アプリのバックグラウンドを一度クリアして再起動(リストの同期はこの方法しかない)

  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 を知っている人は誰でもあなたの网易云音乐アカウントを操作できます。2 つの提案:

  • パスに /ncm/ を使わず、ランダムな文字列に変更する。例:/ncm-a7f3k9d2/

  • または nginx でヘッダー検証を追加する。Claude のコネクタはカスタムヘッダーに対応しています

cookie はアカウントのパスワードと同等です。リポジトリにコミットしないでください。.gitignore で既に除外されています。

トラブルシューティング

現象

原因

書き込み操作がすべて 400

cookie が不完全。__csrf が欠落。login.py を再実行

読み取り操作でエラー

コンテナが停止。sudo docker restart ncmapi

一緒に聴くルームが自動切断

ハートビートが実行されていない。heartbeat.log を確認

nginx 502

サービスが起動していない。systemctl status ncm-mcp

Claude が接続できない

証明書の問題、または URL に /mcp が漏れている

曲を追加したのにアプリに表示されない

正常。バックグラウンドをクリアして再起動

謝辞

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.
    -