MCP server that builds Spotify playlists from festival lineups, moods, genres, similar artists, or blended taste. Runs locally with your own Spotify app.
- ✓Open-source license (MIT)
- ✓Actively maintained (<30d)
- ✓Clear description
- ✓Topics declared
- ✓Documented (README)
claude mcp add lineupify -- npx -y lineupify-mcp{
"mcpServers": {
"lineupify": {
"command": "npx",
"args": ["-y", "lineupify-mcp"]
}
}
}MCP Servers overview
# Lineupify
[](https://github.com/SHREESHMAN/lineupify/actions/workflows/ci.yml) [](https://www.npmjs.com/package/lineupify-mcp) [](LICENSE)
**Say what you want to hear. Get a Spotify playlist in seconds, in your own account, that you can read, edit and trust.**
Lineupify is an MCP server for Claude Desktop, Claude Code, Cursor and any other MCP host. Paste a festival poster, describe a mood, name an artist you like, point at a playlist, or blend two people's playlists. Lineupify finds the artists, picks their most popular songs, matches them to Spotify and builds a draft you can review before anything is published. You bring a free Spotify developer app (two minutes, no client secret). Everything else runs on your machine.
- npm: `lineupify-mcp` (Node.js 20 or newer)
- Guides: [Spotify app setup](docs/setup-spotify.md) · [Hosts](docs/hosts.md) · [Troubleshooting](docs/troubleshooting.md) · [Security](SECURITY.md)
## Why
Streaming apps are good at playing music and bad at letting you say what you want.
- **The daily mixes are not what you are in the mood for.** They are built from what you played, not from what you want to play next.
- **Shuffle keeps serving the same songs and the same artists.** You want new songs by the artists you already love, not the same twenty again.
- **You can describe a feeling but cannot find the genre.** "Rainy Sunday jazz for cooking" is not a category in any app.
- **Adding songs to a playlist takes minutes of searching** when it should take one sentence.
- **A festival lineup is forty names and you know six.** Preparing for it by hand takes an evening.
- **Blend only blends profiles.** You want to compare two playlists, see what they share and why, and get a mix both people will actually like.
- **The algorithm cannot explain itself.** You want to see which artist a song came from and why it was picked, then change it.
- **Your playlist is on Spotify but your friend is not.** You want the list as a file they can use anywhere.
Lineupify answers each of these with a draft you can see, a reason for every track, and a playlist that ends up in your own account.
```mermaid
flowchart LR
subgraph give[What you give]
A[Festival poster or lineup text]
B[A description or a mood]
C[An artist 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 to Spotify by ISRC]
J[Filters, dedupe, order]
K[Draft you can read and edit]
end
L[(Your Spotify account)]
M[CSV / M3U / Markdown]
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
```
## Quick start
The one step nobody can skip is creating a Spotify app, because Spotify only lets new apps serve their owner. Everything after that is one command.
1. **Create a Spotify app** (2 minutes). Go to https://developer.spotify.com/dashboard, click *Create app*, pick *Web API*, set the Redirect URI to exactly `http://127.0.0.1:8765/callback`, save, and copy the **Client ID**. No client secret is needed. Full walkthrough: [docs/setup-spotify.md](docs/setup-spotify.md).
2. **Run the guided setup** in a terminal (needs Node.js 20 or newer):
```
npx -y lineupify-mcp init
```
It takes the Client ID, logs you in through your browser, adds Lineupify to Claude Desktop, Claude Code or Cursor (whichever it finds), and runs a health check. Prefer clicking? Claude Desktop users can instead download `lineupify-<version>.mcpb` from the [releases page](https://github.com/SHREESHMAN/lineupify/releases) and double-click it (Node.js 20 or newer must still be installed).
**Or let your assistant do step 2.** If your assistant can run terminal commands (Claude Code, Cursor, and similar), paste this, with your Client ID filled in:
> Set up the Lineupify MCP server for me. Run `npx -y lineupify-mcp setup --client-id PASTE_CLIENT_ID_HERE`, then `npx -y lineupify-mcp auth` and tell me when to approve the login in my browser, then `npx -y lineupify-mcp install --claude-code` (or `--cursor` / `--claude-desktop` for the host you are running in), then `npx -y lineupify-mcp doctor` and show me the result. Windows users: run npx through `cmd /c`.
If the server is already added but not connected (the `.mcpb` route, or a hand-written config), paste this in any chat:
> Call Lineupify's `status` tool. If Spotify is not connected, call `connect` with my Client ID PASTE_CLIENT_ID_HERE, tell me to approve the login in the browser, then call `status` again to confirm.
3. **Ask for a playlist.** Any of these work:
- "Make me a playlist for this lineup" *(paste the poster text or attach the image)*
- "Rainy Sunday jazz for cooking, about an hour, nothing explicit"
- "Artists like Khruangbin, two songs each"
- "New songs from my favourite artists that I have not liked yet"
- "What does my friend's playlist have in common with mine? Then make us a mix."
### No Spotify, or no Spotify Premium? Deezer mode
Spotify only lets a new app serve its owner, and that owner needs Premium. If that is not you, skip steps 1 and 2 entirely: add Lineupify to your host ([docs/hosts.md](docs/hosts.md)) and ask for a playlist. With no Spotify login, drafts build on **Deezer** automatically (or say "use Deezer"; the option is `provider: "deezer"`). Deezer's public API is keyless, so there is nothing to create, paste or approve.
What works in Deezer mode: every seed except your own Spotify taste, every filter, reading, analysing, comparing and merging Deezer playlists and drafts, editing, and all exports. What does not: publishing into an account. Deezer stopped issuing API credentials to new apps in 2025, so no tool can write to a Deezer account today. If Deezer reopens its API, publishing will be added.
**Getting a Deezer draft into your Deezer (or Apple Music, YouTube Music) account** takes one paste:
1. Ask for the export: "export this draft as links" (`export_draft`, `format: "links"`; `"text"` gives "Artist - Title" lines instead).
2. Open [TuneMyMusic](https://www.tunemymusic.com) or [Soundiiz](https://soundiiz.com), choose *import from text* (TuneMyMusic: *Let's start → Upload text*; Soundiiz: *Import playlist → From text*), and paste the list.
3. Pick Deezer as the destination and confirm. The tool logs into your Deezer account itself; nothing about your account ever passes through Lineupify.
Both tools have free tiers that cover a normal playlist.
### Spotify without Premium: borrow an app
Spotify's Premium rule applies to the person who *owns* the developer app, not to everyone who uses it. An owner can add up to four other people by email under *User Management* in the dashboard (five users per app in total), and those people log in with their own accounts, free ones included. So if someone you know has Premium:
1. They create the app as in step 1 above and add your Spotify account email under *User Management*.
2. They give you the Client ID (it is not a secret; the secret is never used).
3. You run `npx -y lineupify-mcp init` with that Client ID and log in as yourself. Your tokens stay on your machine; the owner never sees your account.
Two limits: an app serves five people at most at the time of writing, and the owner's daily API quota is shared across all of them and all of the owner's apps. Handing the Client ID to someone who is not on the User Management list does nothing; their login fails with a 403. Fine for friends and family; not a way to serve strangers, which Spotify's terms also rule out. Details: [docs/setup-spotify.md](docs/setup-spotify.md#using-a-friends-app-no-premium).
## What a conversation looks like
### A festival
> **You:** Make me a playlist for this lineup.
>
> ```
> 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
> ```
The assistant calls `parse_lineup`, which returns nine artists with tiers and drops the dates and ticket line, then `create_draft` with `lineup: "Sunfall 2026"`. The draft comes back within about 15 seconds; a big lineup keeps building in the background:
```
Draft d_7k2mq "Sunfall 2026 · Lineupify" rev 1 status ready 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.
```
> **You:** Show me the tracks.
```
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
…
```
> **You:** Drop the Four Tet track "Baby", forget DJ Fluffhead, and publish it.
`edit_draft` removes the track and excludes the artist; `create_playlist` returns the link:
```
Created playlist "Sunfall 2026 · Lineupify" with 26 tracks (1h38m).
URL: https://open.spotify.com/playlist/3cEYpjA9oz9GiPac4AsH4n
```
Later edits go through `edit_draft` followed by `update_playlist`, which replaces the playlist contents in place.
### A mood
> **You:** Rainy Sunday jazz for cooking, about an hour, nothing explicit.
The assistant proposes fitting artists itself, adds a `genre` seed with the same words so the list is not only its own guess, and calls `crWhat people ask about lineupify
What is SHREESHMAN/lineupify?
+
SHREESHMAN/lineupify is mcp servers for the Claude AI ecosystem. MCP server that builds Spotify playlists from festival lineups, moods, genres, similar artists, or blended taste. Runs locally with your own Spotify app. It has 1 GitHub stars and its last recorded update is dated 2026-09-07.
How do I install lineupify?
+
You can install lineupify by cloning the repository (https://github.com/SHREESHMAN/lineupify) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.
Is SHREESHMAN/lineupify safe to use?
+
Our security agent has analyzed SHREESHMAN/lineupify and assigned a Trust Score of 95/100 (tier: Verified). See the full breakdown of passed checks and flags on this page.
Who maintains SHREESHMAN/lineupify?
+
SHREESHMAN/lineupify is maintained by SHREESHMAN. The last recorded GitHub activity is dated 2026-09-07, with 0 open issues.
Are there alternatives to lineupify?
+
Yes. On ClaudeWave you can browse similar mcp servers at /categories/mcp, sorted by popularity or recent activity.
Deploy lineupify to your cloud
Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.
Maintain this repo? Add a badge to your README
Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.
[](https://claudewave.com/repo/shreeshman-lineupify)<a href="https://claudewave.com/repo/shreeshman-lineupify"><img src="https://claudewave.com/api/badge/shreeshman-lineupify" alt="Featured on ClaudeWave: SHREESHMAN/lineupify" width="320" height="64" /></a>More MCP Servers
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
An open-source AI agent that brings the power of Gemini directly into your terminal.
Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface
The fastest path to AI-powered full stack observability, even for lean teams.
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!