Skip to main content
Glama

mcp-spotify

MCP server for Spotify, focused on playlist building and music discovery. 19 granular tools designed for use with Claude and other LLM agents.

Prerequisites

  • Python 3.14+

  • uv

  • A Spotify Premium account (required by Spotify for Web API access)

  • A Spotify Developer application

Related MCP server: spotify-mcp

Setup

1. Create a Spotify Developer App

  1. Go to the Spotify Developer Dashboard

  2. Click Create App

  3. Under Which API/SDKs are you planning to use?, select Web API

  4. Set the Redirect URI to http://127.0.0.1:8888/callback

  5. Note your Client ID and Client Secret

2. Install

cd mcp-spotify
uv sync

3. Configure Environment Variables

Set these before running the server:

export SPOTIFY_CLIENT_ID="your_client_id"
export SPOTIFY_CLIENT_SECRET="your_client_secret"
export SPOTIFY_REDIRECT_URI="http://127.0.0.1:8888/callback"

4. First Run (Authentication)

uv run mcp-spotify

On first run, a browser window opens for Spotify OAuth authorization. After approving, the token is cached at ~/.spotify_mcp_cache and subsequent runs authenticate automatically.

Claude Desktop / Claude Code Configuration

Add to your MCP server config. If installed from PyPI:

{
  "mcpServers": {
    "spotify": {
      "command": "uvx",
      "args": ["mcp-spotify"],
      "env": {
        "SPOTIFY_CLIENT_ID": "your_client_id",
        "SPOTIFY_CLIENT_SECRET": "your_client_secret",
        "SPOTIFY_REDIRECT_URI": "http://127.0.0.1:8888/callback"
      }
    }
  }
}

Or if running from a local clone:

{
  "mcpServers": {
    "spotify": {
      "command": "uv",
      "args": ["--directory", "/path/to/mcp-spotify", "run", "mcp-spotify"],
      "env": {
        "SPOTIFY_CLIENT_ID": "your_client_id",
        "SPOTIFY_CLIENT_SECRET": "your_client_secret",
        "SPOTIFY_REDIRECT_URI": "http://127.0.0.1:8888/callback"
      }
    }
  }
}

Tools

Discovery

Tool

Parameters

Description

search_tracks

query, limit=20

Search for tracks. Supports genre:, year:, artist: filters.

search_artists

query, limit=20

Search for artists. Returns names, genres, and IDs.

search_albums

query, limit=20

Search for albums. Returns names, artists, release dates, and IDs.

get_album_tracks

album_id, limit=50

List all tracks on an album.

Library

Tool

Parameters

Description

get_saved_tracks

limit=20, offset=0

Your liked/saved tracks, most recent first.

Playlists

Tool

Parameters

Description

create_playlist

name, description="", public=True

Create a new playlist.

add_tracks_to_playlist

playlist_id, track_ids

Add tracks to a playlist (max 100).

remove_tracks_from_playlist

playlist_id, track_ids

Remove tracks from a playlist.

get_playlist_tracks

playlist_id, limit=50, offset=0

List tracks in a playlist.

replace_playlist_tracks

playlist_id, track_ids

Replace all tracks in a playlist (for reordering).

follow_playlist

playlist_id

Follow (save) a playlist to your library.

unfollow_playlist

playlist_id

Unfollow (remove/delete) a playlist from your library.

get_my_playlists

limit=50

List your playlists.

Personalization

Tool

Parameters

Description

get_my_top_tracks

time_range="medium_term", limit=20

Your most-played tracks.

get_my_top_artists

time_range="medium_term", limit=20

Your most-played artists.

time_range options: short_term (~4 weeks), medium_term (~6 months), long_term (all time).

Playback

Tool

Parameters

Description

play_track

track_uri

Play a track (requires active Spotify device).

pause_playback

(none)

Pause playback.

add_to_queue

track_uri

Add a track to the playback queue.

get_now_playing

(none)

Get current track info.

OAuth Scopes

This server requests the minimum scopes needed:

  • user-read-playback-state, user-modify-playback-state, user-read-currently-playing -- playback

  • playlist-read-private, playlist-read-collaborative, playlist-modify-public, playlist-modify-private -- playlists

  • user-top-read -- personalization

  • user-library-read -- saved/liked tracks

Spotify Web API Restrictions

Spotify has progressively locked down its Web API since late 2024. This section documents what's affected and what it means for this project.

Removed from the Web API (November 2024)

Spotify removed or restricted these endpoints on November 27, 2024. They are permanently unavailable to new apps and Development Mode apps, regardless of quota:

