Skip to main content
Glama
ElBeldu

Spotify MCP Server

by ElBeldu

A lightweight Model Context Protocol (MCP) server that enables AI assistants like Cursor & Claude to control Spotify playback and manage playlists.

Example Interactions

  • "Play Elvis's first song"

  • "Create a Taylor Swift / Slipknot fusion playlist"

  • "Copy all the techno tracks from my workout playlist to my work playlist"

  • "Turn the volume down a bit"

Related MCP server: Spotify MCP Server

Tools

Read Operations

  1. searchSpotify

    • Description: Search for tracks, albums, artists, or playlists on Spotify

    • Parameters:

      • query (string): The search term

      • type (string): Type of item to search for (track, album, artist, playlist)

      • limit (number, optional): Maximum number of results to return (1-10, default: 10)

      • offset (number, optional): Index of the first result to return (default: 0)

    • Returns: List of matching items with their IDs, names, and additional details

    • Example: searchSpotify("bohemian rhapsody", "track", 10)

  2. getNowPlaying

    • Description: Get information about the currently playing track on Spotify, including device and volume info

    • Parameters: None

    • Returns: Object containing track name, artist, album, playback progress, duration, playback state, device info, volume, and shuffle/repeat status

    • Example: getNowPlaying()

  3. getMyPlaylists

    • Description: Get a list of the current user's playlists on Spotify

    • Parameters:

      • limit (number, optional): Maximum number of playlists to return (default: 20)

      • offset (number, optional): Index of the first playlist to return (default: 0)

    • Returns: Array of playlists with their IDs, names, track counts, and public status

    • Example: getMyPlaylists(10, 0)

  4. getPlaylistTracks

    • Description: Get a list of tracks in a specific Spotify playlist

    • Parameters:

      • playlistId (string): The Spotify ID of the playlist

      • limit (number, optional): Maximum number of tracks to return (default: 100)

      • offset (number, optional): Index of the first track to return (default: 0)

    • Returns: Array of tracks with their IDs, names, artists, album, duration, and added date

    • Example: getPlaylistTracks("37i9dQZEVXcJZyENOWUFo7")

  5. getRecentlyPlayed

    • Description: Retrieves a list of recently played tracks from Spotify.

    • Parameters:

      • limit (number, optional): A number specifying the maximum number of tracks to return.

    • Returns: If tracks are found it returns a formatted list of recently played tracks else a message stating: "You don't have any recently played tracks on Spotify".

    • Example: getRecentlyPlayed({ limit: 10 })

  6. getUsersSavedTracks

    • Description: Get a list of tracks saved in the user's "Liked Songs" library

    • Parameters:

      • limit (number, optional): Maximum number of tracks to return (1-50, default: 50)

      • offset (number, optional): Offset for pagination (0-based index, default: 0)

    • Returns: Formatted list of saved tracks with track names, artists, duration, track IDs, and when they were added to Liked Songs. Shows pagination info (e.g., "1-20 of 150").

    • Example: getUsersSavedTracks({ limit: 20, offset: 0 })

  7. getQueue

    • Description: Get the currently playing track and upcoming items in the Spotify queue

    • Parameters:

      • limit (number, optional): Maximum number of upcoming items to show (1-50, default: 10)

    • Returns: Currently playing track and list of upcoming tracks in the queue

    • Example: getQueue({ limit: 20 })

  8. getAvailableDevices

    • Description: Get information about the user's available Spotify Connect devices

    • Parameters: None

    • Returns: List of available devices with name, type, active status, volume, and device ID

    • Example: getAvailableDevices()

  9. removeUsersSavedTracks

    • Description: Remove one or more tracks from the user's "Liked Songs" library (max 40 per request)

    • Parameters:

      • trackIds (array): Array of Spotify track IDs to remove (max 40)

    • Returns: Success confirmation message

    • Example: removeUsersSavedTracks({ trackIds: ["4iV5W9uYEdYUVa79Axb7Rh", "1301WleyT98MSxVHPZCA6M"] })

Play / Create Operations

  1. playMusic

    • Description: Start playing a track, album, artist, or playlist on Spotify

    • Parameters:

      • uri (string, optional): Spotify URI of the item to play (overrides type and id)

      • type (string, optional): Type of item to play (track, album, artist, playlist)

      • id (string, optional): Spotify ID of the item to play

      • deviceId (string, optional): ID of the device to play on

    • Returns: Success status

    • Example: playMusic({ uri: "spotify:track:6rqhFgbbKwnb9MLmUQDhG6" })

    • Alternative: playMusic({ type: "track", id: "6rqhFgbbKwnb9MLmUQDhG6" })

  2. pausePlayback

    • Description: Pause the currently playing track on Spotify

    • Parameters:

      • deviceId (string, optional): ID of the device to pause

    • Returns: Success status

    • Example: pausePlayback()

  3. resumePlayback

    • Description: Resume Spotify playback on the active device

    • Parameters:

      • deviceId (string, optional): ID of the device to resume playback on

    • Returns: Success status

    • Example: resumePlayback()

  4. skipToNext

    • Description: Skip to the next track in the current playback queue

    • Parameters:

      • deviceId (string, optional): ID of the device

    • Returns: Success status

    • Example: skipToNext()

  5. skipToPrevious

    • Description: Skip to the previous track in the current playback queue

    • Parameters:

      • deviceId (string, optional): ID of the device

    • Returns: Success status

    • Example: skipToPrevious()

  6. createPlaylist

    • Description: Create a new playlist on Spotify

    • Parameters:

      • name (string): Name for the new playlist

      • description (string, optional): Description for the playlist

      • public (boolean, optional): Whether the playlist should be public (default: false)

    • Returns: Object with the new playlist's ID and URL

    • Example: createPlaylist({ name: "Workout Mix", description: "Songs to get pumped up", public: false })

  7. addTracksToPlaylist

    • Description: Add tracks to an existing Spotify playlist

    • Parameters:

      • playlistId (string): ID of the playlist

      • trackUris (array): Array of track URIs or IDs to add

      • position (number, optional): Position to insert tracks

    • Returns: Success status and snapshot ID

    • Example: addTracksToPlaylist({ playlistId: "3cEYpjA9oz9GiPac4AsH4n", trackUris: ["spotify:track:4iV5W9uYEdYUVa79Axb7Rh"] })

  8. addToQueue

    • Description: Adds a track, album, artist or playlist to the current playback queue

    • Parameters:

      • uri (string, optional): Spotify URI of the item to add to queue (overrides type and id)

      • type (string, optional): Type of item to queue (track, album, artist, playlist)

      • id (string, optional): Spotify ID of the item to queue

      • deviceId (string, optional): ID of the device to queue on

    • Returns: Success status

    • Example: addToQueue({ uri: "spotify:track:6rqhFgbbKwnb9MLmUQDhG6" })

    • Alternative: addToQueue({ type: "track", id: "6rqhFgbbKwnb9MLmUQDhG6" })

  9. setVolume

    • Description: Set the playback volume to a specific percentage (requires Spotify Premium)

    • Parameters:

      • volumePercent (number): The volume to set (0-100)

      • deviceId (string, optional): ID of the device to set volume on

    • Returns: Success status with the new volume level

    • Example: setVolume({ volumePercent: 50 })

  10. adjustVolume

  • Description: Adjust the playback volume up or down by a relative amount (requires Spotify Premium)

  • Parameters:

    • adjustment (number): The amount to adjust volume by (-100 to 100). Positive values increase volume, negative values decrease it.

    • deviceId (string, optional): ID of the device to adjust volume on

  • Returns: Success status showing the volume change (e.g., "Volume increased from 50% to 60%")

  • Example: adjustVolume({ adjustment: 10 }) (increase by 10%)

  • Example: adjustVolume({ adjustment: -20 }) (decrease by 20%)

