Skip to main content
Glama

playlist_dedupe_advanced

Remove duplicate songs from Spotify playlists by exact URI or track name, choosing which copy to keep, with a dry-run preview before applying.

Instructions

Remove duplicate items from a playlist, matching by URI (exact copies) OR by track name (catches re-adds of the same song from different albums/singles when combined with dedupe by uri). Choose keep-first or keep-last. Written as one atomic replace. Quota: 🟢 2 GETs + 1 PUT.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
keepNoWhich occurrence to keep. Default firstfirst
dry_runNoPreview only: perform the read side and return a PLAN without changing anything. Pass false to commit. Default true
match_byNoDuplicate key: exact URI, or case-insensitive track name (catches same song from different releases). Default uriuri
max_resultsNoMax items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50)
playlist_idYesPlaylist to dedupe, as ID or spotify:playlist: URI
response_formatNo'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API objectconcise
Behavior4/5

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

With no annotations provided, the description carries the full behavioral burden, and it delivers meaningfully: 'Written as one atomic replace' discloses the write strategy (a single PUT rather than incremental removals), and 'Quota: 🟢 2 GETs + 1 PUT' discloses cost and implicitly confirms a mutation occurs. The mutating nature is also clear from 'Remove duplicate items'. It stops short of a 5 because it doesn't mention reversibility or the dry_run-by-default safety posture (that detail lives only in the schema).

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?

Three sentences, with the core action front-loaded and the quota as a compact closing one-liner — every sentence earns its place. The only structural flaw is the middle sentence's convoluted 'when combined with dedupe by uri' clause, which is both redundant and potentially confing given match_by is a single-value enum.

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

Completeness3/5

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

For a mutating 6-param tool with no annotations and no output schema, the description covers the essentials: action, both matching modes, keep choice, atomicity, and quota. However, it omits sibling routing (when to choose this over dedupe_playlist_apply or find_duplicates_in_playlist) and never states what is returned on commit — the schema only clarifies the dry_run PLAN path. A complete description for this complexity level would address both.

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

Parameters3/5

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

Schema description coverage is 100%: every parameter (keep, dry_run, match_by, max_results, playlist_id, response_format) already has a meaningful schema description, including the preview/commit semantics of dry_run and the enum choices. Per baseline, the description need not repeat those, and it adds only marginal value — a rationale for name matching and the quota echo. The 'when combined with dedupe by uri' wording even slightly conflicts with the exclusive uri|name enum.

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

Purpose4/5

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

The description states a specific verb+resource: 'Remove duplicate items from a playlist', and goes beyond a generic statement by specifying the two matching modes (URI exact-copies vs track name) and the keep-first/keep-last choice. It is clearly distinct from the vast majority of playlist tools, but it does not name or differentiate itself from the closely overlapping siblings dedupe_playlist_apply, find_duplicates_in_playlist, or remove_duplicate_playlist_items, so it misses a 5.

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

Usage Guidelines3/5

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

The description gives useful within-tool context: it explains when name-based matching is valuable ('catchs re-adds of the same song from different albums/singles') and that the user can choose keep-first/last. However, it provides no explicit when-to-use-this-over-alternatives guidance — there are at least four overlapping dedupe siblings in the toolset — and the phrase 'when combined with dedupe by uri' muddlcs the match_by uri|name enum instead of clarifying the choice. Implied usage, no exclusions or alternatives.

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

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/NovaLux12/spotify-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server