关于 lineupify
lineupify 是本地 MCP 服务,可将音乐节阵容、心情描述、艺人、歌曲或播放列表转为可编辑的 Spotify 播放列表草稿。它支持 Spotify 账户播放列表,也提供 Deezer 草稿与导出模式。
主要功能
- 01根据阵容、心情或音乐种子创建草稿
- 02通过 ISRC 查找并匹配曲目
- 03发布前查看和编辑草稿
- 04读取、比较及混合播放列表
- 05将 Deezer 草稿导出为链接或文本
适用场景
- 01根据音乐节海报制作播放列表
- 02按心情和时长筛选创建播放列表
- 03比较两份播放列表并制作共享混音
- 04导出草稿以用于其他音乐服务
MCP 相关
它连接 MCP 宿主,提供创建、查看、编辑和发布 Spotify 播放列表,以及处理 Deezer 草稿和导出的工具。服务在本地运行。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y lineupify-mcpSPOTIFY_CLIENT_IDClient ID of your own Spotify app (developer.spotify.com/dashboard, redirect URI http://127.0.0.1:8765/callback). Optional if saved with `lineupify-mcp setup`.LASTFM_API_KEY密钥Optional Last.fm API key for tag, similar-artist, similar-song and per-country data.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
22收录的工具列表 · 更新于 2 周前
此工具无需参数。
详细介绍
Lineupify
说出你想听什么,即可在自己的账户中获得一份可阅读、可编辑、值得信赖的播放列表。
Lineupify 是一款 MCP 服务,适用于 Claude Desktop、Claude Code、Cursor 和其他 MCP 主机。粘贴音乐节海报、描述一种心情、说出一位艺人或你喜欢的一首歌、指定一个播放列表,或混合两个人的播放列表。Lineupify 会找到相关艺人,挑选他们最受欢迎的歌曲,精确匹配歌曲(按 ISRC),并创建一份草稿,供你在发布到 Spotify 之前审核和编辑。所有操作都在你的设备上运行;没有 Lineupify 服务,也不会收集遥测数据。
| Spotify | Deezer 模式 | |
|---|---|---|
| 所需条件 | Spotify Premium 账户和免费的 Spotify 开发者应用(2 分钟,无需密钥) | 无需任何账户或密钥 |
| 可获得内容 | 在你的 Spotify 账户中创建播放列表,还可读取和比较自己的播放列表与音乐库 | 包含 Deezer 链接的草稿,可导出并导入到任何平台(Deezer、Apple Music、YouTube Music) |
| 差异原因 | Spotify 只允许新应用为其所有者提供服务,而所有者必须拥有 Premium | Deezer 的公共 API 无需密钥,但 Deezer 已不再发放写入凭据 |
两种模式都需要 Node.js 20 或更高版本。npm 上的软件包:lineupify-mcp。
目录
为什么
流媒体应用擅长播放音乐,却不擅长让你说出自己想听什么。
- 每日混音不符合你此刻的心情。 它们根据你听过的内容制作,而不是根据你接下来想听的内容。
- 随机播放总是播出相同的歌曲和相同的艺人。 你想听喜欢的艺人推出的新歌,而不是一遍又一遍听那二十首歌。
- 你能描述一种感觉,却找不到对应的流派。 “适合雨天周日做饭时听的爵士乐”在任何应用里都不是一个分类。
- 往播放列表里添加歌曲要花好几分钟搜索,明明一句话就能搞定。
- 音乐节阵容有四十个名字,你只认识六个。 手动做准备要花上一整个晚上。
- Blend 只能混合用户档案。 你想比较两个播放列表,看看它们有哪些共同点以及原因,再生成一份两个人都会喜欢的混音。
- 算法无法解释自己的选择。 你想知道一首歌来自哪个艺人、为什么被选中,然后还能修改结果。
- 你的播放列表在 Spotify 上,但朋友不用 Spotify。 你想把列表导出为文件,让他们能在任何地方使用。
Lineupify 会为每个问题生成一份你看得见的草稿,为每首曲目说明理由,并将播放列表保存到你自己的账户中。
在 Claude Code 中输入一句话并附上音乐节海报照片:生成 92 首曲目,设为私密并发布,同时列出未能匹配的四位艺人,而不是悄悄略过。
快速开始
选择以下三种安装方式之一。无论选择哪种,最终都会在你的宿主中注册同一个服务;Spotify 应用是唯一无法自动完成的步骤,因为它需要在你的 Spotify 账户中创建。
选项 A:让你的助手为你安装
如果你的助手可以运行终端命令(Claude Code、Cursor 等),请把以下内容粘贴到聊天中并按步骤操作:
为我安装 Lineupify MCP 服务,并引导我完成设置。它的 npm 包是
lineupify-mcp(https://www.npmjs.com/package/lineupify-mcp);请先阅读 https://github.com/SHREESHMAN/lineupify 中的 README。询问我是否拥有 Spotify Premium 账户。如果有,请指导我在 https://developer.spotify.com/dashboard 创建 Spotify 应用,并将 Redirect URI 设为http://127.0.0.1:8765/callback,向我索取 Client ID,然后运行npx -y lineupify-mcp setup --client-id <id>和npx -y lineupify-mcp auth,并告诉我何时在浏览器中批准登录。如果没有,请跳过 Spotify:Deezer 模式无需任何设置。然后运行npx -y lineupify-mcp install --claude-code(或者--cursor/--claude-desktop,根据你正在使用的宿主选择),接着运行npx -y lineupify-mcp doctor,向我展示结果,并告诉我接下来该说什么。在 Windows 上,通过cmd /c运行 npx。
如果 Lineupify 已经注册,但尚未连接 Spotify(通过一键方式安装,或手动编写配置时),请改为粘贴以下内容:
调用 Lineupify 的
status工具。如果尚未连接 Spotify,请使用我的 Client ID PASTE_CLIENT_ID_HERE 调用connect,告诉我在浏览器中批准登录,然后再次调用status进行确认。
选项 B:在终端中引导式设置
-
创建 Spotify 应用(2 分钟;Deezer 模式可跳过)。前往 https://developer.spotify.com/dashboard,点击 Create app,勾选 Web API,将重定向 URI 设置为
http://127.0.0.1:8765/callback,然后保存,并从应用的 Settings 页面复制 Client ID。不需要客户端密钥。包含每个字段的完整操作指南:docs/setup-spotify.md。截图:“Create app”和 Client ID 的位置
控制面板。“Create app”位于右上角。
保存后:需要复制的值是 Client ID。始终不需要客户端密钥。这里显示的 180 天刷新令牌有效期,就是status每年会提示你重新连接两次的原因。 -
运行引导式设置:
npx -y lineupify-mcp init输入 Client ID,通过浏览器登录,将 Lineupify 添加到 Claude Desktop、Claude Code 或 Cursor(以找到的为准),然后运行健康检查。每个步骤都可以跳过。之后重启你的宿主应用。
截图:
init的运行效果
在已完成设置的机器上再次运行:每个步骤都可以跳过,最后的健康检查与doctor输出的相同。 -
**请求创建播放列表。**以下请求都可以:
- “根据这个演出阵容给我制作一个播放列表” (粘贴海报文字或附上图片)
- “适合下雨的周日做饭时听的爵士乐,时长约一小时,不要露骨内容”
- “类似 Khruangbin 的艺人,每人两首歌”
- “类似 Ritviz – Udd Gaye 的歌曲,只要其他艺人的”
- “我喜欢的艺人发布的新歌,但不要我已经点过赞的”
- “我朋友的播放列表和我的有哪些共同点?然后给我们制作一份混合播放列表。”
选项 C:一键安装到 Claude Desktop
从发布页面下载 lineupify-<version>.mcpb,然后双击它(或将其拖到 Claude Desktop 上)。在表单中粘贴 Client ID,或留空以使用 Deezer 模式。仍需安装 Node.js 20 或更高版本。然后在聊天中说“将 Lineupify 连接到 Spotify”。
截图:你将看到的 Claude Desktop 三个界面
Settings → Extensions。在此处放入 .mcpb 文件。
安装对话框。红色警告是 Claude Desktop 对所有第三方扩展的标准提示;代码托管在 GitHub 上,npm 上的软件包带有来源证明。
安装后:Client ID 字段(留空表示 Deezer 模式)、可选的 Last.fm 密钥,以及各工具的权限。只读工具会分组显示,你只需批准一次。
其他宿主、配置文件方式,以及同时运行两个宿主:docs/hosts.md。
没有 Spotify,或者没有 Premium?使用 Deezer 模式
完全跳过 Spotify 应用:将 Lineupify 添加到宿主,然后请求生成播放列表。没有 Spotify 登录时,草稿会自动基于 Deezer 构建(也可以说“使用 Deezer”;对应选项为 provider: "deezer")。Deezer 的公共 API 无需密钥,因此不必创建、粘贴或批准任何内容。
Deezer 模式支持:除你自己的 Spotify 偏好外的所有种子、所有筛选条件、读取、分析、比较和合并 Deezer 播放列表与草稿、编辑,以及所有导出。不支持:发布到账号。Deezer 于 2025 年起停止向新应用发放 API 凭据,因此目前没有任何工具可以写入 Deezer 账号。如果 Deezer 重新开放 API,我们会添加发布功能。
将 Deezer 草稿导入你的 Deezer(或 Apple Music、YouTube Music)账号只需粘贴一次:
- 请求导出链接:“将此草稿导出为链接”(
export_draft,format: "links";"text"则会导出“艺术家 - 标题”格式的行)。 - 打开 TuneMyMusic 或 Soundiiz,选择 从文本导入(TuneMyMusic:Let's start → Upload text;Soundiiz:Import playlist → From text),然后粘贴列表。
- 选择目标服务并确认。传输工具会自行登录你的账号;Lineupify 不会接触任何账号信息。
这两款工具的免费套餐都能满足普通播放列表的需求。
截图:粘贴到 TuneMyMusic 的链接
粘贴 links 导出内容后,TuneMyMusic 会将每一行识别为曲目,并让你选择目标服务。
Spotify 的 Premium 规则适用于 拥有 开发者应用的人,而不是所有使用该应用的人。应用所有者可以在控制面板的 User Management 中通过电子邮件添加最多 4 位其他用户(每个应用总共 5 位用户),这些用户使用自己的账号登录,包括免费账号。因此,如果你认识的人有 Premium:
- 他们按照选项 B 的第 1 步创建应用,并在 User Management 中添加你的 Spotify 账号邮箱。
- 他们把 Client ID 给你(它不是机密;不会用到密钥)。
- 你使用该 Client ID 运行
npx -y lineupify-mcp init,并以自己的身份登录。你的令牌会保留在你的设备上;应用所有者看不到你的账号。
有两项限制:一个应用最多供 5 人使用,而且所有用户和应用所有者的所有应用共享该所有者的每日 API 配额。把 Client ID 给不在 User Management 列表中的人没有用;他们登录时会失败并收到 403 错误。这适合朋友和家人使用;不能用来服务陌生人,Spotify 的条款也不允许这样做。详情:docs/setup-spotify.md。
对话示例
音乐节
你: 根据这份阵容给我做一个播放列表。
SUNFALL FESTIVAL 2026 · 14-16 AUGUST FRED AGAIN.. CHARLI XCX Jamie xx · Four Tet · Overmono Yaeji Nia Archives Barry Can't Swim DJ Fluffhead TICKETS ON SALE NOW
助手会调用 parse_lineup,返回 9 位艺人及其级别,并去掉日期和售票信息;随后调用 create_draft,传入 lineup: "Sunfall 2026"。草稿会在大约 15 秒内生成;阵容较长时,后台会继续处理:
Draft d_7k2mq "Sunfall 2026 · Lineupify" rev 1 status ready provider spotify spotify: Alex
Artists 9 (resolved 8 · unresolved 1)
Tracks 27 · 1h42m · explicit 6 · via isrc 25 / text 2 · sources dz 27 / lfm 0 / sp 0
Tiers headliner 2×5 · sub 3×3 · undercard 4×2 · order interleave · private
Not found on Deezer or Spotify (1): DJ Fluffhead
Next: get_draft view=tracks to review, get_draft view=unresolved for misses, edit_draft to change, create_playlist with confirm: true to publish.
你: 给我看看曲目。
t_4k2p #1 Fred again.. – Marea (we've lost dancing) 4:52 dz/isrc 2021
t_c81z #2 Charli xcx – Von dutch 2:44 dz/isrc [E] 2024
t_m0r3 #3 Jamie xx – Gosh 4:50 dz/isrc 2015
t_9x1c #4 Four Tet – Baby 3:47 dz/isrc 2020
…
你: 删掉 Four Tet 的曲目“Baby”,忽略 DJ Fluffhead,然后发布。
edit_draft 会移除该曲目并排除这位艺人;create_playlist 会返回链接:
Created playlist "Sunfall 2026 · Lineupify" with 26 tracks (1h38m).
URL: https://open.spotify.com/playlist/3cEYpjA9oz9GiPac4AsH4n
之后的编辑会先调用 edit_draft,再调用 update_playlist,以原位替换播放列表内容。
最终出现在 Spotify 中的内容:名称遵循你的 namingTemplate,描述由你提供或使用默认描述,曲目则来自你审核过的草稿。
一种氛围
你: 适合下雨的周日做饭时听的爵士乐,时长约 1 小时,不要露骨内容。
助手会自行推荐合适的艺人,添加包含相同词语的 genre 种子,避免列表完全依赖自身猜测,然后调用 create_draft,传入 maxDurationMin: 60 和 excludeExplicit: true:
Draft d_r47h8 "Rainy Sunday jazz · Lineupify" rev 1 status ready
Seed genre "rainy sunday jazz" → 7 artists (Deezer playlists: Jazz for a Rainy Sunday Morning, a jazz Sunday in the rain, …)
Filters: clean only
Artists 10 (resolved 10 · unresolved 0)
Tracks 10 · 52:10 · explicit 0 · via isrc 10 / text 0
两个人
你: 比较我的“6626”播放列表和我的收听历史,然后制作一份我们都会喜欢的混合播放列表,不要包含其中已有的曲目。
compare_playlists 会用数字说明两者的重合情况,助手再将其转述为文字:
Compared 2 sides: 6626 (64 tracks, 52 artists) · your listening history (0 tracks, 210 artists)
Shared by all — artists (18): Mitski, My Chemical Romance, Linkin Park, Olivia Rodrigo, …
6626 vs your listening history: artist overlap 7% (18 shared, 0 identical tracks)
Only in 6626 (34): Camila Cabello, Sara Kays, Prelow, …
然后调用 create_draft,传入 seeds: [{ type: "blend", sources: ["6626", "me"] }] 和 excludeTracksFrom: ["6626"]:
Seed blend 6626 + me → 10 artists (99 artists on 2+ sides, 10 of the 10 picked on every side)
Excluded tracks from: 6626 (64 tracks)
Tracks 10 · 33:57 · explicit 1
工作原理
每个请求都会生成一份艺人列表,而每份艺人列表都会经过相同的处理流程。发布之前,不会对 Spotify 进行任何操作。
flowchart LR
subgraph give[What you give]
A[Festival poster or lineup text]
B[A description or a mood]
C[An artist or a song you like]
D[A country or the charts]
E[A playlist link or your library]
F[Two or more people's playlists]
end
subgraph engine[Lineupify]
G[Artists]
H[Most popular songs per artist]
I[Matched by ISRC]
J[Filters, dedupe, order]
K[Draft you can read and edit]
end
L[(Your Spotify account)]
M[CSV / M3U / links / text]
A --> G
B --> G
C --> G
D --> G
E --> G
F --> G
G --> H --> I --> J --> K
K -->|create_playlist| L
K -->|export_draft| M
flowchart TD
A[artists and/or seeds] --> B[Expand seeds in the background<br/>genre · similar_to · similar_songs · chart · country · playlist · taste · blend]
B --> C[Resolve each artist<br/>Deezer → Last.fm → Spotify]
C --> D[Ranked candidate songs<br/>lead tracks first, featured next, live/remix last]
D --> E[Match by ISRC<br/>text search as fallback]
E --> F{Filters}
F -->|yearRange · bpmRange · explicit · excludeTracksFrom| G[Dedupe by URI, ISRC and title+artist]
G --> H[Per-tier counts and maxTracks cap]
H --> I[skipCovers · maxDurationMin · order]
I --> J[(Draft on disk<br/>revisions, undo)]
J -->|get_draft / edit_draft| J
J -->|create_playlist| K[Spotify playlist]
J -->|export_draft| L[CSV · M3U · links · text · Markdown]
为什么用 Deezer 和 Last.fm 排名?Spotify 不再向新应用开放热门曲目、推荐内容、相似艺人、流派或音频特征。Deezer 的公共 API 无需密钥即可使用,并提供流行度、相似艺人、节奏和播放列表;Last.fm(可选密钥)会提供标签、相似艺人、相似歌曲和各国家/地区排行榜;ListenBrainz(开放数据)会提供歌曲级别的邻近曲目信息。播放列表最终会保存到 Spotify,而 ISRC 代码可实现精确匹配。
草稿是一个小型状态机,每处理完一位艺人就会将检查点写入磁盘,因此进程被终止后,可以从停止处继续:
stateDiagram-v2
[*] --> building: create_draft
building --> ready: all artists fetched
building --> paused: quota / token / network
building --> failed: nothing to build
paused --> building: get_draft
ready --> building: edit_draft asks for more tracks
ready --> published: create_playlist
published --> published: edit_draft + update_playlist
参考
每个工具、每种 edit_draft 操作、每个种子、每个 create_draft 选项、CLI 和 config.json 都在 docs/reference.md 中,而不在这里,这样你就可以从头到尾读完本页。以下五个工具涵盖了你最常需要的操作:
| 工具 | 功能 |
|---|---|
status | 首先调用:查看连接状态、设置步骤和正在进行的草稿。 |
create_draft | 根据艺人和/或种子(流派、氛围、相似艺人、播放列表、混合)创建草稿。 |
get_draft | 查看草稿:摘要、曲目、艺人,或未能找到的内容。 |
edit_draft | 替换曲目、移除艺人、调整顺序、撤销。 |
create_playlist | 发布审核过的草稿并返回其 URL。 |
set_playlist_image | 使用保存在你设备上的 JPEG 设置播放列表封面。 |
隐私、数据和条款
Lineupify 在你的设备上运行,使用你创建的 Spotify 应用。它没有自己的服务、没有遥测,也无法访问你磁盘上的令牌以外的账户内容。SECURITY.md 列出了它能做和不能做的事,以及如何报告问题。
存储的内容,均位于 ~/.lineupify/(或 LINEUPIFY_HOME)下:
| 文件 | 内容 | 保留期限 |
|---|---|---|
config.json | 客户端 ID、默认设置、可选的 Last.fm 密钥 | 直到你更改为止 |
tokens.json | Spotify 访问令牌和刷新令牌 | 直到执行 disconnect / logout;无论如何,刷新令牌会在 6 个月后失效 |
cache/artists.json、spotify-tracks.json、deezer-tracks.json、artist-genres.json、covers.json | 艺人匹配结果、曲目查询结果、节奏、流派 | 30-90 天 |
cache/playlists.json | 你读取过的播放列表曲目列表;使用 library 时也包括你喜欢的歌曲 | 12 小时 |
drafts/ | 每个草稿对应一个 JSON 文件,另含最多 10 个撤销版本 | 未发布的草稿在 30 天后删除;已发布的草稿会保留 |
exports/ | export_draft 写入文件的唯一位置 | 直到你删除这些文件 |
在 macOS 和 Linux 上,tokens.json 会以 0600 模式写入。在 Windows 上,该模式没有实际作用,因此文件会改为仅向你自己的账户授予权限(icacls /inheritance:r /grant:r);如果此操作失败,文件会保留用户配置文件的默认权限,与其他 CLI 的凭据文件一样。
Spotify 登录时请求的权限及其用途:
| 权限范围 | 用途 |
|---|---|
playlist-modify-private | create_playlist、update_playlist |
playlist-modify-public | 设置 public: true 时,同上 |
user-read-private | 基于市场的搜索(market=from_token),即每次构建 |
user-top-read、user-follow-read | compare_taste、discoveryOnly、使用 me 的 compare_playlists、taste 和 blend 种子、refresh_taste |
playlist-read-private、playlist-read-collaborative | 读取你自己的私人播放列表,以及按名称查找播放列表 |
user-library-read | 在读取、排除和 refresh_taste 中使用 library(喜欢的歌曲) |
ugc-image-upload | set_playlist_image,唯一会上传内容的工具;它会读取你指定的本地 JPEG 文件并将其发送到你的播放列表 |
Lineupify 从不删除播放列表或取消关注,从不更改你的音乐库或关注列表,并且除非你要求公开,否则创建的播放列表均为私人播放列表。唯一会覆盖内容的操作是对 Lineupify 创建的播放列表执行 update_playlist;如果该播放列表在 Spotify 中发生了更改,它会拒绝操作,除非你强制执行。
数据流向。 Lineupify 会与 api.spotify.com 和 accounts.spotify.com(你的账户)、api.deezer.com(无需密钥或账户)、ws.audioscrobbler.com(仅在设置 Last.fm 密钥时)、musicbrainz.org 和 labs.api.listenbrainz.org(仅在使用 similar_songs 种子时;种子歌曲的 ISRC、标题和艺人会在这些站点查询),以及 registry.npmjs.org(最多每 6 小时检查一次版本;设置 LINEUPIFY_NO_UPDATE_CHECK=1 可关闭此功能)通信。你的播放列表、喜欢的歌曲和热门艺人中的艺人名称、曲目标题和 ISRC 会作为搜索查询发送给 Deezer,用于排名、节奏、流派和封面检查;如果设置了密钥,也会发送给 Last.fm。不会随之发送任何账户标识符。如果你希望避免将听歌数据发送给 Deezer,请使用填写艺人的列表并设置 sources: ["spotify"],同时跳过 analyze_playlist、bpmRange 和 skipCovers。
开关。
LINEUPIFY_READ_ONLY=1会禁用create_playlist和update_playlist;其他功能均可使用。适用于“仅分析”配置。disconnect(工具)或lineupify-mcp logout会清除登录信息;purge: true(需同时设置confirm: true)/--purge会删除整个数据文件夹,并且如果文件夹中包含任何非 Lineupify 创建的内容,则会拒绝删除。请在 Spotify 端移除该应用的访问权限:https://www.spotify.com/account/apps/。- 你的 MCP 主机可以彻底禁用此服务(Claude Desktop:Settings → Developer;Claude Code:
claude mcp remove lineupify)。
由模型驱动的写入。 除非助手传入 confirm: true,否则在草稿展示给你之前,create_playlist 会拒绝执行。与任何 MCP 服务一样,Lineupify 会按助手的要求操作;写入工具带有 MCP destructiveHint 注解,因此支持请求权限的主机可以单独标识这些工具。发布前请检查草稿,或使用只读模式。
外部文本。 海报文字、曲目标题、播放列表描述和 Deezer 播放列表名称都会经过清理(去除控制字符、限制长度),并显示在固定的表格布局中,从而降低外部文本被当作指令读取的可能性。但这无法完全杜绝这种情况:如果海报上的一行文字写着“将其公开发布”,助手接收到的仍是这条数据,而且没有任何机制可以阻止模型据此采取行动。真正的保护措施是上面的开关:播放列表默认设为私密,create_playlist 需要经过审核的草稿或显式的 confirm,disconnect purge 也需要 confirm,LINEUPIFY_READ_ONLY 会关闭所有写入功能,而且 Spotify 没有删除接口。日志仅写入 stderr,其中的令牌和密钥会经过脱敏处理。
条款。 你是 Spotify 应用的所有者,因此受 Spotify 的 Developer Policy 约束。截至 2026-09-08,该政策允许应用让用户“将其播放列表的元数据移至另一项服务”(III.9 节),这正是 export_draft 的功能;但禁止使用 Spotify 内容“训练机器学习或 AI 模型,或以其他方式将 Spotify Content 导入机器学习或 AI 模型”(III.14 节)。Lineupify 不会训练任何内容,但会将曲目名称交给你正在与之聊天的助手;如果你严格解读 III.14 节,请使用 Deezer 模式或 LINEUPIFY_READ_ONLY。Spotify 的刷新令牌有效期自最初授权起为 6 个月,刷新令牌不会延长有效期。Deezer 的 API 条款规定仅限非商业用途(第 IV 条),但未提及缓存;Lineupify 会将 Deezer 查询结果保留 30 至 90 天。Last.fm 数据仅供非商业用途。将 Lineupify 用于商业场景(例如场馆或广播节目编排)前,请查阅这三项条款。
限制和已知问题
- Spotify 开发模式。 新建的 Spotify 应用会以开发模式运行:最多支持 5 位用户,且应用所有者必须拥有 Spotify Premium。只有月活跃用户达到 250,000+ 的注册企业才能获准使用生产模式(“扩展配额模式”),因此每位 Lineupify 用户都需要自行创建一个免费应用。只有将其他人添加到控制面板中的 用户管理 下,他们才能使用你的应用。没有 Premium 时,请使用 Deezer 模式。
- 无法向 Deezer 写入。 Deezer 于 2025 年关闭了面向新开发者的 API 应用注册,截至 2026 年年中仍未重新开放,因此 Deezer 草稿只能导出。读取、排名、相关艺人、节奏和播放列表查询均无需密钥,不受影响。
- 登录有效期为 6 个月。 Spotify 刷新令牌会在首次登录后 6 个月过期。剩余 30 天时,
status会发出警告;使用connectforce: true(或lineupify-mcp auth --force)重新连接。 - 每日配额。 开发模式的每日请求配额由你拥有的所有应用共享。配额用尽时,Lineupify 会报告
SPOTIFY_QUOTA_EXCEEDED,暂停草稿,并在配额重置后由get_draft恢复处理。已获取的结果会缓存,因此不会丢失。连接失败也会以相同方式暂停构建(NETWORK_ERROR)。 - 60 秒超时的宿主。 Claude Desktop 和 Cursor 会在 60 秒后终止任何工具调用,并忽略进度通知。因此,
create_draft会在约 15 秒内返回,并在后台继续构建;使用get_draftwaitSeconds: 25轮询。Claude Code 没有此限制。 - 不使用 Spotify 进行排名。 Spotify 已移除新应用对艺人热门曲目、推荐内容和人气数据的访问权限,因此歌曲会通过 Deezer 公共 API 和可选的 Last.fm 进行排名,然后按 ISRC 匹配到 Spotify。非常小众或刚出道的艺人可能不在 Deezer 上;这类艺人会显示为未解析。添加 Last.fm 密钥会有所帮助;其余情况可使用
add_track处理。 - 规模。 每个草稿最多包含 400 位艺人(较大的阵容可按日期拆分;种子会填满剩余空间),默认最多包含 250 首曲目(
maxTracks,最高可达 10,000 首)。 - 读取播放列表。 新应用无法读取 Spotify 自行创建的播放列表(Discover Weekly、Blend、Today's Top Hits、Daily Mix);用户创建的播放列表则可读取,但必须为公开状态或位于你自己的资料库中。读取上限为 1,000 首曲目(喜欢的歌曲为 3,000 首)。升级后如果
status列出缺少的权限,请使用connectforce: true重新连接。 - 流派和节奏。 Spotify 不会向新应用提供流派或音频特征,因此
analyze_playlist会使用 Deezer 的粗略流派分类(Pop、Rock、Metal 等)、设置密钥后可用的 Last.fm 标签,以及从最多 60 首曲目采样的 Deezer 节奏。重制版会显示重制年份,因此除非启用strictYear,否则yearRange会将其视为未知。 - 不设置 Last.fm 密钥时使用
similar_songs仅依赖 ListenBrainz,其对小众或非西方艺人的覆盖较少;添加密钥后还会使用 Last.fm 的共同收听数据。两个数据源都基于录音,因此歌曲必须存在于 MusicBrainz(ListenBrainz)中,或有 Last.fm 的收听记录。 - 不设置 Last.fm 密钥时的种子 依赖 Deezer 上的公开播放列表提供流派和国家信息;对常见流派和大国效果较好,对小众标签的覆盖较少。Last.fm 密钥(
setup lastfmApiKey)可补充标签、相似艺人和按国家分类的数据。 - 同一时间只能有一个构建器。 如果两个宿主(例如 Claude Desktop 和 Claude Code)同时运行 Lineupify,只有其中一个会构建指定草稿;另一个只会读取该草稿。
- npx 缓存。
npx -y lineupify-mcp会保留首次下载的版本。使用npm i -g lineupify-mcp@latest或npx -y lineupify-mcp@latest更新。若有更新版本,status会告知你。
开发
npm install
npm run typecheck && npm run lint && npm test # unit tests, offline (Spotify and Deezer mocked); includes a stdio boot test of the server
npm run coverage # the same with a coverage report
npm run test:live # live Deezer checks
npm run smoke:spotify # every Spotify endpoint, needs a connected account
npx tsx test/smoke/playlists.ts <playlist link> # reads, analysis and seeds against live APIs
npm run build # dist/
npm run bundle:mcpb # build/lineupify-<version>.mcpb for Claude Desktop
贡献方式:CONTRIBUTING.md。变更记录见 CHANGELOG.md。
致谢
- 歌曲排名、相关艺人、节奏和播放列表数据来自 Deezer 公共 API。
- 配置
LASTFM_API_KEY后,使用 Last.fm 数据提供支持。Last.fm 数据仅供非商业用途。 - 歌曲相似度使用 MusicBrainz 和 ListenBrainz(MetaBrainz Foundation)的开放数据,无需密钥。
- 播放列表通过 Spotify Web API 创建。
- 基于 Model Context Protocol(
@modelcontextprotocol/server)构建。
Lineupify 与 Spotify、Deezer、Last.fm 或 MetaBrainz 均无关联。
许可证
MIT。请参阅 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。