Album Operations

  1. getAlbums

    • Description: Get detailed information about one or more albums by their Spotify IDs

    • Parameters:

      • albumIds (string|array): A single album ID or array of album IDs (max 20)

    • Returns: Album details including name, artists, release date, type, total tracks, and ID. For single album returns detailed view, for multiple albums returns summary list.

    • Example: getAlbums("4aawyAB9vmqN3uQ7FjRGTy") or getAlbums(["4aawyAB9vmqN3uQ7FjRGTy", "1DFixLWuPkv3KT3TnV35m3"])

  2. getAlbumTracks

    • Description: Get tracks from a specific album with pagination support

    • Parameters:

      • albumId (string): The Spotify ID of the album

      • limit (number, optional): Maximum number of tracks to return (1-50)

      • offset (number, optional): Offset for pagination (0-based index)

    • Returns: List of tracks from the album with track names, artists, duration, and IDs. Shows pagination info.

    • Example: getAlbumTracks("4aawyAB9vmqN3uQ7FjRGTy", 10, 0)

  3. saveOrRemoveAlbumForUser

    • Description: Save or remove albums from the user's "Your Music" library

    • Parameters:

      • albumIds (array): Array of Spotify album IDs (max 20)

      • action (string): Action to perform: "save" or "remove"

    • Returns: Success status with confirmation message

    • Example: saveOrRemoveAlbumForUser(["4aawyAB9vmqN3uQ7FjRGTy"], "save")

  4. checkUsersSavedAlbums

    • Description: Check if albums are saved in the user's "Your Music" library

    • Parameters:

      • albumIds (array): Array of Spotify album IDs to check (max 20)

    • Returns: Status of each album (saved or not saved)

    • Example: checkUsersSavedAlbums(["4aawyAB9vmqN3uQ7FjRGTy", "1DFixLWuPkv3KT3TnV35m3"])

Playlist Operations

  1. getPlaylist

    • Description: Get details of a specific Spotify playlist including tracks count, description and owner

    • Parameters:

      • playlistId (string): The Spotify ID of the playlist

    • Returns: Playlist name, owner, track count, visibility, description, ID, and URL

    • Example: getPlaylist({ playlistId: "37i9dQZEVXcJZyENOWUFo7" })

  2. updatePlaylist

    • Description: Update the details of a Spotify playlist (name, description, public/private, collaborative)

    • Parameters:

      • playlistId (string): The Spotify ID of the playlist

      • name (string, optional): New name for the playlist

      • description (string, optional): New description for the playlist

      • public (boolean, optional): Whether the playlist should be public

      • collaborative (boolean, optional): Whether the playlist should be collaborative (requires public to be false)

    • Returns: Success confirmation with list of updated fields

    • Example: updatePlaylist({ playlistId: "3cEYpjA9oz9GiPac4AsH4n", name: "New Name", public: true })

  3. removeTracksFromPlaylist

    • Description: Remove one or more tracks from a Spotify playlist (max 100 tracks per request)

    • Parameters:

      • playlistId (string): The Spotify ID of the playlist

      • trackIds (array): Array of Spotify track IDs to remove (max 100)

      • snapshotId (string, optional): The playlist snapshot ID to target a specific version

    • Returns: Success confirmation with the number of tracks removed

    • Example: removeTracksFromPlaylist({ playlistId: "3cEYpjA9oz9GiPac4AsH4n", trackIds: ["4iV5W9uYEdYUVa79Axb7Rh"] })

  4. reorderPlaylistItems

    • Description: Reorder a range of tracks within a Spotify playlist by moving them to a new position

    • Parameters:

      • playlistId (string): The Spotify ID of the playlist

      • rangeStart (number): The position of the first item to move (0-based index)

      • insertBefore (number): The position where the items should be inserted (0-based index)

      • rangeLength (number, optional): Number of consecutive items to move (defaults to 1)

      • snapshotId (string, optional): The playlist snapshot ID to target a specific version

    • Returns: Success confirmation with the move details

    • Example: reorderPlaylistItems({ playlistId: "3cEYpjA9oz9GiPac4AsH4n", rangeStart: 2, insertBefore: 0 })

Setup

Prerequisites

  • Latest Node.js Current release (currently v26.8.1; older release lines are unsupported)

  • A Spotify Premium account

  • A registered Spotify Developer application

Installation

git clone https://github.com/marcelmarais/spotify-mcp-server.git
cd spotify-mcp-server
npm ci
npm run build

