mcp-spotify
Provides tools for interacting with the Spotify Web API, enabling playlist building and management (create, add/remove tracks, follow/unfollow), music discovery (search tracks/artists/albums, get album tracks), library access (saved tracks), personalization (top tracks/artists), and playback control (play, pause, queue, now playing).
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-spotifySearch for rock songs by Queen"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-spotify
MCP server for Spotify, focused on playlist building and music discovery. 19 granular tools designed for use with Claude and other LLM agents.
Prerequisites
Python 3.14+
A Spotify Premium account (required by Spotify for Web API access)
A Spotify Developer application
Related MCP server: spotify-mcp
Setup
1. Create a Spotify Developer App
Go to the Spotify Developer Dashboard
Click Create App
Under Which API/SDKs are you planning to use?, select Web API
Set the Redirect URI to
http://127.0.0.1:8888/callbackNote your Client ID and Client Secret
2. Install
cd mcp-spotify
uv sync3. Configure Environment Variables
Set these before running the server:
export SPOTIFY_CLIENT_ID="your_client_id"
export SPOTIFY_CLIENT_SECRET="your_client_secret"
export SPOTIFY_REDIRECT_URI="http://127.0.0.1:8888/callback"4. First Run (Authentication)
uv run mcp-spotifyOn first run, a browser window opens for Spotify OAuth authorization. After approving, the token is cached at ~/.spotify_mcp_cache and subsequent runs authenticate automatically.
Claude Desktop / Claude Code Configuration
Add to your MCP server config. If installed from PyPI:
{
"mcpServers": {
"spotify": {
"command": "uvx",
"args": ["mcp-spotify"],
"env": {
"SPOTIFY_CLIENT_ID": "your_client_id",
"SPOTIFY_CLIENT_SECRET": "your_client_secret",
"SPOTIFY_REDIRECT_URI": "http://127.0.0.1:8888/callback"
}
}
}
}Or if running from a local clone:
{
"mcpServers": {
"spotify": {
"command": "uv",
"args": ["--directory", "/path/to/mcp-spotify", "run", "mcp-spotify"],
"env": {
"SPOTIFY_CLIENT_ID": "your_client_id",
"SPOTIFY_CLIENT_SECRET": "your_client_secret",
"SPOTIFY_REDIRECT_URI": "http://127.0.0.1:8888/callback"
}
}
}
}Tools
Discovery
Tool | Parameters | Description |
|
| Search for tracks. Supports |
|
| Search for artists. Returns names, genres, and IDs. |
|
| Search for albums. Returns names, artists, release dates, and IDs. |
|
| List all tracks on an album. |
Library
Tool | Parameters | Description |
|
| Your liked/saved tracks, most recent first. |
Playlists
Tool | Parameters | Description |
|
| Create a new playlist. |
|
| Add tracks to a playlist (max 100). |
|
| Remove tracks from a playlist. |
|
| List tracks in a playlist. |
|
| Replace all tracks in a playlist (for reordering). |
|
| Follow (save) a playlist to your library. |
|
| Unfollow (remove/delete) a playlist from your library. |
|
| List your playlists. |
Personalization
Tool | Parameters | Description |
|
| Your most-played tracks. |
|
| Your most-played artists. |
time_range options: short_term (~4 weeks), medium_term (~6 months), long_term (all time).
Playback
Tool | Parameters | Description |
|
| Play a track (requires active Spotify device). |
| (none) | Pause playback. |
|
| Add a track to the playback queue. |
| (none) | Get current track info. |
OAuth Scopes
This server requests the minimum scopes needed:
user-read-playback-state,user-modify-playback-state,user-read-currently-playing-- playbackplaylist-read-private,playlist-read-collaborative,playlist-modify-public,playlist-modify-private-- playlistsuser-top-read-- personalizationuser-library-read-- saved/liked tracks
Spotify Web API Restrictions
Spotify has progressively locked down its Web API since late 2024. This section documents what's affected and what it means for this project.
Removed from the Web API (November 2024)
Spotify removed or restricted these endpoints on November 27, 2024. They are permanently unavailable to new apps and Development Mode apps, regardless of quota:
Endpoint | What It Did | Impact |
| Algorithmic track recommendations based on seed tracks/artists/genres | Was the best tool for playlist building. No replacement exists in the API. |
| Tempo, energy, danceability, valence, etc. for tracks | Cannot filter or sort tracks by musical attributes. |
| Detailed audio structure (beats, bars, sections, timbre) | Cannot analyze track structure. |
| Spotify's editorial/algorithmic playlist listings | Cannot browse curated playlists. |
| Playlists within a browse category | Cannot discover playlists by category. |
Track | 30-second audio preview URLs | Preview URLs now return |
Apps that had Extended Quota Mode approval before November 2024 retained access. New apps cannot get access to these endpoints.
Gated Behind Extended Quota (Effectively Inaccessible)
These endpoints exist but return 403 Forbidden in Development Mode. They require Extended Quota Mode, which as of May 2025 requires:
A legally registered business entity (not individuals)
250,000+ monthly active users
An active, launched service in key Spotify markets
This makes Extended Quota inaccessible for personal projects, hobby apps, and small tools.
Endpoint | What It Did |
| Discover similar artists. Returns 403. |
| Get an artist's most popular tracks. Returns 403. |
February 2026 Development Mode Changes
On February 6, 2026, Spotify overhauled Development Mode itself:
Spotify Premium required for app owners (this is now a prerequisite for all Web API access)
1 Client ID per developer
Max 5 authorized users per app
Search results capped at 10 per request (down from 50) for new apps
Several more endpoints restricted (batch-get endpoints, browse categories, new releases, other-user profiles/playlists)
The POST /users/{user_id}/playlists endpoint was also removed in favor of POST /me/playlists (this server already uses the /me variant).
Note: Endpoint restrictions currently apply to newly created apps. Existing Dev Mode apps were temporarily exempted after community backlash, but this may change.
Not Yet Implemented
Potential tools that could be added within current Development Mode access:
Tool | Endpoint | Description |
|
| Skip to the next track in queue. |
|
| Skip to the previous track. |
|
| View the current playback queue. |
|
| Set playback volume (Premium only). |
|
| Set repeat mode (track/context/off). |
|
| Toggle shuffle on/off. |
|
| List available playback devices. |
|
| Transfer playback to a different device. |
|
| Save tracks to the user's library. |
Will Never Be Usable (for New Apps)
These would have been valuable for this project but are permanently out of reach:
Feature | Why It Matters | Status |
Algorithmic recommendations | The single best way to discover new music programmatically | Removed Nov 2024, no replacement |
Audio features (tempo, energy, etc.) | Enables filtering tracks by mood, energy, danceability | Removed Nov 2024 |
Related artists | Core discovery tool for "if you like X, try Y" workflows | Requires Extended Quota (250k MAU) |
Artist top tracks | Quick way to sample an artist's most popular work | Requires Extended Quota (250k MAU) |
Editorial/category playlists | Discover Spotify-curated playlists by genre or mood | Removed Nov 2024 |
The practical effect: playlist building relies entirely on search_tracks and the user's own listening history (get_my_top_tracks, get_my_top_artists) for discovery. Claude's own music knowledge fills the gap that the API no longer provides.
Development
uv run mcp-spotify # Run the server
uv run pytest tests/ -v # Run tests
uv run ruff check src/ # Lint
uv run ruff format src/ # Format
uv run pyright src/ # Type checkPre-commit Hooks
This project uses lefthook for pre-commit checks. Install with brew install lefthook (or see other install methods), then:
lefthook installAvailable Tools
20 toolsadd_to_queueA
Add a track to the end of the playback queue.
Requires an active Spotify device. Accepts a track URI or bare track ID.
| Name | Required | Description | Default |
|---|---|---|---|
| track_uri | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description must fully disclose behavior. It only says adds to queue and requires active device, but omits details like idempotency, error handling (e.g., if device inactive or track invalid), or whether the response includes queue status. The mutation aspect is implied but not explicitly flagged.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, no redundant information. Every word serves a purpose, making it highly concise and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, an active device prerequisite) and presence of an output schema, the description covers the essentials. It could mention what happens if no device is active or if the track is already queued, but overall it's sufficient for the use case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description adds value by stating it accepts 'a track URI or bare track ID.' This clarifies the format beyond the parameter name, but it could be more specific about accepted formats (e.g., 'spotify:track:...' vs. base62 ID).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Add a track to the end of the playback queue,' specifying the action and the exact position. It distinguishes from play_track (immediate play) and add_tracks_to_playlist (playlist management) by mentioning 'queue'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It mentions a prerequisite ('Requires an active Spotify device') and implies usage for queuing. However, it does not explicitly state when to use vs. alternatives like play_track for immediate playback, leaving the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_tracks_to_playlistA
Add tracks to a Spotify playlist.
Accepts a list of track IDs or URIs (max 100 per call). Tracks are appended to the end of the playlist.
| Name | Required | Description | Default |
|---|---|---|---|
| track_ids | Yes | ||
| playlist_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behaviors: appends tracks to end, accepts IDs or URIs, max 100 per call. With no annotations, this provides good operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two direct sentences, no fluff. Purpose and key details front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a simple add operation with two required parameters and an output schema. Lacks error handling or idempotency info, but sufficient for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Description clarifies that track_ids can be IDs or URIs, adding meaning beyond the schema (which has 0% description coverage). No further detail on format or constraints for playlist_id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool adds tracks to a Spotify playlist, distinguishing it from siblings like remove_tracks_from_playlist and replace_playlist_tracks. The description specifies it accepts track IDs or URIs and appends them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage for adding tracks without affecting existing ones (appending), and mentions a volume limit (max 100). However, no explicit guidance on when not to use or alternatives provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_playlistB
Create a new Spotify playlist for the current user.
Returns the playlist ID and URI for use with other playlist tools.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| public | No | ||
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states that it creates a playlist and returns the ID and URI, which is useful. However, it does not disclose potential side effects (e.g., whether the playlist is immediately accessible), authentication requirements, rate limits, or constraints like name uniqueness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: first states the purpose, second states the return value. No extraneous text. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with 3 parameters, no output schema, and no annotations, the description is too brief. It does not explain parameter usage, prerequisites (e.g., user authentication), or what the returned ID/URI looks like. The sibling tools include many playlist operations, but this tool's description lacks enough detail to fully understand its role in a workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 3 parameters with 0% description coverage, meaning the description does not explain what each parameter does. It mentions 'name' implicitly by saying 'Create a new playlist', but does not describe 'public' or 'description' beyond what the schema's default values indicate. This leaves the agent without semantic guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create a new Spotify playlist for the current user.' It uses a specific verb and resource, and distinguishes from sibling tools like add_tracks_to_playlist, which are about modifying existing playlists.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies that this tool is for creating playlists for the current user, but it does not provide explicit guidance on when to use it versus alternatives (e.g., no mention of prerequisites or cases where creation might fail). Usage is implied but not elaborated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
follow_playlistA
Follow (save) a Spotify playlist to your library.
Accepts a playlist ID or URI. Use this to save playlists found via search or shared by others.
| Name | Required | Description | Default |
|---|---|---|---|
| playlist_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It mentions accepting 'playlist ID or URI,' adding input flexibility. However, it does not disclose side effects like duplicate handling or required authentication.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words, front-loaded with purpose. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and presence of an output schema, the description is mostly complete. It could mention duplicate behavior but is adequate for a save action.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has one required param (playlist_id, no description). The description adds value: 'Accepts a playlist ID or URI,' clarifying acceptable formats beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Follow (save) a Spotify playlist to your library.' It specifies the resource (playlist) and distinguishes from unfollow_playlist and other playlist tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says 'Use this to save playlists found via search or shared by others,' giving clear usage context. However, it does not mention when not to use it or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_album_tracksB
Get all tracks on a Spotify album.
Accepts a Spotify album ID or full URI. Returns track names, artists, and IDs. Useful for adding an entire album to a playlist.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| album_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It mentions accepting full URI but fails to explain pagination behavior despite a limit parameter, nor does it disclose auth requirements, rate limits, or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no redundancy. The main purpose is front-loaded, and details are concise. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, so description should explain return structure. It briefly lists returned fields, which is adequate for a simple list. However, missing details on pagination or errors reduce completeness given schema and annotation absence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so description must compensate. It explains album_id accepts album ID or full URI but does not describe the limit parameter, its default value, or how it affects results. Incomplete for a critical parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves all tracks on a Spotify album, specifying it accepts an album ID or full URI and returns track names, artists, and IDs. This distinguishes it from siblings like get_playlist_tracks and search_tracks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides one use case (adding an entire album to a playlist) but does not mention when to avoid using it or compare to alternatives like search_albums or get_playlist_tracks. Usage context is implied but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_my_playlistsC
List the current user's Spotify playlists.
Returns playlist names, IDs, track counts, and ownership info.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description should disclose behavioral traits. It states what is returned (names, IDs, track counts, ownership) but omits pagination behavior, effect of the limit parameter, and whether collaborative playlists are included.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero fluff. Clearly written, though the return fields could be listed more concisely.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter, output schema present), the description is minimally adequate. However, it fails to document the parameter or provide behavioral nuance, leaving gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'limit' has no description in the schema (0% coverage) and is not mentioned in the tool description. The description adds no meaning beyond the schema's default value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List the current user's Spotify playlists' with a specific verb and resource. It distinguishes itself from sibling tools like get_saved_tracks (tracks, not playlists) and get_playlist_tracks (tracks of a specific playlist).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives, no prerequisites or exclusions. The description implies its purpose but lacks explicit context for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_my_top_artistsA
Get the current user's top artists on Spotify.
time_range options:
"short_term": approximately last 4 weeks
"medium_term": approximately last 6 months (default)
"long_term": all time
Useful for discovering related artists when building playlists.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| time_range | No | medium_term |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, and the description lacks details on behavioral traits such as rate limits, authentication needs, or error handling. It only explains time_range options but does not disclose what happens if the user has no top artists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with three short sentences, front-loading the purpose and then listing the parameter details. No extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists (not shown), the description is fairly complete: it explains the tool's purpose, the parameter options, and a use case. It could mention the return format but that is covered by the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema coverage is 0%, so the description must compensate. It explains the time_range options and their meanings, but the limit parameter is only mentioned with its default, lacking min/max constraints or behavioral context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get the current user's top artists on Spotify.' This is a specific verb (Get) and resource (top artists), distinguishing it from siblings like search_artists or get_my_top_tracks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description suggests a use case: 'Useful for discovering related artists when building playlists.' This provides context for when to use the tool, though it does not explicitly exclude other scenarios or contrast with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_my_top_tracksA
Get the current user's top tracks on Spotify.
time_range options:
"short_term": approximately last 4 weeks
"medium_term": approximately last 6 months (default)
"long_term": all time
Useful as a seed for building personalized playlists.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| time_range | No | medium_term |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full disclosure burden. It explains the time_range options with approximate durations and implies personalization (current user's top tracks). It does not detail return format, but an output schema exists to fill that gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: two short paragraphs and a bullet list. It front-loads the core purpose and provides parameter details efficiently without extraneous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (not shown), the description does not need to explain return values. It covers parameter semantics and a use case, making it sufficient for a simple retrieval tool. It could mention that results are user-specific, but the name implies this.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 2 parameters with 0% description coverage. The description adds meaning to 'time_range' by listing valid values and their meanings, but does not add information for 'limit' beyond the schema's default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Get the current user's top tracks on Spotify.' It distinguishes itself from siblings like 'get_my_top_artists' by specifying 'tracks' and from search tools by emphasizing 'top tracks' based on user listening history.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly mentions a use case: 'Useful as a seed for building personalized playlists.' However, it does not provide explicit when-not-to-use guidance or compare with alternatives like 'get_saved_tracks' or 'get_my_top_artists'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_now_playingA
Get information about the currently playing track on Spotify.
Returns track name, artist, album, progress, and playback state.
Returns {"is_playing": False} if nothing is currently playing.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Describes read operation and edge case. Lacks disclosure of authorization needs, rate limits, or whether an active device is required. Acceptable but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences: purpose, return fields, edge case. No fluff, front-loaded with key info. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, description explains return values and edge case. Could detail data types or nested structure (e.g., artist object) but adequate for simple read. Slight gap in structure detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has zero parameters (100% coverage trivial). Description adds value by describing return structure including the 'is_playing': False case. Baseline 3, plus extra detail gives 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb+resource: 'Get information about the currently playing track'. Distinguishes from sibling tools like search_tracks (searching) and play_track (control). Lists specific returned fields (track name, artist, album, progress, playback state) and handles the edge case of nothing playing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage: use to check current playback. No explicit guidance on when not to use or alternatives. Siblings like play_track and pause_playback imply this is a read-only status check, but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_playlist_tracksA
Get the tracks in a Spotify playlist.
Supports pagination via limit (max 100) and offset. Returns track names, artists, IDs, and total count.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| playlist_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes return values (track names, artists, IDs, total count) but no annotations exist. Missing details on authentication needed, rate limits, or that it's a read-only operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, zero wasted words. Essential information front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 3 parameters and no output schema, it covers core functionality (pagination, returned fields). Minor missing details: exact return format or error handling, but adequate for basic use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%; description compensates fully by explaining limit (max 100) and offset for pagination, and clarifies playlist_id is required. Adds meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Get the tracks in a Spotify playlist' – a specific verb and resource. Distinguishes from sibling tools like get_album_tracks, get_saved_tracks, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Mentions pagination via limit and offset, but no explicit when-to-use vs alternatives or when-not-to-use. Does not compare to search or retrieval siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_saved_tracksA
Get the current user's saved (liked) tracks.
Returns tracks from the user's library, sorted by most recently saved. Supports pagination via limit (max 50) and offset. A rich signal for playlist building since liked songs reflect explicit user preference.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full transparency burden. It discloses that the tool returns tracks sorted by most recently saved and supports pagination with a max limit of 50. However, it does not describe the return structure of tracks (e.g., fields) or mention authentication requirements, which are important for a read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place. First sentence states purpose, second adds sorting and pagination details, third provides use-case context. No redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with 2 parameters and no output schema, the description covers purpose, sorting, and pagination. It could be enhanced by noting authentication requirements or common error conditions, and by contrasting with sibling tools like search_tracks.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains that 'limit' has a max of 50 and 'offset' is for pagination, adding meaning beyond the schema's defaults. However, it does not explicitly describe offset's behavior (e.g., starting point) or the default values (20 and 0).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get the current user's saved (liked) tracks' with a specific verb and resource. It distinguishes itself from siblings like search_tracks or get_playlist_tracks by specifying 'saved tracks' and 'user's library'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving liked tracks and mentions it is a 'rich signal for playlist building', but does not explicitly state when to use this tool versus alternatives like search_tracks or get_my_playlists. No when-not-to-use or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_server_versionA
Return the installed version of the mcp-spotify server.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description should disclose behavioral traits beyond the obvious. It only states the function but does not confirm read-only safety, possible latency, or that it requires no authentication. This is a gap for a server metadata tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words. It is appropriately sized for a simple tool with no parameters and good front-loading of purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and presence of an output schema, the description is fairly complete. It states what the tool returns. However, a mention of the version format (e.g., semantic versioning) would enhance completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, and the schema coverage is 100%. The description does not need to add parameter info. It implicitly conveys that no arguments are needed. Baseline for 0 parameters is considered as 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns the installed version of the mcp-spotify server, distinguishing it from sibling tools that operate on Spotify content. However, it could be more specific about the format or location of the version.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context is clear: use this tool when you need the server version. No alternatives exist among siblings. No explicit exclusions are necessary, but a brief note on when not to use (e.g., for Spotify data) would improve guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pause_playbackA
Pause the current Spotify playback.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It only states the action but does not disclose what happens if no playback is active, whether state persists, or any side effects. Minimal behavior disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no redundant information, perfectly concise and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple pause action with output schema, description is adequate but could mention preconditions like 'requires active device and playing state' to improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters in schema (100% coverage), so baseline 4 applies. Description adds no further semantics but is not needed for 0-param tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb 'Pause' and resource 'current Spotify playback', making the action unmistakable. It effectively distinguishes from sibling play_track which is for resuming.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like play_track. No mention of prerequisites (e.g., requires active playback). Lacks any usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_trackA
Start playing a track on Spotify.
Requires an active Spotify device (open Spotify on any device first). Accepts a Spotify track URI (spotify:track:) or bare track ID.
| Name | Required | Description | Default |
|---|---|---|---|
| track_uri | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden. It discloses the need for an active device, but does not explain behavior on failure (e.g., no device, invalid URI) or whether playback resumes from the beginning.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, no redundant words. Every sentence adds necessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple input (one parameter) and existence of an output schema, the description covers the prerequisite and parameter format. It could mention typical output or error conditions, but is largely sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explains the accepted format for track_uri (spotify:track:<id> or bare ID), adding significant value beyond the schema's simple string type, especially given 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's verb ('Start playing') and resource ('a track on Spotify'), distinguishing it from siblings like pause_playback and add_to_queue.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions a key prerequisite ('requires an active Spotify device'), but does not explicitly state when not to use this tool or compare it to alternatives like resume_playback.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_tracks_from_playlistA
Remove tracks from a Spotify playlist.
Removes all occurrences of each track. Accepts track IDs or URIs (max 100 per call).
| Name | Required | Description | Default |
|---|---|---|---|
| track_ids | Yes | ||
| playlist_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must cover behavioral traits. It mentions 'removes all occurrences' and a limit of 100 tracks, but omits side effects, response details, or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no fluff. The key information is front-loaded: action, resource, and constraints.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple removal tool with two parameters and an output schema, the description covers the essentials. Minor gaps: no mention of ownership or whether the operation is irreversible.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must add meaning. It explains that 'track_ids' accept IDs or URIs (max 100) and implies 'playlist_id' is required. However, it doesn't detail format or validation rules.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'remove tracks' and the resource 'Spotify playlist', specifying that all occurrences are removed and providing input limits. It distinguishes from sibling tools like 'add_tracks_to_playlist' or 'replace_playlist_tracks'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., 'replace_playlist_tracks'). It doesn't mention prerequisites like ownership or permissions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
replace_playlist_tracksA
Replace all tracks in a playlist with the given list, in order.
This is useful for reordering a playlist. First get the current tracks with get_playlist_tracks, reorder the IDs as desired, then pass the full ordered list here. The playlist will contain exactly these tracks in exactly this order.
Accepts track IDs or URIs. No limit on total tracks (batched internally).
| Name | Required | Description | Default |
|---|---|---|---|
| track_ids | Yes | ||
| playlist_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behaviors: replaces all tracks (destructive), accepts IDs or URIs, no total track limit (batched internally). With no annotations, this covers important traits. Lacks mention of permissions or reversibility.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise three-paragraph structure: first sentence states purpose, second gives usage pattern, third adds details. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, usage, and behavioral details adequately. With an output schema present, return values need no explanation. Missing error handling or prerequisites, but sufficient for a simple mutation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 0%, description adds meaning: track_ids accepts 'track IDs or URIs' and no limit. Playlist_id is self-explanatory. Provides context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Replace all tracks in a playlist with the given list, in order,' specifying the verb and resource. It distinguishes from siblings like add_tracks_to_playlist and remove_tracks_from_playlist by indicating this is a full replacement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly describes a usage pattern: first use get_playlist_tracks, reorder, then pass here. Implies when not to use (e.g., for adding a few tracks). However, no explicit mention of alternative tools like add_tracks_to_playlist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_albumsB
Search for albums on Spotify.
Returns album names, artists, release dates, and IDs. Use get_album_tracks to list the tracks on a found album.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry full behavioral burden. It only states it is a search and returns fields, but omits details like authentication requirements, rate limits, whether results are localized, or if it supports pagination (though limit param exists).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences, front-loading the purpose. It is well-structured with a clear statement and a useful follow-up hint, though it could be slightly more efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, 2 parameters with zero description coverage, and an output schema present but not described, the description leaves significant gaps. It fails to compensate for the missing parameter explanations and operational context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Parameter coverage is 0% as the description does not explain the 'query' or 'limit' parameters. The schema defines them but the description adds no semantic meaning, leaving the agent to guess formats or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches for albums on Spotify and lists the returned fields (names, artists, release dates, IDs). It distinguishes itself from sibling tools like search_tracks and search_artists by focusing on albums.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions using get_album_tracks to list tracks on a found album, providing a follow-up action. However, it lacks explicit conditions on when to use this tool versus alternatives like search_tracks or search_artists, and no when-not scenarios are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_artistsA
Search for artists on Spotify.
Supports the same query syntax as search_tracks. Returns artist names, genres, and IDs. Useful for finding an artist ID to explore their catalog.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description discloses what is returned but does not discuss side effects, rate limits, or read-only nature. Adequate but could be more explicit about safety.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with purpose, then cross-reference and use case. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, return fields, and a use case. With existing output schema, agent can understand output. Could mention limit behavior, but not critical for a search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage; description only adds meaning for 'query' by referencing search_tracks syntax. Limit parameter is left unexplained, and no format details are given.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Search for artists on Spotify' and specifies returns (names, genres, IDs). Distinguishes from sibling tools by referencing search_tracks and focusing on artists.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides comparative guidance: 'Supports the same query syntax as search_tracks' and identifies use case for finding artist IDs. Lacks explicit when-not-to-use, but sufficient for agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_tracksA
Search for tracks on Spotify.
Supports Spotify query syntax for filtering:
genre: "genre:rock"
year: "year:2020" or "year:2018-2022"
artist: "artist:radiohead"
combined: "genre:indie year:2020-2024"
Returns track names, artists, albums, and IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It describes a search operation (read-only) but does not disclose rate limits, authentication needs, or response size. The basic behavior is implied, but not fully transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with purpose, and includes well-structured examples. Every sentence adds necessary information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and simple search functionality, the description covers query syntax and return fields. It lacks pagination details but is generally complete for a search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds value by explaining the query syntax, which is not detailed in the schema (0% coverage). However, it does not describe the 'limit' parameter's effect or constraints, leaving a gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Search for tracks on Spotify.' This specific verb-resource pair distinguishes it from sibling tools like search_artists and search_albums.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the query syntax and gives examples, implying when to use it. It lacks explicit exclusions or alternative tool references, but in context with siblings, usage is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfollow_playlistA
Unfollow (remove) a Spotify playlist from your library.
For playlists you own, this is the only way to 'delete' them -- Spotify has no true delete. The playlist will no longer appear in your library or profile.
| Name | Required | Description | Default |
|---|---|---|---|
| playlist_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses that unfollowing removes the playlist from the user's library and profile, and for owned playlists it is equivalent to deletion. This is transparent about the primary behavior, though additional details about reversibility or permissions are omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: two sentences directly stating the purpose and a key behavioral note. No unnecessary words or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains input (playlist ID implied) and the effect (removal from library/profile). Since an output schema exists, the lack of return value details is acceptable. The explanation is sufficient for a simple mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage for the required parameter playlist_id. The description does not explicitly describe the parameter, but the verb 'unfollow a playlist' implies the ID is needed. Given only one parameter, the clarity is adequate but could be improved by explicitly stating the parameter role.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Unfollow (remove) a Spotify playlist from your library.' It further explains that for owned playlists, this acts as the only way to delete them, differentiating it from operations like removing tracks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context on when to use the tool (to remove a playlist, especially to delete owned ones). It implicitly differentiates from sibling tools like remove_tracks_from_playlist, but does not explicitly list alternative tools or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
20 tool updates
v0.2.0- First observed
add_to_queue - First observed
add_tracks_to_playlist - First observed
create_playlist - First observed
follow_playlist - First observed
get_album_tracks - First observed
get_my_playlists - First observed
get_my_top_artists - First observed
get_my_top_tracks - First observed
get_now_playing - First observed
get_playlist_tracks - First observed
get_saved_tracks - First observed
get_server_version - First observed
pause_playback - First observed
play_track - First observed
remove_tracks_from_playlist - First observed
replace_playlist_tracks - First observed
search_albums - First observed
search_artists - First observed
search_tracks - First observed
unfollow_playlist
TDQS
Each tool targets a distinct action or resource. Search tools for tracks, artists, and albums are clearly separated. Playlist operations are split into create, add, remove, replace, follow, unfollow, and list/get tracks. Playback controls are distinct. There is no overlap or ambiguity.
All tool names follow a consistent verb_noun pattern using lowercase with underscores. Verbs like search, get, create, add, remove, replace, follow, unfollow, play, pause are used predictably. No mixing of styles.
20 tools is slightly above the typical well-scoped range (3-15), but for a comprehensive Spotify client covering search, playlist management, user library, and playback control, each tool serves a clear purpose. The count is reasonable for the domain.
The tool set covers major Spotify workflows: search, playlist CRUD (create, add, remove, replace, follow, unfollow), user's saved tracks, top tracks/artists, and basic playback control (play, pause, queue, now playing). Minor gaps include lack of volume control, skip/previous, and playlist editing, but core functionality is present.
Maintenance
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 connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
The Remote MCP server acts as a standardized bridge between LLM applications (like Claude, ChatGPT, and Cursor) and external services, enabling AI agents to access external tools and resources. Its primary capability is providing a centralized search tool to discover other MCP servers and their respective tools. Unlike local implementations, it runs remotely with OAuth authentication and permission controls for security.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
MCP server for building and testing AI agents with multi-model experimentation and insights.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceAn MCP server for Spotify control and synchronized lyrics retrieval that enables playback management, queue navigation, and music search capabilities. It also features perception tools for real-time track analysis, including BPM, key detection, and timestamped lyrics.1163Apache 2.0
- AlicenseCqualityDmaintenanceThis is a 93-tool Spotify MCP server for Claude, Cursor, and any MCP client. Smart shuffle, vibe analysis, natural language search, artist networks, and more.938MIT
- 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
- FlicenseNot gradedqualityCmaintenanceA FastMCP server that exposes Spotify's catalog and user context as tools for Claude, enabling track search, audio features, artist discography, recommendations, currently playing, and playlist creation.-
Latest Blog Posts
- 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/obrien-matthew/mcp-spotify'
If you have feedback or need assistance with the MCP directory API, please join our Discord server