Spotify MCP
Controls Spotify playback, search, queue, playlists, and library management through free-text queries or Spotify URIs.
spotify-mcp
Control Spotify by talking to your AI. An MCP server for Claude Desktop, Claude Code, Cursor, and any other MCP client.
You: play something like early Bill Evans AI: ▶ Now playing: "Peace Piece" — Bill Evans · Everybody Digs Bill Evans
You: perfect, queue the whole album and save this one AI: ➕ Queued Everybody Digs Bill Evans · ❤️ Saved "Peace Piece" to your library
Built against the current (post-February-2026) Spotify Web API — many older Spotify MCP servers predate those changes and are partially broken.
Requirements
Spotify Premium — Spotify requires it for playback control and (since Feb 2026) for creating the developer app you'll use.
Node.js ≥ 20
Related MCP server: Spotify MCP Server
Quick start
npx -y @xavifabregat/spotify-mcp initThe wizard walks you through creating your own (free) Spotify developer app, asks for its Client ID, and opens a browser to connect your account — about 2 minutes total.
Why your own app? Spotify caps third-party apps at a handful of users, so every user
brings their own; the wizard makes that painless. No client secret is involved (PKCE).
Tokens stay in ~/.spotify-mcp/ on your machine and refresh silently.
The one detail that must be exact — your app's Redirect URI:
http://127.0.0.1:8888/callbackAdd to your MCP client
Claude Code
claude mcp add -s user spotify -- npx -y @xavifabregat/spotify-mcpClaude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json)
or Cursor (~/.cursor/mcp.json):
{
"mcpServers": {
"spotify": {
"command": "npx",
"args": ["-y", "@xavifabregat/spotify-mcp"]
}
}
}Restart the client and start talking.
Tools
Tool | What it does |
| Play by free-text query (search → best match → play) or Spotify URI |
| pause / resume / next / previous / seek / volume / shuffle / repeat |
| Current track, progress, device, mode |
| Add a track to the queue; show up next |
| List devices; transfer playback |
| Browse tracks/albums/artists/playlists (max 10 per type — API cap) |
| List your playlists |
| Show a playlist's tracks (own/collaborative only — API restriction) |
| Create a playlist; add tracks |
| Save / remove / check items in your library |
| Run the Spotify login from inside a conversation |
Design
Tools are intents, not endpoints. "Play some Radiohead" is one tool call — the server searches, picks the best match, starts playback, and reports what it chose so you can correct it. No search → choose → play round trips.
Small surface. 11 tools instead of one per API endpoint keeps tool selection accurate across different AI clients and context lean.
Responses are compact text with Spotify URIs, so follow-ups ("queue that") chain without re-searching. Raw API payloads never reach the model.
Errors are instructions. No active device? The response lists your devices and says how to pick one. Not logged in? It points at the
authenticatetool. The model relays the fix instead of a stack trace.
Troubleshooting
"No active Spotify device" — Spotify's API can only steer a running app. Open Spotify anywhere; if it just woke up, tap play/pause once. With exactly one device online, the tools target it automatically.
INVALID_CLIENT: Invalid redirect URIduring login — the Redirect URI in your app settings isn't exactlyhttp://127.0.0.1:8888/callback(localhostis rejected by Spotify).Port 8888 in use during login — set
SPOTIFY_REDIRECT_PORTto a free port and register the matching redirect URI."Token refresh failed" — run
npx -y @xavifabregat/spotify-mcp authto log in again (e.g. after changing the Client ID).Config precedence — the
SPOTIFY_CLIENT_IDenv var overrides~/.spotify-mcp/config.json(written byinit).
Development
git clone https://github.com/XavierFabregat/spotify-mcp.git
cd spotify-mcp
npm install
npm run build
npm run inspect # MCP Inspector against the local buildLayout: src/auth.ts (OAuth PKCE + token store) · src/spotify.ts (typed API
client) · src/tools/ (tool implementations) · src/format.ts (compact output).
License
MIT © Xavi Fabregat
Available Tools
11 toolsauthenticateConnect Spotify accountA
Connects the user's Spotify account via OAuth. Opens a browser on this machine for approval and stores tokens locally. Use when other tools report you are not authenticated, or to switch accounts.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behavioral details: opens browser for approval, stores tokens locally, which are not inferable from the tool name or empty schema. No annotations provided, so description carries full burden and meets it.
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 concise sentences, front-loaded with purpose and action, efficient and free of 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?
Covers purpose, mechanism, and when to use. Minor gap: does not describe return value or confirmation of success, but given simplicity and no output schema, 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?
No parameters exist in schema (0 params), baseline is 4. Description adds no parameter info because there are none, which 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?
Description clearly states action ('Connects', 'via OAuth'), resource ('user's Spotify account'), and distinguishes from sibling tools (e.g., play, search) by focusing on authentication setup.
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 says when to use: 'when other tools report you are not authenticated, or to switch accounts', providing clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
devicesSpotify devicesA
action=list shows available Spotify devices; action=transfer moves playback to a device by name or id.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| device | No | Device name (fuzzy) or id (action=transfer) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description must disclose behavior. It mentions listing and transferring but lacks details on side effects (e.g., playback interruption), error handling, or return format for list. Minimal but covers core 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?
Extremely concise (one sentence) with front-loaded information. No redundant words; every part is necessary.
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?
Tool is simple (2 params, no output schema), but description omits output details for list action and error handling. Adequate for basic use 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?
Adds value beyond schema by explaining the action enum values (list/transfer) and clarifying when the device parameter is needed. Schema had 50% coverage; description compensates well.
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 two distinct functions (list and transfer) with specific verbs and resource (Spotify devices). It distinguishes from siblings like 'play' or 'playback' by focusing on device management.
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?
Implies when to use each action (list vs transfer) but does not explicitly state when to choose this tool over siblings like 'play' for device-related tasks. No prerequisites or exclusions given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_playlist_itemsShow playlist contentsARead-only
Lists the tracks in one of the user's own or collaborative playlists (Spotify no longer exposes other users' playlist contents). Accepts a playlist id, URI, or URL.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | Pagination offset (default 0) | |
| playlist | Yes | Playlist id, spotify:playlist:… URI, or open.spotify.com URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so description does not need to emphasize safety. It adds valuable behavioral context about the limitation on other users' playlists, which is 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?
Two sentences, no redundancy. First sentence defines purpose, second sentence clarifies input format. Perfectly front-loaded and efficient.
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?
No output schema exists, and the description does not explain what the response contains (e.g., track details, pagination info). Users might need to infer from the tool name. A brief note on the return format would improve completeness.
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 baseline is 3. The description adds that the playlist parameter accepts a URI or URL in addition to an ID, and confirms offset is for pagination. This enriches the 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?
Explicitly states 'Lists the tracks in one of the user's own or collaborative playlists', clearly identifying the verb (list) and resource (tracks in a playlist). The note about Spotify's change distinguishes it from potential similar tools and provides necessary context.
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 indicates the tool accepts a playlist identifier, but does not explicitly state when to use it versus siblings like get_playlists. However, the context of listing tracks rather than playlists makes the use case clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_playlistsList my playlistsBRead-only
Lists the user's playlists with item counts and URIs.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true. Description adds minor context (lists user's playlists with counts/URIs) but does not disclose pagination or authentication 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?
Single sentence, no fluff, immediate clarity. 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?
Given no output schema and no parameters, the description mentions item counts and URIs but lacks details about pagination, response structure, or potential edge cases. Adequate but not exhaustive.
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?
No parameters exist (0 params, schema coverage 100%), so description is not required to document parameters. 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 clearly states the verb 'lists' and the resource 'user's playlists', and specifies included data (item counts and URIs). However, it does not differentiate from sibling tools like get_playlist_items or 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. Lacks explicit context, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
libraryManage libraryA
Saves, removes, or checks items in the user's Spotify library ('liked'). Works with any content URI: tracks, albums, artists (follow), shows, episodes. To save the current song, get its URI from now_playing first.
| Name | Required | Description | Default |
|---|---|---|---|
| uris | Yes | Spotify URIs to act on | |
| action | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It covers the three actions and URI types but does not disclose error behavior, return values, or authentication needs. For a tool with no output schema, this is 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, front-loaded with the main purpose, and contains no fluff. Every sentence adds value.
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 2 required parameters and moderate complexity, the description covers the main actions, URI types, and a usage hint. It lacks details on return values but is sufficient for basic 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 covers 50% of parameters (only 'uris' has a description). The description adds meaning by specifying valid URI types (tracks, albums, artists, shows, episodes), which clarifies the 'uris' parameter beyond the schema's generic 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 tool saves, removes, or checks items in the user's Spotify library, using specific verbs and a resource. It distinguishes from sibling tools (e.g., modify_playlist, now_playing) by specifying it operates on the library and works with any content URI.
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 a clear use-case hint: 'To save the current song, get its URI from now_playing first.' It implies usage for library operations but does not explicitly compare to alternatives or state when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
modify_playlistCreate playlist / add tracksA
action=create makes a new playlist (private by default); action=add_items appends track URIs to an existing playlist. Does not delete or remove anything.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New playlist name (action=create) | |
| uris | No | Track URIs to add (action=add_items) | |
| action | Yes | ||
| public | No | Make the new playlist public (default false) | |
| playlist | No | Target playlist id/URI/URL (action=add_items) | |
| description | No | New playlist description (action=create) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description provides behavioral traits: 'Does not delete or remove anything' and 'private by default' for create. It does not mention authentication, rate limits, or error handling, but these are not critical for a creation/append 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?
Two sentences with no filler. The first sentence explains the two actions, the second states a negative behavioral trait. Front-loaded and efficient.
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 6 parameters, no output schema, and no annotations, the description covers the two modes and key parameters. It lacks return value details and error conditions, but provides enough for a typical use case.
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 83%, so baseline is 3. The description adds value by grouping parameters by action (e.g., 'name' for create, 'uris' for add_items) and specifying the default for 'public'. This clarifies usage 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 two actions: 'action=create makes a new playlist' and 'action=add_items appends track URIs to an existing playlist'. It uses specific verbs (makes, appends) and resources (playlist, track URIs), and distinguishes from sibling tools like get_playlists or get_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?
The description implicitly guides usage by detailing the two actions and their parameters. It notes what the tool does not do ('Does not delete or remove anything'), but does not explicitly compare with alternatives or state when not to use this tool over siblings like library or search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
now_playingWhat's playingARead-only
Current track, artist, album, progress, device, and shuffle/repeat state.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description is consistent. It adds details about returned fields (progress, device, state) but doesn't disclose potential edge cases like null returns when nothing is playing.
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?
One efficient sentence listing all return fields. No wasted words, perfectly 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?
No output schema, so description carries burden of explaining return values. It lists track, artist, album, progress, device, and state which is sufficient for basic understanding. Could optionally mention is_playing or 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?
No parameters exist, and the schema coverage is 100% (empty). Baseline for zero parameters is 4; the description adds no parameter semantics because none are needed.
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 effectively communicates that the tool returns current playback information including track, artist, album, progress, device, and state. The verb is implicit but the name and title make it clear. It distinguishes from siblings like 'playback' which might be broader.
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 alternative siblings like 'playback' or 'play'. The description simply lists output fields without context of appropriate use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playPlay musicA
Plays music by free-text query (searches and starts the best match) or by Spotify URI. Handles "play some Radiohead", "play the album Kind of Blue", "play my Discover Weekly". Reports what it picked — relay that to the user so they can correct it.
| Name | Required | Description | Default |
|---|---|---|---|
| uri | No | Spotify URI to play directly, e.g. from a previous search result | |
| type | No | What the query refers to (default: track) | |
| query | No | What to play, e.g. "Bill Evans" or "Kind of Blue". Required unless uri is given. | |
| device_id | No | Target device id (see the devices tool) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full burden. It discloses that the tool searches for the best match and starts playback, and that it reports what was picked. This is sufficient, though details like whether playback resumes or replaces current are omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the core action, includes illustrative examples, and ends with a practical instruction. 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 4 parameters and no output schema, the description covers the two usage modes, provides examples, and mentions reporting. It does not elaborate on device_id, but the reference to the devices tool suffices. Overall, it is complete enough for an 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?
With 100% schema coverage, baseline is 3. The description adds value by explaining that query is a free-text search, type optional, and uri alternative. It also indicates that the tool reports its choice, which is useful for understanding return behavior.
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: 'Plays music by free-text query (searches and starts the best match) or by Spotify URI.' It distinguishes from siblings like search or queue by focusing on immediate playback and handling multiple input styles.
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 concrete examples of when to use the tool ('play some Radiohead', 'play the album Kind of Blue') and instructs the agent to relay the result to the user. However, it does not explicitly exclude cases 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.
playbackControl playbackB
Transport controls for the active playback: pause, resume, next, previous, seek (value = seconds), volume (value = 0-100), shuffle (value = on/off), repeat (value = off/context/track).
| Name | Required | Description | Default |
|---|---|---|---|
| value | No | seek: seconds · volume: 0-100 · shuffle: on/off · repeat: off/context/track | |
| action | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It states it controls active playback but omits side effects, error handling (e.g., no active playback), permissions, 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 a single concise sentence that lists actions and value formats without waste, but could be better structured for 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?
Given no output schema or annotations, the description adequately covers the tool's purpose and parameters but lacks context on error states, prerequisites (active playback), and 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 description adds value by specifying units for 'value' (seconds, 0-100, on/off, etc.), which is partially covered by the schema. With 50% schema coverage, the description compensates marginally.
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 provides transport controls for active playback and lists all supported actions (pause, resume, etc.), distinguishing it from siblings like 'play' which starts new 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 usage scenarios by listing actions but does not explicitly guide when to use this tool versus siblings like 'play' or 'queue', nor does it mention 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.
queuePlayback queueC
action=add queues a track by query or URI; action=list shows what's playing and up next.
| Name | Required | Description | Default |
|---|---|---|---|
| uri | No | Track URI to queue (action=add) | |
| query | No | Track to queue by name (action=add) | |
| action | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It states that 'add' modifies state (queues) and 'list' reads state, but omits important behavioral details such as required prerequisites (e.g., active device), rate limits, or error handling. The description is insufficient 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 sentence that efficiently covers both actions. It is front-loaded with 'action=add' and easy to parse. However, it could be slightly more structured by separating the two actions explicitly.
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 two actions, three parameters, no output schema, and no annotations, the description is minimal. It does not explain the return format of 'list', prerequisites, or error cases. More context is needed for an agent 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 67% (uri and query have descriptions; action has none). The description adds no new meaning beyond the schema: it repeats that uri and query are for add. It does not clarify the interplay between uri and query or the exact format of URIs. The enum values for action are self-explanatory.
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 two actions (add and list) and what each does: add queues a track by query or URI, list shows currently playing and upcoming tracks. It distinguishes from siblings like 'play' or 'now_playing' by focusing on queue manipulation, but could be more explicit about scope.
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 context on when to use each action (add vs list), but gives no guidance on when to prefer this tool over sibling tools like 'play' or 'now_playing'. It lacks explicit when-not-to-use or alternative tool references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchSearch SpotifyARead-only
Searches the Spotify catalog. Use when the user wants options to choose from; for a direct 'play X' request, prefer the play tool. Results include URIs usable with play, queue, playlists, and library. Max 10 results per type (API limit).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Results per type, 1-10 (default 5) | |
| query | Yes | Search text | |
| types | No | Result types to include (default: track) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is clear. The description adds the 'Max 10 results per type (API limit)' constraint, which is useful but not extensive. No other behavioral traits disclosed.
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?
Three sentences that are succinct and front-loaded with the core purpose. Every sentence adds value: purpose, usage guidance, and a constraint. 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 search tool with no output schema, the description covers purpose, when to use, the relationship to siblings, and a key limitation (max 10 results). It is complete given the 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?
Schema description coverage is 100% (all three parameters have descriptions). The tool description does not add additional meaning beyond what the schema provides, so baseline 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 'Searches the Spotify catalog' with a specific verb and resource, and distinguishes from sibling tools by noting usage differences like preferring 'play' for direct 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?
Explicitly says when to use (when user wants options) and when not to (for direct 'play X' requests, prefer the play tool). Also explains the output (URIs usable with other tools).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a clearly distinct purpose: authentication, device management, playlist operations, library management, playback control, queue management, and search. There is no overlap or ambiguity.
Names are a mix of single verbs (play, search), nouns (devices, library, queue), and verb_noun patterns (get_playlists, now_playing). While readable, the lack of a consistent pattern reduces predictability.
With 11 tools covering authentication, playback, library, playlists, queue, and search, the scope is well-balanced for a music streaming service. Each tool earns its place.
Most core workflows are covered: authentication, playback control, library management (save/remove/check), playlist creation and addition, queue, and search. Minor gaps include lack of playlist item removal or reordering.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for Producer/Riffusion AI music generation
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
Related MCP Servers
- FlicenseBqualityDmaintenanceA lightweight Model Context Protocol server that enables AI assistants like Cursor & Claude to control Spotify playback and manage playlists.22438
- 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
- 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
- AlicenseBqualityCmaintenanceMCP server for the Spotify Web API — gives Claude and other AI assistants tools to search music, control playback, manage playlists, library, and podcasts.59MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/XavierFabregat/spotify-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server