Spotify MCP服务器

一个基于Node.js的服务器,集成Spotify Web API和模型上下文协议(MCP),提供搜索、控制播放和管理Spotify内容的工具。

  • by rakshitha2207
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 rakshitha2207/spotify-mcp

使用说明

Spotify MCP服务器

一个基于Node.js的服务器,与Spotify Web API和模型上下文协议(MCP)集成,为搜索、控制播放和管理Spotify内容提供工具。它允许用户通过标准化的MCP接口通过stdio传输以编程方式与他们的Spotify帐户进行交互。


🧠 项目概述

姓名: Spotify MCP服务器
说明: 一个可编程接口,将Spotify Web API与MCP标准连接起来,通过stdio使用基于JSON的工具实现搜索、播放控制和播放列表管理。
主要特点:

  • 🔍 在Spotify上搜索曲目
  • 🎵 检查当前播放状态
  • ▶️ 按URI播放特定曲目
  • 📋 检索用户播放列表
  • ⏸ 暂停正在进行的播放
  • 🔐 Spotify的OAuth身份验证
  • 📉 Spotify API请求的速率限制处理

⚙️ 先决条件


📦 安装步骤

# 1. Clone the repository
git clone <repository-url>
cd spotify-mcp

# 2. Install dependencies
npm install

# 3. Create a .env file and add the following:
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 Developer应用程序凭据。重定向URI必须与您的Spotify应用设置中设置的URI匹配。

# 4. Build
npm run build
# 5. Run the server
npm start

这将打开一个用于Spotify身份验证的浏览器,并使用stdio传输启动服务器。


🔧 工具

1. search_tracks

  • 说明: 根据查询字符串在Spotify上搜索曲目。
  • 输入架构:
    • query (字符串,必填):搜索词(例如,艺术家姓名、歌曲标题)。
  • 输出: 最多5个跟踪对象的JSON数组 name, artist, album, release_date, popularity, id,以及 uri.
  • 例子:
{
  "name": "search_tracks",
  "arguments": {"query": "The Beatles"}
}

2. get_playback_state

  • 说明: 检索用户Spotify帐户的当前播放状态。
  • 输入架构: 无
  • 输出: JSON对象,包含当前曲目信息、播放状态和设备详细信息,或者如果没有播放,则显示“无活动播放”。
  • 例子:
{
  "name": "get_playback_state",
  "arguments": {}
}

3. play_track

  • 说明: 使用其Spotify URI播放特定曲目。
  • 输入架构:
    • uri (字符串,必填):Spotify曲目URI(例如。, spotify:track:xxx).
  • 输出: JSON确认 status 和 uri.
  • 例子:
{
  "name": "play_track",
  "arguments": {"uri": "spotify:track:7KXjTSCq5nL1LoYtL7XAwS"}
}

4. get_user_playlists

  • 说明: 从Spotify获取用户的播放列表。
  • 输入架构:
    • limit (number,可选):要返回的最大播放列表数(默认值:20)。
  • 输出: JSON格式的播放列表对象数组 name, id, track_count, uri,以及 public 状态。
  • 例子:
{
  "name": "get_user_playlists",
  "arguments": {"limit": 10}
}

5. pause_playback

  • 说明: 暂停用户活动Spotify设备上的当前播放。
  • 输入架构: 无
  • 输出: JSON确认,状态为“播放暂停”。
  • 例子:
{
  "name": "pause_playback",
  "arguments": {}
}

🌐 用例

  1. 音乐发现机器人:

    • 使用 search_tracks 和 play_track 实现基于情绪的音乐聊天机器人。
  2. 播放列表管理工具:

    • 使用 get_user_playlists 和 search_tracks 预览和组织播放列表。
  3. 回放控制自动化:

    • 使用自动化播放操作 get_playback_state, play_track,以及 pause_playback.
  4. Spotify仪表板:

    • 使用以下命令构建桌面小部件 get_playback_state, get_user_playlists, pause_playback,以及 play_track.
  5. 学习Spotify API:

    • 试用所有工具,学习Spotify Web API的工作原理。

🔐 身份验证详细信息

  • 首次运行时,服务器会打开浏览器进行Spotify OAuth身份验证。
  • 通过接收代码 http://localhost:8888/callback.
  • 将代码交换为访问和刷新令牌。
  • 在到期后5分钟内自动刷新令牌。

⏱ 速率限制

  • 使用重试策略处理Spotify API速率限制:
    • 每次请求后冷却10秒。
    • 如果发生429 Too Many Requests错误,请等待1分钟。

📊 依赖项

npm install dotenv spotify-web-api-node @modelcontextprotocol/sdk open
  • dotenv:从加载环境变量 .env.
  • spotify-web-api-node:Spotify API客户端。
  • @modelcontextprotocol/sdk:实现MCP服务器。
  • http, url:OAuth重定向服务器内置的Node.js。
  • open:打开默认浏览器进行身份验证。

📁 开发信息

  • 入口点: index.js
  • 语言: JavaScript(带ES模块的Node.js)
  • 运行命令: node index.js
  • 调试: 检查控制台日志中的MCP或身份验证错误。

⚠️ 局限性

  • 播放控制需要Spotify Premium。
  • 仅支持stdio传输(不支持HTTP、WebSocket等)。
  • search_tracks 最多返回5个结果。
  • 假设只有一个活动设备用于播放。

🚀 贡献

请随时打开问题或提交pull请求至:

  • 添加新工具
  • 增强现有功能
  • 改进文档

✍️ 许可证

MIT许可证-免费使用、修改和分发用于个人或商业用途。


❤️ 页脚

内置于❤️ 由Rakshitha C Devadiga于2025年3月17日发布