Skip to main content
Glama

Create playlist draft

create_draft

Build a draft playlist from artists, genres, moods, or similar songs. Review and edit before publishing to Spotify or exporting as a Deezer list.

Instructions

Build a draft playlist from artists and/or seeds. Works with a Spotify login (publishable) or with provider "deezer" and no account at all (export the list instead of publishing). Artists: a typed list (festival lineup, "these five bands"). Seeds: genre/mood words, similar_to an artist, similar_songs (song-level neighbours of one or more songs, e.g. "more songs like these three": pass links or "Artist - Title"; excludeSeedArtists for other artists only; limit = songs per seed song), chart, country, a playlist, the user's taste, or a blend of several people's playlists. For a free-text request ("rainy Sunday jazz for cooking", "90s hip hop for a run") propose 15-30 fitting artists yourself and pass them as artists, and add a genre seed with the same words so the list is not only your guess. Each artist gets its most popular songs (Deezer/Last.fm ranking, matched to Spotify by ISRC); constraints: tracksPerArtist, maxDurationMin, excludeExplicit, yearRange, bpmRange, skipCovers, excludeTracksFrom. Returns within ~15 s; larger builds continue in the background (status "building") — poll with get_draft waitSeconds: 25. Nothing is written to Spotify until create_playlist. Defaults: headliner 5, sub 3, undercard 2 tracks (flat artists 3), max 250 tracks, interleaved order, private playlist, live/remix versions skipped.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
daysNoKeep only artists tagged with these days
nameNoPlaylist name; default "<lineup> · Lineupify"
orderNointerleave (default, spreads artists), lineup (artist by artist), shuffle, by_day, known_first
seedsNo
lineupNoFestival name and year, or a short theme, used for the playlist name, e.g. "Glastonbury 2026" or "Rainy Sunday jazz"
publicNo
artistsNoRequired unless seeds are given
sourcesNo
bpmRangeNoKeep only tracks whose tempo (Deezer) is in this range, e.g. running { min: 160, max: 180 }
providerNospotify: needs a connected account, can publish. deezer: no account or login at all, every feature except publishing (export the list instead). Default: spotify when connected, otherwise deezer
maxTracksNo
strictBpmNoWith bpmRange: also drop tracks with no known tempo
yearRangeNoKeep only tracks released in this range, e.g. { from: 1990, to: 1999 }
skipCoversNoDrop a song when a more popular artist has the original (e.g. a Motörhead cover of Enter Sandman). Off by default; costs one Deezer lookup per track
strictYearNoWith yearRange: also drop tracks whose year is unknown or comes from a remaster/compilation
descriptionNo
allowVersionsNoAllow live/remix/edit versions
discoveryOnlyNoSkip artists already in the user's top or followed artists
tracksPerTierNo
excludeArtistsNo
maxDurationMinNoTotal length cap, e.g. 45 for a commute
excludeExplicitNo
tracksPerArtistNoSame count for every artist; overrides tracksPerTier. Use 1 for "one song per artist"
excludeSeedSongsNosimilar_songs: leave the seed songs themselves out (default false: they stay in as anchors)
stopIfUnresolvedNoOff by default. When true, create_playlist refuses until every artist is found or excluded, so the user can fix names first
excludeTracksFromNoNever pick tracks that are in these playlists / "library" (e.g. "songs I do not already have")
excludeSeedArtistsNosimilar_songs: leave out every song by the seed songs' artists, for "other artists only" (default false)

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.6.0

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover mutation and open-world behavior, but the description adds the operational detail they cannot: ~15s synchronous return with background continuation and a "building" status, the polling cadence, the guarantee that nothing is published until create_playlist, and the full defaults block (5/3/2 tiers, 250 max tracks, interleave, private). It even flags a cost (skipCovers = one Deezer lookup per track).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and usage, and almost every clause carries information an agent needs. The cost is that it is one dense ~250-word block mixing seed types, free-text handling, constraints, async behavior, and defaults, which makes targeted re-reading harder than a lightly segmented version.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 27-param, no-required, nested-schema tool with no output schema, the description covers the workflow, async/polling contract, publishing gate, and defaults that an agent needs to invoke it correctly. Remaining gaps are minor (error/unresolved-artist handling is delegated to stopIfUnresolved in the schema) and acceptable given schema coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

At 70% schema coverage the description meaningfully supplements the schema by enumerating the constraint knobs (tracksPerArtist, maxDurationMin, excludeExplicit, yearRange, bpmRange, skipCovers, excludeTracksFrom) and explaining seed semantics that the schema only hints at (limit as songs-per-seed-song, excludeSeedArtists for "other artists only"). It does not touch several params (days, order, sources, discoveryOnly, strictBpm/strictYear, stopIfUnresolved), which the schema largely documents itself.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ("Build a draft playlist from artists and/or seeds") and immediately scopes it against siblings: nothing is written until create_playlist, and long builds are polled via get_draft. An agent can distinguish this from create_playlist, edit_draft, and get_draft without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use branches: Spotify login vs provider "deezer" with no account, and a concrete procedure for free-text requests (propose 15-30 artists yourself and add a matching genre seed). It also names the follow-up tool and condition (poll get_draft waitSeconds: 25 when status is "building").

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.