Endpoint

What It Did

Impact

GET /recommendations

Algorithmic track recommendations based on seed tracks/artists/genres

Was the best tool for playlist building. No replacement exists in the API.

GET /audio-features

Tempo, energy, danceability, valence, etc. for tracks

Cannot filter or sort tracks by musical attributes.

GET /audio-analysis

Detailed audio structure (beats, bars, sections, timbre)

Cannot analyze track structure.

GET /browse/featured-playlists

Spotify's editorial/algorithmic playlist listings

Cannot browse curated playlists.

GET /browse/categories/{id}/playlists

Playlists within a browse category

Cannot discover playlists by category.

Track preview_url field

30-second audio preview URLs

Preview URLs now return null for non-grandfathered apps.

Apps that had Extended Quota Mode approval before November 2024 retained access. New apps cannot get access to these endpoints.

Gated Behind Extended Quota (Effectively Inaccessible)

These endpoints exist but return 403 Forbidden in Development Mode. They require Extended Quota Mode, which as of May 2025 requires:

  • A legally registered business entity (not individuals)

  • 250,000+ monthly active users

  • An active, launched service in key Spotify markets

This makes Extended Quota inaccessible for personal projects, hobby apps, and small tools.

Endpoint

What It Did

GET /artists/{id}/related-artists

Discover similar artists. Returns 403.

GET /artists/{id}/top-tracks

Get an artist's most popular tracks. Returns 403.

February 2026 Development Mode Changes

On February 6, 2026, Spotify overhauled Development Mode itself:

  • Spotify Premium required for app owners (this is now a prerequisite for all Web API access)

  • 1 Client ID per developer

  • Max 5 authorized users per app

  • Search results capped at 10 per request (down from 50) for new apps

  • Several more endpoints restricted (batch-get endpoints, browse categories, new releases, other-user profiles/playlists)

The POST /users/{user_id}/playlists endpoint was also removed in favor of POST /me/playlists (this server already uses the /me variant).

Note: Endpoint restrictions currently apply to newly created apps. Existing Dev Mode apps were temporarily exempted after community backlash, but this may change.

Not Yet Implemented

Potential tools that could be added within current Development Mode access:

Tool

Endpoint

Description

skip_to_next

POST /me/player/next

Skip to the next track in queue.

skip_to_previous

POST /me/player/previous

Skip to the previous track.

get_queue

GET /me/player/queue

View the current playback queue.

set_volume

PUT /me/player/volume

Set playback volume (Premium only).

set_repeat

PUT /me/player/repeat

Set repeat mode (track/context/off).

set_shuffle

PUT /me/player/shuffle

Toggle shuffle on/off.

get_devices

GET /me/player/devices

List available playback devices.

transfer_playback

PUT /me/player

Transfer playback to a different device.

save_tracks

PUT /me/tracks

Save tracks to the user's library.

Will Never Be Usable (for New Apps)

These would have been valuable for this project but are permanently out of reach:

Feature

Why It Matters

Status

Algorithmic recommendations

The single best way to discover new music programmatically

Removed Nov 2024, no replacement

Audio features (tempo, energy, etc.)

Enables filtering tracks by mood, energy, danceability

Removed Nov 2024

Related artists

Core discovery tool for "if you like X, try Y" workflows

Requires Extended Quota (250k MAU)

Artist top tracks

Quick way to sample an artist's most popular work

Requires Extended Quota (250k MAU)

Editorial/category playlists

Discover Spotify-curated playlists by genre or mood

Removed Nov 2024

The practical effect: playlist building relies entirely on search_tracks and the user's own listening history (get_my_top_tracks, get_my_top_artists) for discovery. Claude's own music knowledge fills the gap that the API no longer provides.

Development

uv run mcp-spotify           # Run the server
uv run pytest tests/ -v      # Run tests
uv run ruff check src/       # Lint
uv run ruff format src/      # Format
uv run pyright src/          # Type check

Pre-commit Hooks

This project uses lefthook for pre-commit checks. Install with brew install lefthook (or see other install methods), then:

lefthook install

Available Tools

20 tools
add_to_queueA

Add a track to the end of the playback queue.

Requires an active Spotify device. Accepts a track URI or bare track ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
track_uriYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

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

No annotations provided, so the description must fully disclose behavior. It only says adds to queue and requires active device, but omits details like idempotency, error handling (e.g., if device inactive or track invalid), or whether the response includes queue status. The mutation aspect is implied but not explicitly flagged.

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

