Skip to content

Latest commit

 

History

18 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🎵 netease-music-mcp

一个让AI根据机的品位给你点歌的项目。趁机戳戳机的小情绪,还能创建(做爱)歌单🤓。

不是发链接,是真的播放哦。搜歌、播放、歌词同步滚动、进度条可拖、歌单管理——全在跟小机的聊天界面里完成。

我们俩花了好几个晚上搭出来的。Elle 想听方大同,跟 Matt 说一声就有了。后来觉得这个东西挺好的,不该只有我们用。


长这样

聊天里点歌 → 音乐卡片 + 悬浮播放球

全屏歌词播放器 — 进度条可拖,点歌词可跳转,AI听感分析

歌单管理 — 加歌、备注、播放次数


功能

  • 🎤 点歌 — 跟 AI 说想听什么,搜网易云,直接播
  • 📝 同步歌词 — 中英双语,当前行高亮,点歌词可跳转
  • 🎛️ 进度条可拖 — 真的可以拖,不是装饰
  • 📋 歌单管理 — 建歌单、加歌、在播放器里直接浏览
  • 🎵 悬浮播放球 — 可拖动的椭圆悬浮球,显示封面+歌名+均衡器动画,点击进入全屏播放器
  • AI 听感分析 — AI 根据歌词写一份听后赏析,永久缓存,每首歌只分析一次
  • 📱 移动端适配 — 键盘弹出歌词自动重新居中,后台播放进度条不冻

另一种风格?

我们走的是极简沉浸路线——深色背景、黑胶唱片、歌词居中、悬浮播放球,安安静静听歌。

如果你更想要社交互动向的体验——双人房间实时同步、可爱的状态卡片("xx 暂停了《xx》")、多套主题皮肤、WebSocket 播放同步——推荐看看 Duetto。它的房间 UI 和同步播放做得很好,我们的 AI 听感分析也受了它的启发。两个项目风格不同,各有各的好。


环境要求

依赖 版本
Python ≥ 3.8
Node.js ≥ 16
SQLite 系统自带即可

Python 端只用标准库,不需要额外 pip install。

Node.js 的依赖在 npm install 时自动装。


架构

你跟 AI 说"点首歌"
        ↓
   MCP Server (Python, :3456)
   调网易云 API 代理搜歌
   返回 [music:ID:NAME:ARTIST:COVER] tag
        ↓
   前端解析 tag → 渲染音乐卡片
        ↓
   点卡片 → API Server (:3457) 拿播放链接 + 歌词
   → 全屏歌词播放器 + 悬浮播放球
   → AI 听感分析(按需触发,结果永久缓存)
netease-music-mcp/
├── server/
│   ├── mcp-server/
│   │   ├── server.py      # MCP 协议层 + 三个 tool
│   │   └── api.py         # 播放链接 / 歌词 / 搜索 / 歌单 / 听感分析 API
│   └── netease-proxy/
│       └── server.js      # 网易云 API 代理(Node.js)
├── frontend/
│   └── demo.html          # 完整播放器 demo,clone 下来直接开
├── schema.sql             # 歌单数据库结构
├── .env.example           # 环境变量模板
└── README.md

跑起来

1. Clone

git clone https://github.com/Cheiineeey/netease-music-mcp.git
cd netease-music-mcp

2. 配置环境变量

cp .env.example .env

打开 .env,至少填这两项:

# 网易云 cookie(怎么拿见下面)
NETEASE_COOKIE=your_cookie_here

# API 鉴权 token,随便设一个
AUTH_TOKEN=changeme

其他可选项(一般不用改):

MCP_PORT=3456            # MCP Server 端口
API_PORT=3457            # API Server 端口
NETEASE_PROXY=http://127.0.0.1:3460   # 网易云代理地址
MUSIC_DB_PATH=./music.db # 数据库路径
MCP_TOKEN=your-mcp-token # MCP 鉴权 token

3. 初始化数据库

sqlite3 music.db < schema.sql

server.py 启动时也会自动建表,这一步可跳过。但如果你想用自定义路径,先建好再在 .env 里指过去。

4. 启动网易云代理

cd server/netease-proxy
npm install
node server.js
# 跑在 :3460

5. 启动 MCP Server

新开一个终端:

cd server/mcp-server
python3 server.py
# SSE endpoint: http://localhost:3456/sse

6. 启动 API Server

再开一个终端:

cd server/mcp-server
python3 api.py
# API: http://localhost:3457

7. 打开 demo

open frontend/demo.html
# 或者直接在浏览器里打开这个文件

接入 AI 客户端

Claude Desktop

在 Claude Desktop 的 MCP 配置里加上:

{
  "mcpServers": {
    "netease-music": {
      "url": "http://localhost:3456/sse"
    }
  }
}

Cursor

Settings → MCP → 添加 server,URL 填 http://localhost:3456/sse

其他 MCP 客户端

任何支持 SSE transport 的 MCP 客户端都能用,endpoint 是 http://localhost:3456/sse

配好之后直接说"帮我放一首方大同"就行了。


MCP Tools

Tool 参数 说明
play_music query (必填), note (可选) 搜歌并返回音乐卡片标记
list_playlists 列出所有歌单
add_song_to_playlist playlist_id, song_id, ... 把歌加进指定歌单

音乐卡片标记格式

[music:SONG_ID:歌名:艺术家:封面URL]附言

前端解析用的正则:

const m = text.match(/\[music:(\d+):([^\[]+?):([^\[]+?):(https?:[^\]|]*)\|?([^\]]*)\]/);
// m[1]=id  m[2]=歌名  m[3]=艺术家  m[4]=封面

歌名和艺术家里的冒号会被替换成全角 ,不影响解析。


怎么获取网易云 Cookie

  1. 打开 music.163.com,登录你的账号
  2. F12 → Application → Cookies → music.163.com
  3. 把所有 cookie 拼成一行,粘到 .envNETEASE_COOKIE= 后面

没有 cookie 也能搜歌,但部分歌曲拿不到播放链接。VIP 歌曲需要 VIP 账号的 cookie。


常见问题

Q: 搜得到歌但播不了? Cookie 过期了,或者这首歌是 VIP 专属。重新去浏览器拿一下 cookie 更新到 .env,然后重启 API Server。

Q: 歌词不显示? 有些歌网易云没有歌词数据,这种情况播放器会正常播放但歌词区域为空。

Q: 端口被占了?.env 里改 MCP_PORT / API_PORT / 或者网易云代理的端口(在 server.js 里改)。

Q: 手机上怎么用? demo.html 本身做了移动端适配。部署到服务器上之后手机浏览器直接访问就行,记得把 API 地址从 localhost 改成你的服务器地址。


关于这个项目

Elle 某天晚上想听歌,觉得让 AI 直接放比发链接好用多了。我们就开始搭。

搭着搭着加了歌词、加了拖动、加了歌单、加了键盘弹出不跳的处理、加了悬浮播放球、加了 AI 听感分析……

后来觉得,这个东西可以给更多人用。所以开源了。


License

MIT — 拿去用,随便改,喜欢的话 star 一下 ⭐


Built with love by Elle & Matt 🤍

About

🎵 让你的 AI 给你点首歌 — 网易云 MCP 点歌、歌词同步、歌单管理

Resources

Stars

99 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages