使用说明
Spotify MCP服务器
将您的Spotify帐户连接到AI工具,并使用模型上下文协议(MCP)自动化您的音乐体验。
这 Spotify MCP服务器 实现 模型上下文协议 使用Cursor、Claude、VS Code等人工智能工具连接您的Spotify帐户。它使AI模型能够通过自然语言指令搜索、分析和管理您的Spotify音乐库、播放列表和播放。
✨ 主要特点
- 🎵 音乐搜索与发现:查找曲目、专辑、艺术家、播放列表、节目和剧集
- 📝 播放列表管理:查看、创建、更新、重新排序和管理播放列表
- 📚 用户库访问:访问和修改您保存的曲目、相册和节目
- 🎯 个性化推荐:根据您的喜好获取音乐建议
- 📊 音频分析:检索曲目的音频特征(可跳舞性、能量、节奏等)
- 🎧 回放控制:(仅限高级版)播放、暂停、跳过和控制播放设备
- 📈 用户洞察:查看您的热门曲目、艺术家和收听历史记录
- 🔄 队列管理:将曲目添加到队列中并查看即将播放的歌曲
- 📱 设备管理:在设备之间传输播放
🚀 快速入门指南
先决条件
- Spotify帐户(播放控制需要付费)
- Spotify API证书(见下文)
- Node.js 18或更新版本
步骤1:获取Spotify API证书
- 转到 Spotify开发者仪表板
- 创建新应用程序
- 注意你的 客户端ID 和 客户端密钥
- 设置 重定向URI 致:
http://127.0.0.1:8000/callback
步骤2:设置环境变量
创建一个 .env 项目根目录中的文件:
SPOTIFY_CLIENT_ID=your-client-id
SPOTIFY_CLIENT_SECRET=your-client-secret
SPOTIFY_REDIRECT_URI=http://127.0.0.1:8000/callback
备注:您不再需要手动获取访问令牌!服务器将自动处理OAuth流。
步骤3:安装并运行
# Install dependencies
npm install
# Build the server
npm run build
# Start the server
npm start
第四步:使用人工智能工具进行连接
将此配置添加到您的MCP兼容应用程序中(例如Cursor):
{
"mcpServers": {
"spotify": {
"command": "npx",
"args": ["-y", "@tdp2003/spotify-mcp@latest"],
"env": {
"SPOTIFY_CLIENT_ID": "your-client-id",
"SPOTIFY_CLIENT_SECRET": "your-client-secret",
"SPOTIFY_REDIRECT_URI": "http://127.0.0.1:8000/callback"
}
}
}
}
步骤5:完成授权
- 打电话给
get_initial_contextAI应用程序中的工具 - 如果尚未授权,您将收到一个授权URL
- 在浏览器中打开URL并登录Spotify
- 授权应用程序-您将被自动重定向
- 呼叫
get_initial_context再次确认连接
🛠️ 可用工具
⚠️ 重要:总是打电话
get_initial_context在使用任何其他工具之前,请先初始化您的Spotify连接。
🔧 背景和设置
get_initial_context
必需的第一步 -初始化您的Spotify连接并提供使用说明。必须在执行任何其他操作之前调用此工具。
它的作用:
- 验证您的Spotify API证书
- 如果需要,启动OAuth流
- 检索您的用户配置文件和帐户信息
- 提供连接状态和可用功能
- 返回AI助手的使用说明
📝 播放列表操作
get_user_playlists
检索当前用户或特定用户的播放列表。
参数:
limit(可选):要返回的播放列表数量(1-50,默认值:20)offset(可选):要返回的第一个播放列表的索引(默认值:0)userId(可选):获取播放列表的用户ID(默认为当前用户)
退货: 播放列表元数据,包括名称、描述、曲目计数、隐私设置和所有者信息。
create_playlist
使用可自定义的设置创建新的播放列表。
参数:
name(必填):播放列表名称description(可选):播放列表描述public(可选):播放列表是否为公共(默认值:false)collaborative(可选):播放列表是否协作(默认值:false)userId(可选):要为其创建播放列表的用户ID(默认为当前用户)
退货: 已创建播放列表详细信息,包括Spotify URI和ID。
update_playlist_details
更新播放列表元数据,包括名称、描述、隐私设置和协作状态。
参数:
playlistId(必填):Spotify播放列表IDname(可选):新播放列表名称description(可选):新播放列表描述public(可选):新的公共/私人设置collaborative(可选):新的协作设置
退货: 更新了带有更改摘要的播放列表详细信息。
add_tracks_to_playlist
通过精确的位置控制将曲目添加到播放列表中。
参数:
playlistId(必填):Spotify播放列表IDuris(必填):Spotify曲目URI数组(最多100个)position(可选):插入轨迹的位置(默认为结束)
退货: 使用快照ID和更新的曲目计数进行确认。
remove_tracks_from_playlist
使用精确控制从播放列表中删除曲目。
参数:
playlistId(必填):Spotify播放列表IDtracks(必填):带有URI和可选位置的跟踪对象数组snapshot_id(可选):用于并发安全的播放列表快照ID
退货: 确认快照ID和删除详细信息。
reorder_playlist_tracks
通过将一系列曲目移动到新位置来重新排序播放列表中的曲目。
参数:
playlistId(必填):Spotify播放列表IDrange_start(必填):要移动的轨道的起始位置range_length(必填):要移动的轨道数量insert_before(必填):将轨道移动到的位置snapshot_id(可选):用于并发安全的播放列表快照ID
退货: 使用快照ID和重新排序详细信息进行确认。
🔍 音乐搜索与发现
search
在Spotify的目录中搜索专辑、艺术家、曲目、播放列表、节目和剧集。
参数:
query(必填):搜索查询字符串type(可选):内容类型过滤器(曲目、专辑、艺术家、播放列表、节目、剧集)limit(可选):结果数量(1-50,默认值:20)offset(可选):结果偏移(默认值:0)market(可选):特定市场结果的国家代码
退货: 每种结果类型的详细元数据,包括分页信息。
get_new_releases
在Spotify上获取新专辑发行。
参数:
limit(可选):发布次数(1-50,默认值:20)offset(可选):结果偏移(默认值:0)country(可选):区域发布的国家代码
退货: 最近发布的专辑,包含艺术家信息、发布日期和元数据。
get_featured_playlists
从Spotify的编辑团队获取特色播放列表。
参数:
limit(可选):播放列表数量(1-50,默认值:20)offset(可选):结果偏移(默认值:0)country(可选):区域内容的国家代码locale(可选):描述语言/地区
退货: 精心策划的播放列表在Spotify上突出显示,并附有描述和元数据。
👤 用户库和见解
get_user_top_items
根据计算出的亲和力获取当前用户的顶级艺术家或曲目。
参数:
type(必填):项目类型(“艺术家”或“曲目”)time_range(可选):时间范围(“短期”~4周,“中期”~6个月,“长期”~1年)limit(可选):项目数(1-50,默认值:20)offset(可选):结果偏移(默认值:0)
退货: 用户的热门项目,包括流行度评分和元数据。
🎧 播放控制(仅限高级版)
注意:这些工具需要Spotify Premium帐户
get_current_playback
获取当前播放曲目和设备信息。
退货: 当前播放状态,包括曲目、设备和队列信息。
playback_control
控制播放(播放、暂停、跳过、音量)。
参数:
action(必填):播放动作(播放、暂停、下一个、上一个、音量)device_id(可选):目标设备IDvolume_percent(可选):音量级别(0-100,用于音量操作)
退货: 确认播放动作。
queue_management
将曲目添加到队列并查看即将播放的曲目。
参数:
action(必填):队列操作('add'或'get')uris(可选):跟踪要添加的URI(用于“添加”操作)device_id(可选):目标设备ID
退货: 队列信息或轨道添加确认。
device_management
在设备之间传输播放。
参数:
device_id(必填):目标设备IDplay(可选):是否在传输时开始播放(默认值:false)
退货: 设备转移确认。
📊 音频分析
get_audio_features
检索曲目的音频功能。
参数:
track_ids(必填):Spotify曲目ID数组
退货: 音频功能包括:
- 舞蹈性:多么适合跳舞(0.0-1.0)
- 能量:强度和功率(0.0-1.0)
- 特殊性:口语出现(0.0-1.0)
- 声学:轨道是否有声(0.0-1.0)
- 乐器:曲目是否没有人声(0.0-1.0)
- 活性:观众在场(0.0-1.0)
- 价:音乐积极性/幸福感(0.0-1.0)
- 节奏:速度(每分钟节拍数(BPM))
⚙️ 环境变量
| 变量 | 描述 | 必填 |
|---|---|---|
| SPOTIFY客户端ID | ✅ | |
| SPOTIFY客户端机密 | ✅ | |
| SPOTIFY重定向URI(使用http://127.0.0.1:8000/callback) | ✅ | |
| SPOTIFY_API_TOKEN | SPOTIFY访问令牌(通过OAuth获得) | ❌* |
| SPOTIFY刷新令牌(通过OAuth获得) | ❌* | |
| MAX_TOOL_TOKEN_OUTPUT | 工具响应的最大令牌输出(默认50000) | ❌ |
*当您首次使用服务器时,这些令牌将通过OAuth流自动获得。
👥 用户角色
- 开发者:完全访问所有工具和功能
- 编辑:仅限于以内容为中心的工具(无管理功能)
如果支持,请在MCP客户端配置中设置角色。
📦 Node.js环境设置
如果使用Node版本管理器(nvm, mise, fnm等),您可能需要创建符号链接,以便MCP服务器可以访问Node.js:
sudo ln -sf "$(which node)" /usr/local/bin/node && sudo ln -sf "$(which npx)" /usr/local/bin/npx
如果更改节点版本,请更新这些符号链接。用以下方式删除它们:
sudo rm /usr/local/bin/node /usr/local/bin/npx
💻 发展
安装依赖项:
npm install
在开发模式下构建和运行:
npm run dev
构建服务器:
npm run build
运行内置服务器:
npm start
🧑💻 调试
您可以使用MCP检查器进行调试:
npx @modelcontextprotocol/inspector -e SPOTIFY_CLIENT_ID=... -e SPOTIFY_CLIENT_SECRET=... -e SPOTIFY_REDIRECT_URI=... -e SPOTIFY_API_TOKEN=... -e SPOTIFY_REFRESH_TOKEN=... node path/to/build/index.js
这提供了一个用于检查和测试可用工具的web界面。
OAuth流
OAuth流程已通过以下安全性和可用性增强进行了改进:
安全改进
- 状态验证:使用加密安全的随机状态参数来防止CSRF攻击
- 重定向URI验证:确保重定向URI使用localhost/127.0.0.0.1进行自动令牌交换
- 正确的错误处理:针对所有OAuth失败场景的全面错误处理
可用性改进
- 自动打开浏览器:在默认浏览器中自动打开授权URL
- 更好的用户反馈:在整个过程中清除错误消息和状态更新
- 服务器正常关闭:完成后正确关闭OAuth回调服务器
使用OAuth助手
这 oauth-helper.js 脚本提供了一种获取Spotify令牌的独立方式:
node src/utils/oauth-helper.js
这将:
- 验证您的环境配置
- 启动本地回叫服务器
- 自动打开浏览器进入Spotify授权页面
- 处理回调并将代码交换为令牌
- 显示要添加到您的令牌
.env文件
环境变量
请确保您的重定向URI配置正确:
SPOTIFY_REDIRECT_URI=http://127.0.0.1:8000/callback
重定向URI 必须 使用 localhost 或 127.0.0.1 以使自动令牌交换正常工作。
许可证
麻省理工学院