Spotify MCP Server
Ein leichtgewichtiger Model Context Protocol (MCP) -Server, der es KI-Assistenten wie Cursor und Claude ermöglicht, die Spotify-Wiedergabe zu steuern und Wiedergabelisten zu verwalten.
Beispielinteraktionen
„Spielen Sie Elvis‘ erstes Lied“
„Erstellen Sie eine Taylor Swift / Slipknot Fusion-Playlist“
„Kopiere alle Techno-Tracks aus meiner Workout-Playlist in meine Arbeits-Playlist.“
Related MCP server: Vulpes Spotify MCP Server
Werkzeuge
Lesevorgänge
SucheSpotify
Beschreibung : Suche nach Titeln, Alben, Künstlern oder Playlists auf Spotify
Parameter :
query(string): Der Suchbegrifftype(Zeichenfolge): Typ des zu suchenden Elements (Titel, Album, Interpret, Wiedergabeliste)limit(Zahl, optional): Maximale Anzahl der zurückzugebenden Ergebnisse (10-50)
Rückgaben : Liste der übereinstimmenden Artikel mit ihren IDs, Namen und zusätzlichen Details
Beispiel :
searchSpotify("bohemian rhapsody", "track", 20)
getNowPlaying
Beschreibung : Erhalten Sie Informationen zum aktuell wiedergegebenen Titel auf Spotify
Parameter : Keine
Gibt zurück : Objekt mit Titelname, Künstler, Album, Wiedergabefortschritt, Dauer und Wiedergabestatus
Beispiel :
getNowPlaying()
getMyPlaylists
Beschreibung : Holen Sie sich eine Liste der Playlists des aktuellen Benutzers auf Spotify
Parameter :
limit(Zahl, optional): Maximale Anzahl der zurückzugebenden Wiedergabelisten (Standard: 20)offset(Zahl, optional): Index der ersten zurückzugebenden Wiedergabeliste (Standard: 0)
Gibt zurück : Array von Wiedergabelisten mit ihren IDs, Namen, Titelanzahl und öffentlichem Status
Beispiel :
getMyPlaylists(10, 0)
getPlaylistTracks
Beschreibung : Rufen Sie eine Liste der Titel in einer bestimmten Spotify-Wiedergabeliste ab
Parameter :
playlistId(Zeichenfolge): Die Spotify-ID der Playlistlimit(Zahl, optional): Maximale Anzahl der zurückzugebenden Titel (Standard: 100)offset(Zahl, optional): Index des ersten zurückzugebenden Titels (Standard: 0)
Gibt zurück : Array von Titeln mit ihren IDs, Namen, Künstlern, Alben, Dauer und Hinzufügungsdatum
Beispiel :
getPlaylistTracks("37i9dQZEVXcJZyENOWUFo7")
getRecentlyPlayed
Beschreibung : Ruft eine Liste der zuletzt abgespielten Titel von Spotify ab.
Parameter :
limit(Zahl, optional): Eine Zahl, die die maximale Anzahl der zurückzugebenden Titel angibt.
Rückgabewert : Wenn Titel gefunden werden, wird eine formatierte Liste der zuletzt abgespielten Titel zurückgegeben, andernfalls die Meldung: „Sie haben keine zuletzt abgespielten Titel auf Spotify.“
Beispiel :
getRecentlyPlayed({ limit: 10 })
getRecentlyPlayed
Beschreibung : Ruft eine Liste der zuletzt abgespielten Titel von Spotify ab.
Parameter :
limit(Zahl, optional): Eine Zahl, die die maximale Anzahl der zurückzugebenden Titel angibt.
Rückgabewert : Wenn Titel gefunden werden, wird eine formatierte Liste der zuletzt abgespielten Titel zurückgegeben, andernfalls die Meldung: „Sie haben keine zuletzt abgespielten Titel auf Spotify.“
Beispiel :
getRecentlyPlayed({ limit: 10 })
Operationen abspielen/erstellen
Musik abspielen
Beschreibung : Starten Sie die Wiedergabe eines Titels, Albums, Künstlers oder einer Playlist auf Spotify
Parameter :
uri(Zeichenfolge, optional): Spotify-URI des abzuspielenden Elements (überschreibt Typ und ID)type(Zeichenfolge, optional): Typ des abzuspielenden Elements (Titel, Album, Interpret, Wiedergabeliste)id(Zeichenfolge, optional): Spotify-ID des abzuspielenden ElementsdeviceId(Zeichenfolge, optional): ID des Geräts, auf dem abgespielt werden soll
Rückgabe : Erfolgsstatus
Beispiel :
playMusic({ uri: "spotify:track:6rqhFgbbKwnb9MLmUQDhG6" })Alternative :
playMusic({ type: "track", id: "6rqhFgbbKwnb9MLmUQDhG6" })
PauseWiedergabe
Beschreibung : Pausieren Sie den aktuell wiedergegebenen Titel auf Spotify
Parameter :
deviceId(Zeichenfolge, optional): ID des anzuhaltenden Geräts
Rückgabe : Erfolgsstatus
Beispiel :
pausePlayback()
skipToNext
Beschreibung : Zum nächsten Titel in der aktuellen Wiedergabewarteschlange springen
Parameter :
deviceId(Zeichenfolge, optional): ID des Geräts
Rückgabe : Erfolgsstatus
Beispiel :
skipToNext()
skipToPrevious
Beschreibung : Zum vorherigen Titel in der aktuellen Wiedergabewarteschlange springen
Parameter :
deviceId(Zeichenfolge, optional): ID des Geräts
Rückgabe : Erfolgsstatus
Beispiel :
skipToPrevious()
Playlist erstellen
Beschreibung : Erstellen Sie eine neue Playlist auf Spotify
Parameter :
name(string): Name für die neue Playlistdescription(Zeichenfolge, optional): Beschreibung für die Wiedergabelistepublic(boolesch, optional): Ob die Playlist öffentlich sein soll (Standard: false)
Gibt zurück : Objekt mit der ID und URL der neuen Wiedergabeliste
Beispiel :
createPlaylist({ name: "Workout Mix", description: "Songs to get pumped up", public: false })
Titel zur Wiedergabeliste hinzufügen
Beschreibung : Titel zu einer vorhandenen Spotify-Wiedergabeliste hinzufügen
Parameter :
playlistId(Zeichenfolge): ID der WiedergabelistetrackUris(Array): Array von hinzuzufügenden Track-URIs oder IDsposition(Zahl, optional): Position zum Einfügen von Titeln
Gibt zurück : Erfolgsstatus und Snapshot-ID
Beispiel :
addTracksToPlaylist({ playlistId: "3cEYpjA9oz9GiPac4AsH4n", trackUris: ["spotify:track:4iV5W9uYEdYUVa79Axb7Rh"] })
Zur Warteschlange hinzufügen
Beschreibung : Fügt der aktuellen Wiedergabewarteschlange einen Titel, ein Album, einen Künstler oder eine Wiedergabeliste hinzu
Parameter :
uri(Zeichenfolge, optional): Spotify-URI des Elements, das zur Warteschlange hinzugefügt werden soll (überschreibt Typ und ID)type(Zeichenfolge, optional): Typ des in die Warteschlange einzureihenden Elements (Titel, Album, Interpret, Wiedergabeliste)id(Zeichenfolge, optional): Spotify-ID des in die Warteschlange einzureihenden ElementsdeviceId(Zeichenfolge, optional): ID des Geräts, auf dem die Warteschlange eingerichtet werden soll
Rückgabe : Erfolgsstatus
Beispiel :
addToQueue({ uri: "spotify:track:6rqhFgbbKwnb9MLmUQDhG6" })Alternative :
addToQueue({ type: "track", id: "6rqhFgbbKwnb9MLmUQDhG6" })
Aufstellen
Voraussetzungen
Node.js v16+
Ein Spotify Premium-Konto
Eine registrierte Spotify-Entwickleranwendung
Installation
git clone https://github.com/marcelmarais/spotify-mcp-server.git
cd spotify-mcp-server
npm install
npm run buildErstellen einer Spotify-Entwickleranwendung
Gehen Sie zum Spotify Developer Dashboard
Melden Sie sich mit Ihrem Spotify-Konto an
Klicken Sie auf die Schaltfläche „App erstellen“
Geben Sie den App-Namen und die Beschreibung ein
Akzeptieren Sie die Servicebedingungen und klicken Sie auf „Erstellen“.
Im Dashboard Ihrer neuen App sehen Sie Ihre Client-ID
Klicken Sie auf „Client Secret anzeigen“, um Ihr Client Secret anzuzeigen
Klicken Sie auf „Einstellungen bearbeiten“ und fügen Sie eine Umleitungs-URI hinzu (z. B.
http://localhost:8888/callback).Speichern Sie Ihre Änderungen
Spotify-API-Konfiguration
Erstellen Sie eine Datei spotify-config.json im Projektstamm (Sie können das bereitgestellte Beispiel kopieren und ändern):
# Copy the example config file
cp spotify-config.example.json spotify-config.jsonBearbeiten Sie dann die Datei mit Ihren Anmeldeinformationen:
{
"clientId": "your-client-id",
"clientSecret": "your-client-secret",
"redirectUri": "http://localhost:8888/callback"
}Authentifizierungsprozess
Die Spotify-API verwendet OAuth 2.0 zur Authentifizierung. Führen Sie die folgenden Schritte aus, um Ihre Anwendung zu authentifizieren:
Führen Sie das Authentifizierungsskript aus:
npm run authDas Skript generiert eine Autorisierungs-URL. Öffnen Sie diese URL in Ihrem Webbrowser.
Sie werden aufgefordert, sich bei Spotify anzumelden und Ihre Anwendung zu autorisieren.
Nach der Autorisierung leitet Spotify Sie mit einem Codeparameter in der URL zu Ihrer angegebenen Weiterleitungs-URI weiter.
Das Authentifizierungsskript tauscht diesen Code automatisch gegen Zugriffs- und Aktualisierungstoken aus.
Diese Token werden in Ihrer Datei
spotify-config.jsongespeichert, die nun ungefähr so aussieht:
{
"clientId": "your-client-id",
"clientSecret": "your-client-secret",
"redirectUri": "http://localhost:8888/callback",
"accessToken": "BQAi9Pn...kKQ",
"refreshToken": "AQDQcj...7w",
"expiresAt": 1677889354671
}Der Server aktualisiert das Zugriffstoken bei Bedarf automatisch mithilfe des Aktualisierungstokens.
Integration mit Claude Desktop, Cursor und VsCode über die Cline-Modellerweiterung
Um Ihren MCP-Server mit Claude Desktop zu verwenden, fügen Sie ihn Ihrer Claude-Konfiguration hinzu:
{
"mcpServers": {
"spotify": {
"command": "node",
"args": ["spotify-mcp-server/build/index.js"]
}
}
}Für den Cursor wechseln Sie in den Cursor Settings zur Registerkarte MCP (Befehl + Umschalt + J). Fügen Sie mit diesem Befehl einen Server hinzu:
node path/to/spotify-mcp-server/build/index.jsUm Ihr MCP korrekt mit Cline einzurichten, stellen Sie sicher, dass Sie den folgenden Dateikonfigurationssatz cline_mcp_settings.json haben:
{
"mcpServers": {
"spotify": {
"command": "node",
"args": ["~/../spotify-mcp-server/build/index.js"],
"autoApprove": ["getListeningHistory", "getNowPlaying"]
}
}
}Sie können dem Array für die automatische Genehmigung zusätzliche Tools hinzufügen, um die Tools ohne Eingriff auszuführen.
Available Tools
22 toolsaddToQueueA
Adds a track, album, artist or playlist to the playback queue
| Name | Required | Description | Default |
|---|---|---|---|
| uri | No | The Spotify URI to play (overrides type and id) | |
| type | No | The type of item to play | |
| id | No | The Spotify ID of the item to play | |
| deviceId | No | The Spotify device ID to add the track to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility for behavioral disclosure. It states the action ('adds') but does not clarify whether items are appended to the queue, whether an active device is required, what occurs if the item is unavailable, or any side effects. This lack of detail is a significant gap 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 a single concise sentence that front-loads the verb and resource. Every word contributes meaning; there is zero waste or repetition.
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, the description is adequate for basic understanding. However, with no output schema or annotations, it lacks important operational context such as prerequisites (active device), whether the operation replaces or appends to the queue, and error behavior. This leaves room for ambiguity in real-world usage.
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 provides complete descriptions for all four parameters (100% coverage), so the baseline is 3. The description adds no extra semantics beyond referencing the item types, which aligns with the 'type' enum. It does not clarify the relationship between id, uri, and type, but the schema already handles that adequately.
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 uses a specific verb 'Adds' and identifies the exact resource 'playback queue', while also enumerating the accepted item types (track, album, artist, playlist). This clearly distinguishes it from sibling tools like addTracksToPlaylist (which targets a playlist) and playMusic (which initiates 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 implies the use case: when you want to place an item into the playback queue rather than playing it immediately or adding to a playlist. However, it does not explicitly state when to prefer this tool over siblings like playMusic or addTracksToPlaylist, nor does it mention any prerequisites such as an active device.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
addTracksToPlaylistC
Add tracks to a Spotify playlist
| Name | Required | Description | Default |
|---|---|---|---|
| playlistId | Yes | The Spotify ID of the playlist | |
| trackIds | Yes | Array of Spotify track IDs to add | |
| position | No | Position to insert the tracks (0-based index) |
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 of behavioral disclosure. The text merely paraphrases the tool name without revealing side effects, authentication requirements, or post-conditions (e.g., whether tracks are appended or replaced). It does not add value beyond what the name already implies.
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 filler or redundant text. It is front-loaded with the core action, making it efficient and easy to parse for an AI agent.
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?
This is a mutation tool with no annotations, no output schema, and a minimal description. It fails to communicate important contextual details such as whether the operation is idempotent, duplicate handling, limits on track count, or required permissions. The description is under-specified for reliable tool selection and 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 description coverage is 100%, with each parameter (playlistId, trackIds, position) having a clear description. The tool description adds nothing extra about parameter usage, but the schema already provides sufficient meaning, so the baseline of 3 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 clearly states the tool's action ('Add tracks') and resource ('a Spotify playlist'), using a specific verb+resource structure. It is distinct from sibling tools like addToQueue or createPlaylist, which target different operations.
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 addToQueue or createPlaylist. The description lacks any context about prerequisites, sequencing, or preferred scenarios, offering zero actionable usage advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
adjustVolumeA
Adjust the playback volume up or down by a relative amount. Use positive values to increase, negative to decrease. Requires Spotify Premium.
| Name | Required | Description | Default |
|---|---|---|---|
| adjustment | Yes | The amount to adjust volume by (-100 to 100). Positive increases, negative decreases. | |
| deviceId | No | The Spotify device ID to adjust volume on |
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 discloses key behavioral traits: the relative adjustment mechanism (positive/negative values) and the Spotify Premium requirement. However, it doesn't mention side effects (e.g., whether it affects playback state), error conditions (e.g., invalid deviceId), or response format. It adds value beyond the schema but leaves gaps in 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 appropriately sized and front-loaded: the first sentence states the core purpose, followed by concise usage notes. Every sentence adds value (directionality and Premium requirement) with zero waste. It's efficiently structured for quick comprehension.
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 moderate complexity (2 parameters, no output schema, no annotations), the description is somewhat complete but has gaps. It covers the basic operation and Premium requirement but lacks details on behavioral outcomes (e.g., what happens on success/failure) and doesn't leverage context from siblings (e.g., contrasting with 'setVolume'). It's adequate but could be more comprehensive for a mutation 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?
Schema description coverage is 100%, so the schema fully documents both parameters. The description adds minimal semantic context: it clarifies the meaning of positive/negative values for 'adjustment' but doesn't provide additional insights beyond what's in the schema (e.g., typical usage ranges or deviceId sourcing). With high schema coverage, the baseline is 3, and the description meets this without significant enhancement.
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 purpose: 'Adjust the playback volume up or down by a relative amount.' It specifies the verb ('adjust') and resource ('playback volume'), and distinguishes it from sibling tools like 'setVolume' by indicating relative adjustment rather than absolute setting. However, it doesn't explicitly contrast with 'setVolume' beyond the 'relative amount' phrasing.
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 some usage context: 'Use positive values to increase, negative to decrease. Requires Spotify Premium.' This implies when to use it (for relative volume changes with Premium) but doesn't explicitly state when to choose this over alternatives like 'setVolume' or mention prerequisites beyond Premium. It offers basic guidance but lacks explicit comparison or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
checkUsersSavedAlbumsC
Check if albums are saved in the user's "Your Music" library
| Name | Required | Description | Default |
|---|---|---|---|
| albumIds | Yes | Array of Spotify album IDs to check (max 20) |
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 of behavioral disclosure. It states the tool checks saved albums but doesn't reveal key behaviors such as authentication requirements, rate limits, response format, or error handling. For a read operation with zero annotation coverage, this is a significant gap in transparency.
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, efficient sentence that directly states the tool's purpose without any wasted words. It's front-loaded and appropriately sized for its function, making it easy for an agent to parse quickly.
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 lack of annotations and output schema, the description is incomplete. It doesn't cover behavioral aspects like authentication, rate limits, or response format, which are crucial for a tool interacting with a user's library. For a tool with no structured metadata, more context is needed to be fully helpful.
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 doesn't add any parameter semantics beyond what the input schema provides. Since schema description coverage is 100%, the schema already fully documents the 'albumIds' parameter (array of Spotify album IDs, max 20). The baseline score of 3 is appropriate as the description doesn't compensate but the schema handles the documentation adequately.
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 ('Check if albums are saved') and the resource ('user's "Your Music" library'), making the purpose immediately understandable. However, it doesn't explicitly distinguish this tool from sibling tools like 'getUsersSavedTracks' or 'saveOrRemoveAlbumForUser', which would require more specific differentiation to earn a 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?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'getUsersSavedTracks' (which retrieves saved tracks) or 'saveOrRemoveAlbumForUser' (which modifies saved albums), nor does it specify prerequisites or contexts for use, leaving the agent without usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createPlaylistB
Create a new playlist on Spotify
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the playlist | |
| description | No | The description of the playlist | |
| public | No | Whether the playlist should be public |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description is the sole source of behavioral information. It only says 'Create a new playlist', which implies mutation but does not disclose side effects, permission requirements, or behavior on duplicate names. No additional context is provided.
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, direct sentence that immediately conveys the tool's function. It is appropriately sized and front-loaded, containing no unnecessary words or repetitions.
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 create operation with fully documented parameters, the description is minimally adequate. However, it lacks any reference to return values or usage context, and the absence of an output schema increases the burden on the description to explain the outcome.
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 provides 100% coverage for all three parameters (name, public, description) with clear descriptions. The tool description adds no extra semantic value beyond the schema, so it earns the baseline score.
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 ('Create') and the resource ('a new playlist on Spotify'), which distinguishes it from sibling tools like updatePlaylist. However, it does not enumerate the configurable fields, so it's not as detailed as it could be.
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 explicit guidance on when to use this tool versus alternatives such as updatePlaylist or addTracksToPlaylist. It also omits any prerequisites or exclusions, leaving the usage context entirely implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getAlbumsC
Get detailed information about one or more albums by their Spotify IDs
| Name | Required | Description | Default |
|---|---|---|---|
| albumIds | Yes | A single album ID or array of album IDs (max 20) |
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 of behavioral disclosure. It states it 'gets detailed information' but doesn't specify what details are included (e.g., artist, release date, tracks), whether it requires authentication, rate limits, or error handling. This leaves significant gaps for a tool with no 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 description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded, making it easy to parse quickly.
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 annotations and no output schema, the description is incomplete for a tool that likely returns complex album data. It doesn't explain what 'detailed information' includes, response format, or error cases, leaving the agent with insufficient context to use the tool effectively.
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 100%, with the schema fully documenting the 'albumIds' parameter as a single ID or array (max 20). The description adds minimal value beyond this by mentioning 'one or more albums by their Spotify IDs', which aligns with but doesn't expand on the schema. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get detailed information') and resource ('about one or more albums by their Spotify IDs'), making the purpose specific and understandable. However, it doesn't explicitly differentiate from sibling tools like 'getAlbumTracks' or 'checkUsersSavedAlbums', which prevents a perfect score.
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 doesn't mention when to use 'getAlbums' over 'getAlbumTracks' (which retrieves tracks within albums) or 'checkUsersSavedAlbums' (which checks user's saved status), nor does it specify prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getAlbumTracksC
Get tracks from a specific album with pagination support
| Name | Required | Description | Default |
|---|---|---|---|
| albumId | Yes | The Spotify ID of the album | |
| limit | No | Maximum number of tracks to return (1-50) | |
| offset | No | Offset for pagination (0-based index) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions 'pagination support', which is useful, but lacks details on permissions, rate limits, error handling, or response format. For a read operation with no annotation coverage, this leaves significant gaps in understanding how the tool behaves.
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, efficient sentence that directly states the tool's function and key feature (pagination). It is front-loaded with the core purpose and avoids any unnecessary words, making it highly concise 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 complexity of a read operation with pagination, no annotations, and no output schema, the description is incomplete. It doesn't explain what the return values look like (e.g., track list format), error conditions, or authentication needs, leaving the agent with insufficient context for reliable use.
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 100% description coverage, clearly documenting all parameters (albumId, limit, offset). The description adds no additional meaning beyond what the schema provides, such as examples or edge cases, so it meets the baseline for high schema coverage without enhancing parameter understanding.
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') and resource ('tracks from a specific album'), making the purpose understandable. However, it doesn't explicitly differentiate from sibling tools like 'getAlbums' or 'getPlaylistTracks', which also retrieve music content, so it misses full sibling distinction.
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. For example, it doesn't mention when to choose this over 'getAlbums' for album details or 'searchSpotify' for broader track searches, leaving the agent without contextual usage cues.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getAvailableDevicesB
Get information about the user's available Spotify Connect devices
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing behavioral traits. 'Get information' implies a read-only operation, but it doesn't state whether authentication is required, whether it triggers any side effects (e.g., device discovery), or what specific data is returned. This is minimal disclosure, leaving the agent to infer safety and 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?
The description is a single, clear sentence that front-loads the verb and resource. Every word earns its place, with no unnecessary detail or repetition. This is ideal conciseness for a straightforward getter tool.
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 no output schema, so the description should explain what information is returned and in what form. It only says 'information about devices' without specifying that it returns a list of device objects, their IDs, names, or current status. This is a significant gap for an agent trying to use the results effectively, especially given sibling tools that likely require device IDs.
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, so the baseline is 4. The description doesn't need to explain parameter semantics since none exist. It adds no parameter-specific information, but this is not a deficiency given the tool's parameterless nature.
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 returns information about Spotify Connect devices, which is a specific verb+resource. It implicitly distinguishes from sibling tools like playback controls and playlist management, though it doesn't explicitly differentiate itself. The phrase 'get information' is slightly vague but conveys the core action effectively.
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 or which alternatives exist. There is no mention of using it before playback commands (e.g., to get device IDs for playMusic) or any context on how it fits into a workflow. The description simply states the function without any usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getMyPlaylistsB
Get a list of the current user's playlists on Spotify
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of playlists to return (1-50) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must explain behavior. It only states 'current user's playlists' but omits pagination limits, required scopes, and response structure.
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, straightforward sentence that delivers the core purpose without any extraneous words. It is appropriately sized for a simple tool.
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 no output schema and no annotations, leaving the description as the sole context. It fails to mention that the result is an array of playlist objects or how the limit parameter affects paging, making it insufficient for agents needing detailed context.
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 provides full documentation for the single 'limit' parameter, including type, min, max, and description. Since the schema coverage is 100%, the description does not need to add parameter details, and it adds none, so a baseline score of 3 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 specifies the verb 'Get', the resource 'list of playlists', and the scope 'current user's', which distinguishes it from sibling tools like getPlaylist (singular). It unambiguously states what the tool does.
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 guidance is provided. The description does not mention alternatives or when to choose this over getPlaylist, so an agent receives no selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getNowPlayingA
Get information about the currently playing track on Spotify, including device and volume info
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden for behavioral disclosure. It reveals that the tool returns track information plus device and volume info, but does not mention edge cases such as what occurs when nothing is playing or whether the operation is read-only. This is a basic disclosure without significant 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 a single, front-loaded sentence with no filler or redundant details. It includes the key resource and specific extra info (device and volume), making it concise 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?
For a parameterless getter tool, the description provides core functionality and specific return details (device and volume). Without an output schema, it could be more explicit about what constitutes 'information' (e.g., artist, progress, timestamps), but it is largely complete for simple usage.
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 shows zero parameters, and the schema description coverage is trivially 100%. The description does not need to elaborate on parameters. The baseline for a zero-parameter tool is 4, and the description adds no unnecessary 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 tool retrieves the currently playing track on Spotify, using 'Get' as a specific verb and 'currently playing track' as a specific resource. It also adds device and volume info, distinguishing it from sibling tools like getQueue or getRecentlyPlayed.
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 need now-playing information, but it does not explicitly state when to use it versus alternatives or mention any exclusions. No alternative tools are referenced, so guidance is minimal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getPlaylistTracksB
Get a list of tracks in a Spotify playlist
| Name | Required | Description | Default |
|---|---|---|---|
| playlistId | Yes | The Spotify ID of the playlist | |
| limit | No | Maximum number of tracks to return (1-50) | |
| offset | No | Offset for pagination (0-based index) |
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 says 'Get a list of tracks' without explaining pagination (offset/limit), return structure, whether tracks are full objects or references, authentication needs, or error behavior. This is a minimal read operation but lacks 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 a single, concise sentence with no redundant words. It is front-loaded and gets straight to the point. This is appropriately sized for the simplicity of the tool.
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?
There is no output schema and no annotations. The description fails to explain what a 'list of tracks' actually contains (e.g., track metadata, audio features) or how pagination works. This is insufficient for a tool that has no other documentation beyond the schema.
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 100%, so the baseline is 3. The description adds no parameter-specific meaning beyond what the schema already provides; all parameters are documented in the input schema with 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 action ('Get') and the resource ('a list of tracks in a Spotify playlist'), which distinguishes it from siblings like getAlbumTracks or getPlaylist. The verb+resource structure is specific and 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 guidance is provided on when to use this tool versus alternatives such as getAlbumTracks or getUsersSavedTracks. The description only states what it does, leaving the agent to infer usage context. There are no exclusions or alternative mentions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getQueueC
Get a list of the currently playing track and the next items in your Spotify queue
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of upcoming items to show (1-50) |
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 of behavioral disclosure. It states the tool retrieves a list but doesn't describe key behaviors: whether it requires authentication, if it works only with an active playback session, potential rate limits, error conditions (e.g., no queue available), or the format of the returned list (e.g., JSON structure). This leaves significant gaps in understanding how the tool behaves in practice.
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, well-structured sentence that efficiently conveys the core functionality: 'Get a list of the currently playing track and the next items in your Spotify queue.' It is front-loaded with the main action and resource, with no unnecessary words or redundant information, making it highly concise and easy to understand at a glance.
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 moderate complexity (retrieving a dynamic queue with one optional parameter), lack of annotations, and no output schema, the description is incomplete. It doesn't cover behavioral aspects like authentication needs, session dependencies, error handling, or return format details. While the schema handles the parameter well, the overall context for safe and effective use is insufficient, especially for a tool that likely interacts with user-specific Spotify data.
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 100% description coverage, with the 'limit' parameter fully documented in the schema (type, range, and description). The tool description doesn't add any parameter-specific information beyond what the schema provides, such as default values or usage examples. Since schema coverage is high, the baseline score of 3 is appropriate, as the description doesn't compensate but also doesn't detract from the schema's documentation.
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 purpose: 'Get a list of the currently playing track and the next items in your Spotify queue.' It specifies the verb ('Get') and resource ('currently playing track and the next items in your Spotify queue'), making the action clear. However, it doesn't explicitly distinguish this tool from sibling tools like 'getNowPlaying' (which might only show the current track) or 'getRecentlyPlayed' (which shows past tracks), leaving some ambiguity in sibling differentiation.
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 doesn't mention prerequisites (e.g., needing an active Spotify session), exclusions (e.g., not applicable if no music is playing), or comparisons to siblings like 'getNowPlaying' (for current track only) or 'getRecentlyPlayed' (for past tracks). Without such context, users might struggle to choose the right tool in different scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getRecentlyPlayedB
Get a list of recently played tracks on Spotify
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of tracks to return (1-50) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must disclose behavioral traits, but it only states 'Get a list' without covering authorization needs, return format, pagination, or whether this is limited to the user's own listening history. This is minimal and does not fully convey the tool's 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 a single sentence with no filler, front-loading the verb and resource. It is concise and efficiently conveys the 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?
For a simple read tool with one optional parameter, the description is adequate but not complete. It omits context about response structure, required Spotify scopes, and the fact that this returns the user's playback history. The lack of an output schema and annotations makes this more significant, but the simplicity of the operation keeps it at a minimum viable level.
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 only parameter 'limit' is fully described in the schema with minimum/maximum values (1-50) and a clear description. Since schema coverage is 100%, the description need not add parameter details; baseline 3 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 uses the specific verb 'Get' with resource 'recently played tracks' and context 'on Spotify', clearly distinguishing from sibling tools like getNowPlaying (current track) and getTopTracks (top tracks over time). It states exactly what the tool does.
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. The description does not mention any exclusions, prerequisites, or use cases beyond the basic action, so the agent must infer usage from the name and context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getUsersSavedTracksA
Get a list of tracks saved in the user's "Liked Songs" library
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of tracks to return (1-50) | |
| offset | No | Offset for pagination (0-based index) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only says 'Get a list', which implies read-only behavior, but it does not mention pagination, authentication, or what happens if there are no saved tracks. Minimal behavioral context is added beyond the verb itself.
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 11 words, extremely concise and front-loaded with the action and object. It contains no filler, repetition, or unnecessary detail.
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 read tool with two optional numeric parameters, the description is adequate but lacks behavioral nuances such as pagination behavior and output structure. Since there is no output schema and no annotations, additional context about the returned list or pagination would make it more 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?
The input schema fully describes both parameters (limit and offset) with clear descriptions and constraints, achieving 100% schema description coverage. The description adds no additional parameter semantics, so the baseline score of 3 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 verb 'Get' and the specific resource 'tracks saved in the user's 'Liked Songs' library', which unambiguously distinguishes it from sibling tools like getAlbumTracks or getPlaylistTracks. It immediately conveys the tool's function without any ambiguity.
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 clear context by identifying the 'Liked Songs' library, making it easy to infer when this tool should be used instead of other track-retrieval tools. However, it does not explicitly mention exclusions or alternative tools, lacking the 'when-not' guidance that would push it to a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pausePlaybackA
Pause Spotify playback on the active device
| Name | Required | Description | Default |
|---|---|---|---|
| deviceId | No | The Spotify device ID to pause playback on |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It fails to explain how the optional deviceId interacts with 'active device', or what happens if no device is active or playback is already paused. Auth requirements and error behavior are also undisclosed.
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, front-loaded, and exactly as concise as needed. Every word 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?
For a simple pause tool, the description is minimal but sufficient at a basic level. However, it lacks guidance on device selection, idempotent behavior, and return values, which would be valuable for an agent with no 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 covers deviceId with 'The Spotify device ID to pause playback on' (100% coverage). Description adds little beyond that, and the phrase 'active device' may conflict with specifying a deviceId. No added clarity on when to provide the 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 states a specific verb ('Pause') and resource ('Spotify playback on the active device'), clearly distinguishing it from sibling tools like resumePlayback, playMusic, and skipToNext. No ambiguity.
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 tool name and description: pause when wanting to stop playback. However, no explicit when-to-use guidance or alternatives are mentioned, leaving the agent to infer the context from sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playMusicB
Start playing a Spotify track, album, artist, or playlist
| Name | Required | Description | Default |
|---|---|---|---|
| uri | No | The Spotify URI to play (overrides type and id) | |
| type | No | The type of item to play | |
| id | No | The Spotify ID of the item to play | |
| deviceId | No | The Spotify device ID to play on |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must disclose side effects, requirements (like active device), and behavior such as replacing current queue. It only states the action, leaving the agent to guess about deviceId handling, error conditions, or 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?
A single, to-the-point sentence. It's efficient but lacks additional context that could aid selection; still, it doesn't waste 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?
With no output schema and no annotations, the description fails to convey essential behavioral details such as whether playback starts immediately, what happens without a deviceId, or the response format. Incomplete for a 4-param tool with optional interactions.
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?
All four parameters are fully described in the schema, so the description adds no additional parameter semantics. It doesn't explain how id, uri, and type interrelate or which takes precedence.
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 uses a specific verb ('Start playing') and resource ('Spotify track, album, artist, or playlist'), clearly distinguishing from sibling playback controls like pause and skip. It accurately reflects the tool's function.
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 or alternative guidance is provided. While the function is intuitive, it doesn't mention exclusions (e.g., when to use resume vs play) or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resumePlaybackB
Resume Spotify playback on the active device
| Name | Required | Description | Default |
|---|---|---|---|
| deviceId | No | The Spotify device ID to resume playback on |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing behavioral traits. It does not mention failure conditions (e.g., no active device, nothing paused), side effects, or whether it requires an active device to be set. The description only states the action without additional 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 a single sentence with no filler or repetition. It efficiently conveys the core action and target, earning a perfect score for 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?
For a simple one-parameter tool, the description covers the basic action and default behavior ('active device'). However, it lacks guidance on usage vs siblings and any note about error conditions, making it minimally complete but not comprehensive.
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 provides a full description for the single optional deviceId parameter ('The Spotify device ID to resume playback on'), achieving 100% coverage. The description adds no extra meaning beyond this, so a baseline score of 3 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 states the specific verb 'Resume' and resource 'Spotify playback' with the scope 'on the active device'. This clearly distinguishes it from sibling tools like playMusic (which starts playback) and pausePlayback (the opposite action).
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 playMusic or pausePlayback. The mention of 'active device' implies a prerequisite but does not explain when resumption is appropriate or what to do if no playback is paused.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
saveOrRemoveAlbumForUserC
Save or remove albums from the user's "Your Music" library
| Name | Required | Description | Default |
|---|---|---|---|
| albumIds | Yes | Array of Spotify album IDs (max 20) | |
| action | Yes | Action to perform: save or remove albums |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the action ('save or remove') but lacks critical details: it doesn't specify authentication requirements, rate limits, whether changes are permanent or reversible, or what happens if album IDs are invalid. This is inadequate for a mutation 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 description is a single, efficient sentence that directly states the tool's function without unnecessary words. It's front-loaded with the core action and resource, making it easy to parse quickly.
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 complexity as a mutation operation with no annotations and no output schema, the description is insufficient. It doesn't cover behavioral aspects like authentication needs, error handling, or response format, leaving significant gaps for an AI agent to understand how to use 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 100%, with clear descriptions for both parameters ('albumIds' and 'action'), including constraints like maxItems and enum values. The description adds no additional parameter semantics beyond what the schema provides, so it meets the baseline score of 3.
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 ('save or remove') and resource ('albums from the user's "Your Music" library'), making the purpose immediately understandable. However, it doesn't explicitly distinguish this tool from sibling tools like 'checkUsersSavedAlbums' or 'getAlbums', which are read-only operations, so it doesn't reach the highest score.
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 doesn't mention prerequisites (e.g., user authentication), compare it to similar tools like 'addTracksToPlaylist' for saving tracks instead of albums, or specify scenarios where saving vs. removing is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchSpotifyB
Search for tracks, albums, artists, or playlists on Spotify
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The search query | |
| type | Yes | The type of item to search for either track, album, artist, or playlist | |
| limit | No | Maximum number of results to return (10-50) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description offers no behavioral details beyond the basic search action. It does not disclose authentication needs, pagination, default limits, error handling, or return format, leaving the agent to infer these from the schema or 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 a single sentence, front-loaded with the key verb 'Search' and the resource 'Spotify'. It is concise and free of unnecessary words, earning 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?
For a search tool with no output schema and no annotations, the description is too minimal. It does not explain how results are returned, how to handle no results, or how this integrates with sibling tools like getPlaylistTracks, leaving significant gaps for the agent.
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 covers all parameters with descriptions (100% coverage), so the tool description does not need to add parameter information. However, the schema's limit description says '10-50' while the minimum is 1, and the tool description does not clarify this inconsistency.
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 uses the specific verb 'Search' and explicitly enumerates the item types (tracks, albums, artists, playlists). This clearly distinguishes it from sibling tools like getPlaylistTracks or playMusic, which focus on different actions.
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 the tool is for searching Spotify content but provides no explicit guidance on when to use it versus alternatives. It does not mention related workflows, exclusions, or prerequisites such as authentication via getAccessToken.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setVolumeA
Set the playback volume to a specific percentage (0-100). Requires Spotify Premium.
| Name | Required | Description | Default |
|---|---|---|---|
| volumePercent | Yes | The volume to set (0-100) | |
| deviceId | No | The Spotify device ID to set volume on |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the Spotify Premium requirement but doesn't describe what happens if no device is specified (deviceId is optional), whether changes are immediate, or what happens on failure. The description provides basic context but lacks operational 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 perfectly concise - a single sentence that communicates the core purpose and key constraint. Every word earns its place with no redundancy or unnecessary elaboration.
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 mutation tool with no annotations and no output schema, the description provides basic purpose and constraints but lacks information about return values, error conditions, or device selection behavior when deviceId is omitted. Given the complexity of volume control across devices, more context would be helpful.
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 100%, so the schema already fully documents both parameters. The description mentions 'percentage (0-100)' which aligns with the schema's volumePercent documentation but adds no additional semantic context beyond what the structured schema provides.
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 ('Set the playback volume') and the resource ('to a specific percentage'), with precise boundaries (0-100). It distinguishes from sibling 'adjustVolume' by specifying exact percentage setting rather than relative adjustment.
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 states 'Requires Spotify Premium' which provides important context about prerequisites. However, it doesn't specify when to use this versus the sibling 'adjustVolume' tool for relative volume changes, leaving some ambiguity about tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
skipToNextA
Skip to the next track in the current Spotify playback queue
| Name | Required | Description | Default |
|---|---|---|---|
| deviceId | No | The Spotify device ID to skip on |
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 of behavioral disclosure. It only states the action and doesn't mention prerequisites (e.g., active playback, deviceId optionality), side effects, or edge cases like an empty queue. This is a significant gap for a state-changing 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 a single sentence, highly concise, and front-loaded with the core action. No wasted words or 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?
For a simple one-parameter tool, the description gives the essential purpose, but with no annotations or output schema, it lacks behavioral context such as what happens if no device is specified or whether playback must be active. It is minimally complete for selection but not fully informative.
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 already describes deviceId as 'The Spotify device ID to skip on' with full coverage. The description adds no additional parameter semantics, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Skip to the next track') on a specific resource ('current Spotify playback queue'). It distinguishes from sibling tools like skipToPrevious by explicitly indicating 'next'.
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 usage context is implied by the action and resource, but there is no explicit guidance on when to use this tool versus alternatives like skipToPrevious or pausePlayback. No exclusions or alternative recommendations are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
skipToPreviousA
Skip to the previous track in the current Spotify playback queue
| Name | Required | Description | Default |
|---|---|---|---|
| deviceId | No | The Spotify device ID to skip on |
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 the core action but does not disclose what happens at the start of the queue, whether a deviceId is required, or potential error conditions. The basic behavioral trait of changing playback is conveyed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It directly states the verb and resource without any tangential 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 simple tool with one optional parameter and no output schema, the description covers the primary action but lacks usage context, such as when to prefer this over 'skipToNext' or prerequisites. It is adequate but not thorough.
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 already fully describes the single parameter (deviceId) with 100% coverage. The description does not add any additional meaning about the parameter, such as its optionality or behavior when omitted. Baseline 3 is appropriate since the schema handles it.
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 uses a specific verb ('Skip') with a clear resource ('previous track') and context ('in the current Spotify playback queue'). It clearly distinguishes from the sibling 'skipToNext' by specifying 'previous'.
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 (when wanting to go backward in the queue) but does not explicitly mention alternatives like 'skipToNext' or any prerequisites such as an active playback session. No exclusions or when-not-to-use guidance provided.
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.
5 tool updates
v1.0.0- Added
adjustVolume - Added
getAvailableDevices - Changed
getNowPlaying1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Added
getQueue - Added
setVolume
18 tool updates
- First observed
addToQueue - First observed
addTracksToPlaylist - First observed
checkUsersSavedAlbums - First observed
createPlaylist - First observed
getAlbums - First observed
getAlbumTracks - First observed
getMyPlaylists - First observed
getNowPlaying - First observed
getPlaylistTracks - First observed
getRecentlyPlayed - First observed
getUsersSavedTracks - First observed
pausePlayback - First observed
playMusic - First observed
resumePlayback - First observed
saveOrRemoveAlbumForUser - First observed
searchSpotify - First observed
skipToNext - First observed
skipToPrevious
TDQS
Scored across 22 tools
Most tools have distinct purposes, such as playMusic for starting playback and pausePlayback for pausing, but some overlap exists—like adjustVolume and setVolume both handle volume control, which could cause minor confusion. However, descriptions clarify their differences (relative vs. absolute adjustment), keeping ambiguity low.
The naming is mixed, with some tools using verb_noun patterns (e.g., getAlbums, createPlaylist) and others using noun_verb or less consistent forms (e.g., addToQueue, checkUsersSavedAlbums). While readable, the lack of a uniform convention reduces predictability across the set.
With 22 tools, the count is borderline high for a music streaming server, as it covers playback, library management, search, and device control. It feels slightly heavy but not extreme, given Spotify's broad functionality, though some consolidation might improve coherence.
The tool set comprehensively covers the Spotify domain, including playback control (play, pause, skip), volume management, queue and playlist operations, library management, search, and device info. There are no obvious gaps, providing full lifecycle coverage for typical user interactions.
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
A Model Context Protocol server for Wix AI tools
Generate AI music via the Lacuna Music API from MCP clients like Claude Desktop & Code.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to control Unreal E…
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that enables controlling Spotify playback through natural language commands in MCP clients like Cursor or Claude for Desktop.1-
- 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-
- AlicenseAqualityBmaintenanceMCP server for the Spotify Web API — gives Claude and other AI assistants tools to search music, control playback, manage playlists, library, and podcasts.472MIT