Spotify MCP Server
An MCP server for the Spotify Web API that lets AI assistants search music, control playback, manage playlists and your library, and browse podcasts/audiobooks.
Search tracks, albums, artists, playlists, shows, episodes, audiobooks — with filters like
artist:,album:,year:,genre:,isrc:,upc:.Control playback: play/pause, next/previous, seek, set volume, repeat, shuffle toggle, transfer between devices, list devices, add to queue, view queue, recently played.
Manage playlists: create, update name/description/visibility, list your playlists, get items, add/remove/reorder tracks (auto-chunked at 100).
Manage your library: view/save/remove/check saved tracks, albums, shows, episodes, audiobooks; follow/unfollow artists, users, and playlists by URI.
Browse catalog details for albums, artists (+ their albums), tracks, shows (+ episodes), episodes, audiobooks (+ chapters), chapters.
View user data: profile, top artists/tracks by time range, followed artists (cursor-paginated), plus a
whoamidiagnostic.Resources: subscribable
spotify://snapshots of profile, playback, queue, and top tracks/artists.Prompts: pre-baked workflows —
build_playlist_from_recent,weekly_listening_summary,playlist_from_artists,library_cleanup.Runs anywhere via
stdio(default),sse, orstreamable-http, using OAuth Authorization Code auth with automatic token refresh.
Provides tools for searching music, controlling playback, managing playlists, and accessing user library via the Spotify Web API.
Spotify MCP Server
A Model Context Protocol (MCP) server that provides tools for interacting with the Spotify Web API. Enables AI assistants like Claude to search music, control playback, manage playlists, and more.
Features
Search - Find tracks, albums, artists, playlists, shows, episodes, and audiobooks
Playback Control - Play, pause, skip, seek, volume, shuffle, repeat, queue management
Playlists - Create, update, add/remove/reorder tracks (auto-chunks large batches)
Library - View and manage saved tracks, albums, shows, episodes, and audiobooks
Browse - Get details on tracks, albums, artists, episodes, and chapters
Podcasts & Audiobooks - Browse shows, episodes, audiobooks, and chapters
Follow - List followed artists; follow/unfollow artists, users, and playlists through the library tools by URI
User Profile - View profile, top artists/tracks, diagnostic
whoamiResources - Subscribable snapshots of profile, playback, queue, top items
Prompts - Pre-baked workflows for playlist building, listening summaries, library cleanup
Transports -
stdio(default),sse, andstreamable-httpUses only non-deprecated Spotify Web API endpoints
Related MCP server: Spotify MCP Server
Example interactions
"What am I listening to right now?"
"Play some Radiohead on my living room speaker."
"Skip this track and turn the volume down to 30."
"Build me a playlist of 25 chill tracks based on what I've been listening to this week."
"Add the last three songs I played to my 'Focus' playlist."
"Show me my top artists from the last six months."
"Search for live albums by Nils Frahm and save the best one to my library."
"Unfollow every playlist I haven't opened that wasn't made by me."
"Queue up the next episode of the show I was listening to yesterday."
Prerequisites
uv — install with
curl -LsSf https://astral.sh/uv/install.sh | shA Spotify Developer account
A Spotify app with Client ID and Client Secret
Getting Your Spotify Credentials
Go to the Spotify Developer Dashboard
Click Create App
Fill in the app details:
App name: Choose any name (e.g., "My MCP Server")
App description: Optional
Redirect URI:
http://127.0.0.1:8888/callbackWhich API/SDKs are you planning to use?: Select Web API
Click Save
On your app's page, find your Client ID
Click Show client secret to reveal your Client Secret
Important: The redirect URI must exactly match
http://127.0.0.1:8888/callback(or whatever you set inSPOTIFY_REDIRECT_URI). Do not uselocalhost— use127.0.0.1.
Installation
Pick your client below. All examples use uvx to fetch the server on demand — no clone, no manual install.
Claude Code
claude mcp add spotify \
-e SPOTIFY_CLIENT_ID=your_client_id \
-e SPOTIFY_CLIENT_SECRET=your_client_secret \
-- uvx mcp-server-spotifyOther MCP clients
Most MCP clients configure servers via a JSON file. Add this entry to your client's MCP config:
{
"mcpServers": {
"spotify": {
"command": "uvx",
"args": ["mcp-server-spotify"],
"env": {
"SPOTIFY_CLIENT_ID": "your_client_id",
"SPOTIFY_CLIENT_SECRET": "your_client_secret"
}
}
}
}Running from a local checkout
For development, or if you want to run a modified copy:
git clone https://github.com/llyfn/spotify-mcp.git
cd spotify-mcp && uv syncThen point your client at the local checkout instead of uvx:
"command": "uv",
"args": ["--directory", "/absolute/path/to/spotify-mcp", "run", "mcp-server-spotify"]Configuration
Variable | Required | Default | Description |
| Yes | — | Your Spotify app's Client ID |
| Yes | — | Your Spotify app's Client Secret |
| No |
| OAuth redirect URI |
| No |
| MCP transport: |
Spotify API notes
Development-mode Spotify apps have these restrictions (see the February 2026 migration guide):
The app owner needs an active Spotify Premium subscription.
API quota is shared by all Client IDs on the developer account. When it runs out, tools report
Quota exceeded.Search returns at most 10 results per type.
Full playlist contents are only returned for playlists you own or collaborate on.
Following artists via
save_to_library/remove_from_libraryrelies on live API behaviour; the OpenAPI spec documents artist URIs only for the check endpoint.
Upgrading from 0.2.x
Spotify removed several endpoints and fields from its Web API. If you're upgrading from an older version of this server, note the following:
follow_artists_or_users/unfollow_artists_or_users/check_following/follow_playlist/unfollow_playlistare gone. Usesave_to_library/remove_from_library/check_saved_in_libraryinstead, passingspotify:artist:...,spotify:user:..., orspotify:playlist:...URIs.get_albums/get_artists/get_tracks/get_shows/get_episodes/get_audiobooks/get_chapters(the batch lookup tools) are gone — Spotify removed the batch endpoints, which now return 403 for development-mode apps. Call the single-item tools (get_album,get_artist,get_track,get_show,get_episode,get_audiobook,get_chapter) once per ID instead.follow_playlist's public/private flag has no equivalent in/me/library— playlists followed viasave_to_librarycan't be marked public or private.Profile output (
get_my_profile) no longer includes email, country, plan, or follower count; theuser-read-emailscope is no longer requested.
Authentication
The server uses Spotify's Authorization Code flow:
On first use, the server opens your browser to Spotify's login page
Spotify will ask you to approve access — the server requests all scopes needed for the full tool set (playback, library, playlists, and user data)
After you authorize, Spotify redirects to the local callback server
The server exchanges the authorization code for access/refresh tokens
Tokens are stored securely in
~/.spotify-mcp/credentials.jsonTokens are automatically refreshed when they expire
If running in a headless environment (SSH, Docker), the auth URL will be printed to stderr — copy and paste it into a browser manually.
Re-authenticating
To re-authenticate (e.g., after revoking access), delete the stored credentials:
rm ~/.spotify-mcp/credentials.jsonAvailable Tools
Search
Tool | Description |
| Search for tracks, albums, artists, playlists, shows, episodes, or audiobooks |
Albums
Tool | Description |
| Get album details by ID |
| Get tracks in an album |
Artists
Tool | Description |
| Get artist details by ID |
| Get albums by an artist |
Tracks
Tool | Description |
| Get track details by ID |
Playlists
Tool | Description |
| Get playlist details |
| Update playlist name, description, or visibility |
| Get items in a playlist |
| Add tracks/episodes to a playlist |
| Remove items from a playlist |
| Reorder items in a playlist |
| Get the current user's playlists |
| Create a new playlist |
Library
Tool | Description |
| Get saved tracks |
| Get saved albums |
| Get saved shows |
| Get saved episodes |
| Get saved audiobooks |
| Save items to library, or follow artists/users/playlists by URI (max 40/request, auto-chunked) |
| Remove items from library, or unfollow artists/users/playlists by URI (max 40/request, auto-chunked) |
| Check if items are saved, or artists/users/playlists are followed, by URI (max 40/request, auto-chunked) |
Player
Tool | Description |
| Get current playback state |
| Get the currently playing track |
| Start or resume playback |
| Pause playback |
| Skip to next track |
| Skip to previous track |
| Seek to position in track |
| Set repeat mode (track/context/off) |
| Set playback volume |
| Toggle shuffle mode |
| Transfer playback to another device |
| Get available devices |
| Add item to playback queue |
| Get the playback queue |
| Get recently played tracks |
Shows & Podcasts
Tool | Description |
| Get show details |
| Get episodes of a show |
| Get a single episode by ID |
Audiobooks
Tool | Description |
| Get audiobook details |
| Get chapters of an audiobook |
| Get chapter details |
Follow
Tool | Description |
| List artists the user follows (cursor-paginated) |
Users
Tool | Description |
| Get current user's profile |
| Get top artists or tracks |
| Diagnostic — auth status, active device, configured scopes |
Resources
Snapshots of user state exposed under the spotify:// URI scheme. MCP clients can
include them as context or subscribe for updates without calling a tool.
URI | Description |
| Profile basics — display name, user ID, account ID |
| Current playback state (episode-aware) |
| Currently playing + next-up queue |
| Top tracks (last ~6 months) |
| Top artists (last ~6 months) |
Prompts
Canned workflows MCP clients can offer in their prompt picker. Each one walks the assistant through a multi-step task using the tools above.
Prompt | Description |
| Build a new playlist seeded by recent listening ( |
| Summarize the past week's listening grouped by artist/album |
| Build a playlist from a comma-separated list of artists ( |
| Scan saved tracks and propose cleanup candidates ( |
Contributing
See CONTRIBUTING.md for development setup and guidelines.
License
MIT - see LICENSE for details.
Available Tools
47 toolsadd_playlist_itemsA
Add tracks or episodes to a playlist. Auto-chunks at 100 items per request.
Args:
playlist_id: The Spotify ID of the playlist.
uris: List of Spotify URIs to add (e.g. ["spotify:track:xxx"]).
position: Position to insert items (0-based). Appends to end if not specified.
When chunking, subsequent chunks insert immediately after the previous.
| Name | Required | Description | Default |
|---|---|---|---|
| uris | Yes | ||
| position | No | ||
| playlist_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It reveals auto-chunking, position handling during chunking, and append behavior. It could mention side effects like duplicates or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear action statement followed by an Args section. It is concise but not terse, adding value for each parameter. Minor redundancy with the schema's 'Args' label.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers core functionality and chunking behavior but lacks context on prerequisites (e.g., playlist ownership), error handling, or output. An output schema exists, so return values are not needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description adds full meaning for all three parameters: playlist_id (Spotify ID), uris (list with example), position (0-based, append if null, chunking implications). This is excellent semantic enrichment.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Add tracks or episodes to a playlist', using a specific verb and resource. It distinguishes from sibling tools like remove_playlist_items and reorder_playlist_items by focusing solely on adding.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides practical usage guidance, such as auto-chunking at 100 items per request and behavior of position during chunking. However, it does not explicitly state when to use this tool over alternatives or exclusion conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_to_queueA
Add a track or episode to the playback queue.
Args:
uri: Spotify URI of the item to add. E.g. "spotify:track:xxx".
device_id: ID of the device. If not provided, uses the active device.
| Name | Required | Description | Default |
|---|---|---|---|
| uri | Yes | ||
| device_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states that items are added to the queue but does not disclose important behavioral details such as whether items are appended or replaced, error handling, or authentication requirements, which are critical 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, using two sentences to convey the purpose and parameter details without waste. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists, the description does not need to explain return values. However, it omits details like behavioral behavior (e.g., appending to queue end) and error conditions, making it minimally adequate for a simple tool but not robust.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, but the tool description adds valuable context: it provides an example URI format for 'uri' and explains that 'device_id' defaults to the active device. This meaningfully augments the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Add'), the resource ('track or episode'), and the target ('playback queue'), with a specific verb and resource that distinguishes it from sibling tools like 'add_playlist_items' and 'play'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the parameters (uri and device_id) but does not provide explicit guidance on when to use this tool versus alternatives like 'play' or 'add_playlist_items'. The usage is implied but not elaborated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_saved_in_libraryB
Check whether items are saved or artists/users/playlists are followed.
Auto-chunks at 40 URIs per request.
Args:
uris: Spotify URIs: track, album, episode, show, audiobook, artist, user, or
playlist (e.g. ["spotify:track:xxx", "spotify:artist:yyy"]).
| Name | Required | Description | Default |
|---|---|---|---|
| uris | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 usefully discloses the auto-chunking threshold (40 URIs per request), which is genuine behavioral context beyond the schema, and the verb "check" implies a read-only operation. However, it does not state auth requirements, whether URI types can be mixed in one call, or ordering guarantees for the returned flags.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose in the first sentence, followed by a chunking note and a structured Args block. Every element earns its place and there is no repetition. The Args formatting is slightly boilerplate-heavy for a single parameter but not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description covers purpose, chunking behavior, and accepted URI types. For a single-parameter read tool this is nearly sufficient; the only real gap is auth/scope requirements and whether a single call can mix resource types.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it largely does: it enumerates every accepted URI type (track, album, episode, show, audiobook, artist, user, playlist) and gives a concrete format example. This is meaningfully more than the bare "array of strings" schema. It stops short of stating whether types can be mixed or what the response maps to each input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: checks saved status, with the dual scope of "saved" items vs "followed" artists/users/playlists. This clearly distinguishes it from get_saved_tracks/get_saved_albums (which list rather than check) and from save_to_library/remove_from_library. It does not name a sibling explicitly, so it lands at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use guidance or alternatives. The agent must infer that this is the membership-test counterpart to get_saved_tracks and save_to_library. No statement of when this is preferable to listing saved items or which resource types belong in which scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_playlistB
Create a new playlist for the current user.
Args:
name: Name for the new playlist.
description: Description for the playlist.
public: Whether the playlist should be public (default True).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| public | No | ||
| description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behavioral traits. It only lists parameters and confirms creation, but does not reveal any side effects, failure modes, or permissions required. The presence of an output schema reduces the need to explain return values, but other behavioral aspects are missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a clear opening sentence followed by parameter listing. The 'Args' section is slightly redundant given the input schema, but it does not waste words. Front-loading is adequate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description does not need to explain return values. It covers the essential purpose and parameter roles. However, it lacks context about preconditions (e.g., user must be authenticated) or consequences (e.g., playlist appears in library). Overall, it is minimally complete for a simple creation action.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It provides brief explanations for each parameter (e.g., 'name: Name for the new playlist'), adding minimum meaning beyond the schema. However, it lacks details on constraints like max length or allowed characters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create a new playlist for the current user.' This is a specific verb+resource combination that distinguishes it from siblings like 'add_playlist_items' or 'update_playlist'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. It does not mention preconditions, exclusions, or scenarios where a different tool would be preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_albumA
Get details of a Spotify album by its ID.
Args:
album_id: The Spotify ID of the album.
market: ISO 3166-1 alpha-2 country code; affects availability/relinking.
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | ||
| album_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 only says 'Get details,' which is a bare minimum restatement of the name. It does not disclose idempotency, side effects, rate limits, authentication requirements, or any behavioral traits beyond the obvious read operation. This is insufficient for a tool with no annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short: two sentences plus a param list. It is front-loaded with purpose. There is no wasted text, but the Args section is slightly meta and could be integrated. Overall, it is efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool simplicity (single resource by ID) and presence of output schema (so return values need not be explained), the description is reasonably complete. It identifies both parameters and one param's effect. However, it could mention the return schema scope or any prerequisites (e.g., must be a valid Spotify album ID).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It briefly explains market purpose ('affects availability/relinking'), adding value beyond the schema. However, album_id is described only as 'The Spotify ID of the album,' which adds little beyond the schema type and name. While helpful, it does not fully compensate for the missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Get details of a Spotify album by its ID.' This clearly communicates the action (retrieve), resource (album details), and identifier (ID). It distinguishes from sibling tools like get_albums (multiple albums) and get_album_tracks (tracks of an album).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you have an album ID and want details, and mentions that the market parameter affects availability. However, it does not explicitly state when to choose this over alternatives (e.g., get_albums for multiple IDs) or provide any exclusion criteria. The guidance is adequate but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_album_tracksA
Get tracks of a Spotify album.
Args:
album_id: The Spotify ID of the album.
limit: Maximum number of tracks to return (1-50, default 20).
offset: Index of the first track to return (default 0).
market: ISO 3166-1 alpha-2 country code.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| market | No | ||
| offset | No | ||
| album_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the parameters and their defaults (limit=20, offset=0) and constraints (limit 1-50, market as ISO code). No annotations exist, so the description carries the burden; it adequately conveys the read-only, paginated nature of the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a one-line summary followed by a clear parameter list. Every sentence adds value, no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, and the output schema exists (though not shown). The description covers inputs well but does not explicitly state that the response is a paginated list of tracks. Minor gap, but overall sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description fully explains each parameter: album_id as Spotify ID, limit with range and default, offset with default, market as ISO country code. This adds essential meaning beyond the schema's type-only definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get tracks of a Spotify album,' specifying the action and resource. It distinguishes from siblings like get_album (album metadata) and get_playlist_items (playlist tracks) by focusing on tracks of an album.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like get_album or get_playlist_items. The usage is implied by the name and description, but lacks explicit context or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_artistA
Get details of a Spotify artist by their ID.
Args:
artist_id: The Spotify ID of the artist.
| Name | Required | Description | Default |
|---|---|---|---|
| artist_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral details such as read-only nature, authentication requirements, or rate limits. It only states what the tool does, not its side effects or constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and to the point, but the inclusion of an 'Args:' block duplicates information already present in the schema. It is not wasteful, but the redundancy slightly reduces conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool has no annotations, low schema coverage, and an output schema that documents returns, the description should provide more context about authorization or limitations. It is insufficient for a complete understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema coverage is 0%, but the description adds meaningful context by explaining that 'artist_id' is 'The Spotify ID of the artist.' This helps the agent understand the parameter beyond the schema's title alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get details'), the resource ('a Spotify artist'), and the method ('by their ID'). It uniquely identifies the tool among siblings like get_album and get_track.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when an artist ID is available, but it does not explicitly state when to prefer this tool over alternatives like get_artist_albums. No guidance on when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_artist_albumsB
Get albums by a Spotify artist.
Args:
artist_id: The Spotify ID of the artist.
include_groups: Comma-separated album types: album, single, appears_on, compilation.
limit: Maximum number of albums to return (1-10, default 10).
offset: Index of the first album to return (default 0).
market: ISO 3166-1 alpha-2 country code.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| market | No | ||
| offset | No | ||
| artist_id | Yes | ||
| include_groups | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 does disclose pagination behavior (limit 1-10 with default 10, offset default 0) and the accepted include_groups values, but says nothing about authentication requirements, rate limits, or what appears_on results imply. It adds useful operational context but leaves notable behavioral gaps for a read 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose sentence is front-loaded and each Arg line earns its place. The Google-docstring formatting is slightly heavier than prose but contains no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-value documentation is unnecessary, and the description covers purpose, all five parameters, and pagination defaults. The main omission is guidance on how market and include_groups interact with results, which would help an agent call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must supply all parameter meaning, and it does: artist_id as the Spotify ID, include_groups enumerating album/single/appears_on/compilation, limit with range and default, offset as a start index, and market as an ISO 3166-1 alpha-2 code. Only the required/optional distinction is left implicit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb (Get) and resource (albums) scoped to a Spotify artist, which is clearly distinct from siblings like get_album (single album) and get_artist (artist metadata). It does not explicitly name those siblings, so differentiation 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to choose this tool over get_album, get_album_tracks, or get_artist. The Args block implies the kinds of filtering available, but nothing tells the agent which situations call for this endpoint or any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_audiobookB
Get details of a Spotify audiobook.
Args:
audiobook_id: The Spotify ID of the audiobook.
market: ISO 3166-1 alpha-2 country code.
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | ||
| audiobook_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states basic purpose. It fails to disclose read-only behavior, authentication needs, error conditions, or return format. For a retrieval tool, this is minimal disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the purpose, but includes unnecessary Python docstring formatting ('Args:'). Otherwise efficient, with no filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values are covered elsewhere. However, the description lacks context about optional behavior (e.g., market not required), error handling, or relationship to other tools. Adequate for a simple getter but could be richer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description adds meaningful context: 'The Spotify ID of the audiobook' for audiobook_id and 'ISO 3166-1 alpha-2 country code' for market. This compensates for missing schema descriptions and clarifies parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get details of a Spotify audiobook,' specifying the verb (Get), resource (details), and scope (a single audiobook). This distinguishes it from siblings like get_audiobooks (plural) and get_audiobook_chapters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 get_audiobooks for multiple audiobooks or get_audiobook_chapters for chapters. No context about prerequisites or common use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_audiobook_chaptersA
Get chapters of a Spotify audiobook.
Args:
audiobook_id: The Spotify ID of the audiobook.
limit: Maximum number of chapters to return (1-50, default 20).
offset: Index of the first chapter to return (default 0).
market: ISO 3166-1 alpha-2 country code.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| market | No | ||
| offset | No | ||
| audiobook_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. While 'Get' implies a read-only operation, the description does not explicitly state that it is non-destructive, nor does it disclose any additional behavioral traits like required authentication or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and uses a clear Args section structure. However, it includes the 'Args:' prefix which is typical for docstrings but adds a minor overhead. The information is well front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return values need no explanation. The description adequately covers the input parameters and basic behavior. However, it lacks context about the response structure or pagination in the output, which could be inferred from the output schema but isn't mentioned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description is essential. It adds concrete meaning to all parameters: audiobook_id (the Spotify ID), limit (1-50, default 20), offset (default 0), and market (ISO 3166-1 alpha-2 country code). This goes far beyond the schema's type-only definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a clear verb-noun phrase 'Get chapters of a Spotify audiobook,' specifying the exact resource and action. This distinguishes it from sibling tools like get_audiobook (which retrieves the audiobook itself) and get_chapters (which retrieves specific chapters by ID).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 get_chapters, which might be used to fetch specific chapters by ID. The context of pagination (limit, offset) is implied but not explicitly tied to usage scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_chapterA
Get details of a specific audiobook chapter.
Args:
chapter_id: The Spotify ID of the chapter.
market: ISO 3166-1 alpha-2 country code.
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | ||
| chapter_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 only states 'Get details' without disclosing rate limits, authentication needs, or what 'details' entail. This is insufficient for an agent to understand behavioral implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and front-loaded with the main purpose, but includes an Args section that largely repeats the schema information. While not verbose, it could be more concise by omitting redundant parameter lists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (not shown), the description does not need to explain return values. However, it lacks context about the scope of 'details' and any side effects. It is minimally adequate for a simple retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning to both parameters beyond the schema: chapter_id is described as 'The Spotify ID of the chapter' and market as 'ISO 3166-1 alpha-2 country code.' Since schema description coverage is 0%, this compensation is valuable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get details of a specific audiobook chapter,' which is a specific verb+resource combination. It distinguishes itself from sibling tools like get_album or get_track by targeting chapters, and from get_chapters (plural) by focusing on a single chapter.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a chapter ID is available, but provides no explicit guidance on when to use this tool vs alternatives like get_chapters or search. No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_currently_playingB
Get the currently playing track or episode.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Merely states 'get currently playing track or episode' without disclosing that it may return null if nothing is playing, or that it requires an active playback session. Lacks details on auth needs, error scenarios, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no wasted words. Efficiently communicates the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Has an output schema (not shown) but no requirement to describe returns. However, description lacks context about tool validity (e.g., requires active device, returns null if nothing playing). Does not compensate for missing annotations or usage guidance. Adequate but incomplete for a straightforward tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has zero parameters with 100% schema description coverage. Description does not add parameter info but none is needed. Baseline score is high for no-parameter tools, though description could clarify if optional context is implied (none evident).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool retrieves the currently playing track or episode. It is specific about the resource (currently playing item) and verb (get). However, it does not explicitly differentiate from the sibling tool 'get_playback_state', which provides broader playback status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 'get_playback_state'. Does not mention prerequisites (e.g., active playback, device) or when to expect null results. The description provides no usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_devicesA
Get the user's available Spotify devices.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description does not disclose any behavioral traits beyond the read operation. It fails to mention side effects, authentication needs, or return format details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of 5 words with no fluff. It is appropriately sized for a tool with no parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate for a simple retrieval tool but lacks context about what 'available' means and any prerequisites. An output schema exists, covering return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, so baseline 4 applies. The description does not need to add parameter information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (Get) and the resource (user's available Spotify devices). It distinguishes from sibling tools as no other tool retrieves devices.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving available devices but provides no explicit when-to-use or when-not-to-use guidance, nor does it mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_episodeA
Get details of a podcast episode.
Args:
episode_id: The Spotify ID of the episode.
market: ISO 3166-1 alpha-2 country code.
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | ||
| episode_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, and the description only says 'Get details' without disclosing any behavioral traits (e.g., authorization, rate limits, or error handling).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise with two bullet points, front-loaded, no extraneous words; every sentence serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Minimal but adequate for a simple lookup tool with an output schema; could benefit from explaining what 'details' include or behavior on missing episodes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the description adds context to parameters: 'episode_id' identified as Spotify ID, 'market' specified as ISO 3166-1 alpha-2 country code, which is valuable beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Get details of a podcast episode,' using a specific verb and resource, and distinguishes from sibling tool 'get_episodes' which retrieves multiple episodes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives, no prerequisites or contextual hints provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_followed_artistsA
Get the current user's followed artists. Cursor-paginated.
To follow or unfollow, use `save_to_library` / `remove_from_library` with Spotify URIs.
Args:
limit: Maximum number of artists to return (1-50, default 20).
after: Cursor (last artist ID from previous page) to fetch the next page.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses cursor-pagination and the semantics of the 'after' cursor, but omits auth/scope requirements, rate-limit behavior, and whether results are cached or scoped to the current user only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose in the first sentence, follows with pagination and alternative-tool guidance, then parameter details. The 'Args:' block is slightly redundant in format but every line carries real information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with an output schema (so return values need not be explained) and full parameter documentation, the description is essentially complete. Only auth/scope context is missing, a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: it documents both parameters fully, including the limit range (1-50) and default (20) plus the cursor's meaning (last artist ID from previous page). This is meaning beyond the bare schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Get the current user's followed artists'), which distinguishes it from sibling list tools like get_saved_albums and get_saved_tracks. It doesn't explicitly name a sibling it competes with, but the resource is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear routing guidance by naming the alternative tools (save_to_library / remove_from_library) for the follow/unfollow case, telling the agent when NOT to use this tool. It doesn't cover other conditions like empty-library edge cases, but the primary disambiguation is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_my_playlistsA
Get the current user's playlists.
Args:
limit: Maximum number of playlists to return (1-50, default 20).
offset: Index of the first playlist to return (default 0).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. The description adds value by explaining pagination parameters (limit range, offset meaning) but does not disclose authentication needs or that the operation is read-only, which is assumed from context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences and a clear parameter list. It is front-loaded with the purpose. Could be slightly more streamlined but effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, describing return values is optional. The description adequately covers pagination and parameter behavior. For a simple list operation, it is mostly complete but could mention that it returns a paginated list of playlists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries full burden. It explains limit's valid range (1-50) and default 20, and offset's default 0, adding significant meaning beyond the schema's type and default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get the current user's playlists', which is a specific verb+resource. It distinguishes from siblings like 'get_playlist' (specific playlist) and 'create_playlist'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives, such as 'get_playlist' for a single playlist or 'search' for non-owner playlists. The context is clear but lacks exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_my_profileA
Get the current user's Spotify profile.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description only states 'Get', implying a read operation but offering no details on authentication, rate limits, or other behavioral traits that an agent might need.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded, and contains no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and an existing output schema, the description is adequate, though it could briefly mention that the profile includes user-specific fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so the description doesn't need to add parameter info; baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get the current user's Spotify profile' uses a specific verb and resource, clearly distinguishing it from sibling tools that operate on albums, artists, playlists, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly states when to use the tool (when profile info is needed), but provides no explicit exclusions or alternative suggestions despite many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_my_top_itemsB
Get the current user's top artists or tracks.
Args:
item_type: Type of items: "artists" or "tracks" (default "tracks").
time_range: "short_term" (~4wk), "medium_term" (~6mo), or "long_term" (all time).
limit: Maximum number of items to return (1-50, default 20).
offset: Index of the first item to return (default 0).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| item_type | No | tracks | |
| time_range | No | medium_term |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description must disclose behavioral traits. It mentions no side effects, authentication needs, rate limits, or pagination behavior (though limit/offset are parameters). The description focuses on inputs, not outputs or behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a clear docstring-style parameter list. No wasted words, though the parameter descriptions could be more compact. Front-loaded purpose is clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, the description should cover behavioral context. It omits output description (though output schema exists), error handling, and edge cases. Adequate for a simple query tool but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description adds meaning: explains item_type options and defaults, time_range durations, limit range, and offset default. This compensates significantly for the lack of schema param descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves the current user's top artists or tracks, a specific verb+resource combination. It distinguishes from siblings like get_my_playlists and get_recently_played.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives. The description only lists parameters without explaining when each option is appropriate (e.g., when to use artists vs tracks, or different time ranges). No exclusions or usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_playback_stateA
Get the current playback state including track, device, and progress.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the tool retrieves playback state, which implies a read operation. However, with no annotations, it fails to provide additional behavioral details such as side effects, permissions needed, or response structure beyond the output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence (10 words) that is front-loaded with the core purpose. Every word is necessary and adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters, an output schema exists, and the description covers the key returned elements, the description is largely complete. However, it could be slightly improved by noting that it returns the full playback state versus just the current track (sibling 'get_currently_playing').
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters and is fully covered by the description (100% coverage). The description adds no parameter information, which is acceptable because no parameters exist. Baseline score of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('Get') and resource ('current playback state'), and specifies the included information (track, device, progress). It effectively distinguishes from siblings like 'get_currently_playing' which likely returns only the current track.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidelines are provided. The description does not indicate when to use this tool versus alternatives like 'get_currently_playing' or 'get_queue'. There is no mention of prerequisites, context, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_playlistA
Get details of a Spotify playlist.
Shows playlist metadata plus the first 20 tracks. For more tracks or
pagination, use `get_playlist_items`.
Args:
playlist_id: The Spotify ID of the playlist.
market: ISO 3166-1 alpha-2 country code; affects track availability.
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | ||
| playlist_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses the 20-track limit and implicitly indicates read-only behavior, but could mention OAuth requirements or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with purpose, then a critical limitation, and clear parameter explanations with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers essential aspects (purpose, behavior, parameters) and leverages the output schema for return values. Minor gap: default behavior of market parameter not explained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at 0%, the description fully explains both parameters: playlist_id as the Spotify ID and market as an ISO country code affecting track availability.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves Spotify playlist details, including metadata and first 20 tracks, and distinguishes it from the sibling get_playlist_items by noting the pagination limit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent when to use an alternative: 'For more tracks or pagination, use get_playlist_items', providing clear guidance for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_playlist_itemsB
Get items (tracks/episodes) in a playlist.
Args:
playlist_id: The Spotify ID of the playlist.
limit: Maximum number of items to return (1-50, default 20).
offset: Index of the first item to return (default 0).
market: ISO 3166-1 alpha-2 country code.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| market | No | ||
| offset | No | ||
| playlist_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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, yet it discloses nothing beyond the parameter list. It does not state that this is a read-only operation, whether authentication is required, how pagination terminates (total count), or rate-limit behavior. The limit/offset hints at paging but no actual behavioral trait is described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence followed by a clean per-argument list. It is appropriately sized with minimal waste, though the Args block is somewhat boilerplate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. For a simple read tool with no annotations, the description covers all four parameters but omits usage context and any behavioral disclosure, leaving it only minimally adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and it does: it defines playlist_id as a Spotify ID, gives limit's range (1-50) and default (20), offsets default (0), and market as an ISO 3166-1 alpha-2 country code. This adds real meaning the schema lacks, though it omits how market affects track availability/relinking.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (items in a playlist) and clarifies that items are tracks/episodes, which distinguishes it from the sibling get_playlist. It does not explicitly name or contrast any alternative tool, but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description never says when to use this tool versus alternatives like get_playlist, get_track, or search. There are no conditions, prerequisites, or exclusions given, leaving usage entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_queueB
Get the current playback queue.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It only states 'Get the current playback queue' without mentioning side effects, authentication requirements, or that it is a read-only operation. The agent cannot infer safety or prerequisites.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence (6 words) that is perfectly front-loaded. Every word is necessary and there is no extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and an output schema exists, the description is minimally adequate. However, it does not specify what constitutes the 'queue' (e.g., upcoming items vs. history) or any pagination, leaving room for ambiguity. It is complete enough for a simple tool but lacks depth compared to better examples.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Since there are no parameters, schema description coverage is 100%. The description does not add parameter meaning but the baseline of 3 is appropriate because the schema already covers everything. The description's mention of 'current' aligns with the tool name but provides no extra semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get the current playback queue.' clearly identifies the specific verb (Get) and resource (current playback queue). It distinguishes from siblings like get_currently_playing (current track) and get_playback_state (play/pause status) by naming a distinct resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as get_currently_playing or get_playback_state. The description does not differentiate usage context or specify exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recently_playedB
Get the user's recently played tracks.
Args:
limit: Maximum number of items to return (1-50, default 20).
after: Unix-ms cursor; return items played AFTER this timestamp.
before: Unix-ms cursor; return items played BEFORE this timestamp.
Only one of `after` / `before` may be set.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | ||
| limit | No | ||
| before | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must disclose behavioral traits. It only documents input parameters, omitting authentication requirements, rate limits, or behavior when no tracks exist. There is no explanation of the return structure, despite an output schema existing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a clear purpose sentence, followed by a structured parameter list. It is concise and well-organized, though it could be slightly shorter by omitting the 'Args' label since it's a docstring format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description need not detail return values. However, it lacks context about ordering, pagination, or typical use cases. For a simple list tool with three parameters, it is adequate but not fully enlightening.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds significant meaning beyond the schema: it specifies limit range (1-50), unit for after/before (Unix-ms cursor), and the constraint that only one cursor can be set. Schema descriptions are absent (0% coverage), so the description fully compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get the user's recently played tracks,' which is specific and uses a verb-object structure. It distinguishes from siblings like 'get_currently_playing' by focusing on history, but does not explicitly contrast with other getters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Parameter descriptions provide usage hints (e.g., limit range, mutual exclusivity of after/before), but there is no explicit guidance on when to use this tool versus alternatives like get_tracks or get_playlist_items.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_saved_albumsA
Get the current user's saved albums.
Args:
limit: Maximum number of albums to return (1-50, default 20).
offset: Index of the first album to return (default 0).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral disclosure. It does not mention any behavioral traits such as authentication requirements, read-only nature, or pagination behavior, beyond the basic get operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a single sentence and an Args section explaining the two parameters. Every part is useful and there is no extraneous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 optional parameters, no required params, has output schema), the description provides sufficient context. It could mention the return value, but the output schema likely covers that. Overall, it is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description adds meaning by specifying limits (1-50, default 20) and offset as index. This compensates for the lack of schema descriptions and helps agents use the parameters correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get the current user's saved albums', which is a specific verb+resource combination. It distinguishes from sibling tools like get_saved_tracks or get_saved_episodes by specifying 'albums'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for retrieving the current user's saved albums, providing clear context. However, it does not explicitly state when not to use it or mention alternatives, which would be beneficial given the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_saved_audiobooksA
Get the current user's saved audiobooks.
Args:
limit: Maximum number of audiobooks to return (1-50, default 20).
offset: Index of the first audiobook to return (default 0).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behavioral traits such as authentication requirements, error handling, or data freshness. It only describes the action and parameters, missing important context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loads the purpose, and includes parameter documentation without extraneous text. Every sentence is informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, an output schema exists, and the description covers the main action and pagination parameters. It could mention return format but is largely sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds concrete constraints (limit range 1-50, defaults) beyond the input schema which only has type and default values. This helps the agent understand valid inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('get') and resource ('saved audiobooks') with scope ('current user'), effectively distinguishing it from sibling tools like get_saved_albums or get_saved_tracks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives (e.g., get_audiobook for a single audiobook) or when not to use it. The description simply states what it does.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_saved_episodesA
Get the current user's saved episodes.
Args:
limit: Maximum number of episodes to return (1-50, default 20).
offset: Index of the first episode to return (default 0).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses pagination parameters (limit, offset) but does not mention authentication, rate limits, or the response format. With no annotations, this is adequate but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: two sentences and a parameter list. No wasted words, and the core purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the basic function and pagination, but lacks details on authentication, error cases, and how it compares to similar sibling tools. An output schema exists, so return values are not needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the description explains each parameter: limit (1-50, default 20) and offset (default 0). This adds meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get the current user's saved episodes', specifying the verb and resource. It differentiates from siblings like get_saved_tracks and get_saved_albums by targeting episodes specifically.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., get_saved_tracks or get_saved_shows). The agent must infer from the resource name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_saved_showsA
Get the current user's saved shows (podcasts).
Args:
limit: Maximum number of shows to return (1-50, default 20).
offset: Index of the first show to return (default 0).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It only states the basic function without disclosing behavioral traits like pagination behavior, authentication needs, or what happens when there are no saved shows. The existence of an output schema is noted but not described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: one line for purpose and two lines for parameters, front-loaded. Every sentence is necessary and no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of an output schema, return values need not be explained. The description covers purpose and parameters well, but lacks usage context. For a simple retrieval tool, this is largely sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description adds significant value by explaining 'limit' as max number (1-50, default 20) and 'offset' as index (default 0). This goes beyond the schema's type/default fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get the current user's saved shows (podcasts)' with a specific verb and resource. Among sibling tools like get_saved_albums, get_saved_audiobooks, etc., this distinguishes itself by targeting saved shows specifically.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 get_show or search. It does not mention prerequisites, typical scenarios, or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_saved_tracksA
Get the current user's saved tracks.
Args:
limit: Maximum number of tracks to return (1-50, default 20).
offset: Index of the first track to return (default 0).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context by documenting the limit and offset parameters, but does not explicitly state that the operation is read-only or require any special permissions. Without annotations, this is minimal but adequate for a simple retrieval.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: a single sentence plus parameter explanations. It is front-loaded with the primary action and contains no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool is a simple retrieval with an existing output schema, the description sufficiently covers the input parameters. It is adequate for the tool's complexity, though it could mention authentication requirements.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning beyond the input schema by explaining that limit is the maximum number of tracks (1-50) and offset is the index of the first track. This clarifies default values and constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get the current user's saved tracks' clearly states the verb (get), resource (saved tracks), and scope (current user). It distinguishes from sibling tools like get_saved_albums or get_saved_episodes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as get_playlist_items or get_my_playlists. There is no mention of prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_showA
Get details of a Spotify show (podcast).
Args:
show_id: The Spotify ID of the show.
market: ISO 3166-1 alpha-2 country code; affects availability.
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | ||
| show_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It mentions market affects availability, but lacks details on authentication, rate limits, or what 'details' includes (though output schema may cover return values).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: two clear sentences plus parameter descriptions. No redundant information, front-loaded with core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 2 parameters and an output schema, the description covers essential info. Lacks note on show_id format (e.g., alphanumeric), but otherwise complete for a detail endpoint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description compensates by explaining show_id as the Spotify ID and market as ISO country code affecting availability, adding meaning beyond raw schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states it gets details of a Spotify show (podcast), which is specific and distinguishes it from siblings like get_show_episodes (episodes) and get_shows (multiple shows).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs alternatives, though the name and description imply it for single show details. Siblings exist for other purposes but no comparison provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_show_episodesA
Get episodes of a Spotify show.
Args:
show_id: The Spotify ID of the show.
limit: Maximum number of episodes to return (1-50, default 20).
offset: Index of the first episode to return (default 0).
market: ISO 3166-1 alpha-2 country code.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| market | No | ||
| offset | No | ||
| show_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral traits. It only describes parameters (limit, offset, market) but does not disclose pagination behavior, error handling, authentication requirements, or what the response contains. The output schema exists but is not referenced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose statement and uses a structured Args list. It is concise but not elegantly minimal—the parameter descriptions could be integrated more succinctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values are not needed. Parameters are explained, but the description lacks context about tool behavior (e.g., what happens with invalid show_id or market filtering) and does not differentiate from sibling list tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description compensates well. It adds value beyond the schema by specifying the numeric range for limit (1-50), the fact that market is an ISO code, and the default values for limit and offset. The schema only had titles and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states "Get episodes of a Spotify show." which is a specific verb+resource. It distinguishes from sibling tools like get_show (which retrieves the show itself) and get_episode (single episode).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for listing episodes but provides no explicit guidance on when to use this tool versus alternatives like get_episode or get_show. No prerequisites or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_trackA
Get details of a Spotify track by its ID.
Args:
track_id: The Spotify ID of the track.
market: ISO 3166-1 alpha-2 country code; affects availability/relinking.
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | ||
| track_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It describes a read operation but does not explicitly state read-only nature, auth requirements, or rate limits. Adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences plus an Args section, front-loading the purpose. Every word earns its place with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only 2 parameters and an output schema present, the description fully covers tool purpose and parameter meanings. The output schema handles return values, so no further details needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description adds meaningful context: track_id is 'the Spotify ID of the track' and market includes its purpose and format. This compensates well for the schema's lack of description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (Get), resource (details of a Spotify track), and method (by its ID). It distinguishes from siblings like get_tracks (plural) and get_album.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains the market parameter's effect on availability/relinking, providing clear context. However, it does not explicitly mention when not to use this tool versus alternatives like get_tracks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
next_trackA
Skip to the next track.
Args:
device_id: ID of the device. If not provided, uses the active device.
| Name | Required | Description | Default |
|---|---|---|---|
| device_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided. The description does not disclose any behavioral traits such as side effects (e.g., stopping playback) or failure conditions (e.g., no next track). The burden is on the description, which is minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loads the action, and has no unnecessary words. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity (one optional parameter, output schema exists), the description is fairly complete. However, it lacks behavioral details like what happens if no next track or if playback is paused. Adequate but with gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains the device_id parameter well: 'ID of the device. If not provided, uses the active device.' This adds meaning beyond the schema default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Skip to the next track.' which is a specific verb+resource combination. It distinguishes itself from sibling tools like previous_track and play.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for skipping to the next track, but does not provide explicit when-to-use, when-not-to-use, or alternatives. Context is clear but lacks guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pauseB
Pause playback on the active device.
Args:
device_id: ID of the device to pause. If not provided, pauses the active device.
| Name | Required | Description | Default |
|---|---|---|---|
| device_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It does not disclose behavior when no active device exists, if already paused, or idempotency. The description merely restates the action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with front-loaded purpose and a clear parameter explanation. Could be slightly more structured (e.g., separate bullet for parameter), but no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool and presence of an output schema, the description suffices but lacks details on error scenarios or prerequisites. Minimum viable for a pause action.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning to the 'device_id' parameter beyond the schema, explaining its default behavior. With 0% schema coverage, this compensation is adequate, though it could mention format or validation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Pause playback on the active device', which is a specific verb and resource. It differentiates from sibling tools like 'play', 'next_track', and 'previous_track' by focusing on pausing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives (e.g., 'pause' vs 'stop' or other playback controls). There is no mention of prerequisites or context for use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playA
Start or resume playback.
Args:
device_id: ID of the device to play on. Uses active device if omitted.
context_uri: Spotify URI of context (album, artist, playlist).
uris: List of Spotify track URIs to play. E.g. ["spotify:track:xxx"].
offset_position: Position in the context to start playback (0-based index).
position_ms: Position in milliseconds to seek to.
| Name | Required | Description | Default |
|---|---|---|---|
| uris | No | ||
| device_id | No | ||
| context_uri | No | ||
| position_ms | No | ||
| offset_position | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must disclose behavioral traits. It fails to mention side effects like overwriting the queue, account requirements (e.g., premium), or error conditions such as no active device. The description only lists parameters without behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with the main action, and uses a structured bullet list for arguments. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description lacks completeness for a playback tool with 5 parameters and no annotations. It does not cover edge cases like simultaneous context_uri and uris, or failure scenarios. It is adequate but has clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema coverage is 0%, so the description carries the burden of explaining parameters. It provides clear explanations for each parameter, including an example for uris. However, it does not explain constraints like mutual exclusivity between context_uri and uris or the dependency of offset_position on context_uri.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Start or resume playback,' which is a specific verb+resource action. It distinguishes itself from sibling tools like pause, next_track, and previous_track by focusing on starting or resuming playback.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description lacks explicit guidance on when to use this tool versus alternatives. It does not mention when not to use it, such as when playback is already active or when other tools like transfer_playback might be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
previous_trackA
Skip to the previous track.
Args:
device_id: ID of the device. If not provided, uses the active device.
| Name | Required | Description | Default |
|---|---|---|---|
| device_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It only states the action without disclosing side effects, such as behavior at playlist boundaries or interaction with playback state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with a single sentence plus argument doc. No unnecessary words or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given low complexity, the description is minimally adequate. An output schema exists, so return values are covered, but behavioral context is lacking.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description adds the default behavior ('uses the active device'), providing marginal extra meaning. However, it essentially restates the schema parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Skip to the previous track,' specifying the verb and resource. It is unambiguous and distinguishes the tool from siblings like next_track.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the device_id parameter and default behavior but does not provide guidance on when to avoid using this tool or mention alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_from_libraryA
Remove items from the user's library, or unfollow artists, users, and playlists.
Auto-chunks at 40 URIs per request.
Args:
uris: Spotify URIs: track, album, episode, show, audiobook, artist, user, or
playlist (e.g. ["spotify:track:xxx", "spotify:playlist:yyy"]).
| Name | Required | Description | Default |
|---|---|---|---|
| uris | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 usefully discloses an operational trait — auto-chunking at 40 URIs per request — but omits behavior relevant to a destructive removal such as permission requirements, whether the action is reversible, or confirmation of side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and secondary scope, followed by the chunking note and parameter details. Reasonably tight with no obvious filler, though the Args formatting is slightly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. However, for a mutation tool with no annotations, the description does not cover permissions or reversibility, leaving behavioral context thinner than ideal.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: it enumerates the accepted URI types (track, album, episode, show, audiobook, artist, user, playlist) and gives concrete examples. This is a meaningful addition over the bare array-of-strings schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource plus a secondary scope: 'Remove items from the user's library, or unfollow artists, users, and playlists.' This distinguishes it in substance from the sibling remove_playlist_items (library vs. playlist), though it does not name that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it (removing library items / unfollowing) but offers no explicit when-to-use/when-not guidance or named alternative such as remove_playlist_items for playlist-level edits. Usage is inferable from siblings but not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_playlist_itemsA
Remove tracks or episodes from a playlist. Auto-chunks at 100 items per request.
Args:
playlist_id: The Spotify ID of the playlist.
uris: List of Spotify URIs to remove (e.g. ["spotify:track:xxx"]).
| Name | Required | Description | Default |
|---|---|---|---|
| uris | Yes | ||
| playlist_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses auto-chunking at 100 items per request, which is a key behavior. However, without annotations, it omits details like permission requirements, reversibility, or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: two sentences and an arg list. Each sentence adds value: action, auto-chunking, parameter explanations. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the core action and parameter meanings. Output schema exists so return details are not needed. Missing access requirements or ownership context, but otherwise complete for a simple removal tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description explains both parameters: playlist_id as 'The Spotify ID' and uris with example. Adds clarity beyond schema, but lacks format constraints or limits.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it removes tracks or episodes from a playlist, using specific verb 'remove' and resource 'playlist items'. Distinguishes from siblings like add_playlist_items and remove_from_library.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 such as remove_from_library or update_playlist. The description only states the action without context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reorder_playlist_itemsB
Reorder items in a playlist.
Args:
playlist_id: The Spotify ID of the playlist.
range_start: Position of the first item to be reordered.
insert_before: Position where the items should be inserted.
range_length: Number of items to reorder (default 1).
| Name | Required | Description | Default |
|---|---|---|---|
| playlist_id | Yes | ||
| range_start | Yes | ||
| range_length | No | ||
| insert_before | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as whether the operation is destructive, requires authentication, or has side effects. It only lists parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with a docstring format listing parameters without extra fluff. However, the initial sentence rephrases the tool name without adding new insight, and the structure could be more front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the moderate complexity (4 parameters, no annotations, output schema present but not described), the description lacks context on the effect of reordering, return value, and usage constraints. It is incomplete for effective agent invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description compensates with brief explanations for each parameter (e.g., 'Position of the first item to be reordered'). However, details like 0-indexing or valid ranges are missing, so only marginal added value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Reorder items in a playlist') and the resource ('playlist'). It distinguishes from sibling tools like add_playlist_items and remove_playlist_items.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., add_playlist_items, remove_playlist_items), nor any prerequisites or context-specific usage notes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_to_libraryA
Save items to the user's library, or follow artists, users, and playlists.
Auto-chunks at 40 URIs per request.
Args:
uris: Spotify URIs: track, album, episode, show, audiobook, artist, user, or
playlist (e.g. ["spotify:track:xxx", "spotify:artist:yyy"]).
| Name | Required | Description | Default |
|---|---|---|---|
| uris | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 does disclose a genuinely useful behavioral trait beyond the schema: auto-chunking at 40 URIs per request. However, it says nothing about required OAuth scopes, whether saving is idempotent, or side effects of following endpoints — gaps for an unannotated 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then the chunking constraint, then parameter detail. Every sentence carries information; the Args block is somewhat redundant with the schema but still short and readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation. But for an unannotated mutation tool with 0% schema coverage, the description omits auth requirements, error behavior, and idempotency — the auto-chunking note is the only behavioral detail. Adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and it largely does: it enumerates every accepted URI type (track, album, episode, show, audiobook, artist, user, playlist) and gives concrete examples. It could still note format expectations more assertively, but the added meaning over the bare 'array of strings' schema is substantial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: saving items to the user's library and following artists/users/playlists. It covers both behaviors clearly, though it does not explicitly distinguish itself from siblings like remove_from_library or check_saved_in_library beyond the obvious verb difference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the verb 'save' and the URI-type list, but there is no explicit when-to-use or when-not-to-use guidance relative to the many siblings (remove_from_library, add_playlist_items, check_saved_in_library). An agent can infer intent but gets no routing help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchA
Search for tracks, albums, artists, playlists, shows, episodes, or audiobooks on Spotify.
Args:
query: Search query. Supports filters: artist:, album:, track:, year:, genre:,
isrc: (track ISRC), upc: (album UPC). Use NOT/OR with quotes for refinement.
types: Comma-separated types: track, album, artist, playlist, show, episode, audiobook.
limit: Maximum results per type (1-10, default 10).
offset: Index of first result to return (default 0).
market: ISO 3166-1 alpha-2 country code to filter results.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| types | No | track | |
| market | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose useful constraints beyond the schema — the limit range (1-10) and default, the filter syntax for query, and the expected market format — but says nothing about rate limits, authentication, or result caps per type.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the one-line purpose, then a compact Args block, one line per parameter. No filler; every sentence carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described, and all five parameters are documented. It is nearly complete for a catalog search; only auth/rate-limit context is missing, which is minor given the fully documented parameter surface.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: every one of the five parameters is explained with meaning beyond the schema. The query filter operators (artist:, album:, track:, year:, genre:, isrc:, upc:, NOT/OR) and the limit range/default are especially valuable additions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("Search") and enumerates the searchable resources (tracks, albums, artists, playlists, shows, episodes, audiobooks), which is clearly distinct from the get_* siblings. It stops short of explicitly naming a sibling alternative, but the scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance and no routing to alternatives such as get_track or get_album for direct lookups. Usage is only implied by the resource enumeration; an agent gets no guidance on choosing search over the many lookup siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seekA
Seek to a position in the currently playing track.
Args:
position_ms: Position in milliseconds to seek to.
device_id: ID of the device. If not provided, uses the active device.
| Name | Required | Description | Default |
|---|---|---|---|
| device_id | No | ||
| position_ms | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It only states 'Seek to a position' without mentioning side effects, prerequisites (e.g., track must be playing), or error conditions. This is minimal disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a front-loaded main action followed by parameter details. Every sentence serves a purpose, and there is no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the description covers the main action and parameter meanings, it lacks context about prerequisites (e.g., an active track) and error handling. The presence of an output schema may mitigate missing return value info, but overall it is minimally viable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It adds clear semantics for both parameters: position_ms is 'Position in milliseconds' and device_id explains default behavior. This provides necessary meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Seek to a position in the currently playing track,' using a specific verb and resource. It distinguishes from sibling tools like next_track, previous_track, and play, as it focuses on arbitrary positioning within a track.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for seeking within the current track but does not explicitly state when to use it versus alternatives like next_track or previous_track. No 'when-not' or alternative conditions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_repeatA
Set the repeat mode for playback.
Args:
state: Repeat mode: "track", "context", or "off".
device_id: ID of the device. If not provided, uses the active device.
| Name | Required | Description | Default |
|---|---|---|---|
| state | Yes | ||
| device_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the burden. It mentions that device_id defaults to the active device, which is useful, but does not disclose other behavioral traits like authentication needs or side effects of changing repeat mode during playback.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the purpose, followed by parameter details. It is concise with no wasted words, though a more structured format (e.g., bullet points) could improve readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple setter tool, the description covers the essential parameter behavior. The output schema presumably documents return values, so the description is fairly complete, though it lacks details on the meaning of each repeat mode.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning beyond the schema by listing the allowed values for state (track, context, off) and explaining that device_id defaults to the active device. Since schema description coverage is 0%, this is valuable, though it could further explain what each mode does.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool sets the repeat mode for playback, with a specific verb and resource. It distinguishes from sibling tools like toggle_shuffle or set_volume by focusing solely on repeat.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, such as using toggle_shuffle for shuffle or other playback controls. No context about prerequisites like having an active device is mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_volumeA
Set the playback volume.
Args:
volume_percent: Volume level (0-100).
device_id: ID of the device. If not provided, uses the active device.
| Name | Required | Description | Default |
|---|---|---|---|
| device_id | No | ||
| volume_percent | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 adds the range (0-100) for volume_percent, which is not in the schema, and notes default device behavior, enhancing transparency beyond 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately short and front-loaded. The parameter list is clear, though some minor rewording could tighten it further.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple set tool with two parameters, the description is nearly complete. It covers both parameters and the basic action. However, it lacks return value details or error conditions, though the output schema may cover that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description fully explains both parameters: volume_percent with range 0-100, and device_id with default behavior. This adds critical meaning beyond the schema's bare types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Set the playback volume.' It uses a specific verb and resource, distinguishing it from sibling tools like 'pause', 'play', and 'next_track'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use versus alternatives is provided. The description explains what the tool does but does not offer context for when it should be preferred over other volume-related actions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toggle_shuffleA
Set or toggle shuffle mode for playback.
Args:
state: True to enable, False to disable. If omitted, flips the current state.
device_id: ID of the device. If not provided, uses the active device.
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | ||
| device_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the burden of behavioral transparency. It discloses that omitting the state parameter flips the current state, which is a key behavioral trait. It does not describe effects on playback or auth requirements, but for a shuffle toggle, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loading the main action in the first sentence, followed by a structured Args section. Every sentence adds value without redundancy. A small improvement could be merging the Args into a more natural flow.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool has only two optional parameters and a straightforward toggle behavior, the description covers the essential aspects. The presence of an output schema (if defined) reduces the need to describe return values. The description is complete for this tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description bears full responsibility for parameter semantics. It explains both parameters: state (boolean or null, with toggle behavior) and device_id (optional, uses active device if omitted). This adds significant meaning beyond the schema's type definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool sets or toggles shuffle mode for playback, using specific verbs and identifying the exact resource. It implicitly distinguishes from sibling tools like set_repeat and set_volume, which handle different playback settings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool (to enable, disable, or toggle shuffle), but does not explicitly mention when not to use it or provide alternative tools. However, given the clarity of the action and the lack of competing shuffle-focused tools, the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transfer_playbackA
Transfer playback to a different device.
Args:
device_id: ID of the device to transfer to.
play: Whether to start playing on the new device (default True).
| Name | Required | Description | Default |
|---|---|---|---|
| play | No | ||
| device_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully convey behavioral traits. It does not mention side effects (e.g., pausing previous device), authentication needs, or error cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and includes a docstring-style argument list. Every sentence adds value with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple transfer operation with an output schema, the description covers the basics but lacks details like return value or error behavior. It does not fully compensate for missing annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description adds basic meaning: device_id is 'ID of the device to transfer to', and play is 'Whether to start playing on the new device (default True)'. This is helpful but not rich.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly uses the verb 'transfer' and resource 'playback', and distinguishes from sibling tools like 'play' or 'pause'. It is not a tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool but provides no explicit guidance on alternatives or when not to use it. Given many sibling playback controls, more context would help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_playlistB
Update a playlist's name, description, or visibility.
Args:
playlist_id: The Spotify ID of the playlist.
name: New name for the playlist.
description: New description for the playlist.
public: Whether the playlist should be public.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| public | No | ||
| description | No | ||
| playlist_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It states 'Update' but does not disclose side effects (e.g., propagation to followers), required permissions, reversibility, or what happens when optional parameters are omitted. The output schema exists but is not described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with a single purpose sentence followed by a structured parameter list. Every line adds value with no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main updateable fields but lacks details on behavior when parameters are omitted, error scenarios, and output format. Given the presence of an output schema, the missing return value explanation is partially mitigated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description's Args list provides needed semantics (e.g., 'New name', 'Whether the playlist should be public'). However, it doesn't clarify that parameters are optional/nullable or any constraints like name length limits.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool updates a playlist's name, description, or visibility. It uses a specific verb ('Update') and resource, and distinguishes from sibling tools like create_playlist, get_playlist, and item manipulation tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 when to update playlist metadata vs using other playlist manipulation tools. No prerequisites or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoamiA
Diagnostic: show auth status, profile basics, active device, and configured scopes.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 indicates a read-only operation (showing info) but does not explicitly state it is non-destructive or mention authentication requirements. This is adequate but could be more explicit about safety.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no extraneous words. It front-loads the purpose ('Diagnostic') and concisely lists the outputs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has zero parameters and an output schema exists, the description adequately covers what the tool does by enumerating the displayed information. It is complete for a simple diagnostic tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description adds meaning by listing the types of information shown (auth status, profile, device, scopes), which is helpful beyond the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a diagnostic tool that shows auth status, profile basics, active device, and configured scopes. It uses a specific verb 'show' and defines the resources, distinguishing it from sibling tools focused on specific data retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description begins with 'Diagnostic', implying usage for checking authentication and profile state. It does not explicitly state when not to use or name alternatives, but the context is clear given the tool's aggregated output.
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.
13 tool updates
v0.3.0- Removed
check_following - Removed
follow_artists_or_users - Removed
follow_playlist - Removed
get_albums - Changed
get_artist_albums1 field changed- changed
Input schema / properties / limit / defaultPrevious value: -20New value: +10
- Removed
get_artists - Removed
get_audiobooks - Removed
get_chapters - Removed
get_episodes - Removed
get_shows - Removed
get_tracks - Removed
unfollow_artists_or_users - Removed
unfollow_playlist
28 tool updates
v0.2.0- Added
check_following - Added
follow_artists_or_users - Added
follow_playlist - Changed
get_album1 field changed- added
Input schema / properties / marketAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Market" +}
- Changed
get_album_tracks1 field changed- added
Input schema / properties / marketAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Market" +}
- Added
get_albums - Changed
get_artist_albums1 field changed- added
Input schema / properties / marketAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Market" +}
- Added
get_artists - Changed
get_audiobook1 field changed- added
Input schema / properties / marketAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Market" +}
- Changed
get_audiobook_chapters1 field changed- added
Input schema / properties / marketAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Market" +}
- Added
get_audiobooks - Changed
get_chapter1 field changed- added
Input schema / properties / marketAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Market" +}
- Added
get_chapters - Added
get_episode - Added
get_episodes - Added
get_followed_artists - Changed
get_playlist1 field changed- added
Input schema / properties / marketAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Market" +}
- Changed
get_playlist_items1 field changed- added
Input schema / properties / marketAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Market" +}
- Changed
get_recently_played2 fields changed- added
Input schema / properties / afterAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "After" +} - added
Input schema / properties / beforeAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Before" +}
- Changed
get_show1 field changed- added
Input schema / properties / marketAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Market" +}
- Changed
get_show_episodes1 field changed- added
Input schema / properties / marketAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Market" +}
- Added
get_shows - Changed
get_track1 field changed- added
Input schema / properties / marketAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Market" +}
- Added
get_tracks - Changed
toggle_shuffle4 fields changed- added
Input schema / properties / state / anyOfAdded value: +[ + { + "type": "boolean" + }, + { + "type": "null" + } +] - added
Input schema / properties / state / defaultAdded value: +null - removed
Input schema / properties / state / typeRemoved value: -"boolean" - removed
Input schema / requiredRemoved value: -[ - "state" -]
- Added
unfollow_artists_or_users - Added
unfollow_playlist - Added
whoami
44 tool updates
v0.1.1- First observed
add_playlist_items - First observed
add_to_queue - First observed
check_saved_in_library - First observed
create_playlist - First observed
get_album - First observed
get_album_tracks - First observed
get_artist - First observed
get_artist_albums - First observed
get_audiobook - First observed
get_audiobook_chapters - First observed
get_chapter - First observed
get_currently_playing - First observed
get_devices - First observed
get_my_playlists - First observed
get_my_profile - First observed
get_my_top_items - First observed
get_playback_state - First observed
get_playlist - First observed
get_playlist_items - First observed
get_queue - First observed
get_recently_played - First observed
get_saved_albums - First observed
get_saved_audiobooks - First observed
get_saved_episodes - First observed
get_saved_shows - First observed
get_saved_tracks - First observed
get_show - First observed
get_show_episodes - First observed
get_track - First observed
next_track - First observed
pause - First observed
play - First observed
previous_track - First observed
remove_from_library - First observed
remove_playlist_items - First observed
reorder_playlist_items - First observed
save_to_library - First observed
search - First observed
seek - First observed
set_repeat - First observed
set_volume - First observed
toggle_shuffle - First observed
transfer_playback - First observed
update_playlist
TDQS
Scored across 47 tools
Tools target distinct resources and actions, but there are minor overlaps: get_playlist vs get_playlist_items and get_playback_state vs get_currently_playing could be confused, though descriptions clarify the differences.
Mostly consistent snake_case with verb_noun (get_track, add_playlist_items), but some tools are single imperatives (play, pause, search) or use an adjective_noun form (next_track), slightly breaking the pattern.
With 47 tools, the server far exceeds the recommended 3-15 range and crosses the 25+ threshold for 'too many', making it heavy and potentially overwhelming despite the broad Spotify domain.
Core CRUD for playlists, library, and playback is covered, but notable gaps remain such as no delete_playlist and no access to recommendations, audio features, or artist top tracks—minor omissions agents can work around.
Maintenance
Related MCP Connectors
Generate AI music via the Lacuna Music API from MCP clients like Claude Desktop & Code.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
MCP server for Producer/Riffusion AI music generation
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that enables AI assistants like Claude to interact with Spotify, allowing them to search for tracks, control playback, and manage playlists.1-
- FlicenseAqualityDmaintenanceA Model Context Protocol server that enables AI assistants like Claude Desktop to interact with Spotify's music streaming service, supporting playback control, playlist management, music search, and user profile access.412-
- FlicenseNot gradedqualityDmaintenanceA FastMCP server that exposes Spotify's catalog and user context as tools for Claude, enabling track search, audio features, artist discography, recommendations, currently playing, and playlist creation.-
- FlicenseAqualityDmaintenanceA lightweight MCP server that enables AI assistants like Cursor and Claude to control Spotify playback, playlists, and manage tokens via OAuth.152-