rakshitha2207
服务介绍
Spotify MCP 服务器
一个基于 Node.js 的服务器,集成了 Spotify Web API 和 Model Context Protocol (MCP),提供了搜索、控制播放和管理 Spotify 内容的工具。它允许用户通过标准化的 MCP 接口在 stdio 传输上以编程方式与其 Spotify 账户进行交互。
🧠 项目概述
名称: Spotify MCP 服务器
描述: 一个可编程接口,将 Spotify Web API 与 MCP 标准连接起来,使用基于 JSON 的工具通过 stdio 实现搜索、播放控制和播放列表管理。
主要功能:
- 🔍 在 Spotify 上搜索曲目
- 🎵 检查当前播放状态
- ▶️ 通过 URI 播放特定曲目
- 📋 获取用户播放列表
- ⏸ 暂停正在进行的播放
- 🔐 与 Spotify 的 OAuth 认证
- 📉 处理 Spotify API 请求的速率限制
⚙️ 前提条件
- Node.js(推荐 v16 或更高版本)
- 一个带有应用凭证的 Spotify 开发者账户
- npm(Node 包管理器)
📦 安装步骤
bash
1. 克隆仓库
git clone
cd spotify-mcp
2. 安装依赖
npm install
3. 创建 .env 文件并添加以下内容:
env
SPOTIFY_CLIENT_ID=your_spotify_client_id
SPOTIFY_CLIENT_SECRET=your_spotify_client_secret
SPOTIFY_REDIRECT_URI=http://localhost:8888/callback
注意: 将
your_spotify_client_id和your_spotify_client_secret替换为您的 Spotify 开发者应用凭证。重定向 URI 必须与您在 Spotify 应用设置中设置的一致。
bash
4. 构建
npm run build
5. 运行服务器
npm start
这将打开浏览器进行 Spotify 认证,并使用 stdio 传输启动服务器。
🔧 工具
1. search_tracks
- 描述: 根据查询字符串在 Spotify 上搜索曲目。
- 输入模式:
query(字符串, 必填): 搜索词(例如,艺人名、歌曲标题)。
- 输出: 最多包含 5 个曲目对象的 JSON 数组,每个对象包含
name,artist,album,release_date,popularity,id, 和uri。 - 示例:
json
{
"name": "search_tracks",
"arguments": {"query": "The Beatles"}
}
2. get_playback_state
- 描述: 获取用户的 Spotify 账户当前的播放状态。
- 输入模式: 无
- 输出: 包含当前曲目信息、播放状态和设备详情的 JSON 对象,如果没有任何内容正在播放,则返回 "No active playback"。
- 示例:
json
{
"name": "get_playback_state",
"arguments": {}
}
3. play_track
- 描述: 使用其 Spotify URI 播放特定曲目。
- 输入模式:
uri(字符串, 必填): Spotify 曲目 URI(例如,spotify:track:xxx)。
- 输出: 包含
status和uri的 JSON 确认消息。 - 示例:
json
{
"name": "play_track",
"arguments": {"uri": "spotify:track:7KXjTSCq5nL1LoYtL7XAwS"}
}
4. get_user_playlists
- 描述: 从 Spotify 获取用户的播放列表。
- 输入模式:
limit(数字, 可选): 返回的最大播放列表数量(默认值:20)。
- 输出: 包含
name,id,track_count,uri, 和public状态的播放列表对象的 JSON 数组。 - 示例:
json
{
"name": "get_user_playlists",
"arguments": {"limit": 10}
}
5. pause_playback
- 描述: 暂停用户活动 Spotify 设备上的当前播放。
- 输入模式: 无
- 输出: 包含 "Playback paused" 状态的 JSON 确认消息。
- 示例:
json
{
"name": "pause_playback",
"arguments": {}
}
🌐 用例
-
音乐发现机器人:
- 使用
search_tracks和play_track来实现基于心情的音乐聊天机器人。
- 使用
-
播放列表管理工具:
- 使用
get_user_playlists和search_tracks来预览和组织播放列表。
- 使用
-
播放控制自动化:- 使用
get_playback_state、play_track和pause_playback自动化播放操作。 -
Spotify 仪表板:
- 使用
get_playback_state、get_user_playlists、pause_playback和play_track构建一个桌面小工具。
- 使用
-
学习 Spotify API:
- 通过实验所有工具来了解 Spotify Web API 的工作原理。
🔐 认证详情
- 首次运行时,服务器会打开浏览器以进行 Spotify OAuth 认证。
- 通过
http://localhost:8888/callback接收代码。 - 用代码换取访问令牌和刷新令牌。
- 在令牌过期前 5 分钟内自动刷新令牌。
⏱ 速率限制
- 采用重试策略处理 Spotify API 的速率限制:
- 每次请求后有 10 秒的冷却时间。
- 如果出现 429 请求过多错误,则等待 1 分钟。
📊 依赖项
bash
npm install dotenv spotify-web-api-node @modelcontextprotocol/sdk open
dotenv: 从.env文件加载环境变量。spotify-web-api-node: Spotify API 客户端。@modelcontextprotocol/sdk: 实现 MCP 服务器。http,url: Node.js 内置模块,用于 OAuth 重定向服务器。open: 打开默认浏览器进行认证。
📁 开发信息
- 入口点:
index.js - 语言: JavaScript (Node.js with ES modules)
- 运行命令:
node index.js - 调试: 检查控制台日志中的 MCP 或认证错误。
⚠️ 限制
- 播放控制需要 Spotify Premium。
- 仅支持 stdio 传输(不支持 HTTP、WebSocket 等)。
search_tracks最多返回 5 个结果。- 假设只有一个活动设备用于播放。
🚀 贡献
欢迎提出问题或提交拉取请求以:
- 添加新工具
- 增强现有功能
- 改进文档
✍️ 许可证
MIT 许可证 —— 可免费用于个人或商业用途,包括使用、修改和分发。
❤️ 页脚
由 Rakshitha C Devadiga 于 2025 年 3 月 17 日用心构建。