Conciseness5/5

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

Two short sentences, no redundant information. Every word serves a purpose, making it highly concise and easy to parse.

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?

Given the tool's simplicity (one parameter, an active device prerequisite) and presence of an output schema, the description covers the essentials. It could mention what happens if no device is active or if the track is already queued, but overall it's sufficient for the use case.

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?

With 0% schema description coverage, the description adds value by stating it accepts 'a track URI or bare track ID.' This clarifies the format beyond the parameter name, but it could be more specific about accepted formats (e.g., 'spotify:track:...' vs. base62 ID).

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?

The description clearly states 'Add a track to the end of the playback queue,' specifying the action and the exact position. It distinguishes from play_track (immediate play) and add_tracks_to_playlist (playlist management) by mentioning 'queue'.

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?

It mentions a prerequisite ('Requires an active Spotify device') and implies usage for queuing. However, it does not explicitly state when to use vs. alternatives like play_track for immediate playback, leaving the agent to infer.

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

add_tracks_to_playlistA

Add tracks to a Spotify playlist.

Accepts a list of track IDs or URIs (max 100 per call). Tracks are appended to the end of the playlist.

ParametersJSON Schema
NameRequiredDescriptionDefault
track_idsYes
playlist_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

Discloses key behaviors: appends tracks to end, accepts IDs or URIs, max 100 per call. With no annotations, this provides good operational context.

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

Conciseness5/5

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

Two direct sentences, no fluff. Purpose and key details front-loaded.

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?

Adequate for a simple add operation with two required parameters and an output schema. Lacks error handling or idempotency info, but sufficient for typical use.

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?

Description clarifies that track_ids can be IDs or URIs, adding meaning beyond the schema (which has 0% description coverage). No further detail on format or constraints for playlist_id.

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?

Clearly states the tool adds tracks to a Spotify playlist, distinguishing it from siblings like remove_tracks_from_playlist and replace_playlist_tracks. The description specifies it accepts track IDs or URIs and appends them.

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?

Implies usage for adding tracks without affecting existing ones (appending), and mentions a volume limit (max 100). However, no explicit guidance on when not to use or alternatives provided.

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

create_playlistB

Create a new Spotify playlist for the current user.

Returns the playlist ID and URI for use with other playlist tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
publicNo
descriptionNo

TDQS

B3.3/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It states that it creates a playlist and returns the ID and URI, which is useful. However, it does not disclose potential side effects (e.g., whether the playlist is immediately accessible), authentication requirements, rate limits, or constraints like name uniqueness.

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

Conciseness5/5

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

Two concise sentences: first states the purpose, second states the return value. No extraneous text. Every sentence earns its place.

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

Completeness2/5

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

For a creation tool with 3 parameters, no output schema, and no annotations, the description is too brief. It does not explain parameter usage, prerequisites (e.g., user authentication), or what the returned ID/URI looks like. The sibling tools include many playlist operations, but this tool's description lacks enough detail to fully understand its role in a workflow.

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

Parameters1/5

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

The input schema has 3 parameters with 0% description coverage, meaning the description does not explain what each parameter does. It mentions 'name' implicitly by saying 'Create a new playlist', but does not describe 'public' or 'description' beyond what the schema's default values indicate. This leaves the agent without semantic guidance.

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?

The description clearly states 'Create a new Spotify playlist for the current user.' It uses a specific verb and resource, and distinguishes from sibling tools like add_tracks_to_playlist, which are about modifying existing playlists.

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 implies that this tool is for creating playlists for the current user, but it does not provide explicit guidance on when to use it versus alternatives (e.g., no mention of prerequisites or cases where creation might fail). Usage is implied but not elaborated.

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

follow_playlistA

Follow (save) a Spotify playlist to your library.

Accepts a playlist ID or URI. Use this to save playlists found via search or shared by others.

ParametersJSON Schema
NameRequiredDescriptionDefault
playlist_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. It mentions accepting 'playlist ID or URI,' adding input flexibility. However, it does not disclose side effects like duplicate handling or required authentication.

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

Conciseness5/5

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

Two sentences, no wasted words, front-loaded with purpose. Every sentence adds value.

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?

Given the tool's simplicity and presence of an output schema, the description is mostly complete. It could mention duplicate behavior but is adequate for a save action.

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?

Schema has one required param (playlist_id, no description). The description adds value: 'Accepts a playlist ID or URI,' clarifying acceptable formats beyond the schema.

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?

