mcpField
S
Spotify MCP

Spotify MCP

本地服务
github.com/NovaLux12游戏娱乐16 天前更新

关于 Spotify MCP

Spotify MCP 将 Spotify Web API 封装为面向音乐听众与自动化流程的 MCP 服务,涵盖播放、搜索、曲库、播放列表和播客。工具集可按需裁剪,并提供只读模式、写入预览和变更凭据等控制。

主要功能

  1. 01播放控制与设备感知
  2. 02搜索曲目、专辑和播客
  3. 03管理曲库与播放列表
  4. 04可选 stats.fm 工具集
  5. 05只读模式与写入安全控制

适用场景

  1. 01按喜好创建播放列表
  2. 02整理播放列表中的重复曲目
  3. 03查找播客新节目
  4. 04检查播放数据与授权状态

MCP 相关

该服务向 MCP 客户端公开 Spotify Web API 工具,以及资源、资源模板和提示词。默认注册精选工具集,也可配置为完整工具集或启用 stats.fm 工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"novalux12-spotify": {
"command": "npx",
"args": [
"-y",
"@novalux12/spotify-mcp"
],
"env": {
"SPOTIFY_CLIENT_ID": "<SPOTIFY_CLIENT_ID>"
}
}
}
}
启动命令npx -y @novalux12/spotify-mcp
需要配置的环境变量
SPOTIFY_CLIENT_IDSpotify developer app client ID (from developer.spotify.com/dashboard)

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@novalux12/spotify-mcp3.1.1

工具

131

收录的工具列表 · 更新于 1 周前

参数类型必填说明
limitinteger否每种类型的结果数,1–10。默认值:5
querystring是搜索查询
typesarray否要搜索的内容类型,使用数组表示。默认值:["track","artist","album"]。例如,传入 ["artist"] 可仅搜索艺人。"audiobook" 仅在美国、英国、加拿大、爱尔兰、新西兰和澳大利亚市场提供。
marketstring否ISO 3166-1 alpha-2 国家/地区代码,例如 'US'——会自动转换为大写
offsetinteger否要返回的第一条结果的索引,0–1000。与 limit 配合使用可分页浏览结果
max_resultsinteger否要返回的最大条目数(默认值:SPOTIFY_MCP_MAX_ITEMS 环境变量或 50)
response_formatenum否'concise' = 面向用户的简明文本,'detailed' = 包含更多字段的文本,'json' = 原始 API 对象concise | detailed | json
include_externalenum否传入 "audio",以包含标记为可播放的外部托管音频条目audio

详细介绍

SpotifyMCP

CI npm version License: MIT Node

Spotify Web API MCP:播放、资料库、播放列表、搜索、播客。与 Spotify 无关联。

提供广泛的 Spotify Web API 工具,另有大多数服务端都没有的额外功能。需要注册才能使用的封装器会有说明,而非隐藏;请参阅需要注册的端点,查看生成的列表。

默认提供的内容,以及如何获取其余内容。 在未设置任何环境变量的情况下启动服务,会注册一组精心挑选的功能——搜索、播放、播放列表、资料库、关注——其规模经过控制,确保在你输入任何内容之前,工具列表不会占据过多上下文窗口。设置 SPOTIFY_MCP_TOOLSETS=all 可注册整个注册表;stats.fm 工具则需通过 SPOTIFY_MCP_STATSFM=1 启用。两项设置都只需在 docs/configuration.md 中添加一行。

