lineupify について
lineupifyは、フェスの出演者一覧、気分の説明、アーティスト、曲、プレイリストから編集可能なSpotifyプレイリストの下書きを作るローカルMCPサーバーです。Spotifyのプレイリストに加え、下書きとエクスポート向けのDeezerモードも備えています。
主な機能
- 01出演者一覧や気分などから下書きを作成
- 02ISRCによる楽曲検索と照合
- 03公開前の下書き確認と編集
- 04プレイリストの閲覧、比較、合成
- 05Deezerの下書きをリンクまたはテキストで出力
活用シーン
- 01フェスのポスターからプレイリストを作成
- 02気分や再生時間で条件を指定して作成
- 032つのプレイリストを比べて共有ミックスを作成
- 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は、Claude Desktop、Claude Code、Cursor、その他あらゆるMCPホスト向けのMCPサーバーです。フェスのポスターを貼り付けたり、気分を説明したり、好きなアーティストや曲を挙げたり、プレイリストを指定したり、2人のプレイリストを組み合わせたりできます。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です。
目次
- 理由
- クイックスタート
- 会話の例
- 仕組み
- リファレンス — 詳細な表はdocs/reference.mdをご覧ください
- プライバシー、データ、利用規約
- 制限事項と既知の問題
- 開発
- クレジット
- ライセンス
理由
ストリーミングアプリは音楽を再生するのは得意ですが、自分の希望を伝えるのは苦手です。
- デイリーミックスが今の気分に合いません。 これまで再生した曲をもとに作られていて、次に聴きたい曲をもとに作られているわけではありません。
- シャッフルすると、同じ曲やアーティストばかり流れます。 また同じ20曲を聴くのではなく、好きなアーティストの新しい曲を聴きたいのです。
- 気分は説明できても、ジャンルが見つかりません。 「料理をしながら聴く、雨の日曜日のジャズ」は、どのアプリにもカテゴリがありません。
- プレイリストに曲を追加するには、何分もかけて検索しなければなりません。 本来なら一文で済むはずなのに。
- フェスの出演者は40組いるのに、知っているのは6組だけです。 手作業で予習すると、夕方がまるまるつぶれてしまいます。
- Blendがブレンドするのはプロフィールだけです。 2つのプレイリストを比較し、共通点とその理由を確認して、両方の人が本当に気に入るミックスを作りたいのです。
- アルゴリズムは自分の判断を説明できません。 曲の元になったアーティストと選ばれた理由を確認して、あとから変更したいのです。
- プレイリストはSpotifyにありますが、友人はSpotifyを使っていません。 どこでも使えるファイルとしてリストを渡したいのです。
Lineupifyは、目で確認できる下書き、各トラックの選定理由、そして自分のアカウントに保存されるプレイリストで、これらすべてに応えます。
Claude Codeに一文とポスターの写真を送るだけで、92曲を非公開で公開できます。見つからなかった4組も、黙って除外せずに名前を表示します。
クイックスタート
3つのインストール方法から1つ選んでください。どの方法でも、最後にはホストに同じサーバーが登録されます。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 で、Redirect URIをhttp://127.0.0.1:8765/callbackに設定したSpotifyアプリを作成する手順を案内し、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 にチェックを入れます。Redirect 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では年に 2 回、再接続するよう求められます。 -
ガイド付きセットアップを実行します:
npx -y lineupify-mcp initClient ID を入力すると、ブラウザーからログインし、見つかったホスト(Claude Desktop、Claude Code、Cursor)のいずれかに Lineupify を追加して、ヘルスチェックを実行します。各手順はスキップできます。完了後、ホストを再起動してください。
initの表示例のスクリーンショット
セットアップ済みのマシンで 2 回目に実行した場合:すべての手順をスキップでき、最後のヘルスチェックはdoctorが表示するものと同じです。 -
プレイリストをリクエストします。 次のいずれでも大丈夫です。
- 「このラインナップでプレイリストを作って」(ポスターのテキストを貼り付けるか、画像を添付してください)
- 「料理をしながら聴く、雨の日の日曜日に合うジャズを 1 時間くらい。露骨な表現の曲はなしで」
- 「Khruangbin のようなアーティストを 1 曲ずつ」
- 「Ritviz – Udd Gaye のような曲を、ほかのアーティストから」
- 「お気に入りのアーティストの新曲のうち、まだ「いいね」していないもの」
- 「友達のプレイリストと私のプレイリストに共通しているのは何? そのあと、2 人向けのミックスを作って」
オプション C:Claude Desktop でワンクリック
リリースページからlineupify-<version>.mcpbをダウンロードし、ダブルクリックします(または Claude Desktop にドラッグします)。フォームに Client ID を貼り付けるか、Deezer モードを使う場合は空欄のままにします。Node.js 20 以降は引き続きインストールされている必要があります。その後、チャットで「Lineupify を Spotify に接続して」と伝えます。
スクリーンショット:Claude Desktop で表示される 3 つの画面
Settings → Extensions。.mcpb ファイルをここにドロップします。
インストールダイアログです。赤い警告は、すべてのサードパーティ製拡張機能に表示される Claude Desktop 標準の通知です。コードは GitHub にあり、npm のパッケージには来歴証明が付属しています。
インストール後:Client ID フィールド(空欄の場合は Deezer モード)、任意の Last.fm キー、ツールごとの権限が表示されます。読み取り専用ツールはグループ化されているため、一度だけ承認すれば済みます。
ほかのホスト、設定ファイルを使う方法、2 つのホストを同時に実行する方法については、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)アカウントに取り込むには、1 回貼り付けるだけです。
- エクスポートをリクエストします:「このドラフトをリンクとしてエクスポートして」(
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 ユーザーがいる場合は、次の手順で利用できます。
- Option B のステップ 1 と同じ方法でアプリを作成してもらい、User Management にあなたの Spotify アカウントのメールアドレスを追加してもらいます。
- Client ID を教えてもらいます(これはシークレットではありません。シークレットは一切使用しません)。
- その Client ID を使って
npx -y lineupify-mcp initを実行し、自分のアカウントでログインします。トークンはあなたのマシンに保存され、所有者があなたのアカウントを見ることはありません。
制限は 2 つあります。アプリを利用できるのは最大 5 人で、所有者の日次 API クォータは、その全員と所有者のすべてのアプリで共有されます。User Management に登録されていない人に Client ID を渡しても何も起こりません。その人のログインは 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 組のアーティストがランク付きで返され、日付とチケット情報の行は除外されます。その後、lineup: "Sunfall 2026" を指定して create_draft を呼び出します。ドラフトは約 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 シードを追加して、リストがアシスタント自身の推測だけにならないようにします。そして maxDurationMin: 60 と excludeExplicit: true を指定して create_draft を呼び出します。
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
2 人の場合
あなた: 私の「6626」プレイリストとリスニング履歴を比較して、すでにプレイリストにある曲を除外し、私たち 2 人が気に入りそうなミックスを作ってください。
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, …
続いて、seeds: [{ type: "blend", sources: ["6626", "me"] }] と excludeTracksFrom: ["6626"] を指定して create_draft を呼び出します。
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 は 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 にあります。依頼される内容のほとんどは、次の5つのツールで対応できます。
| ツール | 機能 |
|---|---|
status | 最初に呼び出します。接続状態、セットアップ手順、作業中のドラフトを確認できます。 |
create_draft | アーティストやシード(ジャンル、ムード、類似アーティスト、プレイリスト、ブレンド)からドラフトを作成します。 |
get_draft | ドラフトの概要、トラック、アーティスト、見つからなかった内容を表示します。 |
edit_draft | トラックの入れ替え、アーティストの削除、並べ替え、取り消しを行います。 |
create_playlist | 確認済みのドラフトを公開し、その URL を返します。 |
set_playlist_image | お使いのマシンに保存された JPEG をプレイリストのカバーに設定します。 |
プライバシー、データ、利用規約
Lineupify は、ご自身で作成した Spotify アプリを使って、お使いのマシン上で動作します。独自のサーバーやテレメトリーはなく、ディスク上のトークン以外を介してアカウントにアクセスすることもありません。SECURITY.md では、Lineupify でできることとできないこと、問題の報告方法を説明しています。
保存されるデータは、すべて ~/.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/ | ドラフトごとに1つの JSON ファイルと、最大10件の取り消し用リビジョン | 公開前のドラフトは30日後に削除されます。公開済みのドラフトは保持されます |
exports/ | export_draft がファイルを書き込む唯一の場所 | 削除するまで |
tokens.json は macOS と Linux ではモード 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 | me を指定した compare_taste、discoveryOnly、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 時間ごとに 1 回。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:設定 → 開発者、Claude Code:
claude mcp remove lineupify)。
モデルによる書き込み。 create_playlist は、アシスタントが confirm: true を渡さない限り、下書きが表示されるまで実行を拒否します。ほかの MCP サーバーと同様に、Lineupify はアシスタントの指示どおりに動作します。書き込みツールには MCP の destructiveHint アノテーションが付いているため、許可を求めるホストはこれらのツールを個別に識別できます。公開する前に下書きを確認するか、読み取り専用で実行してください。
外部テキスト。 ポスターのテキスト、トラックタイトル、プレイリストの説明、Deezer のプレイリスト名は、制御文字を除去し、長さを制限したうえで、固定の表レイアウト内に表示します。これにより、外部のテキストが指示として読み取られる可能性を下げています。ただし、その可能性を完全になくすことはできません。「これを公開プレイリストとして公開して」と書かれたポスターの一文はデータとしてアシスタントに渡され、モデルがそれに従って動作するのを防ぐものはありません。実際の保護策は上記の切り替え方法です。プレイリストはデフォルトで非公開であり、create_playlist にはレビュー済みの下書き、または明示的な confirm が必要です。disconnect purge にも confirm が必要です。LINEUPIFY_READ_ONLY を設定するとすべての書き込みが無効になり、Spotify には削除用のエンドポイントがありません。ログは標準エラー出力にのみ記録され、トークンとキーは秘匿されます。
利用規約。 Spotify アプリの所有者はあなたであるため、Spotify の 開発者ポリシーが適用されます。2026-09-08 時点で確認した内容では、ユーザーが「ユーザーのプレイリストのメタデータを別のサービスに移動する」(セクション III.9)ことをアプリが可能にするのは許可されており、これは export_draft が行うことです。一方、Spotify のコンテンツを「機械学習モデルまたは AI モデルのトレーニングに使用すること、またはその他の方法で Spotify コンテンツを機械学習モデルまたは AI モデルに取り込むこと」(III.14)は禁止されています。Lineupify は何もトレーニングしませんが、トラック名をチャット相手のアシスタントに渡します。III.14 を厳密に解釈する場合は、Deezer モードまたは LINEUPIFY_READ_ONLY を使用してください。Spotify の リフレッシュトークンの有効期限は元の認証から 6 か月で、リフレッシュしても延長されません。Deezer の API 利用規約は非商用利用を対象としており(第 IV 条)、キャッシュについては何も定めていません。Lineupify は Deezer の検索結果を 30~90 日間保持します。Last.fm のデータも非商用利用に限られます。Lineupify をビジネス(会場、ラジオ番組のスケジュールなど)で使用する前に、これら 3 つすべてを確認してください。
制限事項と既知の問題
- Spotify Development Mode。 新しい Spotify アプリは Development Mode で実行され、ユーザー数は最大 5 人で、アプリの所有者は Spotify Premium に加入している必要があります。本番環境(「Extended Quota Mode」)が付与されるのは、月間アクティブユーザー数が 250,000 人以上の登録企業のみです。そのため、Lineupify のユーザーはそれぞれ無料のアプリを作成します。他の人があなたのアプリを使うには、ダッシュボードの User Management でユーザーを追加する必要があります。Premium に加入していない場合は、Deezer モードを使用してください。
- Deezer には書き込めません。 Deezer は 2025 年に新規開発者向けの API アプリ登録を停止し、2026 年半ば時点で再開していないため、Deezer のドラフトはエクスポート専用です。読み込み、ランキング、関連アーティスト、テンポ、プレイリストの検索は認証キー不要で、影響を受けません。
- ログインの有効期間は 6 か月です。 Spotify のリフレッシュトークンは、最初のログインから 6 か月後に期限切れになります。
statusは残り 30 日になると警告します。connectでforce: trueを指定するか、lineupify-mcp auth --forceを実行して再接続してください。 - 1 日あたりのクォータ。 Development Mode では、所有するすべてのアプリで 1 日あたりのリクエストクォータを共有します。クォータを使い切ると、Lineupify は
SPOTIFY_QUOTA_EXCEEDEDを報告し、ドラフトを一時停止します。クォータがリセットされると、get_draftが処理を再開します。取得済みの結果はキャッシュされるため、失われることはありません。接続に失敗した場合も、同様にビルドが一時停止されます(NETWORK_ERROR)。 - タイムアウトが 60 秒のホスト。 Claude Desktop と Cursor は、60 秒を過ぎるとすべてのツール呼び出しをタイムアウトし、進行状況の通知を無視します。そのため、
create_draftは約 15 秒以内に応答し、バックグラウンドでビルドを続けます。get_draftのwaitSeconds: 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に不足している権限が表示された場合は、connectでforce: trueを指定して再接続してください。 - ジャンルとテンポ。 Spotify は新しいアプリにジャンルやオーディオ機能を提供しないため、
analyze_playlistは Deezer の大まかなジャンル(ポップ、ロック、メタルなど)、キーが設定されている場合は Last.fm のタグ、および最大 60 曲をサンプリングした Deezer のテンポを使用します。リマスター版のリリースにはリマスター年が付与されるため、strictYearが有効でない限り、yearRangeでは年が不明として扱われます。 - Last.fm のキーなしでの
similar_songsは ListenBrainz のみを使用するため、小規模なアーティストや西洋以外のアーティストのカバー範囲は狭くなります。キーを追加すると、Last.fm の共聴データも利用できます。どちらのソースも録音単位で動作するため、楽曲が MusicBrainz(ListenBrainz)に登録されているか、Last.fm のスクロブルデータが必要です。 - Last.fm のキーなしでのシード は、ジャンルと国の判定に Deezer の公開プレイリストを使用します。一般的なジャンルや大きな国では良好な結果が得られますが、ニッチなタグでは結果が限られます。Last.fm のキー(
setup lastfmApiKey)を追加すると、タグ、類似アーティスト、国別データを利用できます。 - ビルダーは同時に 1 つだけです。 2 つのホスト(たとえば 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 サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。