r

rakshitha2207

@rakshitha2207/spotify-mcp
0 Stars 349 次浏览 rakshitha2207 更新于 2026-08-23
该服务暂未提供标准配置,请参考 README 手动接入

服务介绍

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 请求的速率限制

⚙️ 前提条件


📦 安装步骤

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_idyour_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)。
  • 输出: 包含 statusuri 的 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": {}
    }

🌐 用例

  1. 音乐发现机器人:

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

    • 使用 get_user_playlistssearch_tracks 来预览和组织播放列表。
  3. 播放控制自动化:- 使用 get_playback_stateplay_trackpause_playback 自动化播放操作。

  4. Spotify 仪表板:

    • 使用 get_playback_stateget_user_playlistspause_playbackplay_track 构建一个桌面小工具。
  5. 学习 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 日用心构建。

相关 MCP 服务