在未设置 SPOTIFY_MCP_TOOLSETS 的情况下启动服务,会注册 131 个工具(150,111 字节的架构)——精选的默认功能集(#889)。设置 SPOTIFY_MCP_TOOLSETS=all 可注册全部 562 个工具,以及 17 个固定资源、28 个资源模板和 14 个提示词。工具集和生产环境门控还可以进一步精简已配置的主机;这两个数字均反映了最终处理器执行后,真实生产环境中的 tools/list 结果。

3.0 及更高版本

3.0 发布时,未解决的问题列表清零了——每个史诗、其下的每个问题,以及我们在自查时发现的每一处矛盾,都已解决。大多数积压问题并非会导致崩溃的“错误”,而是此服务报告了未经实际核实的值;这才是真正危险的错误。

由于 Spotify 于 2026 年 2 月删除了相关端点,我们还移除了一些工具——包括艺人关注功能,它完全没有可迁移的目标。

→ 阅读 3.0 路线图


🤖 将以下内容粘贴给你的 Agent

将下面的代码块复制到 Claude Code、Cursor、OpenClaw 或任何编码 Agent 中,即可由它为你设置 SpotifyMCP。

⚠️ 切勿在聊天中粘贴 Spotify 凭据。 Spotify 的开发者条款将 Client ID 视为凭据:§VI.1.1 将“ID、客户端 ID、密钥、密码、安全码或令牌”统称为安全码,§VI.1.3 禁止向任何其他方披露这些信息,§VI.1.4 则规定你有责任为其保密。你在对话中输入的任何内容都会被模型提供商保留、写入 shell 历史记录,并保留在 Agent 的上下文窗口中。此服务只需要 Client ID 这一项凭据,而它属于安全码,并非公开标识符——请像对待密码一样妥善保管。

从 https://github.com/NovaLux12/spotify-mcp-server 设置 Spotify MCP 服务。

1. 引导我在 https://developer.spotify.com/dashboard 创建 Spotify 应用,
   并将重定向 URI 设为 http://127.0.0.1:8888/callback。告诉我在控制面板的
   哪个位置可以找到 Client ID,然后就停下——我会自行复制。
2. 克隆并构建:
   git clone https://github.com/NovaLux12/spotify-mcp-server.git
   cd spotify-mcp-server && npm ci && npm run build
3. 告诉我 MCP 宿主从哪个文件读取服务环境变量。宿主的服务配置始终有效;
   只有通过此仓库的 npm run dev 或 npm start 启动时,才会读取本地 .env,
   因为这两个命令会在 Node >=22.9 上传入 --env-file-if-exists——已发布的
   二进制文件不会读取该文件。打印需要添加的确切代码行。我会自行输入
   Client ID。不要向我要 Client ID,也绝不要复述它。
4. 启动服务并自行运行身份验证命令,然后在浏览器打开后完成登录。此服务
   使用 PKCE,因此没有客户端密钥;除了 Client ID 外,无需获取其他凭据。
5. 使用只读的 spotify_doctor 工具进行验证,并报告其返回的各行内容。

为什么选择它

功能全面播放、搜索、曲库、音乐库、播放列表、关注功能,以及重复项清理、M3U/CSV 导入导出、播客收听会话、快照差异比较、收听分析、市场检查、stats.fm 品味分析,以及品味综合简报、播放列表和报告等额外功能。
安全写入操作支持 dry_run 预览,提供证明操作已生效的回执,批量删除需人工确认,并可通过 READONLY 隐藏具有写入能力的模块。
如实说明功能范围将收听历史转化为衍生指标的工具——例如按小时统计、每周收听偏好和探索比例——默认关闭。只有在设置 SPOTIFY_MCP_EXPERIMENTAL_ANALYTICS=1 后才会启用,因为 Spotify Developer Policy Sec. III.13 禁止构建衍生收听指标。其余重新呈现你本人数据的分析功能始终开启。请参阅 docs/compliance.md。
诚实可靠工具无法运行时绝不会声称可以运行。受限端点会保留其封装;如果存在读取替代方案,就提供替代方案,并用通俗易懂的语言解释 403 错误,而不会直接崩溃——请参阅根据 src/gating.ts 生成的注册受限端点。
精心打磨支持分页(最多 500 项)、将播客视为一等内容、感知设备的播放控制、spotify_doctor 自我诊断,以及真正的测试套件。

快速开始

1. 创建 Spotify 应用

打开 Spotify Developer Dashboard → 创建应用 → 添加以下 Redirect URI,内容必须完全一致:

http://127.0.0.1:8888/callback

复制 Client ID。

2. 身份验证
SPOTIFY_CLIENT_ID=your_client_id_here npx -y @novalux12/spotify-mcp@latest auth

此操作会打开浏览器,将令牌保存到 ~/.spotify-mcp/tokens.json,并在之后自动刷新。

Windows 和无头环境

Windows(命令提示符):

set SPOTIFY_CLIENT_ID=your_client_id_here && npx -y @novalux12/spotify-mcp@latest auth

Windows(PowerShell):

$env:SPOTIFY_CLIENT_ID="your_client_id_here"; npx -y @novalux12/spotify-mcp@latest auth

支持在 Windows 上安装和日常使用,但 CI 不覆盖 Windows。 上述命令是受支持的操作方式,但测试套件仅在 Linux 上运行, 因此 Windows 特有的回归问题可能无法在发布前被发现。 有关 Windows 上具体验证和未验证的内容,以及已知缺口,请参阅 docs/platform-support.md。

无头环境 / 远程主机:

SPOTIFY_HEADLESS=1 SPOTIFY_CLIENT_ID=your_client_id_here npx -y @novalux12/spotify-mcp@latest auth
# prints a URL → open it on any machine → paste the redirect back

检查:npx -y @novalux12/spotify-mcp@latest doctor — 退出代码为 0 即表示一切正常。

3. 添加到 MCP 主机
{
  "mcpServers": {
    "spotify": {
      "command": "npx",
      "args": ["-y", "@novalux12/spotify-mcp@latest"],
      "env": { "SPOTIFY_CLIENT_ID": "your_client_id_here" }
    }
  }
}

重启主机。聊天输入框中出现锤子图标,即表示已连接。

Claude Code · OpenClaw · 其他主机

Claude Code(无需编辑 JSON):

claude mcp add spotify -- npx -y @novalux12/spotify-mcp@latest
export SPOTIFY_CLIENT_ID=your_client_id_here

OpenClaw — ~/.openclaw/openclaw.json → mcp.servers:

"spotify": {
  "command": "node",
  "args": ["/path/to/spotify-mcp-server/dist/index.js"],
  "cwd": "/path/to/spotify-mcp-server",
  "env": { "SPOTIFY_CLIENT_ID": "your_client_id_here" }
}

任何符合规范的主机都可以使用——在 mcpServers 或 servers 下采用相同的 command/args/env 结构。如果主机无法传递环境变量,请提前完成一次身份验证;令牌缓存会持续保留。

你可以这样提问

  • “我这个月最常听的曲目有哪些?”
  • “帮我制作一个深夜驾车播放列表”
  • “把 Blinding Lights 添加到我的健身播放列表”
  • “有哪些播客更新了新单集?”
  • “清理我所有播放列表中的重复曲目”
  • “我的音乐品味是什么样的?根据它制作一个播放列表”
  • “我的 stats.fm 终身流派统计和我这个月听过的流派相符吗?”

配置

全部通过环境变量配置,无需配置文件。只有 SPOTIFY_CLIENT_ID 是必需的。

变量示例用途
SPOTIFY_MCP_TOOLSETS未设置按组精简工具集,以适应对工具数量有限制的宿主。未设置时注册精选的默认工具集;设为 all 时注册全部工具。每种配置的工具数量见上方生成的统计表。
SPOTIFY_MCP_STATSFM1注册由 stats.fm 提供支持的 50 个工具,分属四个注册键:statsfm、taste、tastecomposites 和 tastejukebox。默认关闭:这些工具需要单独的 stats.fm 用户名。其中两个工具会写入 Spotify(taste_to_playlist 和 statsfm_jukebox);其余工具均为只读。spotify-mcp tools 会统计你当前环境实际注册的工具。
SPOTIFY_MCP_READONLY1隐藏可写模块;只读资源和提示词仍可用。
SPOTIFY_MCP_HISTORY1将变更记录为 JSONL,以便撤销和审计。
SPOTIFY_MCP_RECEIPTS1持久化变更回执,以便在重启后仍可使用 verify_receipt/undo_mutation。
SPOTIFY_MCP_ATTRIBUTION0关闭“Music data supplied by Spotify”页脚及每行的 open.spotify.com 链接。除非设为 0/false/no/off,否则默认开启;该披露为必需内容,因此只有显式设为假值时才会移除。

完整参考:docs/configuration.md

spotify_doctor(CLI + 服务内工具)无需额外设置,即可诊断令牌状态、权限范围缺失、Premium 限制、速率限制冷却时间、请求/配额用量(累计和滚动窗口计数,#904),以及读取缓存压力(保留的条目数、保留的字节数、因响应过大而无法缓存的响应,#894)。

升级到 2.0

2.0 是一个契约版本。一个工具名称已移除,四项内容已调整,另有一项保证已收紧:

  1. 已移除 get_show_episodes。 请使用 list_show_episodes(相同的端点、 相同的参数,只是去掉了漂移的别名)。这是唯一更改名称的项目; 其余所有接口名称均保持不变。准确的注册表总数会在本文件顶部 自动生成,因此这里特意不列出数量,以免日后出现差异。

  2. 破坏性写入会在无法确认时失败关闭。 现在,任何需要确认的大批量写入 在客户端无法征求确认时都会拒绝执行,而不是未经提示就继续。 archive_played_episodes 的 confirm: true 不再授权删除操作 (该参数仍会被接受,但每条结果都会说明它已被忽略)。对于无头 自动化,请有意设置 SPOTIFY_MCP_CONFIRM=never。

  3. 播放列表集合运算的输入采用规范名称。 A/B 对使用 playlist_a/playlist_b;有序列表使用 playlists; playlist_subtract 使用 base_playlist_id 表示基准播放列表。这是 2.0 的契约;此前允许与其并存的旧名称已在 3.0 (#1287) 中撤回。它们不再 出现在任何工具的架构中,仍发送旧名称的调用会在发出任何 Spotify 请求前 被拒绝,并返回 validation 错误,其 reason 为 retired_input,同时 指明实际发送的名称以及应改用的名称。每个工具都只声明了一对别名或一个 别名列表,因此下表是各工具的迁移对照表,而不是一组可同时使用的名称:

    系列规范名称该工具以前声明的名称
    A/B 对playlist_a、playlist_ba/b,或 playlist_id_a/playlist_id_b,或 playlist_a_id/playlist_b_id——每个工具只使用其中一种
    有序列表playlistsplaylist_ids,或 source_playlist_ids,或 sources——每个工具只使用其中一种
    相减base_playlist_id + playlistssubtract_playlist_ids,或位置参数形式 playlists: [base, ...sources]——每个工具只使用其中一种

    base_playlist_id 再次成为必填项:位置参数形式已移除,因此调用方 不再有可省略基准播放列表的情况。工具未声明且并非已撤回名称的参数, 会导致 unknown_param 错误——这与 retired_input 表示的情况不同; 后者表示服务端曾将该名称发布到 3.0。

  4. 数值上限采用规范名称。 max_results 限制返回的数量; limit 和 scan_cap 限制每个来源的读取量。

  5. 拒绝未知参数,并返回带类型的 unknown_param 错误,而不是忽略它们, 因此重命名后的参数会明确报错,而非悄无声息地不起作用。

升级后运行 spotify_doctor:它会在一次调用中报告已注册的接口、 隐藏模块的门控条件,以及已授权的权限范围。

文档

要求

  • 播放控制(播放/暂停/跳过/定位/音量/队列)需要 Premium。免费账户仍可使用搜索、曲库和播放列表。
  • Node 22.9+,Spotify 应用须处于开发模式(扩展配额前最多支持 5 位用户)。
  • Spotify 将有声书功能限制在美国、英国、加拿大、爱尔兰、新西兰和澳大利亚。
  • 部分端点受注册限制——无论作用域或 Premium 状态如何,当前应用注册均会收到 403。已获豁免的注册是否仍会返回 200,尚未验证(#1338)。这是应用注册的属性,而非工具的属性。请参阅受注册限制的端点。
受注册限制的端点

部分 Web API 端点在应用注册级别受到拒绝:对于当前的 Spotify 应用注册,无论授予哪些 OAuth 作用域,也无论账户是否为 Premium,都会返回 403 Forbidden。这是 Spotify 端的限制,并非你的配置错误。

这里没有任何内容是简单地“已移除”。 有三种来源描述了这一类端点,但它们并不一致,因此下表说明的是运行时行为,而非给出定论:

  • Spotify 的2026 年 2 月变更日志将一批操作标记为 [REMOVED]。
  • 实时 OpenAPI schema仍列出其中大多数相同路径,并标注 deprecated: true,而非将其删除——包括 /artists/{id}/top-tracks 和全部七个 Get Several 批量路径。
  • 运行时的实际情况不由这两份文档决定,而取决于你的应用注册获准读取哪些内容。没有相应授权的注册会返回 403/404/410。已获豁免的注册是否仍会返回 200,尚未验证(#1338):此代码库中没有探测记录能够证明这一点,且唯一曾被引用的探测产物记录的这些路径全部返回 403。

因此,这里的 403 是注册的属性,而非工具的属性。工具不会因为受到限制而隐藏,也没有受限工具是僵尸:每个工具要么读取有文档记录的替代项并返回结果,要么发出调用并用通俗易懂的语言解释 403。权威列表是 src/gating.ts 中的 GATED_FAMILIES 数组——GATED_PATH_PATTERNS 根据它生成,因此分类器与此表不会出现偏差。

端点系列已发布的调用该端点的工具在当前注册中的状态
browse-categories — /browse/categories*(列表、{id}、{id}/playlists)get_category、browse_category_deepdive、category_resolver已说明 403
browse-new-releases — /browse/new-releases(无——没有已发布的工具读取此路径)已替换;无调用点
markets — /marketsget_available_markets、market_validate已说明 403
artist-top-tracks — /artists/{id}/top-tracksget_artist_top_tracks、queue_playlist、artist_collab_network、artist_completeness_score、batch_add_to_playlist、copy_playlist、move_items_between_playlists已说明 403
user-profile — /users/{id} 和 /users/{id}/playlistsget_user_profile、get_user_playlists_by_id、get_playlist_followers已说明 403
me-type-contains — 文档中列出的 /me/{type}/contains 检查(曲目、专辑、节目、单集、有声读物、关注)(无——已迁移至 GET /me/library/contains)已替换;无调用点
playlist-followers-contains — /playlists/{id}/followers/contains(无——已迁移至 GET /me/library/contains)已替换;无调用点
batch-several — 多 ID 的 ?ids= 批量端点(/tracks、/albums、/artists、/episodes、/shows、/audiobooks、/chapters)get_several_tracks、get_several_albums、get_several_artists、get_several_episodes、get_several_shows、get_several_audiobooks、get_several_chapters、catalog_batch_lookup已替换为逐 ID 读取

Spotify 2026 年 2 月的变更日志将上述全部 8 个系列标记为 [REMOVED] 操作。

请根据权威来源自行确认列表:

grep -n "id: '" src/gating.ts        # the families, with tools and fallback per row

说明:

  • 列表中的系列是运行时分类器,并不意味着某个工具一定会调用它。三个系列(browse-new-releases、me-type-contains、playlist-followers-contains)已没有有效调用点——原先使用它们的工具已迁移到替代方案——保留这些模式是为了确保未来的调用者仍受 403 合约保护,而不会在无提示的情况下失去保护。
  • GET /me/library/contains 不受限制(在同一次探测中返回了 200),它为 check_playlist_following、restore_library_snapshot 和收据验证背后的已保存状态读取提供支持。上述 contains 系列是变更日志标记为已移除、并由该端点取代的文档中列出的各类型检查。(播放列表重复项清理工具不在此范围内——它们会对 /playlists/{id}/items 进行分页读取。)
  • 批量回退(#725)。 当 Get Several 批量端点返回 403 时,fetchSeveral 会通过客户端现有的队列和退避机制,重试逐 ID 调用 GET /<kind>/{id}。逐 ID 路径不属于受限制类别,因此读取仍可成功。响应会携带 degraded: true,并在文本中附带 [degraded: batch endpoint returned 403; … fetched individually] 页脚,同时在 structuredContent 中包含 degraded_reason,这样调用者就能区分逐项往返和正常的批量读取。
  • Spotify 列为已移除、但此服务完全没有封装的端点(没有已发布的工具,因此无需说明):/recommendations、/recommendations/available-genre-seeds、/me/apps、/me/chapters、/artists/{id}/related-artists、/audio-features、/audio-analysis 和 /browse/featured-playlists 读取,以及 /playlists/{id}/tracks 系列(已由 /playlists/{id}/items 取代)。这些端点未列在上表中,因为没有对应工具才是准确的说明——它们没有需要解释的 403。
故障排除 - **“未通过身份验证”** → 重新运行 `auth`;检查 `~/.spotify-mcp/tokens.json` 是否存在,以及重定向 URI 是否完全匹配(末尾不能有斜杠)。 - **身份验证循环 / S256 错误** → 打开无痕窗口,先登录 spotify.com,然后在该窗口中重试身份验证 URL。 - **端口已被占用(8888)** → 释放该端口,将 `SPOTIFY_REDIRECT_URI` 设置为其他端口,或使用 `SPOTIFY_HEADLESS=1`。消息会指出 `EADDRINUSE` 和端口,因为通常是之前运行的 `auth` 仍占用该端口。 - **等待浏览器回调超时** → 不是端口冲突;监听器已成功绑定,现已关闭。请重试,并检查注册的重定向 URI 是否完全匹配。使用 `SPOTIFY_AUTH_TIMEOUT_MS` 设置绑定等待时间(默认 5 分钟)。 - 播放时出现 **“需要 Premium”** → Free 账户会出现此情况;没有变通方法。 - **查询工具返回 `Forbidden`**(类别、市场、热门曲目、用户资料,以及按类型执行的 `contains` 检查)→ 这些端点受 Spotify 注册门槛限制;请参阅[受注册门槛限制的端点](#registration-gated-endpoints)。(`GET /me/library/contains` 不属于其中,因此该端点返回 403 是实际问题,而非注册门槛限制。) - **仍然无法解决?** 运行 `npx -y @novalux12/spotify-mcp@latest doctor`,或让你的 Agent 运行 [spotify-mcp-doctor skill](skills/spotify-mcp-doctor/SKILL.md)。
此服务不提供什么

v2 列出了明确的非目标,因此遇到超出范围的请求时会给出明确答复,而不是含糊其词。以下每项的依据见 SPEC §1,而 docs/non-goals.md 记录了这些说明:每项排除的内容、所依据的来源,以及服务提供的替代方案。

  • 音频流、音频分析和离线播放
  • Web UI、仪表板或 MCP UI 界面
  • 多租户或托管式运行
  • 在不同用户之间共享某个用户的凭据
  • 歌词
  • Spotify Connect SDK 和原生客户端集成
  • 语音控制
  • 使用 Spotify 数据训练模型,或导出衍生资料
  • 第二个第三方上游、广告技术或商业化数据出口
  • 绕过 Spotify 自身的控制措施

开发

git clone https://github.com/NovaLux12/spotify-mcp-server.git && cd spotify-mcp-server
npm ci && npm run build
cp .env.example .env  # add your Client ID
npm run auth          # one-time login
npm run dev           # run from source
npm test              # unit + MCP smoke tests

与 Spotify 无关联。请遵守 Spotify Developer Terms。

MIT © Carme99 和 NovaLux12 贡献者 · 感谢 calebWei/SpotifyMCP 和 varunneal/spotify-mcp。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。