ncm-mcp-server
ncm-mcp-server
网易云音乐 MCP Server。接到 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。
文件
文件 | 作用 |
| eapi / weapi 两套加密 |
| 请求层、cookie 和房间号读写 |
| MCP 主服务,16 个工具 |
| 登录拿完整 cookie(qr / sms / password) |
| 一起听心跳保活,给 cron 用 |
| systemd 单元 |
| 反代配置 |
部署
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 就行。
3. 登录拿 cookie
建一个只有自己能读的目录,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 模式在手机 SSH 里二维码可能挤得扫不出来,它会同时存一份 /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 长度和监听地址,三行都正常再往下走。
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. 心跳 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 个工具。
使用
一起听
你在网易云 APP 里给 AI 号发一起听邀请
告诉 Claude:“我发了一起听邀请”
Claude 调
get_private_list→get_private_messages解析出 roomId 和 inviterIdClaude 调
accept_listen_together加入,房间号自动存下,cron 接手保活
点歌
Claude 调
search_music拿 songIdadd_song加进列表你清一次 APP 后台重进(列表同步只能这么弄)
之后
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 里加 header 校验,Claude 的 connector 支持自定义 header
cookie 等同账号密码,别提交进仓库,.gitignore 已经挡了。
排查
现象 | 原因 |
写操作全 400 | cookie 不完整,缺 |
读操作报错 | 容器挂了, |
一起听房间自己断 | 心跳没跑,看 |
nginx 502 | 服务没起, |
Claude 连不上 | 证书问题或 URL 漏了 |
加歌了但 APP 看不到 | 正常,清后台重进 |
致谢
基于 Iris & Rei 的接入教程实现。
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/1049376904-crypto/ncm-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server