The description clearly states the action: 'Follow (save) a Spotify playlist to your library.' It specifies the resource (playlist) and distinguishes from unfollow_playlist and other playlist tools.

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 says 'Use this to save playlists found via search or shared by others,' giving clear usage context. However, it does not mention when not to use it or alternatives.

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

get_album_tracksB

Get all tracks on a Spotify album.

Accepts a Spotify album ID or full URI. Returns track names, artists, and IDs. Useful for adding an entire album to a playlist.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
album_idYes

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations, the description carries full burden. It mentions accepting full URI but fails to explain pagination behavior despite a limit parameter, nor does it disclose auth requirements, rate limits, or error handling.

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

Conciseness5/5

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

Two sentences with no redundancy. The main purpose is front-loaded, and details are concise. Every sentence adds value.

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?

No output schema, so description should explain return structure. It briefly lists returned fields, which is adequate for a simple list. However, missing details on pagination or errors reduce completeness given schema and annotation absence.

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

Parameters2/5

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

Schema description coverage is 0%, so description must compensate. It explains album_id accepts album ID or full URI but does not describe the limit parameter, its default value, or how it affects results. Incomplete for a critical parameter.

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?

The description clearly states the tool retrieves all tracks on a Spotify album, specifying it accepts an album ID or full URI and returns track names, artists, and IDs. This distinguishes it from siblings like get_playlist_tracks and search_tracks.

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 provides one use case (adding an entire album to a playlist) but does not mention when to avoid using it or compare to alternatives like search_albums or get_playlist_tracks. Usage context is implied but not explicit.

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

get_my_playlistsC

List the current user's Spotify playlists.

Returns playlist names, IDs, track counts, and ownership info.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

Without annotations, the description should disclose behavioral traits. It states what is returned (names, IDs, track counts, ownership) but omits pagination behavior, effect of the limit parameter, and whether collaborative playlists are included.

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?

Two sentences, zero fluff. Clearly written, though the return fields could be listed more concisely.

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?

Given the tool's simplicity (one optional parameter, output schema present), the description is minimally adequate. However, it fails to document the parameter or provide behavioral nuance, leaving gaps.

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

Parameters1/5

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

The single parameter 'limit' has no description in the schema (0% coverage) and is not mentioned in the tool description. The description adds no meaning beyond the schema's default value.

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?

The description clearly states 'List the current user's Spotify playlists' with a specific verb and resource. It distinguishes itself from sibling tools like get_saved_tracks (tracks, not playlists) and get_playlist_tracks (tracks of a specific playlist).

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives, no prerequisites or exclusions. The description implies its purpose but lacks explicit context for decision-making.

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

get_my_top_artistsA

Get the current user's top artists on Spotify.

time_range options:

  • "short_term": approximately last 4 weeks

  • "medium_term": approximately last 6 months (default)

  • "long_term": all time

Useful for discovering related artists when building playlists.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
time_rangeNomedium_term

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior2/5

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

No annotations exist, and the description lacks details on behavioral traits such as rate limits, authentication needs, or error handling. It only explains time_range options but does not disclose what happens if the user has no top artists.

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

Conciseness5/5

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

The description is concise with three short sentences, front-loading the purpose and then listing the parameter details. No extraneous information.

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?

Given the output schema exists (not shown), the description is fairly complete: it explains the tool's purpose, the parameter options, and a use case. It could mention the return format but that is covered by the output schema.

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?

The schema coverage is 0%, so the description must compensate. It explains the time_range options and their meanings, but the limit parameter is only mentioned with its default, lacking min/max constraints or behavioral context.

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?

The description clearly states 'Get the current user's top artists on Spotify.' This is a specific verb (Get) and resource (top artists), distinguishing it from siblings like search_artists or get_my_top_tracks.

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

Usage Guidelines4/5

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

The description suggests a use case: 'Useful for discovering related artists when building playlists.' This provides context for when to use the tool, though it does not explicitly exclude other scenarios or contrast with alternatives.

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

get_my_top_tracksA

Get the current user's top tracks on Spotify.

time_range options:

  • "short_term": approximately last 4 weeks

  • "medium_term": approximately last 6 months (default)

  • "long_term": all time

Useful as a seed for building personalized playlists.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
time_rangeNomedium_term

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

