Spotify Data
Server Details
Spotify play counts, monthly listeners, charts, artist stats, albums, playlists and ISRC lookup.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- eduair94/spotify-data-mcp
- GitHub Stars
- 0
- Server Listing
- Spotify Data MCP Server
TDQS
Scored across 13 tools
Multiple tools have overlapping purposes: fetch returns full records for tracks, artists, albums, and playlists, directly overlapping get_album, get_artist_overview, and get_playlist. Additionally, get_tracks with include_insights duplicates get_track_insights and get_track_play_count, and get_artists_stats overlaps with get_artist_overview and fetch. Descriptions help somewhat, but the boundaries remain fuzzy.
Most tools (10 of 13) follow a consistent get_<resource> pattern (e.g., get_album, get_artist_insights, get_playlist). The exceptions—fetch, search, and isrc_lookup—are common special-purpose verbs/nouns that remain readable, making this a minor deviation rather than an inconsistent convention.
With 13 tools, the server is well-scoped for a Spotify data/analytics purpose. Each tool targets a distinct data type or operation, and the count sits comfortably within the typical 3–15 range without feeling bloated or thin.
The surface covers core read operations across search, tracks, albums, artists, playlists, charts, related artists, and ISRC lookup, which is solid for a read-only analytics server. Minor gaps exist, such as no dedicated tool to list an artist's full discography (only counts in get_artist_overview) and no explicit pagination for artist top tracks, but these are workable.
Available Tools
13 toolsfetchFetch a Spotify recordARead-onlyIdempotentInspect
The full record behind a search result: a track (play count, album, release date, genres, moods, BPM, credits), an artist (monthly listeners, followers, world rank, top cities, top tracks), an album (every track with play counts) or a playlist (details and its first 50 tracks with play counts). Takes an id from the search results (track:, artist:, album:, playlist:), a spotify: URI or an open.spotify.com URL.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | track:<id>, artist:<id>, album:<id> or playlist:<id> from search, a spotify: URI or an open.spotify.com URL. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, openWorld and non-destructive, so the safety profile is settled. The description still adds real behavioral value by disclosing scope and truncation — notably that a playlist returns only 'its first 50 tracks', which an agent could not infer from annotations or schema. It omits error behavior for malformed ids, which caps it below 5.
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 front-loaded sentences: the payoff (full record with rich fields) comes first, and the accepted id formats come second. The per-type field enumeration is dense but each element tells the agent something about the return payload, so little is wasted.
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 one required parameter, full schema coverage, no output schema and rich annotations, the description covers the remaining gaps an agent needs: what each record type yields and the 50-track playlist cap. Nothing required to call it correctly is missing.
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 is a single parameter with 100% schema coverage, and the description's id-format text nearly duplicates the schema's own description ('track:<id>, artist:<id>, album:<id> or playlist:<id>... spotify: URI or open.spotify.com URL'). The only marginal addition is tying the id to search results, so this sits at the documented baseline.
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 opens with a specific framing ('full record behind a search result') and enumerates exactly what each record type returns — track, artist, album, playlist — so the agent knows this is a polymorphic detail lookup. It does not explicitly distinguish itself from overlapping siblings like get_album, get_artist_overview or get_playlist, which is the only thing keeping it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Takes an id from the search results' implies the intended workflow (search first, then fetch), which is useful. However, there is no explicit when-to-use versus get_album/get_artist_overview/get_playlist, and no statement of when not to use it or what happens with an invalid id.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_albumGet albumCRead-onlyIdempotentInspect
An album with its track list and (by default) every track's lifetime play count, plus the album total, release date, label, UPC and popularity.
| Name | Required | Description | Default |
|---|---|---|---|
| album | Yes | Spotify album id, spotify:album:<id> URI or open.spotify.com/album/<id> URL. | |
| include_play_counts | No | Add each track's lifetime play count and the album total. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive and open-world behavior, so the safety profile needs no restating. The description adds the non-obvious default that play counts and album totals are included unless opted out, which is genuinely useful behavioral context. It says nothing about album resolution failures, unknown-ID behavior, 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?
A single sentence with no filler, and the primary content (album + track list) leads. The trailing metadata enumeration is slightly list-like but every item is informative given there is no output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully documents the returned fields, which is the right thing to cover. What is missing is anything about selection versus the many sibling tools and about failure modes for an open-world lookup; the definition is adequate but leaves real gaps for an agent choosing among eleven siblings.
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% and the album identifier formats (id, URI, URL) are fully documented in the schema, so the description adds little on that front. It does reinforce the default for include_play_counts via '(by default) every track's lifetime play count, plus the album total', which clarifies what the flag toggles, but that mostly duplicates the schema's own default and 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 is a noun phrase ('An album with its track list...') rather than a verb+resource statement, so the operation must be inferred from the tool name. It does enumerate the payload precisely (tracks, play counts, total, release date, label, UPC, popularity), which clarifies what the tool returns, but it never says 'retrieves/fetches an album'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus siblings such as get_tracks, get_track_play_count, get_album-adjacent insight tools, or search. The only usage-adjacent signal is the '(by default)' note on play counts, which is a parameter behavior, not tool selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_artist_insightsArtist genres, moods and BPMARead-onlyIdempotentInspect
An artist's sound profile from their top tracks: genres, moods and activities with 0-1 weights, and tempo (average, min, max BPM). Up to 20 artists per call.
| Name | Required | Description | Default |
|---|---|---|---|
| artists | Yes | Spotify artist ids, spotify:artist:<id> URIs or open.spotify.com/artist/<id> URLs (1-20). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile needs no repetition. The description adds genuinely non-structured behavior: the profile is computed only from an artist's top tracks (not the full catalog) and weights are 0-1 normalized, both of which affect interpretation of results. It omits edge-case behavior for unknown or partially resolvable artist IDs.
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 dense sentences with zero redundancy, and the payoff (what the profile contains) is front-loaded ahead of the batching limit. Every clause carries information an agent needs to interpret the response.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing returns and does so concretely (genres, moods, activities with 0-1 weights, tempo min/avg/max). Minor gaps remain: the shape of the per-artist result and what is returned for an unresolved artist are unstated.
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% and the single parameter already documents accepted formats (IDs, URIs, URLs) and the 1-20 range. The description's 'Up to 20 artists per call' merely restates maxItems, so it adds no syntax or format meaning beyond the schema. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and the exact contents returned: genres, moods, activities with 0-1 weights, and tempo average/min/max BPM, derived from top tracks. This clearly separates it from a plain metadata lookup, though it never names the adjacent siblings (get_artist_overview, get_artists_stats) that an agent would otherwise have to disambiguate from.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance at all: nothing explains when to pick this over get_artist_overview or get_artists_stats, nor any exclusion such as 'not suitable for full catalog analysis'. The only guidance-like sentence, 'Up to 20 artists per call', is a batching constraint rather than a selection rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_artist_overviewArtist overviewBRead-onlyIdempotentInspect
One artist's profile: monthly listeners, followers, world rank, top cities, top tracks with play counts, latest release, discography counts, related artists, biography and social links.
| Name | Required | Description | Default |
|---|---|---|---|
| artist | Yes | Spotify artist id, spotify:artist:<id> URI or open.spotify.com/artist/<id> URL. | |
| top_tracks | No | How many top tracks to return (1-10). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful context by listing the returned data categories, but it does not mention rate limits, error behavior, or whether missing data is omitted or null.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence that efficiently enumerates the returned data. It is appropriately sized for a read-only overview tool, though the long comma-separated list is slightly dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the burden of explaining return values, and it does so by listing the major data categories. For a read-only tool with full schema coverage and clear annotations, this is nearly complete, though it could clarify behavior when data is unavailable.
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%, and the schema fully documents both the artist identifier formats and the top_tracks range. The description adds no parameter-level meaning beyond what the schema already provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (one artist's profile) and enumerates the specific data returned, including listeners, rank, top tracks, releases, and related artists. It does not explicitly distinguish this tool from close siblings such as get_artist_insights, get_artists_stats, or get_related_artists, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives. With siblings like get_artist_insights, get_artists_stats, and get_related_artists, an agent must infer the distinction from names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_artists_statsArtist monthly listeners and statsARead-onlyIdempotentInspect
Monthly listeners, followers, world rank, popularity, genres and top 5 cities (with listener counts) for up to 50 artists in one call.
| Name | Required | Description | Default |
|---|---|---|---|
| artists | Yes | Spotify artist ids, spotify:artist:<id> URIs or open.spotify.com/artist/<id> URLs (1-50). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint, so the safety profile is covered. The description adds meaningful context beyond the annotations by enumerating exactly which fields come back and stating the batch limit of 50 artists, which is the key behavioral trait for planning calls. It does not mention rate limits or error handling, so it is not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with zero filler, front-loaded with what data is returned and ending with the batch scope. Every clause 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?
With no output schema and a single simple parameter, the description does the necessary work by listing the metrics returned, so an agent knows what to expect. It does not describe response structure or ordering for multiple artists, which keeps it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the single 'artists' parameter's accepted formats and 1-50 range are already fully documented. The description only echoes the 'up to 50' limit and adds 'in one call', providing marginal value beyond the schema. 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 names the exact resource (artists) and enumerates the specific metrics returned: monthly listeners, followers, world rank, popularity, genres, and top 5 cities with listener counts. It does not differentiate from close siblings like get_artist_overview or get_artist_insights, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for up to 50 artists in one call' implies a batch use case, but there is no explicit guidance on when to use this versus get_artist_overview or get_artist_insights, and no stated exclusions or prerequisites. Usage is inferable but not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_chartSpotify chartsARead-onlyIdempotentInspect
Spotify Charts by country: top_tracks (Top 200), viral_tracks (Viral 50, daily only), top_artists or top_albums. Each entry has rank, previous and peak rank, days (or weeks) on the chart, movement and, for top_tracks, the streams in that period. Defaults to the latest published daily chart.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Chart date YYYY-MM-DD; omit for the latest published chart. | |
| chart | No | Which chart. | top_tracks |
| limit | No | Entries to return (1-200). | |
| period | No | Daily or weekly chart (viral_tracks is daily only). | daily |
| country | No | 'global' or a 2-letter country code, e.g. 'us', 'br', 'mx'. | global |
| include_play_counts | No | top_tracks / viral_tracks: add each track's lifetime play count (slower). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/openWorld safety, and the description adds real context beyond them: viral_tracks is daily-only and include_play_counts is slower. That 'slower' note and the default-to-latest behavior are the kind of operational detail annotations cannot express.
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 tight sentences: resource and chart types first, entry fields second, default last. No filler and no repetition of annotation-declared safety traits.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly spends its words describing the shape of each entry (rank, previous/peak rank, days/weeks, movement, streams). Defaults are covered; only edge behaviors such as out-of-range dates or empty results are unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description adds meaning by tying period to output units ('days (or weeks) on the chart') and noting streams are only present for top_tracks. That clarifies field semantics rather than repeating 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?
States a specific verb+resource ('Spotify Charts by country') and enumerates the four chart types it returns, which cleanly separates it from siblings like get_tracks or get_artist_overview. An agent can tell what this returns without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the default behavior ('defaults to the latest published daily chart') and flags the viral_tracks daily-only constraint, which guides selection among the chart enum values. It doesn't name alternative tools or state exclusions, but the chart-type mapping functions as implicit routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_playlistGet playlistARead-onlyIdempotentInspect
A playlist's name, owner, followers and description, plus limit tracks (max 100) from offset with lifetime play counts. Use next_offset from the answer to page through long playlists (later pages skip the metadata and cost one request).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Tracks to return (1-100). | |
| offset | No | Index of the first track (0 = start). | |
| playlist | Yes | Spotify playlist id, spotify:playlist:<id> URI or open.spotify.com/playlist/<id> URL. | |
| include_play_counts | No | Add each track's lifetime play count. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive, so the safety bar is met. The description adds genuinely non-obvious behavior: the 100-track cap, that lifetime play counts are attached, and that subsequent pages omit metadata and consume one request each — useful for planning request budgets.
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 tight sentences with zero filler. The payload content is front-loaded, the pagination rule follows. Every clause carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the return-value burden and does so — it lists the metadata fields, the track slice, play counts, and the `next_offset` control field. Nothing essential to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description goes beyond the schema by tying `offset`/`limit` to a paging loop driven by a `next_offset` value returned in the answer, which adds interpretive meaning the schema alone doesn't convey.
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 names the resource and enumerates exactly what comes back — name, owner, followers, description, plus a bounded track slice with lifetime play counts — so the agent knows this is a playlist-metadata-plus-track-page tool. It does not explicitly contrast with siblings like `get_tracks` or `get_album`, but the scope is unambiguous on its own.
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 gives concrete operational guidance: use `next_offset` from the response to page, and later pages skip metadata and cost one request. That tells the agent how to iterate. It stops short of stating when to prefer this over `get_tracks` or `search`, so no explicit alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_track_insightsTrack genres, moods and BPMBRead-onlyIdempotentInspect
Genres, moods and activities (with Spotify's 0-1 weights), tempo in BPM, credits (writers, producers), lyrics flag and vocal languages for up to 50 tracks.
| Name | Required | Description | Default |
|---|---|---|---|
| tracks | Yes | Spotify track ids, spotify:track:<id> URIs or open.spotify.com/track/<id> URLs (1-50). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety behavior is covered. The description adds useful context about returned data categories, Spotify 0-1 weights, and the 50-track cap, but does not address authentication, rate limits, or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, dense sentence with no filler. It front-loads the most important data categories, though the noun-phrase format is slightly less immediately actionable than a verb-led statement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and only one fully documented parameter, the description does a good job specifying what information is returned and the batch limit. It could be stronger if it stated the retrieval action explicitly or mentioned response structure, but it is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema fully documents the tracks parameter, including accepted ID formats and the 1-50 range. The description's 'up to 50 tracks' is consistent but adds little beyond the schema, 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 identifies the resource as track insights and enumerates the specific data returned: genres, moods, activities, BPM, credits, lyrics flag, and languages. It lacks an explicit verb and does not name sibling tools, but the field list makes its scope distinct from get_tracks or get_track_play_count.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus siblings like get_tracks, get_track_play_count, or get_album. The only contextual hint is the 50-track batch limit, which does not explain selection criteria or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_track_play_countTrack play countsARead-onlyIdempotentInspect
Lifetime Spotify play counts (streams) for up to 50 tracks in one call, with track name, artists and release date. The fastest way to compare streams. A play count of 0 means fewer than 1,000 plays.
| Name | Required | Description | Default |
|---|---|---|---|
| tracks | Yes | Spotify track ids, spotify:track:<id> URIs or open.spotify.com/track/<id> URLs (1-50). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnly/idempotent/openWorld semantics, so the description's real contribution is the data caveat: counts are lifetime, and 0 means fewer than 1,000 plays — essential for interpreting results correctly. It would score higher if it also noted missing/unknown tracks or response ordering.
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 the payload, then the comparative value proposition, then the interpretation caveat. Every sentence earns its place and nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description responsibly enumerates the returned fields and explains the zero-value encoding, which is the main gotcha for a single-parameter read tool. Only edge cases (invalid IDs, not-found tracks, result ordering) are left unaddressed.
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% and the schema already specifies accepted formats (IDs, spotify:track URIs, open.spotify.com URLs) and the 1–50 range. The description only restates the 50-track cap, adding no new parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('lifetime Spotify play counts (streams) for up to 50 tracks') plus the returned fields (track name, artists, release date), which is far more concrete than a sibling like get_tracks. It implies but never names the differentiation from get_track_insights or get_tracks, so it stops short of unambiguous routing.
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 fastest way to compare streams' hints at the comparison use case, but no alternative tool is named and there are no exclusions (e.g., when to prefer get_track_insights for per-track analysis). Usage must be inferred by the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tracksGet tracksARead-onlyIdempotentInspect
Track details for up to 50 tracks in one call: name, artists, album, release date, duration, explicit flag, popularity, ISRC and (by default) lifetime play count. include_insights adds genres, moods, activities, BPM, credits, lyrics flag and languages. A play count of 0 means fewer than 1,000 plays.
| Name | Required | Description | Default |
|---|---|---|---|
| tracks | Yes | Spotify track ids, spotify:track:<id> URIs or open.spotify.com/track/<id> URLs (1-50). | |
| include_insights | No | Add genres, moods, BPM, credits and languages (slower). | |
| include_play_counts | No | Add each track's lifetime play count. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, openWorld, so safety is covered; the description instead adds genuinely new behavior: the 'slower' performance cost of include_insights and the default-on play counts. The 'play count of 0 means fewer than 1,000 plays' note is a valuable data-semantics disclosure that prevents a likely misinterpretation.
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 dense sentences with zero filler; the core capability and the field list come first, followed by the optional-insights expansion and the one edge-case caveat. Every clause carries 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?
With no output schema, the description appropriately enumerates the returned fields and covers defaults, performance cost, and the play-count edge case. It is silent on what happens when some of the supplied IDs are invalid (error vs. partial result), which matters for a 50-item batch call.
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 still earns above baseline by explaining what include_insights actually returns and by clarifying that 0 is a bucketed value, not a literal zero. It does not add anything about accepted ID formats beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Track details') and enumerates the returned fields, making the scope concrete. The batch framing ('up to 50 tracks in one call') distinguishes it from the single-track siblings get_track_insights and get_track_play_count, though it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: 'include_insights adds genres, moods... (slower)' signals a performance trade-off, and the default behavior of include_play_counts is clear. There is no explicit when-to-use-this-vs-sibling guidance, e.g. no routing to get_track_play_count for a single track's plays.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
isrc_lookupFind tracks by ISRCARead-onlyIdempotentInspect
Find the Spotify track(s) for an ISRC (International Standard Recording Code), e.g. USUG11904206. Returns ids, names, artists, album and release date.
| Name | Required | Description | Default |
|---|---|---|---|
| isrc | Yes | 12-character ISRC; spaces and dashes are ignored. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so safety is covered. The description adds value beyond that by enumerating the return payload (ids, names, artists, album, release date), which matters since there is no output schema. It stops short of disclosing empty-result or multi-match 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?
A single compact sentence pair with the identifying concept and example front-loaded, followed by the return shape. No filler, no restatement of the title.
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 one-parameter read-only lookup with full annotation coverage, the definition covers purpose, input form, and return fields. The only gap is edge-case behavior, such as what is returned when the ISRC resolves to nothing or to multiple 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 coverage is 100% and the schema already documents the length bounds and that spaces/dashes are ignored. The description contributes only a sample ISRC value, which is marginally useful but adds no semantics the schema lacks; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Find') and resource ('Spotify track(s) for an ISRC'), defines the acronym, and supplies a concrete example value. This is clearly distinct from siblings like search or get_tracks, which are not keyed by ISRC.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the resource type: if you hold an ISRC, this is the tool. But the description never explicitly says when to prefer it over search, nor does it name alternatives or any when-not condition. An agent must infer the routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchSearch SpotifyARead-onlyIdempotentInspect
Search the Spotify catalog by name to find ids for the other tools. type picks what to search: tracks, artists, albums or playlists. Returns up to limit hits (max 20) with id, name, key fields and open.spotify.com URL, plus results (id such as track:, title, url) for the fetch tool. For track searches, include_play_counts adds each hit's lifetime play count.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | What to search for. | tracks |
| limit | No | Number of results (1-20). | |
| query | Yes | Search text, e.g. 'Bad Bunny' or 'blinding lights the weeknd'. | |
| include_play_counts | No | Track searches only: add lifetime play counts (slightly slower). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With read-only, idempotent, and open-world annotations already present, the description adds useful behavioral detail: result fields, the 20-hit cap, the `results` array for fetch, and that play-count inclusion is slightly slower. It does not fully specify all returned fields or pagination behavior, so it falls short of 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then layers in type behavior, return structure, and the play-count caveat. Every sentence adds actionable 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?
There is no output schema, so the description appropriately explains what search returns, including IDs, names, URLs, and the `results` array for the fetch tool. Combined with annotations covering safety and idempotency, it gives an agent enough context to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters. The description clarifies `type` options and reinforces the return-oriented role of `results` and `include_play_counts`, but most parameter meaning is already present in structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: search the Spotify catalog by name to find IDs. It distinguishes itself from sibling tools by positioning search as the ID-discovery step for other tools such as fetch.
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 clearly says to use search to find IDs for other tools and explains that `type` selects tracks, artists, albums, or playlists. It does not explicitly compare against every sibling like get_album or get_track_insights, but the intended usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Added
fetch
12 tool updates
- First observed
get_album - First observed
get_artist_insights - First observed
get_artist_overview - First observed
get_artists_stats - First observed
get_chart - First observed
get_playlist - First observed
get_related_artists - First observed
get_track_insights - First observed
get_track_play_count - First observed
get_tracks - First observed
isrc_lookup - First observed
search
Related MCP Connectors
Spotify: Spotify Data API for Millions of songs & podcasts, artists, albums, playlists and more.
Free ISRC lookup and public titles for Reels, TikTok, Shorts, and X links.
Find active Spotify playlists for a song and check a playlist's integrity. No curator contacts.
Music search over 185M+ tracks: describe a sound, find similar songs, ISRC/ISWC lookup, beat grids.
Related MCP Servers
- AlicenseAqualityCmaintenanceAutonomous music intelligence & A&R qualification engine. Extracts acoustic metadata (BPM, key, mood), scores real-time Spotify streaming traction, and detects AI-generated audio (Suno/Udio).566 npmMIT
- AlicenseBqualityDmaintenanceEnables AI agents to access public Spotify data (tracks, albums, artists, playlists, podcasts) without an API key, including lyrics and podcast transcripts with optional login.282,984 PyPI323MIT
- AlicenseAqualityDmaintenanceEnables searching and managing Spotify playlists, tracks, and user information through the Spotify Web API.10MIT

sonovault-mcpofficial
AlicenseAqualityBmaintenanceProvides access to the SonoVault music metadata API, enabling search and retrieval of information about 90M+ tracks, artists, labels, and releases, including ISRC, ISWC, and cross-platform IDs.1596 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.