Creating a Spotify Developer Application

  1. Go to the Spotify Developer Dashboard

  2. Log in with your Spotify account

  3. Click the "Create an App" button

  4. Fill in the app name and description

  5. Accept the Terms of Service and click "Create"

  6. In your new app's dashboard, you'll see your Client ID

  7. Click "Show Client Secret" to reveal your Client Secret

  8. Click "Edit Settings" and add a Redirect URI (e.g., http://127.0.0.1:8888/callback)

  9. Save your changes

Spotify API Configuration

Create a spotify-config.json file in the project root (you can copy and modify the provided example):

# Copy the example config file
cp spotify-config.example.json spotify-config.json

Then edit the file with your credentials:

{
  "clientId": "your-client-id",
  "clientSecret": "your-client-secret",
  "redirectUri": "http://127.0.0.1:8888/callback"
}

Authentication Process

The Spotify API uses OAuth 2.0 for authentication. Follow these steps to authenticate your application:

  1. Run the authentication script:

npm run auth
  1. The script will generate an authorization URL. Open this URL in your web browser.

  2. You'll be prompted to log in to Spotify and authorize your application.

  3. After authorization, Spotify will redirect you to your specified redirect URI with a code parameter in the URL.

  4. The authentication script will automatically exchange this code for access and refresh tokens.

  5. These tokens will be saved to your spotify-config.json file, which will now look something like:

{
  "clientId": "your-client-id",
  "clientSecret": "your-client-secret",
  "redirectUri": "http://localhost:8888/callback",
  "accessToken": "BQAi9Pn...kKQ",
  "refreshToken": "AQDQcj...7w",
  "expiresAt": 1677889354671
}

Note: The expiresAt field is a Unix timestamp (in milliseconds) indicating when the access token expires.

  1. Automatic Token Refresh: The server will automatically refresh the access token when it expires (typically after 1 hour). The refresh happens transparently using the refreshToken, so you don't need to re-authenticate manually. If the refresh fails, you'll need to run npm run auth again to re-authenticate.

Integrating with Claude Desktop, Cursor, and VsCode Via Cline model extension

To use your MCP server with Claude Desktop, add it to your Claude configuration:

{
  "mcpServers": {
    "spotify": {
      "command": "node",
      "args": ["spotify-mcp-server/build/index.js"]
    }
  }
}

For Cursor, go to the MCP tab in Cursor Settings (command + shift + J). Add a server with this command:

node path/to/spotify-mcp-server/build/index.js

To set up your MCP correctly with Cline ensure you have the following file configuration set cline_mcp_settings.json:

{
  "mcpServers": {
    "spotify": {
      "command": "node",
      "args": ["~/../spotify-mcp-server/build/index.js"],
      "autoApprove": ["getListeningHistory", "getNowPlaying"]
    }
  }
}

You can add additional tools to the auto approval array to run the tools without intervention.

Development

The server uses MCP TypeScript SDK v2 and Zod 4, serving protocol revision 2026-07-28 while retaining compatibility with legacy MCP clients. Only the latest Node.js Current release is supported (minimum v26.8.1). CI follows the latest Current release. Install the locked dependencies with npm ci.

npm run lint
npm run typecheck
npm test

Tests exercise MCP initialization, tool discovery, validation, and Spotify operations using mocked HTTP responses. They do not require Spotify credentials or change your Spotify account.

Available Tools

30 tools
addToQueueB

Adds a track, album, artist or playlist to the playback queue

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoThe Spotify ID of the item to play
uriNoThe Spotify URI to play (overrides type and id)
typeNoThe type of item to play
deviceIdNoThe Spotify device ID to add the track to

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description carries the full disclosure burden yet only restates the operation. It does not mention that Spotify playback control typically requires a Premium account, that deviceId must reference an active device, that writes affect the user's live queue, or what happens if the queue is empty.

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?

A single, front-loaded sentence that names the action and the accepted item types with zero filler.

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 four-parameter mutation tool with no annotations and no output schema, the description is thin: it omits auth/Premium requirements, device-activation constraints, and any expected result, though the schema covers parameter meaning adequately.

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 100%, so all four parameters (id, uri, type, deviceId) are already documented, including the enum and the 'uri overrides type and id' rule. The description's list of item types merely mirrors the enum and adds no new semantics, so the baseline 3 applies.

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?

States a specific verb (adds) and resource (track/album/artist/playlist) with the destination scope made explicit ('the playback queue'). It does not explicitly contrast with the sibling playMusic, so the agent must infer the queue-vs-immediate-playback distinction itself.

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 when-to-use guidance is given. The description never explains the relationship to playMusic (which presumably starts playback immediately) or getQueue, nor does it mention prerequisites such as an active device.

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

addTracksToPlaylistB

Add tracks or podcast episodes to a Spotify playlist. Accepts Spotify track IDs, episode IDs, or full Spotify URIs (e.g. spotify:episode:xxx).

ParametersJSON Schema
NameRequiredDescriptionDefault
positionNoPosition to insert the items (0-based index)
trackIdsYesArray of Spotify IDs or URIs to add. Plain IDs are assumed to be tracks. To add podcast episodes, pass full URIs: spotify:episode:{id}.
playlistIdYesThe Spotify ID of the playlist

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden, but it only states accepted ID/URI formats. It omits that this is a mutating, persistent operation, whether it requires ownership/collaboration rights, the default append behavior, per-request item limits, or whether duplicate tracks are allowed.

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, front-loaded with the action and resource, then the accepted input formats. No filler or redundancy.

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?

Parameters are fully documented in the schema and there is no output schema to explain, so the core is covered. However, for a mutation tool with zero annotations, the description says nothing about permissions, side effects, or limits, leaving behavioral gaps an agent would want closed.

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%, so the baseline is 3. The description restates the ID/URI format already documented in the trackIds schema field and adds a minor example, but contributes no meaning beyond the schema (e.g. how position interacts with the default append).

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 precise verb+resource (add tracks/episodes to a Spotify playlist) and distinguishes itself implicitly from siblings like removeTracksFromPlaylist and reorderPlaylistItems. It is clear what the tool does, though it never names an alternative tool to route between.

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?

There is no when-to-use guidance, no mention of prerequisites (e.g. needing a playlist in the user's library or the playlist-modify scope), and no contrast with sibling tools such as addToQueue or createPlaylist. The agent must infer usage entirely.

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

adjustVolumeB

Adjust the playback volume up or down by a relative amount. Use positive values to increase, negative to decrease. Requires Spotify Premium.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceIdNoThe Spotify device ID to adjust volume on
adjustmentYesThe amount to adjust volume by (-100 to 100). Positive increases, negative decreases.

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations to lean on, the description carries the full burden, and it does disclose one genuinely useful non-obvious fact: Spotify Premium is required. It says nothing about what happens at the -100/100 bounds, whether the adjustment is clamped, what occurs if the account lacks Premium, or whether deviceId defaults to the active device.

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 short sentences, front-loaded with the purpose and no filler. Sentence two largely duplicates the schema's own sign-convention text, which is a minor redundancy, but the description stays tight overall.

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 two-parameter mutation with no annotations and no output schema, the Premium prerequisite is a valuable addition, but the description leaves out deviceId defaulting, bound behavior, and error handling. It is adequate but not complete for a state-changing playback 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?

Schema coverage is 100%, so both parameters (including the -100 to 100 range and sign convention) are already fully documented in the schema, and the description mostly restates them. The one gap remaining in both places is deviceId defaulting behavior, which neither the schema nor the description clarifies.

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?

States a specific verb (adjust) and resource (playback volume) plus the key qualifier that the change is relative, which is the main way it differs from a volume-setting tool. It stops short of naming the sibling setVolume, so the agent must infer the distinction from the word 'relative' alone.

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?

Sign convention is given (positive increases, negative decreases), which implies when to use this relative tool versus an absolute setter, but the description never names setVolume or states an explicit condition for choosing between them. Usage is implied rather than spelled out.

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

checkUsersSavedAlbumsB

Check if albums are saved in the user's "Your Music" library

ParametersJSON Schema
NameRequiredDescriptionDefault
albumIdsYesArray of Spotify album IDs to check (max 20)

TDQS

B3.3/5.0
Behavior2/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 of behavioral disclosure. It implies a read-only check but does not mention authentication requirements for the user's library, rate limits, or the format of the result, leaving significant gaps.

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?

A single front-loaded sentence with zero waste that states the tool's action and scope immediately.

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 one-parameter tool, the description conveys the core purpose but lacks any return-value information, which is relevant since no output schema is provided. It is adequate but leaves an agent guessing about the response shape.

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%, with the single required parameter 'albumIds' fully documented (array of Spotify IDs, max 20). The description adds no additional meaning beyond the schema, so the baseline of 3 is appropriate.

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 uses a specific verb ('Check if') and resource ('albums are saved in the user's "Your Music" library'), clearly distinguishing this read-only status check from mutating siblings like saveOrRemoveAlbumForUser and retrieval siblings like getAlbums.

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?

The description implies a use case but provides no explicit guidance on when to prefer this tool over alternatives such as getAlbums or saveOrRemoveAlbumForUser, nor any prerequisites or exclusions.

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

createPlaylistC

Create a new playlist on Spotify

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe name of the playlist
publicNoWhether the playlist should be public
descriptionNoThe description of the playlist

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations at all, the description carries the full behavioral burden and largely drops it. It doesn't state auth/user-scope requirements, whether the playlist starts empty, what the default visibility is if 'public' is omitted, or whether the operation is reversible (unfollowPlaylist). Only the mutation intent is conveyed.

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?

A single short, front-loaded sentence with zero filler — the verb and resource lead. It's efficient, though the extreme brevity leaves documented gaps that a slightly longer description could address.

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?

The tool is simple (3 flat params, 1 required), but with no annotations and no output schema the description should at minimum state default visibility behavior and that the new playlist is empty and needs addTracksToPlaylist to be useful. None of this is present.

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%, so all three parameters (name, public, description) are already documented in the schema. The description adds no format, default, or semantic detail beyond that, so the baseline 3 applies.

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?

States a specific verb and resource ("Create a new playlist"), which cleanly distinguishes it from siblings like updatePlaylist, addTracksToPlaylist, and unfollowPlaylist. "On Spotify" is redundant given the surrounding toolset, and there's no explicit sibling differentiation, but the action is unambiguous.

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 versus alternatives, no prerequisites, and no mention of what happens next (e.g., that tracks must be added separately via addTracksToPlaylist). The agent must infer all routing from the name alone.

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

getAlbumsC

Get detailed information about one or more albums by their Spotify IDs

ParametersJSON Schema
NameRequiredDescriptionDefault
idsNoAlias for albumIds
albumIdsNoA single album ID or array of album IDs (max 20)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full disclosure burden, and it delivers little: no mention of auth requirements, whether the call is read-only, what happens with invalid or missing IDs, or how results are ordered/paginated. 'One or more' hints at batch semantics but that is already implied by 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?

A single tight sentence with the resource and lookup key front-loaded and zero filler. It is efficient, though so short that conciseness comes at the cost of substance.

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 two-parameter read tool with no output schema and no annotations, the description is barely adequate. It never explains what 'detailed information' comprises or the dual-alias parameter, leaving the agent to rely entirely on the 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?

Schema description coverage is 100%, so the baseline is 3. The description adds only that lookups are 'by Spotify ID' and batched ('one or more'), which the schema already conveys through the string-or-array anyOf and maxItems: 20. It does not clarify the ids/albumIds alias duplication.

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?

States a specific verb ('Get') plus resource ('detailed information about one or more albums') and the identifier basis ('Spotify IDs'), so an agent can separate it from getAlbumTracks or searchSpotify. It does not name a sibling explicitly, so it falls short of 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 Guidelines2/5

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

There is no guidance on when to use this versus alternatives such as getAlbumTracks (tracks within an album) or searchSpotify (discovery). The only implied condition is 'you already have album IDs', which is left for 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.

getAlbumTracksB

Get tracks from a specific album with pagination support

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of tracks to return (1-50)
offsetNoOffset for pagination (0-based index)
albumIdYesThe Spotify ID of the album
album_idNoAlias for albumId

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden. It mentions pagination support but omits whether authentication is required, default limit/offset values, rate limits, and the read-only nature of the operation, leaving significant gaps.

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, front-loaded sentence that efficiently conveys the core operation and pagination capability. There is no redundant or wasted wording.

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 read tool with no output schema or annotations, the description is minimally adequate but leaves gaps around return value structure, authentication requirements, and pagination defaults. The schema covers parameters, but behavioral context is thin.

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%, so the schema already fully documents the albumId, limit, and offset parameters. The description adds only generic 'pagination support' without new syntactic or semantic detail, warranting the baseline score.

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 ('Get') and resource ('tracks from a specific album'), making the core action clear. It does not explicitly differentiate itself from sibling tools like getPlaylistTracks or getAlbums, though the album resource inherently distinguishes it.

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?

The description provides no guidance on when to use this tool versus alternatives such as searchSpotify, getAlbums, or getPlaylistTracks. It only states what the tool does, leaving the agent to infer appropriate usage contexts.

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

getAvailableDevicesB

Get information about the user's available Spotify Connect devices

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description carries the full burden. 'Get' weakly implies a read-only operation and the OAuth-scoped nature of Spotify Connect is not mentioned, nor whether devices must be active, nor whether permissions (user-read-playback-state) are required.

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?

One sentence, front-loaded with the verb and resource, no boilerplate or redundancy. Nothing in it is wasted.

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?

The tool is simple (no params, no nested schema), but with no annotations and no output schema the description says nothing about what 'information' is returned (device id, name, type, is_active) or why an agent would need it. Adequate but with a clear gap for a discovery tool that feeds downstream playback calls.

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 tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a no-param tool is 4. The sentence does correctly imply that results are implicitly scoped to the calling user.

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?

States a specific verb ('Get') and resource ('available Spotify Connect devices'), and the phrase 'Spotify Connect' distinguishes it from playback-control siblings like playMusic and pausePlayback. It falls short of 5 only because it doesn't explicitly contrast itself with a near-neighbor tool.

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 when-to-use guidance, no prerequisites, and no mention of alternatives. An agent must infer on its own that this is the discovery step preceding playMusic/setVolume, which is exactly the kind of routing hint a description should supply.

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

getMyPlaylistsC

Get a list of the current user's playlists on Spotify

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of playlists to return (1-50)
offsetNoOffset for pagination (0-based index)

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the entire behavioral burden. It does not disclose the default page size, how pagination behaves, that responses are capped at 50 per call, or any auth/rate-limit considerations. 'Current user's' hints at an auth requirement but nothing more.

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?

A single front-loaded sentence with zero filler, which is appropriate for a simple read tool. It is arguably too terse given the absence of surrounding context, but nothing redundant is present.

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?

Low-complexity tool (2 optional pagination params) with full schema coverage, so the description need not say much. But with no annotations and no output schema, the agent gets no signal about the return shape or whether pagination is needed to enumerate all playlists — a mildly significant gap.

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%, with limit (1-50) and offset fully documented in the schema, so the baseline is 3. The description adds no format, default, or interaction detail beyond what the schema already provides.

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?

States a specific verb and resource ('Get a list of the current user's playlists') and pins the scope to the authenticated user, which distinguishes it from getPlaylist (single playlist) and searchSpotify. However, it never names those siblings or clarifies the boundary with getPlaylistTracks or getUsersSavedTracks, so differentiation is left to inference.

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?

There is no statement of when to use this tool versus alternatives such as searchSpotify, getPlaylist, or getPlaylistTracks. No prerequisites (auth as current user) or exclusions are given; the agent must infer everything from the name.

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

getNowPlayingA

Get information about the currently playing track on Spotify, including device and volume info

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations and no output schema, the description carries the full disclosure burden. It usefully reveals that the response includes device and volume info, but says nothing about auth requirements, behavior when nothing is playing (null/empty), or rate limits, leaving meaningful behavioral questions open.

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?

One tightly written sentence with no filler, and the core purpose is front-loaded before the payload detail. It is appropriately sized for a simple zero-argument read, though it is somewhat sparse.

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 zero-param read tool this covers the essentials of what is returned, but with no annotations and no output schema, the edge cases (nothing playing, private session, missing device) and the shape of the returned track object remain unaddressed.

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 zero parameters, so there is no parameter semantics to explain; the baseline for a parameterless tool is 4. The description correctly avoids inventing arguments that don't exist.

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 gives a specific verb ('Get') and resource ('currently playing track on Spotify'), which lets an agent distinguish it from past-oriented siblings like getRecentlyPlayed. It does not explicitly name or contrast any sibling tool, so it stops short of full differentiation.

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?

Usage is only implied: an agent can infer it should call this when it needs the live playback state. There is no explicit when-to-use, when-not-to-use, or mention of the adjacent alternatives (getQueue, getRecentlyPlayed, getAvailableDevices) that cover overlapping needs.

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

getPlaylistB

Get details of a specific Spotify playlist including tracks count, description and owner

ParametersJSON Schema
NameRequiredDescriptionDefault
playlistIdYesThe Spotify ID of the playlist

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It hints at a read-only lookup and names some returned fields, but says nothing about Spotify's OAuth requirement, whether private playlists are accessible, rate limits, or error behavior when the ID is invalid.

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?

A single efficient sentence with the core action and the most useful return fields front-loaded. Nothing is wasted and nothing needs trimming.

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?

With no output schema and no annotations, the description is the only source of return information, and it only partially covers it (tracks count, description, owner) without the full playlist object shape. Adequate for a simple read tool but with clear gaps.

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% and the single parameter playlistId is fully documented in the schema as 'The Spotify ID of the playlist'. The description adds no syntax, format, or identification guidance beyond that, so the baseline 3 applies.

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?

States a specific verb and resource ('Get details of a specific Spotify playlist') and enumerates the returned fields (tracks count, description, owner). It does not distinguish itself from the nearby getPlaylistTracks or getMyPlaylists siblings, which is the only thing keeping it from 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 Guidelines2/5

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

There is no statement of when to use this tool versus alternatives such as getPlaylistTracks, getMyPlaylists, or searchSpotify. The single sentence is purely descriptive with no context, exclusions, or prerequisites.

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

getPlaylistTracksC

Get a list of tracks in a Spotify playlist

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of tracks to return (1-50)
offsetNoOffset for pagination (0-based index)
playlistIdYesThe Spotify ID of the playlist

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden of behavioral disclosure. It says nothing about pagination behavior, default limit, ordering, or what the response looks like, leaving the agent to infer all of this from the schema alone.

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?

A single efficient sentence with no waste, front-loading the action and resource. It is terse but not under-specified to the point of uselessness.

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 read-only list tool with a complete schema and no output schema, the description is minimally adequate. However, given no annotations and no mention of defaults (e.g., the 50-item max limit), it leaves some behavioral context unaddressed.

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%, so all three parameters (limit, offset, playlistId) are documented in the schema. The description adds no further meaning, which is consistent with the baseline 3 when the schema does the heavy lifting.

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?

States a specific verb (get) and resource (tracks in a Spotify playlist), which is more precise than a bare tautology. It does not distinguish itself from siblings like getAlbumTracks or getPlaylist, but the resource is clear enough for an agent to identify.

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?

The description gives no indication of when to use this versus getAlbumTracks, getRecentlyPlayed, or getTopTracks, and names no alternatives. It simply states what it returns.

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

getQueueA

Get a list of the currently playing track and the next items in your Spotify queue

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of upcoming items to show (1-50)

TDQS

A3.5/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 behavioral burden. It states that it returns a list, implying a read-only operation, but does not disclose authentication requirements, return format, or whether the queue is user-specific. A 3 is appropriate for a simple read tool with no annotations and minimal behavioral detail.

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, front-loaded sentence that is appropriately sized and contains no wasted words.

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?

The tool is simple (one optional parameter, no output schema, no annotations). The description covers the essential purpose, but without annotations or an output schema, it could have mentioned that it returns only the queue for the current user or that it requires authentication. However, for a basic read operation, it is adequate.

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 fully documents the single 'limit' parameter (100% coverage). The description does not add any parameter semantics beyond what the schema provides, so the baseline score of 3 is correct.

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 a specific verb ('Get') and resource ('queue'), and specifies it returns the current track plus a list of upcoming items. It is distinguishable from getNowPlaying, which returns only the currently playing track.

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?

Usage context is implied—the tool retrieves queue contents—but there is no explicit guidance on when to use it versus alternatives like getNowPlaying. The distinction is clear from the description, but it is not stated as a use case.

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

getRecentlyPlayedC

Get a list of recently played tracks on Spotify

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of tracks to return (1-50)

TDQS

C2.9/5.0
Behavior2/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 doesn't disclose authentication requirements (user-scoped data), pagination behavior, default limit when none is specified, or what fields the returned tracks contain. It only states what is fetched, not how it behaves.

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?

A single, clear sentence that is appropriately sized and front-loaded. No wasted words, though it could be slightly more informative without becoming verbose.

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?

Complete for basic invocation, but as a read tool with no annotations and no output schema, the description should clarify authentication scope, default limit, and output shape. It leaves several gaps for an agent to infer.

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 100% – the single 'limit' parameter is fully documented in the schema with type, min, max, and description. Baseline 3 applies since the schema does the heavy lifting; the description adds no further parameter meaning.

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?

Clear verb+resource: 'Get a list of recently played tracks on Spotify'. Distinguishes itself from getNowPlaying (current track) and getTopTracks (most played over time), though it doesn't explicitly mention these siblings. The purpose is immediately clear.

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 getNowPlaying or getTopTracks. The description provides no context about what 'recently played' means (time window, etc.) or when an agent should choose this over siblings.

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

getTopArtistsB

Get the current user's top (most-played) artists over a given time range. This is the closest thing Spotify exposes to listening statistics.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of artists to return (1-50)
timeRangeNoTime range: short_term (~4 weeks), medium_term (~6 months), or long_term (~1 year). Default: medium_term.

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It implies a read-only operation via 'Get' and adds that this is the closest to listening statistics, but does not disclose authentication requirements, rate limits, pagination, or other operational traits.

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 the core action, and the second sentence earns its place by providing useful context about the tool's unique value. 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?

For a simple read-only query with rich schema coverage and no output schema, the description is nearly complete. It could mention prerequisites like user authorization, but the phrase 'current user's' implies authenticated context.

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%, so the schema already fully documents limit and timeRange with defaults and enum meanings. The description adds no parameter syntax or format detail beyond what the schema provides.

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?

States a specific verb (Get) and resource (top most-played artists) with scope (given time range). It clearly differentiates from siblings like getTopTracks by saying 'artists', but does not explicitly name any alternative tool.

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?

The description gives no when-to-use guidance, no conditions for selecting this tool over alternatives like getTopTracks or getRecentlyPlayed, and no exclusions. The sentence about listening statistics is context, not usage guidance.

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

getTopTracksB

Get the current user's top (most-played) tracks over a given time range. This is the closest thing Spotify exposes to listening statistics.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of tracks to return (1-50)
timeRangeNoTime range: short_term (~4 weeks), medium_term (~6 months), or long_term (~1 year). Default: medium_term.

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description carries the full burden and discloses almost nothing behavioral: no mention of required user authorization, pagination, or return shape. Only the implicit 'Get' read operation and 'most-played' semantics are conveyed.

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 tight sentences, purpose front-loaded, no filler. Every clause contributes to identifying the tool.

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 zero-required-param read tool with fully documented schema, the description is adequate on purpose but silent on auth requirements and output characteristics. With no annotations and no output schema, a bit more behavioral context would help.

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%, so both parameters (limit, timeRange) are already fully documented with ranges and enum meanings. The description adds no parameter detail beyond the schema, which is the expected baseline.

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?

States a specific verb and resource ('Get the current user's top (most-played) tracks') with a clear scope modifier (time range). It is distinct from siblings like getRecentlyPlayed and getUsersSavedTracks, but never names a sibling to differentiate explicitly.

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?

The framing as 'the closest thing Spotify exposes to listening statistics' hints at intent, but there is no when-to-use guidance, no exclusions, and no alternatives named among the many siblings (getTopArtists, getRecentlyPlayed, getUsersSavedTracks).

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

getUsersSavedTracksB

Get a list of tracks saved in the user's "Liked Songs" library

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of tracks to return (1-50)
offsetNoOffset for pagination (0-based index)

TDQS

B3.1/5.0
Behavior2/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 of behavioral disclosure. It implies a safe read via "Get" but says nothing about authentication requirements, pagination behavior beyond the schema, rate limits, or return shape, which is thin for an unannotated 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?

A single, front-loaded sentence that states the operation and its scope with zero filler. Nothing is wasted.

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 two-parameter list tool with full schema coverage and no output schema, the description covers the essentials of what is returned. However, with no annotations it does not compensate for missing behavioral detail such as auth or pagination semantics.

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%, so limit and offset are already fully documented in the schema. The description adds no parameter meaning beyond that, making the baseline 3 appropriate.

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?

States a specific verb (Get) and resource (list of tracks), and scopes it to the user's "Liked Songs" library, which distinguishes it from sibling reads like getRecentlyPlayed and getTopTracks. The scope is clear even though no sibling is named explicitly.

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?

There is no explicit when-to-use guidance, no when-not-to-use, and no alternatives offered. An agent must infer that this is the read path for Liked Songs versus removeUsersSavedTracks, which is left to inference.

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

pausePlaybackC

Pause Spotify playback on the active device

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceIdNoThe Spotify device ID to pause playback on

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full burden. It conveys only that playback is halted; it says nothing about behavior when no device is active, whether the call is idempotent, or what error/permission conditions apply.

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?

A single efficient sentence with the action front-loaded and no filler. It is appropriately sized for a simple command, though it is arguably too terse for the behavioral gaps it leaves.

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 an argument-free-ish command with no output schema, the core meaning is present. Missing are the edge cases (no active device, non-premium users) and any note on required authorization that an agent would want before calling.

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 100% and the schema already describes deviceId, so the baseline is 3. The description adds no syntax or fallback detail, and its phrase 'active device' slightly conflicts with the optional deviceId override the schema offers.

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?

States a specific verb (pause) and resource (Spotify playback) plus scope (active device). It is readily distinguishable from siblings like resumePlayback and playMusic, though it does not explicitly name them.

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 when-to-use guidance, no prerequisites (e.g. an active device or Premium account), and no pointer to resumePlayback as the inverse operation. Usage must be inferred from the name.

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

playMusicA

Start playing a Spotify track, album, artist, or playlist. Pass a Spotify URI (e.g. spotify:track:xxx, spotify:album:xxx) via "uri". For albums/playlists you can also use "context_uri". Device is selected automatically — "deviceId" or "device_id" are optional.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSpotify ID of the item (use with type)
uriNoSpotify URI to play (e.g. spotify:track:xxx, spotify:album:xxx)
typeNoType of item (only needed with id)
offsetNoTrack offset within album/playlist (0-based)
deviceIdNoSpotify device ID to play on (auto-selected if omitted)
device_idNoAlias for deviceId
context_uriNoAlias for uri — Spotify context URI for albums/playlists

TDQS

A3.5/5.0
Behavior3/5

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

No annotations exist, so the description carries the full behavioral burden. It discloses one meaningful trait — the device is selected automatically unless deviceId/device_id is passed. It omits auth/scope requirements, Premium-only constraints, behavior when no active device exists, and what happens to the existing queue. Given zero annotation coverage, more was warranted.

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, zero waste: purpose first, then parameter-shape guidance, then the device note. Well front-loaded and appropriately sized for a 7-parameter tool.

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 annotations and no output schema, so the description is the only behavioral source. It documents the parameter shapes adequately but leaves preconditions (active device/session, account tier) and failure modes unstated for a tool whose whole job is issuing a playback command.

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%, so the baseline is 3. The description restates the uri/context_uri and deviceId/device_id distinctions that the schema descriptions already give ('Alias for deviceId', 'Alias for uri'), adding only light clarification of which content types suit context_uri. It does not explain id+type interplay or offset usage.

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?

Clear specific verb+resource: 'Start playing a Spotify track, album, artist, or playlist.' An agent can immediately tell what it does. However it never contrasts with the close sibling resumePlayback, which also initiates audio output, so the boundary between 'start new playback' and 'resume existing playback' is left to inference.

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 tells the agent which parameter shape to use for which content type (uri for tracks, context_uri for albums/playlists) and notes device auto-selection, which is useful usage guidance. It does not say when to prefer this over resumePlayback, nor any precondition such as an active session or Premium account.

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

removeTracksFromPlaylistA

Remove one or more tracks from a Spotify playlist (max 100 tracks per request)

ParametersJSON Schema
NameRequiredDescriptionDefault
trackIdsYesArray of Spotify track IDs to remove (max 100)
playlistIdYesThe Spotify ID of the playlist
snapshotIdNoThe playlist snapshot ID to target a specific version (optional)

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden, and it does not deliver. It says nothing about whether removal is irreversible, what permissions/scopes are required, how snapshotId affects conflict behavior, or what happens on partial failure. The 'max 100' note merely restates the schema's maxItems constraint rather than adding new 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?

One sentence, front-loaded with the core action, with the batch limit parenthetically attached. Nothing is wasted.

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?

There is no output schema and no annotations, so the description should compensate for a destructive mutation on a 3-parameter tool. It covers the action and batch ceiling but leaves permission requirements, snapshot semantics, and error/partial-failure behavior unaddressed.

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%, so the schema already explains playlistId, trackIds, and snapshotId. The description adds no parameter meaning beyond what is structured, so the baseline of 3 applies.

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?

States a specific verb (remove) plus resource (tracks from a Spotify playlist), and the batch ceiling. It is clearly distinguishable from sibling tools like addTracksToPlaylist and removeUsersSavedTracks (library vs. playlist).

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?

Usage is implied by the name and description – you call it when you want tracks gone from a playlist. There is no explicit when-to-use, no when-not-to-use, and no routing to alternatives such as updatePlaylist or reorderPlaylistItems.

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

removeUsersSavedTracksB

Remove one or more tracks from the user's "Liked Songs" library (max 40 per request)

ParametersJSON Schema
NameRequiredDescriptionDefault
trackIdsYesArray of Spotify track IDs to remove (max 40)

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It discloses the batch limit (max 40 per request), but says nothing about required auth/scopes, whether removal is reversible, idempotency, or error behavior for invalid IDs — significant gaps for a destructive mutation.

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?

A single front-loaded sentence with the action, target, and the key constraint parenthetically placed. Nothing is wasted.

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 one-parameter tool with no output schema this is minimally adequate — purpose and batch limit are covered. But with no annotations and a destructive operation, the absence of any note on permissions, irreversibility, or response shape leaves the definition short of complete.

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%, so the single trackIds parameter and its maxItems constraint are already fully documented in the schema. The description merely restates the 40-item cap they already encode, adding no new semantic 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?

States a specific verb (remove) and resource (tracks from the user's "Liked Songs" library), and the scoping to saved/liked tracks distinguishes it from the sibling removeTracksFromPlaylist. An agent can select it without opening the schema.

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 explicit when-to-use or when-not-to-use guidance, and no alternatives named. The purpose implies the use case, but the definition never says how this differs from removeTracksFromPlaylist or what preconditions must hold.

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

reorderPlaylistItemsC

Reorder a range of tracks within a Spotify playlist by moving them to a new position

ParametersJSON Schema
NameRequiredDescriptionDefault
playlistIdYesThe Spotify ID of the playlist
rangeStartYesThe position of the first item to move (0-based index)
snapshotIdNoThe playlist snapshot ID to target a specific version (optional)
rangeLengthNoNumber of consecutive items to move (defaults to 1)
insertBeforeYesThe position where the items should be inserted (0-based index)

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It clarifies the move semantics of the range, but says nothing about required auth/scopes, whether the reorder is destructive or reversible, the role of snapshotId for concurrency, or rate limits — all important for a mutation tool.

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?

A single, front-loaded sentence with no filler. It is tight and readable, though the compression is part of why usage and behavioral context are missing.

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 5-parameter mutation tool with no annotations and no output schema, the description is too thin: it omits auth requirements, the snapshot/versioning behavior implied by the snapshotId param, and failure/concurrency behavior. The well-documented schema compensates on parameters but not on behavior.

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%, so the schema fully documents all five parameters with types and index semantics. The description adds only a loose conceptual mapping ('range of tracks' → rangeStart/rangeLength, 'new position' → insertBefore), so the baseline 3 applies.

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?

States a specific verb (Reorder) and resource (a range of tracks within a Spotify playlist) with the mechanism (moving to a new position). It is clearly distinguishable from write siblings like addTracksToPlaylist and removeTracksFromPlaylist, though it does not explicitly name or contrast them.

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?

The description explains what the operation does but gives no when-to-use guidance, prerequisites, or alternatives. An agent gets no signal on which sibling handles adjacent cases such as insertion (addTracksToPlaylist) versus repositioning.

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

resumePlaybackC

Resume Spotify playback on the active device

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceIdNoThe Spotify device ID to resume playback on

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden, yet it discloses nothing about prerequisites (Spotify Premium, an active device, an existing paused track) or failure behavior when no device is available. Only the basic effect is stated.

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?

One short, front-loaded sentence with no filler — the core action and scope come first. It is efficient, though it is arguably too terse to earn full marks given the missing prerequisite context.

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 playback-control tool with no annotations and no output schema, the description omits the context an agent needs to call it correctly, such as premium/active-device requirements and what happens if nothing is paused. It is not adequate for the complexity of the operation.

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%, so the single deviceId parameter is already fully documented, which sets the baseline at 3. The description adds nothing about the parameter and arguably introduces mild tension by saying "active device" while the schema allows an explicit deviceId.

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 names a specific verb ("Resume") and resource ("Spotify playback") and adds a scope qualifier ("on the active device"). It is clear what the tool does, but it never distinguishes itself from the closely named siblings playMusic and pausePlayback, so the agent must infer the boundary.

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?

Usage is only implied by the verb "Resume" — there is no statement of when to prefer this over playMusic, nor any prerequisite such as an already-existing paused session or an active device. No alternative or exclusion is named.

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

saveOrRemoveAlbumForUserC

Save or remove albums from the user's "Your Music" library

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesAction to perform: save or remove albums
albumIdsYesArray of Spotify album IDs (max 20)

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It conveys mutation of a user library but says nothing about auth requirements, idempotency, whether remove is reversible, or what happens on partial failure — meaningful gaps for a write tool with zero annotation coverage.

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?

A single front-loaded sentence with no redundant clauses or filler. Every word 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 mutating, un-annotated tool with no output schema, the description should cover side effects, permissions, or confirmation behavior. It leaves all behavioral context unstated, so the definition is not complete enough to invoke confidently.

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%, so both parameters (albumIds with max 20, action enum) are already fully documented in the schema. The description adds nothing beyond the schema, making the baseline 3 appropriate.

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?

States a specific verb pair (save/remove) and resource (albums) and names the destination library ("Your Music"), so the operation is clear. It does not explicitly distinguish itself from siblings like checkUsersSavedAlbums, which is the natural read counterpart.

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 when-to-use guidance, no mention of the read-side alternative checkUsersSavedAlbums, and no conditions distinguishing save from remove beyond what the enum already implies. The agent is left to infer usage entirely.

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

searchSpotifyA

Search for tracks, albums, artists, playlists, podcast episodes, or shows on Spotify. For episodes and shows, the query matches against title, description, and publisher. Use type "episode" to find individual podcast episodes by topic or guest name, and type "show" to find podcast series.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesThe type of item to search for: track, album, artist, playlist, episode (podcast episode), or show (podcast series)
limitNoMaximum number of results to return (default: 10, max: 10)
queryYesThe search query. Matches title, description, and publisher for podcasts.
offsetNoIndex of the first result to return (default: 0). Combine with limit to page past the first 10 results.

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It does not disclose any behavioral traits such as result ordering, whether it requires authentication, rate limits, or caching. It only describes query matching for podcasts, leaving most operational behavior undocumented.

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?

Efficient two-sentence structure that front-loads the primary action and item types. The second sentence adds podcast-specific guidance without excessive verbosity, though it could be slightly tighter.

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?

The description covers the main search scope and provides podcast-specific guidance, which is helpful. However, for a search tool with no annotations and no output schema, it omits important behavioral details like authentication requirements, result ordering, pagination behavior beyond the offset param, and what fields are returned, leaving gaps an agent might need.

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%, so the schema already documents all four parameters thoroughly, including enum values, limit/offset ranges, and query matching fields. The description adds some podcast-specific meaning but largely repeats what the schema provides, making the baseline 3 appropriate.

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?

States a specific verb (Search) and resource (tracks, albums, artists, playlists, podcast episodes, shows) on Spotify. The enumeration of item types and the podcast-specific matching fields clearly distinguish it from sibling retrieval tools like getAlbums or getMyPlaylists, which list rather than search.

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 clear usage context for the podcast types, explicitly routing the agent to type 'episode' for individual episodes by topic/guest and 'show' for series. However, it does not state when to use this search vs alternatives like browsing saved items, and no exclusions are given.

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

setVolumeB

Set the playback volume to a specific percentage (0-100). Requires Spotify Premium.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceIdNoThe Spotify device ID to set volume on
volumePercentYesThe volume to set (0-100)

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does add one genuinely useful behavioral fact: the Spotify Premium requirement. It still omits whether this targets the active device by default, what happens if deviceId is omitted, and whether it errors on free accounts.

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, front-loaded with the core action and range, with the prerequisite appended. Nothing is wasted.

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 tool with no annotations and no output schema, the description covers purpose and the Premium prerequisite but leaves the device-targeting behavior and the adjustVolume relationship unexplained.

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%, so both parameters are already documented in the schema. The description only restates the 0-100 range and adds no semantics beyond it, which is the baseline 3 case.

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?

States a specific verb (Set) and resource (playback volume) with the value range, so the action is unambiguous. However, it does not distinguish itself from the sibling tool adjustVolume, which an agent must choose between.

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 when-to-use guidance is given. The presence of a near-identical sibling (adjustVolume) makes the absence of any routing rule — absolute set vs. relative adjust — a real gap.

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

skipToNextB

Skip to the next track in the current Spotify playback queue

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceIdNoThe Spotify device ID to skip on

TDQS

B3.3/5.0
Behavior2/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 of behavioral disclosure. It states the action but not the consequences: what happens if the queue is empty or at the last track, whether playback state changes, or whether this requires an active device. For a playback-mutating control with zero annotation coverage, this leaves meaningful gaps.

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?

A single front-loaded sentence with no filler or redundancy. Every word earns its place and the action is immediately clear.

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 one-parameter playback action with no output schema and full schema coverage, the description is minimally sufficient. But with no annotations and an optional deviceId whose default behavior is undocumented, key operational context an agent needs before invoking is missing.

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% for the single deviceId parameter, so the schema already explains its meaning. The description adds nothing about deviceId behavior, such as what happens when it is omitted (it is optional) — that defaulting behavior is documented nowhere. Baseline 3 is appropriate given the schema does the heavy lifting.

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?

States a specific verb ('Skip') and resource ('next track in the current Spotify playback queue'), which is unambiguous and inherently distinguishes it from skipToPrevious. It does not explicitly name a sibling or scope constraint, but the action is self-evident without opening the schema.

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?

Usage is implied by the wording ('in the current Spotify playback queue'), so an agent can infer it applies to active playback control. However, there is no explicit when-to-use guidance, no mention of prerequisites (e.g., an active session or device), and no statement about when another tool would be preferable.

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

skipToPreviousA

Skip to the previous track in the current Spotify playback queue

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceIdNoThe Spotify device ID to skip on

TDQS

A3.6/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 the action but does not disclose whether playback must be active, what happens if you are at the first track, whether this requires authentication, or whether the operation is idempotent. These are meaningful gaps for a control tool with no annotation safety net, though the core behavior is stated.

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?

A single, tight sentence with zero waste. Front-loaded with the action and fully sufficient in length.

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 no annotations and no output schema, the description is minimal but adequate for the core action. It omits prerequisites (active playback, device availability) and edge-case behavior, leaving the agent to infer operational context. For a simple control tool this is borderline sufficient, but not complete.

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 100%, and the schema documents deviceId as 'The Spotify device ID to skip on.' The description adds no parameter detail, but with full schema coverage the baseline is 3; the description at least implies a device context via 'current playback queue.' A 4 reflects that the schema fully compensates and the description does not need to repeat it.

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?

States a specific verb+resource: 'Skip to the previous track in the current Spotify playback queue.' This is clear and unambiguous. However, it does not explicitly differentiate from the sibling skipToNext beyond the obvious 'next' vs 'previous' wording, which is implicit rather than stated.

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 (skip backward during playback) but provides no explicit when-to-use guidance, no mention of alternatives like skipToNext, and no prerequisites such as requiring an active playback session. Sibling differentiation is left to 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.

unfollowPlaylistA

Remove a playlist from the current user's library (unfollow). Note: Spotify does not allow permanent deletion of playlists via the API.

ParametersJSON Schema
NameRequiredDescriptionDefault
playlistIdYesThe Spotify ID of the playlist to unfollow

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 carries the full burden, and it discloses an important behavioral trait: the operation is a library removal, not a destructive deletion, so the playlist persists for other users. It omits auth/permission requirements and whether re-following restores it, but the key consequence is surfaced.

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 tight sentences with the core operation front-loaded and the clarifying caveat second. No redundant restatement of the name or title.

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 single-parameter mutation with no annotations and no output schema, the essentials are present: what changes, and that deletion is out of scope. Minor gaps remain around auth requirements and idempotency, which keep it short of a 5.

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%, so playlistId is already fully documented in the schema. The description adds no format, syntax, or constraint detail beyond what the schema provides, so baseline 3 applies.

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?

States a specific verb (remove/unfollow) and resource (playlist from the current user's library) and disambiguates from permanent deletion. An agent can tell this apart from updatePlaylist or removeTracksFromPlaylist without opening a schema. The parenthetical '(unfollow)' ties the jargon to the operation plainly.

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 makes the use condition clear: remove a playlist from the user's own library, with the explicit note that permanent deletion is not possible via the API. It gives a clear context but does not name a specific alternative tool for related operations (e.g. updatePlaylist for playlist details).

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

updatePlaylistC

Update the details of a Spotify playlist (name, description, public/private, collaborative)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew name for the playlist
publicNoWhether the playlist should be public
playlistIdYesThe Spotify ID of the playlist
descriptionNoNew description for the playlist
collaborativeNoWhether the playlist should be collaborative (requires public to be false)

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden and it falls short. It doesn't state Spotify's ownership/permission requirement for edits, whether omitted fields are left unchanged (partial vs full update), whether the call is idempotent, or what happens on a non-owned playlist.

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?

One sentence, front-loaded with the action and resource, with the mutable fields bracketed economically. Nothing extraneous, though the parenthetical largely duplicates the schema.

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 5-parameter mutation tool with zero annotation coverage and no output schema, the description omits the operationally critical details: ownership/scope requirements, partial-update semantics, and failure modes. An agent could pick the tool but could not predict its behavior safely.

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%, so every parameter is already documented in the schema (including the 'requires public to be false' constraint on collaborative). The description merely restates the field list, adding no syntax or format detail beyond structured data, making the baseline 3 appropriate.

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?

Clear verb (Update) plus resource (Spotify playlist) with the editable field set enumerated in parentheses. It is distinguishable from createPlaylist and getPlaylist by the 'update the details' framing, though it never explicitly contrasts with those siblings.

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 when-to-use guidance is given: nothing says the playlist must already exist, that the user must own it (or be a collaborator), or how this differs from createPlaylist/unfollowPlaylist. The reader must infer usage entirely from the name.

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.

  1. 30 tool updatesv1.0.0
    • First observedaddToQueue
    • First observedaddTracksToPlaylist
    • First observedadjustVolume
    • First observedcheckUsersSavedAlbums
    • First observedcreatePlaylist
    • First observedgetAlbums
    • First observedgetAlbumTracks
    • First observedgetAvailableDevices
    • First observedgetMyPlaylists
    • First observedgetNowPlaying
    • First observedgetPlaylist
    • First observedgetPlaylistTracks
    • First observedgetQueue
    • First observedgetRecentlyPlayed
    • First observedgetTopArtists
    • First observedgetTopTracks
    • First observedgetUsersSavedTracks
    • First observedpausePlayback
    • First observedplayMusic
    • First observedremoveTracksFromPlaylist
    • First observedremoveUsersSavedTracks
    • First observedreorderPlaylistItems
    • First observedresumePlayback
    • First observedsaveOrRemoveAlbumForUser
    • First observedsearchSpotify
    • First observedsetVolume
    • First observedskipToNext
    • First observedskipToPrevious
    • First observedunfollowPlaylist
    • First observedupdatePlaylist

TDQS

B3.3/5.0

Scored across 30 tools

Disambiguation4/5

Most tools target distinct resources and actions, and descriptions clearly separate close pairs like setVolume vs adjustVolume and skipToNext vs skipToPrevious. A few boundaries are softer (playMusic vs resumePlayback, and the combined saveOrRemoveAlbumForUser versus the separate library tools), but overall selection is reliable.

Naming Consistency4/5

Nearly all tools use a consistent camelCase verb-first pattern (getAlbums, createPlaylist, removeTracksFromPlaylist, getTopTracks). The only real deviation is the compound saveOrRemoveAlbumForUser, which breaks the single-action convention used elsewhere.

Tool Count3/5

At 30 tools this is on the heavy side, above the comfortable range, and a few (e.g. the album save/remove combiner) could be split or consolidated more cleanly. However, Spotify's surface area (playback, playlists, library, search, discovery) is genuinely broad, so most tools earn their place.

Completeness4/5

Coverage spans playback control, playlists, library, search, and listening stats, which is strong for the domain. Minor gaps remain: there is no way to save a track to Liked Songs (only remove), and no detailed getArtist/getTrack lookup outside of search.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables interaction with Spotify through natural language for music discovery, playback control, library management, and playlist creation. Supports searching for music, controlling playback, managing saved tracks, and getting personalized recommendations based on mood and preferences.
    53 npm
    5
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    Enables AI assistants to control Spotify playback, search for music, manage playlists, and access library information through the Spotify API. Requires Spotify Premium for playback control features.
    4
    -