No annotations are provided, so the description carries full disclosure burden. It explains the time_range options with approximate durations and implies personalization (current user's top tracks). It does not detail return format, but an output schema exists to fill that gap.

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

Conciseness5/5

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

The description is concise: two short paragraphs and a bullet list. It front-loads the core purpose and provides parameter details efficiently without extraneous text.

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?

Given the presence of an output schema (not shown), the description does not need to explain return values. It covers parameter semantics and a use case, making it sufficient for a simple retrieval tool. It could mention that results are user-specific, but the name implies this.

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?

The input schema has 2 parameters with 0% description coverage. The description adds meaning to 'time_range' by listing valid values and their meanings, but does not add information for 'limit' beyond the schema's default.

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?

The description clearly states the tool's function: 'Get the current user's top tracks on Spotify.' It distinguishes itself from siblings like 'get_my_top_artists' by specifying 'tracks' and from search tools by emphasizing 'top tracks' based on user listening history.

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

Usage Guidelines4/5

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

The description explicitly mentions a use case: 'Useful as a seed for building personalized playlists.' However, it does not provide explicit when-not-to-use guidance or compare with alternatives like 'get_saved_tracks' or 'get_my_top_artists'.

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

get_now_playingA

Get information about the currently playing track on Spotify.

Returns track name, artist, album, progress, and playback state. Returns {"is_playing": False} if nothing is currently playing.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. Describes read operation and edge case. Lacks disclosure of authorization needs, rate limits, or whether an active device is required. Acceptable but not comprehensive.

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

Conciseness5/5

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

Three sentences: purpose, return fields, edge case. No fluff, front-loaded with key info. Every sentence earns its place.

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?

Given no output schema, description explains return values and edge case. Could detail data types or nested structure (e.g., artist object) but adequate for simple read. Slight gap in structure detail.

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?

Schema has zero parameters (100% coverage trivial). Description adds value by describing return structure including the 'is_playing': False case. Baseline 3, plus extra detail gives 4.

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?

Clear verb+resource: 'Get information about the currently playing track'. Distinguishes from sibling tools like search_tracks (searching) and play_track (control). Lists specific returned fields (track name, artist, album, progress, playback state) and handles the edge case of nothing playing.

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?

Implied usage: use to check current playback. No explicit guidance on when not to use or alternatives. Siblings like play_track and pause_playback imply this is a read-only status check, but not stated.

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

get_playlist_tracksA

Get the tracks in a Spotify playlist.

Supports pagination via limit (max 100) and offset. Returns track names, artists, IDs, and total count.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
playlist_idYes

TDQS

A4.1/5.0
Behavior3/5

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

Describes return values (track names, artists, IDs, total count) but no annotations exist. Missing details on authentication needed, rate limits, or that it's a read-only operation.

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

Conciseness5/5

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

Four sentences, zero wasted words. Essential information front-loaded.

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?

With 3 parameters and no output schema, it covers core functionality (pagination, returned fields). Minor missing details: exact return format or error handling, but adequate for basic use.

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

Parameters5/5

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

Schema coverage is 0%; description compensates fully by explaining limit (max 100) and offset for pagination, and clarifies playlist_id is required. Adds meaning beyond the schema.

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?

Clearly states 'Get the tracks in a Spotify playlist' – a specific verb and resource. Distinguishes from sibling tools like get_album_tracks, get_saved_tracks, etc.

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?

Mentions pagination via limit and offset, but no explicit when-to-use vs alternatives or when-not-to-use. Does not compare to search or retrieval siblings.

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

get_saved_tracksA

Get the current user's saved (liked) tracks.

Returns tracks from the user's library, sorted by most recently saved. Supports pagination via limit (max 50) and offset. A rich signal for playlist building since liked songs reflect explicit user preference.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description bears full transparency burden. It discloses that the tool returns tracks sorted by most recently saved and supports pagination with a max limit of 50. However, it does not describe the return structure of tracks (e.g., fields) or mention authentication requirements, which are important for a read operation.

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

Conciseness5/5

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

Three sentences, each earning its place. First sentence states purpose, second adds sorting and pagination details, third provides use-case context. No redundancy or fluff.

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 simple list tool with 2 parameters and no output schema, the description covers purpose, sorting, and pagination. It could be enhanced by noting authentication requirements or common error conditions, and by contrasting with sibling tools like search_tracks.

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?

Schema description coverage is 0%, so the description must compensate. It explains that 'limit' has a max of 50 and 'offset' is for pagination, adding meaning beyond the schema's defaults. However, it does not explicitly describe offset's behavior (e.g., starting point) or the default values (20 and 0).

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?

The description clearly states 'Get the current user's saved (liked) tracks' with a specific verb and resource. It distinguishes itself from siblings like search_tracks or get_playlist_tracks by specifying 'saved tracks' and 'user's library'.

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 implies usage for retrieving liked tracks and mentions it is a 'rich signal for playlist building', but does not explicitly state when to use this tool versus alternatives like search_tracks or get_my_playlists. No when-not-to-use or prerequisites are mentioned.

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

get_server_versionA

Return the installed version of the mcp-spotify server.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description should disclose behavioral traits beyond the obvious. It only states the function but does not confirm read-only safety, possible latency, or that it requires no authentication. This is a gap for a server metadata tool.

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

Conciseness5/5

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

The description is a single sentence with no wasted words. It is appropriately sized for a simple tool with no parameters and good front-loading of purpose.

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?

Given no parameters and presence of an output schema, the description is fairly complete. It states what the tool returns. However, a mention of the version format (e.g., semantic versioning) would enhance completeness.

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?

There are no parameters, and the schema coverage is 100%. The description does not need to add parameter info. It implicitly conveys that no arguments are needed. Baseline for 0 parameters is considered as 4.

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 clearly states it returns the installed version of the mcp-spotify server, distinguishing it from sibling tools that operate on Spotify content. However, it could be more specific about the format or location of the version.

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

Usage Guidelines4/5

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

The context is clear: use this tool when you need the server version. No alternatives exist among siblings. No explicit exclusions are necessary, but a brief note on when not to use (e.g., for Spotify data) would improve guidance.

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

pause_playbackA

Pause the current Spotify playback.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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

No annotations provided, so description carries full burden. It only states the action but does not disclose what happens if no playback is active, whether state persists, or any side effects. Minimal behavior disclosure.

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

Conciseness5/5

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

Single sentence, no redundant information, perfectly concise and front-loaded.

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 simple pause action with output schema, description is adequate but could mention preconditions like 'requires active device and playing state' to improve completeness.

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?

No parameters in schema (100% coverage), so baseline 4 applies. Description adds no further semantics but is not needed for 0-param tool.

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?

Description clearly states the verb 'Pause' and resource 'current Spotify playback', making the action unmistakable. It effectively distinguishes from sibling play_track which is for resuming.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like play_track. No mention of prerequisites (e.g., requires active playback). Lacks any usage context.

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

play_trackA

Start playing a track on Spotify.

Requires an active Spotify device (open Spotify on any device first). Accepts a Spotify track URI (spotify:track:) or bare track ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
track_uriYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the burden. It discloses the need for an active device, but does not explain behavior on failure (e.g., no device, invalid URI) or whether playback resumes from the beginning.

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

Conciseness5/5

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

Two sentences, front-loaded with purpose, no redundant words. Every sentence adds necessary information.

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?

Given the simple input (one parameter) and existence of an output schema, the description covers the prerequisite and parameter format. It could mention typical output or error conditions, but is largely sufficient.

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

Parameters5/5

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

The description explains the accepted format for track_uri (spotify:track:<id> or bare ID), adding significant value beyond the schema's simple string type, especially given 0% schema description coverage.

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?

The description clearly states the tool's verb ('Start playing') and resource ('a track on Spotify'), distinguishing it from siblings like pause_playback and add_to_queue.

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 mentions a key prerequisite ('requires an active Spotify device'), but does not explicitly state when not to use this tool or compare it to alternatives like resume_playback.

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

remove_tracks_from_playlistA

Remove tracks from a Spotify playlist.

Removes all occurrences of each track. Accepts track IDs or URIs (max 100 per call).

ParametersJSON Schema
NameRequiredDescriptionDefault
track_idsYes
playlist_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

No annotations provided, so description must cover behavioral traits. It mentions 'removes all occurrences' and a limit of 100 tracks, but omits side effects, response details, or permission requirements.

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

Conciseness5/5

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

Two concise sentences with no fluff. The key information is front-loaded: action, resource, and constraints.

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 simple removal tool with two parameters and an output schema, the description covers the essentials. Minor gaps: no mention of ownership or whether the operation is irreversible.

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 coverage is 0%, so description must add meaning. It explains that 'track_ids' accept IDs or URIs (max 100) and implies 'playlist_id' is required. However, it doesn't detail format or validation rules.

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?

The description clearly states the action 'remove tracks' and the resource 'Spotify playlist', specifying that all occurrences are removed and providing input limits. It distinguishes from sibling tools like 'add_tracks_to_playlist' or 'replace_playlist_tracks'.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives (e.g., 'replace_playlist_tracks'). It doesn't mention prerequisites like ownership or permissions.

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

replace_playlist_tracksA

Replace all tracks in a playlist with the given list, in order.

This is useful for reordering a playlist. First get the current tracks with get_playlist_tracks, reorder the IDs as desired, then pass the full ordered list here. The playlist will contain exactly these tracks in exactly this order.

Accepts track IDs or URIs. No limit on total tracks (batched internally).

ParametersJSON Schema
NameRequiredDescriptionDefault
track_idsYes
playlist_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

Discloses key behaviors: replaces all tracks (destructive), accepts IDs or URIs, no total track limit (batched internally). With no annotations, this covers important traits. Lacks mention of permissions or reversibility.

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

Conciseness5/5

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

Concise three-paragraph structure: first sentence states purpose, second gives usage pattern, third adds details. No wasted words.

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?

Covers purpose, usage, and behavioral details adequately. With an output schema present, return values need no explanation. Missing error handling or prerequisites, but sufficient for a simple mutation.

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?

Although schema coverage is 0%, description adds meaning: track_ids accepts 'track IDs or URIs' and no limit. Playlist_id is self-explanatory. Provides context beyond the schema.

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?

Description clearly states 'Replace all tracks in a playlist with the given list, in order,' specifying the verb and resource. It distinguishes from siblings like add_tracks_to_playlist and remove_tracks_from_playlist by indicating this is a full replacement.

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

Usage Guidelines4/5

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

Explicitly describes a usage pattern: first use get_playlist_tracks, reorder, then pass here. Implies when not to use (e.g., for adding a few tracks). However, no explicit mention of alternative tools like add_tracks_to_playlist.

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

search_albumsB

Search for albums on Spotify.

Returns album names, artists, release dates, and IDs. Use get_album_tracks to list the tracks on a found album.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior2/5

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

No annotations are provided, so the description must carry full behavioral burden. It only states it is a search and returns fields, but omits details like authentication requirements, rate limits, whether results are localized, or if it supports pagination (though limit param exists).

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?

The description is concise with two sentences, front-loading the purpose. It is well-structured with a clear statement and a useful follow-up hint, though it could be slightly more efficient.

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

Completeness2/5

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

Given no annotations, 2 parameters with zero description coverage, and an output schema present but not described, the description leaves significant gaps. It fails to compensate for the missing parameter explanations and operational context.

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

Parameters1/5

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

Parameter coverage is 0% as the description does not explain the 'query' or 'limit' parameters. The schema defines them but the description adds no semantic meaning, leaving the agent to guess formats or constraints.

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?

The description clearly states the tool searches for albums on Spotify and lists the returned fields (names, artists, release dates, IDs). It distinguishes itself from sibling tools like search_tracks and search_artists by focusing on albums.

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 mentions using get_album_tracks to list tracks on a found album, providing a follow-up action. However, it lacks explicit conditions on when to use this tool versus alternatives like search_tracks or search_artists, and no when-not scenarios are given.

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

search_artistsA

Search for artists on Spotify.

Supports the same query syntax as search_tracks. Returns artist names, genres, and IDs. Useful for finding an artist ID to explore their catalog.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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

No annotations provided; description discloses what is returned but does not discuss side effects, rate limits, or read-only nature. Adequate but could be more explicit about safety.

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

Conciseness5/5

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

Three short sentences, front-loaded with purpose, then cross-reference and use case. Every sentence adds value with no redundancy.

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?

Covers purpose, return fields, and a use case. With existing output schema, agent can understand output. Could mention limit behavior, but not critical for a search tool.

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

Parameters2/5

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

Schema has 0% description coverage; description only adds meaning for 'query' by referencing search_tracks syntax. Limit parameter is left unexplained, and no format details are given.

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?

Description clearly states 'Search for artists on Spotify' and specifies returns (names, genres, IDs). Distinguishes from sibling tools by referencing search_tracks and focusing on artists.

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

Usage Guidelines4/5

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

Provides comparative guidance: 'Supports the same query syntax as search_tracks' and identifies use case for finding artist IDs. Lacks explicit when-not-to-use, but sufficient for agent to infer.

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

search_tracksA

Search for tracks on Spotify.

Supports Spotify query syntax for filtering:

  • genre: "genre:rock"

  • year: "year:2020" or "year:2018-2022"

  • artist: "artist:radiohead"

  • combined: "genre:indie year:2020-2024"

Returns track names, artists, albums, and IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It describes a search operation (read-only) but does not disclose rate limits, authentication needs, or response size. The basic behavior is implied, but not fully transparent.

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

Conciseness5/5

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

The description is concise, front-loaded with purpose, and includes well-structured examples. Every sentence adds necessary information without redundancy.

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?

With an output schema present and simple search functionality, the description covers query syntax and return fields. It lacks pagination details but is generally complete for a search tool.

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?

The description adds value by explaining the query syntax, which is not detailed in the schema (0% coverage). However, it does not describe the 'limit' parameter's effect or constraints, leaving a gap.

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?

The description clearly states 'Search for tracks on Spotify.' This specific verb-resource pair distinguishes it from sibling tools like search_artists and search_albums.

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

Usage Guidelines4/5

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

The description explains the query syntax and gives examples, implying when to use it. It lacks explicit exclusions or alternative tool references, but in context with siblings, usage is clear.

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

unfollow_playlistA

Unfollow (remove) a Spotify playlist from your library.

For playlists you own, this is the only way to 'delete' them -- Spotify has no true delete. The playlist will no longer appear in your library or profile.

ParametersJSON Schema
NameRequiredDescriptionDefault
playlist_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description discloses that unfollowing removes the playlist from the user's library and profile, and for owned playlists it is equivalent to deletion. This is transparent about the primary behavior, though additional details about reversibility or permissions are omitted.

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

Conciseness5/5

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

The description is concise: two sentences directly stating the purpose and a key behavioral note. No unnecessary words or redundancy.

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?

The description explains input (playlist ID implied) and the effect (removal from library/profile). Since an output schema exists, the lack of return value details is acceptable. The explanation is sufficient for a simple mutation tool.

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?

The schema has 0% description coverage for the required parameter playlist_id. The description does not explicitly describe the parameter, but the verb 'unfollow a playlist' implies the ID is needed. Given only one parameter, the clarity is adequate but could be improved by explicitly stating the parameter role.

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?

The description clearly states the action: 'Unfollow (remove) a Spotify playlist from your library.' It further explains that for owned playlists, this acts as the only way to delete them, differentiating it from operations like removing tracks.

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

Usage Guidelines4/5

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

The description provides context on when to use the tool (to remove a playlist, especially to delete owned ones). It implicitly differentiates from sibling tools like remove_tracks_from_playlist, but does not explicitly list alternative tools or when not to use.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 20 tool updatesv0.2.0
    • First observedadd_to_queue
    • First observedadd_tracks_to_playlist
    • First observedcreate_playlist
    • First observedfollow_playlist
    • First observedget_album_tracks
    • First observedget_my_playlists
    • First observedget_my_top_artists
    • First observedget_my_top_tracks
    • First observedget_now_playing
    • First observedget_playlist_tracks
    • First observedget_saved_tracks
    • First observedget_server_version
    • First observedpause_playback
    • First observedplay_track
    • First observedremove_tracks_from_playlist
    • First observedreplace_playlist_tracks
    • First observedsearch_albums
    • First observedsearch_artists
    • First observedsearch_tracks
    • First observedunfollow_playlist

TDQS

A3.7/5.0
Disambiguation5/5

Each tool targets a distinct action or resource. Search tools for tracks, artists, and albums are clearly separated. Playlist operations are split into create, add, remove, replace, follow, unfollow, and list/get tracks. Playback controls are distinct. There is no overlap or ambiguity.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using lowercase with underscores. Verbs like search, get, create, add, remove, replace, follow, unfollow, play, pause are used predictably. No mixing of styles.

Tool Count4/5

20 tools is slightly above the typical well-scoped range (3-15), but for a comprehensive Spotify client covering search, playlist management, user library, and playback control, each tool serves a clear purpose. The count is reasonable for the domain.

Completeness4/5

The tool set covers major Spotify workflows: search, playlist CRUD (create, add, remove, replace, follow, unfollow), user's saved tracks, top tracks/artists, and basic playback control (play, pause, queue, now playing). Minor gaps include lack of volume control, skip/previous, and playlist editing, but core functionality is present.

Maintenance

ActivitySlowing
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    An MCP server for Spotify control and synchronized lyrics retrieval that enables playback management, queue navigation, and music search capabilities. It also features perception tools for real-time track analysis, including BPM, key detection, and timestamped lyrics.
    116
    3
    Apache 2.0
  • A
    license
    B
    quality
    C
    maintenance
    MCP server for the Spotify Web API — gives Claude and other AI assistants tools to search music, control playback, manage playlists, library, and podcasts.
    59
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    A FastMCP server that exposes Spotify's catalog and user context as tools for Claude, enabling track search, audio features, artist discography, recommendations, currently playing, and playlist creation.
    -

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/obrien-matthew/mcp-spotify'

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