SpotifyMCP
This server gives an AI assistant full control over Spotify: playback, search, library, playlists, and profile management via the Web API.
Playback: get now playing/current state, play/pause, skip/previous, seek, set volume/shuffle/repeat, view and add to queue, list and transfer devices.
Search & catalog: search tracks, artists, albums, playlists, shows, episodes; get details for tracks, artists, albums, shows, episodes, audiobooks, and chapters.
User profile & stats: get current user profile, top tracks/artists, and recently played.
Library management: get, save, remove, and check saved tracks, albums, shows, episodes, audiobooks; manage followed artists.
Playlists: list, create, update, get playlists, add/remove/reorder items, and manage cover images.
Convenience extras: search-and-play best match, pagination up to 500 items, dry-run previews, read-only mode, diagnostics, duplicate cleanup, and M3U/CSV import/export.
Provides tools for interacting with the Spotify Web API, enabling playback control, searching tracks, albums, artists, playlists, podcasts, and audiobooks, managing the user's library and playlists, and retrieving listening personalization data.
Click on "Deploy 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., "@SpotifyMCPPlay my Discover Weekly playlist on my office speakers."
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.
SpotifyMCP
An MCP server that wraps the Spotify Web API โ lets Claude and other AI assistants control playback, search the catalog (tracks, podcasts, audiobooks), and manage your library and playlists.
600 tools. Every non-deprecated endpoint, plus extras most servers skip. Full list โ
๐ค Paste this to your agent
Copy the block below into Claude Code, Cursor, OpenClaw, or any coding agent โ it will set SpotifyMCP up for you.
Set up the Spotify MCP server from https://github.com/NovaLux12/spotify-mcp-server. 1. Walk me through creating a Spotify app at https://developer.spotify.com/dashboard with redirect URI http://127.0.0.1:8888/callback, or use the Client ID I paste below. 2. Clone, build, and authenticate: git clone https://github.com/NovaLux12/spotify-mcp-server.git cd spotify-mcp-server && npm ci && npm run build SPOTIFY_CLIENT_ID=<paste-here> npm run auth 3. Wire it into my MCP host config and verify with the get_me tool. My Spotify Client ID: <paste here or say "help me create one">
Why this one
Complete | 600 tools โ playback, search, catalog, library, playlists, following + extras like duplicate cleanup, M3U/CSV import-export, podcast sessions, snapshot diffing, listening analytics, market checks, stats.fm taste imports, and 11 taste composite briefs, playlists, and reports. |
Safe |
|
Honest | No zombie tools for endpoints Spotify removed. Legacy lookups explain the 403 instead of crashing. |
Polished | Paginated (up to 500), podcasts first-class, device-aware playback, |
Related MCP server: Spotify MCP Server
Quick start
1. Create a Spotify app
Spotify Developer Dashboard โ Create app โ add this Redirect URI exactly:
http://127.0.0.1:8888/callbackCopy the Client ID.
2. Authenticate
SPOTIFY_CLIENT_ID=your_client_id_here npx -y @novalux12/spotify-mcp@latest authOpens a browser, saves tokens to ~/.spotify-mcp/tokens.json, auto-refreshes after.
Windows (Command Prompt):
set SPOTIFY_CLIENT_ID=your_client_id_here && npx -y @novalux12/spotify-mcp@latest authWindows (PowerShell):
$env:SPOTIFY_CLIENT_ID="your_client_id_here"; npx -y @novalux12/spotify-mcp@latest authHeadless / remote host:
SPOTIFY_HEADLESS=1 SPOTIFY_CLIENT_ID=your_client_id_here npx -y @novalux12/spotify-mcp@latest auth
# prints a URL โ open it on any machine โ paste the redirect backCheck: npx -y @novalux12/spotify-mcp@latest doctor โ exit 0 means you're good.
3. Add to your MCP host
{
"mcpServers": {
"spotify": {
"command": "npx",
"args": ["-y", "@novalux12/spotify-mcp@latest"],
"env": { "SPOTIFY_CLIENT_ID": "your_client_id_here" }
}
}
}Restart the host. A hammer icon in the chat input means it's connected.
Claude Code (no JSON editing):
claude mcp add spotify -- npx -y @novalux12/spotify-mcp@latest
export SPOTIFY_CLIENT_ID=your_client_id_hereOpenClaw โ ~/.openclaw/openclaw.json โ mcp.servers:
"spotify": {
"command": "node",
"args": ["/path/to/spotify-mcp-server/dist/index.js"],
"cwd": "/path/to/spotify-mcp-server",
"env": { "SPOTIFY_CLIENT_ID": "your_client_id_here" }
}Any spec-compliant host works โ same command/args/env shape under mcpServers or servers. If the host can't pass env vars, authenticate once beforehand; the token cache persists.
What you can ask
"What are my top tracks this month?"
"Make a late-night driving playlist"
"Add Blinding Lights to my workout playlist"
"What podcasts have new episodes?"
"Clean duplicates across all my playlists"
"What does my taste look like? Build a playlist from it"
"Do my stats.fm lifetime genres match what I've played this month?"
Configuration
All via env vars โ no config file. Only SPOTIFY_CLIENT_ID is required.
Variable | Example | Purpose |
|
| Trim by group for hosts that cap tool counts |
|
| Hide every write tool |
|
| Log mutations to JSONL for undo |
Full reference: docs/configuration.md
spotify_doctor (CLI + in-server tool) diagnoses token state, scope gaps, Premium gating, and rate-limit cooldowns without extra setup.
Docs
SPEC.md โ every tool, resource & prompt
ARCHITECTURE.md โ how it's built
docs/configuration.md โ all env vars
docs/statsfm.md โ stats.fm second source: setup, tool cheat sheet, gotchas
docs/cookbook.md โ ten copy-paste agent recipes
docs/taste.md โ anonymized taste showcase driving a playlist
docs/faq.md โ auth, Premium, 403s, headless, tokens
CONTRIBUTING.md โ dev setup & conventions
CHANGELOG.md โ release history
Requirements
Premium for playback control (play/pause/skip/seek/volume/queue). Free accounts can still use search, library & playlists.
Node 22.9+, Spotify app in dev mode (5 users until extended quota).
Audiobooks gated by Spotify to US/UK/CA/IE/NZ/AU.
A subset of endpoints is registration-gated โ 403 on current app registrations regardless of scopes or Premium. See Registration-gated endpoints.
Registration-gated endpoints
Some Web API endpoints are denied at the app-registration level: on current Spotify app registrations they return 403 Forbidden no matter which OAuth scopes you grant or whether the account is Premium. This is Spotify-side gating, not a misconfiguration on your end. Verified by live probe on 2026-08-27 (#329):
Response | Endpoints |
|
|
|
|
|
|
Notes:
Tools wrapping a gated endpoint are not hidden โ they still work on legacy app registrations where Spotify granted the endpoint. On a newer registration you'll get the server's plain-English 403 explanation instead of a crash.
The undocumented
/me/library/containscheck is not gated (it returned 200 on the same probe) and powers the duplicate-cleanup tooling.Legacy lookups the server already explains gracefully (audio-features, audio-analysis, related-artists, featured-playlists) also probe as 403; their tools say so in the error message.
"Not authenticated" โ re-run
auth; check~/.spotify-mcp/tokens.jsonexists and the redirect URI matches exactly (no trailing slash).Auth loop / S256 error โ open a private window, log into spotify.com first, then retry the auth URL there.
Port in use (8888) โ free the port, set
SPOTIFY_REDIRECT_URIto another port, or useSPOTIFY_HEADLESS=1."Premium required" on playback โ expected on Free accounts; no workaround.
Forbiddenon lookup tools (categories, markets, top-tracks, user profiles, librarycontainschecks) โ these endpoints are registration-gated by Spotify; see Registration-gated endpoints.Still stuck?
npx -y @novalux12/spotify-mcp@latest doctoror ask your agent to run the spotify-mcp-doctor skill.
Development
git clone https://github.com/NovaLux12/spotify-mcp-server.git && cd spotify-mcp-server
npm ci && npm run build
cp .env.example .env # add your Client ID
npm run auth # one-time login
npm run dev # run from source
npm test # unit + MCP smoke testsNot affiliated with Spotify. Use per the Spotify Developer Terms.
MIT ยฉ Carme99 and NovaLux12 contributors ยท Acknowledges calebWei/SpotifyMCP and varunneal/spotify-mcp.
Available Tools
608 toolsadded_on_this_dayA
Show tracks you saved on this calendar day (month + day) in previous years โ your library "on this day". Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| scan_cap | No | Max saved items to walk per paginated source (default: SPOTIFY_MCP_FETCH_ALL_CAP) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It explicitly says 'Read-only,' which is a useful non-mutating flag, but it does not disclose pagination/scan behavior, rate limits, or output characteristics beyond the schema's parameter notes.
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 that is front-loaded with the core behavior and ends with the useful read-only flag. No filler or repetition; every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only query tool with fully schema-documented parameters, this description is adequate for selection and invocation. It lacks an output schema and does not describe result shape beyond 'show tracks,' but the core behavior and safety profile are sufficiently conveyed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all three parameters (scan_cap, max_results, response_format) documented with types, defaults, and enum values. The tool description adds no parameter-specific meaning beyond the schema, 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?
States a specific verb ('Show'), resource ('tracks you saved'), and a distinctive temporal filter (calendar day month+day in previous years). The 'on this day' framing makes the intent unmistakable and separates it from generic saved-track listing tools like get_saved_tracks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use case is evident from the description, but there is no explicit when-to-use or when-not-to-use guidance. It does not name alternatives or exclusions, leaving the agent to infer when this tool is preferred over related saved-track or search tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_to_playlistC
Add tracks or episodes to a playlist. Max 100 URIs per call.
| Name | Required | Description | Default |
|---|---|---|---|
| uris | Yes | Track or episode URIs to add | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| position | No | Insert at index; appends if omitted | |
| playlist_id | Yes | Playlist ID | |
| check_duplicates | No | Skip URIs that are already in the playlist instead of appending them (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden but only reveals the 100-URI cap, which is already encoded in the schema as uris.maxItems. It does not state that duplicates are appended by default, that the operation mutates the playlist irreversibly, or what dry_run and position imply behaviorally, nor does it mention any returned snapshot or receipt.
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 with no filler, and the hard constraint is front-loaded. It is efficient and readable, though it borders on under-specification given the 5-parameter surface.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 5 parameters, no annotations, and no output schema, yet sits among closely related siblings (batch_add_to_playlist, add_to_queue, playlist_add_by_search). The description does not cover what the call returns, how it differs from batch_add_to_playlist, or the default duplicate-appending behavior, leaving the agent to infer too much for confident 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%, so the baseline of 3 applies. The description's 'Max 100 URIs per call' reinforces the uris.maxItems constraint but adds no meaning beyond what the schema already documents for each parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Add') with a clear resource ('tracks or episodes to a playlist') and a cardinality constraint ('Max 100 URIs per call'). The action and resource are unambiguous, but it does not differentiate from the very similar sibling batch_add_to_playlist, so it stops 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 provides no guidance on when to use this tool versus nearby alternatives such as batch_add_to_playlist, add_to_queue, or playlist_add_by_search. The 'Max 100 URIs per call' line is an operational constraint, not a selection criterion, and nothing excludes or routes to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_to_queueA
Add a track or episode to the end of the playback queue Also covers: bulk via batch_add_to_queue, playlist queue via queue_playlist โ See also: batch_add_to_queue, queue_playlist.
| Name | Required | Description | Default |
|---|---|---|---|
| uri | Yes | Spotify track or episode URI (e.g. spotify:track:...) | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| device_id | No | Target device ID | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It does disclose the core mutation ('add to queue') and the end-of-queue positioning, and the dry_run parameter is a helpful safety signal. However, it does not mention prerequisites such as requiring an active playback device, or what happens to the existing queue.
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 main action is front-loaded and concise, and the related-tool pointers are useful. The structure is slightly repetitive ('Also covers' followed by 'See also' naming the same tools), but it remains compact and readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple mutation with fully documented parameters, the description is mostly sufficient. However, with no output schema and no annotations, it omits behavioral context like active-device requirements and error-prone preconditions, leaving some ambiguity for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents uri, dry_run, device_id, and response_format. The description adds no parameter-level meaning beyond the schema, which matches the baseline expectation.
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 action ('Add'), resource ('track or episode'), and precise placement ('to the end of the playback queue'). It also points to distinct siblings for bulk and playlist-wide queuing, making the tool's scope clear.
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 routes bulk operations to batch_add_to_queue and playlist queuing to queue_playlist, which is strong usage guidance. It does not state any exclusions or conditions, but the alternatives are named clearly enough for an agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
album_anniversary_checkA
Upcoming album anniversaries for an artist within the next window_days, with milestone years (5/10/15/โฆ) flagged โ plan re-listens or anniversary posts. Quota: ๐ก one paginated /artists/{id}/albums walk.
| Name | Required | Description | Default |
|---|---|---|---|
| artist_id | Yes | Spotify artist ID, URI, or URL | |
| window_days | No | Look-ahead window in days. Default: 30 | |
| milestone_step | No | Flag anniversaries divisible by this step. Default: 5 | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does useful work: it discloses the quota and backend cost ('one paginated /artists/{id}/albums walk') and clarifies how anniversaries are selected. It does not detail output sorting or error behavior, but the core side-effect-free, quota-relevant behavior is surfaced.
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 compact, front-loaded with the core function, and every sentence carries information: the result, the use case, and the quota. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-style lookup with four well-documented parameters, the description covers the main behavior and cost. There is no output schema, but response_format in the input schema partially compensates by describing the available return styles.
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 baseline is 3. The description adds a little context by explaining window_days and the milestone-flag concept, but it mostly restates what the schema already specifies and does not enrich response_format.
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 what the tool reports: upcoming album anniversaries for an artist within a configurable window, with milestone years flagged. It avoids tautology and conveys a distinct capability, but it does not explicitly contrast itself with siblings like check_artist_releases or artist_album_timeline.
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 a use case ('plan re-listens or anniversary posts'), which implies when an agent would call it. It does not state when to prefer alternatives or when the tool is not appropriate, leaving much of the routing decision to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
album_duration_reportB
Runtime profile for an artist's studio albums: total length, track count and longest track per album, ranked by runtime โ find the epics and the EPs. Quota: ๐ด paginated walk + batched /albums lookups.
| Name | Required | Description | Default |
|---|---|---|---|
| artist_id | Yes | Spotify artist ID, URI, or URL | |
| max_albums | No | Albums to scan. Default: 30 | |
| max_results | No | ||
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With zero annotations, the description carries the full behavioral burden. The 'Quota: ๐ด paginated walk + batched /albums lookups' line is a genuinely useful disclosure of API call pattern and cost, which is rare and valuable. But it doesn't state that the operation is read-only, what happens for an artist with no studio albums, or how results are paginated/capped.
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 the core output contract front-loaded; no wasted words. The 'epics and the EPs' phrase adds mnemonic value rather than fluff, and the quota line packs disproportionate operational information into one compact fragment.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose and cost well for a report-style tool, but with no annotations and no output schema it leaves gaps: the concrete return shape beyond the three summary fields, ranking direction (descending is only implied by 'epics'), edge cases, and max_results semantics. Adequate for basic tool selection, thin for confident invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, and the schema already documents artist_id, max_albums, and response_format including defaults and enum meaning. The description's quota line implies cost scales with the walk but never ties it to max_albums or explains how max_results caps output; max_results is left undocumented in both schema 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?
States a specific scope โ an artist's studio albums โ and three concrete outputs (total length, track count, longest track) with a defined ordering (ranked by runtime). The verb is nominalized ('Runtime profile') rather than an explicit action verb, and it doesn't name its closest siblings like albums_runtime_batch or album_track_stats, so differentiation is implicit in the 'studio albums' scope rather than explicit.
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 'studio albums' scope implies exclusions (no singles, EPs, live albums, remixes), and the quota warning signals this is a heavy operation, hinting the agent should prefer lighter tools when appropriate. However, no sibling is named and no explicit when-to-use / when-not-to-use guidance is given, so routing decisions rely on inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
album_edition_lintA
Lint your saved albums for the same record kept across multiple editions (same name after edition-noise stripping + primary artist, distinct album IDs). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| scan_cap | No | Max saved items to walk per paginated source (default: SPOTIFY_MCP_FETCH_ALL_CAP) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it explicitly states 'Read-only', disclosing the safety profile up front. It also discloses the normalization behavior (edition-noise stripping) that drives detection. It does not describe the return format or pagination behavior, but for a lint tool this is a secondary concern given the safety and matching semantics are both clearly disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with zero filler: the first states the action and exact detection rule, and the second delivers the safety flag. Every word earns its place, and the most decision-relevant information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only analysis tool with three fully-documented optional parameters, the description covers the core invocation needs: what it scans, how it matches, and that it is non-mutating. The one gap is return-value semantics โ no output schema exists and the description does not hint at what the lint report contains โ but this is partially mitigated by the response_format parameter enumerating output styles.
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 three parameters thoroughly: scan_cap explains its default and upper bound, max_results explains its default and env fallback, and response_format explains each enum value. The description adds nothing about parameters, so the baseline 3 applies โ the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Lint') targeting a specific resource ('your saved albums') and precisely defines what it detects: the same record across multiple editions, with an explicit matching rule (same name after edition-noise stripping + primary artist, distinct album IDs). This level of specificity distinguishes it from generic duplicate-finding siblings like duplicate_saved_versions even without naming 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?
The purpose statement implies when to use it (when you suspect the same record is saved in multiple editions), but the description never names alternatives or states when NOT to use it. This is a real gap given the sibling list contains duplicate_saved_versions and find_duplicate_saved_tracks, which an agent could easily confuse with this tool. The usage context is clear for the tool itself, but no exclusions or alternative routing is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
album_focus_reportA
Deep focus report on one album: track-by-track listing with cumulative runtime, duration statistics, edition detection (same base title elsewhere in the artist discography) and label/copyright capture. Quota: 1 GET /albums/{id} + 1 paginated discography walk.
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | ISO 3166-1 alpha-2 market code (e.g. 'US'); omit for 'from_token' behaviour | |
| album_id | Yes | Spotify ID, URI (spotify:...), or open.spotify.com URL โ all resolve to the same entity | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the behavioral burden. It explicitly discloses the quota (1 GET /albums/{id} + 1 paginated discography walk), which tells the agent about resource usage and read-only GET semantics. It also reveals that the tool will walk the artist discography, which is important hidden behavior not otherwise visible from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the first sentence establishes the tool's purpose and key output features, and the second sentence states the quota. Every clause adds substantive information without redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must convey what the tool returns; it does so by listing the report's contents (track listing, runtime, duration stats, edition detection, label/copyright). The quota and discography-walk behavior add important operational context. It could be slightly more explicit about the output format or edge cases, but it is largely complete for a read-only report tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already well documented. The description adds no additional parameter-level detail beyond the general 'one album' framing, which is already implied by album_id. This matches the baseline for a fully self-documenting 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 is specific: it names the tool as a 'deep focus report on one album' and enumerates distinct deliverables (track-by-track listing, cumulative runtime, duration stats, edition detection, label/copyright capture). This uniquely positions it against sibling tools like get_album or album_track_stats by describing a composite analysis rather than a raw lookup.
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 'deep focus report on one album' implies when to use it, but there is no explicit guidance about when to prefer it over alternatives such as get_album, get_album_tracks, album_track_stats, or album_duration_report. No when-not-to-use or alternative-routing information is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
album_openers_reportA
List track 1 (the side-A opener) of every studio album by an artist, chronologically โ the "how each record begins" view. Quota: ๐ด paginated walk + batched /albums lookups.
| Name | Required | Description | Default |
|---|---|---|---|
| artist_id | Yes | Spotify artist ID, URI, or URL | |
| max_albums | No | Albums to scan (album group only). Default: 30 | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden, and it does add a useful quota warning: '๐ด paginated walk + batched /albums lookups.' This signals cost and operation style. However, it does not disclose edge cases such as artists with more studio albums than the max_albums default, how 'studio album' is determined, or what happens when a track 1 is missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The core behavior is front-loaded, the 'how each record begins' framing adds context efficiently, and the quota note is a compact, useful operational warning that 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 tool with no output schema, no annotations, and a parameter-rich sibling environment, the description conveys the main purpose and cost but leaves gaps. It does not clarify whether max_albums can exceed 30 to truly cover 'every' studio album, nor does it describe what the response formats contain beyond the schema enum values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage: artist_id, max_albums, and response_format each have meaningful descriptions. The tool description does not add parameter-level detail beyond the schema, so it earns the baseline score of 3 rather than higher.
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: 'List track 1 (the side-A opener) of every studio album by an artist, chronologically.' This clearly communicates the tool's core function and the unique 'how each record begins' angle. However, it does not explicitly distinguish itself from sibling discography tools like get_artist_albums or artist_album_timeline, so it stops 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 use case is implied through the descriptive 'how each record begins' view: an agent can infer this is for when the user wants album openers. But there is no explicit when-to-use, when-not-to-use, or alternative recommendation among the many discography-related siblings, so guidance is only implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
album_representative_planA
Builds a deterministic "sample this album" plan: opener, mid-point, closer and the longest track, ordered by original position with cumulative offsets, from the full album payload. Quota: 1 GET /albums/{id} (+1 paged tracks walk above 50 tracks).
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | ISO 3166-1 alpha-2 market code (e.g. 'US'); omit for 'from_token' behaviour | |
| album_id | Yes | Spotify ID, URI (spotify:...), or open.spotify.com URL โ all resolve to the same entity | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does substantial work: it discloses the deterministic nature, the exact selection algorithm, the ordering rule, and the API quota (1 GET /albums/{id}, +1 paged walk above 50 tracks). It does not explicitly state read-only status or error behavior, but 'builds a plan' strongly implies a pure computation with no side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with zero filler. The first sentence front-loads the core action and output composition; the second adds the quota. Every clause earns its place, and the algorithm is packed efficiently without losing readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a plan-building tool with no output schema and no annotations, the description covers the essential behavioral surface: determinism, selection criteria, ordering, and API cost. Missing are edge-case behavior (e.g., albums with fewer than four tracks) and explicit confirmation of no side effects, but the core information an agent needs to call it correctly is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents album_id, market, and response_format. The description adds marginal value by noting the operation consumes the 'full album payload', which clarifies how album_id is used internally, but this is lightweight context rather than substantive parameter semantics.
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 ('Builds'), resource ('album'), and a precisely defined output: opener, mid-point, closer, longest track, ordered by original position with cumulative offsets. This clearly distinguishes it from siblings like album_openers_report, album_track_stats, or front_to_back_plan without needing to inspect their schemas.
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 "sample this album" plan implies the use case (wanting a representative cross-section of an album), and the quota line conveys cost expectations. However, there is no explicit when-to-use guidance, no exclusions, and no named alternatives among the hundreds of siblings, leaving selection partially to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
albums_runtime_batchA
[local-compute] Runtime per album โ total and mean track length โ for up to 20 albums in one pass (album objects embed the first 50 tracks, so totals are exact for albums up to 50 tracks and flagged as partial above that). Quota: ๐ข one GET /albums?ids= call.
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | ISO 3166-1 alpha-2 market code (e.g. 'US'); omit for 'from_token' behaviour | |
| album_ids | Yes | Up to 20 Spotify album IDs | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavior disclosure. It reveals local-compute behavior, the exactness limit at 50 tracks, the partial-flagging above that threshold, and the quota cost of one GET /albums?ids= call. This is rich, non-obvious behavioral context that goes well beyond a simple function summary.
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: the purpose is front-loaded, the correctness caveat is contextual, and the quota is stated last. No filler or redundancy; every phrase 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 3-parameter tool with no output schema, the description is complete enough. It covers the batching limit, the exactness boundary, the partial-flagging behavior, and the quota implication. An agent has what it needs to invoke the tool correctly and interpret the result.
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 three parameters well. The description reinforces the album_ids batching limit and implies what the computed output means, but it does not add significant new parameter-level semantics 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 states a specific computation (total and mean track length per album), the resource (albums), and a batching scope (up to 20 in one pass). It clearly distinguishes itself from raw album retrieval tools like get_several_albums by emphasizing local-compute and runtime statistics.
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 makes the intended use clear: computing runtime stats for multiple albums efficiently in one API call. It communicates batching limits and quota impact, which helps an agent decide when to use this tool over per-album alternatives. However, it does not explicitly name sibling tools or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
album_track_explorerA
Full track listing for one album with per-track cross-album duplicate counts โ spot which songs are unique to this release vs recycled across the discography. Quota: ๐ด one album fetch + one paginated discography walk.
| Name | Required | Description | Default |
|---|---|---|---|
| album_id | Yes | Spotify album ID, URI, or URL | |
| max_results | No | ||
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the behavioral disclosure burden. It usefully discloses the operation's cost: 'Quota: one album fetch + one paginated discography walk.' It also conveys read-only intent through 'track listing' and 'spot,' though it never explicitly says no changes are made to the user's library.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two focused sentences, front-loading the tool's primary action and outcome, then adding the quota warning. There is no filler, repetition of the tool name, or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only explorer with three parameters and no annotations, the description supplies the essential context: what it returns, its differentiating use case, and its quota cost. The main gap is the unclarified max_results parameter, but a correct invocation is still achievable from the schema and description together.
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 no parameter-level meaning beyond the schema. Album_id and response_format are documented in the schema, but max_results is not described anywhere, and the description's 'full track listing' wording does not clarify how max_results interacts with the album tracks versus the paginated discography walk.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific resource and function: 'Full track listing for one album with per-track cross-album duplicate counts.' The added phrase 'spot which songs are unique to this release vs recycled across the discography' differentiates it from simpler album-listing tools like get_album_tracks and from album stats tools like album_track_stats.
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 a concrete use case: identifying which tracks on an album are unique versus reused elsewhere in the discography. It does not explicitly name sibling alternatives or state when not to use this tool, so it stops short of a 5, but the scenario is clear enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
album_track_statsA
[local-compute] Track-length statistics for one album: min/max/mean/median plus a longest-track callout, built from a paged /albums/{id}/tracks walk. Quota: ๐ก one paginated walk (usually a single call).
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | ISO 3166-1 alpha-2 market code (e.g. 'US'); omit for 'from_token' behaviour | |
| album_id | Yes | Spotify album ID | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It discloses that this is a '[local-compute]' operation built from a paged /albums/{id}/tracks walk and states the quota, which helps an agent assess cost. However, it does not explicitly state that the operation is read-only or side-effect-free, and the 'local-compute' label is somewhat ambiguous about whether any API request is actually performed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. It front-loads the computed statistics and immediately gives quota and pagination context, making it easy for an agent 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?
The description covers the main purpose, the specific statistics returned, and the quota/cost. Since there is no output schema, naming min/max/mean/median and longest-track callout partially compensates. It does not mention how market affects track availability or what happens on invalid album IDs, but these are minor for a stats tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter (album_id, market, response_format) already documented in the schema. The description adds only the album-scope context and the internal paginated walk, which does not materially enhance parameter understanding 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 tool computes 'Track-length statistics for one album' with min/max/mean/median plus a longest-track callout, giving a specific verb, resource, and output. It does not explicitly name sibling alternatives, but the scope ('one album') and stats focus are unambiguous enough to separate it from related 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?
Usage is implied by the description: an agent should use this when it needs track-length statistics for a single album. It also signals cost with 'Quota: ๐ก one paginated walk,' but there is no explicit guidance on when to prefer this over alternatives like album_duration_report or album_track_explorer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apply_device_presetsB
Apply all stored per-device volume presets via PUT /me/player/volume.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It identifies the operation as a PUT mutation, but it does not state whether volumes are changed on multiple devices, whether presets apply only to active devices, whether the operation is reversible, or what happens when no presets exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. It names the action, the scope, and the endpoint concisely while remaining immediately scannable.
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 mutating bulk operation with no annotations and no output schema, the description is thin. It omits the concrete effect on devices, the return/confirmation shape, and failure behavior, so an agent would have to infer or safely probe these details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100%, with clear descriptions for dry_run and response_format, so the baseline is 3. The description itself adds no parameter-level meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Apply all stored per-device volume presets') and identifies the exact resource/endpoint (PUT /me/player/volume). The 'all stored per-device' scope distinguishes it from siblings like list_device_presets, set_device_volume_preset, and apply_volume_plan, so an agent can select it without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to choose this tool over related siblings such as set_device_volume_preset, list_device_presets, apply_volume_plan, or plan_volume_level_across_devices. The action is implied by the name and description, but there are no explicit exclusions, prerequisites, or alternative selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apply_sceneA
Apply a saved scene: resolve its device hint, transfer playback, then set volume/shuffle/repeat and start the saved context (in that order; missing targets are skipped)
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Scene name to apply | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well by disclosing the operation order and that missing targets are skipped. It also exposes the dry_run behavior in the schema, which is a significant transparency feature. It could go further by mentioning failure modes or prerequisites like an existing scene, but the core behavior is well disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that packs the action, the order of operations, and the skip behavior without any wasted words. Every clause adds useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-step, state-changing tool with no output schema and no annotations, the description covers the essential behavior and order. It explains the side-effect sequence and skip behavior, though it does not mention error conditions or prerequisites such as the scene needing to exist.
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 parameters are already well documented in the schema. The description adds operation ordering context but does not need to elaborate on individual parameters; the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise action ('Apply a saved scene') and enumerates the exact operations performed: resolve device hint, transfer playback, set volume/shuffle/repeat, and start the saved context. This clearly distinguishes it from sibling tools like save_scene, list_scenes, and delete_scene.
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 makes it clear this tool is for applying an already-saved scene, which is a distinct context from saving, listing, or deleting scenes. It does not explicitly name alternatives or state when not to use it, but the purpose is clear enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apply_snapshot_changesB
Execute a merge plan on the live playlist (replay the changes between two snapshots); dry_run=true (default) only returns the plan Snapshot guide: take_playlist_snapshot (create), list_saved_snapshots (list), read_playlist_snapshot (read), diff_playlist_snapshots / snapshot_new_tracks / snapshot_removed_tracks (diff), restore_playlist_from_snapshot / restore_playlist_plan (restore).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Which changes to apply (default both) | |
| dry_run | No | Preview only: perform the read side and return a deterministic PLAN without writing/deleting anything. Default true โ pass false to commit. | |
| playlist | No | Live playlist to change (default: the snapshotsโ playlist_id) | |
| to_snapshot | Yes | Newer snapshot โ the target state | |
| from_snapshot | Yes | Older snapshot โ the baseline | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that this tool executes changes on the live playlist and that dry_run=true prevents actual writes, which is important safety context given no annotations are present. However, it does not describe what happens on commit in detail, such as whether tracks are added/removed or whether the operation is reversible. The description carries the behavioral burden but only partially fulfills it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose and dry-run behavior are front-loaded in a clear first sentence. The second sentence's Snapshot guide is a long comma-separated list of related tools that adds useful navigation context but feels somewhat cluttered and redundant with sibling tool names already discoverable. The description is acceptable but not tightly minimal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description must supply operational context, and it does highlight the critical dry_run safety default. Still, it leaves some ambiguity about what a 'merge plan' entails, what the returned plan looks like, and how commit behavior modifies the live playlist. Together with the strong schema, it is workable but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already explains all parameters including dry_run, mode, playlist, and response_format. The description adds only minor context by restating the dry_run default. This meets the baseline for schema-heavy parameter documentation without adding substantial new meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool applies a merge plan to the live playlist by replaying changes between two snapshots, using a specific verb and resource. It also emphasizes the dry_run default, which helps distinguish execution from plan-only behavior. However, it does not explicitly differentiate itself from closely related siblings like merge_snapshot_changes_plan or restore_playlist_plan.
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 conveys that dry_run=true returns a plan by default, which gives useful context for previewing. It also includes a Snapshot guide listing related snapshot tools, but it does not explicitly state when to prefer this tool over restore_playlist_from_snapshot or merge_snapshot_changes_plan. Usage guidance is implied rather than directly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apply_volume_planA
Set one target volume level across all (or selected) Spotify devices via per-device PUT /me/player/volume. Preview by default โ pass dry_run=false to apply.
| Name | Required | Description | Default |
|---|---|---|---|
| volume | Yes | Target volume percent for every selected device (0โ100) | |
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Default true โ pass false to commit. | |
| device_ids | No | Restrict to these device ids/names; default all volume-capable devices | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden and does meaningful work: it reveals the tool is mutating (via 'apply'), that it is non-mutating by default ('Preview by default'), and that it acts per-device over the API. This is substantial behavioral context, though it does not cover failure handling, requirements for active/volume-capable devices, or what the apply mode actually returns.
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 zero filler: the first front-loads the action, resource, scope, and API mechanism; the second states the critical default behavior. 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?
The description is adequate for a moderate-complexity tool with fully documented parameters, and it covers the key preview-by-default behavior. But with no output schema and no annotations, it leaves gaps: there is no mention of what apply mode returns, no relationship to the sibling plan_volume_level_across_devices, and no guidance on prerequisites like active devices.
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 all four parameters are already well documented in the schema. The description adds minimal parameter-level value: 'all (or selected)' restates the device_ids default and 'pass dry_run=false to apply' restates the dry_run semantics, so it stays at the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Set'), a precise resource ('one target volume level across all (or selected) Spotify devices'), and the mechanism ('per-device PUT /me/player/volume'). This inherently distinguishes it from single-device siblings like set_volume and planning-only tools like plan_volume_level_across_devices.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrasing 'across all (or selected) Spotify devices' implies the tool is for multi-device volume setting, and 'Preview by default' hints at a plan-then-apply workflow. However, no alternative tools are named and there are no explicit when-to-use vs when-not-to-use conditions, leaving the agent to infer the decision boundary between this tool, set_volume, and plan_volume_level_across_devices.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archive_played_episodesA
Remove fully-played episodes from your episode library in bulk (checks resume_point.fully_played). Batch DELETE /me/episodes; elicitation >50; dry_run supported.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max episodes to scan (default 100). | |
| confirm | No | Confirm bulk removal when >50 fully-played episodes found | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full disclosure burden and does well: it flags the destructive nature ('Batch DELETE /me/episodes'), the confirmation threshold ('elicitation >50'), and the safe-preview path ('dry_run supported'). The term 'elicitation' is cryptic shorthand for confirmation prompting, and auth/rate-limit details are absent, but the core safety-relevant behaviors are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence that front-loads the action and packs selection criteria, endpoint, threshold, and dry-run support into minimal words with no filler. The 'elicitation >50' phrasing is compact but jargon-y, slightly harming readability; otherwise every element 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 destructive mutation tool with no annotations and no output schema, the description covers the essentials: target definition, endpoint, confirmation threshold, and dry-run escape hatch. It does not describe return values or response structure, though the response_format parameter (concise/detailed/json) partially compensates.
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; per the baseline, the description needn't repeat them. It does add useful context linking 'resume_point.fully_played' to the selection logic and 'elicitation >50' to the confirm parameter, but it adds no format or syntax detail 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 states a specific verb and resource: 'Remove fully-played episodes from your episode library in bulk,' which clearly distinguishes it from sibling tools like remove_saved_episodes (targeted removal) and mark_episode_played_plan (planning, not removal). It also pins down the selection criterion ('checks resume_point.fully_played'), leaving no ambiguity about what counts as a target.
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 context is implied rather than explicit: the bulk-removal semantics and 'dry_run supported' hint at a cleanup workflow, but the description never names an alternative or states when NOT to use this tool (e.g., when the user wants to remove a specific episode, remove_saved_episodes would be the choice). No explicit exclusions or routing guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artist_affinityA
How deep does an artist run? Lifetime intensity (share of top-artist streams) plus a recency half-life fitted to recent stream ages. Read-only, no auth. (Legacy alias of statsfm_artist_affinity โ prefer the canonical name.)
| Name | Required | Description | Default |
|---|---|---|---|
| artist | Yes | Artist name (substring match) or stats.fm artist ID | |
| statsfm_user | Yes | stats.fm user ID (or username) โ public profile, no auth needed | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden. It clearly states the tool is read-only and requires no authentication, and it reveals the underlying methodology: lifetime intensity plus a recency half-life fitted to stream ages. This goes beyond a simple action statement and gives the agent meaningful insight into how the metric is computed.
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 compact and front-loaded: a hook question, a precise explanation of the algorithm, a safety declaration, and a legacy-alias note all in two sentences. Every sentence contributes useful information without unnecessary prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with three parameters and no output schema, the description covers the key operational facts: what the metric means, that it is read-only/no-auth, and that a canonical alternative exists. The response_format parameter in the schema clarifies output modes, so the lack of an explicit return shape in the description is a minor gap rather than a blocking one.
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 input schema already documents all three parameters, including the substring-match behavior for artist and the public-profile note for statsfm_user. The description adds no additional parameter-specific meaning beyond what the schema provides. 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 tool's function: computing artist affinity from lifetime stream intensity plus a recency half-life. Though it lacks a conventional imperative verb like 'calculate,' the resource and the calculation approach are explicit. Mentioning the canonical alias also helps distinguish it from the related statsfm_artist_affinity sibling.
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 notes 'Read-only, no auth,' which tells the agent this is a safe, publicly accessible operation. It also provides clear routing guidance by labeling the tool as a legacy alias and directing the agent to prefer the canonical statsfm_artist_affinity. It does not compare against broader analytics siblings, but the alias guidance is a strong usage signal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artist_album_completenessA
Checks how complete your saved-album library is for one artist: canonical studio-album titles from the discography walk matched (edition-insensitively) against your /me/albums walk, with a missing list. Quota: 2 paginated walks (artist albums + saved albums).
| Name | Required | Description | Default |
|---|---|---|---|
| artist_id | Yes | Spotify ID, URI (spotify:...), or open.spotify.com URL โ all resolve to the same entity | |
| saved_cap | No | Max saved albums scanned. Default: SPOTIFY_MCP_FETCH_ALL_CAP | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses quota behavior ('2 paginated walks'), the endpoints touched ('artist albums + saved albums'), matching semantics ('edition-insensitively'), and the presence of a 'missing list'. It does not explicitly state that the operation is read-only, but the 'Checks' framing makes that reasonably clear.
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 compact sentences with no filler. The core purpose and algorithm are front-loaded, followed by an operational quota warning. Every phrase earns its place, and the terminology is dense but precise.
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 read-only analysis tool with one required parameter and clear schema coverage, the description is nearly complete: it explains what is compared, how matching works, the quota cost, and the kind of output. It does not describe the exact return structure, but no output schema exists and the description's 'missing list' is a reasonable summary for call correctness.
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 three parameters. The description adds contextual detail relevant to saved_cap through '2 paginated walks' and to the overall matching semantics, but it does not enrich individual parameter meanings beyond the schema. Baseline 3 is appropriate when the schema carries the parameter documentation burden.
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 a specific verb ('Checks'), a concrete resource ('saved-album library for one artist'), and the exact matching strategy (canonical studio-album titles matched edition-insensitively against saved albums). It also states the output ('missing list'), so an agent can tell what this tool computes without looking at 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?
The description implies usage context: you call this when you need per-artist completeness of saved albums. However, it does not name any sibling alternatives such as artist_complete_check, artist_completeness_score, or artist_collection_gaps, nor does it state when NOT to use it. The one-artist scope is clear, but routing relative to near-neighbor tools is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artist_album_timelineB
[local-compute] Chronological release table (oldest โ newest) with inter-release gap days, median gap and the longest drought highlighted. Quota: ๐ก one paginated /artists/{id}/albums walk.
| Name | Required | Description | Default |
|---|---|---|---|
| artist_id | Yes | Spotify artist ID, URI, or URL | |
| max_results | No | ||
| include_groups | No | Comma-separated album groups: album,single,appears_on,compilation. Default: album,single | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose that this is '[local-compute]' and entails 'one paginated /artists/{id}/albums walk,' which informs the agent about the underlying operation and quota usage. However, it does not specify the output shape beyond a 'table,' nor clarify side effects (though read-only is implied). This is partial but not comprehensive transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, dense sentence that front-loads the core purpose (chronological table with gap stats) and includes a quota qualifier. There is zero waste, and the key details are immediately visible.
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 moderately complex tool with 4 parameters and no output schema, the description offers some context (local-compute, quota) but lacks details on calculation semantics (e.g., how 'drought' is defined, whether all album groups are included by default) and edge cases. The response_format param covers output variance, but overall completeness is adequate but incomplete.
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 75%, but the max_results parameter has no description in the schema, and the tool description does not clarify it. The description adds no parameter-specific meaning; it only describes the overall output. With moderate coverage and no compensation from description, parameter semantics are weak.
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 specifies a clear deliverable: a chronological release table with inter-release gap days, median gap, and longest drought highlighted. It names the underlying resource (/artists/{id}/albums), so an agent knows what data is involved. However, it does not explicitly differentiate itself from similar sibling tools like artist_discography_timeline or artist_singles_timeline, which limits clarity about its unique role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool vs alternatives. With many timeline/discography siblings (artist_discography_timeline, artist_singles_timeline, get_artist_albums, etc.), the agent must guess when this tool is appropriate. The quota note is operational, not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artist_catalog_statsB
Numbers-only catalog profile for one artist: release totals by group, summed track counts, average tracks per release, active span, busiest year and median release gap, from one paginated discography walk. Quota: one paginated /artists/{id}/albums walk.
| Name | Required | Description | Default |
|---|---|---|---|
| artist_id | Yes | Spotify ID, URI (spotify:...), or open.spotify.com URL โ all resolve to the same entity | |
| include_groups | No | Comma-separated album groups. Default: album,single,appears_on,compilation | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly discloses that the tool performs exactly one paginated /artists/{id}/albums walk and consumes one quota, which is valuable behavioral and cost context. It does not explicitly say 'read-only' or describe output formatting, but 'Numbers-only catalog profile' and the absence of mutation language make side effects unlikely.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no fluff; the metric list is dense and front-loaded. There is minor redundancy between 'from one paginated discography walk' and the quota sentence's 'one paginated /artists/{id}/albums walk'.
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 enumerated metrics make the return value reasonably clear even without an output schema, and the quota disclosure aids cost planning. However, the description does not differentiate from the near-duplicate artist_discography_stats sibling, nor does it clarify pagination depth or edge cases, leaving tool selection somewhat ambiguous.
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 schema already documents artist_id, include_groups, and response_format. The description's mention of 'release totals by group' loosely aligns with include_groups but adds no parameter-level detail beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies the tool's output as a numbers-only catalog profile and enumerates concrete metrics (release totals by group, summed track counts, average tracks, active span, busiest year, median release gap), making the function clear. However, it does not distinguish itself from the near-identically named sibling artist_discography_stats, so the description alone does not let an agent tell them apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or alternative guidance is given. The quota and 'one paginated walk' hint at cost-aware usage, but the description never states when to prefer this tool over artist_discography_stats or artist_discography_timeline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artist_collab_networkA
[local-compute] Featured/collab artists extracted from an artist's top tracks and recent albums with co-appearance counts โ computed from real payloads, not the dead related-artists endpoint. NOTE: /artists/{id}/top-tracks is on the #329 registration-gated surface; if it 403s the network is computed from recent albums only, with an explicit disclosure. Quota: ๐ก 1 + paginated API calls.
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | ISO 3166-1 alpha-2 market code (e.g. 'US'); omit for 'from_token' behaviour | |
| artist_id | Yes | Spotify artist ID | |
| max_albums | No | How many recent albums to walk. Default: 10 | |
| max_results | No | ||
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden and does well: it flags local-compute, real-payload provenance, the 403 failure mode with album-only fallback and 'explicit disclosure,' plus quota cost. It doesn't state read-only status, invalid-id behavior, or the return shape, but the disclosed failure/fallback behavior is far beyond typical.
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?
Every clause earns its place: source, computation origin, dead-endpoint avoidance, gating surface, fallback and disclosure, and quota. Purpose is front-loaded and there is zero filler given the complexity it conveys.
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 multi-source tool with no annotations and no output schema, the description covers provenance, failure mode, fallback, disclosure behavior, and cost. The main omission is a concrete description of the result shape, though 'co-appearance counts' and the response_format enum give partial hints. This is strong but not exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, so the baseline is 3; the tool description adds almost no parameter-level meaning beyond alluding to album walking and counts. The one undocumented parameter (max_results) is not compensated for in the description. This meets but doesn't exceed the 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 opening clause states a specific verb ('extracted') plus resource ('an artist's top tracks and recent albums') and the computed metric ('co-appearance counts'), so an agent knows exactly what this tool produces. It also contrasts itself with the 'dead related-artists endpoint,' making its scope unambiguous. Though it doesn't name near-twin siblings like find_collaborations, the mechanism described is specific enough to tell it apart.
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 actionable usage context: the top-tracks source is registration-gated (#329), the 403 fallback path is described, and the quota ('1 + paginated API calls') is stated. It also tells the agent to use real payloads over the dead related-artists endpoint. It lacks explicit routing to/from MCP sibling alternatives, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artist_collaboration_networkB
Builds a depth-2 collaboration web for one artist from discography walks alone: first-degree collaborators with co-appearance counts, then each top collaborator's recent releases to surface second-degree links and mutual connections. Quota: 1 + up to first_degree_cap additional small walks.
| Name | Required | Description | Default |
|---|---|---|---|
| artist_id | Yes | Spotify ID, URI (spotify:...), or open.spotify.com URL โ all resolve to the same entity | |
| max_results | No | ||
| max_releases | No | Releases of the central artist scanned. Default: 30 | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
| first_degree_cap | No | Top first-degree collaborators expanded for second-degree links. Default: 4 | |
| releases_per_collab | No | Recent releases walked per collaborator. Default: 10 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose meaningful traits beyond the schema: the depth-2 walk algorithm, the 'from discography walks alone' constraint, and the quota formula '1 + up to first_degree_cap additional small walks.' However, it does not explicitly state whether this is read-only, what happens on quota exhaustion, or how the result is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the first states the core algorithm and outcome, and the second gives the quota. The most important behavioral trait, depth-2 and quota, is front-loaded, and 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?
The description covers the algorithm and quota but leaves gaps an agent may need: max_results is undocumented in both schema and description, and with no output schema the description does not clarify what the 'concise', 'detailed', or 'json' response formats contain. It is adequate for selecting the tool but not fully complete for invoking it with confidence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 83%, so the baseline is 3, but the description adds useful semantic context by explaining how first_degree_cap and releases_per_collab are used in the walk ('each top collaborator's recent releases') and tying first_degree_cap to the quota. It does not clarify the undocumented max_results parameter, but the algorithm-level explanation goes 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 states a specific action and resource: it 'Builds a depth-2 collaboration web for one artist' via discography walks, with clear first- and second-degree link construction. It does not explicitly name sibling tools like artist_collab_network or find_collaborations, so some differentiation is left to inference, though the depth-2 framing helps.
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 what the tool does but gives no explicit guidance on when to choose it over alternatives such as artist_collab_network, find_collaborations, or collab_density_report. There is no when-to-use statement, exclusions, or recommended scenarios, so an agent must infer applicability from the function alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artist_collection_gapsA
List an artist's studio albums missing from your saved collection โ the exact records to add next. Quota: ๐ด paginated walk + saved-albums membership check.
| Name | Required | Description | Default |
|---|---|---|---|
| artist_id | Yes | Spotify artist ID, URI, or URL | |
| max_results | No | ||
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It discloses a significant operational trait: this is a paginated walk requiring a saved-albums membership check, which implies quota cost and multiple API calls. The red-circle quota warning is useful beyond what the schema conveys, though it does not mention read-only status or auth requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The core purpose is front-loaded, and the quota warning is compact but informative. Every element 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?
The description covers the tool's purpose and a key operational cost, but it omits usage routing and leaves max_results semantics unexplained. Since there is no output schema and sibling tools overlap significantly, the description could be more complete with a note on when to choose this over related gap/completeness tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema describes artist_id and response_format but leaves max_results undocumented, and the description adds no parameter-level detail. The phrase 'studio albums' clarifies the output domain but does not help an agent understand max_results behavior, defaults, or how response_format affects the result. With 67% schema coverage, the description should compensate for the missing max_results semantics but does not.
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 a specific verb ('List'), a specific resource ('an artist's studio albums'), and a clear filtering condition ('missing from your saved collection'). It also states the intended outcome ('the exact records to add next'), which distinguishes it from broader catalog or discography tools like get_artist_discography or artist_discography_gaps.
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 a use case โ finding what to add next to one's saved albums โ but it does not explicitly state when to use this tool versus similar sibling tools such as artist_discography_gaps, artist_album_completeness, or artist_complete_check. There are no alternatives, exclusions, or preconditions mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artist_complete_checkB
Collector completeness: the artist's full album list vs your saved albums โ what's missing, with album/single/compilation breakdown. Quota: 2 reads (artist albums + your saved albums, page-capped).
| Name | Required | Description | Default |
|---|---|---|---|
| artist_id | Yes | Spotify artist ID | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| include_singles | No | Count singles as part of the complete set. Default true. | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
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, and it does disclose genuinely useful operational traits: a quota of 2 reads (artist albums + saved albums) and page-capping, which helps an agent budget API calls and anticipate truncation. However, 'page-capped' is left vague โ no cap size or consequence for very large catalogs is given, and read-only status is only implied, never stated.
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 the core purpose front-loaded and the quota disclosure as a value-add. Minor redundancy: 'your saved albums' appears in the first sentence and again in the quota parenthetical, but overall there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The core computation is clear, and the response_format enum in the schema covers output style choices despite the absence of an output schema. But with no return-shape guidance, no sibling differentiation, and the correctness implications of page-capping unexplained, an agent still lacks a few pieces needed to use it confidently in this crowded toolset.
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 all four parameters are already documented in the schema, setting the baseline at 3. The description adds only marginal semantic value: '2 reads (artist albums + your saved albums)' clarifies the underlying data sources, and the album/single/compilation breakdown hints at what include_singles controls, but no parameter gains meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete comparison task โ the artist's full album list vs the user's saved albums, showing what's missing with an album/single/compilation breakdown. That is a specific resource-and-operation pairing. However, the huge sibling list contains near-twins (artist_completeness_score, artist_album_completeness, artist_collection_gaps, artist_discography_gaps), and nothing here distinguishes this tool from 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?
No when-to-use guidance, no exclusions, and no named alternatives. Given the dense cluster of similarly named artist-completeness siblings, an agent receives zero routing help to decide between this tool, artist_completeness_score, artist_album_completeness, or artist_collection_gaps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artist_completeness_scoreA
For your top N saved-track artists, fetch each artistโs top tracks and score how many of them you have saved (0โ100%). Read-only, capped at 25 artists.
| Name | Required | Description | Default |
|---|---|---|---|
| top_n | No | How many top artists to score (default 10, max 25 โ one request each) | |
| dry_run | No | Preview only: report the request cost of the scan without performing it (default false) | |
| scan_cap | No | Max saved items to walk per paginated source (default: SPOTIFY_MCP_FETCH_ALL_CAP) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does disclose the key safety trait ('Read-only') plus the operational cap ('capped at 25 artists'). However, it is silent on the multi-request cost structure implied by dry_run and scan_cap, and on pagination/failure behavior โ meaningful gaps for a tool that can issue up to 25 chained requests.
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, roughly 24 words, with the use case front-loaded and zero filler. Every clause earns its place: scenario, mechanism, output metric, safety trait, and cap.
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 core return concept (0โ100% completeness score) is stated, which partially compensates for the absent output schema. But for a 5-param, multi-step tool with no annotations, the description leaves the result structure (per-artist breakdown vs aggregate), response_format semantics, and cost profile undescribed. Adequate for basic invocation, incomplete for confident 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 description coverage is 100%, and each parameter already carries a clear description (defaults, max, enum options, cost hints). The tool description only restates 'top N' and the 25 cap that top_n's schema entry already provides, so it adds no meaning beyond the schema โ meeting the baseline for high 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 names a specific verb-resource pair ('fetch each artist's top tracks and score...') and defines the output metric (0โ100% of saved top tracks). It also states the scope ceiling ('capped at 25 artists'), making the tool's function unambiguous even among many sibling 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 opening 'For your top N saved-track artists' implies the scenario, but the description never states when to prefer this over the many overlapping siblings (e.g., artist_complete_check, artist_top_vs_saved, artist_collection_gaps, library_coverage_report) nor gives exclusions. Usage is inferable, not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artist_debut_release_finderA
Dig up an artist's earliest release with full detail plus everything else they released in that same year โ the origin story view. Quota: ๐ก one paginated /artists/{id}/albums walk.
| Name | Required | Description | Default |
|---|---|---|---|
| artist_id | Yes | Spotify artist ID, URI, or URL | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It does add useful transparency by stating the underlying paginated albums walk and quota, and it defines the returned content. However, it does not describe the output envelope, pagination behavior beyond 'one walk,' or any edge-case 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 two sentences: the first states the core behavior clearly, and the second gives a concise quota hint. It is front-loaded, memorable, and contains no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema and no annotations, but the description explains what the tool returns (earliest release and same-year releases) and its quota. The main gap is not routing the agent to the simpler artist_first_release when only the debut release is needed, but the invocation-critical details are otherwise present.
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 both artist_id and response_format. The description adds no new parameter-level meaning beyond restating the overall purpose, 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 uses a specific verb ('dig up') and gives a precise scope: the artist's earliest release plus everything else from that same year. This clearly distinguishes it from sibling tools like artist_first_release, which would only surface the single earliest release.
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 does not say when to use this tool instead of related sibling tools such as artist_first_release, artist_latest_release_report, or artist_release_digest. The quota note is useful but does not provide selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artist_decade_spanA
Histogram of an artist's releases per decade with the dominant decade called out โ instantly see which era carries the catalog. Quota: ๐ก one paginated /artists/{id}/albums walk.
| Name | Required | Description | Default |
|---|---|---|---|
| artist_id | Yes | Spotify artist ID, URI, or URL | |
| include_groups | No | Comma-separated album groups: album,single,appears_on,compilation. Default: album,single | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full behavioral burden and does disclose a meaningful trait: quota cost (๐ก) and the underlying 'one paginated /artists/{id}/albums walk'. This helps the agent weigh cost before calling. It stops short of confirming read-only posture or describing response details, but the quota/operation disclosure is genuine added value beyond structured fields.
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 zero filler: the first front-loads the core deliverable (histogram + dominant decade) and the second adds the quota constraint. 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 low-complexity analysis tool with all three parameters documented in the schema and no output schema, the description covers the core computation, the headline insight, and the quota profile. Minor gaps (explicit read-only confirmation, output format across response_format values) are largely mitigated by the schema's enum documentation.
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 baseline is 3; the description adds little parameter-level detail beyond implying the /artists/{id}/albums walk behind artist_id. It correctly avoids repeating schema docs, and the schema already documents include_groups defaults and response_format enum semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool produces a 'Histogram of an artist's releases per decade' with 'the dominant decade called out', which is a specific output over a clear resource. It is reasonably distinctive from siblings like artist_discography_timeline or era_distribution_report, though it doesn't explicitly contrast itself with those alternatives.
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 'instantly see which era carries the catalog' implies the usage context โ quick era-level assessment of an artist's catalog โ but there is no explicit when-to-use guidance or named alternatives. The agent must infer when this is preferred over the many sibling artist-analysis and era-report tools in the large sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artist_deep_cutsA
Finds an artist's deep cuts: tracks whose (normalized) title appears on exactly one release across the artist's recent albums and singles, ranked longest-first. Quota: 2 walks + one chunked /albums?ids= fan-in (1 call per 20 releases).
| Name | Required | Description | Default |
|---|---|---|---|
| artist_id | Yes | Spotify ID, URI (spotify:...), or open.spotify.com URL โ all resolve to the same entity | |
| max_results | No | ||
| max_releases | No | Releases analyzed (albums + singles, newest first). Default: 30 | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It does a solid job by revealing the exact matching algorithm, the ranking order, and a concrete quota ('2 walks + one chunked /albums?ids= fan-in'). It does not explicitly state read-only status or failure behavior, but the resource-consumption detail is valuable.
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 tightly written sentences with no filler. The core definition is front-loaded, and the quota sentence earns its place by informing an agent about the cost of invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is largely complete for a complex analysis tool: it defines deep cuts, explains ranking, and discloses quota behavior. It does not describe edge cases like an artist with no deep cuts, but the response_format parameter in the schema covers the output contract.
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 75%, with artist_id, max_releases, and response_format already documented in the input schema. The description adds context to max_releases through the 'recent albums and singles' definition, but it does not clarify max_results, which lacks a schema 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 states a specific verb ('Finds'), a clear resource ('an artist's deep cuts'), and a precise operational definition: tracks whose normalized title appears on exactly one release across recent albums and singles, ranked longest-first. This makes the tool's purpose unambiguous and distinguishes it from generic siblings like deep_cuts_finder or b_sides_finder.
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 explicit guidance on when to prefer this tool over alternatives. With many sibling tools such as artist_deep_dive, deep_cuts_finder, and artist_discography_stats, an agent is left to infer which is appropriate based on names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artist_deep_diveB
Builds a one-artist dossier from the artist object plus a full discography walk: genres, release counts by group, active span, most prolific year, first/latest releases and most frequent collaborators. Quota: 1 + one paginated /artists/{id}/albums walk.
| Name | Required | Description | Default |
|---|---|---|---|
| artist_id | Yes | Spotify ID, URI (spotify:...), or open.spotify.com URL โ all resolve to the same entity | |
| include_groups | No | Comma-separated groups: album,single,appears_on,compilation. Default: all four | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does disclose the API quota ('1 + one paginated /artists/{id}/albums walk') and that the tool performs a multi-step walk, which is useful. However, it does not explicitly state read-only behavior, error cases, or the shape of the returned dossier beyond the field list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler: the first front-loads what the tool builds and lists its key outputs, and the second adds a tight operational constraint. Every phrase contributes, making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is no output schema and no annotations, the description compensates by enumerating the output content and stating the quota behavior. It still omits when-to-use versus sibling deep-dive tools, and it does not describe return formatting, but for the stated complexity it provides enough for an agent to make a reasonable 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 description coverage is 100%, so the schema already documents all three parameters, including accepted formats for artist_id and the response_format enum. The description adds no parameter-specific meaning beyond what the schema provides, which matches the baseline for high schema 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 uses a specific verb ('Builds') and a clear resource ('one-artist dossier') with an explicit list of computed fields, so an agent knows what the tool produces. However, it does not explicitly distinguish itself from adjacent sibling tools like artist_discography_timeline, artist_collab_network, or artist_discography_stats, so it misses the top score for sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to choose this tool over alternatives, nor are any exclusions or when-not-to-use conditions stated. The quota note implies a cost consideration, but no explicit usage context or recommended alternative is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artist_discography_explorerA
Overview stats for one artist's discography: release counts by type, first and latest releases, active span and releases per active year. Accepts an artist ID, URI, URL or name (name โ closest search match). Quota: ๐ก one paginated /artists/{id}/albums walk.
| Name | Required | Description | Default |
|---|---|---|---|
| artist | Yes | Artist ID, URI, URL, or name to resolve via search | |
| max_results | No | ||
| include_groups | No | Comma-separated album groups: album,single,appears_on,compilation. Default: album,single | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full burden and does real work: it discloses the quota cost upfront (๐ก one paginated albums walk), the flexible input resolution behavior ('name โ closest search match'), and the aggregated nature of the output. It does not explicitly affirm read-only/no-state-change, which would be the one remaining behavioral gap, but the stat-gathering framing and the disclosed cost make the behavior reasonably 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?
Two sentences with zero waste: the first front-loads what the tool produces, the second covers input flexibility, resolution behavior, and quota cost. Every clause earns its place and the density is high โ output stats, accepted input forms, fallback resolution semantics, and a cost disclosure are all packed in efficiently.
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's list of stats (counts, first/latest, active span, per-year rate) partially compensates by describing return content. But the tool sits among several heavily overlapping siblings (artist_discography_stats, artist_release_type_breakdown, get_artist_discography) with no disambiguation, and the max_results parameter is left undocumented. An agent can call it correctly, but it may pick the wrong sibling and won't know the walk cap semantics without guessing.
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 75%, so the schema already documents artist, include_groups, and response_format. The description adds one genuine nuance beyond the schema โ that a name resolves via 'closest search match' โ but max_results (25% of params) has no description in either the schema or the tool description, so an agent must infer its purpose from maximum 2000 and the 'releases per active year' output. The description partially compensates but does not fully cover the 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 names a specific verb and resource category ('Overview stats for one artist's discography') and enumerates the concrete outputs: release counts by type, first/latest releases, active span, releases per active year. This is clearly a summary/aggregate tool rather than a list-returning one. However, it never explicitly differentiates itself from near-twin siblings like artist_discography_stats, artist_release_type_breakdown, or get_artist_discography, so it stops 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?
Usage context is implied but not stated: 'Overview stats' signals this is the tool to pick when an agent wants a condensed profile of one artist, and the quota note ('one paginated /artists/{id}/albums walk') hints this is cheaper than a full discography pull. Yet there is no explicit when-to-use vs. when-not-to-use guidance, and no alternatives are named even though the sibling list contains several overlapping tools (artist_discography_stats, get_artist_discography, artist_decade_span).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artist_discography_gapsA
Chronological discography table (oldest to newest by default) with per-release gap-in-days versus the previous release, built from a paginated /artists/{id}/albums walk. Quota: one paginated walk (several queued calls on long discographies).
| Name | Required | Description | Default |
|---|---|---|---|
| order | No | Output ordering. Default: oldest_first | |
| artist_id | Yes | Spotify ID, URI (spotify:...), or open.spotify.com URL โ all resolve to the same entity | |
| since_year | No | Only releases from this year onward | |
| max_results | No | ||
| include_groups | No | Comma-separated album groups. Default: album,single | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the transparency burden and does add useful behavioral detail: default chronological ordering, a paginated walk, and a concrete quota cost (one walk, several queued calls on long discographies). It does not explicitly state read-only/side-effect status, but the framing clearly describes a read/compute 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?
Two compact sentences front-load the core output and then give the implementation/quota context. Every clause earns its place, with no filler or repetition of schema fields.
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 read-only reporting tool with six well-described parameters and no output schema, the description explains the output shape (table, ordering, gap computation) and cost behavior sufficiently. Minor gaps remain around exact gap semantics (calendar days, missing-date handling) and explicit alternative routing, but these do not block 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 83%, so the schema already documents most parameters. The description only reinforces the order default already in the schema (oldest to newest) and adds no new meaning; max_results, the one undocumented parameter, is not addressed in the 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 identifies a specific output โ a chronological discography table with per-release gap-in-days versus the previous release โ so an agent can infer the tool's core function. It does not name or contrast with similar sibling tools like artist_discography_timeline or artist_discography_stats, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for discography gap analysis by stating the output, and the pagination/quota note signals when it may be expensive. However, it provides no explicit when-to-use or when-not-to-use guidance, nor does it point to alternative tools for timeline or stats needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artist_discography_searchA
Full-text filter over an artist's release titles โ find that live album, deluxe edition or collaboration without scrolling the whole catalog. Quota: ๐ก one paginated /artists/{id}/albums walk.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Case-insensitive text to match against release titles | |
| artist_id | Yes | Spotify artist ID, URI, or URL | |
| max_results | No | ||
| include_groups | No | Comma-separated album groups: album,single,appears_on,compilation. Default: album,single | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It discloses that the tool performs a 'paginated /artists/{id}/albums walk' and communicates quota cost with a yellow indicator. This is useful behavioral context, though it does not explicitly state read-only semantics or result truncation 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 two sentences with no filler: the first front-loads the purpose and use case, the second adds quota/endpoint context. 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?
For a tool with five parameters and no output schema, the description is largely complete: parameters are covered by the schema, and the quota/endpoint note fills an important operational gap. It could be stronger by describing result shape or how max_results affects output, but the response_format parameter mitigates 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?
Schema description coverage is high at 80%, so the schema already documents most parameters. The description adds helpful examples of what query should match ('live album, deluxe edition or collaboration'), but it does not add semantic value for max_results or clarify behavior beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Full-text filter over an artist's release titles'. It also differentiates itself from sibling browse tools like get_artist_discography by framing the tool as a way to find specific albums 'without scrolling the whole catalog'.
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 communicates when to use the tool: when you are looking for a particular release by title keyword within an artist's catalog. It does not explicitly name alternatives or state when not to use it, but the use case is evident and well-scoped.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artist_discography_statsA
[local-compute] Discography shape for one artist: release counts by album/single/compilation, first and latest release, releases-per-year rate and the longest silence gap between releases. Quota: ๐ก one paginated /artists/{id}/albums walk (typically several API calls).
| Name | Required | Description | Default |
|---|---|---|---|
| artist_id | Yes | Spotify artist ID | |
| include_groups | No | Comma-separated album groups: album,single,appears_on,compilation. Default: album,single | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden. It adds genuine non-obvious context: computation happens locally, and the tool performs an underlying paginated API walk with a disclosed quota cost. This is more informative than typical descriptions. It stops short of explicitly declaring read-only/no-mutation, though the 'walk' framing strongly implies a read traversal.
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 zero waste. The first front-loads the purpose as a compact metric list, and the second discloses quota in a single parenthetical. Every clause earns its place; there is no fluff, repetition of schema content, or vague filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Though there is no output schema, the listed metrics act as a de-facto output contract, and the response_format parameter covers prose-vs-json delivery. Quota and local-compute cover operational expectations. Missing pieces are an explicit read-only declaration and edge-case behavior (artist not found, empty discography), which would be needed for a 5 but are minor for an analytics 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 coverage is 100%, so artist_id ('Spotify artist ID'), include_groups (allowed values and default spelled out), and response_format (enum with per-value semantics) are already fully documented in the schema. The description's metric list only loosely maps to include_groups and adds no parameter-level detail beyond what the schema provides. Baseline 3 is correct here.
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 identifies a specific resource ('discography shape for one artist') and lists concrete computed outputs: release counts by type, first/latest release, per-year rate, and longest silence gap. These metrics are distinctive enough to separate it from siblings like artist_discography_timeline or artist_release_type_breakdown. It lacks an explicit verb ('compute/report' is implied) and does not name a sibling, so it falls just 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 [local-compute] tag and quota disclosure (' one paginated /artists/{id}/albums walk, typically several API calls') provide cost/runtime context that helps an agent decide whether to invoke the tool. However, there is no explicit when-to-use statement, no exclusions, and none of the many competing discography siblings (artist_discography_explorer, artist_discography_search, get_artist_discography) are named or routed around.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artist_discography_timelineA
[local-compute] Chronological release table (year ยท type ยท name ยท tracks) built from a paginated /artists/{id}/albums walk. Sorted newest first; since_year trims older rows client-side. Quota: ๐ก one paginated walk (typically several API calls on the rate-limited queue).
| Name | Required | Description | Default |
|---|---|---|---|
| artist_id | Yes | Spotify artist ID | |
| since_year | No | Only releases from this year onward | |
| max_results | No | ||
| include_groups | No | Comma-separated album groups: album,single,appears_on,compilation. Default: album,single | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden and does so thoroughly: it discloses [local-compute] behavior, the paginated endpoint walk behind the scenes, newest-first ordering, client-side trimming for since_year, and a concrete quota/cost estimate. These go well beyond what the name or schema reveal and give the agent accurate expectations about performance and side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences with zero filler: the first establishes purpose and source, the second covers ordering and filtering behavior, the third discloses cost. Key facts are front-loaded before the quota caveat, and 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?
For a 5-parameter read tool with no output schema and no annotations, the description covers the essential invocation context: endpoint, output columns, sort order, filter behavior, and quota impact. Combined with the schema's 80% coverage, an agent can select and call it correctly. The only gap is max_results semantics, which is minor since the parameter is optional and self-evident.
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 80%, so the baseline is 3. The description adds genuinely useful nuance โ since_year filters client-side, and the table columns hint at output shape โ which exceeds the schema's bare 'Only releases from this year onward'. However, max_results has no description in the schema and is not explained in the description either, leaving one parameter underdocumented.
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 a specific deliverable โ a chronological release table with defined columns (year, type, name, tracks) โ and states the source endpoint (/artists/{id}/albums walk). The verb and resource are clear enough that an agent knows what it produces. However, it does not differentiate itself from closely related siblings like artist_album_timeline, artist_discography_explorer, or artist_singles_timeline, so the agent must infer the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied through the purpose (want a year-sorted release table for an artist) and the quota signal ('one paginated walk... on the rate-limited queue'), which hints that this tool is costlier than a single-call op. However, there is no explicit when-to-use vs. when-not-to-use guidance and no mention of alternatives among the many discography-themed siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artist_era_mapA
Cluster an artist's releases into eras separated by quiet periods longer than gap_years, with one representative album per era and era spans. Quota: ๐ก one paginated /artists/{id}/albums walk.
| Name | Required | Description | Default |
|---|---|---|---|
| artist_id | Yes | Spotify artist ID, URI, or URL | |
| gap_years | No | Quiet period (in years) that starts a new era. Default: 2 | |
| include_groups | No | Comma-separated album groups: album,single,appears_on,compilation. Default: album,single | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well: it discloses the clustering behavior, the output shape (one representative album, era spans), and the operational cost (' one paginated /artists/{id}/albums walk'). It does not state edge-case behavior or the selection criterion for the representative album, but the quota and API-walk disclosure is genuinely valuable beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both dense and useful: the first states the core function, the second gives quota/API-walk context. No fluff, no repetition of schema content, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description carries a heavy burden. It covers the algorithm, output shape, and quota, but leaves the 'representative album' selection criterion undefined and omits edge cases (artists with no quiet periods, single-release artists). Adequate for a competent agent, but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds only modest value by back-referencing `gap_years` in the algorithm and implying the /artists/{id}/albums call that maps to artist_id and include_groups, but it does not add meaning the schema already lacks.
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 a specific verb (cluster), a resource (an artist's releases), and a precise method: eras separated by quiet periods longer than `gap_years`, with one representative album per era and era spans. This clearly distinguishes it from siblings like artist_era_sampler, artist_album_timeline, and artist_discography_timeline.
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 algorithm is specific enough that an agent can infer when to call it (when era segmentation by quiet periods is needed), but there is no explicit when-to-use guidance, no exclusions, and no named alternatives. With many era-related siblings in the toolset, explicit routing would materially help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artist_era_samplerA
Splits an artist discography into equal year-span eras and deterministically picks representative releases per era (albums first, earliest and fullest first) as a sampling plan. Quota: one paginated /artists/{id}/albums walk.
| Name | Required | Description | Default |
|---|---|---|---|
| eras | No | Number of eras to split the span into. Default: 3 | |
| per_era | No | Releases picked per era. Default: 2 | |
| artist_id | Yes | Spotify ID, URI (spotify:...), or open.spotify.com URL โ all resolve to the same entity | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and provides real context: selection is deterministic, albums take precedence with earliest/fullest ordering, and exactly one paginated /artists/{id}/albums walk is used. It does not explicitly state that it performs no mutations, but the 'sampling plan' framing and quota disclosure make the read-only intent reasonably clear.
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 tightly written sentences front-load the main action and selection criteria, then add the quota note. There is no filler or repetition of schema 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?
The description covers the algorithm, deterministic ordering, and API quota, and the schema covers all parameters. However, there is no output schema, and the description only minimally indicates what the returned sampling plan looks like; edge cases such as artists with fewer releases than eras are also 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%, so the schema already documents artist_id, eras, per_era, and response_format. The description adds selection-rule context but no extra parameter-level semantics, so it meets the baseline without exceeding it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with a specific verb+resource: it splits an artist discography into eras and deterministically picks representative releases. It also states the selection rule (albums first, earliest and fullest first) and labels itself a sampling plan, which distinguishes it from timeline/map/report siblings like artist_discography_timeline or artist_era_map.
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 'as a sampling plan' plus the quota line implies this tool is for producing a representative per-era selection rather than exhaustive discography output. However, it never states when to prefer it over similar planners such as album_representative_plan, decade_sampler_plan, or artist_era_map, nor when it would be inappropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artist_first_releaseB
Locates an artist's earliest release across all album groups and returns a full card for it: label, copyright, track listing and runtime via the full album payload. Quota: one paginated walk + 1 GET /albums/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| artist_id | Yes | Spotify ID, URI (spotify:...), or open.spotify.com URL โ all resolve to the same entity | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does add value by mentioning the quota ('one paginated walk + 1 GET /albums/{id}'), which indicates resource usage and multiple API calls. However, it does not disclose error behavior, how 'earliest' is determined (e.g., by release date vs. first appearance), or whether the operation is read-only (though implied). This is adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero wasted words. The core purpose is front-loaded in the first sentence, and the quota is stated as a second informative note. It is appropriately concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 2 simple parameters and no output schema. The description explains what is returned (label, copyright, track listing, runtime) and mentions the quota, which is useful operational context. It does not explicitly define 'earliest release' (e.g., by release date, original vs. reissue), which could be ambiguous, but given the specific name and the mention of 'across all album groups', it is mostly complete. A more precise definition of 'earliest' would push it to 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 both parameters are already fully documented. The description does not add any meaning beyond the schema, such as clarifying acceptable input formats or the impact of response_format on the output. It simply mentions the return card, which is not parameter-specific. This matches the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (Locates) and resource (artist's earliest release), and specifies what is returned (full card: label, copyright, track listing, runtime). However, it does not explicitly distinguish from the sibling tool 'artist_debut_release_finder', which likely has a similar purpose, 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 provides no guidance on when to use this tool versus alternatives, such as when to prefer it over artist_latest_release_report or artist_debut_release_finder. It does not mention any conditions or exclusions, leaving the agent to infer the appropriate context on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artist_genres_compactA
Up to 50 artist IDs โ nameยทgenres two-column projection (compact roster view over several-artists). Quota: ๐ข one GET /artists?ids= call.
| Name | Required | Description | Default |
|---|---|---|---|
| artist_ids | Yes | Up to 50 Spotify artist IDs | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden. It adds genuinely useful behavior: the 50-ID batch cap, the single-call quota (๏ธ one GET /artists?ids= call), and the two-column output shape. However, it is silent on edge-case behavior such as invalid or unknown IDs, duplicate ID handling, and ordering, which leaves meaningful gaps for a batch tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero wasted words. The inputโoutput contract is front-loaded in the first sentence, and the quota disclosure sits cleanly in the second. The arrow and emoji are compact scannability aids, not filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity batch projection with 100% schema coverage and no output schema, the description supplies everything essential: input cap, output columns, and API cost. The remaining gaps โ edge-case behavior and the exact rendering of the genres field in responses โ are minor for this tool class. Slightly above the viable minimum.
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%: artist_ids documents its 50-ID cap and response_format documents each enum value's meaning. The description adds the output-side interpretation ('nameยทgenres two-column projection') that connects artist_ids to its result, but parameter-level semantics are already fully carried by the schema, so the 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 precise contract: up to 50 artist IDs transform into a nameยทgenres two-column projection. The phrase 'compact roster view over sever-al-artists' distinguishes it from the full-data sibling get_several_artists and the single-artist get_artists_genres, so an agent can tell this tool apart without opening their schemas.
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 'compact roster view' phrasing implies the intended use case (lightweight, name+genres-only lookup) and the quota note hints at efficiency as a selection factor, but no alternative tool is explicitly named and no when-not-to-use condition is stated. The agent must infer when to prefer this over get_several_artists or get_artists_genres.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artist_latest_release_reportB
Reports on an artist's most recent release: full metadata (label, copyright, track listing, runtime), days since release and the gap to the release before it. Quota: one paginated walk + 1-2 GET /albums/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| artist_id | Yes | Spotify ID, URI (spotify:...), or open.spotify.com URL โ all resolve to the same entity | |
| include_groups | No | Comma-separated album groups. Default: album,single | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does add genuinely useful context: the 'one paginated walk + 1-2 GET /albums/{id}' quota discloses cost and request pattern, and 'reports on' plus the GET references imply a read-only operation. It does not, however, address edge cases (artist with no releases), authentication needs, or what determines 'most recent'.
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 wasted words: the main deliverable is front-loaded, the report contents are enumerated compactly, and the quota note at the end earns its place by informing cost-aware tool selection. Every clause 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?
With no output schema, the description does a reasonable job of enumerating what the report returns, and with no annotations it discloses the request cost. It is still incomplete: it lacks any usage guidance among near-name siblings and no edge-case handling (e.g., artist with no releases, scope of the paginated walk).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all three parameters (artist_id format, include_groups default, response_format enum). The description adds no parameter-level meaning beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete purpose: reporting on an artist's most recent release, with enumerated report contents (label, copyright, track listing, runtime, days since release, gap to prior release). The 'gap to the release before it' detail differentiates it from similar siblings like artist_latest_releases and get_artist_albums, but the description never names those alternatives, leaving the differentiation implicit.
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 choose this tool over the many overlapping siblings (artist_latest_releases, artist_release_digest, artist_first_release, check_artist_releases, get_artist_albums). There is no 'use this when...' statement and no exclusions, so an agent must infer the selection criteria from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artist_latest_releasesA
Fetch the most recent N releases from an artist's catalog with age in days โ a quick "what's new here" read. Quota: ๐ก one paginated /artists/{id}/albums walk.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many recent releases to show. Default: 5 | |
| artist_id | Yes | Spotify artist ID, URI, or URL | |
| include_groups | No | Comma-separated album groups: album,single,appears_on,compilation. Default: album,single | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the full burden, and it delivers: the quota disclosure ('๐ก one paginated /artists/{id}/albums walk') reveals pagination behavior, underlying API calls, and rate-limit cost, and 'age in days' explains the output computation. The verb 'Fetch' implies a non-destructive read, though it stops short of explicitly declaring read-only status or addressing empty-catalog/error cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero filler: the first fronts the purpose and key output detail, the second delivers the quota cost. Every phrase earns its place, and the structure makes the tool's intent legible at a glance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a filtered-list read with fully documented parameters, the description is nearly complete: it states purpose, output flavor (age in days), and rate-limit cost. Gaps are minor โ no explicit safety framing (read-only) and no edge-case behavior โ but with no annotations and no output schema, a touch more disclosure would make it fully self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters with defaults and enums. The description adds only tangential reinforcement ('most recent N' maps to limit, quota maps to the underlying albums walk) rather than new parameter-level meaning, which matches the baseline 3 for full schema 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 states a specific verb ('Fetch'), a well-defined resource ('the most recent N releases from an artist's catalog'), and a distinguishing output feature ('age in days'). The 'quick what's new here read' framing clarifies its intent, but it does not explicitly differentiate itself from closely related siblings like artist_latest_release_report, check_artist_releases, or artist_release_digest.
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 'quick what's new here read' phrase implies when to use the tool, and the quota note signals operational cost. However, it names no alternatives and gives no exclusion criteria or conditions for choosing a sibling tool, which is a real gap given the large number of overlapping artist-catalog tools in the toolset.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artist_listening_clockA
Profile WHEN you play one specific artist (hour-of-day histogram plus daypart split; defaults to your most-played artist in the history window). Quota: GET /me/player/recently-played cursor walk.
| Name | Required | Description | Default |
|---|---|---|---|
| artist | No | Artist ID/URI/URL. Omit to use the most-played artist in the history window. | |
| max_items | No | Max recently-played items to walk (default 150; the API pages 50 per call). | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description carries the full behavioral disclosure burden. It does well by stating the quota cost and underlying data source: GET /me/player/recently-played cursor walk. It stops short of explicitly stating read-only/no side effects, though the wording strongly implies a safe 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?
Two sentences, front-loaded purpose, and no filler. The quota disclosure earns its place because it gives the agent important cost information without bloating the description.
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 low-complexity tool with three optional and fully documented parameters, the description covers purpose, output shape at a high level, default behavior, and quota cost. It does not define the exact 'history window' boundaries, but that is not critical for invoking 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 baseline is 3. The description's mention of 'defaults to your most-played artist' mostly restates the artist parameter schema and does not add meaningful syntax, formatting, or behavioral detail 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?
The description names a specific verb and resource: it profiles the listening times for one specific artist, with an hour-of-day histogram and daypart split. The 'specific artist' framing clearly distinguishes it from general listening clock/heatmap tools, and the default-to-most-played-artist behavior adds useful scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case is reasonably implied by 'one specific artist' and the default behavior, but there is no explicit when-to-use or when-not-to-use guidance, and no alternative tools are named. An agent must infer when to choose this over similar listening-pattern tools like listening_clock or artist_deep_dive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artist_live_albums_finderA
List an artist's live releases (titles matching live/unplugged/live-at patterns) chronologically โ the concert-record shelf. Quota: ๐ก one paginated /artists/{id}/albums walk.
| Name | Required | Description | Default |
|---|---|---|---|
| artist_id | Yes | Spotify artist ID, URI, or URL | |
| max_results | No | ||
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden, and it does so well: it reveals that filtering is heuristic title-pattern matching rather than official release-type metadata, states the chronological ordering, and discloses the underlying paginated endpoint and its quota cost. It stops short of disclosing empty-result behavior, case-insensitivity of pattern matching, or the exact output shape.
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 zero filler: purpose and filtering rule first, then the quota/endpoint constraint. The ๐ก traffic-light notation is a compact, decision-relevant cost signal that earns its place in a quota-aware toolset.
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 3-param list tool with no output schema, the description covers the purpose, filter heuristic, ordering, and cost profile; response_format behavior is left to the schema's enum descriptions. Remaining gaps (behavior on zero matches, exact return shape) are minor and non-blocking 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 coverage is 67% (artist_id and response_format are documented with helpful descriptions), so the schema does most of the work. The description adds the paginated-walk context that gives max_results meaning, but it adds no per-parameter detail beyond that. Mid-level coverage means the description need not fully compensate, and it doesn't.
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 ('List'), a scoped resource (an artist's live releases), the exact filtering rule (titles matching live/unplugged/live-at patterns), and chronological ordering. The 'concert-record shelf' metaphor clearly differentiates it from sibling album-type tools like get_artist_singles and get_artist_albums, and the parenthetical pattern list pins down the matching logic precisely.
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 use case is clearly scoped โ an explicit query for an artist's live releases/concert recordings โ and the quota note ('one paginated /artists/{id}/albums walk') gives cost-aware selection context in a toolset that clearly tracks quota (quota_probe, backup_first siblings). However, it never names an alternative or states when not to use it, leaving sibling comparison to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artist_name_disambiguatorA
Resolves an ambiguous artist name: runs a typed artist search and profiles each candidate (genres, active year span and a sample release from a small discography probe) so you can pick the right ID. Quota: 1 /search + 1 small albums call per candidate.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Artist name to disambiguate | |
| market | No | ISO 3166-1 alpha-2 market code (e.g. 'US'); omit for 'from_token' behaviour | |
| candidates_cap | No | Candidates profiled. Default: 5 | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral disclosure burden, and it does well: it explains the multi-step behavior (typed search, candidate profiling, discography probe) and includes a specific quota ('1 /search + 1 small albums call per candidate'). It does not cover edge cases like no candidates found or explicit permissions, but the quota and operation flow are strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose and immediately followed by the operational behavior and quota. Every sentence contributes relevant information with no padding or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is moderately complex, and the description covers the workflow, quota, and the kinds of profile data returned. It does not spell out the exact output shape or failure behavior, but the response_format parameter and the candidate profiling detail provide enough for an agent to invoke it correctly. A slight gap is lack of handling guidance for zero or low-confidence candidates.
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 baseline is 3. The description adds some contextual value by explaining that candidates are profiled and that there is a per-candidate quota, which indirectly relates to candidates_cap. However, it does not add parameter-specific meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete goal, 'Resolves an ambiguous artist name,' and details the method: typed search plus candidate profiling with genres, active year span, and a sample release. This clearly distinguishes it from raw search tools by emphasizing the disambiguation purpose. It also names the output goal ('so you can pick the right ID'), which is specific and actionable.
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 clearly implies when to use the tool: when an artist name is ambiguous and you need to select the correct ID. It does not explicitly name alternatives or state 'do not use when...', so it misses the highest bar, but the context is clear enough for an agent to select it for disambiguation rather than a simple search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artist_reissue_detectorA
Detect alternate versions (live/deluxe/remaster/expanded editions) in an artist's release titles and group them by base title โ spot the canonical release vs its variants. Quota: ๐ก one paginated /artists/{id}/albums walk.
| Name | Required | Description | Default |
|---|---|---|---|
| artist_id | Yes | Spotify artist ID, URI, or URL | |
| max_results | No | ||
| max_releases | No | Releases to scan. Default: SPOTIFY_MCP_FETCH_ALL_CAP | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It adds a useful quota/cost signal: one paginated /artists/{id}/albums walk, which helps the agent anticipate expense. It also explains grouping behavior, though it does not disclose exact return shape or edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the main action and expected output, followed by a concise quota note. No filler or repetition of schema details.
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 read-style detection tool, the description covers purpose, expected output concept, and quota behavior. There is no output schema, so a bit more detail on the returned grouping structure would be ideal, but the response_format parameter and the grouping statement provide enough for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75%, so most parameters are already documented. The description does not add much param-level detail, but it does imply that artist_id maps to the /artists/{id}/albums walk. The undocumented max_results is not compensated for, but overall the schema carries the parameter burden.
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 ('Detect') and resource (alternate versions in an artist's release titles), and defines the key outcome: group by base title and identify canonical releases vs variants. This distinguishes it from sibling tools like duplicate_saved_versions or album_edition_lint without needing extra context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied clearly: use when you need to find reissues, deluxe, remaster, or lived editions within an artist's discography. However, it does not explicitly state when to prefer this over similar sibling tools or mention exclusions, so the agent must infer the decision from the purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artist_release_digestA
Show a digest of new releases since the last check for a watchlist. WARNING: N artists = N requests. Use max_artists to budget and dry_run to preview.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| max_artists | No | Per-call budget for artist lookups. Default: 25 (or SPOTIFY_MCP_FRESHNESS_BUDGET). | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| watchlist_name | No | Watchlist name. Default: "default" | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. The WARNING (N artists = N requests) is a genuinely useful behavioral disclosure about request amplification. The mention of dry_run ('describe exactly what would change without performing it') implies the tool mutates state, but the description never explicitly states that the digest records the last-check time or what side effects occur.
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 zero waste. The purpose is front-loaded, followed by the cost warning and the mitigation guidance. 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?
Given there is no annotation coverage and no output schema, and the tool is stateful (since the last check) amid hundreds of siblings, the description is only partially complete. It covers the core purpose and the cost risk well, but omits explicit state-mutation disclosure, sibling routing, and any sense of return semantics beyond the response_format enum in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the schema already documents defaults, enums, and bounds for all five parameters. The description adds minor value by framing max_artists as a budget and dry_run as a preview mechanism, but it doesn't clarify parameter semantics beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb (Show) with a clear resource (a digest of new releases since the last check for a watchlist). The watchlist + last-check state makes the purpose distinctive. However, it does not explicitly differentiate from close release-related siblings such as check_artist_releases, whats_new, or artistwatch_new_additions, so an agent must infer the right choice.
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 direct invocation guidance: 'Use max_artists to budget and dry_run to preview,' plus a cost warning. That is real operational guidance, but there is no when-to-use vs alternatives guidance and no statement of when not to use it (e.g., for single-artist checks use check_artist_releases).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artist_release_type_breakdownA
Break an artist's discography down by album type (album ยท single ยท compilation ยท appears_on): counts, first and latest per type, and sample titles. Quota: ๐ก one paginated /artists/{id}/albums walk.
| Name | Required | Description | Default |
|---|---|---|---|
| artist_id | Yes | Spotify artist ID, URI, or URL | |
| include_groups | No | Comma-separated album groups: album,single,appears_on,compilation. Default: album,single | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It adds genuine value by disclosing the quota cost โ 'one paginated /artists/{id}/albums walk' โ which informs the agent about API expense and internal pagination. However, it does not explicitly state that the operation is read-only, nor cover failure modes or behavior on large or empty discographies, leaving disclosure partial.
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 zero waste: the function and output fields are front-loaded, and the quota sentence adds practical cost information rather than padding. 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?
With no output schema, return-value explanation falls to the description, which adequately conveys the result semantics (counts, first/latest per type, sample titles). Combined with full parameter documentation and the quota note, an agent has enough to select and invoke correctly. Minor unspecified gaps โ the exact shape of the 'json' output and edge cases like artists with no albums โ do not block correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: all three parameters (artist_id, include_groups, response_format) are documented with types, defaults, enums, and value semantics. The description adds only marginal reinforcement by echoing the album-group values and implying output-shape differences across response formats; it does not carry meaning the schema lacks, so the 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?
States a specific verb and resource: 'Break an artist's discography down by album type', enumerates the four types (album ยท single ยท compilation ยท appears_on), and specifies the output fields (counts, first and latest per type, sample titles). This level of specificity distinguishes it from raw-list siblings like get_artist_albums and from other aggregation tools like artist_discography_stats.
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: an agent wanting a per-type aggregation of an artist's catalog would infer this tool fits. However, the description never names alternatives or states when-not-to-use, and the sibling list contains many overlapping discography tools (artist_discography_stats, artist_catalog_stats, artist_album_timeline), so explicit routing guidance would materially help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artist_representation_censusA
Census of your saved tracks by credited artist: rank the top N artists by how many saved tracks they appear on. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| top_n | No | How many rows/groups to show (default 10) | |
| scan_cap | No | Max saved items to walk per paginated source (default: SPOTIFY_MCP_FETCH_ALL_CAP) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full behavioral burden. It explicitly labels the tool 'Read-only,' which is a critical non-mutation trait. It also clarifies the algorithmic behavior that credited artists are counted for each saved track they appear on, not merely artists you follow or own albums by.
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 entire description is one tight, front-loaded sentence. It defines the resource, the operation, the ranking criterion, and the read-only nature without any filler or redundant restatement.
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 read-only aggregation tool, the description plus the fully documented schema is largely sufficient. It explains the core output concept, and the schema covers caps and response formats. It could be more complete by noting how multi-artist tracks affect counts or what the returned rows look like, but these are not blocking gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented in the schema. The description adds only a small reinforcement of 'top N' aligning with top_n, but it does not otherwise deepen meaning beyond the schema. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation: censusing saved tracks and ranking credited artists by how many saved tracks they appear on. The verb 'rank' and the scope 'your saved tracks' are specific. It does not explicitly differentiate from near-neighbor siblings such as saved_tracks_by_artist or top_artist_leaderboard, so it misses the top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when you want an artist-representation ranking across your saved tracks. However, it does not explicitly state when to prefer this over alternatives, nor does it mention any exclusions or competing tools like saved_tracks_by_artist or top_artist_leaderboard.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artist_scout_from_playlistsA
Find new-to-you artists: pull the artist roster from one of your playlists and rank the ones you have NOT saved any tracks of โ discovery from your own rotation. Quota: ๐ด playlist walk + saved-tracks membership check.
| Name | Required | Description | Default |
|---|---|---|---|
| max_items | No | Playlist items to scan. Default: 200 | |
| max_artists | No | Max newcomer rows. Default: 15 | |
| playlist_id | Yes | Spotify playlist ID, URI, or URL | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are completely absent, so the description carries the full burden. It discloses that the operation reads a playlist, scans items, and performs membership checks against saved tracks. It also flags quota cost with the ๐ด emoji. It does not specify side effects, but the term 'find new-to-you artists' plus 'membership check' implies a read-only discovery process. It transparently signals the two-pass operation (playlist walk + saved-track checks).
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 one compact sentence plus a short quota note. The core behavior is front-loaded, followed immediately by the differentiating value proposition. No redundant phrases. The quota signal earns its place as actionable 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?
The tool's complexity is moderate: it takes one required playlist and several optional controls. The description covers the main workflow, the key qualifier (unsaved artists), and an important operational detail (quota). It doesn't describe the output shape, but there is no output schema and the response_format parameter covers output style. Minor gap: it doesn't mention whether the playlist must be owned by the user or whether any playlist works, but 'one of your playlists' implies ownership.
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 description does not add parameter-level detail beyond the schema. The parameters max_items, max_artists, playlist_id, and response_format are all documented in the schema. The description communicates the discovery semantics but not parameter-specific behavior such as defaults or how response_format interacts with output. 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 uses a specific verb ('pull' and 'rank') and clearly identifies both the resource ('artist roster from one of your playlists') and the core value proposition ('artists you have NOT saved any tracks of'). The phrase 'discovery from your own rotation' further anchors intent. It distinguishes itself from sibling tools like saved_tracks_by_artist or playlist_artist_heat because it explicitly targets unsaved 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?
The description states that the input is a playlist from the user's own rotation and that the output is newcomers (unsaved artists). It implies this is the right tool for discovery from a playlist, but it does not explicitly say when NOT to use it or name alternative tools (e.g., discovery_digest for broader discovery, saved_tracks_by_artist for saved-artist stats). Still, it gives enough context for an agent to infer appropriate invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artist_singles_timelineA
Chronological singles timeline for an artist (date ยท title ยท track count) โ the 45-rpm history in one table. Quota: ๐ก one paginated /artists/{id}/albums walk (singles group).
| Name | Required | Description | Default |
|---|---|---|---|
| artist_id | Yes | Spotify artist ID, URI, or URL | |
| max_results | No | ||
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and discloses genuinely valuable traits: the underlying implementation (one paginated /artists/{id}/albums walk), the scope filter (singles group), the cost tier (๐ก), and the output shape (date ยท title ยท track count). The rate-limit/cost disclosure is exactly the context the rubric credits. It omits edge behaviors like reissue handling or pagination semantics, but the core behavioral profile is 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?
Two tight sentences with zero filler: the first front-loads the core behavior, the second packs cost and implementation detail. The '45-rpm history' metaphor earns its place by making the deliverable instantly recognizable.
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 read-only tool with no annotations and no output schema, the description conveys the core deliverable, scope, and quota but stops short of covering max_results semantics, response_format behavior, or edge cases (empty catalogs, invalid artist IDs). Adequate for the common path, incomplete for the full call contract.
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 documents artist_id and response_format well, but max_results has no description in either the schema or the tool description, so an agent cannot know it caps the result set. The tool description contributes zero parameter meaning and does not compensate for the 33% schema coverage gap. Neither source explains the one non-obvious parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific deliverable: a chronological singles timeline showing date, title, and track count, with the vivid '45-rpm history in one table' metaphor reinforcing the scope. The singles-only scope distinguishes it from the discography-wide artist_discography_timeline and from the plain listing implied by get_artist_singles.
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 use case is implied โ a historical, one-table view of an artist's singles โ but no alternatives are named and no when-to-use versus when-not-to-use guidance is given. Close siblings like get_artist_singles and artist_discography_timeline exist, yet the description never routes the agent between them. The quota note hints at cost but not at selection logic.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artist_top_vs_savedA
Compares your top artists (from /me/top/artists) against your own library: saved-album and saved-track counts per top artist, ranked by library presence. Read-only; no popularity fields used. Quota: 1 /me/top/artists + 2 capped library walks.
| Name | Required | Description | Default |
|---|---|---|---|
| window | No | Listening window for top artists. Default: 'medium_term' | |
| artists_cap | No | Top artists to compare. Default: 10 | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
| saved_album_cap | No | Max saved albums scanned. Default: 1000 | |
| saved_track_cap | No | Max saved tracks scanned. Default: 2000 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well: it explicitly declares 'Read-only', states that no popularity fields are used (clarifying what the tool does NOT compute), and discloses the quota cost ('1 /me/top/artists + 2 capped library walks'). This goes beyond a typical description by revealing data sources and resource footprint, though it does not address edge-case behavior such as empty libraries or zero saved items.
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 with zero waste: first sentence delivers the core function, second adds the safety profile, third adds operational cost. The most important content is front-loaded, and each sentence earns its place without repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only comparison tool with no output schema and a fully-documented input schema, the description covers the computation, the output ordering, the safety profile, and the quota. It does not elaborate on the return format (beyond the response_format param) or edge cases like empty results, but the core contract an agent needs to invoke and interpret results is present.
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 all five parameters (window, artists_cap, response_format, saved_album_cap, saved_track_cap) are already documented. The description adds minimal param-level meaning โ the phrase 'capped library walks' contextualizes the two caps, and 'top artists' links to artists_cap/window โ but it does not meaningfully extend the schema's own documentation. 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 uses a specific verb ('compares') with a clear resource ('top artists from /me/top/artists' vs 'your own library') and states the exact output: saved-album and saved-track counts per top artist, ranked by library presence. This distinguishes it from siblings like get_top_artists (plain retrieval), saved_vs_playlist_coverage (playlist comparison), and artist_representation_census (census-style analysis).
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 implied usage context โ it computes library-presence ranking of top artists and is explicitly read-only with a stated quota โ but it never names alternatives or conditions for when to choose this over adjacent tools like top_artists_by_range, saved_vs_playlist_coverage, or library_coverage_report. There are no when/when-not statements, so an agent must infer the selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artist_velocity_reportB
Classify each top artistโs momentum by comparing short_term and long_term ranks (surging / climbing / steady / slipping / falling / new_entry). Quota: 2ร GET /me/top/artists.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Artists per window (default 40). | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the behavioral burden. It discloses that the tool performs 2ร GET /me/top/artists, which is useful quota/cost transparency. However, it does not explain whether this is read-only, what the output shape will be, how pagination or max_results interacts with the two windows, or any errors/edge cases (e.g., empty history, ties in ranking).
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, one sentence plus a quota note. The core function is front-loaded, and the quota information is useful and not redundant with the schema. It could arguably include a bit more detail on output behavior, but the sentence itself is efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only analytics tool with three parameters and no output schema, the description is decent but incomplete. It tells the agent what it computes and the quota cost, but it does not describe the output structure, how the classification labels map to output values, or how limit/max_results affect the two windows. Given the large sibling set of analytics tools, more contextual guidance would help.
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 parameters are already documented in the schema. The description adds no parameter-specific meaning beyond the schema and does not clarify how limit and max_results apply across the two rank windows (short_term vs long_term). Baseline 3 is appropriate because the schema covers the parameters but the description contributes little extra semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies what the tool does: 'Classify each top artistโs momentum by comparing short_term and long_term ranks' and names the classification labels. However, it does not explicitly distinguish itself from sibling analytics tools like top_artist_ranking_delta or taste_shift_report, which may also involve rank comparisons, so differentiation is incomplete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for momentum analysis of top artists, which gives some usage context. It does not state when to prefer this over similar analytics tools, nor does it mention any prerequisites (e.g., that a user must have listening history or that short/long term data must exist). No explicit exclusions or alternatives are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artistwatch_new_additionsA
Watches your FOLLOWED artists for new material: walks /me/following, probes each artist's latest release and flags those released within the last N days. Quota: 1 cursor walk + 1 small albums call per followed artist.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Freshness window in days. Default: 30 | |
| artists_cap | No | Max followed artists probed. Default: 30 | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and delivers real disclosure: it states it walks /me/following, probes each artist's latest release, and quantifies the quota as 1 cursor walk + 1 small albums call per artist โ useful cost and latency context an agent wouldn't get from the schema. It falls short of full transparency by not warning about sequential-call latency when artists_cap is high and not clarifying what the flagged output looks like.
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 front-load the purpose ('Watches your FOLLOWED artists for new material') before the mechanics and quota disclosure. Every clause earns its place, including the valuable quota note, and there is zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read tool with no annotations and no output schema, it covers the core behavior and quota cost well. But it never describes the return shape ('flags' is vague), gives no routing among the many watch/check/digest siblings, and omits a latency caveat for high artists_cap values โ gaps that matter because neither annotations nor an output schema exist to fill them.
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 applies; the description's 'last N days' and per-artist probe narrative do align conceptually with the days and artists_cap parameters. It adds no syntax, format, or interaction detail beyond the schema, which is acceptable at full coverage but not additive.
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 a specific action (watches, probes, flags) and a specific scope (FOLLOWED artists via /me/following), tied to a freshness window, so an agent can tell what it does. However, with near-overlapping siblings like check_artist_releases, artist_release_digest, and new_music_from_saved_artists in the toolset, it never states how it differs from them, stopping short of full disambiguation.
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 mechanism and quota note imply a monitoring use case, so an agent can infer roughly when it applies. But there is no explicit when-to-use guidance, no exclusions, and no mention of alternatives despite several close siblings in the same domain, leaving routing largely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audiobook_chapter_mapB
[local-compute] Chapter-by-chapter duration map, total runtime and the mid-point chapter for one audiobook. MARKET GATE: audiobooks are US/UK/CA/IE/NZ/AU only. Quota: ๐ก 2+ API calls (GET /audiobooks/{id} + paged GET /audiobooks/{id}/chapters).
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | ||
| audiobook_id | Yes | Spotify audiobook ID | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and discloses meaningful behavior: [local-compute] signals where processing happens, and the Quota line reveals the real cost โ a GET /audiobooks/{id} call plus a paged GET /audiobooks/{id}/chapters call, implying pagination and a multi-call operation. The market gate is an additional behavioral constraint. It does not confirm read-only semantics or describe error/return behavior, but the cost and gating disclosures go well beyond a bare statement.
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 with the purpose front-loaded and the market gate and quota clearly labeled. Every sentence earns its place, though the telegraphic all-caps labels make it slightly cramped rather than elegant.
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 tool with no annotations and no output schema, the description covers the core outputs (duration map, total runtime, midpoint) and the API cost, which partially substitutes for a return-value spec. Gaps remain: max_results semantics, whether response_format changes the computed midpoint or raw payload, and how this tool relates to the raw chapter endpoints.
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 67% โ audiobook_id and response_format have descriptions, but max_results has none, and the description adds no per-parameter meaning. The critical question of what max_results caps (chapters fetched, map size, or something else) is left unanswered by both schema 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 states a clear scope ('one audiobook') and three concrete computed outputs: a chapter-by-chapter duration map, total runtime, and the mid-point chapter. This reads as a distinct analytics aggregation rather than a raw listing, functionally separating it from siblings like get_audiobook_chapters and get_audiobook, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only usage signal is the MARKET GATE restriction (US/UK/CA/IE/NZ/AU only), which is a platform-level market exclusion rather than a tool-selection rule. There is no guidance on when to choose this over get_audiobook_chapters, audiobook_progress, or list_all_chapters, and no statement of the user need this tool answers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audiobook_library_progressA
All saved audiobooks with % complete and estimated time remaining, sorted by progress โ what am I actually reading. Quota: 1 + N reads. NOTE: audiobook endpoints are market-gated (US/UK/CA/IE/NZ/AU) โ outside these a clear error is returned.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | progress | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| max_audiobooks | No | ||
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It usefully discloses the quota ('1 + N reads'), market-gating limitations, and error behavior. The read-only nature is implied by the quota wording and the tool's list-like description, which is sufficient for a non-destructive library query.
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 compact and front-loaded with the core purpose, followed by two clearly separated operational notes (quota and market gating). Every sentence adds relevant information, and there is no filler or redundant restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with four optional parameters and no output schema, the description covers the main output content, sorting, quota, and market gating. However, it does not clarify the distinction between max_audiobooks and max_results, and it lacks sibling differentiation, leaving some selection and invocation ambiguity.
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 50%: max_results and response_format already have descriptions, while sort and max_audiobooks do not. The description adds meaning for sort by emphasizing progress sorting and confirms the tool's scope, but it does not explain max_audiobooks or how it relates to max_results. The compensation for the schema gap is only partial.
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 resource ('all saved audiobooks'), the key data shown (percent complete and estimated time remaining), and the default organization ('sorted by progress'). The phrase 'what am I actually reading' conveys the user intent well. It does not explicitly contrast with sibling tools like audiobook_progress or get_saved_audiobooks, so it falls just short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides operational details such as quota and market gating, but gives no guidance on when to choose this tool over similar audiobook-related siblings like audiobook_progress, get_saved_audiobooks, or search_audiobooks. There is no explicit 'use this when' or mention of alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audiobook_progressA
Audiobook progress rollup: chapters total, played count, current chapter, percent complete. Quota: ๐ก 2 GETs (audiobook + chapters).
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | Market, e.g. 'US' | |
| audiobook_id | Yes | Audiobook ID | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does well: it discloses that the tool performs 2 GET calls (audiobook + chapters) and reports the quota cost. It lists the output fields but doesn't cover error behavior or exact response formatting, which keeps it from 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?
Two sentences with no waste: the first states what the tool returns, the second states quota cost. It avoids repeating schema content and is easily parsed by an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema, the description names all key return fields and the underlying API calls. It doesn't clarify the precise semantics of 'played count' or 'percent complete', but combined with the schema's response_format documentation this 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%, so baseline 3 applies. The description adds no parameter-specific meaning, but the schema already documents audiobook_id, market, and response_format, so no compensation is required.
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 ('audiobook progress') and the exact metrics returned: chapters total, played count, current chapter, percent complete. 'Rollup' conveys aggregation, which differentiates it from raw chapter-list tools, though it lacks an explicit verb and direct contrast to sibling audiobook_library_progress.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives like get_audiobook, get_audiobook_chapters, or audiobook_library_progress. The quota note is a cost constraint, not a usage rule or exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audiobooks_by_authorA
Author catalogue via the author: search filter with client-side sorting โ sort=release orders by release date (when Spotify exposes one; unknown dates sort last) and sort=length orders by chapter count as the length proxy. MARKET GATE: audiobooks are US/UK/CA/IE/NZ/AU only. Quota: ๐ข one GET /search call.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort client-side by release date or chapter count. Default: 'release' | |
| limit | No | Results per page, 1โ10 (Feb-2026 /search cap). Default: 5 | |
| author | Yes | Author name | |
| market | No | ISO 3166-1 alpha-2 market code (e.g. 'US'); omit for 'from_token' behaviour | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden โ and it delivers: it discloses client-side sorting semantics, the release-date fallback when Spotify doesn't expose one (unknown dates sort last), the chapter-count length proxy, the US/UK/CA/IE/NZ/AU market restriction, and a one-GET /search-call quota. It omits read-only safety and failure/empty-result behavior, but these are minor against the concrete operational details it does reveal.
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 with zero filler: purpose+sort mechanics up front, then the market gate, then quota. Every sentence carries distinct operational information, and the structure front-loads the core function before 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 5-parameter tool with no output schema and no annotations, the description covers the operation, the tricky sort edge cases, the market restriction, and the quota cost โ all genuinely useful calling context. Remaining gaps (result shape, behavior on unknown authors) are mitigated by the response_format parameter and the simplicity of the query, so the overall picture is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description earns extra credit on the `sort` parameter: it explains that release dates apply only 'when Spotify exposes one', that unknown dates sort last, and that length uses chapter count as a proxy โ nuances the schema's one-line enum description lacks. The other parameters are adequately served by 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 states a specific function โ an author catalogue built via the `author:` search filter โ plus the client-side sorting it applies. The verb+resource (list audiobooks by author) is clear and distinguishes it in scope from generic siblings like search_audiobooks and library-based get_saved_audiobooks, though it never names a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance is given; there is no mention of preferring this over search_audiobooks or get_saved_audiobooks for broader searches. The usage context is implied by 'Author catalogue', and the market gate is a constraint rather than routing advice. An agent must infer the selection logic.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
backup_firstA
Create a pre-flight library snapshot before a destructive operation. Returns snapshot file path and counts for later restore. Read-only against Spotify.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | Free-text note for the snapshot | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It does disclose that the tool is read-only against Spotify and that it returns a snapshot file path and counts for later restore. However, it does not describe what exactly is snapshotted, whether the snapshot persists, or any other side effects beyond creating the snapshot.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and well-structured: it states the purpose in the first sentence, the return value in the second, and the key behavioral constraint in the third. Every sentence earns its place with no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has only two optional parameters and no output schema, and the description sufficiently explains the tool's purpose and return value. It does not over-promise or omit critical calling context. A note about which snapshot format or restore mechanism to pair with it would improve completeness, but the current level is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters notes and response_format are already documented. The description adds no additional parameter semantics beyond the schema, which is acceptable given the baseline for full 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 identifies the action: create a pre-flight library snapshot before a destructive operation. It also distinguishes this tool from generic backup tools by emphasizing the pre-flight, restore-oriented intent. The phrase 'read-only against Spotify' adds an important scope distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: 'before a destructive operation.' It implies this is a safety/preparation step and notes the read-only nature against Spotify. However, it does not explicitly name alternative tools or describe when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
backup_libraryA
Snapshot your ENTIRE library to a local JSON file (read-only against Spotify): liked tracks, saved albums/shows/episodes/audiobooks, followed artists, and every playlist with its items. Walks capped at SPOTIFY_MCP_FETCH_ALL_CAP (default 500 per category). Files land in SPOTIFY_MCP_BACKUP_DIR (default ~/.spotify-mcp/backups), mode 0600.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | Free-text note stored in the snapshot _meta block | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| max_results | No | Per-category walk cap for THIS call (default: SPOTIFY_MCP_FETCH_ALL_CAP) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden, and it delivers: 'read-only against Spotify' discloses the safety profile, while walk caps (SPOTIFY_MCP_FETCH_ALL_CAP, default 500), the output directory (SPOTIFY_MCP_BACKUP_DIR), and file mode 0600 disclose side effects, limits, and security handling. This goes well beyond a typical one-line backup description.
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, purpose front-loaded in the opening clause, with caps and file-location details in a compact tail. No filler, no repetition of schema content, 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?
Covers the operational essentials โ scope, safety, cap, output location, and file permissions โ which is most of what an agent needs given zero required parameters. However, with no output schema it never hints at the tool's return value, and 'a local JSON file' vs 'Files land in...' leaves whether one or multiple files are written slightly ambiguous.
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 optional parameters, including the enum description for response_format, the dry_run preview semantics, and the max_results default. The description adds no parameter-level detail beyond the schema, so the 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?
States a specific verb+resource: snapshots the ENTIRE library to a local JSON file, enumerating exact categories (liked tracks, saved albums/shows/episodes/audiobooks, followed artists, and playlists with items). The capitalized 'ENTIRE' plus the category list clearly distinguishes it from narrower export siblings like snapshot_playlist or export_playlist_json.
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 scope statement ('ENTIRE library', all categories, local JSON file) implies the use case, but it never names alternatives or exclusions. With near-identical siblings in the set (export_library_json, export_all_playlists, restore_library_snapshot, list_backups), an agent gets no explicit routing guidance for which tool to pick.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
balance_playlist_pairsA
Plan (and optionally commit) rebalancing 2โ10 playlists to similar track counts or runtimes: computes surplus moves from the larger to the smaller. dry_run defaults to TRUE so it returns the move PLAN read-only. Quota: ๐ก N GETs + moves when committing.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Pass false to commit. Default true | |
| balance_by | No | Balance metric: track count or total runtime. Default count | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_ids | Yes | Playlists to balance (2โ10) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does disclose the key behaviors: returning a read-only PLAN by default, committing only when dry_run=false, and incurring 'N GETs + moves' on commit. It could add that committing moves tracks, but 'moves when committing' and 'surplus moves' imply it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences plus a quota note, front-loaded with the main action and scope. Every phrase carries information: action, resource range, metric choices, algorithm, safe default, and cost.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description tells the agent what the tool returns ('the move PLAN') and what affects it (dry_run). All parameters are documented in the schema, and the quota note clarifies cost, so nothing essential is missing 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?
The schema already covers all 5 parameters with descriptions, so the baseline is 3; the description adds useful cross-cutting meaning by tying dry_run to 'returns the move PLAN read-only' and by summarizing balance_by as 'track counts or runtimes.' It does not go into max_results or response_format, but the schema already handles those.
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 a specific action ('Plan (and optionally commit) rebalancing'), a bounded resource scope ('2โ10 playlists'), and the balancing metrics ('track counts or runtimes'). It also explains the mechanism ('computes surplus moves from the larger to the smaller'), making the tool easy to distinguish from generic playlist merge/interleave siblings.
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 clear use context: when playlists need balancing to similar counts/runtimes, and it explicitly notes dry_run defaults to TRUE for read-only planning. It does not name alternatives or when-not conditions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
base62_to_uriA
Reinterpret a base62 ID string as a Spotify entity ID and build the full spotify: URI for a given kind, offline.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Entity kind, e.g. track | |
| base62 | Yes | Base62 ID string | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure. 'Offline' explicitly signals no network/API dependency, and 'reinterpret' indicates the tool does not validate the base62 string, simply reshaping it. It does not describe edge cases or failure modes, which is a minor gap for a local transformation 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?
A single 20-word sentence that leads with the core operation and ends with the offline constraint. No fluff; every word contributes to understanding the tool's behavior.
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 low complexity, 100% schema coverage, and the explicit output type (spotify: URI) in the description, the definition is mostly complete. The only minor gap is that it does not state how response_format changes the returned value, though the schema already describes that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters including response_format's enum. The description only rephrases the purpose ('base62 ID string', 'for a given kind') without adding format or edge-case semantics beyond the schema, meriting the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb-resource pair: reinterpret a base62 ID string and build a spotify: URI for a given kind. The 'offline' qualifier also clarifies this is a local transformation, which distinguishes it from network-dependent tools and reverse siblings like uri_to_base62.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case โ converting a base62 ID into a spotify: URI for a specific entity kind โ but does not explicitly mention when to prefer it over related tools like uri_to_base62 or validate_spotify_uri. 'Offline' provides useful context but no when-not or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_add_to_playlistA
Add tracks from multiple source URIs (tracks, albums, artists, playlists) to a target playlist in one call. Dedupes within the batch and optionally against the existing playlist. Batches writes in groups of 100. Dry-run previews without writing. Elicitation for 100+ tracks.
| Name | Required | Description | Default |
|---|---|---|---|
| dedupe | No | Deduplicate (within batch and against target). Default: true | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| source_uris | Yes | Source URIs: spotify:track:, spotify:album:, spotify:artist:, spotify:playlist: | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
| target_playlist_id | Yes | Target playlist ID or spotify:playlist: URI |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses useful behaviors not in annotations: batching into 100-item writes, dedupe within batch/optionally against playlist, and dry-run that previews without writing. However, with no annotations present, it omits permission/ownership requirements, failure semantics, and a coherent statement of what happens for 100+ tracks, and the ambiguous 'Elicitation' sentence weakens the transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The text is compact and front-loaded, with the core action in the first sentence and each behavioral note in its own sentence. It loses a point for grammatical issues ('Batches writes') and the unclear standalone phrase 'Elicitation for 100+ tracks.'
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 annotations and no output schema mean the description must supply usage context, return semantics, and side-effect caveats on its own. It supplies batching and dry-run details, but it does not explain what a successful call returns, how errors or duplicate situations are handled beyond the flag, or when to invoke this over the many playlist mutation siblings, so the tool is not fully callable from the description alone.
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 baseline is 3; the description adds a little context by spelling out the accepted source URI categories and the dedupe/dry-run intent. It does not add meaningful detail for target_playlist_id, max_results, or response_format 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 opening sentence names the verb (add), resource (tracks to a target playlist), and the batch/multi-source scope, which clearly sets it apart from sibling tools like add_to_playlist. It also enumerates acceptable source URI kinds, so an agent can identify what the tool accepts.
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 'in one call' and source-URI breadth imply a batch-add scenario, but the description never states when to prefer this over add_to_playlist or playlist_add_by_search, nor does it provide exclusions. The final 'Elicitation for 100+ tracks' phrase is too vague to serve as practical guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_add_to_queueA
Add multiple URIs to the playback queue in one shot. POSTs each URI to /me/player/queue and returns a summary of queued/failed counts. Quota: ๐ก N writes (one POST per URI). Also covers: single add via add_to_queue, playlist queue via queue_playlist โ See also: add_to_queue, queue_playlist.
| Name | Required | Description | Default |
|---|---|---|---|
| uris | Yes | Spotify track/episode URIs to queue (1โ200) | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| device_id | No | Target device id | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses the write nature, the per-URI POST mechanism, the quota impact ('N writes'), and the queued/failed summary return. It does not discuss error handling or dry_run behavior, but the core side effects are clearly stated.
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-load the purpose, then add mechanics/quota and related-tool routing. Every sentence contributes useful information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, mechanics, quota, output summary, and sibling relationships, while the schema fully documents all four parameters. Some minor gaps remain around failure behavior and dry_run effects, but the agent has enough to select and invoke 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 baseline is 3. The description adds little beyond the schema: it reinforces that the tool handles multiple URIs and returns a summary, but it does not explain dry_run, device_id, or response_format more deeply than the schema already does.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: adding multiple URIs to the playback queue in one shot, with the mechanics briefly specified as POSTing each URI to /me/player/queue. It also differentiates itself from add_to_queue and queue_playlist by naming these siblings and the single/playlist cases they cover.
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 names the relevant alternatives (add_to_queue for single add, queue_playlist for playlist queue) and the batch context is clear from 'multiple URIs in one shot.' It does not give fully explicit when-not instructions, but the routing signal is present and inferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_parse_spotify_urisA
Parse a batch of Spotify references into kind/ID parts in one local pass โ no network calls; one result row per input.
| Name | Required | Description | Default |
|---|---|---|---|
| uris | Yes | Up to 500 Spotify references | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states the operation is local with no network calls and guarantees one result row per input, which are useful behavioral guarantees beyond what the name or schema reveal. It does not describe invalid-input handling, but the core behavior is well covered.
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 dense sentence that front-loads the action and result, with zero filler. Every phrase earns its place: 'batch', 'kind/ID parts', 'one local pass โ no network calls', and 'one result row per input' are all distinct and useful.
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, pure parsing utility with only two well-documented parameters, the description is largely complete: it names the transformation, the batch scope, the local/no-network behavior, and the row-per-input result shape. The absence of an output schema means detail about invalid URI handling or exact row fields would improve completeness, but the core call contract is clear.
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 both parameters. The description adds no parameter-level meaning beyond restating that the input is a batch of Spotify references, which is the baseline expected when the schema is self-sufficient.
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 ('Parse'), a clear resource ('batch of Spotify references'), and the exact outcome ('kind/ID parts'). It also distinguishes itself from related siblings by emphasizing 'batch' and 'one local pass โ no network calls', so an agent can tell it apart from parse_spotify_uri or validate_spotify_uri.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the intended usage context clear: batch, local, no network calls. It does not explicitly name alternatives or exclusions, such as using a single-URI parser for one reference, but the 'batch' and 'local pass' cues provide strong guidance for when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
binge_detector_reportA
Flag artists whose recently-played counts exceed a play threshold (default โฅ5 plays) with span and track coverage, sorted by intensity. Quota: GET /me/player/recently-played cursor walk.
| Name | Required | Description | Default |
|---|---|---|---|
| max_items | No | Max recently-played items to walk (default 150; the API pages 50 per call). | |
| threshold | No | Minimum plays per artist to count as a binge (default 5). | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It does disclose useful behavioral traits beyond the schemaโthe data source ('GET /me/player/recently-played cursor walk'), the quota implication, and output sorting ('sorted by intensity'). However, it never states the key limitation that 'recently-played' only covers a finite recent window, which could mislead an agent into thinking counts are all-time.
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, roughly 30 words, with the core behavior front-loaded and the quota/data-source note placed second. Every clause carries information; zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-optional-param tool with a well-documented schema, the description covers the main behavior, output characteristics, and data source. But with no output schema and no annotations, the unstated recently-played window limitation and the absence of any guidance competing with the many similar report siblings leave meaningful gaps for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter already has a clear schema description (defaults, max, enum meanings). The description's '(default โฅ5 plays)' only rephrases the schema's threshold default and adds no new parameter semantics. The baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Flag') with a clear resource ('artists whose recently-played counts exceed a play threshold'), plus concrete output detail ('span and track coverage, sorted by intensity'). It is readily distinguishable from siblings like get_recently_played (raw feed), listening_streaks (consecutive plays), and top_artists_by_range (ranked top lists).
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 purpose statement implies when to use it (detecting binge-listening artists), and the quota note gives operational context, but no alternatives are named and no when-not-to-use guidance is given. With dozens of overlapping listening-analysis siblings (listening_report, taste_shift_report, weekly_rotation_report), explicit routing would have helped.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browse_category_deepdiveA
Category โ playlists โ optional items peek in one call (GET /browse/categories/{id} + /playlists (+ /playlists/{id}/tracks peek)). Quota: ๐ก 2โ3 calls.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Playlists per page, 1โ50. Default: 10 | |
| locale | No | Locale, e.g. en_US | |
| country | No | ISO 3166-1 alpha-2 country code, e.g. 'US' | |
| peek_items | No | When true, fetch top 2 tracks of the first playlist | |
| category_id | Yes | Category ID from get_categories | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and it does disclose meaningful traits: it makes 2โ3 underlying API calls, the calls are GETs (read-only), and the optional track peek is part of the same operation. Quota cost is explicitly surfaced. It could add return-format detail, but the endpoint/call behavior is 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?
Two short sentences pack the operation, endpoints, optional behavior, and quota with no filler. The main behavior is front-loaded before implementation details.
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 7-parameter tool with one required param and no output schema, the description gives enough to invoke correctly: required category_id is implied by the endpoint, optional peek behavior is flagged, and quota is disclosed. A bit more detail about response shape would be nice, but it is not critical for calling it.
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 every parameter is already documented. The description adds no parameter-level semantics beyond the endpoint placeholders ({id}, {id}/tracks), so the 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 clear composite operation ('Category โ playlists โ optional items peek') and specifies the exact endpoint chain, so an agent can tell this aggregates category, playlists, and optional tracks. It doesn't explicitly name sibling alternatives, but the one-call/hierarchy framing distinguishes it from single-level tools like get_category_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?
Usage context is implied: use when you want category and playlist data in one call, optionally with a track peek. There is no explicit when-not or alternative routing (e.g., 'use get_category_playlists for just playlists'), so the guidance is adequate but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
b_sides_detectorB
Detect B-sides: tracks that appear on an artist's singles but never on any album โ the non-LP catalogue. Also covers: b_sides_finder (same discography scan) โ See also: b_sides_finder. Quota: ๐ด paginated walks + batched /albums lookups.
| Name | Required | Description | Default |
|---|---|---|---|
| artist_id | Yes | Spotify artist ID, URI, or URL | |
| max_results | No | ||
| max_singles | No | Singles to scan. Default: 50 | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It does disclose quota risk ('๐ด paginated walks + batched /albums lookups') and the underlying scan approach, which goes beyond the schema. However, it does not state whether the operation is read-only, what it returns by default, or any failure/edge-case 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 definition is front-loaded and compact, with the quota note placed at the end. The 'Also covers: b_sides_finder (same discography scan) โ See also: b_sides_finder' segment is redundant and slightly garbled, but the description is otherwise 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?
The description gives the core concept, scan scope, and quota warning, which is enough to start an invocation. But it lacks return-format expectations beyond the response_format enum, omits usage guidance relative to b_sides_finder, and does not explain the max_results cap, leaving the agent with moderate uncertainty.
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 75%, so the schema does most of the parameter-documentation work, and the description does not directly explain any parameter. It does add conceptual meaning by tying the scan to 'an artist's singles,' which helps interpret artist_id and max_singles, but max_results remains undocumented in both schema 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 gives a specific verb and resource: detecting B-sides as non-LP tracks on an artist's singles. It distinguishes the concept from album-track tools, though the closing 'Also covers: b_sides_finder (same discography scan)' blurs the boundary between this tool and the identically-purposed sibling, preventing 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 implies this is for finding an artist's non-album singles catalog, but it never states when to choose b_sides_detector over b_sides_finder or alternatives like get_artist_discography. The 'See also' reference is not a clear selection criterion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
b_sides_finderB
Surfaces an artist's b-sides: tracks on singles/compilation releases whose normalized titles never appear on the artist's core album-group releases, found via discography walks + chunked full-album fan-in. Quota: 2 walks + 1 /albums?ids= call per 20 releases per group. Also covers: b_sides_detector โ See also: b_sides_detector.
| Name | Required | Description | Default |
|---|---|---|---|
| artist_id | Yes | Spotify ID, URI (spotify:...), or open.spotify.com URL โ all resolve to the same entity | |
| max_results | No | ||
| max_per_group | No | Releases scanned per group (newest first). Default: 30 | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden and does substantial work: it explains that the tool performs discography walks with chunked full-album fan-in, and it discloses a specific quota ('2 walks + 1 /albums?ids= call per 20 releases per group'). It implies a read-only operation without explicitly stating so, but the methodology and quota details are more transparent than most tool descriptions.
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 main definition and quota information are front-loaded and economical. However, the final sentence is redundant and confusing: 'Also covers: b_sides_detector โ See also: b_sides_detector' repeats the same tool name and adds little useful structure or clarity. The description is compact but not entirely disciplined.
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 the algorithm and quota, which is helpful for a complex tool with no output schema. However, it does not describe what the result set looks like, how the response_format choices map to actual output, or how to interpret results in terms of max_results and max_per_group. Given the complexity and absence of an output schema, some return-value context 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 description coverage is 75%, so the schema already documents artist_id, max_per_group, and response_format. The description adds little parameter-specific meaning beyond the schema; it mentions groups and quota but does not clarify max_results semantics or how these parameters interact. The one uncovered parameter, max_results, is reasonably self-explanatory but still not addressed.
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 defines the tool as surfacing an artist's b-sides with a precise criterion: tracks on singles/compilation releases whose normalized titles never appear on core album-group releases. This goes beyond a vague verb+noun pairing. However, it does not meaningfully distinguish from the sibling b_sides_detector; the phrase 'Also covers: b_sides_detector โ See also: b_sides_detector' is confusing and fails to differentiate the two.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given about when to use this tool versus alternatives like b_sides_detector, deep_cuts_finder, or artist_deep_cuts. The only nod to a sibling is the awkward 'Also covers / See also' line, which does not state conditions for choosing one tool over the other. An agent is left to infer when b_sides_finder is the right call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_wind_downA
Cancel the in-process wind-down ramp, if one is running
| Name | Required | Description | Default |
|---|---|---|---|
| device_id | No | Only cancel if the active wind-down targets this device id | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does state that the tool targets an in-process ramp and is conditional, which is useful, but it does not mention side effects (e.g., current volume behavior) or what happens if no wind-down is running.
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 tight sentence with no filler. The main verb and object are front-loaded, and the conditional scope is stated compactly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with two optional parameters and full schema descriptions, but it has no annotations and no output schema. The description covers the core action and condition but does not clarify no-op behavior, side effects, or result shape beyond the response_format enum.
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 both parameters and the response_format enum. The description adds no parameter detail beyond the schema, which is acceptable under the 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 uses a specific verb ('Cancel') and a specific resource ('in-process wind-down ramp'), and adds a meaningful condition ('if one is running'). This clearly distinguishes it from the sibling schedule_wind_down and volume-related tools without requiring schema inspection.
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 'if one is running' gives a clear context condition for when the tool applies, but it does not explicitly name alternatives like schedule_wind_down or explain what happens when no ramp is active. Usage is implied rather than fully specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
canonicalize_spotify_uriA
Canonicalise a batch of Spotify references in one local pass: *** scheme, known kind, 22-char base62 ID, tracking params stripped โ no network.
| Name | Required | Description | Default |
|---|---|---|---|
| uris | Yes | References to canonicalise | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
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 discloses important behavior: local-only execution, no network calls, known-kind validation, base62 ID handling, and tracking-param stripping. The ambiguous '*** scheme' and lack of invalid-input behavior keep it from 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?
One dense sentence with the action front-loaded. Every phrase adds either behavioral detail or scope, with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description and schema together cover purpose, parameters, output formats, and side effects. It is nearly complete, but edge-case behavior for malformed or unknown URI kinds is not mentioned, and the '*** scheme' phrase is unclear.
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 baseline is 3. The description reinforces the batch nature and processing semantics, but the schema already documents the response_format enum and the uris array. No significant additional per-parameter meaning is added.
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 action ('Canonicalise a batch'), names the resource ('Spotify references'), and scopes it with 'one local pass' and 'no network'. It also lists concrete canonicalization transforms, distinguishing it from network-dependent and singular URI helpers.
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 clearly indicates when to use this tool: for batch, local canonicalization without network access. It does not explicitly name alternatives or exclusions, such as normalize_spotify_uri for single URIs, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
capture_playback_positionA
Bookmark the current track, playback position and device to a local JSON file under the backup dir so it can be resumed later with resume_playback_position. Writes only a local sidecar file, never touches Spotify.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | Optional short label to recognise the bookmark later | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses the key behavioral facts: it writes a local sidecar JSON file under the backup dir and never touches Spotify. This tells the agent the operation is local, state-persisting, and safe relative to Spotify, which is exactly the behavioral context needed.
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 focused sentences, front-loaded with the action and end state, with no filler. The local-sidecar clarification earns its place because it affects the agent's expectations.
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 low-complexity tool with two optional documented parameters and a clear pairing with resume_playback_position, everything needed to select and call it is present. No output schema exists, but the description makes the operation and its persistence location sufficiently clear.
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 both parameters are already documented. The description adds no parameter-specific detail beyond the schema, making the baseline 3 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?
States a specific verb ('Bookmark') and resource ('current track, playback position and device to a local JSON file'), and names the paired resume_playback_position tool. This clearly distinguishes capture_playback_position from playback-resume and bookmark-management siblings.
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 intended workflow: bookmark now, resume later with resume_playback_position. It does not explicitly list exclusion criteria or compare against alternatives like save_playback_state, checkpoint_playback, or list_playback_bookmarks, so the guidance is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
catalog_batch_lookupA
Resolve a mixed list of Spotify URIs (tracks/albums/artists/shows/episodes/audiobooks/chapters) in partitioned batch calls. Quota: ๐ก 1 per distinct type + chunking.
| Name | Required | Description | Default |
|---|---|---|---|
| uris | Yes | Spotify URIs (spotify:track:..., spotify:album:..., etc.) 1โ50 mixed | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses meaningful behavioral traits: calls are partitioned by type and subject to a distinct quota per type with chunking. This is valuable context beyond the schema and annotations, explaining how the tool operates under the hood.
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 deliver the essential purpose and quota information without any fluff. The purpose is front-loaded, and the quota detail 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 moderate-complexity batch lookup tool with no annotations and no output schema, the description covers the core behavior and quota implications. It could mention what 'resolve' returns, but the response_format parameter partially covers that expectation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage, describing uris, max_results, and response_format. The description adds no parameter-specific details, which is acceptable given the schema carries the weight.
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 ('Resolve') and the resource ('a mixed list of Spotify URIs') with explicit type coverage. This distinguishes it from the homogeneous get_several_* sibling tools, which handle single types per call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the primary use case: when the input URIs span multiple Spotify types and batching is needed. It does not explicitly name alternatives like get_several_tracks for single-type lookups, but the 'mixed list' wording provides clear contextual guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
category_resolverA
Free-text genre/vibe โ best-matching browse category ID via local fuzzy match over GET /browse/categories results. REGISTRATION GATE: /browse/categories is on the #329 app-registration gated surface โ on fresh registrations this short-circuits with a clear disclosure instead of a raw 403. Quota: ๐ก 1โ4 API calls (paged category walk).
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Free-text genre/vibe, e.g. "chill electronic" | |
| locale | No | Locale, e.g. en_US | |
| country | No | ISO 3166-1 alpha-2 country code, e.g. 'US' | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden, and it does well by disclosing the underlying data source, the local fuzzy-match mechanism, a registration-gate short-circuit behavior, and the 1-4 API call quota. It does not explicitly confirm read-only semantics or describe no-match behavior, but the resolver framing and disclosed mechanics give substantial transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the primary purpose, followed by two terse but valuable operational caveats. Each sentence earns its place, though the registration-gate and quota fragments are dense and slightly telegraphic.
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 gives the essential return concept (best-matching category ID), the data source, a failure-mode disclosure, and cost guidance. It does not specify response_format behavior or no-match handling, but the schema covers parameter choices and the resolver's purpose is straightforward enough for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds mild semantic context by tying the 'text' parameter to free-text genre/vibe, but it does not add meaningful detail about locale, country, or response_format beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific mapping arrow: free-text genre/vibe to best-matching browse category ID, via local fuzzy match over GET /browse/categories results. This clearly distinguishes it from sibling tools like get_categories or get_category, which retrieve categories directly rather than resolve fuzzy free-text.
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 purpose statement effectively implies when to use the tool: when the agent has free-text genre/vibe input and needs a browse category ID. It does not explicitly name alternative tools or exclusions, but the core use case is clear enough to prevent obvious confusion with category listing tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chapter_bookmarksA
Named chapter+position bookmarks per audiobook, stored in the local sidecar (jump later via jump_to_chapter). save/list/delete. Zero API calls โ pure sidecar.
| Name | Required | Description | Default |
|---|---|---|---|
| op | No | list | |
| label | No | Bookmark name (required for save) | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| book_uri | No | Audiobook URI, e.g. spotify:audiobook:abc (required for save/delete) | |
| position_ms | No | Position in the book, ms. Default 0. | |
| chapter_name | No | Optional chapter name for context | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the mention 'pure sidecar' and 'zero API calls' is valuable behavioral disclosure. The description also discloses persistence location ('local sidecar') and the save/list/delete operations, which behave like CRUD with no external effects. It does not mention dry_run behavior, response format, or whether delete requires an existing bookmark, but those are partially covered by the schema. No contradiction with annotations (none exist).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences, each earning its place. The first sentence states scope and storage, the second lists operations and the consumer tool, and the third states the 'zero API calls, pure sidecar' behavior. It is front-loaded with the purpose rather than boilerplate. There is no filler, repetition of the title, or restatement of the 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?
The tool has 7 parameters but 0 required, an op enum, a dry_run flag, and no output schema. The description covers the key context an agent needs: the tool is local-only, has three operations, and is designed for later jumping. It does not explicitly state return shapes or how errors surface (e.g., deleting a nonexistent bookmark), but those are not common in tool descriptions and the schema already documents the parameters. A stronger description might note whether 'save' overwrites an existing label, but the overall context 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 high at 86%, so the baseline is 3. The description adds meaningful operational context: it explains that the operation is 'pure sidecar' and that save/list/delete are the supported ops (matching op enum), and it names the related jump_to_chapter tool that consumes stored bookmarks. It also clarifies which parameters are required per operation contextually (label for save, book_uri for save/delete) beyond just the schema's minimal notes. It does not add meaningful detail about position_ms or chapter_name beyond what the schema already states.
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 clear verb+resource combination: 'Named chapter+position bookmarks per audiobook, stored in the local sidecar' and names the three operations (save/list/delete). It explicitly differentiates from sibling jump_to_chapter by referencing it as the later consumption point. The description could slightly benefit from saying it is a local-storage utility rather than a Spotify API endpoint, but the next sentence 'Zero API calls โ pure sidecar' makes that unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it ('bookmarks per audiobook', 'jump later via jump_to_chapter') and clearly states it is a local sidecar operation, which helps distinguish it from API-backed siblings like get_audiobook or get_chapter. However, it does not explicitly say when NOT to use it or name alternative bookmark tools like list_playback_bookmarks, episode_bookmark, or save_scene. With no annotations covering usage, some exclusion guidance would have earned a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_artist_releasesA
Check watched artists for new releases since last check (or within lookback_days). WARNING: N artists in watchlist = N API requests. Use max_artists to budget and dry_run to preview cost.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Albums per artist to fetch, 1โ50. Default: 10 | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| max_artists | No | Per-call budget for artist lookups. Default: 25 (or SPOTIFY_MCP_FRESHNESS_BUDGET). Truncates to max_artists and reports watchlist_size / artists_scanned / truncated. | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| lookback_days | No | Only consider releases from the last N days | |
| watchlist_name | No | Watchlist name. Default: "default" | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With zero annotations the description carries the full behavioral burden. The cost disclosure ('N artists in watchlist = N API requests') and the dry_run preview option are genuinely valuable behavioral traits. However, it never states whether the tool is read-only or whether calling it advances the 'last check' cursor โ a stateful side effect the agent needs to know before invoking.
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 filler. The purpose is front-loaded and the critical cost warning earns its place as the second sentence. Every word 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?
The schema is rich (7 fully documented optional parameters) and the description covers the core purpose plus the main operational hazard. Remaining gaps: no output schema and no description of return values, and no mention of whether the check mutates watchlist state โ both matter for an agent deciding to invoke this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds limited cross-parameter guidance by framing max_artists as a budget control and dry_run as a cost preview, but this largely restates what the schema already documents for those parameters.
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 first sentence states a specific verb (check), resource (watched artists), and scope (new releases since last check or within lookback_days). This is distinctive among siblings โ watchlist-based checking differs from saved-artist, top-artist, and followed-artist tools โ though it never explicitly names a sibling to contrast against.
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 'since last check' vs 'lookback_days' distinction gives clear context for two invocation modes, and the cost warning with max_artists/dry_run advice is actionable. However, no alternative tools are named and no when-not-to-use conditions are stated, so the agent must infer when to pick this over similar siblings like artist_release_digest or new_music_from_saved_artists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_episode_savedA
Check which episodes are already saved in your library (GET /me/episodes/contains) โ batch yes/no, no guessing. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| episode_ids | Yes | Episode IDs/URIs to check (1โ50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and discloses key behaviors: it is read-only, returns batch yes/no answers, and does not guess but actually queries the library. The explicit mention of the GET endpoint adds further transparency about the underlying operation, though it omits details like error handling or auth requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact sentence that front-loads the core purpose ('Check which episodes are already saved in your library'), then adds the endpoint and key behavior details ('batch yes/no, no guessing. Read-only.'). Every word earns its place, and there is no 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 tool with two parameters and no output schema, the description adequately explains the return value ('batch yes/no') and the core behavior. It does not describe response details for the 'detailed' or 'json' response_format values, but those are documented in the parameter schema, so the overall picture is complete enough 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?
The input schema already fully describes both parameters (episode_ids and response_format) with details about accepted formats and defaults, so the description adds little beyond what the schema provides. The 'batch yes/no' wording hints at the per-episode result but does not elaborate on parameter behaviors.
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 checks which episodes are saved in the user's library, with a specific verb ('Check'), resource ('episodes saved in your library'), and a precise behavior ('batch yes/no'). It also names the API endpoint (GET /me/episodes/contains), distinguishing it from generic library-checking or episode-listing siblings like get_saved_episodes or check_saved_items.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Check which episodes are already saved in your library' provides clear context for when to use this tool, and 'batch yes/no' signals it is for verifying a set of episodes rather than listing all saved ones. It does not explicitly name alternatives or exclusions, but the context is unambiguous enough for an agent to select it over related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_following_artistsA
Check if the user follows specific artists โ this tests FOLLOW state, not library-saved state (for that use check_in_library). Rows carry {id, uri, follows}; returns a boolean per ID. Max 50.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Spotify artist IDs to check | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the burden. It discloses the row shape ({id, uri, follows}), the boolean-per-ID return behavior, and the 50-item maximum. It does not mention error behavior or auth requirements, but for a simple read-only check the disclosed behavior is substantive.
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 no filler. The core purpose is front-loaded, the distinguishing contrast with check_in_library is immediate, and the return format and limit are stated efficiently.
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 check tool with no output schema, the description adequately covers input scope, output shape, and the limit. It could add a note on invalid IDs or the effect of response_format, but the schema already documents response_format and the essential caller needs are met.
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 ids, max_results, and response_format. The description adds a useful clarification that ids are capped at 50 and that the result is boolean per ID, but it does not need to repeat schema-level parameter details.
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: 'Check if the user follows specific artists.' It also explicitly distinguishes this from library-saved state by naming the sibling alternative check_in_library, making the tool's purpose unambiguous relative to similar 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 explicitly says this tests FOLLOW state, not library-saved state, and points to check_in_library for the library case. This gives clear when-to-use and when-not-to-use guidance, plus a hard cap of 50 IDs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_in_libraryA
Preferred. Accepts the widest URI mix (track, album, episode, show, audiobook, artist, user, playlist) in one request. Check whether items are saved in or followed by the user โ this tests LIBRARY-SAVED/FOLLOWED state, distinct from check_following_artists which only tests artist FOLLOW state. Returns a boolean per URI via Spotify's unified endpoint. Max 40. To follow/unfollow artists use follow_artists/unfollow_artists.
| Name | Required | Description | Default |
|---|---|---|---|
| uris | Yes | Spotify URIs to check (accepts tracks, albums, episodes, shows, audiobooks, artists, users, playlists) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the behavioral disclosure burden. It discloses the response shape ('Returns a boolean per URI'), the endpoint type ('Spotify's unified endpoint'), the accepted URI mix, and the batch limit (Max 40). It implies read-only behavior via 'Check', though it does not explicitly say it has no side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the most important guidance ('Preferred'), followed by scope, behavioral distinction, output, and limit. Every sentence contributes either selection guidance or call semantics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and the schema covers all parameters, while the description covers output shape and the main sibling distinction. It could add batching/pagination guidance for more than 40 URIs, but nothing essential is missing 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%, so the schema already documents uris, max_results, and response_format. The description adds useful context around accepted URI kinds and the 40-item cap, but does not add meaningful semantics beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Check whether items are saved in or followed by the user' and clarifies it tests 'LIBRARY-SAVED/FOLLOWED state'. It explicitly distinguishes itself from check_following_artists, so an agent can tell the tools apart without opening schemas.
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?
Description is explicit about when to prefer this tool ('Preferred', 'widest URI mix ... in one request'), names the alternative it should not be confused with (check_following_artists), and routes mutation intent to follow_artists/unfollow_artists. This gives clear selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_playlist_followingA
Check if you follow 1โ50 playlists (fans out one call per playlist, concurrency 5). Quota: ๐ข 1โ50 GETs.
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_ids | Yes | ||
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and discloses meaningful behavioral traits: fan-out ('fans out one call per playlist'), concurrency limit ('concurrency 5'), and a concrete quota estimate ('๐ข 1โ50 GETs'). This tells an agent the operation has multiplicative API cost and bounded concurrency โ genuinely useful context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler: purpose and boundary in sentence one, cost/concurrency behavior in sentence two. Both sentences earn their place and the most decision-relevant facts are 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 fan-out operation with no annotations and no output schema, the description covers the critical operational context: scope, fan-out count, concurrency, and quota impact. It does no explicit read-only label or return-shape hints, but the return of a per-playlist following check is stronglyinferable and the high-stakes cost behavior is fully disclosed.
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 67% but the required parameter playlist_ids is undocumented in the schema. The description compensates by mapping '1โ50 playlists' directly to the playlist_ids array bounds (minItems 1, maxItems 50), clarifying that each array entry is one playlist and drives one GET. This adds real meaning to the one parameter that otherwise had none.
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 ('Check if you follow') with a precise scope boundary (1โ50 playlists). The playlist focus distinguishes it from siblings like check_following_artists and get_playlist_followers without needing to open either 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?
No guidance on when to use this tool versus alternatives such as check_following_artists, get_playlist_followers, or check_saved_items. The description implies a batch-following check but never states exclusions or conditions that would route an agent here over a sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
checkpoint_playbackA
One-shot timestamped auto-named playback checkpoint (cp-2026-08-27T21:05 style) โ saves you naming slots for save_playback_state. Quota: ๐ข 1 read + local sidecar write.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Optional note to attach | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the disclosure burden. It does well by surfacing one-shot behavior, auto-naming, the quota cost ('1 read + local sidecar write'), and local persistence. It does not explicitly mention prerequisites like active playback or how the checkpoint can later be restored, but the main behavioral traits and side effects are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two compact sentences with no filler. The core functionality and naming convention are front-loaded, and the quota/side-effect note earns its place by giving operational context.
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 tool with zero required parameters and no output schema, the description covers the essential invocation context: what it does, naming style, quota impact, and why it differs from save_playback_state. It could mention prerequisites or downstream restoration options, but those are not required 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%, and both parameters already have meaningful descriptions in the schema. The tool description adds no parameter-specific detail, but with the schema fully covering note and response_format, this is acceptable at the 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 clearly identifies the tool as one-shot timestamped auto-named playback checkpoint and contrasts it with save_playback_state by saying it saves naming slots. The cp-2026-08-27T21:05 style example makes the generated naming convention concrete, leaving little ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly names save_playback_state as the alternative and gives a clear reason to choose checkpoint_playback: you avoid naming slots. However, it does not state when not to use it, nor does it mention related restore/list siblings, so the guidance is good but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_saved_itemsA
Legacy per-type variant (kept for grandfathered app credentials that lack unified /me/library access). Prefer check_in_library. Check whether items are saved in the user's library. Returns a boolean per URI. Accepts track, album, show, episode, and audiobook URIs. Max 50.
| Name | Required | Description | Default |
|---|---|---|---|
| uris | Yes | Spotify URIs to check (accepts tracks, albums, shows, episodes, audiobooks) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the transparency burden. It discloses the return shape ('boolean per URI'), accepted URI types, the 50-item cap, and the legacy/scoped auth context. It does not mention error behavior or ordering, but for a simple check operation the key behavioral traits are covered.
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 compact and information-dense. Every sentence serves a purpose: legacy context, alternative routing, core action, output shape, accepted inputs, and the limit. It is front-loaded with the most decision-relevant fact (prefer check_in_library).
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 library-check tool, the description covers the core purpose, when to use it, what URIs to pass, the maximum batch size, and the return shape. Since there is no output schema, the 'boolean per URI' note is valuable. Minor gaps like handling of invalid URIs or output ordering are not critical for this tool's simplicity.
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 the uris, max_results, and response_format parameters. The description mostly repeats what the schema says (URI types and max 50) without adding meaningful new parameter semantics. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Check whether items are saved in the user's library' and specifies the accepted URI types and output shape ('Returns a boolean per URI'). It also distinguishes itself from the preferred sibling by labeling it a 'Legacy per-type variant' and naming check_in_library, so an agent can tell it apart without opening schemas.
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 explicit when-to-use guidance: it is for 'grandfathered app credentials that lack unified /me/library access', and explicitly says 'Prefer check_in_library'. This tells the agent both when to choose this tool and when to route to an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
classify_spotify_urisA
Classify each reference in a batch: reference form, entity kind, canonical-form verdict, and per-row issues โ one local pass, no network calls.
| Name | Required | Description | Default |
|---|---|---|---|
| uris | Yes | References to classify |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden and does useful work: it promises a purely local pass with no network calls and indicates per-row issue reporting. It does not detail output order, non-destructiveness, or failure behavior, but for a batch classifier these are not critical omissions.
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 dense sentence front-loads the action and output categories, with the local/no-network qualifier appended via an em dash. Every clause earns its place with no 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 one-parameter, schema-covered batch utility with no output schema, the description covers what the tool does, what it returns conceptually, and a key behavioral constraint (no network). The main gap is not naming the alternative URI helper tools that perform overlapping classification, but this is not required for calling it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds context that each array element is a 'reference' and that output is per row, but it does not need to elaborate on the single `uris` parameter because the schema already documents it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action ('Classify each reference in a batch') and enumerates the outputs (reference form, entity kind, canonical-form verdict, per-row issues), making the tool's role distinct from parse/validate/canonicalize siblings. The 'one local pass, no network calls' clause further disambiguates it from network-backed catalog utilities.
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 'batch' and 'one local pass, no network calls' phrasing gives clear context for when to choose this tool over network-backed lookups, and the output list implies a classification/validation purpose. It does not explicitly name alternative URI utilities or state when not to use them, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clean_all_playlistsA
Scan every playlist in your library for duplicate items (repeated URIs, and on opt-in same-song copies under different URIs). Reports per-playlist findings by default; pass apply=true to remove them (keeps the first occurrence of each group). Bulk removals ask for one confirmation before anything is deleted.
| Name | Required | Description | Default |
|---|---|---|---|
| apply | No | Deprecated alias for dry_run โ prefer dry_run. false (default): report only. true: execute the cleanup across all playlists with duplicates. If both are given, dry_run wins. | |
| dry_run | No | Preview only โ when true, nothing is changed; when false via dry_run=false or apply=true, executes the cleanup | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
| include_relinked | No | Also count/collapse same-song entries under different URIs (relinks/remasters). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses the destructive nature of apply=true, the keep-first-occurrence behavior, and the one-time confirmation prompt before deletions. This is strong safety disclosure for a mutation tool, though it stops short of describing response format or impact details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two focused sentences cover function, default behavior, destructive mode, and confirmation. The key distinction (report vs. remove) is front-loaded, and no words are 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?
For a destructive multi-playlist mutation tool, the description covers the critical context: scope, default safe behavior, removal trigger, duplicate-group policy, and confirmation. The absence of an output schema means report structure is not fully specified, but 'per-playlist findings' plus response_format parameters give an agent enough to proceed.
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 schema already documents all five parameters. The description adds useful interpretive context around apply/dry_run and include_relinked, but this is supplementary rather than necessary because the schema carries the semantic weight.
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 ('Scan') and resource ('every playlist in your library') and clearly distinguishes the all-library scope from per-playlist duplicate tools. It also explains both default reporting behavior and the opt-in removal mode.
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 clearly implies when to use this tool: for library-wide duplicate detection and cleanup. It does not explicitly name sibling alternatives such as find_duplicates_in_playlist or find_duplicate_tracks_across_playlists, but the 'every playlist' framing provides clear scope context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clone_playlist_coverA
Copy cover image from source playlist to target. Quota: ๐ข GET images + PUT images (plus image fetch).
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| image_index | No | ||
| source_playlist_id | Yes | ||
| target_playlist_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It usefully discloses underlying operations and cost ('GET images + PUT images (plus image fetch)'), but it does not mention overwriting the target cover, behavior when the source has no cover, auth requirements, 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?
Two sentences with no filler: the first states the core action, the second provides a compact quota/operation note. Every part earns its place and the main purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter tool with no annotations and no output schema, the description gives the core mechanic and quota context, but omits important operational details such as overwrite semantics, dry_run result behavior, and failure cases. It is acceptable for simple invocation but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25% (only dry_run is described). The description does not clarify image_index, which is ambiguous, and merely repeats source/target by name without adding format or constraints. With low schema coverage, the description needed to compensate but does not.
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 action and resource: 'Copy cover image from source playlist to target.' This clearly distinguishes it from sibling tools like get_playlist_cover and upload_playlist_cover by explicitly identifying both a source and a target.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used when you want to transfer a cover between two playlists, but it does not name alternatives or state when-not-to-use conditions. The quota note hints at cost but does not guide selection among related tools like copy_playlist or combining get+upload.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
collab_density_reportC
Measure collaboration density: how many of your saved tracks credit 2+ artists, with the top collaborations ranked. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| scan_cap | No | Max saved items to walk per paginated source (default: SPOTIFY_MCP_FETCH_ALL_CAP) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. The 'Read-only' tag is a useful safety signal, but it doesn't disclose potential performance implications of scanning many saved tracks, or any side effects beyond being read-only. No description of the output format beyond ranking.
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, concise sentence that immediately conveys the core function. The key information (collaboration density, ranking) is front-loaded, and there is no extraneous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description provides a general sense of what is returned (ranked collaborations) but doesn't mention response format options or that it may operate on a large library. It's minimally complete for a report-like tool, but lacks detail on how results are presented.
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%, with all three parameters (scan_cap, max_results, response_format) having descriptions in the schema. The tool description adds no additional parameter semantics, so 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?
States a specific purpose: measuring collaboration density by counting saved tracks with 2+ artists and ranking top collaborations. The verb 'measure' and resource 'saved tracks' are clear, though it doesn't explicitly differentiate from sibling tools like featuring_density_report or artist_collab_network.
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 no guidance on when to use this tool versus similar analysis tools. No mention of alternatives, exclusions, or specific contexts where this is preferred over featuring_density_report or artist_collab_network.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
collab_mix_from_followedA
Build a collaborative-style mix playlist from your FOLLOWED artists' recent releases: walks /me/following (cursor-paged, capped by artists_cap), fans out one albums GET per artist plus one album GET per picked album (concurrency 5 โ disclosed fan-out), takes โคper_artist newest tracks per artist, then round-robin-merges them into a new playlist. dry_run=true (default) previews the mix. Quota: ๐ด ~artists_capร(1+per_artist) GETs + create/adds.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Only albums released in the last N days (default 30) | |
| name | No | Playlist name. Default: "Collab Mix โ <today>" | |
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Default true โ pass false to commit. | |
| per_artist | No | Max tracks per artist (1โ5, default 2) | |
| artists_cap | No | Max followed artists to include (default 10) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It openly discloses the request fan-out pattern, concurrency 5, artists_cap capping, per-artist track limits, round-robin merge strategy, dry_run default, and a quota formula. This is far more transparent than most tool descriptions.
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 dense but every clause carries necessary operational information: purpose, pipeline steps, concurrency, dry-run default, and quota. The main purpose is front-loaded and no words are 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?
Given the tool's complexity and the absence of an output schema, the description explains the algorithm and the dry-run plan concept well, and response_format partially covers return style. The main gap is that commit mode's actual return contract (e.g., created playlist URI/ID) is not stated, and auth/error behavior is absent.
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% with detailed parameter descriptions, so baseline is 3. The description adds operational meaning by showing how artists_cap and per_artist drive the algorithm and the resulting GET quota, and by explaining how dry_run controls whether any mutation happens.
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 verb and resource: 'Build a collaborative-style mix playlist from your FOLLOWED artists' recent releases.' It then details the full pipeline (followed-artists walk, album fan-out, round-robin merge), making the tool's unique role unmistakable even within a large sibling set.
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 context is implied rather than stated: an agent can infer it is for turning followed artists' recent releases into a playlist, but no alternative tools are named and no explicit 'use this when / not when' guidance is given. In a long sibling list with many music-generation tools, explicit routing would strengthen this dimension.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_devicesA
List every available Spotify device ranked by active state, then device type (Computer > Smartphone > Tablet > TV > Speaker), then volume. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It explicitly discloses that the tool is read-only, which is critical safety information. It also describes output behavior (listing every available device and sorting by active state, type, and volume). It does not mention authorization or failure behavior, but for a simple read-only listing tool this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence that front-loads the core purpose and ordering rules, then appends the safety note. Every word adds value, and the structure is 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?
For a tool with one optional parameter and no output schema, the description provides enough information to invoke it correctly: it lists the resource, scope, ranking criteria, and safety profile. A slightly more explicit note about how this differs from get_devices would make it fully complete, but it is not a significant gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, response_format, already has a full schema description covering the three enum options. Since schema coverage is 100%, the description does not need to add parameter details. The baseline of 3 applies here.
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 ('List'), the resource ('every available Spotify device'), and the exact ordering logic (active state, device type, volume). This distinguishes it from raw device-listing siblings like get_devices by specifying a comparison-oriented ranked output.
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 makes the use case clear: retrieve and compare all available devices in a defined priority order. It does not explicitly name alternative tools or state when not to use it, but the ranking behavior and 'read-only' note provide sufficient context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_playlist_coversA
Compare two playlists covers: URL equality, dimensions. Quota: ๐ข 2 GETs.
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id_a | Yes | ||
| playlist_id_b | Yes | ||
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden. The quota disclosure (' 2 GETs.') is a genuinely useful behavioral signal โ it tells the agent the call is read-only and its cost. However, the description doesn't disclose the return shape, error behavior, or edge cases (e.g., playlists without covers), which matters given there is no annotations to fall back on.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short segments with zero filler: purpose is front-loaded ('Compare two playlists covers: URL equality, dimensions'), followed by a compact quota note. Every word earns its place, and the quota emoji conveys cost efficiently.
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 tool with no annotations and no output schema, the description states the core comparison inputs and criteria but not what the result looks like. The response_format schema description partially compensates by indicating prose vs raw JSON output. Still, an agent can't know whether the tool returns a boolean, a report, or per-cover details, which is a real gap for a comparison 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 coverage is 50%: the required params playlist_id_a and playlist_id_b have no schema descriptions, but the description's 'Compare two playlists covers' implicitly maps these IDs to the two playlists being compared, which adds meaning. max_results and response_format already have schema descriptions, so the description needn't re-explain them. The description compensates just enough for the undocumented required params.
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 ('Compare'), a specific resource ('two playlists covers'), and the exact comparison scope ('URL equality, dimensions'). This makes the tool's purpose unambiguous and distinguishes it from siblings like get_playlist_cover (single cover retrieval) and clone_playlist_cover (copying a cover), since this one is explicitly a comparison.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage is implied by the name and the phrase 'Compare two playlists covers' โ use this when you need to compare cover URL equality or dimensions between two playlists. However, there's no explicit guidance about when NOT to use it or mention of alternatives like get_playlist_cover or clone_playlist_cover, so the agent must infer the boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
continue_lastA
Resume the most recent checkpoint without knowing its name (sidecar lookup by saved_at). Pairs with checkpoint_playback. Quota: ๐ก 2-3 writes (play + shuffle/repeat best-effort).
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| device_id | No | Target device id | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it delivers meaningful disclosure: the quota note ('๐ก 2-3 writes') reveals this is a mutation operation, that it is best-effort, and that it may perform play plus shuffle/repeat. This goes well beyond the generic schema, though it does not cover failure cases like a missing checkpoint.
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 with zero waste: the action is front-loaded, the sibling relation is one clause, and the quota constraint is one compact line. Every sentence carries distinct information an agent needs before invoking.
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 low-complexity tool (3 optional params, no required params, no output schema, no nested objects), the description covers the core behavior, the quota cost, and the sibling relationship. Minor gaps remain โ what happens when no checkpoint exists and what the response contains โ but the response_format param partially mitigates the latter.
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 baseline is 3 and the schema fully documents dry_run, device_id, and response_format. The description adds only indirect value by explaining why no checkpoint-name parameter exists ('without knowing its name'), which is meta-context rather than parameter-level semantics.
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 (Resume) + resource (most recent checkpoint) and adds the key differentiator 'without knowing its name.' The sidecar lookup mechanism is specified, and naming checkpoint_playback as its pair immediately distinguishes it from that sibling without needing to inspect either 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?
The phrase 'without knowing its name' clearly frames the selection criterion for this tool versus name-based alternatives like checkpoint_playback, and 'Pairs with checkpoint_playback' gives the collaborator context. However, it stops short of an explicit when-to-use/when-not-to-use statement, leaving the exclusion logic to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
copy_playlistB
Duplicate an existing playlist into a new playlist, preserving track order. Creates the new playlist then adds tracks in batches of 100. Dry-run reports what would be created.
| Name | Required | Description | Default |
|---|---|---|---|
| public | No | Public flag for the new playlist. Default: false | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| new_name | Yes | Name for the new playlist | |
| description | No | Description for the new playlist (defaults to source description) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| collaborative | No | Collaborative flag. Default: false | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
| source_playlist_id | Yes | Source playlist ID or spotify:playlist: URI |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the safety burden, and it does disclose useful behavior: order preservation, batching in groups of 100, and a dry-run mode that only reports. However, it does not state whether the source playlist is modified, what happens on partial failure, or any permission/ownership 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?
Three short sentences with the main purpose front-loaded, followed by the two most decision-relevant behaviors (batching and dry-run). No filler or repeated schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema or annotations exist, and the description does not state what the tool returns, how max_results applies to a copy operation, or what limits/errors occur during the batched copy. This is insufficient context for a mutating tool with eight parameters.
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 schema already documents all eight parameters. The description adds a little context for dry_run and the batching behavior, but it does not clarify ambiguous parameters such as max_results in the copy flow; this lands at the 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 names a specific operation ('Duplicate an existing playlist into a new playlist') with the resource and result clearly stated, and adds the concrete constraint 'preserving track order.' It does not explicitly differentiate itself from sibling clone/duplicate tools such as playlist_clone_live, so it stops 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?
No when-to-use or when-not-to-use guidance is given, and no alternatives are mentioned despite many adjacent siblings (create_playlist, add_to_playlist, playlist_clone_live, import_playlist). The only implied usage is the purpose itself; there is no guidance to help an agent choose between this and similar tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
count_uris_by_typeA
Count how many references in a batch belong to each entity kind (track, album, artist, โฆ) โ a local tally, no network calls.
| Name | Required | Description | Default |
|---|---|---|---|
| uris | Yes | References to tally | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses an important behavior: this is a local tally with no network calls. However, it does not explain error handling for invalid URIs, whether counts are returned as a map, or how unknown entity kinds are treated.
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, front-loaded sentence that waste nothing. It states the operation, scope, and distinguishing behavioral trait ('no network calls') in a compact, readable way.
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 local counting tool, the description covers the core purpose and key behavior. It does not describe the exact return shape, and there is no output schema, but the phrase 'count how many โฆ belong to each entity kind' adequately conveys the expected result. Minor gaps around invalid input handling keep 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 input schema fully documents both parameters, including the response_format enum. The tool description adds no parameter-level detail beyond what the schema already provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action ('count'), a clear resource ('references in a batch'), and the result ('belong to each entity kind (track, album, artist, โฆ)'). It also adds the scope 'a local tally, no network calls', which helps differentiate it from network-backed lookup tools even without naming a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is a clear contextual hint that this is for local batch tallying with no network calls, but there are no explicit when/when-not conditions or alternative tools. An agent must infer when to prefer this over similar tools like classify_spotify_uris or uri_kind_stats.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_playlistA
Create a new playlist for the current user. Set dry_run=true to preview without creating.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Playlist name | |
| public | No | Whether the playlist is public. Default: false | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| description | No | Playlist description | |
| collaborative | No | Whether the playlist is collaborative. Default: false |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description bears the full behavioral disclosure burden. It does disclose that the operation creates (a mutation), targets the current user's account, and offers a dry_run preview that avoids side effects โ genuinely useful safety context. However, it doesn't address auth requirements, reversibility, rate limits, or what the operation returns, which is meaningful for a write operation with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste. The core purpose is front-loaded in the first sentence, and the second sentence earns its place by flagging the dry_run safety valve. No redundant phrasing, no restatement of schema defaults.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple create tool the description covers the purpose and the safety valve adequately, and the schema documents all parameters. The notable gap is the return value โ with no output schema, an agent doesn't know the tool returns the created playlist (presumably with ID/URI), which matters for chaining into add_to_playlist or update_playlist. This is a real but non-fatal omission.
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 five parameters (name, public, dry_run, description, collaborative) with default values. The description adds no parameter syntax or format detail beyond the schema; it only re-mentions dry_run, which the schema already explains. This lands at the baseline 3 for high-coverage schemas.
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 ('Create'), a resource ('a new playlist'), and a scope ('for the current user'). This clearly separates it from update_playlist (modify), copy_playlist (duplicate), and import_playlist (import existing), all of which appear in the sibling list. The added dry_run sentence further sharpens what the tool does by revealing a preview mode.
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: the description makes clear this is the tool for creating a new playlist, but it never explicitly contrasts with near-neighbors like create_smart_playlist, copy_playlist, or playlist_to_library. The dry_run=true hint does give practical usage context for previewing before committing, but no when-not-to-use guidance is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_smart_playlistA
Create a playlist from rules over your own listening data: top tracks (by time range), recently played, or saved tracks โ with optional artist-name filtering and a one-track-per-artist toggle. When source=saved_tracks the pool is the newest N saved tracks (N=scan_cap, default fetchAllCap=500) and truncation is reported. No deprecated recommendations endpoints involved. dry_run previews the exact track list without creating anything.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Playlist name | |
| limit | No | How many tracks the playlist should hold (after filters). Default 30. | |
| public | No | Whether the playlist is public | |
| source | No | Where candidates come from: your top tracks by time_range, your recently played history, or your saved (liked) tracks. | top_tracks |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| scan_cap | No | How many saved tracks to scan when source=saved_tracks; default SPOTIFY_MCP_FETCH_ALL_CAP (500). Reports truncation when hit. | |
| time_range | No | ~4 weeks / ~6 months / all time. Default: medium_term | |
| description | No | Playlist description | |
| artist_filter | No | Only include tracks whose artist name contains any of these substrings (case-insensitive), e.g. ["Radiohead", "Miles Davis"]. | |
| unique_artists | No | Keep at most one track per primary artist. Default false. | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden and it does this well: it discloses that dry_run 'previews the exact track list without creating anything,' that saved_tracks scans the newest N tracks with truncation reported, and that deprecated recommendations endpoints are not involved. It does not mention required authorization scopes or what the non-dry-run response shape is, which keeps it from being fully exhaustive.
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 four tight sentences with the core capability front-loaded and supporting details following in order of relevance. Every sentence earns its place: rule sources, saved_tracks pool semantics, the deprecated-endpoints clarification, and dry_run behavior. No filler or repetition of schema descriptions.
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 an 11-parameter tool with no output schema, the description covers the critical interactions and side-effect caveats, especially scan_cap + saved_tracks truncation and dry_run behavior. It relies appropriately on the dense input schema for individual parameter descriptions, but it does not describe the normal (non-dry-run) return format or any required Spotify scopes, leaving a small completeness gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaningful cross-parameter semantics beyond the schema: scan_cap only applies to source=saved_tracks, the pool is the newest N saved tracks, truncation is reported, and dry_run changes whether anything is created. It also relates artist_filter and unique_artists to the filtering behavior described in prose.
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 a specific verb and resource: 'Create a playlist from rules over your own listening data' and immediately enumerates the concrete source modes (top tracks, recently played, saved tracks). It distinguishes this from the generic create_playlist sibling by emphasizing rule-based construction from personal listening data. The 'No deprecated recommendations endpoints involved' note further disambiguates it from recommendation-style 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 gives a clear use case: use this when building a playlist from your own listening data with optional filtering, and use dry_run for preview-only. It does not explicitly name sibling alternatives like create_playlist or save_smart_playlist_rule or state when not to use them, so it stops short of a 5. The context is otherwise clear enough to route an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
daily_pickA
Deterministic "banger of the day": date-seeded pick from recently-played highlights (most-played pool + seeded tiebreak) โ same date, same pick. Quota: ๐ข 1-2 reads, local compute.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Seed date (default today, YYYY-MM-DD) | |
| pool_size | No | Highlight pool size to pick from (default 10) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden and covers key traits: it explicitly declares read-only behavior ('1-2 reads'), low cost ('local compute'), and determinism โ the non-obvious behavior that repeated calls with the same date return the same result. It does not detail failure modes (e.g., empty pool for a date) but discloses the most decision-relevant traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the core concept and determinism trait are front-loaded, mechanics are compressed into parentheticals, and the quota note is a standalone compact signal. 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?
For a 3-optional-parameter read tool with no output schema, the description covers the algorithm (seed, pool, tiebreak), the determinism contract, and cost. The main gap is an explicit statement of the return value shape, though the response_format enum partially compensates by naming the output styles.
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 schema already documents all three parameters. The description adds modest semantic grounding โ 'date-seeded' ties to the date parameter and 'most-played pool' clarifies what pool_size sizes โ but does not go beyond the schema's own descriptions, so the 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?
States a specific operation โ a date-seeded pick from recently-played highlights โ and leads with 'Deterministic', explicitly distinguishing it from random-selection siblings like surprise_me and saved_tracks_roulette. The 'same date, same pick' gloss removes any ambiguity about its core behavior.
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 context through 'Deterministic' and 'same date, same pick' โ use this when a stable, repeatable daily pick is wanted โ and the quota note signals low cost. However, it never names alternative tools (e.g., surprise_me for a non-deterministic pick) nor states when not to use it, leaving routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dead_library_finderA
Find saved tracks that never appear in your recent history AND sit in none of your playlists โ unsave candidates. Local compute over /me/tracks + playlists + history. dry_run defaults to true; disabling it actually removes the candidates.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Plan only (default). Set false to remove the candidates from your library. | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| min_age_days | No | Only consider tracks saved at least this long ago. Default 30. | |
| max_playlists | No | Budget for playlist scans (each scan pages that playlist). Default 50. | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
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 explicitly discloses the destructive behavior when dry_run is disabled ('actually removes the candidates'), the default safety of dry_run, and the local compute nature. This goes beyond the schema by explaining the computation scope and the actual effect, which is critical for a mutation-capable 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 two sentences, front-loaded with the core purpose, then adds the critical dry_run behavior. Every sentence earns its place without fluff. It is efficiently structured for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 5 optional parameters and no output schema. The description explains the criteria, the data sources, and the safety mechanism. It does not explicitly state the return format, but the response_format parameter and the clear 'find candidates' intent make it sufficient. The local compute note adds useful context for agents concerned about API costs.
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% for all 5 parameters, each with clear descriptions. The tool description does not add extra meaning beyond the schema; it only repeats dry_run's default. Per the baseline, with high coverage, a score of 3 is appropriate since the description doesn't need to compensate.
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 what the tool does: finds saved tracks never in recent history and not in any playlists, identifying them as unsave candidates. It uses a specific verb 'Find' and a precise resource, making it easily distinguishable from generic tools. The condition is explicit, and the sibling unsave_orphan_tracks does not overlap in purpose since this tool finds candidates while that may perform the removal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the usage context (finding dead tracks for unsaving) and mentions dry_run to avoid accidental removal, but it does not explicitly state when to use this tool over alternatives like unsave_orphan_tracks or other library hygiene tools. No exclusions or comparisons are provided, leaving the agent to infer the appropriate scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
decade_sampler_planA
Read-only sampling plan across decades: groups your saved albums by release decade and deterministically picks evenly spaced representatives per decade (spread across the decade, longest-held tiebreak). Quota: 1 capped /me/albums walk.
| Name | Required | Description | Default |
|---|---|---|---|
| saved_cap | No | Max saved albums scanned. Default: 1000 | |
| per_decade | No | Albums picked per decade. Default: 3 | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, and it does so well: it declares the operation read-only, explains the deterministic selection algorithm, specifies the tiebreak rule, and documents the API quota impact. This gives the agent a clear picture of side effects and cost.
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 compact and front-loaded, with the core read-only sampling purpose stated first, followed by the algorithm, tiebreak, and quota. Every sentence adds useful information and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only planning tool, the description adequately covers purpose, selection behavior, determinism, tiebreak, and quota. It does not explicitly describe the output shape, but the response_format parameter schema partially covers this, and the tool's read-only nature reduces the need for extensive safety warnings.
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 parameters are already well documented with defaults, ranges, and enum values. The description adds no parameter-specific semantics beyond what the schema provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action: a read-only sampling plan that groups saved albums by release decade and deterministically picks evenly spaced representatives. This distinguishes it from sibling tools like artist_era_sampler, saved_tracks_roulette, and saved_albums_by_decade.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool โ when a deterministic, decade-balanced sample of saved albums is needed โ but it does not explicitly name alternatives or state when not to use it. No exclusionary guidance is given, so the usage context is inferred rather than prescribed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dedupe_playlist_applyA
Remove duplicate uris from a playlist keeping the first (or last) occurrence: backs up the current items to a local file first, then rewrites via one atomic replace. dry_run defaults to TRUE. Quota: ๐ข GET + 1 local write + 1 PUT when committing.
| Name | Required | Description | Default |
|---|---|---|---|
| keep | No | Which occurrence to keep. Default first | |
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Pass false to commit. Default true | |
| playlist_id | Yes | Playlist to dedupe (ID or spotify:playlist: URI) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden and does well: it discloses that current items are backed up locally before rewriting, that rewriting happens through one atomic replace, that dry_run defaults to TRUE, and what quota the operation consumes. It does not cover ownership requirements or failure behavior, but the key safety-relevant behavior is clearly disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense, front-loaded sentences cover purpose, safety behavior, default mode, and quota with no filler. Every sentence earns its place, and the most important behavioral information appears early.
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 mutating tool with no annotations and no output schema, the description covers the essential context: what it does, the backup-first behavior, atomic replace, dry_run default, and quota. It is slightly incomplete in not describing when to prefer the plan-only sibling or what the dry-run plan looks like, but the parameter descriptions partially fill that gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters, including defaults and enums. The description adds slight framing by mentioning keeping 'first (or last)' occurrences and dry_run defaulting to TRUE, but it does not add meaningful semantic detail beyond what the schema already provides. 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 states a specific verb and resource: removing duplicate URIs from a playlist while keeping the first or last occurrence. It also clarifies the mutation is applied via an atomic replace after a backup. However, it does not explicitly distinguish itself from closely related siblings like dedupe_playlist_plan or remove_duplicate_playlist_items, so some sibling differentiation is missing.
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 context: dry_run defaults to TRUE, and committing involves a backup plus an atomic replace. It communicates the safe preview-by-default workflow and quota expectations, but it does not explicitly say when to use this tool versus dedupe_playlist_plan or other playlist-dedupe alternatives, nor does it state any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dedupe_playlist_planA
Census every duplicate uri in a playlist โ groups, all positions, and the exact keep-first/keep-last removal plan โ read-only (commit with dedupe_playlist_apply). Quota: ๐ข 1โ2 GETs.
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | Yes | Playlist to scan (ID or spotify:playlist: URI) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, and it delivers: it explicitly states the operation is read-only (so the agent knows it is non-mutating) and discloses the quota cost ('๐ข 1โ2 GETs'). This is precisely the operational context an agent needs that structured fields do not provide.
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 core purpose is front-loaded, output contents are compressed into a parenthetical list, and the read-only/commit-path/quota details each earn their place. Structured as a single scannable block.
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 tool with no output schema and no annotations, the description conveys the essential return contents (groups, positions, removal plan), safety profile (read-only), workflow (commit via apply), and cost (1โ2 GETs). Minor gaps remain โ behavior for playlists with no duplicates, how max_results interacts with result grouping, and the structural shape of the output โ but nothing critical 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%, so all three parameters (playlist_id, max_results, response_format) are already documented in the schema. The description adds no parameter-level detail beyond implying the output is a removal plan, which maps to response_format. The baseline 3 applies because the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('census'), a precise resource (duplicate URIs in a playlist), and the exact output contents (groups, all positions, keep-first/keep-last removal plan). This distinguishes it sharply from the sibling dedupe_playlist_apply, which is the commit counterpart. No ambiguity about what operation this performs.
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 makes the plan-then-commit workflow explicit: it is read-only and the agent should 'commit with dedupe_playlist_apply.' This gives clear when-to-use context for the plan/apply pair. It does not, however, contrast with other dedupe-related siblings like playlist_dedupe_advanced or find_duplicates_in_playlist, so exclusions are only partial.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dedupe_spotify_urisA
Remove duplicate Spotify references from a list, preserving first-seen order, comparing canonical URI forms where possible โ local, no network.
| Name | Required | Description | Default |
|---|---|---|---|
| uris | Yes | References to dedupe | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since annotations are absent, the description carries the burden of behavioral disclosure. It explicitly states 'local, no network,' which clarifies that no API calls are made, and mentions 'comparing canonical URI forms' to describe internal logic. It also mentions order preservation. This covers key behaviors but does not mention edge cases (e.g., invalid URIs) or output characteristics beyond the response_format parameter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is efficiently packed with key information: purpose, order preservation, canonical comparison, and local execution. It is directly front-loaded with the verb and resource, with no filler. This is an excellent example of concise, informative writing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (2 params, no output schema), the description is fairly complete. It covers what the tool does, its execution context, and unique behaviors. The response_format parameter is explained in the schema, so the description does not need to repeat it. Minor gaps include what happens to invalid URIs and whether output is a list or summary, but these are not critical for a dedupe utility.
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 high (100%), so the baseline is 3. The description adds some meaning by mentioning canonical URI forms, which hints at input normalization, and 'local' suggests no API dependencies. However, it does not elaborate on the format of URIs beyond schema's minimal 'References to dedupe,' nor does it add detail independent of the response_format enum. The added context is modest but not essential.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Remove duplicate Spotify references from a list' and specifies the resource (a list of Spotify references). It adds key behavior (preserving first-seen order, canonical URI comparison) and notes it's local with no network, distinguishing it from sibling tools like find_duplicate_spotify_uris or dedupe_playlist_apply. This is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for deduplicating a list of Spotify URIs and indicates it's local, but it does not explicitly name alternatives or conditions for when to use this tool vs. others. The mention of 'list' and 'local' provides some context, but there is no direct guidance on when not to use it (e.g., when operating on playlists).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deep_cuts_finderA
Surface deep cuts: album tracks past position 2 that are neither the title track nor released as singles โ the forgotten album material, per album. Quota: ๐ด paginated walk + batched /albums lookups.
| Name | Required | Description | Default |
|---|---|---|---|
| artist_id | Yes | Spotify artist ID, URI, or URL | |
| max_albums | No | Studio albums to scan. Default: 20 | |
| max_results | No | ||
| cuts_per_album | No | Deep-cut picks per album. Default: 3 | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden. It does reveal a significant behavioral trait โ 'Quota: ๐ด paginated walk + batched /albums lookups' โ which warns about cost and implementation approach. However, it does not explicitly state whether this is read-only/safe, nor describe failure modes or output behavior beyond what the schema provides.
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: the first defines the tool's precise behavior, the second flags quota cost. No filler, and the core definition is front-loaded before the caveat.
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 definition and quota warning are useful, but there is no output schema and no annotations, so more context would help: an example, a note about what 'released as singles' relies on, or clarification of max_results behavior. The response_format enum partially covers output variants, which prevents this from being lower.
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 contributes no parameter-level guidance, but the schema already documents artist_id, max_albums, cuts_per_album, and response_format, giving 80% coverage. Since the description doesn't need to repeat schema details and doesn't compensate for the undocumented max_results, a 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 gives a precise verb ('Surface') and a well-defined resource: album tracks past position 2 that are neither title tracks nor singles. It clearly distinguishes this from related sibling tools like b_sides_finder or artist_deep_cuts by enumerating exact inclusion criteria.
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 intended use case is clear from the definition: finding forgotten, non-single album material on a per-album basis. It does not explicitly name alternatives or exclusions, but the specificity of the criteria makes when-to-use apparent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deep_dive_reportB
Deep-dive one artist: recently-played counts, which of their tracks rotate, and their rank in each top-artists window (accepts ID, URI, or URL). Quota: GET /me/player/recently-played + 3ร GET /me/top/artists.
| Name | Required | Description | Default |
|---|---|---|---|
| artist | Yes | Artist ID, URI, or URL. | |
| max_items | No | Max recently-played items to walk (default 150; the API pages 50 per call). | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
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 earns credit for disclosing the quota (GET /me/player/recently-played + 3x GET /me/top/artists), which conveys the cost and endpoint footprint, and for noting input flexibility. However, it never states that this is a read-only operation, nor does it address edge cases like an artist with no listening history or an invalid ID.
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 zero waste: the core function is front-loaded, and the quota disclosure earns its place as operationally relevant context. Every word adds 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?
The core deliverable and API cost are covered, and response_format partially compensates for the absent output schema. But with no annotations and no output schema, the description should also confirm read-only behavior and cover failure modes; and given the dense sibling list, a usage-routing sentence would materially improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with clear per-parameter documentation for artist (ID/URI/URL), max_items (default and pagination), and response_format (enum meaning per value). The deescription's mention of accepted ID/URI/URL merely repeats the schema. Baseline 3 applies because 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 verb ('deep-dive') with a resource ('one artist') and enumerates concrete outputs: recently-played counts, track rotation, and rank in each top-artists window. This is unambiguous about what the tool produces. However, it does not explicitly differentiate itself from the closely named sibling artist_deep_dive, so it loses the last point for sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a scenario (per-artist listening analysis) but offers no explicit when-to-use guidance, no exclusions, and no mention of alternatives. With a huge sibling set containing artist_velocity_report, track_rotation_report, and top_artist_ranking_delta, an agent is left to guess which composite analysis tool fits. The quota note gives operational context but not usage selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_playback_bookmarkA
Delete one captured playback bookmark file from the local backup dir. Preview by default โ pass dry_run=false to delete.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Default true โ pass false to commit. | |
| bookmark_id | Yes | Bookmark id to delete | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does disclose the critical safety behavior: 'Preview by default โ pass dry_run=false to delete.' This is valuable because it signals that the default invocation is non-destructive. However, it does not add much beyond the schema's dry_run parameter description, and it does not mention irreversibility, permissions, or what happens to the local backup file after deletion.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. The primary action and resource scope are front-loaded, and the critical preview-by-default behavior is stated immediately after. 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?
The tool is simple, has only 3 parameters, and the schema covers all of them at 100%. The description provides the core action, scope, and safety behavior. A small gap is that it does not tell the agent to use list_playback_bookmarks to obtain valid bookmark IDs, but this is not essential for calling the tool correctly. Overall, the definition is sufficiently complete for a straightforward deletion operation.
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 three parameters. The description reinforces the dry_run parameter's behavior ('Preview by default') but adds no new parameter-level meaning beyond what the schema provides. The baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Delete' and the specific resource: 'one captured playback bookmark file from the local backup dir.' It distinguishes this tool from related siblings like list_playback_bookmarks, capture_playback_position, and resume_playback_position by specifying exactly what is deleted and where.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool: when the user wants to delete a captured playback bookmark file. However, it does not explicitly mention when not to use it or point to alternatives such as list_playback_bookmarks for finding bookmark IDs or resume_playback_position for restoring a bookmark. The preview-by-default guidance is useful but does not cover routing between related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_playlist_snapshotA
Delete one local playlist snapshot file; dry_run=true (default) only reports what would be removed Snapshot guide: take_playlist_snapshot (create), list_saved_snapshots (list), read_playlist_snapshot (read), diff_playlist_snapshots / snapshot_new_tracks / snapshot_removed_tracks (diff), restore_playlist_from_snapshot / restore_playlist_plan (restore).
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: perform the read side and return a deterministic PLAN without writing/deleting anything. Default true โ pass false to commit. | |
| snapshot | Yes | Snapshot id (filename stem), filename, or path | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden, and it discloses the key safety behavior: dry_run=true by default and that it 'only reports what would be removed.' This is meaningful transparency for a deletion tool. It could go further by stating irreversibility or explicitly confirming that dry_run=false commits the deletion, but the dry_run mention is already strong.
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 core purpose and safety behavior are front-loaded in a compact first clause, and the snapshot guide condenses a useful lifecycle map. It is slightly run-on and missing a separator before 'Snapshot guide,' but overall the description earns its length.
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 relatively simple single-file deletion tool, the description covers what it does, the dry_run safety mechanism, and how it relates to sibling snapshot operations. The lack of an output schema is not a major gap because the schema already defines response_format, and no other critical operational context seems 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 description coverage is 100%, so the input schema already documents snapshot, dry_run, and response_format thoroughly. The description adds little beyond restating dry_run's default behavior, which is already in the schema. 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 ('Delete') and resource ('one local playlist snapshot file'), and the qualifying word 'one' distinguishes it from batch/prune operations like prune_old_snapshots. The snapshot guide further positions it within the create/read/diff/restore lifecycle.
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 clear lifecycle context by listing related snapshot tools: take_playlist_snapshot for create, list_saved_snapshots for list, read_playlist_snapshot for read, diff/restore tools. This helps an agent route to the right operation. However, it does not explicitly exclude bulk alternatives like prune_old_snapshots or snapshot_retention_plan.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_sceneA
Delete a saved playback scene from the local sidecar
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Scene name to delete | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It adds one useful factโthe operation is local to the sidecarโbut does not disclose whether the deletion is permanent, reversible, or what happens if the scene is currently active. For a destructive operation, this is a meaningful 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 a single, front-loaded sentence with no filler. It conveys the action, target, and scope efficiently without repeating schema information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter delete operation, the description plus fully self-documenting schema covers the essentials: what to delete and where. It falls short on stating side effects or irreversibility, which matters for a deletion tool with no annotations and no 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?
Schema description coverage is 100%, and the schema already documents both 'name' and 'response_format' with clear descriptions. The tool description adds no parameter-level detail, so it appropriately relies on the schema and earns the baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Delete') and identifies a precise resource ('saved playback scene') with its scope ('local sidecar'). It also stands apart clearly from sibling tools like save_scene, list_scenes, and apply_scene by being the only deletion-oriented scene tool.
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 clear context: this tool is for removing a saved playback scene, and the 'local sidecar' qualifier clarifies it does not affect server-side data. However, it does not explicitly name alternatives or state when not to use it, so it stops short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describe_listening_sessionA
Playback history timeline from recently-played, optionally grouped into sessions (30-min gap via detectSessions). ๐ข (1 page) / ๐ก (2 pages). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max items (default 20) | |
| as_session | No | Group into sessions by 30-min gaps (default false) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it delivers meaningful behavioral context: 'Read-only' declares the safety profile, the 30-min gap via detectSessions reveals the grouping algorithm, and the ๐ข (1 page) / ๐ก (2 pages) indicators hint at output cost/size. It does not detail the return structure or pagination mechanics, but for a read-only timeline tool the key behavioral traits are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Compact and front-loaded: the first sentence states the core purpose and key feature, followed by three terse, information-dense signals (page cost, read-only safety). Every element earns its place โ there is no filler, no repetition of schema content, and the session-grouping feature is positioned immediately after the main purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with three fully documented optional parameters and no output schema, the description is mostly adequate. The notable gaps are the lack of explicit differentiation from the many sibling history/timeline tools and the unexplained meaning of the ๐ข/๐ก page indicators (what determines 1 vs 2 pages?). An agent operating among ~400 siblings would benefit from one sentence stating when to choose this over get_recently_played.
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 baseline is 3 and the description is not required to compensate. The description reinforces the as_session parameter with the detectSessions algorithm name and adds output-size context via the page indicators, but it does not materially extend meaning beyond what the schema already documents for limit, as_session, and response_format.
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 clear resource and scope: a playback history timeline sourced from recently-played tracks, with optional session grouping via 30-min gaps. The session-grouping feature distinguishes it from generic history tools like get_recently_played or playback_timeline, though it stops short of naming those siblings explicitly. The verb is implied ('describe'/retrieve) rather than stated, but the resource and behavior are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case is implied through the distinctive feature: 'optionally grouped into sessions (30-min gap via detectSessions)' signals this tool is the session-aware view of listening history. However, there is no explicit when-to-use guidance, no exclusions, and no named alternatives โ an agent is left to infer which of the many sibling history/timeline tools (get_recently_played, playback_timeline, now_playing_history, session_stats) this one should replace or complement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describe_queueA
Enriched queue view: currently playing + up-next with durations, total remaining, and source context label. ๐ข (1 read) or ๐ก (2 if include_context resolves playlist/album name). Also covers: raw queue via get_queue, snapshot via get_queue_snapshot โ See also: get_queue, get_queue_snapshot.
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| include_context | No | Resolve context URI to playlist/album name (extra GET) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that this is a read operation ('๐ข 1 read' or '๐ก 2 reads') and that include_context may trigger an extra GET to resolve a playlist/album name. It does not fully describe return shape or error behavior, but the cost and conditional request behavior are meaningful additions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the core purpose, but the ending is redundant: 'Also covers: raw queue via get_queue, snapshot via get_queue_snapshot' is followed by the same information in 'See also: get_queue, get_queue_snapshot'. This repetition prevents it from being tightly structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must explain return content, and it does list key output fields. However, it does not describe how response_format changes the output, how max_results limits results, or what the 'source context label' consists of. These are notable gaps for an agent that must decide how to call the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description repeats what the schema already says about include_context ('resolves playlist/album name') and adds no new parameter-specific meaning for max_results or response_format beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the tool as an 'Enriched queue view' and names specific output content: currently playing, up-next, durations, total remaining, and source context label. It distinguishes itself from get_queue and get_queue_snapshot by positioning those as raw and snapshot alternatives, though the phrasing is not as crisp as a direct contrast.
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 hints at differentiation by mentioning 'raw queue via get_queue' and 'snapshot via get_queue_snapshot', so it implies when describe_queue is preferable. However, it never states explicit conditions like 'use describe_queue for enriched summary, get_queue for raw items'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
device_healthA
Device availability & capability report โ merges GET /me/player/devices + GET /me/player active id + sidecar labels/presets. ๐ข (1-2 reads, local merge). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it delivers: it explicitly declares Read-only, discloses the operation cost (1-2 reads), and states the merge happens locally. This is strong behavioral disclosure for a safe, cheap read tool. It doesn't cover edge-case behavior (e.g., no active device, missing sidecar data), but the core safety and cost profile is well conveyed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence with purpose front-loaded, followed by data sources and a compact safety/cost marker (๐ข 1-2 reads, local merge). Every clause earns its place. Minor deduction for the encoded emoji shorthand that requires interpretation, but the overall signal density is excellent.
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 low-complexity tool (1 optional enum param, no nested objects, no output schema), the description is nearly sufficient: it explains the merged inputs, the read-only nature, and the operation count. The main gaps are that 'capability report' content is not specified in detail and edge cases are unaddressed, but the data-source enumeration and schema's response_format descriptions cover most of what an agent needs.
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 documents response_format's enum values thoroughly ('concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object), so the baseline of 3 applies. The description adds no parameter-level detail, but none is required given the schema's completeness.
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 a specific deliverable (device availability & capability report) and spells out the exact data sources merged (GET /me/player/devices + active id + sidecar labels/presets). This clearly distinguishes it from the raw sibling get_devices, which would be the obvious confusion point, so an agent can tell what this tool produces without opening schemas.
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 context is implied by the framing ('report' that merges multiple sources), which suggests it is the enriched/composite alternative to a raw devices list, but the description never explicitly states when to choose it over get_devices, device_sync_state, or compare_devices. No when-not-to-use guidance or named alternatives are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
device_sync_stateC
Reconcile sidecar device labels/volume presets (and scene device hints) against the live device list; flags dead labels and can prune them. 1 read + sidecar. dry_run plans.
| Name | Required | Description | Default |
|---|---|---|---|
| prune | No | Remove dead device presets/labels from the sidecar | |
| dry_run | No | Plan the prune without writing (default true). | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. It discloses that the tool can flag and prune dead labels, and that dry_run plans, but it does not explain what '1 read + sidecar' means, whether writes are reversible, what sidecar modifications involve, or what the output looks like. This is a meaningful gap for a tool with destructive potential.
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 very short and front-loaded, with each sentence adding a distinct piece of information: what is reconciled, what can happen, and the planning mode. The cryptic phrase '1 read + sidecar' slightly reduces clarity, but overall the text is efficient and free of 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?
Without annotations or an output schema, the description needs to explain the sidecar concept, the exact return format, the effects of prune, and the meaning of '1 read + sidecar.' The current description leaves too many practical details undefined for an agent to confidently invoke the tool in varied situations.
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 three parameters, their defaults, and enums. The description adds no parameter-specific meaning beyond what the schema states, except implicitly tying prune to the flagged dead labels and dry_run to planning, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb, 'reconcile', with clear resources: sidecar device labels/volume presets and scene device hints against the live device list. The outcome, flagging and optionally pruning dead labels, is also specified. However, the term 'sidecar' is domain jargon and '1 read + sidecar' is cryptic, so it is not perfectly clear to an unfamiliar agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives such as list_device_presets, apply_device_presets, compare_devices, or get_devices. The mention of dry_run suggests a planning workflow, but the description does not state when this tool is preferred or when it should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
device_type_censusA
Census of available Spotify devices grouped by type, with counts, names and volume range per group. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden and explicitly marks the operation as 'Read-only.' It also describes what the output contains (counts, names, volume range), giving the agent a clear picture of the tool's behavior without needing an output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It conveys the purpose, output contents, and read-only nature efficiently, earning its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple tool with one optional parameter, no required parameters, and no output schema. The description covers the output content and declares read-only behavior, while the schema fully handles response_format. Nothing essential is missing for correct selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single optional parameter response_format is fully documented in the schema with an enum and default value, so the description does not need to add parameter-level detail. The description adds no extra parameter semantics, but the schema already provides complete 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 states a specific action and resource: a census of available Spotify devices grouped by type, with counts, names, and volume range per group. This clearly differentiates it from sibling tools like get_devices or compare_devices by emphasizing aggregation and grouping.
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 clearly implies when to use it: whenever a grouped summary of devices by type is needed. It does not explicitly name alternatives or exclusions, but the census/grouping framing provides enough context for an agent to select it over a raw device-list tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diff_playlistsA
Compare two playlists fully paged: tracks only in A, only in B (by track ID), and tracks present in both but at different positions. Rendered rows are capped by max_results; totals are always accurate. Also covers: playlist_diff (snapshot diff), playlist_difference_plan (A minus B plan) โ See also: playlist_diff, playlist_difference_plan.
| Name | Required | Description | Default |
|---|---|---|---|
| a | Yes | First playlist, as ID or spotify:playlist: URI | |
| b | Yes | Second playlist, as ID or spotify:playlist: URI | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses meaningful operational traits: the tool is fully paged, rendered rows are capped by max_results, and totals remain accurate even when rows are limited. It does not explicitly confirm that a comparison is non-mutating or describe error cases, but for a read-style diff tool the stated behaviors are substantial.
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 core behavior is front-loaded and dense, which is good. However, the end of the description is redundant: 'Also covers: playlist_diff (snapshot diff), playlist_difference_plan (A minus B plan)' is immediately followed by 'See also: playlist_diff, playlist_difference_plan', repeating the same tool names and weakening the overall structure.
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 the main result categories and the max_results/totals behavior, which is helpful given there is no output schema. However, it leaves ambiguity about how max_results applies across the diff buckets, what the actual response shape looks like, and whether 'fully paged' means automatic internal pagination or requires further calls. These gaps matter because no output schema exists to fill them.
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 a, b, dry_run, max_results, and response_format thoroughly. The description adds conceptual meaning to a and b by explaining what comparisons happen between them, but it does not need to compensate for missing schema documentation. A 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 starts with a clear, specific verb and resource: compare two playlists, and enumerates exactly what the comparison yields (tracks only in A, only in B by track ID, and position differences). It also distinguishes itself from playlist_diff and playlist_difference_plan, so an agent can tell this tool apart from closely named siblings without opening schemas.
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 names the most likely alternatives, playlist_diff and playlist_difference_plan, and tags them with short scopes ('snapshot diff', 'A minus B plan'), which gives useful context for choosing among siblings. It stops short of explicit 'use X when / use Y instead' guidance, but the differentiation is clear enough for an agent to reason about the intended use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diff_playlist_snapshotsB
Diff two local snapshots of a playlist and report every added and removed track between them Snapshot guide: take_playlist_snapshot (create), list_saved_snapshots (list), read_playlist_snapshot (read), diff_playlist_snapshots / snapshot_new_tracks / snapshot_removed_tracks (diff), restore_playlist_from_snapshot / restore_playlist_plan (restore).
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| to_snapshot | Yes | Newer snapshot (id, filename, or path) โ the comparison | |
| from_snapshot | Yes | Older snapshot (id, filename, or path) โ the baseline | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the burden of behavioral disclosure. It does indicate local, non-live operation and a report output, but it never states that the operation is read-only, whether snapshots remain unchanged, or how max_results/response_format affect results. No contradiction exists, but key operational traits are left implicit.
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 core sentence is front-loaded and precise. The second sentence is a compact workflow guide that orients the agent among snapshot siblings without fluff, though it is slightly auxiliary to the tool's own definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the definition supplies the core outcome and the schema covers parameter formats. It is minimally viable, but it omits how results are grouped/truncated and fails to distinguish the all-in-one diff from the dedicated new/removed track tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents from_snapshot, to_snapshot, max_results, and response_format. The description adds no parameter-level meaning beyond 'between them', so the 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 opening sentence names a specific operation โ diffing two local playlist snapshots โ and the outcome: every added and removed track. This distinguishes it from ordinary playlist_diff and from snapshot creation/restore tools via the appended snapshot guide.
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 snapshot guide lists categories (create, list, read, diff, restore) but gives no conditions for choosing diff_playlist_snapshots over snapshot_new_tracks or snapshot_removed_tracks, and no exclusions. An agent would not know when the broader diff is preferable to the specialized additions/removals tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diff_since_snapshotC
Compare current playlist state to a stored snapshot
| Name | Required | Description | Default |
|---|---|---|---|
| playlist_id | Yes | Playlist ID | |
| snapshot_id | Yes | Snapshot ID to compare against | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, but it only states the operation. It does not disclose whether the tool is read-only, what side effects occur, what error conditions exist (e.g., missing snapshot), or what the returned diff contains.
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 compact phrase with no filler. Every word contributes to the core meaning, and the main action is front-loaded. It is concise but arguably too spare given the lack of annotations and 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?
Given no output schema, no annotations, and a large set of similarly named snapshot/diff tools, this description is not complete enough. It does not explain what the diff result looks like, how response_format changes the output, or when this tool is preferred over 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 description coverage is 100%, so all three parameters (playlist_id, snapshot_id, response_format) are already documented. The description adds no parameter-specific meaning, 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 states a specific verb ('Compare') and the two operands: current playlist state and a stored snapshot. This distinguishes it from snapshot-vs-snapshot tools like diff_playlist_snapshots, but it does not explicitly name or differentiate from sibling tools such as snapshot_diff_summary or find_new_since_snapshot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given for when to use this tool versus alternatives like diff_playlist_snapshots, playlist_diff, or find_new_since_snapshot. It also does not mention prerequisites such as the snapshot needing to exist or what happens if the playlist has no snapshot.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover_weekly_diffA
This week's Discover Weekly vs the last copy in your archive playlist: what is new, what overlapped, and which tracks you already liked. 2-3 reads (+1 write only with save_after). Resolves both playlists by exact name.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| liked_cap | No | How many saved tracks to scan for "already liked" detection. Default 500. | |
| save_after | No | After the diff, sync the archive playlist to this week's copy (adds writes) | |
| archive_name | No | Archive playlist name kept by save_discover_weekly. Default "Discover Weekly Archive". | Discover Weekly Archive |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden and delivers meaningful non-derivable traits: the cost profile '2-3 reads (+1 write only with save_after)' conveys side effects and near-read-only safety, and 'Resolves both playlists by exact name' discloses matching behavior that could cause failures. It stops short of a 5 because it doesn't describe what happens when the archive playlist is missing or name collisions occur.
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 with zero filler: purpose and outputs first, then cost profile, then resolution behavior. Every sentence earns its place and the most decision-relevant information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter tool with zero required parameters, a fully documented schema, and no output schema, the description supplies the conceptual model an agent needs: what is compared, what is reported, how playlists are resolved, the read/write cost, and output modes (via response_format). The only notable gap is edge-case behavior such as missing-archive handling, which would push this to 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 baseline of 3 applies. The description adds only marginal semantic valueโclarifying that save_after is the write gate and archive_name is the resolved playlistโwhile the schema already documents every parameter with defaults, bounds, and enum choices.
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 comparisonโthis week's Discover Weekly versus the last archived copyโand enumerates the three outputs (what is new, what overlapped, which tracks are already liked). This specificity sets it apart from the many generic diff siblings (playlist_diff, diff_playlists, diff_since_snapshot) by being Discover Weeklyโspecific. The verb is implied via 'vs' but unmistakable.
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 context is implied rather than stated: the archive_name parameter notes the archive is 'kept by save_discover_weekly,' signaling this tool runs after that sibling in a weekly workflow. However, there are no explicit when-to-use/when-not-to-use conditions or named alternatives, and the sibling list contains numerous similar diff/checkpoint tools with no routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discovery_digestB
One combined discovery digest from your own data: latest releases from your top artists with freshness flags, a tag:new catalog search seeded with your most common top-artist genre, and a followed-artist count. Quota: ~2 + N small API calls (top artists, per-artist probes, 1 search, 1 followed walk).
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Freshness window in days. Default: 30 | |
| market | No | ISO 3166-1 alpha-2 market code (e.g. 'US'); omit for 'from_token' behaviour | |
| top_artists | No | Top artists in section A. Default: 5 | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral disclosure burden. It adds a useful quota/cost disclosure (~2 + N small API calls) and the component list suggests read-only aggregation, but it does not explicitly state read-only semantics, auth requirements, potential failure modes, or how the result is formatted. This is meaningful context but incomplete.
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 compact and front-loaded, with the main purpose in the first sentence and the quota detail in the second. Both sentences earn their place and there is no redundancy with the schema, though the first sentence is slightly dense with its three-part list.
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 four-parameter aggregator with no annotations and no output schema, the description provides a solid component-level overview and quota cost, which helps an agent understand scope. However, it lacks an explicit return-shape description, safety/side-effect clarity, and sibling differentiation, leaving meaningful gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so days, market, top_artists, and response_format are already fully documented with types, defaults, and descriptions. The tool description adds no parameter-level meaning beyond what the schema provides, so the 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 clearly defines the tool as a combined digest synthesizing three specific data sources: latest releases from top artists with freshness flags, a tag:new catalog search seeded with a genre, and a followed-artist count. It conveys what the user receives and the 'from your own data' phrasing separates it from many single-purpose sibling tools, though it does not explicitly name an alternative.
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 this is for obtaining a consolidated discovery overview and describes its inputs, but it provides no explicit when-to-use guidance or exclusions. Closely related siblings such as artist_release_digest, search_fresh, and new_music_from_top_artists are not mentioned, so an agent must infer when this combined digest is preferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discovery_ratioA
Measure what share of your recently-played tracks are NOT in your top tracks (discovery vs staple listening; default compares against medium_term). Quota: GET /me/player/recently-played + 1ร GET /me/top/tracks.
| Name | Required | Description | Default |
|---|---|---|---|
| max_items | No | Max recently-played items to walk (default 150; the API pages 50 per call). | |
| time_range | No | Top-tracks window defining "known" music. Default: medium_term | medium_term |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral disclosure burden and adds real value by stating the quota shape: 'GET /me/player/recently-played + 1ร GET /me/top/tracks,' which signals cost and implies read-only behavior. It does not explicitly state no side effects, auth requirements, or edge cases like an empty recently-played history โ adequate but not exhaustive.
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 zero filler: the metric definition is front-loaded, and the quota sentence earns its place as cost-critical context an agent needs before invoking the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity compute tool with three optional, fully documented parameters, this covers the essentials: metric definition, default comparison window, and call cost. The missing output schema is mitigated by response_format's schema description of the three output modes; the remaining gap is edge-case behavior, which is a minor omission.
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 every parameter already has a meaningful schema description (defaults, enum semantics, API paging behavior). The description adds only the conceptual frame 'discovery vs staple listening' and echoes the medium_term default, so the baseline 3 applies without further compensation needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Measure what share of your recently-played tracks are NOT in your top tracks.' This defines the computed ratio and differentiates it from raw-data siblings like get_ecently_played and get_top_tracks without needing to name 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?
The metric definition plus 'default compares against medium_term' gives clear context for when the tool is relevant, and the quota line signals cost before calling. However, it names no alternative tool or exclusion (e.g., when discovery_digest would be the better choice), so usage guidance remains implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
duplicate_saved_versionsA
Find songs you saved more than once from different albums (same normalised track name + primary artist, distinct album IDs). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| scan_cap | No | Max saved items to walk per paginated source (default: SPOTIFY_MCP_FETCH_ALL_CAP) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it explicitly declares 'Read-only.' It also discloses the matching logic (normalised track name, primary artist, distinct album IDs), which helps the agent anticipate behavior. It does not mention pagination or performance characteristics, but for a read-only analysis tool this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence followed by 'Read-only,' with zero filler. The core action and criteria are front-loaded, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description defines the matching rule, scope, and safety profile (read-only), which is sufficient for basic invocation. It does not describe the return structure, but the response_format parameter partially covers output expectations, and this is not a high-risk tool. Slight gap: no mention of how it relates to similar duplicate-saved-track tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters (scan_cap, max_results, response_format) with descriptions and defaults. The tool description adds no additional parameter meaning beyond what the schema provides, matching the 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 states a specific verb ('Find'), a precise resource ('songs you saved more than once from different albums'), and exact matching criteria ('same normalised track name + primary artist, distinct album IDs'). This clearly distinguishes it from generic duplicate-finding tools and defines the operation unambiguously.
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 clearly implies the tool is for detecting saved-track duplicates across different albums, but it does not explicitly say when to prefer this over siblings like find_duplicate_saved_tracks or find_duplicates_in_playlist. There is no when-not-to-use guidance or mention of alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
episode_bookmarkA
Bookmark the current podcast-episode position to the sidecar (title, show, progress, optional note) โ where_was_i is audiobooks-only today. Quota: ๐ข 1 read (GET /me/player).
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Optional note to attach to the bookmark | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden. It adds genuinely useful behavioral context: the operation reads the player state via GET /me/player, costs exactly 1 quota unit (๐ข green), and persists to the sidecar. It does not disclose overwrite-vs-append semantics or failure behavior (e.g., nothing playing), which keeps it from 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?
Two sentences with zero filler: the first front-loads the action, scope, and sibling distinction; the second adds quota and cost. Every clause earns its place, and the most important routing information appears first.
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 tool with 2 optional params and no nested objects, this is nearly complete: it covers purpose, stored fields, sibling scope, and cost. The remaining gaps are minor โ no explicit return-value note (though the response_format param covers output options) and no idempotency statement. Against the tool's low complexity, this is strong.
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 both 'note' and 'response_format' are already fully documented in the schema, including enum meaning ('concise'/'detailed'/'json'). The description's mention of 'optional note' merely echoes the schema and adds no new parameter semantics. 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?
States an action verb ('Bookmark'), a specific resource ('current podcast-episode position'), a storage target ('the sidecar'), and the captured fields ('title, show, progress, optional note'). The clause 'where_was_i is audiobooks-only today' explicitly differentiates it from the nearest sibling, so an agent can route correctly without opening any 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?
Names the closest alternative ('where_was_i') and the deciding condition ('audiobooks-only'), telling the agent to use this tool for podcast episodes instead. It also discloses the cost profile upfront. It does not canvass all bookmark-like siblings (e.g., chapter_bookmarks, capture_playback_position, save_scene), so it falls just short of exhaustive when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
episode_context_bundleA
Episode + parent show + neighbouring episodes (prev/next by release date) in one card. Quota: ๐ก 2 API calls (GET /episodes/{id} + GET /shows/{id}/episodes).
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | ISO 3166-1 alpha-2 market code (e.g. 'US'); omit for 'from_token' behaviour | |
| episode_id | Yes | Spotify episode ID | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It usefully discloses the quota cost and the two underlying API calls (GET /episodes/{id} + GET /shows/{id}/episodes), which tells the agent about cost and composition. However, it does not describe error behavior, auth needs, or what the 'card' actually contains beyond the listed components.
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 compact and information-dense, covering tool output composition and quota in two short sentences. It front-loads the key purpose and adds the operational cost note without unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains what data is bundled and the API cost, but there is no output schema and no mention of how response_format alters the result, what 'from_token' market behavior means, or how failures are handled. It is adequate for a simple selection decision but not fully complete for invoking the tool in varied contexts.
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 each parameter is already documented in the schema. The description adds no extra meaning about episode_id, market, or response_format, but it does not need to because the schema handles that burden.
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 (an episode), what is bundled (parent show and neighbouring episodes by release date), and the output form (one card). It distinguishes itself from simpler episode/show tools by emphasizing the contextual bundle, so an agent can tell it apart from get_episode, get_show_details, or list_show_episodes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given about when to choose this tool over alternatives such as get_episode_details, get_show_details, or show_episode_timeline. The phrase 'in one card' weakly implies a bundle use case, but there is no stated when-to-use or when-not-to-use condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
episode_guest_censusA
Census recurring GUESTS across a show's recent episodes by mining description credits ("with X", "featuring X", "guest X") โ who keeps coming back. Defaults to the 20 newest episodes.
| Name | Required | Description | Default |
|---|---|---|---|
| show_id | Yes | Show ID, spotify:show: URI, or open.spotify.com/show URL | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| episodes_limit | No | Newest episodes to mine. Default 20 | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses the actual mining patterns ('with X', 'featuring X', 'guest X') which sets accuracy expectations, and the default scope of 20 episodes โ though that default duplicates the schema's episodes_limit text. It does not confirm read-only behavior or state what happens when no recurring guests are found.
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, front-loaded with the verb+resource, and the default arrives in a scanable second sentence. No filler; every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-param tool with complete schema coverage, the call surface is well covered. The gap is return shape: with no output schema, the agent cannot tell whether it gets counts, rankings, or per-episode matches โ 'who keeps coming back' only implies frequency output. An explicit return-format hint would make it complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline of 3 applies. The description's only param-adjacent contribution is framing episodes_limit as the mining window, which the schema already documents ('Newest episodes to mine. Default 20'). It adds nothing on show_id formats or response_format distinctions 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?
States a specific verb ('Census') + resource (recurring GUESTS across a show's recent episodes) and the mechanism (mining description credts with 'with X', 'featuring X', 'guest X'). The 'who keeps coming back' discriminator sets it apart from sibling census/report tools like featuring_density_report and artist_representation_census without opening their schemas.
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 'who keeps coming back' framing implies when to reach for this tool, and the defaut window sets scope. But it does not name alternatives or exclusion criteria, so among 300+ siblings an agent must infer routing purely from the purpose clause. That is implied guidance, not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
episode_resumeA
Jump straight back to the newest (or a named) episode bookmark: transfer + play with position + seek (2-3 writes). Pairs with episode_bookmark. Quota: ๐ก 2-3 writes.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| device_id | No | Target device id (defaults to bookmarked device) | |
| bookmark_id | No | Bookmark id (default: newest by saved_at) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden and does meaningful work: it reveals the tool is mutating ('2-3 writes'), discloses the quota tier (๐ก), and spells out the operation sequence (transfer + play with position + seek). It stops short of describing failure behavior, such as what happens when no bookmark exists for the episode, which keeps it from 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?
Three short sentences earn their place: the first states the action and mechanism, the second names the companion tool, and the third gives the quota cost. The most decision-relevant fact (what it does) is front-loaded, and there is zero filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a moderate-complexity tool with four optional, fully documented parameters and no annotations, the description covers the key calling context: operation flow, mutation cost, pairing with episode_bookmark, and defaults surfaced by the schema. The main gaps are the absence of an output schema and no mention of edge-case behavior (no bookmark found, dry_run result shape), but the response_format parameter partially compensates for return-value expectations.
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 all four parameters (dry_run, device_id, bookmark_id, response_format) are already documented in the input schema, giving a baseline of 3. The description adds a useful operational framing that connects the parameters ('transfer' explains device_id, 'with position' explains bookmark_id) but no additional parameter-level detail beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Jump straight back to...episode bookmark'), a specific resource (episode bookmark), and a precise scope ('newest (or a named)'). It also names the companion sibling 'episode_bookmark', which lets an agent distinguish the resumption action from the bookmark-creation action without inspecting either 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?
The description gives clear contextual guidance by naming its companion tool ('Pairs with episode_bookmark') and by the operation breakdown (transfer + play with position + seek), which signals this is the resume-bookmark workflow rather than a general playback seek or transfer tool. However, it does not explicitly state when not to use alternatives like resume_playback_position, continue_last, or transfer_playback_with_state, so exclusions are left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
episode_runtime_reportA
Runtime statistics for one show's episodes โ count, total/min/median/max duration, and the longest and shortest episodes โ to plan listening time. Defaults to the 100 newest episodes.
| Name | Required | Description | Default |
|---|---|---|---|
| show_id | Yes | Show ID, spotify:show: URI, or open.spotify.com/show URL | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| episodes_limit | No | How many newest episodes to analyse. Default 100 | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavior itself. It communicates that this is an aggregation/report operation over the 100 newest episodes and lists what statistics are produced. However, it does not clarify how max_results interacts with episodes_limit, mention pagination or API limits, or exlicitly confirm that this is 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?
A single sentence packs in the action, resource, output statistics, use case, and default behavior with zero filler. The most important information is front-loaded and every clause contributes 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?
The description is adequate for a simple report: it names the returned aggregate statistics and the default analysis window, and the schema covers parameter details. Yet with no output schema, it leaves response_format implications and the exact relationship between max_results and episodes_limit ambiguous, so an agent still has notable unresolved questions.
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 desciption coverage is 100%, so the baseline is 3. The description adds one useful behavioral detailโthe 100-newest-episodes defaultโbut the schema already documents show_id, max_results, episodes_limit, and response_format with their defaults and meanings.
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 identifies a specific action and resource: runtime statistics for one show's episodes, with concrete outputs (count, total/min/median/max duration, longest and shortest episodes). It is clear, but it does not explicitly distinguish itself from similar siblings like show_runtime_stats or show_episode_timeline, so it misses full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It offers a clear use case ('to plan listening time') and states the default scope ('100 newest episodes'), which lets an agent infer basic relevance. It does not say when to prefer this over overlapping tools such as show_runtime_stats or show_episode_timeline, nor does it state any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
era_distribution_reportA
Histogram of releases across eras: pass artist_id for that artist's discography in 5-year buckets, or omit it for your own saved-album library in decade buckets, with percentages and peak-era callouts. Quota: 1 walk (discography or saved albums).
| Name | Required | Description | Default |
|---|---|---|---|
| artist_id | No | Artist mode when given; omit for library mode | |
| saved_cap | No | Library mode max saved albums. Default: 1000 | |
| include_groups | No | Artist mode album groups. Default: album,single | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It discloses a concrete quota ('1 walk') and describes the output summary features ('percentages and peak-era callouts'). It does not explicitly state read-only behavior, but the report/histogram framing makes this reasonably clear.
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 deliver the core purpose, both modes, bucket sizing, output highlights, and quota cost with no filler. The key behavior is front-loaded before the quota note.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers mode semantics, bucket granularity, output features, and quota in a compact way. It is slightly incomplete in that 'walk' is unexplained and no alternative tool routing is given, but with no output schema it still gives enough for an agent to invoke the tool correctly in either mode.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by explaining how artist_id toggles modes and by defining bucket widths (5-year vs decade), which is not fully captured by the bare schema descriptions. Other parameters like saved_cap and include_groups are left to the schema, which is acceptable.
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 produces a 'histogram of releases across eras' and distinguishes two modes: artist discography in 5-year buckets and saved-album library in decade buckets. It is specific about the resource and behavior, though it does not explicitly name or contrast sibling 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 gives explicit mode-selection guidance: pass artist_id for an artist discography, or omit it for the saved-album library. This is clear context for when to use each mode, but it does not state exclusions or point to alternative era/report tools, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
era_preference_reportA
Compare the decade mix (album release eras) of your recently-played tracks against a top-tracks window, highlighting where recent listening skews older or newer (default medium_term). Quota: GET /me/player/recently-played + 1ร GET /me/top/tracks.
| Name | Required | Description | Default |
|---|---|---|---|
| max_items | No | Max recently-played items to walk (default 150; the API pages 50 per call). | |
| time_range | No | Top-tracks window to compare eras against. Default: medium_term | medium_term |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does meaningful work: it discloses the exact quota (recently-played + 1ร top-tracks), the default window (medium_term), and the comparison methodology. The two GET endpoints strongly imply a read-only operation. It stops short of stating non-mutation explicitly or covering rate-limit and edge behaviors, but the operational disclosure is substantial.
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 filler: the purpose statement is front-loaded and the quota line packs operational value that would otherwise be missing entirely. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The definition covers what the tool does, its data sources, the default window, and cost, while the response_format enum partially describes output shapes. With no output schema, the report's actual return structure is left unspecified and edge cases (e.g., insufficient listening history) are unaddressed โ minor gaps for a moderate-complexity read-only analytics 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 coverage is 100% with solid per-parameter descriptions and enums for two parameters, so the baseline is 3. The description's only parameter reference, 'default medium_term', duplicates the schema default and adds no new meaning for max_items or response_format.
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 a specific verb ('compare'), a precise resource ('decade mix of recently-played tracks' vs 'top-tracks window'), and the insight it produces ('skews older or newer'). Naming both data sources distinguishes it from raw retrieval siblings (get_recently_played, get_top_tracks) and adjacent era tools (era_distribution_report, playlist_era_profile) without needing to open 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?
The intended context is implied โ use when you want recent-listening era skew measured against a top-tracks baseline โ but no alternatives are named and no when-not-to-use conditions are given. Siblings like era_distribution_report and playlist_era_profile occupy adjacent territory, so an agent gets no explicit routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explicit_content_ratioB
Share of your saved tracks flagged explicit, with the top explicit artists. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| scan_cap | No | Max saved items to walk per paginated source (default: SPOTIFY_MCP_FETCH_ALL_CAP) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden of safety and side-effect disclosure. It does state 'Read-only,' which is a meaningful behavioral claim. However, it does not disclose that computing the ratio may walk a large number of saved tracks (relevant given scan_cap), how the explicit flag is determined, or whether the share is based on the entire library or just the scanned subset.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: a single sentence plus the read-only note. It is front-loaded with the core metric and source, and every word earns its place. No fluff 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 gives a decent high-level picture and the schema covers parameters, but there is no output schema and the description does not clarify key semantic details: whether the ratio denominator is all saved tracks or only those scanned, how 'top explicit artists' is ranked, or how response_format affects the output. These gaps could lead to incorrect interpretation of the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%; all three parameters (scan_cap, max_results, response_format) already have meaningful descriptions in the schema. The tool description adds no parameter-level information beyond what the schema provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's function: computing the share of a user's saved tracks flagged explicit and surfacing the top explicit artists. It names the data source ('your saved tracks') and the kind of output. It is specific enough to distinguish from many siblings, though it doesn't explicitly differentiate itself from other library-analytics tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like listening_report, library_genre_report, or other saved-track analytics. The only additional note is 'Read-only,' which is a safety signal rather than usage direction. There is no mention of prerequisites, library size considerations, or cases where another tool would be better.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_all_playlistsA
Export every owned (or all) playlist with metadata + items to a sidecar file. Quota: GET /me/playlists + NรGET /playlists/{id}/items; capped by fetchAllCap.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | owned = only playlists you own | all |
| format | No | Output format | json |
| output_dir | No | Local directory (default: ~/.spotify-mcp/portability) | |
| include_items | No | Include track items per playlist | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses quota behavior (GET /me/playlists + NรGET /playlists/{id}/items) and the cap by 'fetchAllCap.' This is valuable beyond annotations, which are absent. It doesn't clarify if this is read-only or whether it modifies anything, but the sidecar-file output is implied. A strong but not complete 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?
Two sentences, front-loaded with purpose and then a useful quota note. The line about 'fetchAllCap' is slightly jargon-heavy without explanation, but the description remains compact and mostly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No annotations and no output schema, so the description carries the burden. It covers purpose and quota, but leaves gaps: what is a sidecar file, what does 'all' include (followed vs owned), what is 'fetchAllCap', and what is returned. For a bulk export tool with 5 params, this is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds meaning to 'scope' by clarifying 'owned = only playlists you own', and it hints at 'fetchAllCap' behavior. It doesn't elaborate much on output_dir or response_format, but given full schema coverage, the added scope nuance pushes it to a 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 a specific action ('Export every owned (or all) playlist') with resource and output format. It distinguishes scope options ('owned' vs 'all') and mentions metadata + items to a sidecar file. This differentiates it from sibling export tools like export_playlist_json or export_playlist_markdown.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it: bulk export of all owned playlists. The quota note also gives scale expectations. However, it doesn't explicitly name alternatives for single-playlist export or say when NOT to use this tool, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_followed_artistsA
Export your followed artists to a local directory as JSON or CSV. Fields: uri, name, genres. The file's exported_at is the export time, not a per-artist follow date (Spotify does not expose followed_at).
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output format: json or csv | json |
| output_dir | No | Local directory to write files into (default: ~/.spotify-mcp/portability) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and adds a genuinely valuable behavioral caveat: 'The file's exported_at is the export time, not a per-artist follow date (Spotify does not expose followed_at).' This preempts a realistic misinterpretation of the output field. The write-to-disk side effect is also disclosed, though overwrite/file-naming behavior for repeated exports is not addressed.
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: the action sentence, the field list, and the semantic caveat. The primary action is front-loaded, and no filler or redundancy exists.
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 tool with three optional, fully-documented parameters and no output schema, the description covers the essentials: what is exported, where it goes, in which formats, and an important field-semantics warning. Minor gaps remainโoutput file naming and whether existing files are overwrittenโbut nothing blocks a first 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%, so all three parameters (format, output_dir, response_format) are already documented in the schema. The description adds only marginal reinforcement by repeating 'JSON or CSV' and listing the exported fields, which maps to content rather than the parameters themselves. 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 states a specific verb ('Export'), a precise resource ('your followed artists'), a destination ('to a local directory'), and a format ('as JSON or CSV'). This clearly differentiates it from sibling tools such as get_followed_artists (which reads rather than writes to disk) and other export tools (export_library_json, export_profile_state) that target different resources.
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 but not explicit: an agent can infer this is the tool for writing followed artists to local disk, especially given the portability default directory in the schema. However, with numerous sibling export tools (export_library_json, export_all_playlists, export_shows_opml, sidecar_export_bundle), there is no explicit when-not guidance or named alternatives to prevent confusion about scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_library_jsonA
Export your full library (saved tracks, albums, shows, episodes, audiobooks) to a local directory as JSON or CSV sidecar files. Respects SPOTIFY_MCP_FETCH_ALL_CAP per type; when capped, reports cap_reached + truncated and a prose footer ("first N of โฆ โ raise SPOTIFY_MCP_FETCH_ALL_CAP").
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output format: json (single file) or csv (one file per type) | json |
| output_dir | No | Local directory to write files into (default: ~/.spotify-mcp/portability) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It does well by revealing the non-obvious cap behavior: SPOTIFY_MCP_FETCH_ALL_CAP per type, cap_reached + truncated reporting, and the prose footer. Minor gaps remain around file naming, directory creation, and overwrite behavior, but the most important side effects are covered.
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 compact and front-loaded, with the primary purpose stated in the first sentence and the cap behavior efficiently folded into the second. No filler or redundant phrasing.
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 tool with three optional parameters, no output schema, and no annotations, the description provides enough information to invoke it correctly: content scope, formats, destination, and cap-reporting behavior. It does not cover exact file naming or whether the output directory must exist, but these are minor relative to the core behavior described.
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 each parameter already has a clear description. The tool description does not add meaningfully to parameter semantics beyond reinforcing the cap-related context, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Export'), a clear resource ('your full library'), enumerates the included content types, and specifies the destination and output formats. This clearly distinguishes it from sibling export tools such as export_playlist_json, export_followed_artists, and export_profile_state.
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 scope is explicit: full library as JSON/CSV sidecars, which makes the intended use inferable. However, it does not name alternatives or state when not to use this tool versus sibling export tools, leaving the routing decision mostly to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_listening_historyA
Export your listening history (recently played) to a JSON or CSV sidecar by walking /me/player/recently-played with before-cursor pagination. Respects SPOTIFY_MCP_FETCH_ALL_CAP; writes file 0600 and reports path + counts. Analogous to export_library_json.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Cursor: only return items played after this timestamp (milliseconds since epoch or ISO string) | |
| limit | No | Alias for max_items | |
| before | No | Cursor: only return items played before this timestamp (milliseconds since epoch or ISO string) | |
| format | No | Output format: json or csv | json |
| max_items | No | Max history items to export (default: SPOTIFY_MCP_FETCH_ALL_CAP) | |
| output_dir | No | Local directory to write files into (default: ~/.spotify-mcp/portability) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses the pagination approach, respect for SPOTIFY_MCP_FETCH_ALL_CAP, file permissions of 0600, and that the tool reports the output path and counts. This gives an agent a clear model of side effects and return information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with the core purpose stated first, followed by key behavioral constraints and a sibling-tool reference. Every sentence earns its place and there is no padding.
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 7 parameters, no required fields, and no output schema, the description covers the essential flow, pagination, file output, and success reporting well. It does not discuss failure behavior or explicitly contrast itself with the closest alternatives, but the detailed input schema fills most remaining gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds meaningful context beyond the schema: the before-cursor pagination strategy, the environment-variable default cap, and sidecar file behavior. This helps the agent understand how to use parameters like before, max_items, and output_dir.
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 an explicit action: export listening history (recently played) to a JSON or CSV sidecar via /me/player/recently-played. This clearly separates it from read-only retrieval tools like get_recently_played and other export tools like export_library_json.
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 clearly frames the tool's use case: durable export of listening history to a file, and it orients the agent by saying it is analogous to export_library_json. It does not explicitly state when not to use it, such as using get_recently_played for lightweight inspection instead, so it lacks full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_playlistA
Export a playlist's full item list as an M3U playlist file or a CSV spreadsheet. Pages every item; pass output_path to write a file (created with mode 0600) or omit it to get the document inline.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output format: m3u (playable playlist) or csv (spreadsheet) | m3u |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| output_path | No | Write the full document to this local file instead of returning it inline | |
| playlist_id | Yes | Playlist ID | |
| include_headers | No | Emit the #EXTM3U marker / CSV header row | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden and does disclose important traits: it pages through every item, writes files with mode 0600 when output_path is given, and returns the document inline otherwise. It does not cover overwrite behavior or whether file writes are local, but the core behaviors are 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?
Two sentences with no filler. The core purpose is front-loaded, and the behavioral details about paging, file permissions, and inline output are packed efficiently.
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 absence of an output schema, the description reasonably explains the inline vs file-write behavior, and the schema covers all parameters. However, it does not describe what the inline document looks like, what happens after writing a file, or how max_results interacts with the promise of a 'full item list', leaving some ambiguity for agents.
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 six parameters. The description adds useful meaning for output_path (write file with mode 0600 vs inline) and briefly clarifies format choices, but does not need to compensate for schema gaps.
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 (Export), resource (playlist's full item list), and two concrete output formats (M3U playlist file or CSV spreadsheet). It also distinguishes itself from sibling exporters like export_playlist_markdown and export_playlist_json by naming its formats.
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?
Gives clear guidance on output_path vs inline and on M3U vs CSV formats, but does not explicitly mention when to choose this export tool over similarly named siblings such as export_playlist_markdown or export_playlist_json. The usage context is implied rather than stated as alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_playlist_jsonA
Full-fidelity JSON export of one playlist: items + added_at + added_by + URIs (the fields CSV/M3U lose). 1 read.
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | Yes | Playlist ID | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and '1 read' is a meaningful disclosure: it signals the operation is safe, non-mutating, and quota-cheap. 'Full-fidelity' also sets the output completeness expectation. It doesn't cover pagination or error behavior, but for a simple single-read export these are minor gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence with zero waste: the core action and resource are front-loaded, the field list justifies the 'full-fidelity' claim, the CSV/M3U contrast adds differentiation, and '1 read' adds cost/safety context. Every phrase 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 3-param read tool with 100% schema coverage, the description plus schema is sufficient to invoke correctly. The absence of an output schema is partially compensated by naming the key response fields. Minor omissions โ explicit pagination behavior and how response_format interacts with the JSON output โ prevent a 5, but nothing critical 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 description coverage is 100% โ all three parameters (playlist_id, max_results, response_format) are already documented in the schema, so the baseline 3 applies. The description's field list describes output content rather than enriching parameter meaning, adding no new param-level insight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb + resource + format: 'JSON export of one playlist.' The field list (items + added_at + added_by + URIs) precisely defines what the export contains, and the CSV/M3U contrast explains why this tool exists among many export siblings. An agent can immediately differentiate it from export_playlist_markdown and export_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?
Usage context is implied but not explicit: the 'fields CSV/M3U lose' phrasing suggests choosing this tool when full fidelity is required, and '1 read' hints at low cost. However, it never names an actual sibling alternative or states when NOT to use it (e.g., when a lighter export suffices), leaving the routing decision partially to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_playlist_markdownA
Export one playlist as a paste-ready markdown table (the doc-friendly variant of export_playlist). 1 read.
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | Yes | Playlist ID | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
| include_added_at | No | Add an Added column |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description bears the full disclosure burden. The phrase '1 read' adds real behavioral context by signaling read-only behavior and API cost. But it does not address error behavior, truncation/pagination beyond max_results or explicitly confirm absense of side effects, so richer disclosure would be warranted.
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 with no filler, purpose front-loaded, sibling differentiation included, and the behavioral hint ('1 read') kept terse. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter tool with 100% schema coverage, defaults documented, and a clear output format stated, an agent has what it needs to call the tool correctly. The main gaps are a missing output schema and no explicit guidance on when markdown is preferred over the JSON variant, but these are minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all four parameters documented including defaults and enum meaning. The description adds no parameter-level meaning itself, so the baseline 3 is appropriate since 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 verb (Export), a specific resource (one playlist), and a concrete output format (paste-ready markdown table). It explicitly names the sibling export_playlist and positions itself as the doc-friendly variant, so an agent can distinguish it from export_playlist and export_playlist_json immediately.
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 identifies export_playlist as the alternative and gives the selecting condition: this is the doc-friendly markdown variant. This gives clear context within the export family. However, it does not spell out when-not-to-use or contrast explicitly with export_playlist_json, leaving a small inference gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_profile_stateA
Export local sidecar stores (scenes, genre-tags, playback-ext, search-history, mutations, artist-watchlist) to a single schema-versioned JSON archive. Note: artist-watchlist defaults to ./data/artist-watchlist.json (cwd-relative, not ~/.spotify-mcp/) โ a quirk flagged for future alignment.
| Name | Required | Description | Default |
|---|---|---|---|
| output_dir | No | Directory to write the archive into (default: ~/.spotify-mcp/exports) | |
| include_history | No | Include mutation history JSONL (can be large) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does add value by flagging the artist-watchlist path quirk (cwd-relative, not ~/.spotify-mcp/) and noting the archive is schema-versioned, but it does not disclose other behavioral aspects such as whether the operation touches source data, disk write side effects, size implications beyond include_history, or idempotency.
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 the primary action front-loaded and the quirk note placed second, where it reads as an intentional caveat rather than clutter. It is compact and every sentence earns its place, though the parenthetical in the second sentence 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?
For a tool with three fully-documented optional parameters and no output schema, the description is largely complete: it states the data scope, the output format, and the one genuine path quirk. Its main gap is the absence of cross-references to related tools (import_profile_state, sidecar_export_bundle), which matters given the enormous sibling list.
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 baseline is 3; the schema already documents output_dir, include_history, and response_format clearly, including the enum. The description adds no parameter syntax or format details beyond the schema, though the artist-watchlist path quirk marginally enriches understanding of what data gets archived.
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 ('Export') with an enumerated resource โ the exact sidecar stores (scenes, genre-tags, playback-ext, search-history, mutations, artist-watchlist) โ and a concrete output (a single schema-versioned JSON archive). This level of specificity clearly differentiates it from the many sibling export tools that target playlists, libraries, snapshots, or 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?
There is no guidance on when to use this tool versus alternatives. The description never mentions that import_profile_state is the restore counterpart, nor does it differentiate itself from the similarly-named sidecar_export_bundle or the other export siblings. The path-quirk note is useful but is not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_shows_opmlA
Export your saved shows as OPML XML โ the interchange format podcast apps speak. DISCLOSURE: the Spotify API does not expose publishers' underlying RSS feed URLs, so each OPML entry links to the Spotify show page (some apps import it, some ignore it).
| Name | Required | Description | Default |
|---|---|---|---|
| fetch_all | No | Page the whole library (up to fetch-all cap) instead of the first 50 | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden and does so well by revealing a non-obvious limitation: the Spotify API does not expose RSS feed URLs, so OPML entries link to Spotify show pages and may not import cleanly. It does not fully describe the return envelope or exact behavior beyond format, but the key caveat is transparently disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler: the first states the purpose and format, and the second provides a critical limitation. The essential caveat is front-loaded and 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?
For a simple export tool with two optional, fully documented parameters and no output schema, the description covers the core purpose and the main real-world caveat. It could be slightly more explicit about the exact response form (raw XML vs prose), but overall it is complete enough for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (fetch_all and response_format) are already documented in the schema. The description adds no meaning beyond the schema, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (export), a specific resource (saved shows), and a specific output format (OPML XML), making the tool's purpose immediately clear. It also distinguishes itself from siblings like export_library_json or export_playlist_markdown by the format and the saved-shows scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'the interchange format podcast apps speak' implies a podcast-migration/import use case, and the caveat about Spotify page links helps manage expectations. However, the description does not explicitly say when to prefer this tool over alternatives such as list_saved_shows or export_library_json, nor does it state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_snapshot_bundleA
Bundle selected snapshots (all of one playlist, or explicit ids) into a single portable JSON export file locally; dry_run=true (default) previews the bundle Snapshot guide: take_playlist_snapshot (create), list_saved_snapshots (list), read_playlist_snapshot (read), diff_playlist_snapshots / snapshot_new_tracks / snapshot_removed_tracks (diff), restore_playlist_from_snapshot / restore_playlist_plan (restore).
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: perform the read side and return a deterministic PLAN without writing/deleting anything. Default true โ pass false to commit. | |
| playlist | No | Bundle every snapshot of this playlist (ID or URI) | |
| snapshots | No | Explicit snapshot ids/filenames to bundle (overrides playlist filter) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
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 does disclose a key behavioral trait: dry_run=true is the default and previews the bundle instead of writing, and the non-dry-run path exports 'locally'. However, the dry_run behavior is already fully described in the parameter schema, and the description does not disclose side effects like overwriting files, required permissions, or what the preview/export actually returns. This is adequate but not rich.
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 main purpose is front-loaded in the first clause, but the description is a dense run-on that quickly shifts from purpose to dry-run behavior to a multi-item Snapshot guide. The trailing list is useful for context but makes the description feel cluttered and harder to parse than necessary. It is concise in word count but poorly structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no required parameters, a 100%-documented schema, and no output schema, the description covers the essential call context: what gets bundled, the two selection modes, the dry-run default, and where the export goes. The response_format parameter documents output variants, so the missing output schema is not a major gap. The related-tools guide further completes the workflow picture. It lacks file-path or return-structure details, but the core calling context is present.
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 all four parameters are already documented in the schema. The description only echoes what the schema already says ('all of one playlist' maps to playlist, 'explicit ids' maps to snapshots, 'dry_run=true (default)' maps to dry_run). It adds no additional parameter-level meaning, such as formats, constraints, or examples, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Bundle') and resource ('selected snapshots'), and names the concrete output ('a single portable JSON export file locally'). It also distinguishes itself from the snapshot lifecycle siblings by explicitly mapping create/list/read/diff/restore tools in the trailing Snapshot guide, so an agent can tell this is the export/bundle step.
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 Snapshot guide provides clear context for when this tool fits: it labels take_playlist_snapshot as create, list_saved_snapshots as list, read_playlist_snapshot as read, diff/restore tools accordingly, which implies this tool is for bundling/exporting. It does not explicitly say 'use this instead of X when...' or state exclusions, but the workflow context is strong enough to route an agent among snapshot-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
exposure_checkA
Where does a subject sit on the exposure ladder โ unheard / sampled / explored / established / favorite? Evidence cites lifetime + recent counts. Read-only, no auth. (Legacy alias of statsfm_exposure_check โ prefer the canonical name.)
| Name | Required | Description | Default |
|---|---|---|---|
| subject | Yes | Artist, track, album, or genre name to check | |
| statsfm_user | Yes | stats.fm user ID (or username) โ public profile, no auth needed | |
| subject_type | No | Which top-list to check against. Default: artist | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and it delivers the key behavioral traits: 'Read-only, no auth' discloses the safety profile and permission requirements. 'Evidence cites lifetime + recent counts' explains the data basis of the output. It stops short of covering edge-case behavior (unknown subject, invalid user), but for a read-only query tool the essential traits are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences and a parenthetical, with no wasted words: purpose first, then evidence basis, then safety trait, then the routing hint. Each clause earns its place and the most decision-relevant information (what the tool does) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, 4-parameter lookup with no output schema and no annotations, the description plus 100%-covered schema cover the essentials: purpose, the five output tiers, evidence basis, auth requirements, and preference for the canonical sibling. The response_format parameter addresses return shape. Missing is any note on error behavior or what happens for subjects outside the user's listening history, but the definition is largely complete 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%, so the parameters are already well documented (subject_type enum with default, response_format enum explaining each value, statsfm_user clarifying no auth needed). The description adds domain framing โ the exposure ladder levels and lifetime/recent counts โ which enriches meaning but doesn't add syntax or format details beyond the schema. Baseline 3 is appropriate given the schema carries the load.
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 (exposure ladder with the five named levels: unheard / sampled / explored / established / favorite) and what kind of answer the tool produces. The verb is implied rather than stated declaratively ('Where does a subject sit...'), and it distinguishes itself from siblings by naming statsfm_exposure_check as the canonical counterpart. A direct 'determines the exposure tier of a subject' would push this to 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 an explicit routing instruction: 'Legacy alias of statsfm_exposure_check โ prefer the canonical name,' telling the agent which sibling to prefer. Combined with 'Read-only, no auth,' the agent knows this tool is a safe, credential-free lookup. It does not offer guidance on when to choose exposure checking over other related taste/ladder tools (e.g., taste_obsession_ladder), so the guidance is present but narrow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_playlist_rangeA
Extract a positional range of a playlist (0-based start, EXCLUSIVE end; negative values count from the end) into a NEW playlist, reporting the originalโnew position map โ dry_run defaults to TRUE. Quota: ๐ข GET + create + chunked adds when committing.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | 0-based EXCLUSIVE end; negative = from end. Default: all items | |
| name | Yes | Name for the new extract playlist | |
| start | No | 0-based inclusive start; negative = from end. Default 0 | |
| public | No | Public visibility for a newly created playlist. Default: private | |
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Pass false to commit. Default true | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | Yes | Source playlist (ID or spotify:playlist: URI) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it delivers: it discloses that a new playlist is created (source untouched), that a position map is reported, that dry_run defaults to TRUE for safety, and even the quota cost ('๐ข GET + create + chunked adds when committing'). It stops short of edge-case behavior (e.g., empty/invalid ranges) but covers the key behavioral traits well.
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 no filler. The core operation and range semantics come first, the safety default second, and the quota note last. 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?
For an 8-parameter tool with no annotations and no output schema, the description covers the essentials: purpose, side effects, safety default, cost, and return behavior (the position map). It could add a sentence about the dry-run plan structure or validation behavior for fully complete guidance, but the gap is minor given the rich schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with detailed per-parameter text (start inclusive, end exclusive, negative-from-end, dry_run semantics). The description reinforces the critical range semantics and the dry_run default but adds little beyond what the schema already states, so the 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 a specific verb ('Extract'), a specific resource ('a positional range of a playlist'), and clarifies the outcome ('into a NEW playlist, reporting the originalโnew position map'). The 0-based/exclusive-end/negative-index semantics are front-loaded, and the phrase 'into a NEW playlist' implicitly differentiates it from mutation tools like remove_playlist_range.
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 dry_run-default-to-TRUE note implies a safe preview-then-commit workflow, and 'into a NEW playlist' implies the source is left intact. However, with a large field of overlapping siblings (playlist_slice, split_playlist, remove_playlist_range, playlist_move_block), there is no explicit guidance on when to choose this tool over those alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_spotify_idA
Extract the bare 22-char entity ID from any Spotify reference โ URI, open.spotify.com URL (embed/intl forms ok), or bare ID โ with zero network calls.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | Any Spotify reference: URI, URL, or bare ID | |
| expected_kind | No | When set, the extracted kind is compared against this value |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It discloses that the operation makes zero network calls and that the output is a 22-char entity ID, which is valuable and non-obvious. It does not mention error behavior or expected_kind mismatch handling, but the disclosed traits are clear and relevant.
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 that front-loads the action and resource, then packs the essential details (22-char, accepted forms, zero network calls) after an em dash. Every phrase earns its place 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?
For a simple utility with two parameters and no output schema, the description sufficiently defines inputs, output shape, and network behavior. It leaves minor gaps such as failure modes or how expected_kind affects the result, but the core calling context is complete enough for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description reinforces the ref parameter by listing accepted forms, but it adds no new meaning for expected_kind beyond what the schema already states ('compared against this 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 uses a specific verb (Extract) plus a precise resource (bare 22-char Spotify entity ID) and clearly enumerates the accepted reference forms (URI, open.spotify.com URL, bare ID). This distinguishes it from sibling URI utilities like normalize_spotify_uri or validate_spotify_uri, which serve different purposes.
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 states when this tool is appropriate โ any time a bare ID is needed from any Spotify reference โ and adds the key qualifier 'zero network calls', which signals it is a lightweight, offline alternative to API-based lookups. However, it does not explicitly name sibling tools to avoid or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
featuring_density_reportA
Measure how many of your saved track titles carry a "feat." / "featuring" marker, with examples ranked. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| scan_cap | No | Max saved items to walk per paginated source (default: SPOTIFY_MCP_FETCH_ALL_CAP) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description explicitly states 'Read-only', which is a valuable and non-obvious behavioral disclosure about side effects. It also hints at sorted output via 'examples ranked'. It does not describe pagination or potential API-call volume, but the read-only guarantee covers the main safety concern.
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 carry the core action, scope, output behavior, and safety guarantee with zero fluff. The main outcome and the read-only note are front-loaded and 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?
Given there is no output schema, the description conveys enough about returns ('how many' plus 'examples ranked') for an agent to invoke and interpret basic results. The parameter schema covers the remaining configuration details. It could be more explicit about the exact returned fields or whether a percentage is included, but it is adequate for a simple report tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents scan_cap, max_results, and response_format with defaults, constraints, and enum meanings. The description adds no additional parameter-level semantics, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Measure') and a precise resource ('your saved track titles') with a well-defined criterion ('feat." / "featuring" marker'). It also signals the output nature ('examples ranked') and sets it apart from other report tools by naming the exact metric. This clearly differentiates it from siblings like listening_report or library_coverage_report.
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 clear context: use this tool when the user wants a count/density of saved tracks with feature markers and ranked examples. It does not explicitly name alternatives or state when not to use it, but the niche purpose is unambiguous enough for an agent to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
filter_by_genreA
List URIs of your saved tracks or albums whose artists carry a given genre tag (case-insensitive tag-name match against your sidecar). Output is directly usable as create_playlist / add_to_playlist input. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Which saved collection to filter | |
| genre | Yes | Genre tag to match (case-insensitive, e.g. "pop") | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It explicitly discloses read-only behavior, case-insensitive matching, and that genre tags come from the sidecar. This goes beyond a bare operation statement, though it leaves sidecar prerequisites and failure behavior implied rather than explicit.
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 with no filler. The core action is front-loaded, the output contract is stated, and the read-only safety note is included. 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 4-parameter read-only tool with no output schema, this description is largely complete: it explains what is filtered, where tags come from, case sensitivity, and how the output can be consumed. The only notable gap is that 'sidecar' is referenced without explaining what it is or what happens if it lacks genre data.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already well documented. The description adds contextual value by clarifying the output is playlist-ready URIs, but it does not add parameter-level detail beyond what the schema already provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List', the resource ('URIs of your saved tracks or albums'), and the filtering condition (artists carrying a given genre tag). It distinguishes itself from nearby sibling tools like library_genre_report or genre_dive_search by focusing on saved-library filtering and URI output.
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 clear context by specifying the input source (saved tracks/albums) and the intended downstream use ('directly usable as create_playlist / add_to_playlist input'). It does not explicitly name alternative tools or state when not to use them, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
filter_playlist_by_artistA
Filter a playlist by artist (IDs/URIs or names, matched on id or exact name) and either report the matches read-only or โ with a name and dry_run=false โ write them to a NEW playlist. Quota: ๐ข GET (+ create/adds when committing).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New playlist name โ omit to stay read-only | |
| public | No | Public visibility for a newly created playlist. Default: private | |
| artists | Yes | Artists to match: IDs/URIs or exact names (1โ20) | |
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Pass false to commit. Default true | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | Yes | Playlist to filter (ID or spotify:playlist: URI) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full transparency burden, and it delivers: it discloses that writes go to a NEW playlist (original untouched), the exact commit condition, matching rules, and quota impact (GET + create/adds when committing). This prevents the critical misuse of assuming the source playlist is modified. It stops short of detailing failure behavior or duplicate-name handling on creation.
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 (~40 words) with zero filler. The core action is front-loaded, the dual-mode behavior and matching semantics are packed into the first sentence, and the quota signal closes efficiently. 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?
For a 7-parameter tool with no annotations and no output schema, the description covers purpose, matching, both execution modes, and quota โ while the schema handles parameter details. The main gap is the lack of explicit disambiguation from the playlist_exclude_artists/playlist_keep_artist/filter_playlist_by_* family, though the 'NEW playlist' behavior largely disambiguates. Return format is hinted at via the response_format parameter.
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 schema already documents all 7 parameters with defaults, constraints, and per-param descriptions. The description adds marginal value by tying name + dry_run=false together as the commit condition and reinforcing matching semantics, but it largely restates what the schema already says.
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 ('Filter'), a specific resource ('a playlist by artist'), and precise matching semantics ('IDs/URIs or names, matched on id or exact name'). It clearly distinguishes its key behavior โ reporting matches read-only or writing them to a NEW playlist โ which separates it from sibling filters like filter_playlist_by_era and filter_playlist_by_duration.
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 two usage modes explicitly: read-only reporting by default, versus committing with 'a name and dry_run=false'. This gives clear conditional guidance on how to invoke the tool. It does not explicitly name confusable siblings (e.g., playlist_keep_artist, playlist_exclude_artists), so the when-not-to-use dimension is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
filter_playlist_by_durationA
Filter a playlist by track duration (min/max seconds) and either report the matches read-only or โ with a name and dry_run=false โ write them to a NEW playlist. Quota: ๐ข GET (+ create/adds when committing).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New playlist name โ omit to stay read-only | |
| public | No | Public visibility for a newly created playlist. Default: private | |
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Pass false to commit. Default true | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| max_seconds | No | Inclusive maximum track length in seconds. Default: no cap | |
| min_seconds | No | Inclusive minimum track length in seconds. Default 0 | |
| playlist_id | Yes | Playlist to filter (ID or spotify:playlist: URI) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the dual read/write behavior, the dry_run default safety mechanism, the conditions for committing changes, and the quota cost ('๐ข GET + create/adds when committing'). It appropriately signals that the input playlist is not modified and output goes to a NEW playlist.
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 zero waste. The core purpose and mode-switching logic are front-loaded, and the quota information is tucked into a compact final sentence. Nothing is repeated from the schema, and every phrase 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 an 8-parameter tool with no output schema, the description plus 100% schema coverage gives an agent enough to call it correctly: required playlist_id, min/max_seconds filters, and the commit path are all covered. It does not describe the return value in detail, but no output schema exists and the schema's response_format parameter already hints at the output options.
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 baseline is 3. The description adds some semantic value by tying 'name' and 'dry_run=false' to the commit path, and implying min/max_seconds are the duration filters. However, the schema itself already documents each parameter's meaning and defaults, so the description does not need to compensate.
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 ('Filter') and resource ('playlist by track duration'), and explicitly distinguishes two modes: read-only reporting vs writing to a NEW playlist. The min/max seconds criterion clearly separates it from duration-adjacent siblings like playlist_trim_to_duration or playlist_filter_runtime.
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 clearly defines when to use the tool (filter by duration) and the exact conditions for the write mode ('with a name and dry_run=false'). It does not explicitly name alternative tools for similar jobs, but the mode-switching logic gives an agent clear decision guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
filter_playlist_by_eraA
Filter a playlist by album release era (decade and/or year window) and either report the matches read-only or โ with a name and dry_run=false โ write them to a NEW playlist. Quota: ๐ข GET (+ create/adds when committing).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New playlist name โ omit to stay read-only | |
| decade | No | Decade start year (e.g. 1980 = 1980โ1989) | |
| public | No | Public visibility for a newly created playlist. Default: private | |
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Pass false to commit. Default true | |
| to_year | No | Inclusive to-year | |
| from_year | No | Inclusive from-year (overrides nothing; combined with decade is allowed) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | Yes | Playlist to filter (ID or spotify:playlist: URI) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full behavioral burden and does meaningful work: it discloses the read-only vs. mutating dual mode, states that writes go to a NEW playlist (source playlist untouched), and adds a quota hint ('๐ข GET (+ create/adds when committing)') that signals cost/side-effect profile. It stops short of describing error conditions or the shape of the returned PLAN, but covers the core side-effect transparency well.
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 plus a one-line quota note. The primary action and filter criterion are front-loaded, the write-mode condition is stated compactly, and every sentence earns its place with no repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter, no-annotation, no-output-schema tool, the description covers the mode decision and quota but does not describe what the read-only result or PLAN looks like in practice. The response_format parameter partially fills this gap, but an agent still cannot anticipate the concrete return shape. Core invocation guidance is present; return-value expectations are the clear gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 9 parameters thoroughly. The description adds modest value by linking name and dry_run to the write-mode decision ('with a name and dry_run=false'), but beyond that it does not enrich parameter meaning beyond what the schema provides. 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?
States a specific verb and resource ('Filter a playlist') plus the exact criterion ('album release era (decade and/or year window)'). The dual-mode behavior (read-only report vs. write to a NEW playlist) is also captured, and the era criterion cleanly distinguishes it from sibling tools like filter_playlist_by_artist, filter_playlist_by_duration, and playlist_filter_runtime.
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?
Clear context is provided: use when filtering by release decade/year window, and the read-only vs. write decision is explicitly tied to conditions ('with a name and dry_run=false'). It does not name sibling alternatives or state when not to use them, but the era-specific criterion makes the intended use unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_canonical_trackA
[local-compute] Given a title + artist, search all versions, group by (artist, title) and rank them โ studio > album > live/remaster โ to return the canonical URI plus a variant table. Quota: ๐ก 1โ2 GET /search calls (fallback broad search when the precise filter comes back empty).
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Track title | |
| artist | Yes | Primary artist name | |
| market | No | ISO 3166-1 alpha-2 market code (e.g. 'US'); omit for 'from_token' behaviour | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the load. It discloses local-computation, 1โ2 GET /search calls, fallback broad search, quotas, and the ranking order studio > album > live/remaster. It doesn't explicitly state 'does not mutate data', but 'local-compute' plus read-only search calls imply it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Assembled in one efficient sentence with input, algorithm, output, and quota all front-loaded. No filler or redundant wording.
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, algorithm, output, fallback behavior, and quota. However, there is no output schema and the 'variant table' format is left vague, so an agent still has some ambiguity about exact returned fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds no extra meaning for market or response_format, and only restates title + artist which 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 'find', identifies the resource (canonical track), and describes the grouping/ranking algorithm. It clearly distinguishes itself from search_tracks and other lookup tools by returning a canonical URI plus variant table.
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?
Clearly states when to use it: given a title + artist, find the canonical version among all versions. It doesn't explicitly exclude alternatives or name sibling tools, but the context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_collaborationsA
Finds tracks where two artists appear together: walks artist A's releases, matches artist B (name or ID) on release-level credits, then pinpoints the exact shared tracks via full-album payloads. Quota: 1-2 walks/searches + chunked /albums?ids= fan-in.
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | ISO 3166-1 alpha-2 market code (e.g. 'US'); omit for 'from_token' behaviour | |
| artist_a | Yes | Spotify ID, URI (spotify:...), or open.spotify.com URL โ all resolve to the same entity | |
| artist_b | Yes | Second artist: name, ID, URI or open.spotify.com URL | |
| max_releases | No | Releases of artist A scanned. Default: 40 | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does real work: it discloses the multi-step internal algorithm and the quota cost ('1-2 walks/searches + chunked /albums?ids= fan-in'), which is genuinely useful behavioral context beyond the schema. It stops short of describing failure modes (no collaboration found, unresolvable artist) or auth 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 sentences, both load-bearing: the first front-loads purpose and algorithm, the second adds distinct quota information. There is no fluff or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-param tool with no annotations and no output schema, the description adequately covers purpose, algorithm, input roles, and cost. Return shapes are already handled by the response_format parameter with enum descriptions, so the primary remaining gap is failure/edge-case behavior.
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 baseline is 3; the description adds semantic value by clarifying the asymmetric roles โ artist_a is the artist whose releases are walked, artist_b is matched by name or ID โ a nuance not obvious from the schema alone, which lists nearly identical identifier formats for both.
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 ('Finds'), a specific resource ('tracks where two artists appear together'), and the exact mechanism (walks artist A's releases, matches artist B, pinpoints shared tracks). The algorithmic detail is distinctive enough to separate it from crowded siblings like artist_collab_network and find_canonical_track without naming 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?
The description implies the usage context โ given two specific artists, find their shared tracks โ but gives no explicit when-to-use vs alternatives guidance, no exclusions, and does not route the agent away from overlap-wise siblings like artist_collaboration_network or featuring_density_report. The quota note hints at cost but not at when the tool should be preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_duplicate_playlistsA
Scan your playlists for exact and near-duplicate track sets. Exact = identical URI sets (order-insensitive); near = Jaccard overlap >= threshold. Read-only. Also covers: find_duplicates_in_playlist, find_duplicate_tracks_across_playlists โ See also: find_duplicates_in_playlist, find_duplicate_tracks_across_playlists.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| scan_cap | No | Max items walked per playlist (default fetchAllCap) | |
| threshold | No | Jaccard threshold for near-duplicates (default 0.85) | |
| max_playlists | No | How many playlists to scan (default 50, max 100) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states 'Read-only', which is valuable since no annotations are provided. It also defines the exact/near matching semantics clearly. However, the input schema includes a dry_run parameter that says it describes 'what would change' despite the read-only claim, creating potential confusion about whether the tool can mutate state; the description does not reconcile this.
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 main behavior is front-loaded in a clear sentence, but the ending is redundant: 'Also covers: find_duplicates_in_playlist, find_duplicate_tracks_across_playlists โ See also: find_duplicates_in_playlist, find_duplicate_tracks_across_playlists' repeats the same two sibling names. This repetition wastes space and could confuse rather than aid tool selection.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core scanning behavior, read-only status, and matching definitions, making it minimally usable. But with no output schema and no annotations, it does not describe what the tool returns, how response_format affects output, or what happens when scan limits are reached, leaving gaps for an agent deciding how to interpret results.
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 parameters are already well documented in structured form. The description adds conceptual meaning for the threshold parameter by explaining Jaccard overlap, but it does not provide additional semantics for dry_run, scan_cap, max_playlists, or response_format beyond what the schema already offers.
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: scanning playlists for exact and near-duplicate track sets. It goes beyond the name by defining exact as order-insensitive identical URI sets and near as Jaccard overlap above a threshold, which makes the tool's purpose unambiguous even among many playlist-related siblings.
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 it 'also covers' find_duplicates_in_playlist and find_duplicate_tracks_across_playlists, implying the tool can serve those use cases. However, it never explicitly states when to prefer this tool over those siblings or what each sibling does differently, so usage guidance remains implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_duplicate_saved_tracksA
Read-only duplicate detection over your saved (liked) tracks: flags the same recording saved more than once โ double re-adds (exact matches within ยฑ2s duration) and, on opt-in, remasters/re-recordings of the same song (near duplicates). Lists each group oldest save first with a keep-one-remove-the-rest suggestion. Optionally pass a playlist_id to cross-reference which duplicates also appear in that playlist. Never mutates your library. Also covers: find_duplicates_in_playlist โ See also: find_duplicates_in_playlist, find_duplicate_tracks_across_playlists.
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | No | Optional playlist ID to cross-reference: members of each duplicate group that also appear in this playlist are flagged, so removal decisions can account for where the track is already curated. | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
| include_near_duplicates | No | Also report same-song groups whose durations differ by more than ยฑ2s (remasters/re-recordings). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden and does so thoroughly: it declares read-only behavior, states 'Never mutates your library,' explains the ยฑ2s exact-match tolerance, near-duplicate opt-in, oldest-save-first grouping, and keep-one-remove-the-rest suggestions. This is far more transparent than a typical tool description.
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 core behavior is front-loaded and clearly phrased. However, the 'Also covers: find_duplicates_in_playlist โ See also: find_duplicates_in_playlist, find_duplicate_tracks_across_playlists' sentence is redundant, lists find_duplicates_in_playlist twice, and introduces ambiguity, which weakens the overall structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no annotations and no output schema, the description covers safety, matching semantics, group ordering, output suggestions, and the optional playlist cross-reference. It is slightly incomplete only in sibling routing: it names alternatives without explaining which scenario selects each one, and the 'Also covers' phrasing adds uncertainty.
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 description does not need to restate parameter details. It adds useful algorithmic context such as the ยฑ2s tolerance and remaster/re-recording interpretation, but that is mostly behavioral rather than parameter-specific. 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 opening sentence states a specific function: read-only duplicate detection over saved tracks, including exact and near-duplicate semantics. However, the line 'Also covers: find_duplicates_in_playlist' muddies scope by implying this tool also handles a sibling tool's job, preventing a clean 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?
It clearly scopes usage to saved tracks and describes an optional playlist cross-reference, which gives an agent context for when to invoke it. However, it never states when-not conditions or explicit selection criteria for find_duplicates_in_playlist versus find_duplicate_tracks_across_playlists; it only appends 'See also' names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_duplicates_in_playlistA
Find duplicate tracks in a playlist: repeated URIs plus relinked copies of the same song appearing under different URIs. Also covers: find_duplicate_tracks_across_playlists (cross-playlist), find_duplicate_playlists (playlist-level), remove_duplicate_playlist_items โ See also: find_duplicate_tracks_across_playlists, find_duplicate_playlists, remove_duplicate_playlist_items.
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | Yes | Playlist ID | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the behavioral burden. It does convey a non-mutating 'find' operation and defines what counts as a duplicate, but it does not explicitly state that the playlist is not modified, nor does it disclose return shape, output limits, or any API/auth considerations.
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 main purpose is front-loaded and the sibling scopes are useful. However, the 'Also covers' phrasing is ambiguous, and the three sibling tool names are listed twice, adding redundancy and mild confusion.
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 low-complexity find tool, the description covers the core domain and routes to siblings, with parameters fully documented in the schema. It is not fully complete because there is no output schema and no explicit statement about read-only behavior or result format beyond the schema-provided defaults.
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 three parameters, including defaults, enums, and limits. The description adds no parameter-specific meaning beyond tying the tool to a playlist context, 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 states a specific verb and resource: it finds duplicate tracks in a playlist, explicitly covering both repeated URIs and relinked same-song variants. It also differentiates this tool from siblings by labeling them as cross-playlist, playlist-level, and removal tools, so an agent can identify the exact scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description names the relevant alternativesโfind_duplicate_tracks_across_playlists, find_duplicate_playlists, and remove_duplicate_playlist_itemsโand clarifies their scopes in parentheses. It does not explicitly say 'use this when duplicates are within a single playlist; otherwise use X,' but the scoped alternative list makes the intended choice clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_duplicate_spotify_urisA
List duplicate Spotify references in a batch with counts and positions, comparing canonical URI forms โ computed locally with no network calls.
| Name | Required | Description | Default |
|---|---|---|---|
| uris | Yes | References to scan | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries behavioral disclosure. It adds meaningful traits: local computation, zero network calls, canonical-form comparison, and output containing counts and positions. It does not cover invalid-input handling or explicitly rule out side effects, though 'computed locally' strongly implies read-only 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 front-loaded sentence where every clause contributes: batch scope, output content, comparison method, and execution environment. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description gives enough output concept (counts and positions) and the schema's response_format descriptions cover concise/detailed/json. It could add edge-case behavior for invalid/non-Spotify URIs and canonicalization specifics, but nothing essential for invoking the tool 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's 'in a batch' reinforces the uris array and 'canonical URI forms' clarifies comparison semantics, but it adds little parameter-level detail beyond what the schema already states for response_format and uris.
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 a specific verb ('List'), a precise resource ('duplicate Spotify references in a batch'), and includes distinctive method details ('comparing canonical URI forms', 'computed locally with no network calls'). This separates it from related siblings like dedupe_spotify_uris and find_duplicate_tracks_across_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?
It gives clear context: the tool is for batch duplicate analysis over a provided list of URIs and is suitable when local/no-network behavior is desired. It does not explicitly name alternatives or state when not to use it, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_duplicate_tracks_across_playlistsA
Find tracks that appear in more than one of the given playlists (cross-playlist dupes). Quota: ๐ก N GETs (one per playlist). Also covers: find_duplicates_in_playlist (single-playlist), find_duplicate_playlists โ See also: find_duplicates_in_playlist, find_duplicate_playlists.
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_ids | Yes | Playlist IDs to compare (2โ20) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden, and it does disclose an important operational trait: quota cost of N GETs, one per playlist. This also signals that the tool is read-only, but it does not explain matching criteria or pagination 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 opening sentence and quota line are concise and front-loaded. However, the 'Also covers: find_duplicates_in_playlist ... find_duplicate_playlists โ See also: find_duplicates_in_playlist, find_duplicate_playlists' portion is redundant and confusingly phrased, naming the same two tools twice without clear routing guidance.
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 tool with no output schema and no annotations, the description should say more about what the result looks like or how duplicate matching works. The schema covers parameters well, and sibling names are present, but the returned information and matching semantics remain implicit.
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 playlist_ids, max_results, and response_format are already documented. The description adds only a minor operational link: one GET occurs per playlist, which is a small enrichment 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 immediately states the exact operation: find tracks appearing in more than one of the given playlists, and even labels it as 'cross-playlist dupes.' The mention of sibling tools further distinguishes it from single-playlist duplicates and duplicate playlists, despite the slightly awkward 'Also covers' phrasing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The first sentence makes the intended scenario clear: compare a set of playlists for overlapping tracks. The description also names the key alternatives, find_duplicates_in_playlist and find_duplicate_playlists, identifying the single-playlist case, but it never gives an explicit 'use X instead when...' instruction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_lost_since_snapshotA
Compare a live playlist against a snapshot and list snapshot tracks that have since disappeared from the playlist Snapshot guide: take_playlist_snapshot (create), list_saved_snapshots (list), read_playlist_snapshot (read), diff_playlist_snapshots / snapshot_new_tracks / snapshot_removed_tracks (diff), restore_playlist_from_snapshot / restore_playlist_plan (restore).
| Name | Required | Description | Default |
|---|---|---|---|
| playlist | No | Live playlist to compare (default: the snapshotโs playlist_id) | |
| snapshot | Yes | Baseline snapshot (id, filename, or path) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the behavioral burden. 'Compare' and 'list' strongly convey a read-only operation, and the description clearly states what the output represents: tracks from the snapshot that are now missing from the playlist. It does not detail output structure or side-effect guarantees, but for a lookup-style tool the core behavior is 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 purpose is front-loaded in a single clear sentence, followed by a compact snapshot-tool guide that earns its place as workflow context. The guide is a dense list of names rather than prose, but it remains concise and useful.
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 schema fully describing parameters and no output schema, the description provides enough high-level output semantics and workflow context for correct use. It could be more complete by explicitly stating that no playlist or snapshot is modified, but 'compare' and 'list' make this reasonably safe to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all four parameters with descriptions, including defaults and enums, so the schema carries the parameter burden. The description adds no parameter-specific meaning, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a precise verb-resource pair: compare a live playlist against a snapshot and list snapshot tracks that have disappeared. This clearly distinguishes it from snapshot-to-snapshot diff tools and 'find_new_since_snapshot' siblings.
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 snapshot guide lists related create/list/read/diff/restore tools, which implies a workflow context, but it never explicitly states when to choose this tool over diff_playlist_snapshots, snapshot_removed_tracks, or find_new_since_snapshot. Guidance remains implicit rather than a direct when-to-use/when-not-to-use rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_new_since_snapshotA
Compare a live playlist against a snapshot and list tracks added to the playlist since it was taken Snapshot guide: take_playlist_snapshot (create), list_saved_snapshots (list), read_playlist_snapshot (read), diff_playlist_snapshots / snapshot_new_tracks / snapshot_removed_tracks (diff), restore_playlist_from_snapshot / restore_playlist_plan (restore).
| Name | Required | Description | Default |
|---|---|---|---|
| playlist | No | Live playlist to compare (default: the snapshotโs playlist_id) | |
| snapshot | Yes | Baseline snapshot (id, filename, or path) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It conveys a read-only diff operation through words like 'compare' and 'list', but it does not explicitly state that no playlist or snapshot data is modified, nor does it describe output shape or pagination behavior. The snapshot guide adds workflow context but not deeper behavioral transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core behavior is front-loaded in a single compact sentence. The second part is a somewhat dense 'Snapshot guide' listing related tools, but it earns its place as navigation context for a large snapshot-tool family. Overall it is concise and not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete enough for a read-only diff tool: it explains the operation, names the snapshot-family context, and the schema fully documents parameters and response_format. An output schema is absent, but the description's language and the response_format enum sufficiently convey the expected output modes.
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 adds no parameter-level meaning beyond what the schema providesโ'live playlist', 'snapshot', and 'added' are helpful framing but do not materially extend 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 a specific action ('Compare a live playlist against a snapshot') and a specific result ('list tracks added to the playlist since it was taken'). The phrase 'since it was taken' distinguishes it from removed-track tools, but it does not explicitly distinguish it from similarly named siblings like diff_since_snapshot.
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 clear context for when to use the tool: whenever you need to see tracks added to a live playlist relative to a baseline snapshot. It does not provide explicit exclusions or directly route to alternatives, though the appended 'Snapshot guide' does orient the agent within the snapshot-tool family.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_show_by_publisherA
Search the catalog and match shows whose PUBLISHER (network) matches your query โ the missing publisher facet on show search. Defaults to 10 search results.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Publisher or network name, e.g. "Wondery" | |
| market | No | ISO 3166-1 alpha-2 market for the search, e.g. 'US' | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden, but it only says it searches and defaults to 10 results. It does not state read-only behavior, return shape, pagination, or market handling, and its 'defaults to 10' claim conflicts with the max_results schema default of env variable or 50.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One tight sentence with the core action and differentiation front-loaded. It loses a point because the trailing 'Defaults to 10 search results' is inaccurate relative to the schema and therefore does not fully earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple search tool with fully documented parameters and no output schema, the purpose and key semantic are present. But the default-value contradiction, lack of any mention of what the response contains, and no explicit sibling routing leave gaps an agent would have to resolve elsewhere.
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; however, the description's only explicit parameter-related claim (defaults to 10) contradicts the max_results property description (default SPOTIFY_MCP_MAX_ITEMS env or 50), making it net misleading rather than additive.
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 action ('Search the catalog and match shows') with an explicit resource attribute (PUBLISHER/network) and positions it as the 'missing publisher facet on show search,' differentiating it from generic show-search siblings without needing to open schemas.
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 frames when this tool applies: when the lookup is by publisher/network, the facet missing from standard show search. It stops short of naming sibling alternatives like search_shows or stating when not to use this tool, so it is clear but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_toolA
Search the live tool registry by name or description substring โ the fastest way to discover which of the 500+ tools handles a job. Discovery set: find_tool/inspect_tool/toolset_report are always available (also via catalog). Use this first when unsure which verb to use (e.g., playlist vs snapshot vs search).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max matches to return (default 25) | |
| query | Yes | Case-insensitive substring to match against tool names and descriptions | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
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 adds useful context: the registry is 'live' and the discovery tools are 'always available', and 'search' implies a read-only operation. It does not explicitly state side-effect safety or what the returned matches look like.
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 the core action, followed directly by actionable usage guidance. Every clause earns its place, and the discovery-set note is compact.
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 low-complexity lookup tool with fully documented parameters and a response_format enum, the description plus schema covers what, why, and when. It could explicitly say the result is a list of matching tool names/descriptions, especially since no output schema exists.
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 baseline is 3. The description restates that query matches against names and descriptions but adds no syntax, defaults, or enum guidance beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States it searches the live tool registry by name/description substring to discover which of the 500+ tools handles a job. Specific verb+resource, and clearly differentiates as the discovery/first-line tool rather than a domain search like 'search' or '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?
Explicitly instructs 'Use this first when unsure which verb to use' and notes the discovery set via catalog. Does not fully delineate when to prefer inspect_tool or toolset_report over find_tool, so it stops short of a complete when-not map.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
follow_artistsA
Follow one or more artists (1โ50 IDs). Requires user-follow-modify.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Spotify artist IDs to follow | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, but it only states the auth scope. It does not mention idempotency, partial-failure behavior for invalid IDs, rate limits, or side effects beyond following, which an agent would need to fully anticipate the outcome of a mutating call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. The core action, target resource, ID limits, and auth requirement are all conveyed efficiently.
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 two-parameter tool with no output schema, the description covers the basic call contract, but it omits behavior an agent would need for a mutation: how errors are handled for invalid IDs, whether following is idempotent, and what the response looks like depending on response_format. This is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the ids array and response_format enum. The description adds little beyond restating the ID count bounds already present in the schema, so a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Follow'), the resource ('one or more artists'), and the accepted ID count range (1โ50). It distinguishes this from sibling tools like unfollow_artists, check_following_artists, and get_followed_artists by naming the exact mutation performed.
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 clear context: call this tool to follow artists, and it notes the required OAuth scope ('Requires user-follow-modify'). It does not explicitly name alternatives or say when not to use it, but the context is sufficient for an agent to know when this tool applies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
followed_playlists_auditB
Inventory of followed vs owned playlists: counts, collab, public, follower totals. Quota: ๐ข GET /me/playlists paged.
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| only_followed | No | Only followed (not owned) playlists (default false) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses the underlying endpoint ('GET /me/playlists'), that the operation is paged, and the quota level ( green), which is genuinely useful. However, it never explicitly states that the operation is read-only and side-effect-free, nor does it describe pagination behavior implications for max_results. Partial but meaningful 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?
Two terse sentences: the first front-loads the purpose with concrete output dimensions, and the second adds a quota/endpoint note. Zero filler, every clause earns its place, and the most important information (what the tool produces) appears first.
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 read-only inventory tool the description is adequate, but gaps remain: no output schema exists, so the meaning of 'collab' (collaborative status?) and how totals are structured are left to inference; and there is no note on how response_format interacts with the report style. The fully documented parameter schema and simple read-only nature keep this from being a 2, but the missing output-shape expectations prevent a 4.
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%r, so the schema already documents all three parameters (max_results, only_followed, response_format) with defaults and enums. The description's mention of the report dimensions (counts, collab, public, follower totals) gives helpful context for interpreting only_followed, but it adds no parameter-specific semantics beyond what the schema provides. 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 deliverable ('Inventory of followed vs owned playlists') and enumerates the metrics produced ('counts, collab, public, follower totals'), which clearly distinguishes it from sibling tools like get_user_playlists (raw list) and get_playlist_followers (followers of one playlist). It could earn a 5 with a stronger action verb, but 'Inventory' plus the metric list is sufficiently clear and specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives such as get_user_playlists, get_playlist_followers, or playlist_collaboration_report. Given the enormous sibling list (170+ tools), the absence of any selection criteria, exclusions, or alternative names leaves the agent to infer applicability from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
following_analyticsA
Analytics over followed artists: genre/popularity rollups via batch /artists?ids= enrichment. Quota: ๐ข GET /me/following + GET /artists batches.
| Name | Required | Description | Default |
|---|---|---|---|
| top_n | No | Top N groups to show | |
| group_by | No | genre | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the tool performs batch enrichment via /artists?ids= and notes the quota impact with a green indicator. This is valuable behavioral context about how the quota is consumed. Without annotations, it carries the burden of transparency; it could further mention that it aggregates data but doesn't persist anything, yet the batch/rollup behavior is sufficiently disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both informative: the first defines the function, the second gives quota behavior. It front-loads the core purpose and wastes no words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an analytics tool with 4 optional parameters and no output schema, the description explains the mechanism, quota, and purpose. It could be slightly more complete by mentioning default grouping or output format behavior, but optional parameters lower the burden.
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 75% with 4 parameters. The description adds meaning by clarifying the rollup nature and the enrichment mechanism, linking the parameters to the analytics concept. It doesn't repeat parameter details but the schema already documents them; the description's main value is the overall conceptual model.
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 clear verb (analytics over followed artists) and resource (genre/popularity rollups). It explains the data source (followed artists + /artists?ids= enrichment), which helps distinguish it from raw get_followed_artists or get_me. However, it doesn't explicitly differentiate it from sibling tools like followed_playlists_audit or library_genre_report, so it is clear but not fully distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case: run analytics over followed artists rather than a simple list. It doesn't explicitly state when to prefer this tool over alternatives like get_followed_artists or genre_trends_over_time, and there are no exclusions. The quota note gives some operational context but doesn't provide selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forgotten_favoritesA
High-lifetime tracks with zero recent plays โ favorites that fell off. Ranked by lifetime streams. Read-only, no auth. (Legacy alias of statsfm_forgotten_favorites โ prefer the canonical name.)
| Name | Required | Description | Default |
|---|---|---|---|
| top_limit | No | Lifetime top tracks to scan. Default: 50 | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| statsfm_user | Yes | stats.fm user ID (or username) โ public profile, no auth needed | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the operation is read-only, requires no auth, ranks results by lifetime streams, and filters for tracks with zero recent plays. This is meaningful behavioral context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences: one defines the tool's function and ranking, the second covers read-only, auth, and alias status. There is no filler, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only lookup with fully described schema parameters, this description is nearly complete: it says what is returned, how results are ranked, that no auth is needed, and how to route to the canonical tool. It doesn't enumerate output fields, but with no output schema the core semantics are still clear.
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 adds context about ranking and recency that relates to tool behavior, but doesn't enhance parameter-level semantics. 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 defines what the tool returns: 'High-lifetime tracks with zero recent plays โ favorites that fell off. Ranked by lifetime streams.' This is specific and distinguishes it from generic track query tools. It also identifies the canonical sibling, statsfm_forgotten_favorites, making the tool's role unmistakable.
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 states read-only and no-auth usage constraints, and explicitly warns that this is a 'Legacy alias of statsfm_forgotten_favorites โ prefer the canonical name.' That tells an agent not to select this tool when the canonical sibling is available. It doesn't fully spell out all alternative conditions, but the alias guidance is strong enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
format_spotify_uriA
Format an entity kind + ID pair into a canonical spotify: URI locally; validates the ID shape and returns null when the pair is malformed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Spotify entity ID | |
| kind | Yes | Entity kind, e.g. track, album, artist, playlist, show, episode, audiobook, user | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses that the operation is local, validates the ID shape, and returns null on malformed input, which is valuable and non-obvious. It does not clarify all edge cases, but the key behavioral traits are covered.
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 that front-loads the core purpose and then adds the two most important behavioral details: local execution and null-on-malformed. There is no filler or redundant restating of the tool name.
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 pure function, the description is mostly adequate: it states inputs, output, locality, and failure behavior. However, it leaves the response_format parameter unexplained and unmentioned, and without an output schema the valid-return behavior relies entirely on the phrase 'canonical spotify: URI.' This is a noticeable gap for an agent that must 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 coverage is 100%, so the schema already documents all parameters and provides the baseline of 3. The description does add meaning by framing the inputs as an 'entity kind + ID pair' and noting validation, but it does not explain the response_format parameter, whose schema description suggests prose/JSON output rather than a URI string.
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 operation: formatting an entity kind + ID pair into a canonical spotify: URI. It clearly identifies the input form and the output, and the qualifier 'locally' distinguishes it from network-backed tools, though it does not explicitly name or differentiate any sibling tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus the many sibling URI utilities such as make_spotify_uri, normalize_spotify_uri, canonicalize_spotify_uri, or validate_spotify_uri. The usage is only implied by the operation name and description, with no explicit alternatives, exclusions, or selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
front_to_back_planA
Full front-to-back listening plan for one album: ordered track listing with cumulative start times and vinyl-style side breaks at a configurable minutes-per-side budget. Read-only. Quota: 1 GET /albums/{id} (+1 paged tracks walk above 50 tracks).
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | ISO 3166-1 alpha-2 market code (e.g. 'US'); omit for 'from_token' behaviour | |
| album_id | Yes | Spotify ID, URI (spotify:...), or open.spotify.com URL โ all resolve to the same entity | |
| side_minutes | No | Approximate minutes per vinyl side (break inserted after a track would overflow). Default: 20 | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full transparency burden and delivers: it explicitly states 'Read-only' and discloses the exact API quota (1 GET /albums/{id}, plus one paged track walk above 50 tracks). The side_minutes parameter description additionally clarifies that breaks are inserted after a track would overflow, making the core algorithm's behavior explicit.
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 zero waste: the first defines the deliverable, the second discloses safety and quota cost. Information is front-loaded in priority order โ function before cost โ so an agent scanning the first sentence already knows what the tool does.
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?
All four parameters are documented in the schema, and the description covers function, output shape (ordered listing, start times, side breaks), read-only safety, and API cost. The only shortfall is the absence of sibling-routing guidance and edge-case behavior (e.g., a track longer than the side budget), which is minor given the schema's completeness and the tool's read-only nature.
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% โ every parameter (album_id, market, side_minutes, response_format) has a meaningful schema description, so the baseline of 3 applies. The prose's 'configurable minutes-per-side budget' only echoes side_minutes and adds no format or constraint detail beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific outcome โ 'Full front-to-back listening plan' โ and enumerates the exact deliverables: ordered track listing, cumulative start times, and vinyl-style side breaks. The 'one album' scope plus the 'configurable minutes-per-side budget' pin down both resource and behavior, clearly distinguishing it from album-analysis siblings like album_duration_report or album_track_explorer.
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 conveys clear context: this tool is for constructing a listening session plan for a single album with side breaks, and the quota note signals the cost profile before invocation. It does not name alternatives or state when-not-to-use, leaving sibling routing to inference across a very large toolset.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
genre_dive_searchA
Search artists by genre keyword (e.g. "britpop", "afrobeat") and list the matching profiles with their genre tags โ the entry point for a genre dive. Quota: ๐ข one GET /search call.
| Name | Required | Description | Default |
|---|---|---|---|
| genre | Yes | Genre keyword to search for | |
| limit | No | Results per page, 1โ10 (Feb-2026 /search cap). Default: 10 | |
| market | No | ISO 3166-1 alpha-2 market code (e.g. 'US'); omit for 'from_token' behaviour | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
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, and it does: it discloses the HTTP method and endpoint (one GET /search call), quota cost, and the shape of what is returned (profiles with genre tags) โ all beyond the schema. It does not cover empty-result behavior, error conditions, or explicit read-only language, but the GET method implies safety and the disclosed details are meaningful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: purpose and concrete examples come first, followed by the quota/endpoint note. Every clause earns its place and the most decision-relevant behavioral detail is stated compactly rather than buried in prose.
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 4-parameter tool with full schema coverage, the description adds purpose, output shape, and quota transparency โ sufficient for an agent to invoke it correctly. The main omission is explicit differentiation among the many sibling genre/search tools, and with no output schema the return structure is only sketched, though response_format covers the main variants.
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 genre, limit (with its 1โ10 cap and default), market (including the from_token behavior), and response_format (with enum meanings) are all already documented in the schema. The description adds only the illustrative genre examples, which is marginal value; the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action โ 'Search artists by genre keyword' โ with concrete examples (britpop, afrobeat) and the expected output (matching profiles with their genre tags). The genre-keyword angle distinguishes it from name-based search_artists and broader search_advanced tools, so an agent can identify it for genre-oriented discovery.
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 'the entry point for a genre dive' implies a genre-exploration scenario, which gives some situational context. However, no alternatives are named and no when-not-to-use conditions are given, and with a huge sibling set including search_artists, search_advanced, filter_by_genre, and top_genre_census, the agent receives no explicit routing signal to separate this tool from those.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
genre_trends_over_timeB
How your taste shifts โ per-period top genres via artist genres/tags, with deltas and emerging/declining tags. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Bucket size (default monthly) | |
| lookback | No | How many periods back (default 6) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the read-only nature and the derivation approach (per-period top genres via artist tags, deltas, emerging/declining tags). However, it omits caveats such as sparse-history behavior, data freshness, or how genre tags are aggregated, which would be useful for a report tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with the core purpose front-loaded and the read-only caveat appended. The opening 'How your taste shifts' is slightly colloquial but not wasteful; 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?
The schema documents all four optional parameters with defaults and enums, and the description covers the read-only safety profile and output concepts. What is missing is usage context โ which scenario calls for this tool over the genre/taste-report siblings โ and any indication of the detailed/json response shapes, since no output schema exists.
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% โ period, lookback, max_results, and response_format all have descriptions and enums/defaults. The description aligns conceptually ('per-period' maps to period, 'deltas' maps to output) but adds no parameter-level detail beyond the schema, so the 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 purpose: analyzing how taste shifts over time via per-period top genres, deltas, and emerging/declining tags. It names the data source (artist genres/tags) and output concepts, making it reasonably distinct from similar analytics siblings like top_genre_census or taste_shift_report, though it never explicitly names 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?
No guidance is given on when to use this tool versus the many overlapping genre/taste analytics siblings (taste_shift_report, top_genre_census, era_preference_report). There are no when-to-use, when-not-to-use, or alternative-routing statements, leaving tool selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_albumB
Get album details and track list by ID
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Spotify album ID | |
| market | No | ISO 3166-1 alpha-2 country code. Defaults to the account country; affects track playability. | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does not state that this is a read-only fetch, describe the output structure, mention market-dependent playability, or note pagination/max_results behavior. These are meaningful gaps for a tool with no annotation safety net.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler or redundancy. It efficiently communicates the core action and scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is sufficient to understand the basic invocation (fetch single album by ID), especially with a fully described schema. However, with no output schema and no usage differentiation from get_album_tracks or get_several_albums, the definition leaves gaps around output shape and tool selection.
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 all four parameters are already well-documented in the schema. The description's 'by ID' aligns with the required id property and 'track list' loosely relates to max_results/response_format, but it adds no new semantic value 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 states a specific verb ('Get'), a resource ('album details and track list'), and a clear key qualifier ('by ID'). This immediately distinguishes it from siblings like get_several_albums (multiple IDs) and get_album_tracks (tracks only).
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 explicit guidance on when to use this tool vs. alternatives such as get_album_tracks, get_several_albums, or get_artist_albums. The only usage signal is the 'by ID' qualifier, which is too weak to help an agent select correctly among similar album-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_album_tracksC
List the tracks of an album with pagination
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Spotify album ID | |
| limit | No | Results per page, 1โ50. Default: 20 | |
| market | No | ISO 3166-1 alpha-2 country code. Defaults to the account country; affects track availability. | |
| offset | No | Index of the first track to return. Default: 0 | |
| fetch_all | No | When true, walk all pages via getAllPages up to cap (fetch_all_cap) โ use for "all" queries. Default: false | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states 'list' and 'pagination', leaving out pagination semantics, result shape, market behavior, and potential large-response considerations. This is a minimal disclosure for an unannotated 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, front-loaded sentence with no filler or redundant restatement of the tool name. It is appropriately short, though it lacks extra context that would make it more informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward read-only list tool, the schema covers parameter details well. However, the absence of usage guidance, behavioral context, and output-shape information leaves noticeable gaps for an agent deciding how to format results and when to prefer this tool over 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 description coverage is 100%, with all seven parameters already documented including defaults and bounds. The description only adds the generic notion of pagination, which does not meaningfully extend what the schema already says. 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 states a specific verb and resource: 'List the tracks of an album'. It also mentions pagination, which is the core operation. However, it does not explicitly distinguish this from related siblings like get_album, which may also return track lists, 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 such as get_album or get_playlist_items. No exclusions or preference conditions are mentioned, so an agent must infer usage solely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_artistC
Get artist info by ID
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Spotify artist ID | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. 'Get' implies a read-only operation, but nothing is stated about return behavior, handling of invalid IDs, auth requirements, or how response_format alters output โ the response_format semantics are only documented in the schema. The description adds essentially nothing beyond what the tool name already implies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Six words, front-loaded, and zero waste โ the sentence earns its place. However, it is so terse that a single clause could have added sibling differentiation or usage context without meaningful cost.
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 schema is rich enough for basic parameter usage, but with roughly 300 siblings including dozens of get_artist_* variants, the description does not state what 'artist info' includes or how it differs from get_artist_top_tracks, get_artist_discography, or get_several_artists. There is no output schema, so the return shape is entirely unspecified.
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%: `id` is documented as 'Spotify artist ID' and `response_format` has per-value explanations ('concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object). The description adds no parameter information, so the baseline 3 applies โ the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('get') and resource ('artist info') with the key identifier ('by ID'), making the core purpose unambiguous. However, it does not differentiate from many similar siblings like get_artist_top_tracks, get_artist_discography, get_artist_genres, or get_several_artists, leaving the agent to infer scope from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The extensive sibling list includes closely related tools such as get_several_artists (batch lookup), resolve_artist (name-based disambiguation), and get_artist_top_tracks, yet none are referenced or contrasted. The agent receives zero routing help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_artist_albumsC
List an artist's albums and singles
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Spotify artist ID | |
| limit | No | Results per page, 1โ10. Default: 10 | |
| market | No | ISO 3166-1 alpha-2 country code. Defaults to the account country; affects album availability. | |
| offset | No | Index of the first album to return. Default: 0 | |
| fetch_all | No | When true, walk all pages via getAllPages up to cap (fetch_all_cap) โ use for "all" queries. Default: false | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| include_groups | No | Album types to include. Default: ["album","single"] | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only says 'List', and says nothing about pagination, fetch_all behavior, response format, max_results limits, market-dependent availability, or whether multiple album groups are combined by default.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler or repetition. It is appropriately brief, though it is so terse that it omits useful context that a structured description could have added.
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 8 parameters, no output schema, no annotations, and many closely related sibling tools, the description is underspecified. An agent gets no sense of return shape, pagination behavior, or how this tool differs from overlapping siblings, so the tool-level context is incomplete.
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 all 8 parameters already have meaningful documentation. The description adds only the 'albums and singles' scope, which aligns with the include_groups default, but it does not compensate for or explain the pagination and formatting parameters beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete action ('List') and a specific resource scope ('an artist's albums and singles'), so an agent can tell what the tool does. It does not explicitly differentiate itself from sibling tools like get_artist_singles or get_artist_discography, so it falls just 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 one-sentence description gives no guidance on when to use this tool over get_artist_singles, get_artist_discography, or get_artist_appearances. There are no exclusions, conditions, or suggested alternatives, leaving the agent to infer selection purely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_artist_appearancesA
List albums an artist appears on (GET /artists/{id}/albums?include_groups=appears_on). Quota: ๐ข single.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Results per page, 1โ10. Default: 10 | |
| market | No | ISO 3166-1 alpha-2 country code | |
| offset | No | Offset. Default: 0 | |
| artist_id | Yes | Spotify artist ID | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| include_groups | No | Default: ["appears_on"] | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses the HTTP verb (GET, confirming a non-destructive read), the exact Spotify API endpoint, and the quota cost ('Quota: ๐ข single'). It does not mention pagination behavior or response characteristics, but the schema documents the pagination-related parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler. The primary purpose is front-loaded in the first phrase, and the quota note is compact and genuinely actionable. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 7 parameters, no annotations, and no output schema, the description is lean but the 100%-covered schema carries parameter documentation. What is missing is explicit routing among the many artist-focused siblings (get_artist_albums, get_artist_singles, get_artist_discography) and any note on return shape given there is no 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?
Schema description coverage is 100%, so the baseline of 3 applies. The description adds marginal value by showing include_groups=appears_on in the endpoint URL, reinforcing the default filter, but it contributes nothing about limit, offset, market, artist_id, max_results, or response_format 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?
The description names a specific verb ('List'), a resource ('albums an artist appears on'), and the exact API endpoint with include_groups=appears_on. This clearly differentiates it from sibling tools like get_artist_albums and get_artist_singles, so an agent can tell them apart without opening any 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?
The 'appears on' phrasing and the include_groups=appears_on URL make the use case clear: retrieving albums where the artist is a guest/featured performer rather than the primary artist. However, it never explicitly names alternatives or states when not to use it, so the agent must infer the routing from the tool name and endpoint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_artist_discographyC
Get filtered discography for an artist (GET /artists/{id}/albums with album-type filtering)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Results per page, 1โ50. Default: 20 | |
| market | No | ISO 3166-1 alpha-2 country code, e.g. 'US' | |
| offset | No | Offset | |
| artist_id | Yes | Spotify artist ID | |
| album_types | No | Filter to these album types. Default: all | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| include_groups | No | Alias for album_types (Spotify include_groups) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it only discloses that this maps to a GET endpoint (read-only). It does not mention pagination behavior, max_results caps, response_format modes, or the alias relationship between album_types and include_groups, all of which are material behavioral traits for a tool this size.
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 13-word sentence that front-loads the action and resource, then packs the endpoint and filtering scope into a parenthetical. Every word earns its place; there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter tool with zero annotations and no output schema, this description is too thin. Core selection and behavioral gaps remain: why use this over get_artist_albums, what the return shape roughly looks like, and how filtering defaults behave. The rich schema saves it from a 1, but an agent still cannot confidently route to it among the discography-focused 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 description coverage is 100% and each parameter already has meaning, defaults, and enums documented, so the baseline is 3. The description adds only the endpoint mapping and filtering intent; it does not clarify the album_types/include_groups alias beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get'), a clear resource ('discography for an artist'), and adds scope via 'filtered' and 'album-type filtering', plus the underlying endpoint. This distinguishes it from broad album fetchers like get_artist_albums, though it never names a sibling explicitly, and in a list this crowded explicit differentiation would help.
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 no guidance on when to choose this tool over the many overlapping discography siblings (get_artist_albums, get_artist_singles, get_artist_appearances, artist_discography_explorer, artist_release_type_breakdown). No conditions, exclusions, or alternative routes are mentioned, leaving selection entirely to the agent's inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_artist_genresA
Get genres for an artist (focused view of GET /artists/{id})
| Name | Required | Description | Default |
|---|---|---|---|
| artist_id | Yes | Spotify artist ID | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries some burden. It communicates that this is a read-only, narrowed view of the artist endpoint, but it does not disclose return shape, empty-genre behavior, or any other behavioral details. Still, for a simple getter, the description is reasonably 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?
A single, front-loaded sentence that states the purpose and the endpoint relationship with zero filler. It is appropriately sized for the tool's low complexity.
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 small parameter count and complete schema descriptions, the description is sufficient for an agent to invoke the tool correctly. There is no output schema, but 'genres' plus the endpoint reference makes the expected return understandable for this simple focused getter.
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 explains both artist_id and response_format with meaningful detail. The tool description adds no additional parameter-level meaning, which is acceptable given the schema carries the full burden.
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 has a specific verb and resource ('Get genres for an artist') and explicitly notes it is a 'focused view of GET /artists/{id}', separating it from broader artist tools like get_artist. An agent can immediately understand what this tool 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?
The 'focused view' phrasing gives clear context that this tool is for genre-only lookups rather than full artist details. It does not explicitly name alternatives or when not to use it, but the intent is clear from the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_artist_singlesA
List an artist's singles only (GET /artists/{id}/albums?include_groups=single). Quota: ๐ข single.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Results per page, 1โ10. Default: 10 | |
| market | No | ISO 3166-1 alpha-2 country code | |
| offset | No | Offset. Default: 0 | |
| artist_id | Yes | Spotify artist ID | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral disclosure burden. It does convey that this is a read-only list operation via GET and adds a useful quota signal ('Quota: ๐ข single'). It does not describe return format, pagination behavior, or whether only singles are returned versus other album groups, but the quota and endpoint provide meaningful 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 compact, information-dense sentences. The core purpose is front-loaded, and the endpoint plus quota signal are included without any filler or redundant restatement of the tool name.
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 straightforward filtered list operation, the description is largely complete: full schema coverage handles parameter semantics, and the endpoint plus quota give useful operational context. It lacks any guidance about how this differs from sibling album/discography tools, but that is a minor gap given the clear 'singles only' scope.
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 baseline is 3 even though the description adds little parameter-level detail. The endpoint path does clarify that artist_id maps to the artist path parameter and that include_groups=single is fixed, but limit, offset, market, max_results, and response_format are not elaborated beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'List an artist's singles only' and includes the exact endpoint with the include_groups=single query parameter. It clearly distinguishes this tool from get_artist_albums and other artist-focused siblings by narrowing the scope to singles.
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: use this when you need only an artist's singles, not all albums. However, it never explicitly names alternatives such as get_artist_albums or get_artist_discography, nor does it state when NOT to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_artist_top_tracksC
Get an artist's ten most-played tracks for a market. Removed by Spotify's February 2026 Web API changes โ unavailable for newer app registrations
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Spotify artist ID | |
| market | No | ISO 3166-1 alpha-2 country code, e.g. 'US' โ defaults to the account country | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility. It does disclose the February 2026 removal and unavailability for newer apps, which is useful. However, it says 'ten most-played tracks' while the schema default is 50 and max is 2000, creating an inconsistency. It also doesn't mention errors, rate limits, or what happens when the endpoint is unavailable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The purpose is front-loaded and the deprecation warning is placed second, which is a logical order. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only fetch tool with no output schema, more guidance is needed. The deprecation is mentioned but not the workaround or alternative endpoints. The mismatch between 'ten' and the configurable max_results leaves the agent uncertain about actual behavior. A tool that may be broken in many environments needs more context than 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?
Schema description coverage is 100%, so the baseline is 3. The description does not add parameter-level detail beyond the schema, and the 'ten' wording could confuse interpretation of max_results. No severe gap, but no added value either.
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 and resource: 'Get an artist's ten most-played tracks for a market.' It is distinct from sibling tools like get_artist or get_top_tracks (which likely refer to the user's own top tracks). The 'ten' is somewhat inconsistent with the max_results parameter, but the core purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The deprecation note tells the agent when the tool is unavailable ('newer app registrations') but offers no alternative tool to use instead. There is no guidance on choosing this over sibling tools like get_artist_top_tracks or get_artist. The when-not-to-use is only partially addressed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_audiobookB
Get full details for an audiobook by ID. Audiobooks are only available in the US, UK, Canada, Ireland, New Zealand and Australia markets.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Spotify audiobook ID | |
| market | No | ISO 3166-1 alpha-2 country code. If given, only content available in that market is returned. Audiobooks are only available in the US, UK, Canada, Ireland, New Zealand and Australia markets. | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It adds only the market availability caveat, which largely duplicates the market parameter's schema text, and does not describe default market behavior, what 'full details' includes, permission needs, or response characteristics.
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 front-load the core lookup action and then add the market scope caveat. There is no filler or redundant restatement of the tool name, and 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 simple single-item getter with complete schema coverage, the essential facts are present: lookup by ID, market restriction, and output format is defined by response_format. However, with no annotations, no output schema, and many related audiobook siblings, the definition would be stronger with guidance on when to use it and what 'full details' actually returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents id, market, and response_format. The description adds no new parameter-level meaning beyond the schema, meeting the baseline for high 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 states a clear action and resource: 'Get full details for an audiobook by ID.' It indicates a singular, ID-based lookup and is distinguishable from plural/search audiobook tools, though it does not explicitly name any sibling alternative.
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 such as get_several_audiobooks, search_audiobooks, or get_audiobook_chapters. It implies the agent should already have an ID, but does not state when this tool is preferred or when another should be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_audiobook_chaptersB
List the chapters of an audiobook with pagination. Audiobooks are only available in the US, UK, Canada, Ireland, New Zealand and Australia markets.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Spotify audiobook ID | |
| limit | No | Results per page, 1โ50. Default: 20 | |
| market | No | ISO 3166-1 alpha-2 country code. If given, only content available in that market is returned. Audiobooks are only available in the US, UK, Canada, Ireland, New Zealand and Australia markets. | |
| offset | No | Index of the first chapter to return. Default: 0 | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It adds a useful market restriction ('Audiobooks are only available in...'), but otherwise mostly restates pagination, which is already visible in the limit/offset schema. It does not disclose return shape, response_format behavior, or error conditions, though these are less critical for a read-only list 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?
Two tight sentences with no filler. The action and resource are front-loaded, and the market note is a concise, useful addition.
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 schema fully documents the parameters and the core call is clear, but there is no output schema and no guidance to help an agent choose among the many audiobook-related sibling tools. The missing return-format and when-to-use notes leave it slightly under-specified.
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 all six parameters are already documented in the schema. The description adds no meaningful parameter-level detail beyond the market restriction, which is also repeated in the market parameter's schema description. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('chapters of an audiobook'), and mentions pagination. However, it does not explicitly distinguish itself from sibling tools like get_chapter, get_several_chapters, or audiobook_chapter_map, so an agent must infer the exact scope from the name and 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?
No guidance is given on when to use this tool versus get_chapter, get_several_chapters, or list_all_chapters. The market-availability note is a constraint, not usage context, and no alternatives or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_available_marketsA
List the country codes of every market where Spotify is available. Removed by Spotifyโs February 2026 Web API changes โ unavailable for newer app registrations
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the behavioral burden. It clearly indicates the tool reads market data rather than mutating anything, and it adds a significant availability caveat about the Spotify API change. It could mention what actually happens when the tool is called on a newer registration, but the deprecation status itself is meaningful transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences: the first states the operation and scope, the second adds a crucial availability warning. Every sentence earns its place, and the core purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with fully documented optional parameters, the description provides the output type (country codes), the scope (every market), and an important availability caveat. It does not explicitly state what error or fallback behavior occurs when unavailable, and it does not point to an alternative, but the overall picture is sufficient for a competent agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both max_results and response_format already documented in the input schema. The description adds no parameter-level detail, but it is not required to compensate because the schema explains the parameters fully. 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 a specific verb and resource: it lists the country codes of every Spotify market. This clearly distinguishes a broad availability-list operation from the more targeted market_validate and market_availability siblings. The deprecation note is a useful extra but does not obscure the core purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when not to use the tool by stating it was removed and is unavailable for newer app registrations, but it does not explicitly state when to use it or name a preferred alternative. The usage context is clear enough to avoid obvious misuse, but the routing guidance is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_categoriesB
List Spotify browse categories (GET /browse/categories)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Results per page, 1โ50. Default: 20 | |
| locale | No | Locale, e.g. en_US | |
| offset | No | Offset. Default: 0 | |
| country | No | ISO 3166-1 alpha-2 country code, e.g. 'US' (alias: market) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, but it only reveals the HTTP verb 'GET' and the action 'list', implying a read operation. It does not disclose pagination behavior, response shaping, rate-limit expectations, or the interplay between limit and max_results.
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 concise sentence that front-loads the core purpose and endpoint. Every word earns its place, and there is no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema documents all six parameters and the response_format enum covers return-shape choices, but with no output schema and no annotations, the description itself is minimal. It is adequate for a simple list endpoint but leaves usage context and behavior details to inference.
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 parameters like limit, offset, locale, country, max_results, and response_format are already documented in the input schema. The description adds no parameter-level meaning, which is acceptable at the 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 'List Spotify browse categories' states a specific verb and resource, and the endpoint '(GET /browse/categories)' adds precision. It is clearly distinct from the sibling get_category, which targets a single category, though it does not explicitly name the alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives like get_category_playlists, browse_category_deepdive, or category_resolver. The description only says what the tool does, not when it is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_categoryA
Get a single Spotify browse category by ID (GET /browse/categories/{id}). Quota: ๐ข single.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Locale, e.g. en_US | |
| country | No | ISO 3166-1 alpha-2 country code, e.g. 'US' | |
| category_id | Yes | Category ID from get_categories | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It explicitly shows GET, implying a read-only operation, and provides quota information ('๐ข single'). However, it does not explain required auth, error behavior, or what the returned data looks like beyond the response_format parameter in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence with no filler; the quota note is useful extra context. The explicit endpoint is slightly redundant with 'by ID' but still helpful for API-aware agents.
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 single-category lookup, the description plus schema covers the essential calling contract. However, it does not clarify how this differs from nearby tools like browse_category_deepdive or category_resolver, and there is no explanation of the concise/detailed/json response_format behavior beyond the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and all four parameters are already well-described in the schema. The description itself adds no additional parameter meaning, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action ('Get'), a precise resource ('a single Spotify browse category'), and the lookup key ('by ID'). It is distinguishable from siblings like get_categories (plural list) and get_category_playlists (playlists within a category).
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 context is implied through the endpoint and the schema note that category_id comes from get_categories, but the description does not explicitly say when to prefer this over alternatives such as get_category_playlists or browse_category_deepdive. It is adequate but not directive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_category_playlistsB
Get playlists for a browse category (GET /browse/categories/{id}/playlists)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Results per page, 1โ50. Default: 20 | |
| offset | No | Offset. Default: 0 | |
| country | No | ISO 3166-1 alpha-2 country code, e.g. 'US' (alias: market) | |
| category_id | Yes | Category ID (from get_categories) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden, but it only states a read operation and endpoint. It does not disclose auth requirements, pagination behavior, response_format effects, or the relationship between limit and max_results, all of which are relevant to how the call behaves.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with verb and resource, and the endpoint adds disambiguating detail without waste. Every element earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read with fully documented parameters this is mostly sufficient, and no output schema means return-format detail is not required. But it lacks any guidance about when to choose it over related browse/category tools and doesn't explain category_id sourcing in the description itself, though the schema does cover it.
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 every parameter. The description adds no parameter-level meaning beyond naming category_id in the endpoint, keeping this at 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?
States 'Get playlists for a browse category,' a specific verb and resource, and backs it with the exact endpoint path. It is distinct in resource from siblings like get_categories or get_category, though it does not explicitly name alternatives.
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 vs sibling browse/category/search tools such as get_categories or browse_category_deepdive. The only contextual hint is in the schema, where category_id is said to come from get_categories; the description itself offers no exclusions or selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_chapterA
Get full details for a single audiobook chapter by ID. Resume position requires the user-read-playback-position scope. Audiobooks are only available in the US, UK, Canada, Ireland, New Zealand and Australia markets.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Spotify chapter ID | |
| market | No | ISO 3166-1 alpha-2 country code. If given, only content available in that market is returned. Audiobooks are only available in the US, UK, Canada, Ireland, New Zealand and Australia markets. | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden. It adds meaningful context about a required OAuth scope for resume position and restricts audiobook availability to specific markets. This goes beyond the basic 'get details' statement, though it does not describe response shape 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?
Two sentences carry the core purpose plus the two most important caveats (scope and market restriction). There is no filler 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?
For a single-resource lookup with three parameters and no output schema, the description covers identity, scope prerequisites, and market constraints. It could be more complete by describing what fields constitute 'full details,' but it gives an agent enough to invoke 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 baseline is 3. The description itself adds no parameter detail beyond the schema; the 'by ID' phrase merely echoes id, and market/response_format semantics are already fully documented in 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 uses a specific verb and resource: 'Get full details for a single audiobook chapter by ID.' This clearly differentiates it from sibling tools like get_audiobook_chapters (list) and get_audiobook (audiobook-level details).
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 makes the usage context clear: call this when you need full details for one chapter identified by its ID. It does not explicitly name alternatives or exclusions, but the 'single ... by ID' phrasing provides sufficient routing context among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_context_inspectA
Inspect the currently-playing context (playlist/album/artist) in detail, including the position of the current track within that context when it is enumerable. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description itself must carry the behavioral burden. It explicitly marks the operation as 'Read-only' and discloses the caveat that track position is only included 'when it is enumerable.' This is useful context, though it does not describe behavior when nothing is currently playing or the exact shape of the returned detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the core purpose, names the resource, highlights the key positional feature, and ends with the read-only guarantee. There is no filler or redundant restatement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one optional parameter, the description covers the target resource, the important positional detail, and the safety profile. It could more explicitly separate itself from the many playback-context siblings, but the response_format schema fills in the main output-shape ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents the only parameter, response_format, including its enum values, default, and meaning, so schema coverage is 100%. The description adds no parameter-level detail, but none is needed because the schema already explains the choices. 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 starts with a concrete verb-resource pair, 'Inspect the currently-playing context,' and specifies the target types (playlist/album/artist). It also adds a distinguishing behavior: reporting the current track's position when enumerable. However, it does not explicitly differentiate this tool from close siblings like get_playback_context or get_currently_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?
The intended use case is implied: use this when someone needs a detailed view of the currently-playing context rather than just the current track. There is no explicit statement of when not to use it or which alternative tools to prefer, so an agent gets only indirect usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_currently_playingA
Lightweight poll of what is playing right now: the item and progress only. For full session state (shuffle/repeat mode, active device, volume) use get_now_playing instead. Also covers: get_now_playing full-state poll โ See also: get_now_playing.
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | ISO 3166-1 alpha-2 country code โ localises item names; lowercase input is uppercased; defaults to the account market | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
| additional_types | No | Item types to include in the response. Default: ['track', 'episode'] |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It clearly signals a read-only, lightweight polling behavior and scopes the returned data to 'the item and progress only.' This is useful beyond the schema, though it does not describe what happens when nothing is playing or no active device 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 core guidance is concise and front-loaded, clearly separating the lightweight use case from the full-state alternative. However, the trailing 'Also covers: get_now_playing full-state poll โ See also: get_now_playing' is redundant and slightly confusing, preventing a perfect score.
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 read-only polling tool with no output schema and no annotations, the description gives enough context to select and call it: it states what is returned, what is excluded, and points to the sibling for fuller state. It could be more complete by describing empty/no-playback behavior, but the overall context is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already well documented. The description does not add meaningful parameter-level detail, which is acceptable because the schema fully explains market, response_format, and additional_types. This aligns with the baseline score of 3 for high schema 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 identifies a specific verb and resource: a lightweight poll of what is currently playing, returning only the item and progress. It also explicitly differentiates itself from get_now_playing, which provides full session state, so an agent can disambiguate the two tools immediately.
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 explicit selection guidance: use this tool for a lightweight poll of current item/progress, and use get_now_playing instead when full session state such as shuffle, repeat, active device, or volume is needed. This directly names the alternative and the condition for choosing it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_devicesC
List available Spotify Connect devices
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, and it contributes almost nothing. 'List' implies a non-mutating operation, but the description does not disclose what the response contains, whether results reflect real-time device state, how 'available' is defined, or whether any session/authentication state is required. These gaps are meaningful in a sibling set full of device-state tools.
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 front-loaded sentence with zero filler โ the description is appropriately brief for a simple list tool and every word earns its place. It loses one point only because the tightness comes at the cost of omitting easily-addable value (e.g., response format or usage context) that would not meaningfully hurt conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool this simple โ two optional, fully-documented parameters and no nested objects โ the description is near-adequate at conveying core purpose. However, with no output schema and no annotations, the description leaves the agent guessing about return shape, the meaning of 'available' devices, and how this compares to device-related siblings, so it is only minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline of 3 applies: both max_results and response_format are fully documented in the input schema, including defaults, ranges, and enum semantics. The tool description adds no parameter information of its own, but it does not need to since the schema carries the full burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('available Spotify Connect devices'), making the core purpose unmistakable. It is clearly a read/listing operation, which naturally distinguishes it from action siblings like switch_device, mute, or rename_device, though it does not explicitly call out the distinction from device inspection tools like compare_devices or device_health.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus the many device-related alternatives (switch_device, compare_devices, list_device_presets, device_sync_state, etc.). There is no mention of when it is appropriate, what prerequisites exist (e.g., active Spotify session), or which sibling covers related but different needs. The agent must infer usage entirely from the tool name and context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_device_volume_reportA
Report volume_percent, supports_volume and active state for every Spotify device, highlighting the currently active device. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does disclose the key behavioral trait ('Read-only') plus the exact data points returned (volume_percent, supports_volume, active state) and the active-device highlight. It does not cover edge cases such as behavior when no device is active, but for a simple report tool it is otherwise 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?
Two brief sentences with zero waste. The main sentence is front-loaded with the verb and key output fields, and the second sentence efficiently appends the read-only safety signal. Nothing could be trimmed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one optional parameter, no output schema, and no annotations, the description is largely complete: it enumerates the output fields and declares read-only semantics. The main gaps are the lack of differentiation from several closely named sibling tools and no note on behavior when no device is active or when a device does not support volume.
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% โ response_format is fully documented with enum values, a default, and per-format descriptions. The tool description adds nothing about the parameter, but none is needed since the schema already carries the full meaning; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Report') and names the exact resource and fields: volume_percent, supports_volume, and active state across every Spotify device, with emphasis on the active device. It is clear and specific, but it does not explicitly differentiate itself from closely related siblings such as get_devices, volume_report, or device_sync_state.
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 only implied: an agent can infer this tool is for observing per-device volume and active-device status, and the 'Read-only' tag signals it is for observation rather than control. It provides no explicit when-to-use guidance, exclusions, or alternatives, even though the sibling list contains many overlapping tools (get_devices, volume_report, compare_devices, plan_volume_level_across_devices).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_episodeC
Get full details for a podcast episode
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Spotify episode ID | |
| market | No | ISO 3166-1 alpha-2 country code, e.g. 'US' | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
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 of disclosing behavior. 'Get full details' signals a read operation, but it does not explain whether authentication is needed, what 'full details' includes, rate limits, or any side effects. Minimal behavioral context beyond the verb 'Get'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact sentence with no filler words. It is efficient and easy to parse, though it could have used the space to add one or two additional clarifying details without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple getter with a complete schema, the description is minimally sufficient: an agent knows to pass an episode ID and will receive details. However, with no output schema and no annotations, the description does not specify the shape of 'full details' or the effect of response_format, leaving some ambiguity.
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 id, market, and response_format adequately. The description adds no extra meaning to the parameters, but since the schema carries full weight, 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 states a specific verb ('Get') and resource ('full details for a podcast episode'), making the basic purpose clear. However, it does not differentiate from the sibling tool 'get_episode_details', which could be confused with it despite the name difference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus related siblings such as get_episode_details, get_show_episodes, or get_several_episodes. The description implies a single-episode lookup but gives no context on selection criteria or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_episode_detailsA
Fetch full metadata for one episode (duration, release date, resume point, show, description). Defaults to 'concise' prose.
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | ISO 3166-1 alpha-2 market for availability, e.g. 'US' | |
| episode_id | Yes | Episode ID, spotify:episode: URI, or open.spotify.com/episode URL | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It usefully reveals that output defaults to human prose and mentions key fields, but it does not describe the actual output shape, what 'detailed' or 'json' modes return beyond schema descriptions, or any error/edge-case 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?
Two concise sentences with no wasted words. The purpose is front-loaded, the field list is compact, and the important default behavior is called out clearly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with three well-documented parameters, this is mostly adequate. The main gaps are the lack of differentiation from get_episode, no explanation of the tradeoffs between response_format modes, and no output schema or return-shape detail to compensate for the missing 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?
Schema description coverage is 100%, so the baseline is 3. The description adds a field list and restates the default prose behavior already present in the schema, but it does not add meaningful semantic detail about market or response_format beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb and resource: 'Fetch full metadata for one episode' with a helpful field list. It is clear on scope (one episode) but does not differentiate itself from the similarly named sibling get_episode, so it cannot earn a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it: when you need full metadata for a single episode. However, it gives no explicit guidance about when to prefer this over get_episode or get_several_episodes, and it does not explain when to choose 'concise' vs 'detailed' vs 'json'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_followed_artistsA
Get all artists the user follows (cursor-based pagination)
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Artist ID cursor for pagination (from previous response) | |
| limit | No | 1โ50. Default: 20 | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations carry no burden here (none provided), so the description must disclose behavior itself. 'Cursor-based pagination' is a genuine, non-obvious behavioral disclosure that tells the agent results arrive in pages tied to an artist-ID cursor. However, it does not state the read-only nature, auth reliance, response shape, or how limit/max_results interact; the one disclosed trait earns a 3 but nothing more.
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 front-loaded sentence with zero filler: verb, resource, and the key pagination behavior are all present and ordered usefully. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a relatively simple list tool, the schema covers all parameter semantics and the description names the operation and pagination mode. But with no annotations and no output schema, the agent gets no information about the return structure, cursor continuation mechanics beyond a hint, or how response_format alters the payload โ adequate for invocation, yet with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% โ all four parameters (after, limit, max_results, response_format) are fully documented with ranges, defaults, and meanings. The description only reinforces the cursor concept already present in the schema's 'after' parameter, so it stays at the baseline 3 without adding extra semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource โ 'Get all artists the user follows' โ and scopes it with 'all' and 'the user follows', which distinguishes it from siblings like get_artist (single artist) and check_following_artists (specific artist checks). The cursor-based pagination note adds further precision about the operation's scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance is provided, and no alternative tools are named. With closely related siblings such as check_following_artists, following_analytics, and export_followed_artists present, an agent must infer selection criteria entirely from the tool name and schema. The pagination hint is mechanical, not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_meA
Get the current user's Spotify profile: display name, user ID, email, country, and subscription level. Email requires the user-read-email scope; country and product require user-read-private.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavior disclosure. It goes beyond the schema by specifying the exact data fields returned and the auth scope prerequisites for certain fields, which is valuable context. It does not explicitly state read-only safety, but the 'Get' verb and profile-retrieval purpose make that reasonably clear.
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: the first front-loads the tool's purpose and returned fields, and the second states scope requirements. There is no redundant wording, and all information is relevant to selecting and invoking the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, zero-required-parameter read tool, the description is complete: it names the resource, enumerates the returned fields, and documents auth prerequisites. The input schema fully describes the only parameter, so nothing needed for 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 description coverage is 100%, and the single parameter response_format is fully documented with an enum and a clear explanation of each value. The tool description adds no additional parameter meaning, but none is needed since the schema already carries the full weight.
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 ('Get') and resource ('current user's Spotify profile') and enumerates the exact fields returned: display name, user ID, email, country, and subscription level. This clearly distinguishes it from the many sibling tools covering artists, albums, playlists, and search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear invocation context by stating the required OAuth scopes for specific fields: user-read-email for email and user-read-private for country and product. It does not explicitly name alternatives or exclusion cases, but the 'current user' phrasing strongly implies this is for the authenticated user's own profile rather than any other user.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_newly_released_episodesA
Collect episodes released since a date across ALL saved shows, merged newest-first and tagged with their show โ the unified new-episode inbox. Defaults to the last 7 days.
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | Inclusive release-date floor YYYY-MM-DD. Default 7 days ago | |
| max_shows | No | Max per-show episode lookups (request budget). Default 50 | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It clearly communicates the operation is a collection/merge, states the ordering ('newest-first'), the tagging behavior ('tagged with their show'), and the default date cutoff ('last 7 days'). It does not disclose potential cost/latency of scanning all saved shows, but the inclusive date floor and merged output are well covered.
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 filler. The core action and scope are front-loaded, and the appositive 'โ the unified new-episode inbox' efficiently positions the tool's purpose. 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?
For a tool with four optional parameters and no output schema, the description gives enough context to select it correctly: it states scope, ordering, tagging, and the default window. It does not describe the return structure, but the response_format parameter partially addresses that, and the core decision-making context is complete. Minor gap: no warning about the potential breadth of 'ALL saved shows.'
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 parameters are already well documented with defaults and meanings. The description adds only the 'last 7 days' default phrasing, which mirrors the schema's 'Default 7 days ago' and reinforces usage but does not meaningfully enrich parameter understanding 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 names a specific verb ('Collect'), a specific resource ('episodes released since a date'), and a clear scope ('across ALL saved shows'). It also adds distinguishing behaviorsโ'merged newest-first and tagged with their show'โand characterizes itself as 'the unified new-episode inbox,' which separates it from single-show tools like get_show_latest_episode or list_show_episodes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context: it is for getting new episodes across all saved shows at once, and the default 'last 7 days' suggests a recurring inbox-style use. However, it does not explicitly state when to prefer this tool over alternatives (e.g., show_new_episodes, shows_release_calendar) or mention exclusions such as 'use get_show_latest_episode for a single show.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_now_playingA
Full device/session state for what is playing right now โ item, progress, plus shuffle/repeat mode, active device, and volume. For a lightweight item+progress poll use get_currently_playing instead. Also covers: get_currently_playing lightweight poll โ See also: get_currently_playing.
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | ISO 3166-1 alpha-2 country code โ localises item names; lowercase input is uppercased; defaults to the account market | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
| additional_types | No | Item types to include in the response. Default: ['track', 'episode'] |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden; it clearly frames the operation as reading current session state and lists included fields. However, it does not disclose behavior when nothing is playing, whether playback must be active, or error/empty-response behavior, which matter for a state-polling 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 first two sentences are tight and front-load the core purpose and sibling comparison. The trailing sentence ('Also covers: get_currently_playing lightweight poll โ See also: get_currently_playing') is redundant and garbled, repeating an already stated point and reducing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-state tool, the description supplies purpose, key returned fields, and the alternative, while the schema covers parameters. But without an output schema or annotations, it omits important call-time expectations such as what happens when no device is active or no track is playing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents all three parameters with 100% coverage, including formats, defaults, and enums, so the description need not repeat them. The description adds no parameter-level detail beyond the schema, which is acceptable but provides no extra 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 names a specific resource ('full device/session state for what is playing right now') and enumerates its payload: item, progress, shuffle/repeat, active device, and volume. It also explicitly contrasts the scope with get_currently_playing, so an agent can tell it apart from the closest sibling 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?
It gives an explicit routing rule: 'For a lightweight item+progress poll use get_currently_playing instead.' This states both when to use this tool (full state needed) and when not to (lightweight poll), naming the alternative directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_playback_contextB
Resolve the current playback context URI (from GET /me/player) to catalog metadata โ playlist/album/artist/show name, owner, track count. ๐ข/๐ก (1-2 reads). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states 'Read-only' and adds a cost indicator '๐ข/๐ก (1-2 reads)', which are genuinely useful safety and cost signals. However, it omits edge-case behavior such as what happens when there is no active playback, a null context URI, or an unresolvable catalog item.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One tight, front-loaded sentence with zero filler. The verb 'Resolve' leads, followed by the input source, output fields, and a compact cost/read-only tag. Every element earns its place and no information is repeated from the 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?
The tool is low-complexity (one optional, fully documented parameter), and the description lists the main returned fields, which partially compensates for the missing output schema. Still, the description doesn't explain error behavior (e.g., no active playback context) or clarify how 'json' output is structured beyond what the schema's 'raw API object' phrase implies, so it is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: the single response_format parameter is fully documented in the schema with enum values and their meanings. The tool description adds nothing parameter-specific, but with full schema coverage the baseline of 3 applies and no compensation is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Resolve'), a specific resource ('current playback context URI'), and the concrete outputs (playlist/album/artist/show name, owner, track count). It cites its data source (GET /me/player), which helps distinguish it from nearby siblings like get_playback_snapshot or get_currently_playing, though it doesn't explicitly contrast itself with 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?
No when-to-use or when-not-to-use guidance is provided, and no alternative tools are named. Given a large sibling set with overlapping playback tools (get_context_inspect, get_playback_snapshot, get_now_playing, get_currently_playing), an agent gets no explicit direction on when to pick this tool over those. Usage is only implied by the purpose statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_playback_snapshotA
Return the full current playback state compactly: device, track/episode, position, shuffle/repeat and context. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly says 'Read-only,' which substitutes for missing readOnlyHint annotation and clearly signals safety. It also discloses that the state is returned 'compactly,' which is a behavioral trait beyond the schema. It does not mention rate limits or auth, but as a read-only snapshot call that is acceptable.
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 with no redundancy. The most important behavioral detail ('Read-only') is appended after a compact list of returned fields, and the sentence earns its place by enumerating scope that is absent from the 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?
For a read-only snapshot with one optional, enum-constrained parameter and no output schema, the description covers the return scope and safety. It could be more complete by mentioning the response_format options; however, those are already documented in the schema, and the tool is simple enough that nothing critical 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% (the only parameter response_format has a description with enum values and default). The description adds no parameter-specific guidance beyond saying the result is compact, so the schema does nearly all the work, making 3 the correct 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?
Description states specific verb ('Return'), resource ('full current playback state'), and enumerates the exact fields (device, track/episode, position, shuffle/repeat, context). It is clearly distinct from siblings like get_queue, get_queue_snapshot, get_playback_context, get_currently_playing, and describe_queue because it emphasizes the complete snapshot nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when a full, compact playback snapshot is needed, but it does not explicitly state when to prefer this over siblings like get_playback_context, get_currently_playing, or get_queue_snapshot. No exclusions or alternatives are named, so an agent must infer the boundary from the word 'full'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_playlistC
Get a playlist's metadata (including cover image) and items
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Alias for playlist_id | |
| limit | No | Items per page, 1โ100. Default: 50 | |
| offset | No | Pagination offset for items. Default: 0 | |
| fetch_all | No | Fetch all items across pages (up to 500), continuing FROM offset. limit is the page size. Note: library tools' fetch_all ignores offset โ contracts differ between modules (#110). | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | No | Playlist ID | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure, but it only states that the tool retrieves metadata and items. It does not disclose pagination behavior, default result size, the fetch_all limitation ('continuing FROM offset'), the difference between limit and max_results, or that response_format changes the output shape. The word 'Get' implies a read, but key behavioral traits are left to the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence that front-loads the verb and resource and includes the most distinctive extra detail (cover image) without wasted words. It is appropriately sized for a simple read tool, though not rich in context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the tool having seven parameters, no output schema, and a large sibling set, the description offers only 'metadata' and 'items' as the expected result. It does not explain what metadata fields appear, how pagination affects the result, or how the identifier aliases relate, leaving an agent under-informed for a reliable 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%, so the parameters are already well documented in structured form; the description adds no parameter-level meaning beyond naming the playlist. Baseline 3 is appropriate because the schema carries the heavy lifting and the description does not need to compensate.
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 a specific verb and resource ('Get a playlist's metadata') and usefully specifies that it includes the cover image and items, which distinguishes it at a glance from item-only or cover-only siblings such as get_playlist_items and get_playlist_cover. It does not explicitly name those alternatives or define the exact scope of 'metadata', so it falls just short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance about when to choose this tool over siblings like get_playlist_items, get_playlist_cover, or get_playlist_snapshot, and does not mention that id or playlist_id must be supplied despite zero required parameters in the schema. Usage context is left entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_playlist_added_datesA
List when each track was added to a playlist (added_at + added_by). Quota: ๐ข GET /playlists/{id}/items paged.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort by added_at (default added_asc) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | Yes | Playlist ID | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses that this is a GET operation with a green quota and that results are paged, which is meaningful safety and pagination context. However, it does not describe auth requirements, error behavior for private playlists, or how the response differs across the concise/detailed/json response_format values.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with zero filler: the first front-loads the purpose and output fields, the second delivers quota and pagination context. Every sentence earns its place and the description is optimally sized for what it conveys.
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 4-param tool with no output schema and no annotations, the description covers the core data fields and the API endpoint, which is adequate. It lacks detail on what 'concise' vs 'detailed' prose output looks like for this specific tool, and does not address edge cases such as unavailable added_by data or permission failures. The core listing job is clear, but an agent has to guess at response behavior beyond the raw added_at/added_by fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters including defaults and enum meanings. The description adds no parameter-level detail beyond what the schema provides, only clarifying the output fields (added_at + added_by). With full schema coverage, 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 states a specific verb and resource: 'List when each track was added to a playlist (added_at + added_by)'. The parenthetical names the exact output fields, making the scope unambiguous. However, it does not explicitly differentiate itself from the closely related sibling get_playlist_items, which uses the same underlying endpoint and could also surface added_at data.
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: an agent can infer it should call this tool when it needs added_at/added_by information for playlist tracks. There is no explicit when-to-use/when-not-to-use guidance or mention of alternatives like get_playlist_items or get_playlist_snapshot. The quota note (๐ข) hints it is a cheap read, but does not route the agent away from or toward any sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_playlist_coverC
Get a playlist's cover image URLs
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Alias for playlist_id, matching get_playlist | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | No | Playlist ID (or pass it as 'id') | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden, and it reveals nothing about behavior: no confirmation that this is a safe read, no mention of auth requirements, error behavior, or pagination semantics. The presence of a max_results parameter on a cover-image tool is genuinely surprising (a playlist normally has a single cover) and the description does nothing to explain this quirk.
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 single sentence 'Get a playlist's cover image URLs' is maximally concise, front-loaded, and contains no wasted words. However, for a tool with 4 parameters, no annotations, and no output schema, it is under-specified rather than appropriately sized โ conciseness is achieved by omitting needed context, not by economical coverage of the essential 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 and no annotations, the description must carry the burden of explaining what the agent will get back and how the tool behaves, but it explains neither. The rich schema covers parameter mechanics, yet the return shape of 'cover image URLs' (single URL vs. array, size variants), the role of max_results, and failure behavior for invalid playlist IDs are all left unspecified. An agent cannot fully predict this tool's behavior from the definition.
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 itself documents all four parameters well, including the id/playlist_id alias relationship and the response_format enum semantics. Per the baseline rule for high coverage, the description need not add parameter detail. The description adds nothing about parameters, which is acceptable here, though it misses the opportunity to explain why max_results applies to cover retrieval.
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: 'Get a playlist's cover image URLs.' This is unambiguous and clearly communicates the tool's narrow function. However, it does not explicitly distinguish this from the closely-related siblings get_playlist (which also returns image data as part of playlist details) or compare_playlist_covers / clone_playlist_cover, so it falls short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers zero guidance on when to use this tool versus alternatives. With roughly 500 siblings โ several of which (get_playlist, get_playlist_snapshot, playlist_cover_from_track) overlap with cover-image functionality โ the agent receives no help choosing between them. There is no when/when-not context, no exclusions, and no named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_playlist_followersA
Get follower count for a playlist, optionally including public owner profile
| Name | Required | Description | Default |
|---|---|---|---|
| playlist_id | Yes | Playlist ID | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
| include_profiles | No | If true, fetch the owner public profile |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It clearly indicates a read-only operation and notes the 'public' caveat on owner profiles, but does not disclose response shape, error behavior, auth needs, or what happens when profile inclusion is unavailable.
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, front-loaded sentence with no filler. Every word contributes to the core purpose and the optional profile behavior is included 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?
For a simple read-only tool with three well-documented parameters, the description plus schema is largely sufficient for correct invocation. It lacks sibling routing and deeper behavioral detail, but nothing essential to calling the tool 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 description coverage is 100%, so the schema already documents all parameters. The description adds slight clarity by linking include_profiles to the owner profile, but does not materially expand beyond the schema's own parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get'), resource ('playlist'), and metric ('follower count'), and mentions the optional profile inclusion. This clearly distinguishes it from siblings like get_playlist, get_playlist_items, or check_playlist_following.
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 alternatives such as get_playlist or check_playlist_following. No exclusions or alternative suggestions are provided, so an agent must infer usage from the name and description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_playlist_itemsC
List a playlist's items on a single page. Use market to relink tracks and flag unavailable ones, and fields/additional_types to trim the payload.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Alias for playlist_id, matching get_playlist | |
| limit | No | Items per page, 1โ100. Default: 100 | |
| fields | No | Comma-separated list of response fields to keep, e.g. 'total,items(track(name,uri))' | |
| market | No | ISO 3166-1 alpha-2 country code, e.g. 'GB'; relinks tracks to that market and flags unavailable ones | |
| offset | No | Pagination offset. Default: 0 | |
| fetch_all | No | Fetch every item across pages (up to 500), continuing FROM offset rather than restarting at 0. limit is the page size. Note: library tools' fetch_all instead ignores offset โ contracts differ between modules (#110). | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | No | Playlist ID (or pass it as 'id') | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
| additional_types | No | Item types to include beyond the default 'track', e.g. ['track', 'episode'] |
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 discloses that market relinks tracks and flags unavailable ones, but it does not mention pagination behavior, default limits, max_results semantics, response format options, or error conditions. For a read tool this is a notable 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?
Two sentences with zero filler: the primary action is front-loaded, and the second sentence efficiently groups the optional parameters by their shared purpose. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 10 parameters, no annotations, and no output schema, yet the description omits key runtime behavior such as fetch_all pagination contracts, max_results defaults, response_format handling, and how 'single page' interacts with limit/offset. It is adequate as a stub but not complete 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 coverage is 100%, so the baseline is 3. The description adds moderate value by explaining market's relinking/unavailable-flagging behavior and that fields/additional_types trim the payload, which slightly enriches the schemas. It does not comment on other parameters, but they are already well documented in 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 states a specific verb and resource ('List a playlist's items') and clarifies the single-page scope, which distinguishes it from get_playlist (metadata) and pagination-related siblings. It does not explicitly name a sibling it is not, but the 'single page' phrasing adds useful specificity.
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 parameter-level guidance (use market to relink, fields/additional_types to trim) but provides no tool-level when-to-use guidance or alternatives. Given the long sibling list, an agent is not told why to choose this over get_playlist, search_within_playlist, or export_playlist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_playlist_snapshotA
Expose snapshot_id + item count for optimistic concurrency. Quota: ๐ข 2 GETs.
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | Yes | ||
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It does add meaningful operational context by stating 'Quota: ๐ข 2 GETs,' which implies a read-only, quota-consuming operation, and it names the primary return fields. It does not cover error behavior, permission requirements, or whether the snapshot comes from the live API versus local storage.
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 with zero filler. The core purpose is front-loaded, and the quota annotation adds valuable operational detail 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?
For a simple three-parameter read tool, the description names the essential return payload and provides quota context. Still, with no output schema and a crowded family of snapshot-related siblings, a brief note distinguishing this live snapshot getter from saved-snapshot readers would make the description complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67% (max_results and response_format already have descriptions), so the baseline is 3. The description adds no parameter-level meaning; it only describes outputs. The required playlist_id remains undocumented beyond its type, leaving the agent to infer its role from the tool name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Expose' and immediately names the two key returned pieces of information (snapshot_id, item count), then adds the purpose 'optimistic concurrency.' This clearly positions it against snapshot management siblings like snapshot_playlist and list_playlist_snapshots, though it does not explicitly state that it retrieves the current snapshot for a given playlist.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for optimistic concurrency' gives a clear intended use case for when an agent would want this tool. However, it offers no explicit alternatives, exclusions, or guidance on when to prefer this over similar sibling tools such as read_playlist_snapshot, get_playlist, or get_playlist_items.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_queueB
Get the current playback queue Also covers: enriched queue via describe_queue, snapshot via get_queue_snapshot โ See also: describe_queue, get_queue_snapshot.
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden of behavioral disclosure. It only says 'current playback queue' and does not state whether this is a read-only operation, whether it has side effects, how it behaves with an empty queue, or what the returned queue contains. The 'Also covers' comment adds relation info but not behavioral transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately short and front-loaded with the core action, but the 'Also covers ... โ See also ...' structure is awkward and somewhat redundant. It could be clearer and more linear without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with full schema coverage, the essential mechanics are present, and the related-tool pointers add useful context. However, with no output schema and no annotations, the description does not explain what the response looks like or confirm the operation is safe, leaving an agent with some uncertainty.
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 both parameters (max_results and response_format) are already documented in the input schema. The description adds no parameter-level meaning beyond what the schema 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 first phrase, 'Get the current playback queue,' names a specific verb and resource, so the core purpose is clear. It also calls out describe_queue and get_queue_snapshot as related alternatives, which helps differentiation, though the 'Also covers' phrasing introduces some ambiguity about whether those are capabilities of this tool or separate 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 implies that enriched queue needs and snapshot needs are served by describe_queue and get_queue_snapshot, respectively, via 'Also covers' and 'See also.' However, it does not state explicit conditions for when to choose get_queue over those alternatives, leaving the routing mostly implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_queue_snapshotA
Return the full upcoming queue with per-track runtime and the total queue runtime. Read-only. Also covers: raw queue via get_queue, enriched view via describe_queue โ See also: get_queue, describe_queue.
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does declare 'Read-only', which is valuable. It also indicates the output includes runtime data. Missing is any note about how max_results may cap 'full upcoming queue' or whether the total runtime covers only returned tracks, leaving some behavioral ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loads the core purpose and read-only nature in the first sentence. The second sentence about sibling tools is useful but slightly awkwardly phrased ('Also covers' could mislead), preventing a perfect score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with only optional parameters and no output schema, the description covers the essential purpose, safety property, and sibling relationships. The ambiguity in the cross-reference line and the lack of detail about output shape (though hinted by 'per-track runtime and total queue runtime') keep it just shy of complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: both max_results and response_format have explicit descriptions including defaults and enum meanings. The description adds no additional parameter-level detail, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Return'), a clear resource ('full upcoming queue'), and adds distinguishing detail ('per-track runtime and the total queue runtime'). It also directly references sibling tools (get_queue, describe_queue), making differentiation easy without opening their schemas.
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 points to alternatives via 'raw queue via get_queue, enriched view via describe_queue' and 'See also: get_queue, describe_queue', giving the agent context for when those might be preferred. However, it does not explicitly state 'use this tool when X' or include a strong exclusion, so guidance is clear but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recently_playedC
Get recently played tracks with timestamps
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Unix timestamp ms โ return tracks played after this time | |
| limit | No | 1โ50. Default: 20 | |
| before | No | Unix timestamp ms โ return tracks played before this time | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It only mentions timestamps, giving a hint about the output, but does not state whether the operation is read-only, how results are ordered, whether there is pagination, or what the response structure looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no wasted words. It is efficient and easily parsed, though it might be too terse given the missing guidance and behavioral context.
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 there is no output schema and no annotations, the description is insufficient. It does not explain the meaning of 'recently', the ordering of results, the output format, or any caveats. An agent would have to infer too much.
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%, with each parameter having a description. The tool description adds no meaningful parameter context 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 states the tool retrieves recently played tracks and includes timestamps, making the core purpose unambiguous. However, it does not explicitly differentiate from siblings like get_top_tracks or listening_history_export, though the name itself is fairly distinctive.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternative tools such as get_top_tracks or listening_history_export. There is no mention of prerequisites, typical use cases, or conditions that would make this tool preferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_saved_albumsA
Get albums saved in the user's library. Set fetch_all=true to retrieve the entire collection. Output is capped by max_results (default: SPOTIFY_MCP_MAX_ITEMS).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 1โ50. Default: 20 | |
| market | No | ISO 3166-1 alpha-2 country code, e.g. 'US' | |
| offset | No | Pagination offset. Default: 0 | |
| fetch_all | No | Fetch all pages instead of one page (ignores limit/offset) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses two meaningful behaviors: fetch_all=true retrieves the entire collection, and output is capped by max_results with a default. This is useful but does not cover other behavioral aspects like return format nuance, pagination interaction beyond fetch_all, or auth/scope requirements, leaving some gaps.
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 deliver the core purpose and the two most important behavioral nuances (fetch_all and max_results cap) with zero filler. The most decision-relevant information is front-loaded, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter read tool with no output schema and no annotations, the description covers the key invocation decisions: whether to fetch all, and the cap on results. The schema already documents limit, offset, market, and response_format, so nothing needed to call the tool correctly is missing. The lack of an output schema is mitigated by the tool's self-descriptive 'albums' return type, though richer return details would be nice.
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 baseline is 3. The description adds minimal value beyond the schema: it restates the fetch_all behavior and max_results cap that are already documented in the schema. No parameter meaning is missing, but the description does not significantly enrich what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Get albums saved in the user's library', which clearly specifies the verb, resource, and scope. This differentiates it from catalog lookups like get_album or get_several_albums by anchoring on the user's saved library, and from related saved-item tools by being specifically about 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 gives usage context ('albums saved in the user's library') and operational guidance about fetch_all and max_results. However, it does not explicitly compare with search_saved_albums or other saved-item retrieval tools, so an agent may not know when to choose this over a sibling. Usage is implied rather than clearly delimited.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_saved_audiobooksA
List the audiobooks saved in the current user's Spotify library. Requires the user-library-read scope.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Results per page, 1โ50. Default: 20 | |
| offset | No | Index of the first audiobook to return. Default: 0 | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden. It adds a valuable detail about the required 'user-library-read' scope, but it does not explicitly confirm the operation is read-only, describe pagination behavior, or explain how the response_format parameter affects output. The verb 'List' implies a safe read operation, but coverage is only partial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with no wasted words. The action is front-loaded in the first sentence, and the second sentence adds an essential auth requirement. Every part 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 low-complexity list tool with a fully documented parameter schema, the description covers the essential invocation context: what it lists, whose library it targets, and what auth scope is needed. Since there is no output schema, a bit more detail about response shape or pagination could be added, but the core information an agent needs to select and invoke the tool is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All four parameters (limit, offset, max_results, response_format) have their own descriptions in the input schema, giving 100% schema description coverage. The tool description adds no parameter-specific meaning, so the baseline of 3 applies without needing to compensate for gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and a specific resource ('audiobooks saved in the current user's Spotify library'), clearly distinguishing it from sibling tools like get_saved_tracks, get_saved_shows, and get_audiobook. The scope requirement further anchors its purpose without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear context for when to use this toolโlisting the current user's saved audiobooksโand explicitly states the required OAuth scope. However, it does not mention alternatives such as search_saved_audiobooks or get_audiobook, nor any when-not-to-use conditions, leaving usage guidance implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_saved_countsA
Library size snapshot: total counts for tracks/albums/shows/episodes/audiobooks/playlists via limit=1 reads โ no item paging. Quota: ๐ข 6 GETs.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden and discloses meaningful behavior: it performs limit=1 reads (cheap, no paging) and reports an explicit quota cost of 6 GETs. It does not describe the response structure or error behavior, but for a read-only counts tool the mechanism and cost disclosure are substantial.
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 zero filler. Purpose and scope are front-loaded, and the quota line is a compact, high-value addition.
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 tool with one optional parameter, the description covers purpose, mechanism, scope, and quota. The only gap is the exact shape of the returned counts object, which is left to the response_format enum rather than described explicitly โ minor since no output schema exists.
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%: response_format's three enum values are fully documented in the schema itself. The description adds no additional parameter detail, which is acceptable at the high-coverage baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise purpose: a library size snapshot with total counts for six content types (tracks, albums, shows, episodes, audiobooks, playlists). The phrase 'no item paging' distinguishes it from the many get_saved_* siblings that return item lists rather than counts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the usage context (want counts, not items) via 'total counts... no item paging,' but it never explicitly names alternatives like get_saved_tracks/get_saved_albums or states when to choose those instead. The when-to-use 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_saved_episodesA
Get podcast episodes saved in the user's library. Set fetch_all=true to retrieve the entire collection. Output is capped by max_results (default: SPOTIFY_MCP_MAX_ITEMS).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 1โ50. Default: 20 | |
| market | No | ISO 3166-1 alpha-2 country code, e.g. 'US' | |
| offset | No | Pagination offset. Default: 0 | |
| fetch_all | No | Fetch all pages instead of one page (ignores limit/offset) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It does add useful operational detail about fetch_all retrieving the entire collection and output being capped by max_results. However, it does not describe the return format, whether results have any ordering, or what happens when limits are exceeded, so some behavioral context is missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, with the core purpose front-loaded. Every sentence adds operational value: the first states what the tool returns, the second explains the important fetch-all and output-cap behaviors.
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 zero-required-parameter read-only tool, the description plus the fully-covered schema is nearly sufficient. It explains the two most unusual behaviors (fetch_all and max_results), and the schema documents limit, offset, market, and response_format. It would be more complete with a note about the return shape, but nothing essential to invoking 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?
Schema coverage is 100%, so the baseline is 3. The description adds value beyond the schema by explaining the behavior of fetch_all ('retrieve the entire collection') and the meaning of max_results ('output is capped...'). This helps the agent reason about pagination and result sizing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Get podcast episodes saved in the user's library.' This clearly distinguishes it from sibling tools like search_saved_episodes and get_saved_shows, even without naming them, by stating exactly what is returned.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when this tool is appropriate: retrieving saved podcast episodes from the user's library. It also gives practical usage guidance on fetch_all for the full collection and max_results as a cap. It does not explicitly mention alternatives or exclusions, but the use case is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_saved_showsB
Get podcast shows saved in the user's library. Set fetch_all=true to retrieve the entire collection. Output is capped by max_results (default: SPOTIFY_MCP_MAX_ITEMS).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 1โ50. Default: 20 | |
| offset | No | Pagination offset. Default: 0 | |
| fetch_all | No | Fetch all pages instead of one page (ignores limit/offset) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing behavior. It does disclose that fetch_all=true retrieves the whole collection and that output is capped by max_results. However, it omits default pagination behavior, how response_format affects output, and does not explicitly state that this is a read-only operation (though the name implies it). This is partial disclosure, not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long and reasonably front-loaded with the core purpose. The sentence about max_results is somewhat redundant with the schema, but overall it is efficient and free of 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?
The description does not cover default pagination semantics, response format effects, or how this differs from `list_saved_shows`. Since there is no output schema and no annotations, the description should provide more context about what the tool returns and its default behavior. The schema covers parameters well, but the overall tool behavior is not fully specified.
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 baseline is 3. The description references fetch_all and max_results but adds no new semantic detail beyond what the schema already says. It does not clarify parameter interactions beyond what the schema descriptions already provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb and resource: 'Get podcast shows saved in the user's library.' This is specific and unambiguous. However, it does not distinguish itself from the sibling tool `list_saved_shows`, which appears to have a very similar purpose, 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 parameter-level usage guidance ('Set fetch_all=true to retrieve the entire collection') but provides no guidance on when to choose this tool over alternatives like `list_saved_shows`, `search_saved_shows`, or other saved-items getters. There are no exclusions or alternative tool mentions.
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 tracks saved in the user's Liked Songs. Set fetch_all=true to retrieve the entire collection. Output is capped by max_results (default: SPOTIFY_MCP_MAX_ITEMS).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 1โ50. Default: 20 | |
| market | No | ISO 3166-1 alpha-2 country code, e.g. 'US' | |
| offset | No | Pagination offset. Default: 0 | |
| fetch_all | No | Fetch all pages instead of one page (ignores limit/offset) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the burden of behavioral disclosure. It reveals that fetch_all retrieves the whole collection and that max_results caps output, including its default. It does not mention rate limits, auth needs, or the exact response shape, but the disclosed pagination behavior is valuable.
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 filler. The first sentence front-loads the core purpose, and the second adds the key behavioral options.
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 tool with 6 parameters and no output schema, the description covers the main usage decisions: pagination mode and result cap. It omits the shape/format of returned data and manual pagination details, but those are partially covered by the schema and the response_format parameter.
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 all parameters are already documented. The description largely restates the fetch_all and max_results semantics found in the schema, adding little new meaning beyond the default cap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and resource ('tracks saved in the user's Liked Songs'). This clearly distinguishes it from sibling tools like get_saved_albums, get_saved_shows, and get_saved_episodes, and from search_saved_tracks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for retrieving the user's Liked Songs and explicit guidance on when to set fetch_all=true. It does not name alternative tools, but the resource scope is specific enough to guide tool selection among the large sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_several_albumsA
Get full details for several albums by ID in a single call (up to 20 per request)
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Spotify albums IDs (1โ20 per request; longer lists are fetched in chunks of 20 and merged) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It adds a useful behavioral detailโ'up to 20 per request'โand the 'Get' wording makes the read-only intent clear. However, it does not disclose error handling, invalid ID behavior, or return format specifics, which limits transparency for a tool with zero annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no filler. It front-loads the core action ('Get full details for several albums by ID') and packs the essential constraint ('up to 20 per request') into the same phrase. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward batch retrieval tool with 100% schema coverage, the description is nearly complete. It gives the core use case and batch limit, though it has no output schema and does not describe the response structure; the response_format parameter partially covers that. Minor gap, but not a blocker 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%, so the baseline is 3. The description reinforces the 'ids' parameter by mentioning 'several albums by ID' and the 20-per-request limit, but it adds no meaningful meaning beyond what the schema already documents for max_results and response_format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb+resource combination: 'Get full details for several albums by ID.' It clearly identifies the operation, the target resource, and the batch scope, making it easy to distinguish from siblings like get_several_tracks or a single-album get_album.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly conveys that this tool is for retrieving multiple albums by ID in one call. It stops short of naming alternatives or explicit exclusion conditions (e.g., 'for a single album use get_album'), but the usage context is unambiguous and sufficient for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_several_artistsB
Get full details for several artists by ID in a single call (up to 50 per request)
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Spotify artists IDs (1โ50 per request; longer lists are fetched in chunks of 50 and merged) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden of behavioral disclosure. It mentions a batch limit but states 'up to 50 per request', whereas the ids schema says longer lists are fetched in chunks of 50 and merged โ so the description understates actual behavior and may mislead an agent into rejecting longer inputs. It also omits that the tool makes multiple underlying calls and merges results, which matters for latency and 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 that front-loads the action, resource, and key constraint with no filler. The parenthetical '(up to 50 per request)' adds the most operationally relevant detail without bloating the 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?
For a tool with no output schema and no annotations, the description should at least clarify the chunking/merging behavior and what 'full details' means. The contradiction between the description's 'up to 50 per request' and the schema's chunked-merge behavior is a significant gap, and no guidance is given on choosing this over similar sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds no parameter-level meaning beyond what the schema already provides; the phrase 'by ID' merely echoes the ids field. It does not clarify max_results or response_format beyond their existing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get'), resource ('detailed artist info by ID'), and batch scope ('several', 'up to 50 per request'). It distinguishes from sibling batch tools like get_several_tracks by naming the resource type and from get_artist by the plural/batch emphasis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the main use case: retrieving details for multiple known artist IDs in one call. However, it gives no explicit when-to-use vs alternatives (e.g., get_artist for a single ID, get_artist_top_tracks for top tracks), and with dozens of artist-related siblings, some routing guidance would help. No exclusions or conditions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_several_audiobooksA
Get full details for several audiobooks by ID in a single call (up to 50 per request). Audiobooks are only available in the US, UK, Canada, Ireland, New Zealand and Australia markets.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Spotify audiobooks IDs (1โ50 per request; longer lists are fetched in chunks of 50 and merged) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It makes clear this is a read-oriented 'Get' operation and discloses a meaningful limitation (market availability) and a batch size limit. However, it does not explicitly state that it is non-mutating or describe behavior on invalid/unknown IDs, though the schema's chunking note mitigates this slightly.
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, both informative and free of fluff. The core behavior is front-loaded, and the market limitation comes second. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple read-by-ID nature of the tool, the description plus the fully-covered schema are largely sufficient. The response_format parameter clarifies return styles, and the schema explains batching behavior. A brief note about what 'full details' contain would improve completeness, but nothing essential for calling this tool 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?
Schema description coverage is 100%, so the input schema already documents ids, max_results, and response_format thoroughly. The description adds no parameter-level meaning beyond reinforcing the 'up to 50 per request' constraint, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation: 'Get full details for several audiobooks by ID in a single call.' It specifies both the resource (audiobooks) and the batching behavior (up to 50 per request), which distinguishes it from singular tools like get_audiobook and search-oriented 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 implies the use case: fetch multiple audiobooks by ID in one call. However, it does not explicitly direct agents away from alternatives such as get_audiobook for single IDs or search_audiobooks when IDs are unknown. The market restriction is useful but is more of a constraint than usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_several_chaptersB
Get full details for several audiobook chapters by ID in a single call (up to 50 per request)
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Spotify chapters IDs (1โ50 per request; longer lists are fetched in chunks of 50 and merged) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the behavioral disclosure burden. It clearly indicates a read-only batch lookup and gives a 50-item limit, but it does not describe the response format, chunking/merging behavior, or any surprising behavior. The 'up to 50 per request' phrasing also slightly understates the schema's note that longer lists are fetched in chunks and merged.
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, front-loaded sentence with no filler. It communicates the verb, resource, batch aspect, and limit efficiently, though 'several' and 'up to 50' carry slightly overlapping 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?
The description is adequate for a simple batch getter when combined with the rich schema, but with no output schema and no annotations, the return value shape and the practical implications of the 'response_format' and 'max_results' parameters are left to inference.
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 each parameter is already documented with meaningful detail ('ids', 'max_results', 'response_format'). The description adds no additional parameter semantics beyond the ID-based lookup already visible in 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 states a specific verb ('Get'), a specific resource ('audiobook chapters'), and a batch-by-ID scope ('several... by ID in a single call'). It is clear and distinguishable from the single-chapter sibling, though it does not explicitly reference that distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'by ID in a single call' implies the intended use case: fetching multiple specific chapters at once. However, it does not explicitly say when to prefer this over get_chapter or get_audiobook_chapters, nor does it mention any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_several_episodesB
Get full details for several podcast episodes by ID in a single call (up to 50 per request)
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Spotify episodes IDs (1โ50 per request; longer lists are fetched in chunks of 50 and merged) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full burden. It discloses the batch limit but omits other behavioral traits: it does not state whether the operation is read-only (though implied by 'Get'), how it handles partial failures (e.g., invalid IDs), rate limits, or what 'full details' includes. It also does not mention that longer ID lists are chunked, which is only in the schema description.
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, compact sentence that front-loads the core action and batch limit. It is efficient and without fluff, though it could incorporate more guidance without becoming verbose. It earns its place but is slightly under-specified for a tool with multiple parameters and 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 and no annotations, the description must compensate. It does not explain the response_format parameter (how to get concise vs. detailed vs. JSON), the max_results behavior, or error handling for batch requests (e.g., partial failures). An agent calling this tool would lack crucial context on what to expect.
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 each parameter has a description. The tool description only repeats the 'up to 50' limit already present in the ids parameter. It adds no new meaning beyond the schema, so it meets the baseline for high coverage without enhancing understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get full details'), the resource ('podcast episodes by ID'), and the batch nature ('several', 'in a single call'). It also specifies the limit (up to 50), which distinguishes it from singular get_episode and other episode listing tools. The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for batch retrieval (via 'single call') but does not explicitly state when to choose this over alternatives like calling get_episode repeatedly or using get_show_episodes. There is no mention of 'use this when you need multiple episodes' or exclusions. The context is implied, not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_several_showsA
Get full details for several podcast shows by ID in a single call (up to 50 per request)
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Spotify shows IDs (1โ50 per request; longer lists are fetched in chunks of 50 and merged) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the key batching behavior (single call, ~50 items). However, 'up to 50 per request' sits in tension with the schema's ids description stating longer lists are chunked and merged, which could cause an agent to wrongly reject >50 IDs. Error behavior, handling of invalid/duplicate IDs, and output shape are not addressed (output is partially covered by the response_format parameter).
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 front-loaded sentence with zero filler: verb and resource come first, the batch constraint is included, and every word earns its place. It reads as a crisp summary rather than a padded restatement.
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 batch-fetch tool, the definition is mostly complete: no annotations or output schema exist, but the schema richly documents all parameters and the response_format enum explains output modes. Remaining gaps are the vague 'full details' wording, unspecified behavior on invalid or duplicate IDs, and the description/schema inconsistency about lists longer than 50.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with meaningful descriptions for all three parameters including defaults and enum semantics, so the baseline is 3. The tool description adds only domain context ('podcast shows', 'full details') rather than new parameter-level meaning; the parameters themselves are already well documented in 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 uses a specific verb ('Get'), names the resource ('full details for several podcast shows by ID'), and captures the batch scope in one sentence. This distinguishes it from get_show (single show), list_saved_shows (library-scoped), and the other get_several_* siblings (different resource types) without needing to open 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?
The phrase 'by ID in a single call (up to 50 per request)' implies the batch use case, but the description never explicitly states when to choose it over alternatives (e.g., get_show for a single show, list_saved_shows for saved shows) or gives exclusions. Usage context is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_several_tracksA
Get full details for several tracks by ID in a single call (up to 50 per request)
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Spotify tracks IDs (1โ50 per request; longer lists are fetched in chunks of 50 and merged) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries full behavioral burden. It mentions the 50-per-request limit but omits the chunking/merging behavior for longer lists, output format differences, defaults, and any error or rate-limit context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. It conveys the core operation, the resource, and the key limit efficiently.
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 schema is detailed and covers all parameters, but with no output schema or annotations, the description alone provides only a minimal picture. It lacks explicit return-value shape, boundary with sibling tools, and behavior when the request exceeds the stated limit.
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 ids, max_results, and response_format. The tool description adds no additional parameter meaning beyond 'tracks by ID', so a 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 states a specific verb ('Get'), resource ('tracks by ID'), and scope ('several', 'single call', 'up to 50 per request'). This clearly distinguishes it from single-track tools like get_track and search-based tools like 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 batching purpose is implied by 'several tracks by ID in a single call', but no alternatives or exclusion conditions are named. An agent must infer when to use this instead of get_track or search_tracks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_showB
Get full details for a podcast show
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Spotify show ID | |
| market | No | ISO 3166-1 alpha-2 country code | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only promises 'full details' without explaining what fields are included, how market affects results, error behavior, or the shape of the returned data. The response_format parameter is documented in the schema, but the description adds no behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused sentence with no filler. It front-loads the action and resource, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a simple lookup with three parameters, and the schema covers all parameter semantics. However, with no output schema and no behavioral detail, 'full details' is vague and the agent cannot fully anticipate the return structure or how response_format changes the result. It is minimally viable but has clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters have complete schema descriptions, so the baseline is 3. The description adds no parameter-specific meaning beyond what the schema already provides, but it does not need to compensate for missing schema 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 states a specific verb and resource: 'Get full details for a podcast show.' It clearly identifies the tool's purpose, though it does not explicitly distinguish itself from closely named siblings like get_show_details or get_show_episodes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. The description does not mention related tools such as get_show_details, get_show_episodes, or list_show_episodes, leaving the agent to infer the correct choice from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_show_detailsB
Fetch full metadata for one show (description, publisher, episode count, languages, media type). Defaults to 'concise' prose.
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | ISO 3166-1 alpha-2 market for availability, e.g. 'US' | |
| show_id | Yes | Show ID, spotify:show: URI, or open.spotify.com/show URL | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the transparency burden. It reveals that the operation is a fetch, describes the metadata categories, and notes the default 'concise' prose output. However, it does not mention error behavior, authentication needs, or what happens when a show_id is invalid.
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 compact and front-loaded, with the core action in the first sentence and the default format in the second. The parenthetical field list is useful but slightly redundant with the phrase 'full metadata'.
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 plus schema is enough to make a basic call, and the response_format parameter addresses output shape. However, without an output schema and with many sibling get_* tools, the description would be stronger if it explicitly separated this tool from get_show or get_show_episodes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameters are already well documented. The description adds some meaning by framing the output as prose vs. raw data via response_format, but it does not meaningfully extend beyond the schema's existing parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action and resource: 'Fetch full metadata for one show', and lists example fields. It is clear on its own but does not explicitly distinguish it from the sibling tool 'get_show', 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 implies the tool is for single-show metadata lookup and notes the default output mode, but it gives no explicit guidance on when to use this tool instead of alternatives like get_show, get_show_episodes, or get_episode. Usage is inferable, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_show_episodesA
[Deprecated] use list_show_episodes โ List a podcast show's episodes with pagination. Alias kept for backward compat; forwards to same GET /shows/{id}/episodes as list_show_episodes. Resume positions require the user-read-playback-position scope. Also covers: show episode listing, paged podcast episodes.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Spotify show ID | |
| limit | No | Results per page, 1โ50. Default: 20 | |
| market | No | ISO 3166-1 alpha-2 country code. If given, only shows and episodes available in that market are returned. | |
| offset | No | Index of the first episode to return. Default: 0 | |
| fetch_all | No | When true, walk all pages via getAllPages up to cap (fetch_all_cap) โ use for "all" queries. Default: false | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It discloses the deprecation, the forwarding behavior, the HTTP GET endpoint, pagination, and the user-read-playback-position scope requirement. It does not mention output format or rate limits, but for a read-only alias the key behaviors are covered.
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 important information is front-loaded: deprecation, replacement, alias, and endpoint. However, the final sentence 'Also covers: show episode listing, paged podcast episodes' is redundant filler that restates the purpose without adding 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 7 parameters are fully documented in the schema and there is no output schema, the description provides the essential context: deprecation, canonical sibling, shared endpoint, and auth scope. An agent knows to route to list_show_episodes. Return-shape details are unnecessary for a deprecated alias.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% parameter description coverage, so the baseline is 3. The tool description adds little beyond referring to pagination and the auth scope; it does not clarify parameter usage beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'List a podcast show's episodes with pagination.' It also marks the tool as deprecated and explicitly names list_show_episodes as the intended alternative, making its role as a backward-compat alias unmistakable.
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 says 'use list_show_episodes' and clarifies that this tool is an alias kept only for backward compatibility, forwarding to the same endpoint. This gives an agent clear, actionable routing guidance: avoid this tool and use the named sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_show_latest_episodeA
Return the single newest episode of a show with duration, description, and resume point โ 'what dropped last?' in one GET. Defaults to 'concise' prose.
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | ISO 3166-1 alpha-2 market for availability, e.g. 'US' | |
| show_id | Yes | Show ID, spotify:show: URI, or open.spotify.com/show URL | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It reveals the operation is a single GET, specifies the fields returned (duration, description, resume point), and states the default response style ('concise' prose). This provides meaningful behavioral context beyond the tool name and schema, though it stops short of covering edge cases or explicit side-effect guarantees.
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 names the action, resource, key return fields, and the default prose behavior with zero filler. Every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with no output schema, the description covers the essential contract: single newest episode, returned fields, and default response format. It could be slightly more complete by explicitly noting read-only/no-side-effect behavior and by naming a sibling to prefer for listing episodes, which prevents a perfect score.
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 parameters are already well documented. The description adds the return-field semantics and reaffirms the 'concise' default, but it does not add significant new parameter-level meaning. This is the expected baseline when the schema carries the parameter documentation burden.
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 ('Return') and resource ('the single newest episode of a show'), and names the return fields (duration, description, resume point). The phrase 'what dropped last?' clarifies the exact intent and differentiates this from sibling tools that list episodes or return arbitrary episode details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case: get the single newest episode rather than a list. However, it does not explicitly name alternatives like get_show_episodes or get_newly_released_episodes, nor does it state when not to use this tool. The guidance is present only by implication.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_top_artistsC
Get the user's most-played artists
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 1โ50. Default: 20 | |
| offset | No | Start position (0-based). Default: 0 | |
| time_range | No | ~4 weeks / ~6 months / all time. Default: medium_term | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure, but it is a single factual phrase that adds nothing beyond the tool name. The word 'Get' implies a read-only operation, and the schema documents parameters, but the description does not disclose output format behavior, pagination, or that it operates on the currently authorized user's history. Nearly nothing is communicated beyond what the name already implies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Six words in a single sentence, perfectly front-loaded with the action and resource. There is zero filler. It lost one point because the brevity crosses into under-specification โ the sentence is clear but sparse for a tool with five optional parameters and overlapping siblings.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description must compensate, but it does not explain return values, response format variation, or how it differs from similar siblings like top_artists_by_range. An agent has enough to guess what the tool returns, but not enough to reliably choose it or interpret its output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with every parameter documented including defaults and constraints (limit 1โ50 default 20, offset 0-based, time_range enum with duration meanings, response_format enum). Per the rubric, the baseline is 3 when the schema does the heavy lifting; the description itself adds no parameter-level meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and a concrete resource ('the user's most-played artists'), so an agent can tell at a glance what data this returns. It is distinct from get_top_tracks (tracks vs. artists) and get_artist_top_tracks (tracks for one specific artist). However, it offers no distinction from the near-identically named sibling top_artists_by_range, so it loses the fifth point.
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 alternatives. The sibling list contains overlapping tools such as top_artists_by_range, get_top_tracks, and listening_streaks, and the description gives no selection criteria, exclusions, or context about the user scope it operates on.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_top_tracksC
Get the user's most-played tracks
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 1โ50. Default: 20 | |
| offset | No | Start position (0-based). Default: 0 | |
| time_range | No | ~4 weeks / ~6 months / all time. Default: medium_term | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only says 'Get' and gives no details about output shape, how time_range affects results, what response_format does, pagination behavior, or any API caveats. The description adds no behavioral context beyond what the schema already implies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence with no filler or redundant information. It is front-loaded with the core purpose. While it is terse and missing usage guidance, as far as conciseness itself the wording is appropriately minimal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that all parameters are thoroughly documented in the schema and none are required, the minimal description is partially adequate for making a basic call. However, with no annotations and no output schema, the description does not clarify return value shape, how response_format changes the output, or how to choose among closely related sibling tools. More context would meaningfully improve selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 even though the tool description provides no parameter information. The schema already documents limit, offset, time_range, max_results, and response_format with defaults and enum values. The description adds nothing beyond the schema, but does not need to because the schema is complete.
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 a specific verb and resource: 'Get the user's most-played tracks'. It clearly conveys a read operation that returns the current user's personal top tracks, which distinguishes it from artist-centered tools like get_artist_top_tracks. However, it does not explicitly contrast it with related sibling tools such as get_top_artists or get_recently_played.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. The description only states what it does, leaving the agent to infer usage context from the name alone. It does not mention when get_top_artists, get_artist_top_tracks, or get_recently_played would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_trackB
Get full details for a track by ID
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Spotify track ID | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the burden of behavioral disclosure, but it only says 'Get full details.' It does not mention whether the result is a raw API object, prose, or how the response_format parameter affects behavior beyond the schema, nor does it note any rate limits or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. Every word contributes to understanding the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate for a simple single-track lookup, and the schema fills in response formatting details. However, with no annotations and no output schema, it would benefit from a brief note about what 'full details' includes and how this differs from sibling tools like get_several_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?
The input schema already covers both parameters with 100% description coverage, including the enum options for response_format. The tool description adds no parameter-specific meaning beyond the schema, 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 uses a specific verb and resource ('Get full details for a track by ID'), making the core purpose clear. It is distinguishable from search_tracks and get_several_tracks, though it does not explicitly name those alternatives.
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 'by ID' implies the tool is for looking up a single known track, which gives some context. However, the description gives no explicit guidance about when to prefer this over get_several_tracks, search_tracks, or track_enrichment_batch.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_playlistsC
List the current user's playlists
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 1โ50. Default: 20 | |
| offset | No | Pagination offset. Default: 0 | |
| fetch_all | No | Fetch every playlist (up to 500), continuing FROM offset rather than restarting at 0. limit is the page size. Note: library tools' fetch_all instead ignores offset โ contracts differ between modules (#110). | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden, and it only conveys read intent via 'List'. It discloses nothing about pagination behavior, the fetch_all contract quirk referenced in the schema, default result caps, or response format โ all of which matter for an agent invoking this 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?
A single five-word sentence with zero waste and the scope constraint front-loaded. It is efficient, though so minimal that it omits sibling routing and behavioral context that would earn the space.
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 tool with no output schema, no annotations, five optional parameters, and a sibling tool (get_user_playlists_by_id) that does nearly the same thing, one sentence is insufficient. The rich parameter schema covers the inputs, but return-value expectations, pagination semantics, and alternative routing 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%, so all five parameters (limit, offset, fetch_all, max_results, response_format) are already fully documented in the schema. The description adds no parameter-level meaning beyond what the schema provides, which meets the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and a resource ('the current user's playlists'), clearly stating what the tool does. The 'current user's' qualifier implicitly distinguishes it from the sibling get_user_playlists_by_id, but it never names that alternative, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance is provided, and no alternative tool is named. An agent must infer from the 'current user's' qualifier alone that this is for the authenticated user's playlists rather than another user's, with no explicit route to get_user_playlists_by_id.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_playlists_by_idA
List another Spotify user's public playlists (paginated). Removed by Spotify's February 2026 Web API changes โ unavailable for newer app registrations. Output is capped by max_results (default: SPOTIFY_MCP_MAX_ITEMS).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 1โ50. Default: 20 | |
| offset | No | Pagination offset. Default: 0 | |
| user_id | Yes | Spotify user ID | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the behavioral burden. It discloses pagination, cap by max_results, and the deprecation status. It does not describe output format details, but the schema covers response_format and no output schema means the description doesn't need to detail return values.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences carry a complete signal: what it does, its availability status, and its output cap. No filler, and the critical deprecation warning is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters, 100% schema coverage, and no output schema, the description adequately explains purpose, deprecation, pagination, and cap. It lacks an explicit alternative tool name (e.g., get_user_playlists), but the deprecation note prevents incorrect selection.
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 five parameters fully. The description adds only the deprecation context and the default max_results behavior. Baseline 3 is appropriate because the schema does the heavy lifting and the description provides marginal additional meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists another user's public playlists with pagination, and prominently notes it was removed by Spotify's February 2026 Web API changes. It uniquely identifies this as a deprecated/unavailable endpoint, which is a specific and actionable statement of what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says the tool is unavailable for newer app registrations, which is a critical usage condition. It also mentions pagination and max_results default. It does not explicitly name sibling tools like get_user_playlists as the alternative, but the deprecation note is a clear warning that this should not be used for newer apps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_profileA
Get any Spotify user's public profile (display name, follower count, profile image). Removed by Spotify's February 2026 Web API changes โ unavailable for newer app registrations
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | Spotify user ID | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It adds a critical non-obvious trait: the endpoint is removed by Spotify's February 2026 API changes and unavailable for newer app registrations. It also clarifies the operation is for public data, though it does not cover error cases or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and return fields in the first sentence, followed by the essential deprecation caveat in the second. There is no waste; every clause adds 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?
For a simple 2-parameter read tool with 100% schema coverage, the description covers the resource, returned fields, and a critical availability restriction. It lacks explicit error behavior (e.g., what happens for an invalid user_id) and does not state that no authentication scope is required, but these are minor for a well-scoped public-profile getter.
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 baseline is 3. The description adds meaning by clarifying that user_id refers to any Spotify user's ID, not the authenticated user's, which is valuable given the sibling get_me exists. It does not redundantly re-describe response_format, which the schema already documents thoroughly.
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: 'Get any Spotify user's public profile', and lists the exact fields returned (display name, follower count, profile image). The phrase 'any' clearly distinguishes this from siblings like get_me, which targets the authenticated user, so an agent can select it without inspecting other 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 gives clear context that this works for any user's public profile, which implies the appropriate use case. However, it does not explicitly name alternatives or say when not to use it, although the deprecation warning ('unavailable for newer app registrations') serves as a caution for certain environments.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
grow_playlistA
Propose tracks to grow one of your playlists using ONLY your own listening data (no recommendations): finds tracks appearing in >=2 of your OTHER playlists, boosts ones sharing an artist with the target playlist, excludes tracks already in it (and optionally your saved library), and returns top candidates with evidence. Read-only: review the proposals, then call add_to_playlist with the URIs you want.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | How many candidates to propose (default 20) | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | Yes | Target playlist ID to grow | |
| exclude_saved | No | Skip tracks already in your saved library (default true) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and handles it well: it explicitly labels the tool as 'Read-only,' describes the candidate-discovery logic, mentions the optional saved-library exclusion, and states that output includes 'evidence.' An agent gets a clear model of side effects (none) and behavior beyond what the schema alone provides.
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 dense but efficient: three sentences cover purpose, algorithm, exclusions, output, and the read-only workflow. The key scoping phrase ('no recommendations') is front-loaded, and every sentence adds value without filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexityโsix parameters, no annotations, no output schemaโthe description covers purpose, algorithm, and safety. It says the tool 'returns top candidates with evidence,' which is enough for an agent to understand the general result, but it doesn't specify candidate fields or how size and max_results interact. A bit more output-structure detail would make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds some algorithmic contextโe.g., 'optionally your saved library' maps to exclude_saved and 'returns top candidates' relates to sizeโbut it does not add meaning beyond what the schema's parameter descriptions already document, which include defaults, ranges, and response_format options.
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 verb and resource: 'Propose tracks to grow one of your playlists.' It clearly differentiates itself from recommendation-based tools by saying 'using ONLY your own listening data (no recommendations)' and lays out the exact algorithm (tracks in >=2 other playlists, artist-overlap boost, exclusions). This leaves no ambiguity about what the tool does or how it is distinct from siblings.
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 strong contextual guidance: use this when you want playlist growth from your own listening history, not recommendations, and it prescribes an explicit workflow: 'review the proposals, then call add_to_playlist with the URIs you want.' However, it does not name alternative tools or spell out when-not-to-use beyond the 'no recommendations' constraint, so it's clear but not fully exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
handoffA
Move playback to another device preserving the current track and play position (and optionally set the target volume) โ a lossless "move to the kitchen speaker"
| Name | Required | Description | Default |
|---|---|---|---|
| volume | No | Volume to set on the target device after transfer, 0โ100 | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| device_id | Yes | Target device ID to hand playback off to | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does add valuable context beyond the schema: the transfer is lossless, preserves track and play position, and optionally sets target volume. However, it does not disclose side effects on the source device (does playback stop there?), failure behavior, or requirements like active playback or device availability โ significant for a state-mutating tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with the core behavior front-loaded, then the optional volume detail, then a concrete everyday example ('move to the kitchen speaker') that makes the intent instantly understandable. No filler, no repetition of schema content, and 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?
Given no output schema, no annotations, and a rich sibling set, the description adequately covers the core action but leaves two gaps: explicit differentiation from the several near-identical device-transfer siblings, and the outcome/side-effect expectations (what the agent should report back, what happens on the source device). The well-documented parameters and the accurate core behavior keep it from falling below 3.
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 thoroughly, including defaults, ranges, and formats. The description adds marginal value by clarifying that device_id is the target and volume applies to the target device after transfer, but it doesn't address dry_run or response_format, which remain entirely schema-dependent. 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 uses a specific verb ('Move playback') with a clear resource (another device) and the defining behavior: preserving the current track and play position, with optional target volume. The 'lossless' framing and the concrete 'move to the kitchen speaker' example effectively communicate the core function. It doesn't explicitly name sibling tools like transfer_playback or switch_device, but the emphasis on preserving state distinguishes it well enough.
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 'lossless' qualifier implicitly signals when to use this tool โ when the user wants to relocate playback without losing the track or position, as opposed to a plain transfer or restart. However, the description provides no explicit when/when-not guidance or named alternatives, which is a real gap given the many adjacent siblings in the list (switch_device, transfer_playback, transfer_playback_with_state, pause_everywhere).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
history_searchA
Search local portability/backups for files matching a query (filename substring). Quota: ๐ข local only (no API).
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Substring to match (default: all) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It adds useful context: the tool is local-only, makes no API calls, and matches on filenames. However, it does not disclose other behavioral traits such as return volume, ordering, or whether results are read-only (though 'search' implies no mutation).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with no redundant words. The purpose is front-loaded in the first sentence, and the quota/scope note is efficiently placed in the second. It earns its place with zero 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 two-optional-parameter tool with no output schema, the description provides essential context: local scope, non-API nature, and filename substring matching. It doesn't explain return values, but the response_format parameter and schema cover that. The only missing piece is explicit distinction from sibling search_history, which is partially handled by 'local only (no API).'
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?
Even though the schema already describes both parameters, the description's phrase 'filename substring' adds meaning beyond the schema's generic 'Substring to match.' This clarifies that the query applies to filenames, not file contents or song metadata, which is valuable for correct usage.
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 and resource: 'Search local portability/backups for files.' It further specifies the matching criterion as 'filename substring,' making the scope precise and distinguishing it from broader search tools like search_history or 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 clear context by emphasizing 'local portability/backups' and quota '๐ข local only (no API).' This guides an agent to select this tool when working with local backup files rather than live API data, though it does not explicitly name sibling alternatives or state when not to use them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_from_sidecarA
Additive restore from a portability sidecar (library.json / playlists.json): re-adds missing saved items and creates missing playlists. Skips existing. dry_run=true by default. Quota: ๐ข local read + ๐ก contains-check + writes when dry_run=false (chunked).
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only when true | |
| input_path | No | Path to sidecar JSON (default: <portability>/library.json) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses additive behavior, idempotency (skips existing), a safe dry-run default, chunked writes when executing, and quota cost. It does not cover response/error behavior or required permissions, so it stops 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?
Three compact sentences front-load the purpose and semantics, then the dry-run default, then quota/chunking behavior. Every sentence earns its place with no filler 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?
For a tool with three optional, fully-documented parameters and no output schema, the description covers purpose, default behavior, quota, and side effects. It omits explicit return-format guidance, though the schema's response_format parameter partially covers that choice.
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 only reinforces dry_run's default and references input_path through the sidecar file names; it adds no new parameter-level semantics 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 operation: additive restore from portability sidecar files (library.json / playlists.json), with precise semantics: re-adds missing saved items, creates missing playlists, and skips existing ones. This differentiates it from siblings like restore_library_snapshot and import_profile_state by resource and behavior even though no sibling is named.
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?
Clear context is provided: use when restoring saved items/playlists from a sidecar export, with dry_run=true by default and actual writes only when dry_run=false. It does not explicitly name alternative tools or state when not to use it, which prevents a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_playlistA
Parse an M3U or CSV document (the inverse of export_playlist) and append its Spotify URIs to a target playlist. Pass the document inline via content or read it from input_path. Skips non-Spotify lines, dedupes within the batch, and adds in batches of 100. Use dry_run=true to preview without writing.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Document format; auto-detected when omitted | |
| content | No | The M3U or CSV document body, passed inline | |
| dry_run | No | Parse and report what would be added without touching the playlist | |
| input_path | No | Read the document from this local file instead of content | |
| playlist_id | Yes | Target playlist ID or spotify:playlist: URI | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It covers key non-obvious behaviors: skips non-Spotify lines, dedupes within the batch, adds in batches of 100, and supports a dry-run mode. It does not mention idempotence relative to existing playlist contents or error paths, so it is strong but not exhaustive.
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 with no filler. The operation and input modes are front-loaded, and the preview safety mechanism comes last. 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 6-parameter tool with no output schema and no annotations, the description explains input sources, accepted formats, filtering, deduplication, batching, and dry-run behavior. The main gap is the lack of detail about what the response contains after a successful import, though the response_format parameter partially covers that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all parameters. The description adds real meaning beyond that by explaining how content and input_path are alternative input modes, clarifying the dry_run behavior, and framing format as M3U/CSV parsing. This is a solid enrichment over the structured 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 names a specific verb ('Parse and append'), a precise resource ('Spotify URIs to a target playlist'), and the input formats (M3U or CSV). It also identifies itself as the inverse of export_playlist, which clearly distinguishes it from related tools like add_to_playlist or batch_add_to_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?
It gives clear usage context: pass the document inline via content or via input_path, and use dry_run=true to preview without writing. It does not explicitly state when to choose this over sibling tools beyond the 'inverse of export_playlist' comparison, so it stops short of full when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_profile_stateA
Restore local sidecar stores from a profile-state archive. Merge adds to existing stores; overwrite replaces them. Refuses archives newer than this server's schema version.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | merge = add to existing stores; overwrite = replace them | merge |
| input_path | Yes | Path to the profile-state archive JSON file | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It does disclose the two behavioral modes and the refusal of newer archives, which is genuinely useful. However, it only implies the destructive nature of overwrite ('replaces them') without warning about data loss or irreversibility, and it omits auth or side-effect 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?
Three short sentences all contribute: purpose, mode semantics, and version guard, with the core statement front-loaded. A point is lost because the second sentence duplicates what the schema already says for the mode parameter.
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 3-parameter tool the core semantics are covered, but with no output schema the description does not convey what a successful response looks like, and with no annotations it does not warn about the permanence of overwrite mode. It is adequate but has clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents input_path, mode, and response_format. The description's merge/overwrite sentence largely restates the mode parameter's description rather than adding new parameter-level meaning, so it stays at the 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 verb and resource: 'Restore local sidecar stores from a profile-state archive.' This immediately clarifies that this tool is the restore counterpart to the sibling export_profile_state and distinguishes it from restore_library_snapshot or restore_playback_state, which target different resources.
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 conveys what the tool does under each mode and the schema-version precondition, which implies when it should be invoked. However, it never names near-alternatives such as import_from_sidecar or restore_library_snapshot, nor does it state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_toolA
Show one tool's full description and input schema before calling it
| Name | Required | Description | Default |
|---|---|---|---|
| tool_name | Yes | Exact registered tool name | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of explaining behavior. It clearly conveys that the tool is read-only introspection ('Show'), but it does not explicitly state that it has no side effects, does not invoke the target tool, or what happens for invalid tool names. These are minor gaps for a simple inspection 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, front-loaded sentence with zero filler. Every word earns its place, and the core action is immediately clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple introspection tool, the description plus the complete input schema covers what an agent needs to call it correctly. It does not describe output beyond what the response_format enum implies, but that is largely self-explanatory. Minor missing context includes error behavior for unknown tool names.
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 both parameters and their meanings. The description adds no extra parameter-level detail, but that is acceptable given the schema's completeness. The response_format enum is fully described in 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 tool's function: showing a single tool's full description and input schema. It uses a specific verb and resource, and the 'before calling it' phrasing adds intent. However, it does not explicitly distinguish itself from sibling meta-tools like find_tool or toolset_report.
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 'before calling it' implies when to use the tool: prior to invoking another tool. But there is no explicit guidance about when not to use it, no mention of alternatives, and no indication of how it differs from other inspection or discovery tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
interleave_playlists_planA
Plan (and optionally commit) interleaving 2โ10 playlists โ round-robin one track each or in N-track chunks. Without a target it returns the interleaved PLAN read-only; with target_playlist_id and dry_run=false it atomically overwrites the target. Quota: ๐ข N GETs + 1 PUT when committing.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Pass false to commit. Default true | |
| strategy | No | round_robin = 1 track per playlist per pass; chunk = N per pass. Default round_robin | |
| chunk_size | No | chunk strategy: tracks per playlist per pass (1โ20). Default 3 | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_ids | Yes | Playlists to interleave (2โ10), in round order | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
| target_playlist_id | No | Existing playlist (ID or URI) to atomically overwrite with the interleave. Omit = read-only plan |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states the read-only plan behavior, the atomic overwrite side effect with the required conditions, and even the quota impact (N GETs + 1 PUT). This is genuinely transparent for a tool that can mutate state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with no filler: purpose, mode semantics, and quota. The most important distinction (plan vs commit) is front-loaded, and every sentence contributes actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter tool with no output schema and no annotations, the description covers the core call pattern, the dual read/write mode, and the quota. It stops short of detailing edge cases such as what happens if target_playlist_id is also among the sources, or how response_format changes the PLAN, but the 100% schema coverage compensates for most of that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, giving a baseline of 3. The description goes beyond the schema by explaining the interaction between target_playlist_id and dry_run, and by framing playlist_ids range and strategies in plain terms ('round-robin one track each or in N-track chunks'). This adds meaning to the parameter relationships beyond individual field docs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'interleaving 2โ10 playlists' with round-robin and chunk strategies. It clearly distinguishes itself from generic playlist tools by explaining the interleaving behavior and the optional commit mode. An agent can immediately tell what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear conditional usage guidance: without a target it returns a read-only PLAN; with target_playlist_id and dry_run=false it atomically overwrites. It does not explicitly name sibling alternatives (e.g., merge_playlists_plan) or state when not to use it, so it stops short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
is_local_censusA
Count your saved tracks flagged as local files (is_local true) and list them โ these often fail to play on other devices. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| scan_cap | No | Max saved items to walk per paginated source (default: SPOTIFY_MCP_FETCH_ALL_CAP) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It discloses the read-only nature and the count-plus-list behavior, plus the practical significance of local files. It does not disclose pagination/truncation behavior or performance characteristics of walking up to 10,000 items.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One tight sentence plus a read-only tag, front-loaded with the action. Every clause earns its place: the is_local=true clarification, the cross-device relevance, and the safety note.
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 read-only census tool with fully documented parameters, the core operation and rationale are covered. It could be more explicit about truncation and output-format outcomes, but nothing critical is ambiguous 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%, so the schema already documents scan_cap, max_results, and response_format with defaults and semantics. The description adds no parameter-level detail, which is appropriate given the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: counts and lists saved tracks flagged is_local=true. The parenthetical ties directly to the tool name, making its purpose unambiguous. The practical note about tracks failing on other devices reinforces what the tool is for.
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 context ('these often fail to play on other devices') that implies when an agent would care, but names no alternatives or exclusion conditions. With nearby siblings like unplayable_saved_check and dead_library_finder, explicit routing would be more helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
is_valid_spotify_uriA
Boolean validity check for a single Spotify reference โ true only for well-formed spotify: URIs with a 22-char base62 ID; evaluated locally.
| Name | Required | Description | Default |
|---|---|---|---|
| uri | Yes | Spotify reference to check |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well: 'evaluated locally' discloses that no API call is made, and 'true only for well-formed spotify: URIs with a 22-char base62 ID' precisely defines the acceptance criteria. It does not explicitly state whether invalid input returns false versus throwing, but the 'true only for' phrasing strongly implies a pure boolean result.
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 well-structured sentence with zero fluff. Every component earns its place: return type (boolean), scope (single), validity criteria (spotify: URI, 22-char base62), and behavior (evaluated locally). The most decision-relevant information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 1-parameter pure validation function with no output schema, the description covers purpose, return type, acceptance criteria, and local evaluation. The only minor gap is the lack of explicit statements about edge-case handling (e.g., whether non-URI strings yield false or an error), but given the tool's simplicity, nothing critical 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% and the schema already describes the parameter as 'Spotify reference to check', so the baseline is 3. The description adds meaningful value by clarifying the expected format โ spotify: URIs with 22-char base62 IDs โ which disambiguates the parameter beyond the schema's generic wording.
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 ('Boolean validity check'), a precise resource ('single Spotify reference'), and exact validity criteria ('well-formed spotify: URIs with a 22-char base62 ID'). However, it does not name or differentiate from direct sibling tools like validate_spotify_uri, parse_spotify_uri, or classify_spotify_uris, so an agent must infer the distinction from the word 'Boolean' alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (when a boolean, locally-evaluated validity answer is needed) and hints at scope ('single'), but it provides no explicit when-not-to-use guidance or alternatives such as 'use validate_spotify_uri for detailed validation errors'. The usage context is inferable but never stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
join_uri_listA
Join an array of Spotify references into a single delimited string โ comma, semicolon, newline, or a custom glue; local only.
| Name | Required | Description | Default |
|---|---|---|---|
| uris | Yes | References to join | |
| separator | No | Glue between items; common choices ',', ';', or '\n' | , |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does contribute the key constraint 'local only' plus the output form. It does not disclose behavior for empty arrays, invalid references, or how the response_format parameter changes the returned value, so transparency is partial.
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 front-loaded sentence communicates operation, delimiter options, and locality with no filler. Every clause adds information relevant to tool selection.
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 small local utility, the description plus fully documented schema is nearly complete: the agent knows what it receives, what it returns, and that no API call is made. The main gap is that response_format's 'json'/'detailed' output shapes are not reconciled with the promised 'single delimited string'.
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 description need not re-document parameters. It does re-state common separator choices that are already in the separator parameter description, adding little 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 states a clear verb ('Join') and resource ('array of Spotify references') and specifies the outcome ('single delimited string'). It also scopes behavior ('local only'), separating it from network-backed Spotify tools and the inverse operation split_uri_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it โ when a delimited string is needed from a list of references โ and 'local only' signals it is a pure utility rather than a Spotify API call. However, it never names the natural alternative (split_uri_list) or states when not to use this tool, so usage guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jump_to_chapterA
Start playing a specific audiobook chapter (1-based number) by resuming the audiobook context at that chapter. Use dry_run to preview without touching playback.
| Name | Required | Description | Default |
|---|---|---|---|
| chapter | Yes | Chapter to play, 1-based (first chapter = 1) | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| device_id | No | Device to play on. Default: active device | |
| audiobook_id | Yes | Spotify audiobook ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the disclosure burden. It clearly states that the tool starts playback, can resume the audiobook context at a chapter, and that dry_run previews without touching playback. It does not fully explain what a successful run returns or what happens when no device is active, but the core side effect is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The main action is front-loaded, the chapter numbering is clarified immediately, and the dry_run safety behavior is given a single compact sentence. Every part 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?
The description covers the essential action and the dry_run safety mechanism, but there is no output schema and no annotation coverage. It does not mention expected return values, failure modes, or prerequisites such as requiring an active device. For a playback-mutating tool, an agent would benefit from at least a note about what a successful invocation reports back.
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 audiobook_id, chapter, device_id, and dry_run clearly. The description adds little beyond reinforcing 1-based chapter semantics and the dry_run preview behavior, which means it stays at the baseline rather than adding meaningful parameter insight.
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 a specific verb ('Start playing'), a concrete resource ('audiobook chapter'), and clarifies the 1-based numbering plus the dry_run option. It does not explicitly name or contrast sibling tools, but the audiobook-chapter focus clearly sets it apart from generic playback tools like play or play_on.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when an agent wants to start playing a specific audiobook chapter or preview that action via dry_run. However, it does not state when not to use it or mention alternative tools such as play_on, seek, episode_resume, or resume_playback_position, so an agent must infer selection from the audiobook-specific wording.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
label_discography_explorerA
Group an artist's albums and singles by record label (via batched /albums?ids= payloads) and rank labels by release count with year ranges. Quota: ๐ด paginated walk + batched /albums lookups.
| Name | Required | Description | Default |
|---|---|---|---|
| artist_id | Yes | Spotify artist ID, URI, or URL | |
| max_results | No | ||
| include_groups | No | Comma-separated album groups: album,single,appears_on,compilation. Default: album,single | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It proactively discloses an expensive quota profile ('paginated walk + batched /albums lookups'), which is valuable behavioral information for an agent deciding whether to invoke it. It could go further by stating read-only status or approximate request counts, but the quota warning is a strong 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?
Two sentences with no filler. The core purpose is front-loaded, and the quota/implementation detail is compact but informative. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description conveys the main output concept (labels ranked by release count with year ranges) and warns about quota, which covers basic invocation. However, there is no output schema, and the description does not specify response format variants or provide enough context for an agent to fully anticipate the result shape. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75%, and the tool description adds no parameter-specific meaning beyond what the schema already provides. Max_results lacks a description, but the schema constraints compensate; 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?
States a specific verb ('Group'), a specific resource (an artist's albums and singles), and a specific organizing dimension (record label, release count, year ranges). This clearly distinguishes it from sibling tools like label_explorer, artist_discography_explorer, and saved_albums_by_label.
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. There is no mention of preferred contexts, exclusions, or trade-offs compared to label_explorer or artist_discography_explorer. The quota note hints at cost but does not help route selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
label_explorerB
Census of record labels across your saved albums (label comes from chunked full-album fan-in); pass a label name to list just that label's albums in your library. Quota: 1 walk + 1 /albums?ids= call per 20 albums.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | Exact-ish label name to filter to (case-insensitive) | |
| saved_cap | No | Max saved albums scanned. Default: 500 | |
| max_results | No | ||
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full disclosure burden. It adds useful behavioral context: label data comes from 'chunked full-album fan-in' and there is a quota of '1 walk + 1 /albums?ids= call per 20 albums'. It does not, however, disclose what the census output actually contains or how missing/empty label results behave.
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 deliver purpose, provenance, optional filtering behavior, and quota with no filler. The only minor issue is that 'chunked full-album fan-in' is jargon-heavy and may obscure rather than clarify.
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 read-only census tool with no required params, this is mostly usable: it says what it does, how to filter, and what resource cost to expect. Still, it lacks alignment with overlapping siblings (especially saved_albums_by_label), leaves max_results undocumented, and does not describe census output shape without an 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?
Schema coverage is 75%, so the schema already documents most parameters. The description adds meaningful semantics for the 'label' parameter by explaining it filters to just that label's albums in the library. It provides no additional meaning for 'max_results', and only indirectly implies the scan cap via quota language.
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 names the resource ('record labels'), the scope ('across your saved albums'), and the optional filtering behavior ('pass a label name to list just that label's albums'). It reads as a distinct census/list operation, though it does not explicitly differentiate itself from the similarly named sibling saved_albums_by_label.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the main use case: summarizing labels from saved albums, with label filtering as an alternative invocation. However, it offers no guidance on when to choose this tool over near-synims like saved_albums_by_label or label_discography_explorer, and no exclusions or prerequisite conditions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
last_heardA
For 1-10 artists: when did you last actually play them (recently-played cursor walk) + the gap โ answers "when did I last listen to X?" without guessing. Quota: ๐ก 2-10 pages walked (max_pages, disclosed; stops early once all found).
| Name | Required | Description | Default |
|---|---|---|---|
| artists | Yes | Artist names to look up (1-10) | |
| max_pages | No | Max recently-played pages to walk (default 10) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it does substantial work: it clarifies that 'actually play' means real playback rather than saved status, exposes the underlying walk mechanism, and discloses the page quota and early-termination behavior. It does not address the notable edge case of an artist not found within the walked window, nor explicitly confirm the operation is read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, with the core purpose and query intent front-loaded in the first sentence and cost disclosure in the second. Nearly every clause is load-bearing, but the parenthetical in the quota sentence ('max_pages, disclosed; stops early once all found') is slightly dense and could be parsed more cleanly.
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 moderate-complexity tool with 3 fully documented parameters and no output schema, the description covers purpose, mechanism, quota, and intended user question. Output shape is partially covered via '+ the gap' and the response_format enum in the schema. The main remaining gap is the not-found edge case and a precise description of the return payload, since no output schema exists to fill that in.
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 three parameters and the baseline is 3. The description adds a small amount of meaning by tying max_pages to the disclosed quota ('stops early once all found'), but it adds nothing beyond the schema for artists or response_format. The added value is modest, not enough to push above 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 uses a specific verb-plus-resource framing ('when did you last actually play them') and names the mechanism ('recently-played cursor walk') plus the computed output ('+ the gap'). It clearly answers the question 'when did I last listen to X?', which distinguishes its intent from raw-history siblings like get_recently_played. However, it never names a sibling explicitly, so differentiation is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a concrete use case โ answering 'when did I last listen to X?' for 1-10 artists 'without guessing' โ which tells an agent when to select it. It also discloses quota behavior (๐ก 2-10 pages, early stop), which helps with cost-aware tool selection. It does not state exclusions or name alternatives, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
library_coverage_reportA
Report coverage between your saved tracks and playlists: orphan saved tracks (liked but not in any playlist) and unsaved playlist items. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| scan_cap | No | Max items to walk per paginated source; default SPOTIFY_MCP_FETCH_ALL_CAP | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| max_playlists | No | How many playlists to scan (default 50, max 100) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
| include_not_saved | No | Include unsaved playlist items (default true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the behavioral disclosure burden. It explicitly states 'Read-only,' assuring no mutation, and it describes what the report contains. It could add caveats about scan caps or pagination, but the read-only guarantee is meaningful and clearly disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the core purpose is front-loaded, the output categories are named, and the read-only safety trait is stated. 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 6-parameter report tool with no output schema, the description gives enough orientation: it names what is reported and confirms no side effects. Since the input schema fully documents all parameters, the remaining gap is mostly the lack of routing guidance against similarly named 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 description coverage is 100%, so the description does not need to reinvent parameter docs. The description references the two output categories but does not add meaning beyond what the parameter schema already provides. This is an appropriate baseline for fully self-documenting parameters.
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 a specific verb and resource: 'Report coverage between your saved tracks and playlists,' and enumerates the two computed categories (orphan saved tracks and unsaved playlist items). It is clear and specific, but it does not explicitly distinguish itself from close siblings like saved_vs_playlist_coverage or unsave_orphan_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 implies a clear usage context: analyze gaps between saved tracks and playlists. However, it provides no explicit when-to-use guidance, no alternatives, and no exclusion criteria relative to overlapping report or mutation tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
library_genre_reportA
Aggregate your saved library by user-declared genre tags. Scans all saved tracks and albums, joins each item's artists against your tag sidecar (see tag_management), and reports per-genre track/album counts plus the contributing artists. Genres are unavailable from Spotify itself, so only artists you have tagged appear here.
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses meaningful traits: a full-library scan (cost implication), a join against the user's tag sidecar (external dependency), and a coverage limitation ('only artists you have tagged appear here'). It does not mention read-only safety, pagination, or performance explicitly, but for a read-style report tool the disclosed traits are substantive.
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 with zero waste: purpose first, mechanism second, limitation/why third. Each sentence earns its place and the most decision-relevant fact (user-declared tags, not Spotify genres) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter aggregation tool with fully documented schema and no output schema, the description covers purpose, data dependency, report contents (per-genre counts plus artists), and coverage boundaries. Minor gaps remain: no guidance on what happens with zero tags, no explicit note that the full-library scan may be slow, and no pointer to sibling genre tools for contrast.
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% โ both max_results and response_format already carry their own descriptions, including defaults, enum values, and semantics. The tool description adds no parameter-specific detail beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Aggregate your saved library by user-declared genre tags') and then details the mechanism: scanning saved tracks/albums, joining against the tag sidecar, and reporting per-genre counts plus contributing artists. It also differentiates itself from genre tools that use Spotify's own genre metadata ('Genres are unavailable from Spotify itself'), which helps distinguish it from siblings like top_genre_census and genre_trends_over_time.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when this tool applies: it is the right choice when genre aggregation depends on user-declared tags rather than Spotify's genre data, and it references tag_management as the data dependency. However, it never explicitly names alternatives or states when NOT to use it (e.g., when the user wants Spotify-sourced genre stats), so exclusions are left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
library_growth_reportA
How fast your library is growing โ buckets saved tracks/albums/shows/episodes by added_at period (weekly/monthly/yearly). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Bucket size (default monthly) | |
| lookback | No | How many periods back (default 12) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it does disclose the key behavioral trait 'Read-only' as well as the bucketing-by-added_at behavior. It does not, however, describe what the report output contains (counts, deltas, growth percentages) or any volume/cost caveats, leaving the result semantics to the agent's inference.
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 front-loaded sentence states the core question, the aggregation method, the covered content types, the periods, and the read-only guarantee. Every phrase earns its place, with no repetition of schema contents.
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 low-complexity tool with three optional, fully documented parameters, the description plus schema is nearly sufficient to invoke the tool correctly. The gaps are the lack of differentiation from the similarly named `library_growth_timeline` sibling and the absence of any description of the return content (and there is no output schema to fill that void), so an agent could plausibly mis-select or misunderstand the result.
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% โ all three parameters (period, lookback, response_format) have explicit descriptions, defaults, and enums, so the schema does the heavy lifting. The description adds marginal value by tying the period values to the added_at bucketing basis and enumerating the content types counted, which is slightly beyond the schema but does not compensate for anything missing.
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 a specific resource ('saved tracks/albums/shows/episodes'), an aggregation basis ('added_at period'), and the grouping granularity ('weekly/monthly/yearly'), so an agent can tell what this tool computes. However, it does not distinguish itself from the sibling `library_growth_timeline`, which plausibly covers nearly the same question, so it falls short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The opening phrase 'How fast your library is growing' implies the tool is for growth-rate questions, giving an agent a reasonable cue for when to invoke it. But no explicit when-to-use/when-not-to-use guidance is provided, and no alternative tools (e.g., `library_growth_timeline`, `saved_library_delta`) are named for comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
library_growth_timelineB
Show how fast your saved-track library grew: adds per month, busiest month, and your longest/current monthly add streaks. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| scan_cap | No | Max saved items to walk per paginated source (default: SPOTIFY_MCP_FETCH_ALL_CAP) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral transparency burden. It does state 'Read-only,' which clearly indicates no destructive or mutating side effects, but it does not mention potential costs such as paginating a large library, rate limits, or the effect of scan_cap on results. Adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that opens with the action and resource, then lists concrete outputs after a colon. It includes the useful 'Read-only' safety note with no filler or redundant phrasing.
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 names the key returned insights and the read-only nature, which is largely sufficient for a reporting tool with no output schema. It could add a bit more context about the scope of the scan or how it relates to library_growth_report, but nothing essential to invoking the tool 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 description coverage is 100%, so scan_cap, max_results, and response_format are already fully documented in the input schema. The description adds no extra parameter-level detail, matching the baseline of 3 when the schema handles the documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Show') and names the resource ('saved-track library') with concrete outputs: adds per month, busiest month, and monthly add streaks. It does not explicitly distinguish itself from the sibling library_growth_report, so it falls just short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given for when to use this tool versus similar siblings like library_growth_report, listening_streaks, or saved_library_delta. The metrics list implies a reporting use case, but there are no trigger conditions, exclusions, or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
library_hygieneA
Read-only album completion & consolidation analysis over your liked tracks: flags near-complete albums worth saving in full and lone singles with nothing else liked from their artist (low confidence). Suggests only โ never mutates your library.
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It explicitly states the critical behavioral trait: 'Read-only' and 'Suggests only โ never mutates your library.' This is important for an agent deciding whether it can safely run this tool. It also discloses the low-confidence caveat for lone singles, but does not cover other potential behaviors like rate limits, output size, or failure modes.
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 that front-loads the key information and avoids redundancy. The parenthetical '(low confidence)' and the explicit 'never mutates' earn their place. Slight deduction because the phrase 'consolidation analysis' is jargon that is only partially clarified by the subsequent flag explanation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with fully documented schema and a straightforward suggestion-only behavior, the description covers the essential selection and invocation context. It describes the input domain ('liked tracks') and the outputs ('flags...'). With no output schema, it could have been more explicit about the exact return shape, but the 'flags' wording provides a sufficient mental model without overcomplicating.
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% โ both max_results and response_format have descriptive text in the schema. The description adds no additional parameter semantics beyond what the schema already explains, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-resource pair: 'Read-only album completion & consolidation analysis over your liked tracks.' It then concretely defines what it flags (near-complete albums, lone singles) and explicitly states that it only suggests, never mutates. This distinguishes it from the many library analysis siblings like dead_library_finder or library_coverage_report, which address different questions.
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 intended use case is implied through the scenario it describes โ checking liked tracks for album completion and orphaned singles โ but it does not name alternatives or state conditions like 'use this when you want to find albums worth saving.' No when-to-use versus when-not-to-use guidance is provided, leaving the agent to infer the selection from the description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
library_snapshot_diffA
Diff two portability/library sidecar JSON files (library.json or playlists.json): added/removed counts + samples. Quota: ๐ข local only (no API).
| Name | Required | Description | Default |
|---|---|---|---|
| after_path | Yes | Path to after snapshot JSON | |
| before_path | Yes | Path to before snapshot JSON | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It usefully states that this is local-only with no API calls and that output is added/removed counts plus samples. However, it does not explicitly say the operation is read-only, does not modify the sidecar files, or what happens with invalid/missing paths. These are notable but not severe gaps for a non-mutating diff tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The core action and output are front-loaded, and the quota/safety note is separated clearly. 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 simple three-parameter local diff tool with no output schema and no annotations, the description covers the essential context: the input files, the kind of diff results, and the local-only quota. It could say a bit more about the direction of the diff (what 'added' vs 'removed' means relative to before/after) and what 'samples' look like, but overall an agent can call this correctly with reasonable confidence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents all three parameters, so baseline is 3. The description adds value beyond the schema by specifying that the paths refer to 'portability/library sidecar JSON files' and narrowing them to 'library.json or playlists.json', which helps the agent select appropriate values. The response_format parameter is already well-described in the schema, so no further compensation is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Diff'), a specific resource ('two portability/library sidecar JSON files'), and the output shape ('added/removed counts + samples'). It also names the exact file types (library.json or playlists.json), which distinguishes it from snapshot-diff and playlist-diff siblings without needing to inspect their schemas.
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 use case is implied: you would call this when you have two sidecar JSON files and want to compare them. However, it does not explicitly contrast with closely related siblings like diff_since_snapshot or diff_playlist_snapshots, nor does it state when not to use it. The local-only quota note adds context but is not an alternative-selection guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
library_to_playlistA
Export your saved tracks (or saved albums' first tracks) into a NEW playlist โ sort by save order, cap at N, chunked adds. Quota: ๐ก getAllPages + create + chunked adds.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Which saved shelf to export. Default tracks | |
| name | No | Playlist name. Default "Liked Songs export YYYY-MM-DD" | |
| limit | No | Max items to export. Default 500 | |
| order | No | Export order. Default added_asc | |
| public | No | Public visibility for a newly created playlist. Default: private | |
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Default true โ pass false to commit. | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden for disclosing side effects. It explicitly signals a mutating operation ('NEW playlist', 'chunked adds') and even discloses the API call pattern ('getAllPages + create + chunked adds'). The quota note is a useful behavioral hint. It does not mention the dry_run default, but that is documented in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused sentence plus a compact quota note. Every element earns its place: the action, the source, the output, the ordering, the cap, the chunking, and the quota cost. No filler or repetition beyond the acceptable 'chunked adds' mention in both parts.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is no output schema and no annotations, the description does a good job of covering the core purpose, the mutating nature, and the quota implications. The missing explicit alternative routing and lack of emphasis on the safe dry_run default are minor gaps, especially since the schema fully documents parameters and defaults.
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 baseline is 3. The description adds a small amount of semantic color ('saved albums' first tracks', 'sort by save order', 'cap at N') that maps to the 'from', 'order', and 'limit' parameters, but it does not substantially enhance the parameter documentation already present in 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 uses a specific verb and resource: 'Export your saved tracks (or saved albums' first tracks) into a NEW playlist'. It clearly distinguishes this from sibling operations by emphasizing the creation of a new playlist from library contents, and the added details about sort order, cap, and chunking make the purpose unmistakable.
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 clear context for when to use this tool: whenever a user wants to turn saved tracks or albums into a fresh playlist. It does not explicitly name alternatives or exclusion criteria, but the function is distinct enough among the large sibling list that an agent can infer the appropriate use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
library_value_summaryA
One mega-report over your saved library: totals, runtime, explicit/local/unplayable counts, collab + featuring density, growth streaks, era histogram, duplicate-version and edition-lint counts, and top artists. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: report the request cost of the scan without performing it (default false) | |
| scan_cap | No | Max saved items to walk per paginated source (default: SPOTIFY_MCP_FETCH_ALL_CAP) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. It does add 'Read-only,' which communicates that no mutations occur. However, it doesn't disclose potential cost or latency of scanning the library, which would be valuable given the dry_run and scan_cap parameters suggest an expensive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with the tool's purpose, enumerates the report's components in a compact list, and ends with a useful read-only disclaimer. Every part earns its place with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description enumerates the report's key sections, which is especially helpful because there is no output schema to describe return values. It could add more operational context around scan cost or pagination, but those aspects are already hinted by dry_run and scan_cap parameters in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are fully documented in the schema itself. The description adds no additional parameter-specific meaning, matching the baseline of 3 with no penalty or bonus.
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 this tool produces a comprehensive report over the saved library and enumerates the exact contents (totals, runtime, counts, density, streaks, era histogram, lint counts, top artists). This distinguishes it from narrower sibling reports like duplicate_saved_versions or collab_density_report by positioning itself as a single aggregate 'mega-report.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when a holistic summary of the saved library is needed, but it does not explicitly state when to prefer this tool over alternatives or name any exclusions. With many similar reporting siblings available, explicit routing guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_all_chaptersA
List every chapter of an audiobook in one complete table (index, name, duration, resume point). Walks all pages of the chapters endpoint, so long books are not truncated the way they are in the Spotify app.
| Name | Required | Description | Default |
|---|---|---|---|
| audiobook_id | Yes | Spotify audiobook ID | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses a notable behavioral trait: it paginates through all pages of the chapters endpoint, so long books are not truncated. This is beyond what annotations (none) provide and is valuable context for the agent. It also mentions the output format is a complete table, giving the agent expectations about the response shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The core purpose and distinguishing behavior are front-loaded, and the mention of pagination is concise and informative. 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 list tool with 2 parameters and full schema coverage, the description is quite complete. It explains the table content and the pagination behavior. It could mention that audiobook_id is required, but the schema already handles that. The only minor gap is not describing what 'resume point' means, but that's a standard concept.
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 both parameters (audiobook_id and response_format). The description doesn't add much parameter-specific detail, but mentions the table fields (index, name, duration, resume point) which aligns with the response_format parameter's role. Baseline 3 is appropriate since the schema carries the parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists every chapter of an audiobook in a complete table with specific fields (index, name, duration, resume point). It distinguishes itself from truncated listing in the Spotify app, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool: when you need a complete, untruncated chapter listing for an audiobook. It doesn't explicitly exclude alternatives, but the context of walking all pages of the chapters endpoint makes the use case clear. No explicit alternatives are named, though siblings like get_audiobook_chapters exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_backupsA
List previous library backups (newest first) with path, creation date, size, and the _meta.counts summary from each snapshot
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses ordering and returned fields, which is useful, but it does not explicitly state that this is a read-only operation, what happens with an empty backup history, or any performance or storage implications. The verb 'List' implies read-only, but that is not made explicit.
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 that front-loads the action and resource, then lists ordering and key output fields. Every word contributes information, with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (one optional parameter, no output schema), the description gives enough to understand the tool's purpose and expected return content. It does not detail the per-format response shape, but the schema already documents response_format, and the description covers the essential data fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, response_format, is fully documented by the schema with enum values and descriptions, providing 100% coverage. The description adds no additional parameter meaning, but the schema already handles the semantics adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and a specific resource ('previous library backups'), and adds concrete output details: path, creation date, size, and the _meta.counts summary. This clearly separates it from backup creation/restoration tools and from playlist-snapshot listing 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 intended use is implied: call this when you need to see existing library backups. However, it gives no explicit guidance about when to prefer this over related tools like list_playlist_snapshots, list_saved_snapshots, or restore_library_snapshot, and it does not state exclusions or workflow context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_device_presetsA
List stored device name labels and volume presets.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. 'List' and 'stored' convey that this is a read-only operation on saved presets, which is useful. However, it does not disclose ordering, whether built-in presets are included, what fields are returned, or how the tool relates to current device state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, specific, front-loaded sentence with no filler or redundant detail. Every word contributes to understanding the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with one optional and fully documented parameter, the description plus schema are largely sufficient for basic invocation. It lacks some output-shape and ordering detail, but the core behavior and resource are clear enough that an agent can call the tool confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, response_format, is fully documented by the schema with an enum, default value, and per-value description. The tool description adds no additional parameter meaning, but the schema-coverage baseline already applies, so a 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('List') and a concrete resource ('stored device name labels and volume presets'), making the tool's purpose immediately understandable. It is also distinguishable from siblings like get_devices, set_device_volume_preset, and apply_device_presets by emphasizing stored presets rather than live device state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives such as get_devices, compare_devices, or set_device_volume_preset. The description does not state conditions, exclusions, or preferred scenarios, so an agent must infer usage from the name and sibling context alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listening_clockB
Profile when you listen by local hour (24-bucket histogram plus daypart totals and peak hour) from recently-played history (default 150 items). Quota: GET /me/player/recently-played cursor walk.
| Name | Required | Description | Default |
|---|---|---|---|
| max_items | No | Max recently-played items to walk (default 150; the API pages 50 per call). | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does add real value: the quota note ('GET /me/player/recently-played cursor walk') tells the agent this is a read operation that walks pages and consumes quota, and it discloses the default item count (150). It does not cover consequences of short history, rate-limit sensitivity, or timezone interpretation beyond the phrase 'local hour,' but the disclosed traits are relevant and non-obvious.
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 first sentence front-loads the core purpose, output shape, and data source; the second delivers the operational quota context. Every clause earns its place, and the structure lets an agent grasp the tool's behavior in seconds.
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 read-only analytics tool with two optional parameters and no output schema, the description is nearly complete: it names the analysis dimension, the aggregation output, the data source, the default scope, and the underlying API cost. The only notable gaps are explicit differentiation from listening_clock_heatmap and clarity on edge cases (e.g., insufficient history), which are minor against an otherwise self-sufficient definition.
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 both parameters (max_items, response_format) already carry descriptive text in the schema, so the baseline of 3 applies. The description reinforces the max_items default (150) and the output-mode theme, but adds no semantic meaning beyond what the schema already documents. This is acceptable given the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Profile') and defines the resource precisely: listening times bucketed by local hour, with explicit output shape (24-bucket histogram, daypart totals, peak hour) and data source (recently-played history). This clearly separates it from most siblings like listening_streaks, top_artists_by_range, and weekday_heatmap. However, it does not distinguish itself from the near-twin sibling listening_clock_heatmap, so an agent cannot fully differentiate between them from this text alone.
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 context โ it profiles recent listening by hour from recently-played history โ but offers no explicit when-to-use guidance, no exclusions, and no alternative routing. Given the large sibling list containing closely related analytics tools (listening_clock_heatmap, artist_listening_clock, weekday_heatmap, listening_heatmap), the absence of a 'use X instead for Y' statement is a meaningful gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listening_clock_heatmapB
Render a weekday ร hour listening heatmap from recently-played history with the peak cell highlighted (default 150 items). Quota: GET /me/player/recently-played cursor walk.
| Name | Required | Description | Default |
|---|---|---|---|
| max_items | No | Max recently-played items to walk (default 150; the API pages 50 per call). | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the descripon carries the full burden and uses it well: it discloses the cursor walk over GET /me/player/recently-played, the 50-per-call pagination context, the default 150 items, and the highlight behavior. It only omits the return format, which is partially inferable for a rendering tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the core function front-loaded and no wasted words. The quota line is slightly telegraphic ('Quota: GET ... cursor walk') but still earns its place as a cost signal.
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 2-param read-only visualization tool with full schema coverage: purpose, data source, default, and quota are all covered. Gaps are the lack of sibling differentiation and no description of the output artifact, which matters because there is no output schema to fill that in.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents max_items and response_format. The description adds only marginal context by tying max_items to the cursor walk and restating the default 150. Baseline 3 is appropriate when structured data 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 verb (Render), resource (weekday ร hour listening heatmap), data source (recently-played history), and a distinctive behavior (peak cell highlighted). The 'weekday ร hour' spec implicitly differentiates it from close siblings like listening_heatmap and weekday_heatmap, but it does not explicitly name or route away from 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?
No guidance on when to choose this over close alternatives; siblings include listening_heatmap, weekday_heatmap, listening_clock, and get_recently_played, and nothing indicates which is appropriate for which need. The data-source phrase implies recency scoping, but there is no explicit when-to-use, when-not-to-use, or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listening_consistency_scoreA
Score how consistent your listening is (0-100) from recently-played history: active-day coverage, hour spread, and weekday balance with each component shown (default 150 items). Quota: GET /me/player/recently-played cursor walk.
| Name | Required | Description | Default |
|---|---|---|---|
| max_items | No | Max recently-played items to walk (default 150; the API pages 50 per call). | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It usefully discloses that the tool performs a quota-consuming cursor walk of GET /me/player/recently-played and that each component is shown, which is genuine cost and output context beyond the schema. However, it never explicitly states the operation is read-only, nor what happens with insufficient or sparse history, so the disclosure is partial.
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 terse sentences with the primary purpose front-loaded and the quota/API cost context in the second. No filler; each clause adds information an agent needs (scope, scale, components, cost hint).
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 2-param read-analysis tool with no output schema and no annotations, the description covers purpose, input source, default scope, components, and the underlying API walk, which is a solid load. It stops short on edge cases (sparse or empty history, no-history behavior) and on the exact shape of the returned components, so it is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters are already fully documented in the schema (max_items with paging note and default 150, response_format with enum and default), so the baseline is 3. The description only repeats 'default 150 items,' adding no new parametric meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Score how consistent your listening is'), states the output range (0-100), and names the three computed components (active-day coverage, hour spread, weekday balance). This specificity is enough to distinguish it from nearby siblings like listening_streaks or weekday_heatmap without needing to name 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?
No explicit when-to-use guidance or named alternatives. The only contextual clues are 'from recently-player history' (data source) and the quota note (cost), but there is no contrast with listening_report, listening_streaks, or weekday_heatmap, so an agent must infer when this tool is the right choice among many listening-analysis siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listening_erasA
Change points in monthly listening: groups months into eras split on top-artist turnover or >60% volume shifts. Read-only, no auth. (Legacy alias of statsfm_listening_eras โ prefer the canonical name.)
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| statsfm_user | Yes | stats.fm user ID (or username) โ public profile, no auth needed | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It clearly discloses read-only behavior, no-auth requirement, the segmentation algorithm, and legacy alias status. It does not describe the result shape or error behavior, but for a low-risk public analytics call that is a minor 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?
Two compact sentences front-load the main behavior, then add safety/auth information and the alias routing. Every sentence earns its place with no repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with one required parameter and full schema coverage, the description is nearly complete: it covers purpose, algorithm, auth, and canonical naming. The only gap is that no output schema exists and the prose does not describe the returned era structure, though response_format in the schema provides some orientation.
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 all three parameters are already documented. The description adds useful context that the analysis is based on monthly listening data, but it does not add parameter-level detail beyond what the schema provides. 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?
States a specific operation: detecting change points in monthly listening and grouping months into eras via top-artist turnover or >60% volume shifts. Clearly distinguishable from session, streak, and taste tools, and it explicitly identifies itself as the legacy alias of statsfm_listening_eras.
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 names the canonical alternative and says to prefer it: 'Legacy alias of statsfm_listening_eras โ prefer the canonical name.' Also signals that this is a read-only, no-auth operation, which helps the agent decide when it is safe and appropriate to call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listening_gaps_reportA
Find the quiet stretches in your recently-played history: every inactivity gap above a threshold (default โฅ120 minutes) with the longest gaps listed (default 150 items). Quota: GET /me/player/recently-played cursor walk.
| Name | Required | Description | Default |
|---|---|---|---|
| max_items | No | Max recently-played items to walk (default 150; the API pages 50 per call). | |
| min_gap_minutes | No | Minimum gap length to report, in minutes (default 120). | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It reveals that the tool walks the GET /me/player/recently-played endpoint cursor, defaults to gaps of at least 120 minutes, and returns at most 150 gaps by default. These specifics go beyond a generic read-only claim and help the agent understand pagination, defaults, and side-effect-free 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 two sentences, front-loaded with the core purpose, and each sentence earns its place: one defines the output behavior and defaults, the other the API quota and walking behavior. There is no 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 read-only analysis tool with three self-described optional parameters and no output schema, the description adequately explains what the tool produces, its defaults, and the underlying API walk. It could add edge-case behavior (e.g., what happens with no gaps) or explicitly describe the prose vs JSON output formats, but the response_format parameter already covers the output modes.
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 each parameter already has detailed descriptions including defaults and bounds. The description's mention of defaults (โฅ120 minutes, 150 items) merely restates schema defaults, and it adds no new parameter meaning beyond what the schema provides. A 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 uses a specific verb ('Find') and a precise resource ('recently-played history'), and clearly defines the output as inactivity gaps above a threshold with longest gaps first. It semantically distinguishes itself from siblings like listening_streaks and get_recently_played by focusing on quiet stretches rather than streaks or raw play 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 gives clear context: this tool analyzes the recently-played history and reports inactivity gaps above a configurable threshold. It does not name alternatives or state when not to use it, but the scope is specific enough that an agent can infer the appropriate use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listening_heatmapA
When do you listen? Buckets recently-played tracks into 168 hourly slots (24h x 7d) and reports peak/quiet windows. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Recently-played page size (default 50) | |
| lookback_days | No | Days of history to bucket (default 28) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It explicitly states 'Read-only', discloses the data source (recently-played tracks), and clarifies the aggregation behavior. It does not discuss history availability or exact return shape, but these are minor gaps for a non-destructive read tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler. The core aggregation behavior and the read-only safety trait are front-loaded and immediately actionable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only analysis tool with fully documented parameters, the description is largely complete: it explains the data source, the aggregation dimension, and the kind of output. It does not describe the return format in detail, but no output schema exists and the report semantics are sufficiently clear.
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 baseline is 3. The description generally relates to recently-played history and bucketing, but it adds no specific meaning beyond the parameter descriptions for limit, lookback_days, or response_format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific operation: bucketing recently-played tracks into 168 hourly slots and reporting peak/quiet windows. It goes beyond the tool name, but it does not explicitly distinguish itself from closely related siblings such as listening_clock_heatmap or weekday_heatmap.
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 use case is implied ('When do you listen?') and the description says what it does, but it provides no explicit guidance on when to choose this tool over similar sibling tools or when not to use it. An agent would have to infer the intended selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listening_history_exportB
Export your recently-played history as a paginated chronological table (oldestโnewest; supports offset continuation; default walks up to 500 items). Quota: GET /me/player/recently-played cursor walk.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | Offset into the chronological list for continued pages (default 0). | |
| max_items | No | Max history items to walk (default 500). | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses several behaviors: chronological ordering (oldestโnewest), pagination with offset continuation, default walk limit of 500, and quota. However, it does not describe the output structure (e.g., whether it's a table, prose, or raw JSON โ though that's partly covered by a parameter), nor does it clarify that it's a read-only operation or what happens on hitting quota limits. It's adequate but not rich.
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: one sentence stating purpose and a second sentence about quota. It is front-loaded with the primary purpose and contains no filler. Every line 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 4 well-documented parameters and no output schema or annotations, the description covers basics like pagination and ordering, but it lacks explicit differentiation from similar export/search tools and does not specify the exact output format (beyond hints from parameters). It is not fully complete for an agent to choose it confidently among many siblings, but it is not grossly incomplete.
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 parameters are fully documented. The description adds minimal extra meaning: it re-states the offset continuation and default walk of 500 items, which are already in parameter descriptions. It does not illuminate parameter relationships or edge cases beyond what the schema provides, warranting a baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('export'), the resource ('recently-played history'), and the output format ('paginated chronological table'), with ordering and offset semantics. However, it does not explicitly differentiate from similar sibling tools like export_listening_history or get_recently_played, so it's clear but not maximally distinct.
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. It mentions quota ('GET /me/player/recently-played cursor walk') but that is about API limit, not usage context. There are no when-to-use or when-not-to-use statements, and no mention of alternative tools to consider.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listening_journal_appendA
Attach a timestamped note to today's journal, optionally tagged with a session id or tag โ makes tag_listening_session actually useful for recall. Sidecar only, zero API calls.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Free-form tag for later filtering | |
| note | Yes | The note to append | |
| session | No | Tag onto a saved listening session id | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It explicitly reveals that this performs no API calls and operates only on a sidecar journal, and that notes are timestamped. It could say more about return behavior or missing-journal behavior, but the key side-effect profile is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences carry the purpose, behavioral scope, and sibling relationship without filler. The main action is front-loaded and 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 simple local append operation, the description plus 100% schema coverage is nearly sufficient. It could clarify output/return behavior and what happens if today's journal does not yet exist, but an agent can safely select and invoke the tool based on the provided information.
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 schema already documents all four parameters. The description adds slight context by linking 'session id or tag' to recall and mention that 'note' is the content, but it does not substantially enrich parameter meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Attach a timestamped note to today's journal.' It also adds scope ('Sidecar only, zero API calls') and references the sibling tag_listening_session, making it easy to distinguish from the many API-facing sibling 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 gives clear context: use this to attach timestamped notes to the local journal, optionally tied to a session or tag. It does not formally enumerate exclusions or alternatives, but 'makes tag_listening_session actually useful for recall' and 'Sidecar only, zero API calls' make the intended niche clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listening_recap_briefA
Produce a one-call recap of your recent listening: headline plays, top artist/track, leaderboard leaders, peak hour, busiest weekday, discovery ratio, and streak status (default 200 history items). Quota: GET /me/player/recently-played + 4ร GET /me/top/*.
| Name | Required | Description | Default |
|---|---|---|---|
| max_items | No | Max history items to walk (default 200). | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full transparency burden, and it delivers meaningfully by disclosing the quota cost: 'GET /me/player/recently-played + 4ร GET /me/top/*'. This tells the agent the call consumes five API quota units and is read-only, which goes well beyond the schema. It stops short of stating the time window semantics or that no side effects occur, but the quota disclosure is a strong transparency addition.
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 zero filler: the first is front-loaded with the action and the full deliverable list, the second adds the quota cost. Every clause earns its place, and the format is instantly scannable for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description covers the key operational facts an agent needs: what metrics are produced, the default scope, and the API quota impact. The main gaps are the vague 'recent listening' window and no explicit statement that the operation is read-only, but the content list plus quota information make it nearly complete for a summary tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both max_items and response_format fully. The description merely restates the max_items default ('default 200 history items'), which duplicates the schema, and adds nothing about response_format beyond the schema's enum descriptions. Baseline 3 applies since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Produce'), a clear resource ('recap of your recent listening'), and enumerates the exact contents: headline plays, top artist/track, leaderboard leaders, peak hour, busiest weekday, discovery ratio, and streak status. The 'one-call' phrasing distinguishes it from the many specialized listening siblings like top_artist_leaderboard, discovery_ratio, and listening_streak_report.
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 'one-call recap' framing implies this is the consolidated alternative to invoking multiple report tools, and the quota disclosure hints at its cost profile. However, the description never names sibling tools (listening_report, top_artists_by_range, listening_streaks, discovery_ratio) or states when to prefer them over this aggregate, leaving routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listening_reportB
Aggregate listening report: compares your top tracks between two time windows (rising / constant / fading), plus era histogram, discovery ratio, repeat overlap with recently played, and hour-of-day buckets
| Name | Required | Description | Default |
|---|---|---|---|
| time_range | No | Window to report on. Default: medium_term | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| include_recent | No | Include recently-played analysis (repeat overlap + hour buckets). Default: true | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the full behavioral burden. It transparently discloses what the report computes, which signals a read-only aggregation. However, it never explicitly states that it makes no mutations, and leaves a key behavior ambiguous: it says 'compares your top tracks between two time windows' but the schema exposes only one time_range parameter, so how the second window is derived is undisclosed. API cost/rate behavior is also not mentioned.
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 dense sentence that front-loads the intent ('Aggregate listening report') before enumerating components. No filler or redundant phrasing; the colon-list structure is efficient. Losing one point only because the sentence is long enough that the two-window comparison and the trailing bucket list could be easier to parse if broken into two sentences.
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 tool with no output schema, the description does enumerate the report's major return sections, which is helpful. But it leaves a structural ambiguityโhow two time windows are produced from one time_range parameterโand gives no sense of the output shape for the 'json' response_format (raw API object is named but its fields are unspecified). An agent calling with response_format='json' would not know what to expect in the response.
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 baseline is 3. The description adds marginal value by linking 'repeat overlap with recently played' and 'hour-of-day buckets' to include_recent, and the two-window comparison to time_range. But all defaults, enums and meanings are already in the schema, so the description does not substantially enrich parameter understanding beyond what structured data provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific operation ('Aggregate listening report') on a clear resource (top tracks/listening history) and enumerates distinct computed dimensions (rising/constant/fading, era histogram, discovery ratio, repeat overlap, hour-of-day buckets). This differentiates it from plain get_top_tracks/get_top_artists. However, given ~200 siblings including close cousins like taste_shift_report, discovery_ratio, listening_clock, and era_preference_report, it never names exclusions, leaving the agent to infer what makes this the aggregate option.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance is provided. The description never mentions alternatives or the conditions that would select listening_report over taste_shift_report, deep_dive_report, weekly_rotation_report, or monthly_listening_report. With a sibling list this large, an agent has no explicit basis to choose this tool for a user request.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listening_session_closeA
Close a listening session: captures an end-of-session playback snapshot, stamps the duration and marks the session log closed. Writes only a local sidecar file.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | Session id from listening_session_start | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It handles this well by explicitly stating the write scope โ 'Writes only a local sidecar file' โ and enumerating the state changes (snapshot capture, duration stamp, log closed), revealing that no remote API mutation occurs. It stops short of covering idempotency for closing an already-closed session or failure behavior, but the core side-effect profile is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero filler. The action and its three effects are front-loaded in the first sentence, and the side-effect scope disclosure earns its place in the second. Nothing is redundant with the 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?
For a 2-parameter tool with no annotations and no output schema, the description covers the operation's purpose, effects, and write scope adequately. The main gaps are the lack of an explicit return-value statement (despite response_format implying a formatted result) and no guidance on error or repeated-close behavior, but these are minor for a simple closing operation.
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 both parameters already carry meaningful documentation: session_id provenance ('from listening_session_start') and response_format enum semantics with per-value explanations. The tool description adds no parameter-level detail beyond what the schema already provides, so the 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?
States a specific verb+resource ('Close a listening session') and enumerates three concrete effects: capturing an end-of-session playback snapshot, stamping the duration, and marking the session log closed. This clearly differentiates it from siblings like listening_session_start, listening_session_report, and list_sessions.
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 pairing with listening_session_start is implied by the schema's session_id description ('Session id from listening_session_start') and the verb 'Close', so the intended usage context is reasonably inferable. However, the tool description never explicitly names its counterpart tool or states conditions for when to use this versus alternatives, and no exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listening_session_reportB
Report a listening session (or the most recent one when no id is given): duration, start/end snapshots and closed status. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No | Session id; omit to report the most recent session | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does add value by explicitly labeling the tool 'Read-only' and summarizing the report contents. It doesn't disclose edge cases, prerequisites, or what happens when no session exists, but for a simple report tool this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One concise sentence with a tightly scoped parenthetical for the optional id. It front-loads the action, lists what the report contains, and includes the read-only note without extra prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter, read-only reporting tool with no output schema, the description covers the main return content and the optional-id behavior. It is reasonably complete for invocation, though it doesn't clarify how this report relates to active vs. closed sessions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents session_id and response_format. The description adds the default-to-most-recent-session behavior, but that is also implied by the schema's 'omit' wording. No significant extra 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?
States a specific verb and resource ('Report a listening session') and names the key output fields (duration, start/end snapshots, closed status). It also notes the optional-id behavior. However, it doesn't explicitly differentiate itself from nearby siblings like describe_listening_session or session_stats.
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 how to target a specific session or default to the most recent one, but gives no guidance on when to prefer this tool over siblings such as describe_listening_session, list_sessions, or session_length_report. No alternatives or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listening_sessionsA
Group recent streams into sessions: a gap longer than gap_minutes starts a new session (default 30). Read-only, no auth. (Legacy alias of statsfm_listening_sessions โ prefer the canonical name.)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Streams to fetch. Default: 100 | |
| gap_minutes | No | Inactivity gap that splits sessions. Default: 30 | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| statsfm_user | Yes | stats.fm user ID (or username) โ public profile, no auth needed | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden for behavioral disclosure and largely delivers: 'Read-only, no auth' states the safety profile explicitly, and the default gap behavior is spelled out. The main gap is that no output shape is described and there is no output schema to compensate, so the agent cannot anticipate what a session result looks like.
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, each earning its place: core function plus algorithm, safety profile, and sibling routing. The most important information is front-loaded, and there is zero filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter tool with full schema coverage and no output schema, the description covers the essential calling context: the grouping algorithm, default gap, the read-only/no-auth safety trait, and the canonical-name routing. The only real gap is the absence of return-format details, partially mitigated by the response_format enum descriptions in the schema; since the agent is told to prefer the canonical sibling, this is a minor shortfall.
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 five parameters. The description adds algorithmic meaning for gap_minutes by tying it directly to the session-splitting rule, which is a modest value-add, but it does not explain limit, max_results, or response_format beyond what the schema already provides. 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 states a specific verb and resource ('Group recent streams into sessions') plus the defining algorithm ('a gap longer than gap_minutes starts a new session'), so an agent knows exactly what the tool computes. It further differentiates from siblings by declaring itself a legacy alias of statsfm_listening_sessions, resolving the main naming ambiguity in the toolset.
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 explicit routing guidance: 'Legacy alias of statsfm_listening_sessions โ prefer the canonical name' tells the agent to pick the canonical sibling. Read-only/no-auth also signals when this is safe to invoke. It does not, however, distinguish when session grouping is preferred over related siblings like listening_streaks or session_stats, leaving some selection context to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listening_session_startA
Start a local listening-session log: captures the current playback snapshot into a session file under the backup dir; close it later with listening_session_close. Writes only a local sidecar file.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | Optional short label for the session | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full transparency burden. It discloses the important behavioral trait that this writes only a local sidecar file under the backup dir, signaling a low-risk, non-Spotify-mutating operation. It also implies a stateful session that should later be closed. It could add more detail about what happens on repeated starts or missing playback, but the disclosed behavior is meaningful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the first states the action and workflow, the second emphasizes the local sidecar behavior. The most important behavioral constraint is front-loaded, and 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?
For a two-parameter, no-output-schema tool, the description covers the core purpose, the paired lifecycle, and the key side-effect constraint. Without annotations or an output schema, it could have described return behavior or prerequisites, but the essential information an agent needs to safely invoke this tool is present.
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 both parameters including the enum values for response_format. The description adds no parameter-level information, which is acceptable given the schema covers everything. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Start') and resource ('local listening-session log') and clearly states the core action: captures the current playback snapshot into a session file. It also names the paired sibling listening_session_close, helping distinguish this as the 'open' half of a session lifecycle rather than a report or list tool.
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 clear context for when to use it: when starting a local listening session, and explicitly says to close it later with listening_session_close. It does not enumerate exclusions or alternatives, but the pairing with listening_session_close provides enough routing guidance for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listening_streak_reportA
Compute consecutive-day listening streaks from recently-played history, including the longest streak and whether it is still alive (default 150 items). Quota: GET /me/player/recently-played cursor walk.
| Name | Required | Description | Default |
|---|---|---|---|
| max_items | No | Max recently-played items to walk (default 150; the API pages 50 per call). | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does usefully disclose the data source and pagination approach ('Quota: GET /me/player/recently-played cursor walk') and the default 150-item window. It does not disclose that the computed streak is bounded by the fetched window, nor how 'alive' is determined across timezone or day boundaries.
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 compact and front-loaded: it states the operation, the key outputs, the default behavior, and a quota warning in two sentences with no filler. Every sentence contributes useful 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 there is no output schema, the description reasonably conveys what results will contain (longest streak and whether alive) and how response_format alters output mode. However, it omits important contextual caveats such as the bounded-history limitation, the meaning of 'alive' across day boundaries, and the distinction from the near-sibling 'listening_streaks' tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents max_items and response_format thoroughly. The description adds no substantive parameter meaning beyond restating the 150-item default, which is already in 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 names a specific computation ('Compute consecutive-day listening streaks') and a concrete resource ('recently-played history'), plus the key outputs (longest streak, whether still alive). It is clear, but it does not explicitly differentiate itself from the very similarly named sibling tool 'listening_streaks'.
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 use case is implied: an agent should call this when streak metrics from recently-played history are needed. However, there are no explicit when-to-use vs. alternative conditions, and no guidance on when to prefer 'listening_streaks', 'listening_report', or 'get_recently_played' instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listening_streaksB
Compute consecutive-day listening streaks from recently-played history (up to 150 items). Quota: GET /me/player/recently-played cursor walk.
| Name | Required | Description | Default |
|---|---|---|---|
| max_items | No | Max history items to walk (default 150) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It does add useful operational context by mentioning the 'GET /me/player/recently-played cursor walk' quota, which informs rate-limit awareness. However, it does not explicitly state that this is a read-only operation, how 'consecutive-day' is defined (e.g., timezone, calendar days), or what happens when there is insufficient history.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, front-loaded with the core purpose and data scope. The second sentence adds a relevant quota detail without unnecessary elaboration. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the data source, item cap, and quota, but the tool has no output schema and the description does not explain what the returned streak data looks like or how 'response_format' affects the result. It also omits clarification relative to the similarly named 'listening_streak_report' sibling, so an agent may not have enough context to select and interpret results confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage: 'max_items' and 'response_format' are both fully documented. The description does not meaningfully add parameter semantics beyond the schema; the 'up to 150 items' phrasing restates the schema's maximum. Baseline of 3 is appropriate since the schema already explains the parameters.
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 function: 'Compute consecutive-day listening streaks from recently-played history (up to 150 items).' It names a specific verb, resource, and scope. However, it does not differentiate itself from the sibling tool 'listening_streak_report', which appears to have overlapping functionality.
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 explicit guidance on when to use this tool versus alternatives like 'listening_streak_report', 'get_recently_played', or 'listening_report'. The quota note implies a link to recently-played data but does not state when this tool is preferred or when another tool should be used instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listening_week_in_timeB
Charts for any specific past week within the ~90-day recently-played window, via a before/after cursor walk โ retro "what was I playing then". Quota: 2-6 reads.
| Name | Required | Description | Default |
|---|---|---|---|
| top_n | No | Top N rows. Default 10. | |
| week_start | Yes | Week start date, YYYY-MM-DD (local ISO day) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden. It discloses the ~90-day data window, the before/after cursor-walk implementation, and quota (2-6 reads), which is genuinely useful operational context beyond the schema. However, it does not state what happens for out-of-window week_start dates, nor explicitly confirm read-only safety, though 'Charts' implies non-destructive 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?
Two tight sentences with the purpose front-loaded in the first and the quota in the second. The cursor-walk phrase is slightly jargon-y but earns its place by explaining why the read quota is 2-6, and no words are 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?
All four parameters are fully documented in the schema and the response_format enum partially conveys output modes, so the description need not restate them. But with no output schema and no annotations, it leaves open what 'concise' vs 'detailed' output actually contains and how out-of-window weeks behave, so an agent still has unresolved call-time uncertainty.
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 baseline is 3. The description adds real meaning for week_start by constraining it to the ~90-day recently-played window, which the schema does not express. It contributes nothing beyond the schema for top_n, max_results, or response_format.
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 ('Charts') and resource: listening data for a specific past week within the ~90-day recently-played window. The explicit window constraint and 'retro what was I playing then' intent make it distinguishable from broad siblings like get_recently_played and listening_heatmap, though it names no sibling directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the trigger โ wanting a retro snapshot of a specific past week within the 90-day window โ but it never states when to prefer this over siblings like listening_heatmap, week_in_review_playlist, or top_artists_by_range, nor does it give exclusions. Usage is clear by implication only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_playback_bookmarksA
List all captured playback bookmarks stored locally under the backup dir, newest last. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden. It explicitly states 'Read-only', discloses that data lives 'stored locally under the backup dir', and specifies ordering as 'newest last'. This gives meaningful behavioral context beyond the schema, though it does not detail edge cases like empty results or exact return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence that front-loads the core action ('List all captured playback bookmarks'), then adds essential scope, ordering, and safety information. There is no filler 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?
For a two-optional-parameter read-only list tool with full schema coverage, the description provides enough to select and invoke correctly: it states the data source, read-only nature, and ordering. It does not explicitly describe the return value, but 'List all...' plus the response_format parameter makes the expected result reasonably clear.
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 both max_results and response_format already have detailed descriptions in the input schema. The tool description adds no parameter-specific meaning, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List'), names the exact resource ('captured playback bookmarks'), and adds scope ('stored locally under the backup dir') plus ordering ('newest last'). This clearly differentiates it from sibling tools like delete_playback_bookmark, capture_playback_position, and resume_playback_position without needing to open their schemas.
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 clear context: this is a read-only listing of locally stored bookmarks, so an agent knows it is for inspection rather than mutation. It does not explicitly name alternatives or when-not-to-use conditions, but the context is sufficiently clear for a simple list-all operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_playback_statesA
List saved playback state snapshots from the local sidecar.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It does disclose a meaningful traitโsnapshots come from the local sidecarโand 'List' implies a read-only operation. However, it does not address sidecar availability, ordering, or what happens when no snapshots exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence with no wasted words; the resource is named immediately and the source qualifier is front-loaded. It is appropriately sized for a simple read/list tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate for recognizing the tool but leaves gaps: no output schema means the returned snapshot fields are undefined, and no mention is made of ordering or sidecar-specific behavior. For a tool with one optional format parameter, this is acceptable but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single optional parameter is fully documented in the schema, including each enum value and its meaning. The description adds no parameter-specific detail, but the 100% schema coverage makes that unnecessary.
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 a specific action ('List'), a clear resource ('saved playback state snapshots'), and a data source ('local sidecar'). This differentiates it from sibling tools like list_playlist_snapshots and list_playback_bookmarks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given for when to choose this tool over alternatives, nor does it mention related restore/checkpoint flows. Despite many snapshot-related siblings, the description only states what the operation is, not when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_playlist_snapshotsB
List stored snapshots (optionally filtered by playlist_id)
| Name | Required | Description | Default |
|---|---|---|---|
| playlist_id | No | If provided, only snapshots for this playlist | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of signaling safety, and the verb 'List' plus the word 'stored' reasonably convey a read-only operation over persisted snapshot data. It adds no further behavioral detail about ordering, pagination, storage scope, or what a snapshot contains, so the disclosure is only partial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with the core behavior front-loaded and the optional filter in a parenthetical. There is no filler or redundant wording.
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 low-complexity listing tool with two optional, fully documented parameters, the description covers the operation and the filter adequately, and the schema covers response_format behavior. The main gaps are the lack of any explicit differentiation from list_saved_snapshots and the absence of a stated output shape, which prevents a perfect score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents both parameters completely, including the response_format enum semantics and defaults, so the description does not need to add much. The phrase 'optionally filtered by playlist_id' simply restates the schema description for playlist_id and adds no new meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action ('List') and resource ('stored snapshots') and mentions the optional playlist_id filter, so an agent can tell what the tool operates on. It does not distinguish itself from the similarly named sibling list_saved_snapshots, and the phrasing partly restates the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus alternatives like list_saved_snapshots, take_playlist_snapshot, or restore_playlist_from_snapshot. The only contextual hint is the parenthetical filter, which is a filtering condition rather than a usage rule. An agent must infer the intended use case from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_saved_showsB
List the shows saved in your library with publisher, episode count, and saved date โ truncated to max_results with a fetch-all hint when longer. Default 20 rows, 'concise' prose.
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It does add useful behavioral details: truncation to max_results, a fetch-all hint for longer results, and the default 'concise' prose style. However, it does not explain the fetch-all mechanism or exact output shape, and its stated default of 20 rows conflicts with the schema's default of SPOTIFY_MCP_MAX_ITEMS or 50, which slightly undermines trust.
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 compact sentences front-load the purpose and then add the key behavioral details. There is no wasted prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with no output schema, the description gives enough to be usable and names the return fields and response styles. Still, the fetch-all hint is vague, the return structure is only partially specified, and the default discrepancy creates ambiguity, leaving clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents both parameters fully, so the baseline is 3. The description adds a fetch-all hint for max_results but also states 'Default 20 rows' while the schema says the default is SPOTIFY_MCP_MAX_ITEMS env or 50 โ a direct and misleading contradiction that lowers the score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb and resource ('List the shows saved in your library') and specifies useful output fields (publisher, episode count, saved date). It does not, however, distinguish itself from the close sibling get_saved_shows, so it stops 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?
There is no guidance on when to use this tool versus alternatives such as get_saved_shows or search_saved_shows, and no exclusions or prerequisites are given. The 'saved in library' phrasing is context, but the description does not aid tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_saved_snapshotsA
List local playlist snapshots (newest first) with path, creation time, size, and the _meta summary; optionally filtered to one playlist Snapshot guide: take_playlist_snapshot (create), list_saved_snapshots (list), read_playlist_snapshot (read), diff_playlist_snapshots / snapshot_new_tracks / snapshot_removed_tracks (diff), restore_playlist_from_snapshot / restore_playlist_plan (restore).
| Name | Required | Description | Default |
|---|---|---|---|
| playlist | No | Only snapshots of this playlist (ID or URI) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the disclosure burden; it covers ordering (newest first), locality (local), and the returned fields (path, creation time, size, _meta). This is enough for a simple list operation, though it doesn't explicitly state that no mutation occurs.
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 core listing behavior and output fields are front-loaded in a single sentence, and the snapshot guide is compactly organized by operation. The guide adds length but earns its place by orienting the agent in a large sibling toolset.
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 read-only list operation with no output schema, the description gives the essential calling context: what it lists, the order, the fields, and the optional filter. The remaining details (max_results default, response_format values) are already in the input schema, so nothing critical 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% and the three parameters already have clear descriptions/types/defaults. The description adds only that filtering by playlist is optional, aligning with the playlist parameter but not going 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?
States a specific verb ('List'), a clear resource ('local playlist snapshots'), ordering, and the fields returned. It also orients the tool within a snapshot workflow guide, though it does not distinguish it from the similarly named sibling list_playlist_snapshots.
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 embedded snapshot guide explicitly maps related tools to create/list/read/diff/restore roles, so an agent knows what this tool is for relative to siblings. It says the listing can be filtered to one playlist, but it doesn't state explicit when-not-to-use conditions or address the closely named list_playlist_snapshots.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_scenesA
List saved playback scenes from the local sidecar
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It usefully communicates that this is a read-only listing of locally stored sidecar data, but it doesn't specify behavior when the sidecar is missing, whether the listing is purely local, or what the returned list contains.
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 one short sentence with no filler. It front-loads the action and resource and every word contributes meaning.
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 low-complexity listing tool with one optional, well-documented parameter, the description is largely sufficient. The only minor gaps are that 'scenes' and 'local sidecar' are not defined in more detail and there is no output schema, but the phrase 'List saved playback scenes' conveys the expected result adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents the single response_format parameter, including its enum values, default, and meaning, so the description adds nothing beyond the schema. Schema coverage is 100%, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the explicit verb 'List' and names the resource 'saved playback scenes' plus the source 'local sidecar', making the operation unambiguous. This clearly differentiates it from sibling tools such as save_scene, delete_scene, and apply_scene that operate on the same entity with different actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or alternative guidance is provided. The description doesn't explain when to choose this over similar list-style siblings like list_playback_states, list_sessions, or list_backups, and it gives no prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sessionsB
List tagged listening sessions (optionally filter by tag). Auto-detect mode can also scan recently-played gaps.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Filter by tag | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a read-only list operation, and it discloses an auto-detect behavior that scans recently-played gaps. However, it does not state side effects, output format, pagination, or what distinguishes auto-detect from tag-filtered listing. This is a significant gap for a tool with no annotation safety signals.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler, and the core purpose is front-loaded. The auto-detect clause is concise but somewhat cryptic; it earns its place as additional capability, though it could be clearer. Overall, it is well-sized for the tool's simplicity.
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?
Without an output schema, the description should clarify what the response contains, but it doesn't. It also fails to define 'listening sessions', explain how auto-detect mode is activated, or describe how the tag filter and auto-detect interact. For a simple two-parameter tool this is inadequate for an agent to confidently invoke it and interpret results.
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%: both 'tag' and 'response_format' have descriptions in the schema. The description adds the notion that tag filtering is optional and mentions auto-detect mode, which likely relates to omitting the tag, but it doesn't explicitly connect the mode to the parameters. With full schema coverage, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'tagged listening sessions', with an optional tag filter. It differentiates from nearby session tools like describe_listening_session or session_stats by focusing on listing sessions, though it doesn't explicitly name a sibling. The 'auto-detect mode' adds some ambiguity but doesn't obscure the core purpose.
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 reasonable context: use this to list tagged listening sessions and optionally filter by tag. The auto-detect mode's role is mentioned but not explainedโwhen should it be used, and what does 'recently-played gaps' mean? No explicit alternatives or exclusions are stated, so an agent must infer when this tool is appropriate versus related session tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_show_episodesA
Page one show's episode list newest-first with duration and release date โ the browse view for a single podcast. Default limit 20, 'concise' prose. Canonical for GET /shows/{id}/episodes; get_show_episodes is a deprecated alias. Also covers: paged podcast episodes.
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | ISO 3166-1 alpha-2 market for availability, e.g. 'US' | |
| offset | No | Offset into the episode list. Default 0 | |
| show_id | Yes | Show ID, spotify:show: URI, or open.spotify.com/show URL | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It usefully discloses newest-first ordering, included fields, default prose format, canonical endpoint, and deprecated status. However, it states 'Default limit 20' while the schema documents max_results default as SPOTIFY_MCP_MAX_ITEMS or 50, a factual inconsistency that could mislead agents about actual default 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 compact and front-loaded with the core purpose, then adds routing and behavioral details in a few short fragments. The final 'Also covers: paged podcast episodes' is vague and somewhat redundant with 'Page one', but overall the text is efficient and scannable.
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 5-parameter read tool with no annotations and no output schema, the description covers ordering, fields, canonical endpoint, and default style. But it leaves gaps: how to request subsequent pages, market parameter usage, and error/empty behavior. The conflicting default limit further weakens completeness. Adequate, but not fully self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds little beyond the schema and introduces an error: 'Default limit 20' contradicts the max_results schema description (env var or 50). The 'concise' prose note simply restates the response_format default. This misinformation makes the description net negative for parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource โ 'Page one show's episode list' โ and adds ordering ('newest-first') and key fields ('duration and release date'). It distinguishes itself from get_show_episodes by explicitly labeling that tool as a deprecated alias, so an agent knows this is the canonical list operation.
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 a clear use case ('the browse view for a single podcast') and explicitly routes agents away from the deprecated get_show_episodes alias. However, it does not contrast with other episode-related siblings like show_episode_search or get_show_latest_episode, and lacks explicit when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
longest_saved_tracksA
Rank your saved tracks by duration, longest first. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| scan_cap | No | Max saved items to walk per paginated source (default: SPOTIFY_MCP_FETCH_ALL_CAP) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It does disclose a key trait with 'Read-only,' which signals safety, but it does not explain pagination, scan behavior, output format, or side effects of large scan caps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. The core purpose is front-loaded and the read-only safety note is additional but valuable.
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 ranking tool, the description plus fully documented schema parameters are largely sufficient. It could mention that results are drawn from the user's saved library and perhaps clarify output shape, but the response_format parameter already covers output variation.
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 parameters are already well documented by the input schema. The tool description adds no extra parameter-level meaning, which is acceptable given the baseline for full schema 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 states a specific verb and resource: 'Rank your saved tracks by duration, longest first.' This clearly identifies the operation and its sorting order. The explicit 'longest first' distinguishes it from sibling tools like shortest_saved_tracks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied: call this when you want saved tracks sorted by duration from longest to shortest. However, it does not explicitly name alternatives or state when not to use it, leaving some routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lyric_snippet_searchA
Finds candidate tracks for a remembered lyric or title fragment: runs quoted-phrase /search over tracks and ranks exact title matches first. DISCLOSURE: Spotify's public API has no lyrics endpoint, so matching is title/album-based; verify the snippet against the returned candidates. Quota: 1-2 /search calls.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Results per page, 1-10 (Feb-2026 /search cap). Default: 5 | |
| artist | No | Narrow to an artist name | |
| market | No | ISO 3166-1 alpha-2 market code (e.g. 'US'); omit for 'from_token' behaviour | |
| snippet | Yes | Remembered phrase, lyric fragment or title fragment | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden and delivers substantially: the hard limitation ('Spotify's public API has no lyrics endpoint'), the true matching basis ('title/album-based'), and cost behavior ('Quota: 1-2 /search calls'). It also reveals the ranking heuristic, which is genuine behavioral context beyond what a tool name alone implies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly packed sentences: the first front-loads purpose, mechanism, and ranking; the second groups the critical limitation, verification instruction, and quota into a clearly flagged DISCLOSURE section. Roughly 50 words with zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Purpose, mechanism, limitation, quota, and verification guidance are all covered, and the schema documents all five parameters. The only modest gap is that the shape of returned candidates is not described and there is no output schema; the response_format enum ('concise'/'detailed'/'json') only partially substitutes for that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds one meaningful detail beyond the schema โ that the snippet is run as a 'quoted-phrase' search โ but contributes nothing about limit, artist, market, or response_format that the schema doesn't already document.
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 ('Finds candidate tracks'), resource scope (tracks only), and the exact mechanism ('runs quoted-phrase /search') plus ranking behavior ('ranks exact title matches first'). This differentiates it from generic siblings like search_tracks, search_fresh, and search_deep without requiring schema inspection.
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?
Clearly establishes the triggering use case ('remembered lyric or title fragment') and adds post-call guidance ('verify the snippet against the returned candidates'). It does not explicitly name sibling alternatives (e.g., search_tracks, search_by_isrc) or state when-not-to-use conditions, which keeps it from a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
make_spotify_uriA
Construct a spotify: URI from kind + ID with strict validation โ rejects wrong-length IDs and unknown kinds before anything is built.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Spotify entity ID | |
| kind | Yes | Entity kind | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It does disclose meaningful traits: strict validation, rejection of malformed IDs and unknown kinds, and fail-fast ordering ('before anything is built'). However, it omits the error surface (throw vs. error return), whether the tool is a pure side-effect-free function, and how the response_format parameter affects output.
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 22-word sentence that front-loads the action and resource, then appends the differentiating behavioral detail via an em-dash clause. Every word earns its place; the fail-fast phrasing adds meaning rather than padding.
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 fully covers what the tool does and its key validation behavior, which is enough for a small 2-required-param utility. But with no output schema and no annotations, it leaves two meaningful gaps: the return format on success and how failures are represented. It also doesn't address edge cases like an input that already contains the 'spotify:' prefix.
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 value by defining the relationship between parameters ('kind + ID') and by attaching validation semantics to them: id must have the correct length for its kind, and kind must be from a known set. This clarifies constraints well beyond the schema's generic 'Spotify entity ID' and 'Entity kind'.
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 ('Construct'), a precise resource ('spotify: URI'), and the input shape ('from kind + ID'). The strict-validation clause with concrete rejection cases (wrong-length IDs, unknown kinds) distinguishes it from URI siblings like validate_spotify_uri, parse_spotify_uri, and format_spotify_uri, whose inputs/outputs differ.
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 intended use is implied โ when you have a kind and ID and want a validated URI, use this tool. However, with a large cluster of overlapping URI tools (validate_spotify_uri, is_valid_spotify_uri, format_spotify_uri, normalize_spotify_uri, canonicalize_spotify_uri), it names no alternatives and gives no explicit when-not-to-use guidance, leaving selection partially to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_episode_played_planA
Plan (never execute โ Spotify removed the mark-played API, issue #230) which episodes to mark fully played: fetches current resume points and outputs the target positions the player would seek to. Read-only by design.
| Name | Required | Description | Default |
|---|---|---|---|
| episode_ids | Yes | Episode IDs/URIs to plan (1โ20) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden, and it delivers thoroughly. It reveals the non-obvious behavior that despite the name 'mark_episode_played,' nothing is executed or mutated, states 'Read-only by design,' explains the root cause (removed API, issue #230), and describes the internal mechanics (fetch resume points, compute seek targets). This is exactly the kind of behavioral context an agent needs and cannot infer from the name or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with zero filler. The critical warning 'never execute' is front-loaded before anything else, followed by the reason, the mechanism, and the read-only guarantee. Every clause earns its place and the structure ensures the most decision-relevant information is seen first.
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 2-parameter tool with full schema coverage, the description is nearly complete: it explains what the tool does, what it deliberately does not do, and what the output represents (target positions to seek to). The only minor gap is that it does not preview the shapes of the response_format variants, but since there is no output schema and the parameter enum is self-documenting, this omission is acceptable rather than critical.
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 both episode_ids and response_format are already well-documented with types, ranges, formats, and enums. The description adds slight semantic context by linking the episode_ids to 'episodes to mark fully played' and the outputs to seek positions, but it does not need to compensate for any schema gap. 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 states a specific verb-resource pair: it 'plans which episodes to mark fully played.' It differentiates itself from the many mutation siblings by leading with 'never execute' and clarifies the mechanism ('fetches current resume points and outputs the target positions the player would seek to'). An agent can immediately understand what this tool produces and how it differs from an actual mark-played mutation.
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 explicit context for when this tool is appropriate: it is a plan-only tool because 'Spotify removed the mark-played API, issue #230,' and instructs 'never execute.' This is a strong when/when-not signal. It stops short of naming a specific sibling alternative for actual execution, but the constraint is so unambiguous that an agent will not misuse it as a mutation tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
market_availabilityA
Per-entity multi-market preview โ checks if a track/episode/album is playable in each of 1-10 given markets (Nร GET /{type}/{id}?market=X). Reports per-market available/404 plus full available_markets. ๐ก (N reads, 1-10). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| uri | Yes | Spotify URI (track/episode/album) | |
| markets | Yes | Market codes to test (1-10, e.g. ["US","JP","DE"]) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the tool is read-only, explains it performs N^ times GET requests (1-10 reads), and describes what it reports (per-market available/404 plus full available_markets). Minor gap: no mention of error handling or rate-limit risk, but the key behavioral traits are covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose, and includes only essential details (cost, output, read-only). No wasted words; the emoji and shorthand efficiently convey the N-read behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with no output schema, the description is complete: purpose, cost (N reads), return contents, and read-only safety are all stated. Parameters are fully documented in the schema. Nothing needed for 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 baseline is 3. The description adds a little context by linking 'uri' to playability checks and 'markets' to the 1-10 market list, but largely reiterates what the schema already documents. No significant extra parameter meaning beyond 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 states a specific verb and resource: 'checks if a track/episode/album is playable in each of 1-10 given markets'. It clearly differentiates from siblings like get_available_markets by specifying per-entity multi-market preview and listing the exact output (per-market available/404 plus full available_markets).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context for when to use: when needing a per-market playability check across 1-10 specific markets. It implies distinction from single-market or full-market-list tools but doesn't explicitly name alternatives or exclusions, so not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
market_validateA
Validate ISO 3166-1 market codes against GET /markets (cached) and optionally return the account market from /me. Quota: ๐ข 1โ2 calls.
| Name | Required | Description | Default |
|---|---|---|---|
| markets | No | Market codes to validate (2-letter). If omitted, just lists valid markets / account market. | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
| include_account_market | No | Include account country from /me |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It adds useful specifics beyond a generic 'validate' wording: it notes the data is cached, optionally involves a call to /me, and gives a quota estimate ('๐ข 1โ2 calls'). This gives an agent a realistic sense of cost and side effects, though it doesn't explicitly state read-only behavior 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, zero filler. The core validation purpose and data source are front-loaded, followed by the optional /me behavior and quota. 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 simple, optional-parameter validation tool, the description covers purpose, source, caching, quota, and optional behavior. There is no output schema, but the response_format parameter in the input schema already communicates the possible output styles. It could mention invalid-input handling, but nothing essential is missing for 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%, so the schema already fully documents all three parameters and their semantics. The tool description adds context about ISO 3166-1 and caching but does not need to explain parameters further. 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 states a specific verb ('Validate') applied to a specific resource ('ISO 3166-1 market codes') against a concrete source ('GET /markets'), and clearly distinguishes the alternate optional behavior (returning account market from /me). This is enough for an agent to understand what the tool does 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?
The description implies its use caseโvalidating market codesโand even suggests an omitted-parameter behavior via the schema, but it does not explicitly state when to choose this over siblings like get_available_markets or market_availability, nor does it mention exclusivity or alternatives. The context is clear but no when-not/exclusion guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
merge_playlistsA
Merge multiple playlists into one. Deduplicates tracks across sources (first-seen order wins) and adds them in batches of 100. Pass target_playlist_id to append to an existing playlist (it is NOT cleared) or new_name to create a fresh playlist.
| Name | Required | Description | Default |
|---|---|---|---|
| public | No | Visibility of a NEW playlist. Default: false | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| sources | Yes | Source playlists as IDs or spotify:playlist: URIs | |
| new_name | No | Name for a newly created target playlist | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
| target_playlist_id | No | Existing playlist to APPEND into (never cleared), as ID or spotify:playlist: URI |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and discloses more than most: the dedup strategy (first-seen order wins), batching behavior (100 per batch), and the critical non-destructive fact that appending does NOT clear the target. It falls short of 5 by leaving ambiguities like whether existing target contents participate in dedup and what happens on partial failures.
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 with zero fluff: purpose first, then the two behavioral traits that matter most (dedup and batching), then compact routing for the two output modes. Every sentence earns its place and the critical 'it is NOT cleared' caveat is prominently included.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations, no output schema, and 7 parameters, the description leaves gaps: it does not state what happens if neither target_playlist_id nor new_name is supplied (schema requires only sources), what the return value looks like, or failure semantics. Core workflow is well-covered, but an agent cannot fully predict the tool's behavior at the edges.
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 value by clarifying the relationship and implied mutual exclusivity between target_playlist_id and new_name, and by attaching dedup ordering semantics to sources that the schema does not express. This pushes it above baseline without duplicating 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 and resource ('Merge multiple playlists into one') and immediately distinguishes the tool from its many playlist-manipulation siblings by defining both execution modes (append to existing vs create fresh). The scope is unambiguous even before reading 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?
Gives clear within-tool decision guidance ('Pass target_playlist_id... or new_name...') but never teels agents when to prefer this over overlapping siblings like merge_playlists_plan, playlist_union, playlist_un on_preview, or dedupe_playlist_apply. Usage context is implied by the name and purpose rather than explicitly routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
merge_playlists_planA
Plan (and optionally commit) merging 2โ10 playlists in order into a NEW playlist (optional first/last dedupe) โ dry_run defaults to TRUE so it returns the merged PLAN read-only. Quota: ๐ก N GETs + create + chunked adds when committing.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New playlist name. Default "Merged YYYY-MM-DD" | |
| dedupe | No | Dedupe across the merge: keep first or last occurrence. Default first | |
| public | No | Public visibility for a newly created playlist. Default: private | |
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Pass false to commit. Default true | |
| description | No | New playlist description | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_ids | Yes | Playlists to merge (2โ10), in order | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure and meets it. It declares the read-only dry-run default, the optional commit path, creation of a new playlist plus chunked adds, and a quota cost. This is a rich and accurate side-effect profile beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two efficiently structured sentences. The first front-loads purpose and default behavior, the second adds quota context. Every phrase earns its place with no filler 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?
For a planning tool with 8 parameters and no output schema, the description covers the purpose, the default mode, and commit side effects. It does not detail the structure of the returned PLAN or explicitly state that source playlists remain untouched, but the response_format parameter and dry_run explanation cover most operational needs.
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%, meaning all 8 parameters are already documented in the schema. The description adds contextual reinforcement for playlist_ids ('2โ10'), dedupe ('optional first/last'), and dry_run ('defaults to TRUE'), but it doesn't introduce new meaning beyond what the schema provides, so a 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 states a specific verb ('merge'), the resource (2โ10 playlists), the output (a NEW playlist), and optional dedupe behavior. It clearly differentiates itself from siblings by leading with 'Plan (and optionally commit)', which separates it from direct merge tools like merge_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 clearly conveys when to use the tool: it plans a merge and can optionally commit, with dry_run defaulting to TRUE so a call is read-only by default. The quota warning ('๐ก N GETs + create + chunked adds when committing') informs cost-aware selection. However, it does not explicitly name alternatives like merge_playlists or state when to prefer them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
merge_snapshot_changes_planA
Read-only plan to replay the changes between two snapshots onto the live playlist (add new and/or remove lost tracks) Snapshot guide: take_playlist_snapshot (create), list_saved_snapshots (list), read_playlist_snapshot (read), diff_playlist_snapshots / snapshot_new_tracks / snapshot_removed_tracks (diff), restore_playlist_from_snapshot / restore_playlist_plan (restore).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Which changes to include (default both) | |
| playlist | No | Live playlist to change (default: the snapshotsโ playlist_id) | |
| to_snapshot | Yes | Newer snapshot โ the target state | |
| from_snapshot | Yes | Older snapshot โ the baseline the playlist is assumed to match | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description adequately discloses the key behavioral trait: the tool is read-only and does not mutate the playlist. It also clarifies the conceptual behavior of replaying new/lost tracks. However, it does not describe what the plan output looks like, whether further confirmation is needed, or any edge cases such as mismatched snapshot playlists.
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 core sentence is crisp and front-loaded with purpose. The appended snapshot guide is somewhat dense and listing-heavy, but it is a useful orientation aid rather than low-value filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The definition gives enough basic context for the tool's role and related tools, but since there is no output schema and no annotations, the description should say more about what the returned 'plan' contains and how it maps to application. The response_format parameter hints at output shape, but the behavior of the plan is not fully specified.
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 five parameters clearly. The description adds contextual framing by mentioning 'add new and/or remove lost tracks', but it does not add substantive parameter-level meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a precise action: produce a read-only plan that replays add/remove changes between two snapshots onto a live playlist. It unambiguously distinguishes itself from applying changes and from the restore/snapshot family in the tool guide.
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 context by labeling the tool as 'read-only plan' and listing related snapshot tools, which implies when it might be used. However, it never explicitly states when to choose this over restore_playlist_plan or apply_snapshot_changes, nor does it give exclusion criteria or a direct alternative-selection rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
monthly_listening_reportA
Calendar-month listening report: top tracks/artists, estimated minutes, active days and session count, rendered as markdown; optionally archives a sidecar snapshot for month-over-month diffs. Local compute over recently-played (90-day window โ older months cannot be fully reconstructed) + /me/top short-term data. ~6 reads.
| Name | Required | Description | Default |
|---|---|---|---|
| month | No | Month to report on, YYYY-MM. Default: previous full calendar month. | |
| archive | No | Archive the report into the local sidecar under this month label for later diffs | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and delivers thoroughly: it discloses the read-only default with an approximate cost (~6 reads), the conditional side effect (archive=true only), the data sources (recently-played + /me/top short-term), execution context (local compute), and the 90-day data limitation. This is rich behavioral disclosure well beyond the tool's name.
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 front-load the core purpose and contents, then compactly deliver the optional archive behavior, data sources, limitation, and cost estimate. Every element earns its place; there is no filler or redundancy with the input 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?
For a report tool with zero annotations and no output schema, the description covers output format, data availability limits, conditional side effects, and expected API cost, leaving an agent well-equipped to call it correctly. Minor gaps remain โ the exact shape of the markdown return and what the 'short-term' range spans โ but these are secondary given the clearly stated deliverables.
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 of 3 applies. The description adds complementary context โ the archive parameter's purpose (month-over-month diffs) and the data pipeline behind the report โ without needing to restate parameter mechanics. It adds marginal value on top of an already-detailed schema but does not deeply enrich any single 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 names a specific verb and resource: a calendar-month listening report with concrete deliverables (top tracks/artists, estimated minutes, active days, session count) and an explicit output format (markdown). It differentiates itself from siblings like week_in_review, year_in_review, and taste_shift_report by its calendar-month scope and the 90-day reconstruction caveat.
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 clear context for when the tool applies (calendar-month reporting) and a hard constraint (months older than 90 days cannot be fully reconstructed). However, it never names sibling alternatives such as year_in_review, week_in_review, or the generic listening_report, nor states when an agent should prefer those instead. Usage is implied rather than explicitly routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mood_bucket_reportA
Segment recently-played plays into daypart ร familiarity buckets (fresh tracks vs staples from your top tracks, default medium_term) as a lightweight listening-mood proxy. Quota: GET /me/player/recently-played + 1ร GET /me/top/tracks.
| Name | Required | Description | Default |
|---|---|---|---|
| max_items | No | Max recently-played items to walk (default 150; the API pages 50 per call). | |
| time_range | No | Top-tracks window defining "staple" music. Default: medium_term | medium_term |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden, and the quota disclosure ('GET /me/player/recently-played + 1ร GET /me/top/tracks') is genuinely valuable operational transparency beyond annotations and schema, implicitly confirming read-only behavior since only GET endpoints are listed. It doesn't explicitly state non-mutation or edge-case behavior, but this is largely adequate for an analysis tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with zero filler: the core action and output concept are front-loaded in the first sentence, and the quota note in the second adds operational value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The concept is well explained, the quota is disclosed, and every parameter has a description, but with no output schema the description never specifies what the buckets contain or how dayparts are divided, and edge cases (empty recently-played history, sparse top tracks) are unaddressed. Adequate but with clear gaps for a tool that generates a custom report.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with meaningful text for all three parameters (max_items pagination behavior, time_range's role, response_format output modes), so the baseline 3 applies. The description reinforces time_range's semantics ('fresh tracks vs staples from your top tracks, default medium_term') but adds no parameter-level detail 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 and resource ('Segment recently-played plays') plus a distinctive output concept ('daypart ร familiarity buckets') and an interpretive purpose ('lightweight listening-mood proxy'). This makes it clearly distinguishable from raw retrieval siblings like get_recently_played and get_top_tracks, and from heavier analysis tools, without needing to open 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?
The phrase 'lightweight listening-mood proxy' implies use for quick mood-oriented questions, and the quota note conveys operational cost, but there is no explicit when-to-use guidance, no when-not-to-use conditions, and no named alternatives among the many sibling report tools (e.g., listening_report, taste_shift_report, discovery_ratio). Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
morning_briefingA
Daily digest in one call: new releases from followed artists + new episodes from saved shows + per-show backlog + today's listening so far. Superset of whats_new + show_new_episodes. Quota: roughly 2 + artists + shows reads (budgeted).
| Name | Required | Description | Default |
|---|---|---|---|
| max_shows | No | Budget for per-show episode lookups. Default 20. | |
| max_artists | No | Budget for followed-artist album lookups. Default 20. | |
| since_hours | No | Lookback window for new releases/episodes. Default 24h. | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
| include_listening | No | Include today's listening so far (adds 1 recently-played read) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full transparency burden, and it does meaningful work: it discloses a behavioral cost profile ('Quota: roughly 2 + artists + shows reads (budgeted)') โ exactly the kind of trait an agent needs for cost-aware tool selection โ and clarifies this is a multi-source aggregation read. It doesn't address failure modes or output shape, but response_format covers output style and the read-only nature is strongly implied.
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, each earning its place: the digest contents, the sibling relationship, and the quota cost. The core idea is front-loaded and the '+'-separated component list packs maximum information into minimum space without becoming unreadable.
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 5-parameter aggregation tool with no output schema and no annotations, the description covers the key decision factors: what is aggregated, how it relates to simpler alternatives, and what it costs in API reads. The response_format parameter handles output style, and the parameter descriptions cover the budget knobs. Minor gap: 'per-show backlog' semantics are never expanded, but this is a small omission against otherwise strong coverage.
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 baseline is 3. The description adds some connective value by linking 'budgeted' quota language to max_shows/max_artists and mapping digest components to params like include_listening and since_hours, but it provides no parameter-specific syntax or constraints 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 deliverable ('Daily digest in one call') and enumerates its four distinct components: new releases from followed artists, new episodes from saved shows, per-show backlog, and today's listening. The 'Superset of whats_new + show_new_episodes' phrase names sibling tools directly, making scope differentiation immediate and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Positioning the tool as a superset of whats_new + show_new_episodes gives the agent an anchor for when to choose it (consolidated multi-facet digest) versus the targeted siblings. However, it never explicitly states a when-not-to-use condition, such as 'if you only need new releases, call whats_new instead' โ the exclusion logic is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
most_replayedA
Most-replayed tracks in the recent window: play counts per track from recently-played, deduped โ "on repeat" computed locally (complements window-based listening_report). Quota: ๐ข 1-2 reads, local compute.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Top N tracks to return (default 10) | |
| pages | No | Recently-played pages to walk (default 2) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses the data source, deduplication behavior, local computation approach, and a green quota signal (1-2 reads, local compute), which conveys a lightweight read operation. Minor gaps remain around exact window definition and output shape, but the response_format parameter partially covers output expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two dense sentences with no filler. It front-loads the core result, then adds sibling relation and quota context efficiently. Every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only aggregate with three optional parameters and no output schema, the description covers data source, computation, dedup, quota, and the relationship to listening_report. It could be more explicit about the exact recent-window duration, but given the pages parameter and the well-defined response_format, this is generally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters limit, pages, and response_format are already well-documented. The description adds only context about 'recent window,' loosely mapping to pages, and deduping, which affects result interpretation, but doesn't add meaningful per-parameter semantics 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 it returns most-replayed tracks in a recent window, defining them as per-track play counts from recently-played with deduping. It also names listening_report as a related sibling, so an agent can distinguish this tool from other listening-stat tools without opening schemas.
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 clear context: it complements the window-based listening_report, and explicitly says 'on repeat' is computed locally from recently-played data. An agent can infer when to choose this tool, though it doesn't enumerate explicit when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_items_between_playlistsA
Bulk rehome items between playlists. Mode copy keeps the source intact; mode move removes from source after copying. Supports dedupe against target and optional name/artist filter.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | copy = leave source intact; move = remove from source after copy | copy |
| dedupe | No | Skip tracks already in target. Default: true | |
| filter | No | Optional substring filter: only transfer tracks whose name or artist name contains this string (case-insensitive) | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
| source_playlist_id | Yes | Source playlist ID or spotify:playlist: URI | |
| target_playlist_id | Yes | Target playlist ID or spotify:playlist: URI |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Given no annotations, the description carries the behavioral burden, and it does well: it explicitly discloses that move removes from source, copy keeps source intact, dedupe skips existing target tracks, and dry_run previews without performing. It even details mode semantics. It doesn't mention possible partial failures, idempotency, or rate-limit considerations, so 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?
The description is two tight sentences that front-load the core action and then clarify modes and options. Every clause earns its place with minimal 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?
For a complex mutating operation with 8 parameters, the description covers the key decision points: copy vs move, dedupe, filter, and dry-run. It doesn't explain return values, but there is no output schema and the response_format parameter hints at what to expect. It could mention permission/ownership constraints or that it operates on Spotify playlist IDs, but overall it is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents every parameter including mode, dedupe, filter, dry_run, max_results, response_format, and IDs. The description adds no extra parameter details beyond restating the mode and dedupe/filter concepts. 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?
Description states specific verb 'Bulk rehome items between playlists' and differentiates copy/move modes. It clearly identifies what the tool does. However, it doesn't explicitly distinguish itself from near-sibling 'move_tracks_between_playlists' and other playlist manipulation tools in the sibling list, so it loses a point.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use it via copy vs move semantics and mentions dedupe/filter options, giving implied usage context. But it does not explicitly state when to prefer this over alternatives like move_tracks_between_playlists, batch_add_to_playlist, playlist_union, etc., nor does it mention typical use cases or prerequisites like ownership/permission requirements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_tracks_between_playlistsA
Move matching tracks (by uris, name substring, or artist) from one playlist to another: backs up the source to a local file first, deletes the matched positions from the source, then appends them to the destination. dry_run defaults to TRUE. Quota: ๐ก GETs + chunked deletes + chunked adds when committing.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Move items whose name contains this substring | |
| artist | No | Move every track by this artist (ID/URI or exact name) | |
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Pass false to commit. Default true | |
| match_uris | No | Track uris to move | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
| source_playlist_id | Yes | Source playlist (ID or spotify:playlist: URI) | |
| destination_playlist_id | Yes | Destination playlist (ID or spotify:playlist: URI) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it delivers: it discloses that the source is backed up to a local file first, that matched positions are deleted from the source and appended to the destination, that dry_run defaults to TRUE, and the quota class (๐ก with chunked deletes/adds on commit). This is exemplary disclosure for a destructive mutation tool, letting an agent understand the safety profile and side effects before invoking.
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: action first, then operation sequence and safety behavior, then the dry_run default, then quota cost. Every clause earns its place, and the most decision-relevant facts (destructive behavior, backup, dry_run default) are 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 complex tool with 8 parameters, no annotations, and no output schema, the description covers the essential operational context: order of operations, backup safety, execution default, and quota. Remaining gaps are the lack of differentiation from the near-identical move_items_between_playlists sibling and no description of the PLAN/return format (though the schema's dry_run field does mention returning a PLAN).
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 value by synthesizing the three match criteria (match_uris, query, artist) into a single matching concept and clarifying the execution flow relative to source and destination parameters. This is modest but real added meaning beyond the schema's individual field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Move matching tracks ... from one playlist to another' and enumerates the three matching modes (uris, name substring, artist). This makes the tool's function unambiguous. However, the very close sibling 'move_items_between_playlists' exists and is never named or differentiated, so the description is clear but does not explicitly distinguish itself from that sibling.
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 context through the match modes ('by uris, name substring, or artist') and the backup/dry_run safety design, which suggests it is the safe choice for cross-playlist moves. But it never explicitly states when to use this tool versus alternatives like move_items_between_playlists, copy_playlist, or add_to_playlist/remove_from_playlist, and gives no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mutation_log_exportA
Render the JSONL mutation history as a CSV or markdown report, date/uri-filtered โ an audit trail you can actually read. Local file only, zero API calls.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End date (inclusive), YYYY-MM-DD | |
| from | No | Start date (inclusive), YYYY-MM-DD | |
| format | No | markdown | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the full burden, and it delivers key behavioral facts: it is non-destructive ('Render'), reads a local JSONL file only, and makes 'zero API calls' โ implying no auth, no rate limits, and no network failure modes. It does not explain how it relates to the undo/backup mutation system, but the core safety and execution profile is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two front-loaded sentences totaling roughly 29 words. The first defines what and how, the second defines scope and side-effect profile; no filler and no repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read/report tool with no annotations and no output schema, the description covers source, formats, filters, and local-only behavior. It falls short on the unbacked 'uri-filtered' claim and on how the report output maps to the response_format parameter, leaving some agent-facing ambiguity.
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 80% with solid descriptions for from/to, format, max_results, and response_format, so the schema already carries the parameter meaning. The description's 'date/uri-filtered' confirms the date range but claims a uri filter with no corresponding parameter in the schema, and it doesn't clarify how the format (csv/markdown) and response_format (concise/detailed/json) enums interact.
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 โ 'Render the JSONL mutation history' โ plus output formats (CSV or markdown) and filters (date/uri). 'Local file only, zero API calls' distinguishes it from the many Spotify-API-backed export/search siblings, and 'audit trail' positions it beside undo/verify tools rather than competing with 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?
The description implies when this applies ('Local file only, zero API calls' โ offline audit of the mutation log), but names no alternatives or exclusions. With a large sibling set including history_search, export_listening_history, undo_mutation, and receipt_lookup, explicit routing ('use X when you want Y') would meaningfully help an agent choose correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
muteA
Set volume to 0 while remembering the previous level in the sidecar โ one word beats volume_step รN. unmute restores it. Quota: ๐ข 1 read + 1 write.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| device_id | No | Device to mute (defaults to active device) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It discloses that the tool persists previous volume in the sidecar, that unmute restores it, and that the quota is '1 read + 1 write.' This adds meaningful behavioral context, though it does not mention behavior when already muted or describe the response shape.
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 compact sentences, each earning its place: the action, the advantage over volume_step, the restore mechanism, and the quota. The core behavior is front-loaded and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple mutating tool with full schema coverage, the description provides enough context: what it does, how it stores state, how to restore, and cost. It could add what happens on repeated mute or clarify whether the device must be specified, but these are minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents dry_run, device_id, and response_format. The description adds no parameter-specific detail, so the baseline of 3 is appropriate; the schema handles the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Set volume to 0 while remembering the previous level in the sidecar.' It also distinguishes itself from the sibling tool unmute by noting 'unmute restores it,' and from volume_step by framing mute as a single word that replaces repeated steps.
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 clear use context: use mute as a one-word alternative to multiple volume_step calls, and use unmute to restore the prior level. It does not explicitly exclude alternatives like set_volume or state when not to use mute, so it stops short of a fully explicit when/when-not framing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
never_played_savedA
List saved tracks absent from your recently-played window. Honest bounds: recently-played only covers roughly your last 50 plays, so this is "not played lately", not "never played". Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: report the request cost of the scan without performing it (default false) | |
| scan_cap | No | Max saved items to walk per paginated source (default: SPOTIFY_MCP_FETCH_ALL_CAP) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and it does well: it explicitly states 'Read-only' and spells out the key behavioral limitation that the recently-played window covers only roughly the last 50 plays. It also corrects the potentially misleading tool name. It does not disclose scan cost or pagination, but the schema's dry_run parameter already signals scan-cost semantics.
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, each earning its place: the operation, the honest bounds, and the read-only flag. The most decision-relevant information is front-loaded in the first sentence. No filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The core purpose, the key caveat, and the read-only safety trait are covered, which is solid for a no-annotation, no-output-schema tool. However, it omits any description of the return shape (no output schema exists) and does nothing to route the agent among the many similar library-analysis siblings. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all four parameters (dry_run, scan_cap, max_results, response_format), warranting the baseline 3. The description adds no parameter-specific semantics beyond the general notion of scanning saved tracks against a recently-played window. It neither compensates nor detracts from 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 and resource: 'List saved tracks absent from your recently-played window.' The honest-bounds clarification ('not played lately', not 'never played') removes ambiguity from the tool name and sets accurate expectations. This distinguishes it from siblings like get_recently_played and get_saved_racks without needing to open their schemas.
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 alternatives are named and no when-to-use vs when-not-to-use guidance is given, despite many plausible siblings (get_recently_played, last_heard, dead_library_finder). The 'Honest bounds' caveat is about data-source semantics, not a prescription for choosing this tool. An agent must infer applicability from the name and description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
new_music_from_saved_artistsA
Newest releases across the artists you follow (and optionally those in your saved albums), sorted by release date โ your personal new-release feed. Quota: ๐ด followed-artist walk + per-artist album peeks.
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | ||
| artist_limit | No | Max artists to check. Default: 20 | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
| include_saved_album_artists | No | Also include artists from your saved albums. Default: true |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It adds a useful quota warning ('red followed-artist walk + per-artist album peeks') that flags a potentially expensive operation, but it does not state whether this is read-only, describe pagination/limits, failure modes, or any side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with the main value proposition front-loaded and the quota warning cleanly appended at the end. No tautology, fluff, or repetition of schema details.
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 low-complexity optional-param read tool, the core scope, sort order, optional saved-album inclusion, and quota warning are all present. The description adequately carries the return concept ('newest reases sorted by release date') since no output schema exists, though exact item types are left to response_format.
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 describes 3 of 4 params; the description only gestures at include_saved_album_artists via 'optionally those in your saved albums'. max_results receives no semantic help from the description, but its numeric schema (max 2000) and the feed concept make it fairly obvious.
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?
Uses a specific verb/object construction: 'Newest reases across the artists you follow...' and brands it 'your personal new-release feed', which clearly separates it from generic feed/explorer siblings. The optional saved-albums clause adds precision.
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 use case โ a personal new-release feed from followed artists โ but never states when-not to use or names alternatives such as new_music_from_top_artists or artist_release_digest. An agent can infer the target use, but there is no explicit disambiguation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
new_music_from_top_artistsA
Fresh-music digest from YOUR listening: probes the latest release of each of your top artists (from /me/top/artists) and flags those released within the last N days. Quota: 1 /me/top/artists + 1 small albums call per top artist.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Freshness window in days. Default: 30 | |
| window | No | Top-artist window. Default: 'medium_term' | |
| artists_cap | No | Top artists probed. Default: 10 | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden, and it meets that burden well. It reveals the actual execution pipeline ('1 /me/top/aartists + 1 small albums call per top artist'), which tells an agent this tool is heavy and quota-conscious, and it clarifies the scoping (only artists from the listening profile, only latest release per artist, only releases within N days). It stops short of stating read-only safety explicitly and doesn't mention auth scopes, but the quota disclosure adds genuine behavioral context beyond any basic 'shows new releases' summary.
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, zero fluff: the first front-loads the value proposition and the algorithmic loop, the second packs the quota profile. Every piece of information earns its place, and nothing is repeated from the 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?
For a tool with 4 optional params, a 100%-coverage schema, and the response_format param describing output modes, the description is largely sufcient. It explains the algorithm, the cost profile, and the personalization source. The only gap is the lack of an explicit statement of what the default 'concise' output looks like in practice, and no output schema exists to fill that in, but the loss is minor given the response_format enum.
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%, with every parameter described including defaults and enum options, so the schema already does the heavy lifting. The description loosely echoes the `days` parameter via 'last N days' and the `window`/`artists_cap` parameters via 'your top artists', but adds no new semantic detail, format guidance, or interaction notes beyond what the schema already provides. Baseline 3 is correct.
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: it 'probes the atest release of each of your top artists' and 'flags those released within the last N days'. The source data is named explicitly (/me/top/aartists), which cleanly distinguishes it from siblings like new_music_from_saved_aartists that draw from a different library segment. The phrase 'Fresh-music digest from YOUR listening' frames the tool's unique value propostition in one line.
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 context (want fresh releases from your personal top artists) through the active-based framing and the named data source. However, it names no alternative and gives no when-not-to-use condition, despite closely related siblings such as new_music_from_saved_aartists, check_artist_releases, and artist_release_digest that an agent would need help choosing between.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
normalize_spotify_uriA
Normalise any accepted Spotify reference form (URI with extra segments, URL with tracking params, bare ID) into its canonical lowercase spotify: URI, offline.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | Spotify reference in any accepted form | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the behavioral disclosure burden. It usefully states that the operation is offline and that the output is canonical and lowercase, and it enumerates accepted input forms. However, it does not describe behavior for invalid references, nor reconcile the response_format enum (especially 'raw API object') with the stated 'canonical spotify: URI' output.
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 dense sentence with no filler. The core behavior is front-loaded, and the parenthetical examples add precision without bloating the description. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter pure formatter, the description is nearly complete: it gives the accepted input forms, the exact output form, and the network behavior. The main gaps are the unmentioned response_format behavior and lack of invalid-input semantics, but the schema covers the parameter and no output schema is required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters, so the baseline is 3. The description adds real value for 'ref' by naming concrete accepted forms that the schema's 'Spotify reference in any accepted form' leaves circular. It does not add anything to response_format, but that parameter is already fully described in 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 states a specific transformation: convert any accepted Spotify reference form into a canonical lowercase spotify: URI, with concrete examples (extra segments, tracking params, bare ID). This is clearly more than a tautology. However, it does not distinguish itself from the similarly named sibling canonicalize_spotify_uri, so it stops 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?
No alternatives, exclusions, or when-not-to-use guidance are provided. Given the large cluster of URI utility siblings (validate_spotify_uri, parse_spotify_uri, format_spotify_uri, canonicalize_spotify_uri), an agent receives no explicit rule for choosing this tool over them. The word 'offline' is useful context but not a routing criterion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
now_playing_historyA
Merged listening stream โ recently-played plus currently-playing item on top (deduped). ๐ก (2 reads). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max recently-played items (default 10) | |
| dedupe | No | Deduplicate currently-playing if already most-recent | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does disclose that the tool is read-only and that it consumes 2 reads ('๐ก (2 reads)'), which is genuinely useful cost and side-effect information beyond what the schema offers. It does not describe edge cases (e.g., empty history or nothing currently playing), but the core safety profile is 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?
A single tight sentence front-loads the essential function, then appends the cost indicator and read-only note. Every element earns its place and there is zero filler 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?
For a read-only tool with three fully documented optional parameters and no output schema, the description covers the core behavior, dedupe semantics, cost, and side-effect profile. Output shape is handled by the response_format parameter. The only notable gaps are the absence of explicit sibling routing and edge-case behavior, which are minor for this tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters (limit, dedupe, response_format) with defaults and meanings. The tool description itself adds no parameter-level detail beyond the schema, which lands it at the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: it merges recently-played items with the currently-playing item, deduped, with the current item on top. The merge behavior ('recently-played plus currently-playing') implicitly distinguishes it from siblings like get_recently_played and get_currently_playing, though it never names those alternatives 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 context is implied rather than stated: the 'merged listening stream' phrasing suggests this is the tool to use when a combined view of recent and current playback is needed, versus a sibling that returns only one of the two. However, there is no explicit when-to-use/when-not-to-use guidance or named alternative, so an agent must infer the routing decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_url_to_spotify_uriB
Convert an open.spotify.com URL (including /embed/ forms with ?si= tracking params) into a canonical spotify: URI locally.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | open.spotify.com URL (embed forms accepted, query params ignored) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose that conversion happens 'locally' (no network call, no side effects) and that query params are ignored โ genuinely useful behavioral context. However, it does not state error behavior for invalid or non-Spotify URLs, nor what the output representation actually looks like.
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 front-loaded sentence carrying the verb, input, output, accepted variants, and the local-execution trait with zero filler. Every clause earns its place, and the most decision-relevant information appears first.
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 low-complexity, purely local transform with 2 params, 1 required, and full schema coverage, the description covers the input contract and the output form (canonical spotify: URI). The main gap is unspecified error handling for malformed input, and since there is no output schema, the exact return shape is left to inference.
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 baseline of 3 applies; both params are already fully described in the schema, including response_format's enum semantics. The tool description largely reiterates schema content (embed forms, query params ignored), adding little meaning beyond what the schema already conveys.
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 ('Convert') and resource (open.spotify.com URL โ canonical spotify: URI), with useful scope detail on accepted forms (/embed/ variants, ?si= tracking params). The input domain (URL, not URI) inherently separates it from the reverse sibling spotify_uri_to_open_url, but it never names or explicitly differentiates from nearby siblings like canonicalize_spotify_uri or parse_spotify_uri.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no named alternatives, and no exclusions are provided. In a toolset with a large cluster of URI utilities (spotify_uri_to_open_url, canonicalize_spotify_uri, extract_spotify_id, parse_spotify_uri), the agent receives no routing help. The only implicit hint is the input form (URL vs URI), which is not sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
orphaned_artist_checkA
Find asymmetries in your library: artists you saved tracks from but never saved an album of, and vice versa. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: report the request cost of the scan without performing it (default false) | |
| scan_cap | No | Max saved items to walk per paginated source (default: SPOTIFY_MCP_FETCH_ALL_CAP) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description correctly carries the safety burden by explicitly saying 'Read-only'. It does not disclose that this is potentially a scan across multiple library sources with cost implications, nor does it describe output shape; the read-only note is useful but only partial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. The behavior is front-loaded, and the parenthetical definition plus read-only note earn their 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?
The core behavior is adequately explained, but there is no output schema and the description does not state what the result looks like (list of artists, counts, report). It also does not mention that the scan may be expensive despite the dry_run and scan_cap parameters implying that cost. Adequate, but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema describes all four parameters with defaults, bounds, and meaning, so the description does not need to repeat them. The description adds no new parameter semantics, matching the baseline of 3 for full schema 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 a specific verb ('Find') and resource ('asymmetries in your library') and then precisely defines the asymmetry: artists with saved tracks but no saved album, and vice versa. This distinguishes it from sibling tools like unsave_orphan_tracks or library_coverage_report without needing to inspect their schemas.
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 makes the diagnostic intent clear and signals safety with 'Read-only', so an agent can infer when to use it. However, it names no alternative tools or conditions for when not to use it, which would be valuable given the very large sibling tool set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
overlap_playlistsA
Find tracks shared across playlists: reports how many playlists each track appears in and lists tracks present in at least min_overlap playlists (default: all of them), most-shared first.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| playlists | Yes | Two or more playlists, as IDs or spotify:playlist: URIs | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| min_overlap | No | Minimum number of playlists a track must appear in. Default: all playlists | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the burden of behavioral disclosure. It clearly describes the computation: count per track, filter by min_overlap, and sort most-shared first, plus the default threshold. It does not explicitly state read-only or side-effect behavior, but the verbs 'find', 'reports', and 'lists' strongly imply a non-mutating analysis tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the core purpose, then packs the key behavioral details โ count behavior, threshold, default, and ordering โ with no filler 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?
With no output schema, the description still explains the return semantics: per-track playlist counts, a filtered list based on min_overlap, and ordering. It is complete enough for core invocation, though the exact shape of returned track items and explicit use-case exclusions are left to inference.
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 baseline is 3. The description restates the min_overlap default already present in the schema and adds 'most-shared first', which is an output-ordering detail rather than new parameter-level 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 (find tracks shared across playlists) and adds unique behavior: per-track playlist counts, min_overlap filtering, and most-shared-first ordering. However, it does not explicitly differentiate itself from sibling tools like playlist_intersection or playlist_overlap_matrix, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied by 'Find tracks shared across playlists' and the min_overlap parameter, which suggests when to tighten or loosen the overlap requirement. But the description gives no explicit guidance on when to choose this tool over alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parse_spotify_uriA
Parse a single spotify: URI into its entity kind and ID parts without any network call; reports validity and a parse error when malformed.
| Name | Required | Description | Default |
|---|---|---|---|
| uri | Yes | Spotify URI, open.spotify.com URL, or bare ID to parse | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden, and it discloses the two most decision-relevant traits: this is a network-free operation (implying no side effects, auth, or rate limits) and malformed input yields a parse error rather than silent failure. It also states the success output (entity kind and ID parts) but stops short of describing exact return structure, which is acceptable for a deterministic parse utility.
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 front-loads the verb and resource, then packs the network-free guarantee, output parts, validity reporting, and error behavior into one clause with zero redundancy. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity utility with both parameters fully described in the schema, the description covers purpose, offline behavior, output shape (kind + ID), validity reporting, and malformed-input behavior. With no output schema present, its brief account of return values is sufficient; the only minor gap is that per-mode differences of 'response_format' are left entirely to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents the 'uri' parameter's three accepted forms (Spotify URI, open.spotfy.com URL, bare ID) and the 'response_format' enum with its default. The description adds no parameter-level meaning beyond the schema's property descriptions, so the 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 names a specific verb ('Parse'), a specific resource (a single spotify: URI), and the outputs (entity kind, ID parts, validity, and an error when malformed). The phrases 'single' and 'without any network call' also implicitly set it apart from batch_parse_spotify_uris and network-dependent tools, so an agent can place it within the dense cluster of spotify-URI siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool โ local, network-free parsing โ but it never names alternatives such as validate_spotify_uri, extract_spotify_id, spotify_uri_kind, or batch_parse_spotify_uris, nor does it give when-not-to-use conditions. An agent must infer the boundaries from sibling names alone, which is workable but not guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pauseC
Pause playback on the active device
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| device_id | No | Target device ID | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the full behavioral disclosure burden. It names the action and scope but does not say what happens if no device is active, whether pausing is idempotent, or how dry_run and response_format affect the operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler or redundancy. Every word contributes to the core meaning, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite low tool complexity, the description is incomplete for safe selection and invocation. It lacks guidance about alternative tools, device targeting semantics, failure behavior, and expected output, leaving the agent to infer important context from the schema and sibling list.
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 parameters are already documented. The description adds no extra parameter-level meaning beyond loosely implying that 'active device' is the default target, which relates to device_id but is never made explicit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('pause') and a clear resource ('playback on the active device'). It is understandable and distinguishable from siblings like 'play' or 'skip_next', though it does not explicitly differentiate itself from the closely related 'pause_everywhere'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to prefer this tool over alternatives such as 'pause_everywhere' or 'mute'. There is no mention of prerequisites like requiring an active device, nor context for choosing between device_id and the active device.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pause_everywhereA
Pause every live Connect device (attempts PUT /me/player/pause per non-restricted device) โ kills the "which speaker is still playing" hunt. Quota: ๐ก 1 read + N writes (one pause per live device).
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the basic action by disclosing the access pattern ('1 read + N writes'), the per-device API attempts, and the 'non-restricted device' qualifier. This is valuable context given there are no annotations. It does not fully detail partial-failure behavior or what happens to already-paused devices, but the 'attempts' wording covers the key risk.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tight segments: a core action with API detail and a use-case hook, plus a quota note. No filler words; each clause earns its place. The most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description adequately covers what it does, why it is useful, the underlying API calls, and quota implications. It does not describe the return structure, but the response_format parameter and dry_run option partly address that. The description is sufficient for an agent to decide when to invoke it and what to expect in terms of side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for both parameters, so the schema already explains dry_run and response_format. The tool description adds no parameter-level meaning beyond what the schema provides, which matches the baseline of 3 for high schema 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 states a precise, specific action: 'Pause every live Connect device' with a clear resource scope. It also names the underlying API call (PUT /me/player/pause per non-restricted device), making the tool's behavior unambiguous. It immediately distinguishes itself from the single-device 'pause' sibling by emphasizing 'every live Connect device'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: the 'which speaker is still playing' hunt, implying a multi-device scenario. It does not explicitly name alternatives or exclusions, but the multi-device scope in the first phrase is enough to differentiate from the sibling 'pause' tool. A more explicit 'use pause for a single device' would earn a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
peek_nextA
Queue lookahead โ next N tracks with durations and total runway. Right-sized via max_results. ๐ข (1 read). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Alias for max_results: how many to peek (default 5) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It adds two useful traits: the operation is read-only and costs exactly one API read (๐ข 1 read). This is beyond what the schema or annotations provide, though it does not cover edge cases like an empty queue.
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 core purpose, and no filler. The read-only and single-read note is compact and useful. 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?
For a simple, read-only lookahead tool with a fully described schema, the description covers the essential return content (tracks, durations, total runway) and safety profile. It is slightly light on edge-case behavior and response-format expectations, but no output schema exists and the schema covers response_format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters are fully described in the schema (100% coverage), so the description does not need to compensate. It does reinforce that max_results controls result size, but adds little semantic value 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 identifies the resource (the queue) and the operation (lookahead/peek at next N tracks) and the output (durations and total runway). It is specific enough to distinguish it from general queue tools, though it does not explicitly name any sibling tool or contrast itself with get_queue/get_queue_snapshot.
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 peek_next versus alternatives like get_queue, get_queue_snapshot, or queue_runtime_report. The read-only note implies safe usage, but there is no explicit context, prerequisite, or exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pin_playlistC
Follow (pin) a playlist to your library. PUT /playlists/{id}/followers.
| Name | Required | Description | Default |
|---|---|---|---|
| public | No | Whether the follow should be public (Spotify default: true) | |
| playlist_id | Yes | Playlist ID to follow | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description bears the full burden of disclosing behavioral traits. It states the core mutation but does not mention authentication requirements, whether following is idempotent, the public/private default, or what happens if the playlist is already followed. The endpoint line adds little behavioral insight beyond what the action already implies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and front-loaded, with no redundant prose. The endpoint snippet is mildly useful but not strictly necessary; overall the structure is efficient, though it sacrifices behavioral context for brevity.
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 mutation tool with no annotations and no output schema, the description is too sparse. It lacks guidance on when to use the tool, how it relates to siblings, and behavioral consequences. The schema covers parameters, but the surrounding decision context 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 description coverage is 100%, so the schema already documents all parameters including 'public' and 'playlist_id'. The description adds no additional parameter-level meaning beyond repeating the playlist ID in the endpoint path, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Follow (pin)') and the resource ('a playlist to your library'), making the tool's purpose apparent. It does not explicitly differentiate itself from siblings like playlist_to_library or unpin_playlist, but the meaning is reasonably specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives such as unpin_playlist or playlist_to_library. The HTTP endpoint is an implementation detail, not usage direction. An agent must infer appropriate use from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_podcast_sessionB
Greedy-pack your saved podcast episodes into a listening session of a given length. Episodes play their remaining time (duration minus resume position); fully played ones are skipped. Scanning stops at the first unplayed episode that doesn't fit.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Restrict the source: 'episodes' = your saved episodes only, 'shows' = recent episodes of your saved shows only. Omit to use saved episodes (plus saved shows when saved_only is false) | |
| minutes | Yes | Session length in minutes (1โ480) | |
| saved_only | No | When no kind is set, include recent episodes of saved shows too. Default: true (saved episodes only) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It does transparently describe the selection algorithm: episodes count their remaining time, fully played episodes are skipped, and scanning stops at the first unplayed episode that doesn't fit. However, it does not explicitly state whether this is a read-only planning operation or whether it starts playback or mutates state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three dense sentences with no filler. It front-loads the primary action, then gives the key behavioral rules in compact, precise language.
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 core algorithm and source scope are well covered, and the schema documents parameters thoroughly. However, with no output schema and no explicit statement about whether the tool returns a plan or executes a session, an agent may need additional context to know the exact return shape and the relationship to start_podcast_session.
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 baseline is 3. The description adds meaning to `minutes` by clarifying that session length is measured against remaining episode time, and it frames the source as saved episodes. It does not add significant semantics beyond the schema for `kind`, `saved_only`, `max_results`, or `response_format`.
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 action and resource: greedy-pack saved podcast episodes into a listening session of a given length. It adds precise selection rules (remaining time, skipping fully played episodes, stopping at the first non-fitting episode), which makes the purpose clear. However, it does not explicitly distinguish itself from sibling tools like start_podcast_session.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives such as start_podcast_session, queue_next_episode, or episode_resume. The use case is implied by the verb 'plan' and the algorithm, but the description never states when a session plan is preferable to starting playback directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_volume_level_across_devicesA
Plan setting every (volume-capable) Spotify device to one target volume level โ returns the exact per-device PUT calls without executing anything. Read-only planner.
| Name | Required | Description | Default |
|---|---|---|---|
| volume | Yes | Target volume percent for every selected device (0โ100) | |
| device_ids | No | Restrict the plan to these device ids/names; default all volume-capable devices | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It explicitly discloses that the tool is read-only, does not execute anything, and returns exact per-device PUT calls. This is a strong, accurate disclosure of the side-effect-free behavior and prevents the agent from expecting actual volume changes.
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 the core action front-loadedโ'Plan setting every (volume-capable) Spotify device...'โfollowed by the critical execution boundary. The length is appropriate and nearly every clause adds value; the slight redundancy of 'without executing anything' and 'Read-only planner' is acceptable reinforcement rather than bloat.
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 read-only planning tool with no output schema, the description clearly states what the caller will receive ('exact per-device PUT calls'), so the absence of an output schema does not leave the agent guessing about return values. Combined with the fully documented input schema, the description is complete enough for confident invocation and interpretation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already has 100% parameter coverage with descriptions for volume, device_ids, and response_format. The description does add helpful context about 'volume-capable' devices and 'per-device PUT calls', but it does not need to re-explain each parameter. Baseline 3 is appropriate because the schema carries the parameter-semantic load.
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 verb ('Plan'), the resource ('every volume-capable Spotify device'), and the action (setting one target volume level). It also distinguishes itself from execution tools by explicitly stating it returns PUT calls 'without executing anything' and calling itself a 'Read-only planner.' This is specific enough for an agent to separate it from siblings like apply_volume_plan or set_volume.
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 clear context: use this tool when you want to plan/preview per-device volume changes without applying them. It does not explicitly name alternative tools or state when-not-to-use criteria, but 'without executing anything' and 'Read-only planner' make the usage boundary evident enough for an agent to select it correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playC
Start or resume playback. Optionally target specific content.
| Name | Required | Description | Default |
|---|---|---|---|
| uris | No | Up to 100 track/episode URIs to play as an ad-hoc queue | |
| offset | No | Index within an album/playlist context to start from. Ignored for ad-hoc uris; not valid for artist contexts (use offset_uri instead). | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| device_id | No | Target device ID; uses active device if omitted | |
| offset_uri | No | Track URI inside the context to start from โ required for artist contexts, where a numeric index is rejected | |
| context_uri | No | Spotify URI for an album, artist, or playlist | |
| position_ms | No | Seek position to start at (ms) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral disclosure burden. It only says 'Start or resume playback' without disclosing side effects such as changing current playback state, requiring a target device, or that dry_run can preview changes. The schema reveals behavior (e.g., dry_run, context_uri, offset_uri), but the description itself adds no transparency beyond the raw action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler words. It names the core action first and adds a scope hint second. It is not embarassingly short enough to be under-specified for purpose, but it could perhaps integrate the targeting hint better. Overall it is efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 8 optional parameters, no output schema, and no annotations, the description is too thin to support correct invocation in all contexts. It does not explain how start/resume behaves differently across contexts (album vs artist vs ad-hoc queue), when offset_uri is required, or what happens when no device is specified. An agent would need to rely on schema alone and could still miss important behavioral constraints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters with meaningful descriptions, so the baseline is 3 and the description does not need to repeat parameter details. The phrase 'Optionally target specific content' hints at context_uri/uris but adds no new meaning. Since the description does not conflict with or expand on the schema, a 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Start or resume playback') and resource (playback), which is specific and not a tautology. It also hints at targeting content ('Optionally target specific content'). However, it does not distinguish itself from sibling tools like play_on, play_at, or queue_next, which all involve starting or resuming playback in some way.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus the many sibling playback tools such as play_on, play_at, queue_next, or resume_playback_position. The description implies it is the general entry point for starting/resuming playback, but lacks any exclusions, prerequisites (e.g., active device), or alternative tool mentions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_atB
Start playback at a specific position โ accepts H:MM:SS / MM:SS / seconds string or position_ms. Wraps PUT /me/player/play with offset/position_ms. ๐ข (1 write).
| Name | Required | Description | Default |
|---|---|---|---|
| at | No | Position as "1:23" or "01:02:03" or "90" seconds | |
| uris | No | Track/episode URIs | |
| offset | No | Offset index within context | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| device_id | No | Target device id | |
| offset_uri | No | Offset URI within context to start at | |
| context_uri | No | Context URI (playlist/album URI) โ XOR uris | |
| position_ms | No | Position in ms (alternative to at) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose meaningful behavioral traits: it is a single write operation ('๐ข (1 write)') and it wraps the PUT /me/player/play endpoint with offset/position_ms. However, it omits consequences such as whether current playback/queue is replaced, device requirements, or what happens when no context is supplied.
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 with zero filler. The core purpose is front-loaded, and the endpoint plus write-count are conveyed compactly. 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?
The core function and position formats are conveyed, which is adequate for a minimum viable definition. But with 9 parameters, no annotations, no output schema, and a crowded playback sibling group, the description is missing usage-routing and side-effect context that an agent would need to invoke it confidently.
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 baseline is 3; the schema already documents all 9 parameters. The description adds a compact summary of accepted time formats (H:MM:SS / MM:SS / seconds / position_ms), but this largely duplicates the schema's 'at' and 'position_ms' entries and adds nothing about the relationship between at/position_ms and offset/offset_uri or the dry_run behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Start playback at a specific position', and enumerates accepted position formats. However, it does not differentiate from closely related siblings like play, play_on, seek, seek_relative, or continue_last; the mention of wrapping PUT /me/player/play is a mechanism hint rather than a contrast.
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 or when-not-to-use guidance. Given the large family of playback siblings (play, play_on, seek, seek_relative, continue_last, checkpoint_playback), an agent receives no routing criteria to select this tool over alternatives. The only implicit signal is that this tool combines starting playback with a target position.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playback_compare_statesA
Diff two saved playback snapshots (sidecar only, no API). Shows item/shuffle/repeat/progress/device/context changes. ๐ข (0 API calls).
| Name | Required | Description | Default |
|---|---|---|---|
| state_a | Yes | First snapshot name | |
| state_b | Yes | Second snapshot name | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It openly states that this is a sidecar-only, API-free operation with zero API calls, and its 'Shows...changes' phrasing implies a read-only diff. This is useful context beyond the raw tool name, though it does not cover edge cases like missing snapshots or failure 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?
Two short sentences deliver the purpose, scope, compared dimensions, and a clear behavioral signal (0 API calls). The most important information is front-loaded, and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a relatively simple tool with fully documented parameters, the description is complete enough: it explains what the tool does, the sidecar-only nature, and the dimensions it compares. It does not explain what 'sidecar' means or how to discover available playback snapshots, but those are minor gaps given the sibling list and 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 input schema already documents all three parameters with 100% coverage, including descriptive text for state_a, state_b, and response_format. The description adds no additional parameter-level detail, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Diff') and a specific resource ('saved playback snapshots'), and clarifies the scope with 'sidecar only, no API'. It names the exact fields compared (item/shuffle/repeat/progress/device/context), making the tool's purpose unmistakable and distinct from playlist snapshot diff 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 clearly communicates the operational context: this works on sidecar snapshots and makes zero API calls. This implies it should be chosen when the agent wants to avoid API usage, but it does not explicitly name alternative tools or state when not to use it, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playback_health_checkA
Probe the playback stack end to end: token validity, available devices, current playback state and queue readability โ reporting pass/fail per probe. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden โ and it delivers with the explicit 'Read-only' disclosure and the 'reporting pass/fail per probe' output contract. This tells the agent both that no state mutation occurs (matching its diagnostic nature) and how results are surfaced, which is especially valuable for a probe tool that would otherwise be ambiguous about failure 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, zero waste. The verb 'Probe' is front-loaded, the four checks are compactly listed in a single clause, and the critical behavioral note ('Read-only') is isolated at the end where it is easy to parse. Every segment earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool (1 optional param, no required params, no output schema), the description is nearly complete: it covers scope, the specific probes performed, the output format, and side effects. The only notable absence is competitor routing to the many adjacent diagnostic tools, but that gap is already accounted for in usage_guidelines, and the pass/fail output description compensates for the missing 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?
Schema description coverage is 100% โ the response_format parameter is fully documented with enum values and per-value explanations (concise/detailed/json). The description's 'pass/fail per probe' framing adds useful context about what the underlying report contains, which helps an agent interpret what 'concise' versus 'detailed' would render, but this is marginal enrichment over an already-complete 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 uses a specific verb ('Probe') with a specific resource ('the playback stack end to end'), then enumerates exactly what is checked: token validity, available devices, current playback state, and queue readability. This makes it clearly distinguishable from overlapping health tools like playlist_health_check, device_health, and quota_probe without needing to open any 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?
The purpose strongly implies usage โ this is the diagnostic to run when checking playback stack health. However, with dozens of adjacent diagnostic tools (spotify_doctor, device_health, get_playback_snapshot, get_context_inspect), there is no explicit statement of when to choose this tool over those alternatives, nor any when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playback_timelineA
Progress forecast โ elapsed/remaining for current track and optional queue runway, plus ETA wall-clock. ๐ข/๐ก (1 read; +1 if include_queue). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| include_queue | No | Include queue total/ETA (extra GET /me/player/queue) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the full behavioral burden. It explicitly discloses read-only status, uses the ๐ข/๐ก traffic light, and quantifies API cost ('1 read; +1 if include_queue'). It stops short of describing behavior when no track is playing, but the safety and cost disclosure is meaningful and goes beyond what any structured field provides.
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 compact sentences front-load the core purpose ('Progress forecast โ elapsed/remaining...') before the cost/safety suffix. Every clause earns its place โ purpose, optional scope, ETA, safety level, and cost โ with zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple tool with 2 fully documented optional parameters and no output schema. The description covers the return content (elapsed/remaining, queue runway, ETA wall-clock) and the response_format parameter explains output shape. Only an edge-case note (e.g., behavior when nothing is playing) is missing, which is minor for a read-only forecast.
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%; both parameters are fully documented in the schema (include_queue's extra GET call and response_format's three output modes). The description adds only a light conceptual link between 'optional queue runway' and include_queue, so the schema carries the heavy lifting and 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?
States a specific verb and resource: 'Progress forecast' with elapsed/remaining for the current track, optional queue runway, and wall-clock ETA. This clearly distinguishes it from nearby siblings like get_now_playing (raw current state), get_queue/describe_queue (queue content), and get_playback_snapshot (state snapshot) by emphasizing prediction/forecast rather than raw retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case is implied through 'progress forecast' and 'ETA wall-clock', and the cost annotation hints at when include_queue matters, but the description never explicitly states when to choose this over siblings such as get_playback_context, get_playback_snapshot, or describe_queue. No exclusion conditions or alternative routing are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_from_searchA
Search Spotify by name and immediately play the best match. Works for songs and podcast episodes โ no URI needed.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search text, e.g. a song title or podcast episode name | |
| market | No | ISO 3166-1 alpha-2 country code โ affects availability/relinking of results; defaults to the account market | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| device_id | No | Target device ID; uses active device if omitted | |
| search_type | No | What to search for: 'track' (song) or 'episode' (podcast episode) | track |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals a key autonomy: it automatically picks the 'best match' and plays immediately. It lacks detail on failure modes (no match found), device selection behavior, or whether playback state is changed, but the core behavior is clearly disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The core action, supported media types, and key differentiator are all front-loaded. It is concise and well structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter tool with no output schema and no annotations, the description is adequate but not complete. It explains the main behavior and the no-URI value proposition, but it omits important execution details such as what happens on no match, whether playback starts on the active device, and how 'best match' is determined.
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 all six parameters are already well documented in the schema. The description adds semantic value by clarifying that the query resolves to a playback target ('no URI needed') and that both songs and episodes are supported, which goes beyond the schema's parameter-level descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action (search + immediately play), a clear resource (Spotify content by name), and covers songs and podcast episodes. The phrase 'no URI needed' distinguishes it from URI-based playback tools, but it does not explicitly differentiate from siblings like play_on, queue_next, or 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?
It implies when to use this tool: when you want to search and play without a URI. However, it does not explicitly state when not to use it, nor does it name alternative tools for playback or precise search, so the guidance is clear but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_add_by_searchA
"Add Radiohead Paranoid Android to Chill Mix" in one shot: search the catalog, pick the top result(s), and add the URI(s) to a playlist. Highest-traffic curation gesture. Quota: ๐ก 1 search + 1 add call.
| Name | Required | Description | Default |
|---|---|---|---|
| pick | No | How many top search hits to add (1โ10). Default 1 | |
| type | No | What to search for. Default track | track |
| query | Yes | Search query, e.g. "Radiohead Paranoid Android" | |
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Default true โ pass false to commit. | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | Yes | Destination playlist, as ID or spotify:playlist: URI | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It mentions the quota and the pick-top-result behavior, but it omits the critical fact from the schema that dry_run defaults to trueโso the tool does not actually add anything unless the caller passes false. This can mislead an agent into expecting a mutation that won't happen.
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 compact and front-loaded with the core operation and an example, and the quota line is useful. The phrase 'Highest-traffic curation gesture' adds some usage context but is somewhat vague and not strictly necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a compound tool with 7 parameters and no output schema, the description is incomplete. It does not disclose the dry_run default, the preview/commit flow, or what a returned plan looks like, leaving a significant gap for an agent deciding whether to call with the default.
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 explains all parameters. The description adds an illustrative query and clarifies the 'top result(s)' behavior tied to pick, but provides no substantive semantic value 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 states a specific compound operationโsearch the catalog, pick top results, and add them to a playlistโwith a concrete example. This clearly distinguishes it from siblings like add_to_playlist or search_tracks by emphasizing the one-shot search-and-add gesture.
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 clear context for when to use the tool: a single high-traffic curation action like adding a known track to a playlist without separate search and add calls. It does not explicitly name alternative tools or exclusion conditions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_artist_heatA
Local artist-concentration check: top-artist share, an HHI concentration index, and the repeat-offender list with track counts. "Is this mix just one band?" Quota: ๐ข 1 GET.
| Name | Required | Description | Default |
|---|---|---|---|
| top_n | No | Artists to list. Default 5 | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | Yes | Playlist to analyse (ID or spotify:playlist: URI) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It signals read-only behavior via the quota hint ('๐ข 1 GET') and clearly enumerates the computed metrics. However, it does not disclose details like whether the analysis follows only top-level tracks, how HHI is calculated, or any pagination/limits behavior beyond the quota.
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 compact sentences with a clear label, a concrete output list, and an emoji flag for quota. Every sentence earns its place: what the tool produces, the business question it answers, and the cost hint. No filler 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?
For a read-only analysis tool with full schema parameter coverage and no output schema, the description defines the metrics well. The remaining gaps are minor: it does not define the HHI scale or the exact criteria for the 'repeat-offender' list, and it does not explicitly state the default behavior for large playlists. Overall, it is sufficiently complete for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters well. The description adds context about the overall output metrics but does not explain how top_n, max_results, or response_format affect the returned concentration metrics. Baseline 3 is appropriate because the schema carries the documentation load.
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 ('Local artist-concentration check'), lists three concrete outputs (top-artist share, HHI concentration index, repeat-offender list with track counts), and includes a plain-language question ('Is this mix just one band?'). This clearly differentiates it from the many sibling 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 implies the use case: analyzing whether a single artist dominates a playlist. The example question and the 'local artist-concentration check' provide clear context for when to use it. However, it does not explicitly name alternative tools or state when not to use it, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_balanceA
Split a playlist into N balanced new playlists: sequential chunks (part 1 = first third, โฆ) or interleave (round-robin deal, so every part samples the whole span). Creates N new playlists; the source is left untouched. Quota: ๐ก 2 GETs + N creates + chunked adds.
| Name | Required | Description | Default |
|---|---|---|---|
| parts | Yes | How many playlists to create (2โ10) | |
| public | No | New playlists public? Default false (private) | |
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Pass false to commit. Default true | |
| strategy | No | sequential = contiguous chunks in order; interleave = round-robin deal. Default interleave | interleave |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| name_prefix | No | Name prefix for the new playlists. Default "<source name> โ Part" | |
| playlist_id | Yes | Playlist to split, as ID or spotify:playlist: URI | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the safety burden and does a good job: it explicitly states side effects ('Creates N new playlists; the source is left untouched') and provides quota cost. It does not repeat the dry_run default behavior, but the schema covers that; the description still communicates mutation, source safety, and resource cost.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three compact sentences with no filler: purpose, strategy explanation, side effects, and quota each earn their place. It is front-loaded and avoids repeating what the schema already says.
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?
Combined with the highly detailed input schema, this description is nearly complete: it covers the action, the two strategies, the non-destructive outcome, and the quota. The only notable gap is not stating in the description that dry_run defaults to true and must be set to false to commit, though that is fully documented in the parameter schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with defaults and enum descriptions already provided for every parameter. The prose adds useful conceptual colorโ'first third,' 'round-robin deal,' 'samples the whole span'โbut no parameter meaning is newly established that wasn't in the schema. 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?
Opens with a concrete verb and object ('Split a playlist into N balanced new playlists') and clearly explains the two strategies: sequential chunks and interleave. It does not explicitly differentiate itself from overlapping sibling tools like split_playlist_by_count or balance_playlist_pairs, but the described behavior is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it: when you want to split a playlist into N roughly balanced parts, and it explains the strategic choice between sequential and interleave. However, it gives no explicit guidance about when to prefer this tool over the many split/plan siblings, and the dry_run-to-commit workflow is only surfaced in the schema, not in usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_changelogA
Diff ONE playlist across two backup snapshots (older โ newer): tracks added, removed, and kept โ plus whether the kept tracks were reordered. The "what changed since last week" view. Read-only, no API calls.
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| backup_file_a | Yes | OLDER snapshot file name (baseline) | |
| backup_file_b | Yes | NEWER snapshot file name (comparison) | |
| playlist_name | Yes | Playlist name to compare (exact first, then substring) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It states exactly that the operation is read-only and makes no API calls, which is valuable and not inferable from the schema alone. It could add more detail about file lookup or failure behavior, but the key safety traits are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tight sentences with no filler. It front-loads the core operation, then adds a memorable usage hook and a critical behavioral note ('Read-only, no API calls'). 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 tool with a fully documented schema and no output schema, the description covers the primary inputs and expected result categories (added, removed, kept, reordered). It does not explain edge cases like missing snapshots or mismatched playlists, but overall an agent has enough to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents every parameter. The description adds conceptual framing ('older โ newer', 'exact first, then substring') but does not materially expand on parameter semantics beyond the schema, matching the 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 clearly identifies the verb ('Diff'), resource ('ONE playlist across two backup snapshots'), and the output categories (added, removed, kept, reordered). It is specific and useful, though it does not explicitly name or differentiate itself from similar sibling tools like snapshot_changelog or diff_playlist_snapshots.
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 'what changed since last week' framing gives clear situational context for when to use this tool. It does not list exclusions or explicitly point to alternatives, so it falls short of the top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_chunk_previewA
Read-only pagination preview: how a playlist splits into write-sized chunks (the 100-URI replace limit) or any custom size โ per-chunk position ranges, first/last items, and item counts. Plan batched edits before running them. Quota: ๐ข 2 GETs.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | 1-based item position to start the first chunk at. Default 1 | |
| page_size | No | Items per chunk to simulate. Default 100 (the atomic-replace limit) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | Yes | Playlist to preview, as ID or spotify:playlist: URI | |
| chunks_to_show | No | How many chunks to detail. Default 5 | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It clearly discloses read-only safety, the quota ('๐ข 2 GETs'), and the kind of output produced (chunk ranges, first/last items, counts). This is strong behavioral disclosure for a preview-only tool, though it doesn't cover auth requirements or error cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both information-dense with no filler. The read-only scoping is front-loaded, followed by the core behavior, the use case, and the quota. 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?
The description fully communicates the tool's purpose, read-only nature, quota, and output shape, which is sufficient for an agent to decide whether to invoke it. It doesn't describe the exact output schema, but none exists, and the parameter defaults are documented in the input schema. A clear, complete definition for a preview utility.
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 meaningful value beyond the schema by explaining that the default page_size corresponds to the '100-URI replace limit' and by clarifying that the output includes per-chunk position ranges, first/last items, and item counts. This connects parameters to the tool's real-world purpose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses a specific verb 'preview' with a clear resource: playlist chunking. It immediately states 'Read-only pagination preview' and explains exactly what the preview shows (chunk position ranges, first/last items, counts), distinguishing it from mutation tools like split_playlist or replace_playlist_items.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool: 'Plan batched edits before running them', framing it as a pre-flight planning step for write operations. It doesn't name alternative tools or exclusion conditions, but the clear use case is enough to route an agent correctly in most contexts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_clone_liveA
Clone a playlist AS IT IS RIGHT NOW into a NEW playlist (name, optional description and publicity) โ works on the live playlist, not a local snapshot; dry_run defaults to TRUE. Quota: ๐ก GET + create + chunked adds when committing.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New playlist name. Default "<original> (copy)" | |
| public | No | Public visibility for a newly created playlist. Default: private | |
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Pass false to commit. Default true | |
| description | No | New playlist description. Default: cloned from source | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | Yes | Playlist to clone (ID or spotify:playlist: URI) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden, and it discloses meaningful traits: dry_run defaults to TRUE as a safety default, and the quota cost (๐ก GET + create + chunked adds when committing) signals side effects. The dry_run default is partially redundant with the schema, but the quota hint and the live-vs-snapshot scoping go beyond the structured fields.
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 front-load the core action and key constraints. Every element earns its place, though the quota line is slightly cryptic ('๐ก GET + create + chunked adds') and could be clearer about what the emoji tier means for the agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description should clarify what the dry_run PLAN looks like and what committing returns; it does not. The 100% parameter schema and clear core behavior make it adequate, but the commit flow and return shape remain underspecified for a tool that can mutate.
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 7 parameters well, warranting the baseline of 3. The description adds context about the live nature of the read ('AS IT IS RIGHT NOW') and the commit side-effect cost, but does not add per-parameter meaning beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Clone') with a clear resource and outcome: a live playlist, as it currently stands, into a NEW playlist. It explicitly contrasts with snapshot-based cloning ('not a local snapshot'), which differentiates it from sibling playlist_clone_snapshot and copy_playlist without needing to open any 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?
The description gives clear when-to-use context by emphasizing it operates on the live playlist rather than a local snapshot, effectively excluding the snapshot-cloning path. However, it does not explicitly name alternative tools like playlist_clone_snapshot or create_playlist, leaving part of the routing to the agent's inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_clone_snapshotA
Restore a playlist from a local backup snapshot as a NEW playlist (never overwrites the live one โ clone, don't clobber). Items restore by URI; catalog-removed items are skipped by Spotify automatically. Quota: ๐ก 0 GETs + create + chunked adds.
| Name | Required | Description | Default |
|---|---|---|---|
| public | No | New playlists public? Default false (private) | |
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Pass false to commit. Default true | |
| new_name | No | Name for the new playlist. Default "<name> (restored YYYY-MM-DD)" | |
| backup_file | Yes | Snapshot file name, e.g. backup-2026-08-28-1.json (see playlist_history) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_name | Yes | Playlist name inside the snapshot to clone | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It reveals key traits: the operation is non-destructive, items restore by URI, catalog-removed items are skipped automatically, and the quota cost is '0 GETs + create + chunked adds.' This is strong transparency for a mutation-adjacent tool, though it stops short of covering permission requirements, error behavior, or the default dry-run preview flow.
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 plus a quota line. Every element earns its place: the purpose and safety guarantee are front-loaded, followed by the URI-copy behavior and the cost disclosure. There is zero filler 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?
For a 7-parameter tool with no output schema and no annotations, the description covers the core purpose, safety trait, and quota well. Yet it omits useful context such as the dry_run default (a preview that changes nothing unless explicitly committed) and does not contrast with overlapping sibling restore tools. These gaps matter because agents need to know this tool plans by default and how it differs from other snapshot-restore operations.
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 every parameter is already documented with meaning. The description adds only a generic reference to 'local backup snapshot' and does not elaborate on parameters beyond what the schema provides. Baseline 3 is appropriate; 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?
Opens with a specific verb and resource: 'Restore a playlist from a local backup snapshot as a NEW playlist.' The phrase 'clone, don't clobber' crisply captures the tool's central non-destructive behavior and distinguishes it from overwrite-style restores. An agent can immediately understand what this tool does and how it differs from a plain restore.
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 a clear context: use this when you want to restore a saved playlist as a new, separate playlist rather than overwriting a live one. The 'never overwrites the live one' clause implies a safe-clone use case among many snapshot/restore siblings. However, it never explicitly names alternative tools (e.g., restore_playlist_from_snapshot, apply_snapshot_changes) or states when not to use this one, so it stops short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_collaboration_reportA
Report who added what to a playlist (counts + first/last timestamps, most-active)
| Name | Required | Description | Default |
|---|---|---|---|
| playlist_id | Yes | Playlist ID | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the safety and behavior burden. 'Report' implies a read-only analysis, and the listed fields (counts, timestamps, most-active) clarify the output shape, but it doesn't explicitly state non-mutation, collaboration prerequisites, or empty-response 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?
Single sentence, front-loaded with the operation, then packs the output dimensions. Every phrase earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, so the description must convey return values; it does convey aggregated counts, first/last timestamps, and most-active user. For a low-complexity read-only report with two fully documented parameters, this is nearly complete, though error or prerequisite behavior is not mentioned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; playlist_id and response_format are already documented in the schema. The description adds domain context but no parameter-specific meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific operation ('who added what to a playlist') and names the aggregated dimensions (counts, first/last timestamps, most-active), so an agent understands the resource and output. It doesn't explicitly contrast with close siblings like get_playlist_added_dates or collab_density_report, so not 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?
It implies when to call the tool (when a playlist collaboration breakdown is needed) but gives no explicit alternatives or exclusions. With siblings such as playlist_collab_toggle, collab_density_report, and get_playlist_added_dates nearby, some routing guidance would help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_collab_toggleB
Toggle collaborative/public flags (guards public=true && collaborative=true 400). Quota: ๐ข GET + PUT.
| Name | Required | Description | Default |
|---|---|---|---|
| public | No | ||
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| playlist_id | Yes | ||
| collaborative | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral disclosure itself. It does reveal an important behavioral rule (public=true && collaborative=true returns 400) and the quota shape (GET + PUT), but it does not explain permissions, reversibility, side effects on existing flags, or what the response contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely compact and front-loaded: the core action appears first, followed by the key constraint and quota note. Every fragment adds useful information with no repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, this description is too thin. It omits return behavior, auth/permission needs, handling of partial flag updates, and the interplay between dry_run and the 400 guard. An agent could call it, but would be guessing about important edge cases.
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 only 25%, so the description needs to compensate. It clarifies that public and collaborative are the flags being toggled, but it does not explain how each boolean maps to the final state, what happens if neither is provided, or how dry_run interacts with the guard. Less than half of the parameter semantics are meaningfully covered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Toggle') and names the exact resource ('collaborative/public flags'), making the operation immediately clear. It also adds a distinguishing guard condition (400 when both true), helping separate it from read-only report siblings like playlist_collaboration_report.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given about when to use this tool versus alternatives. The 'Toggle' wording implies a mutation use-case, but the description does not state prerequisites, when not to use it, or compare it to any sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_cover_from_trackA
Set the playlist cover from a track album art: pick by position in the playlist, pass any track URI, or default to the first track with art. Fetches the image (largest JPEG candidate โค 256 KB) and PUTs /playlists/{id}/images. Quota: ๐ข GET + PUT (+1 image fetch, disclosed).
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| position | No | 0-based playlist position of the track to source art from | |
| track_uri | No | Any track (spotify:track: URI or bare ID) whose album art to use. Overrides position | |
| playlist_id | Yes | Playlist to re-cover (ID or spotify:playlist: URI) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well: it states the side effect (PUT /playlists/{id}/images), the image-selection algorithm (largest JPEG candidate โค 256 KB), and the quota impact (GET + PUT + one image fetch). It does not explicitly say it overwrites an existing cover, but the PUT verb strongly implies it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, dense with actionable information: the purpose, source-selection options, default behavior, endpoint, image constraint, and quota impact. No filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description covers the core behavior, endpoint, selection options, and quota. It is missing explicit return-value guidance and sibling routing, but the schema already documents the response_format parameter, so the agent can infer that output varies by that parameter.
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 useful semantics beyond the schema by explaining the default behavior (first track with art) and the image-fetch selection algorithm. It does not elaborate on dry_run or response_format, but those are already well described in 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 names a specific verb and resource: 'Set the playlist cover from a track album art,' followed by the concrete endpoint PUT /playlists/{id}/images. This distinguishes it from siblings like upload_playlist_cover (custom upload) and clone_playlist_cover (copy from another 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?
It clearly explains how to choose the source track: by position, by track URI, or defaulting to the first track with art. However, it does not explicitly state when to prefer this tool over siblings like upload_playlist_cover, nor does it mention any exclusions or alternatives, leaving the use case somewhat implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_dedupe_advancedA
Remove duplicate items from a playlist, matching by URI (exact copies) OR by track name (catches re-adds of the same song from different albums/singles when combined with dedupe by uri). Choose keep-first or keep-last. Written as one atomic replace. Quota: ๐ข 2 GETs + 1 PUT.
| Name | Required | Description | Default |
|---|---|---|---|
| keep | No | Which occurrence to keep. Default first | first |
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Pass false to commit. Default true | |
| match_by | No | Duplicate key: exact URI, or case-insensitive track name (catches same song from different releases). Default uri | uri |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | Yes | Playlist to dedupe, as ID or spotify:playlist: URI | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden, and it delivers meaningfully: 'Written as one atomic replace' discloses the write strategy (a single PUT rather than incremental removals), and 'Quota: ๐ข 2 GETs + 1 PUT' discloses cost and implicitly confirms a mutation occurs. The mutating nature is also clear from 'Remove duplicate items'. It stops short of a 5 because it doesn't mention reversibility or the dry_run-by-default safety posture (that detail lives only in the schema).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, with the core action front-loaded and the quota as a compact closing one-liner โ every sentence earns its place. The only structural flaw is the middle sentence's convoluted 'when combined with dedupe by uri' clause, which is both redundant and potentially confing given match_by is a single-value enum.
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 mutating 6-param tool with no annotations and no output schema, the description covers the essentials: action, both matching modes, keep choice, atomicity, and quota. However, it omits sibling routing (when to choose this over dedupe_playlist_apply or find_duplicates_in_playlist) and never states what is returned on commit โ the schema only clarifies the dry_run PLAN path. A complete description for this complexity level would address both.
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%: every parameter (keep, dry_run, match_by, max_results, playlist_id, response_format) already has a meaningful schema description, including the preview/commit semantics of dry_run and the enum choices. Per baseline, the description need not repeat those, and it adds only marginal value โ a rationale for name matching and the quota echo. The 'when combined with dedupe by uri' wording even slightly conflicts with the exclusive uri|name enum.
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+resource: 'Remove duplicate items from a playlist', and goes beyond a generic statement by specifying the two matching modes (URI exact-copies vs track name) and the keep-first/keep-last choice. It is clearly distinct from the vast majority of playlist tools, but it does not name or differentiate itself from the closely overlapping siblings dedupe_playlist_apply, find_duplicates_in_playlist, or remove_duplicate_playlist_items, so it misses 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 useful within-tool context: it explains when name-based matching is valuable ('catchs re-adds of the same song from different albums/singles') and that the user can choose keep-first/last. However, it provides no explicit when-to-use-this-over-alternatives guidance โ there are at least four overlapping dedupe siblings in the toolset โ and the phrase 'when combined with dedupe by uri' muddlcs the match_by uri|name enum instead of clarifying the choice. Implied usage, no exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_diffA
Compare two playlists: what is only in A, only in B, and in both โ plus whether the shared tracks appear in the same relative order. Read-only. Quota: ๐ข 4 GETs. Also covers: diff_playlists (live playlist diff), playlist_difference_plan (subtract plan) โ See also: diff_playlists, playlist_difference_plan.
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_a_id | Yes | First playlist, as ID or spotify:playlist: URI | |
| playlist_b_id | Yes | Second playlist, as ID or spotify:playlist: URI | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well by explicitly stating 'Read-only' and including the quota. It also clarifies what the comparison returns, including order information. It does not cover pagination or error behavior, but that is a minor gap for a read-only comparison.
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 core description is compact and front-loaded with the comparison semantics, followed by read-only and quota info. The alias/reference section has some redundancy between 'Also covers' and 'See also', which keeps it from being perfectly concise.
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 read-only comparison tool with a well-documented schema, the description covers the operation's purpose, result dimensions, safety profile, quota, and sibling relationships. No output schema exists, but the response_format parameter and description provide enough guidance 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%, so the parameters are already documented with meaningful descriptions. The tool description adds no extra parameter-level semantics beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Compare'), specific resources ('two playlists'), and the exact dimensions of comparison (A-only, B-only, both, and order of shared tracks). It also names sibling tools diff_playlists and playlist_difference_plan, making differentiation immediate.
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 surfaces sibling tools and gives brief purpose notes (live playlist diff, subtract plan), but it never explicitly says when to use playlist_diff over those alternatives. Selection is implied rather than stated, and the 'Also covers' phrasing adds ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_difference_planA
Plan (and optionally commit) the set difference "base minus subtrahends": keep the base playlist's tracks that appear in NONE of up to 5 others. Without a target it returns the PLAN read-only; with target_playlist_id and dry_run=false it atomically overwrites the target. Quota: ๐ข โค7 GETs + 1 PUT when committing.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Pass false to commit. Default true | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
| base_playlist_id | Yes | Base playlist (ID or URI) whose survivors are kept | |
| target_playlist_id | No | Existing playlist (ID or URI) to atomically overwrite with the difference. Omit = read-only plan | |
| subtract_playlist_ids | Yes | Playlists whose tracks are removed from the base (1โ5) |
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 discloses the destructive commit behavior ('atomically overwrites the target'), the read-only default, and the quota ('โค7 GETs + 1 PUT when committing'). It does not explicitly state that the base and subtrahend playlists are never modified, which would round out the safety picture, but the disclosed traits already exceed what annotations would have provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the operation definition, the plan-vs-commit modes, and the quota. The core semantics are front-loaded in sentence one, and there is zero filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the operation, both execution modes, commit conditions, and quota. With no output schema, it even nods to the return type ('returns the PLAN'). Minor gaps remain for edge cases (nonexistent playlists, empty results), but for a plan/commit tool with fully self-documenting params, this is a complete definition.
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%, putting the baseline at 3. The description adds genuinely useful cross-parameter semantics: it maps base_playlist_id to 'survivors', subtrahend_playlist_ids to 'removed', and the interaction between target_playlist_id and dry_run ('with target_playlist_id and dry_run=false it commites'). This relationship-level meaning is valuable beyond the individual schema entries.
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+resource: 'Plan (and optionally commit) the set difference base minus subtrahends' with the exact semantics spelled out ('keep the base playlist's tracks that appear in NONE of up to 5 others'). It distinguishes itself from sibling mutation tools by framing it as a plan-first operation with an optional commit, and the 'base minus subtrahends' formula leaves no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear context is given for the two invocation modes: 'Without a target it returns the PLAN read-only; with target_playlist_id and dry_run=false it atomically overwrites the target.' This precisely states when to preview vs commit. However, it does not name alternatives (e.g. playlist_subtract, playlist_diff) or give exclusion conditions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_edit_journalA
Journal a playlist's live edit history from added_at/added_by metadata: add-batches by date with who added them, collab contributors, and drift verdict โ read-only, no local snapshot needed. Quota: ๐ข 1โ2 GETs.
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | Yes | Playlist to journal (ID or spotify:playlist: URI) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral disclosure burden. It explicitly states read-only, no local snapshot needed, quota (1โ2 GETs), and the output categories the agent can expect. It does not discuss failure behavior or missing added_at metadata, but the central safety and scope traits are transparently disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The whole description is one dense sentence that front-loads the verb and resource, then packs output details, read-only status, snapshot independence, and quota into the remaining text. No filler, no redundant schema repetition, and the quota note is genuinely useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has only 3 params, 1 required, and no output schema, yet the description compensates by naming what the agent will get back: add-batches by date, added-by attribution, collab contributors, and drift verdict. It also states side effects explicitly (read-only) and quota. For a read-only journaling tool, this is sufficient for an agent to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with all three parameters (playlist_id, max_results, response_format) already descriped in the schema. The description adds no parameter-specific meaning beyond the schema, so the baseline 3 is appropriate where the schema carries the load.
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 journals a playlist's live edit history from added_at/added_by metadata and enumerates concrete outputs: add-batches by date, who added them, collab contributors, and drift verdict. It also explicitly marks the operation as read-only and distinguishes it from snapshot-based workflows by saying no local snapshot is needed. This is far beyond a vague or tautological purpose.
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 useful selection context: it is read-only, uses live metadata rather than snapshots, and costs only 1โ2 GETs. However, it does not name alternatives such as get_playlist_add_dates or playlist_history, and it leaves the when-to-use decision implicit rather than explicitly contrasting with those siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_era_profileA
Local release-era profile: decade histogram, median track age, and a time-capsule verdict. Pairs with playlist_era slices. Quota: ๐ข 1 GET (market refetch disclosed).
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | ISO 3166-1 alpha-2 market, e.g. 'US' โ when given, items are REFETCHED with this market so album release dates resolve (disclosed second GET) | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | Yes | Playlist to profile (ID or spotify:playlist: URI) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden and does well by disclosing the quota ('1 GET') and the market-triggered refetch as a second GET. This is meaningful behavioral context beyond the name and schema, though it does not fully describe output 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?
Two compact sentences front-load the tool's purpose and output components, then add quota and refetch disclosure. Every word earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema and no annotations, so the description needs to carry more of the context. It names the output components and quota, but leaves usage conditions and some response-format nuance to the schema. Adequate for selection, but an agent would still need to infer several operational details.
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 five parameters. The description adds no new parameter-level semantics beyond reiterating the market refetch, which is already in 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 a concrete object ('release-era profile') and specifies its outputs: decade histogram, median track age, and a time-capsule verdict. It also distinguishes itself by being 'local' and by pairing with playlist_era slices, making its role clear among many sibling era/report 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 implies a playlist-scoped, release-era analysis use case and names a companion ('Pairs with playlist_era slices'), which gives some context. However, it does not explicitly state when to use this tool over sibling era/profile tools or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_exclude_artistsB
Remove every track by one or more artist IDs from a playlist โ the "purge the artist" one-shot. Quota: ๐ข GET + chunked deletes.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Default true โ pass false to commit. | |
| artist_ids | Yes | Artist IDs/URIs to exclude (1โ20) | |
| playlist_id | Yes | Playlist to purge (ID or spotify:playlist: URI) | |
| dedupe_scope | No | playlist (default): only drop uris duplicated INSIDE this playlist; library: also drop candidates that are saved in /me/tracks; none: drop every candidate | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden. It does reveal the operational pattern ('Quota: GET + chunked deletes') and states the destructive verb 'Remove', which is useful. However, it never warns about permanence/irreversibility, undo options, or the safety default of dry_run, leaning on the schema instead.
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 with the main action front-loaded and the quota note earning its place as operational context. No filler, no restated schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating tool with no annotations and no output schema, the description could do more: it doesn't address the destructive consequences, preview safety path, or relation to the many playlist-mutation siblings. The rich schema covers parameters but the behavioral/service-level context is thin.
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?
Shcema description coverage is 100%, and every parameter (dry_run, artist_ids, playlist_id, dedupe_scope, response_format) is already well-documented with defaults and enums, the description adds no parameter meaning. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Remove'), names the resource ('every track by one or more artist IDs from a playlist'), and adds the memorable 'purge the artist one-shot' framing that signals bulk, all-at-once behavior. It's distinguishable from read-only siblings, though it doesn'it explicitly compare against the very similar playlist_remove_artist tool.
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 when-to-use vs alternatives guidance. Given near-twin siblings like playlist_remove_artist, filter_playlist_by_artist, and dedupe_playlist_apply, an agent has no criteria for choosing this one. The quota hint hints at cost but not selection logic.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_expression_algebraA
Mini set-algebra over playlists: REF โช (REF โฉ REF) โ REF โ NEW playlist. Operators: โฉ (binds tightest), then โช and โ left-assoc; ASCII aliases | + for union, & for intersection. Refs are playlist IDs or spotify:playlist: URIs; results dedupe preserving first-seen order. Quota: ๐ข N GETs + 1 write.
| Name | Required | Description | Default |
|---|---|---|---|
| public | No | Public visibility for the new playlist. Default: private | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| expression | Yes | Set expression, e.g. "37i9dQZF1DXcBWIGoYBM5M โช (4bKpVbPAsKv0aSsbIm2Ggt โฉ 6mtXbPAsKv0aSsbIm2Ggt) โ 1a2B3cD4e5F6g7H8i9J0kL". Operators: โช (or | or +) union, โฉ (or &) intersection, โ (or - or โ) difference; parentheses for grouping. | |
| target_name | Yes | Name for the NEW playlist holding the result | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does so well: it discloses that a new playlist is written, that results are deduplicated preserving first-seen order, that operator precedence is fixed, and even gives a quota hint of N GETs plus 1 write. It stops short of explaining overwrite semantics or exact failure behavior, but the key side effects are visible.
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 dense but efficient: it front-loads the core formula, then covers operators, aliases, ref types, dedupe behavior, and quota in just four short sentences. Every sentence earns its place with no padding.
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 tool with 5 parameters and no output schema, the description covers the hardest partโthe expression languageโcompletely enough to invoke the tool correctly. The schema covers target_name, public, dry_run, and response_format. The only notable omission is guidance on selecting this tool over the many similar playlist-combination 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%, so the baseline is 3, but the description adds real value beyond the schema: it explains accepted ref forms (playlist IDs or spotify:playlist URIs), operator aliases, precedence, and dedupe ordering. This materially helps an agent construct a valid expression 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 identifies a specific resource and operation: a set-algebra expression over playlist references that produces a NEW playlist. The operator formula and precedence rules make it unambiguous and distinguish it from single-operation siblings like playlist_union or playlist_intersection.
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 set-algebra framing and the expression syntax: an agent can infer to use this when a request asks to combine playlists with โช/โฉ/โ operations. However, there is no explicit statement about when NOT to use it or which simpler sibling tool to prefer for a single union or intersection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_fill_from_searchA
Grow a playlist to N items from search queries you supply: round-robin one pick per query per pass, first unseen track match wins, chunked adds. Complements listening-data grow_playlist. Quota: ๐ก len(queries) searches + chunked adds.
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | ISO 3166-1 alpha-2 market for search, e.g. 'US' | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| queries | Yes | Search queries, cycled round-robin (1โ25) | |
| playlist_id | Yes | Playlist to grow (ID or spotify:playlist: URI) | |
| target_count | No | Grow the playlist until it reaches this many NEW items. Default 20 | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the safety/cost burden and does substantial work: it discloses the round-robin selection algorithm, first-unseen-track winner rule, chunked adds, and a quota estimate ('len(queries) searches + chunked adds'). It does not spell out failure modes or auth/side-effect details, but the mutation is plainly conveyed by 'Grow' and 'adds'.
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 compact sentences front-load the core behavior before the sibling note and quota. Every sentence carries distinct information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter mutation tool with no annotations and no output schema, the description plus 100%-covered schema is nearly sufficient: algorithm, cost, and the relationship to grow_playlist are present. Minor gaps are absence of an example and no statement about behavior when no query matches.
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, and the description adds real value by explaining query cycling ('one pick per query per pass') and the pick policy ('first unseen track match wins'). The quota line also ties queries and adds to actual search count. Other parameters like market and response_format are left to the already-detailed 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 opening phrase 'Grow a playlist to N items from search queries you supply' names the action, object, and data source precisely. It further distinguishes itself from the sibling grow_playlist by positioning itself as complementary ('Complements listening-data grow_playlist').
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: this tool grows a playlist from user-supplied search queries rather than listening data, and explicitly references the alternative grow_playlist. It does not enumerate explicit when-to-use/when-not-to-use conditions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_filter_runtimeA
Keep only items whose duration falls inside a window (e.g. min_sec 120 โ drop intros/interludes; max_sec 360 โ drop 6-minute epics). At least one bound required. One atomic replace. Quota: ๐ข 2 GETs + 1 PUT.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Pass false to commit. Default true | |
| max_sec | No | Maximum duration in seconds | |
| min_sec | No | Minimum duration in seconds | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | Yes | Playlist to filter, as ID or spotify:playlist: URI | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses that this is a mutating operation ('One atomic replace') and gives quota information (2 GETs + 1 PUT), which implies read-then-write behavior. It does not mention revertability or permissions, but it offers meaningful behavioral context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: the first states the operation with examples and the constraint, the second covers atomicity and quota. Every sentence earns its place with no redundant repetition of schema details.
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 mutating tool with no output schema and no annotations, the description covers the core operation, bound requirement, atomicity, and quota. Minor gaps include not naming sibling tools and not explicitly reminding that dry_run defaults to true, but the schema already documents the dry_run parameter, so the description is adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by giving example values for min_sec and max_sec and clarifying that at least one bound is required, which the schema does not enforce or state. This extra semantic guidance justifies a 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 the tool's function: keep only items whose duration falls within a min/max window, with concrete second-based examples. It does not explicitly differentiate it from closely related siblings like filter_playlist_by_duration or playlist_trim_to_duration, so it stops 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?
Provides clear usage context with real examples (drop intros/interludes, drop 6-minute epics) and states the 'at least one bound required' constraint. It does not explicitly say when NOT to use this tool or name alternatives, so it is strong but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_flip_orderB
Reverse a playlist: last item becomes first, written as one atomic replace. The standard fix for imports that arrived backwards. Quota: ๐ข 2 GETs + 1 PUT.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Pass false to commit. Default true | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | Yes | Playlist to reverse, as ID or spotify:playlist: URI | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It does disclose two important behavioral traits: the operation is atomic ('one atomic replace') and the quota (2 GETs + 1 PUT). However, it omits the critical dry_run behavior described in the schema (default true, preview-only), and does not mention that the change is permanent or irreversible. For a mutation tool, this is a moderate but not complete 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?
Two sentences with no filler. The first sentence states the purpose and atomicity, the second gives a use case and quota. Every part earns its place, and the key information is front-loaded. This is an exemplar of concise, effective tool descriptions.
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 mutation nature, no annotations, and no output schema, the description is somewhat under-specified. It fails to mention the dry_run parameter's preview semantics, which defaults to true and is crucial for safe execution (the tool may not actually modify anything if not passed false). It also doesn't describe the return value or plan format. However, the quota and atomicity are useful. For a tool with this complexity, more context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for all 4 parameters, so the schema already documents each one. The description adds no additional parameter-level detail. Per the baseline for high schema coverage, a score of 3 is appropriate. The description does not compensate for any missing semantic nuance 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: 'Reverse a playlist' with specific resource (playlist) and intent (last item becomes first). It also notes 'written as one atomic replace', which adds specificity. However, it doesn't explicitly distinguish itself from the sibling tool 'playlist_reverse' which likely performs a similar operation, so there is some ambiguity for an agent deciding between 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?
The description gives one specific use case: 'The standard fix for imports that arrived backwards.' This implies when it might be used but provides no guidance on when NOT to use it or how it differs from alternatives like playlist_reverse, playlist_sort, or playlist_shuffle. An agent would have no basis to prefer this tool over its sibling that appears to do the same thing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_from_tagsA
Create or refresh a playlist from saved library items whose artists carry the given genre tags (the write side of tag_management โ uses the same sidecar rule pattern). Quota: 2+ reads + 1-3 writes. dry_run previews the match list.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | create | |
| tags | Yes | Genre tags to match (same values declared via tag_management) | |
| dry_run | No | Preview the match list (default true). | |
| playlist_id | No | Playlist to refresh (refresh mode). Auto-resolved from playlist_name if omitted. | |
| playlist_name | No | Playlist name (create mode). Default: "Tagged: <tags>". | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It openly states the mutation nature ('write side'), provides a quota estimate (2+ reads + 1-3 writes), and mentions that dry_run previews the match list. It does not detail all side effects of refresh, but the core write behavior and preview safety valve are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three compact sentences with no filler. It front-loads the core operation, then adds the key relationship to tag_management, quota impact, and the dry-run safety option. 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 6 parameters, no annotations, and no output schema, the description covers the essential behavioral context: operation, mutation risk, quota, and preview capability. It does not explain return values or refresh-specific side effects in detail, but the schema covers parameter defaults and the description references the sidecar pattern.
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 83%, so the schema already documents most parameters well. The description adds little beyond clarifying that tags are genre tags and that dry_run previews results, both of which the schema already states. It meets the baseline but does not substantially enrich parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: create or refresh a playlist from saved library items filtered by artist genre tags. It also positions itself as the write side of tag_management, which differentiates it from read-only or unrelated 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 gives clear context: this is the write counterpart to tag_management and follows the same sidecar rule pattern. It does not explicitly list alternatives or when-not-to-use cases, but an agent can infer the intended scenario: materializing a tag-based playlist from saved library items.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_health_checkA
Audit a playlist for unavailable, local, duplicate, and empty issues (read-only)
| Name | Required | Description | Default |
|---|---|---|---|
| playlist_id | Yes | Playlist ID | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It explicitly promises no side effects via '(read-only)' and tells the agent exactly what kinds of issues it inspects. It does not detail output structure or edge cases, but the core behavioral trait is covered.
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 tightly worded sentence front-loads the action and resource, then lists the audited categories and the read-only guarantee. Every word earns its place 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?
The description plus fully documented schema provides enough to invoke the tool: a required playlist_id, an optional response_format enum, and a clear reporting mandate. The lack of an output schema is partially mitigated by the response_format descriptions, though a bit more detail on what 'issues' contains would make it complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both playlist_id and response_format are already explained in the schema. The tool description adds no additional parameter-specific meaning, matching the baseline for fully documented parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Audit') with a clear resource ('a playlist') and enumerates the exact issue categories checked: unavailable, local, duplicate, and empty. The parenthetical '(read-only)' further distinguishes it from mutation-heavy 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 read-only qualifier implies this is for diagnostics rather than cleanup or fixes, but the description does not explicitly name alternatives such as remove_unavailable_playlist_items, dedupe_playlist_plan, or find_duplicates_in_playlist. Usage context is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_historyA
List your local backup snapshots (from backup_now): file name, created timestamp, and the counts each snapshot carries. The entry point for snapshot_detail / changelog / clone_snapshot. Read-only, no API calls.
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It explicitly discloses that the operation is read-only and makes no API calls, which are important behavioral traits. It also clarifies the data comes from local backup_now snapshots rather than live Spotify data.
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. The core purpose and output fields come first, and the entry-point relationship plus read-only/no-API-calls behavior follow naturally. 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 low-complexity listing tool with fully documented parameters, the description provides the essential output fields and behavioral context. The only minor gaps are ordering, pagination behavior, and the exact meaning of 'counts,' but these are not critical for selecting and invoking the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents max_results and response_format. The description adds context about the returned snapshot fields but does not add new meaning about the parameters themselves, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('List your local backup snapshots') and names the exact output fields (file name, created timestamp, counts). It also distinguishes itself from sibling snapshot tools by identifying itself as the entry point for snapshot_detail / changelog / clone_snapshot.
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 clearly indicates when to use it: as the entry point before snapshot_detail, changelog, or clone_snapshot. It also states it is local, from backup_now, and read-only, which helps an agent choose it over API-backed or mutation tools, though it doesn't explicitly exclude sibling listing tools like list_backups.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_intersectA
Keep only the tracks present in ALL of 2โ10 playlists, written as one atomic replace โ the missing set op (union/subtract/XOR exist). Without a target it reports the intersection read-only. Quota: ๐ข N GETs + 1 PUT when committing. Also covers: playlist_intersection (same op, unified) โ See also: playlist_intersection.
| Name | Required | Description | Default |
|---|---|---|---|
| dedupe | No | Dedupe within the RESULT sequence: keep the first or last occurrence, or none. Default none | none |
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Default true โ pass false to commit. | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
| target_playlist_id | No | Existing playlist (ID or spotify:playlist: URI) to ATOMICALLY OVERWRITE with the result. Omit to compute read-only. | |
| source_playlist_ids | Yes | Playlists to intersect, as IDs or spotify:playlist: URIs (2โ10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden. It usefully discloses atomic overwrite semantics, read-only behavior when no target is given, and quota cost (N GETs + 1 PUT when committing). It does not detail failure modes or the exact plan structure returned, but the disclosed mutation behavior is 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 core explanation is compact and front-loaded, and the quota note is useful. However, the ending 'Also covers: playlist_intersection (same op, unified) โ See also: playlist_intersection' is redundant and confusing, undermining the otherwise efficient structure.
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, combined with the detailed input schema, covers the operation, source/target semantics, read-only vs. commit behavior, dedupe option, dry-run flag, and quota. The ambiguous relationship with playlist_intersection and lack of output-structure hints are the only noticeable gaps, but they do not prevent 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%, so the schema already documents all six parameters well. The description reinforces key semantics like 2โ10 source playlists and target-driven overwrite, but it adds little beyond what the schema already states.
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: keep only tracks present in ALL of 2โ10 playlists, written as one atomic replace. It also explicitly distinguishes this from the other set operations (union/subtract/XOR), making the tool's purpose immediately clear among many playlist siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: use this for intersection, with the read-only vs. committing behavior determined by whether a target playlist is provided. It names related set-op siblings (union/subtract/XOR) and references playlist_intersection, though it does not explicitly state when not to use this tool over that sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_intersectionA
Report the tracks present in ALL of 2โ10 playlists, including which of the source playlists each common track appears in โ the read-only intersection analysis (commit variants live in the set-op plan tools). Quota: ๐ข N GETs.
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_ids | Yes | Playlists to intersect (2โ10) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It explicitly discloses read-only behavior, the N GETs quota, and the output's key property (which source playlists each common track appears in). It does not cover auth or error behavior, but for a read-only reporting tool, the essential safety and scope traits are well disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with no filler. The core purpose is front-loaded, and the quota and read-only clarifications each earn their place without bloating the description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential output, the safety profile (read-only), and a pointer to commit variants. The main gap is the lack of explicit differentiation from the similarly named sibling 'playlist_intersect', which could create ambiguity despite the otherwise complete coverage.
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 baseline is 3. The description does not add extra parameter-level meaning; it describes the tool's output rather than any nuance about max_results, response_format, or how playlist_ids are processed.
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 ('Report') and resource ('tracks present in ALL of 2โ10 playlists'), defines the result scope ('including which of the source playlists each common track appears in'), and explicitly labels itself as 'read-only intersection analysis'. This is specific enough to separate it from generic report tools and many playlist siblings.
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 frames the tool as the read-only analysis path and points commit variants to 'the set-op plan tools', giving an explicit when-not. However, it does not name the very close sibling 'playlist_intersect', so an agent may still be unsure which of the two similarly named tools to choose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_keep_artistA
Inverse filter: keep ONLY tracks by one artist in a playlist and drop everything else. Optionally keep podcast episodes too (they have no artist). One atomic replace. Quota: ๐ข 2 GETs + 1 PUT.
| Name | Required | Description | Default |
|---|---|---|---|
| artist | Yes | Artist name (case-insensitive) or artist ID / spotify:artist: URI | |
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Pass false to commit. Default true | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | Yes | Playlist to edit, as ID or spotify:playlist: URI | |
| keep_episodes | No | Also keep podcast episodes (they have no artist). Default false | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and delivers useful context: it is an atomic replace (single PUT), consumes 2 GETs + 1 PUT, and explicitly states that everything else is dropped. It also clarifies the podcast-episode edge case. It does not explicitly warn about destructiveness, but the atomic-replace wording and default dry_run in the schema partially cover that.
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 with no filler: the core purpose is front-loaded, followed by the optional episode behavior, atomicity, and quota. Every sentence earns its place and the structure aids quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core operation, the podcast-episode edge case, atomicity, and resource cost, which is substantial for a tool with no annotations. Parameter-level details like dry_run and response_format are already in the schema. It does not describe the return format, but the response_format enum and no-output-schema context make this less critical.
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 baseline is 3; the description adds little beyond the schema. It does provide a rationale for keep_episodes ('they have no artist') and hints at the replace semantics, but this is marginal and largely redundant with the parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'keep ONLY tracks by one artist in a playlist' and 'drop everything else'. This precisely states what the tool does and distinguishes it from general playlist filters. The 'Inverse filter' label and the atomic-replace note make the operation unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when you want to retain only one artist's tracks and discard all others. However, it does not explicitly compare with sibling tools such as playlist_exclude_artists, filter_playlist_by_artist, or playlist_keep_only, nor does it state conditions for choosing this over them. The 'Inverse filter' hint is indirect and relies on agent inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_keep_onlyA
Inverse removal: keep only matching items (by uri / artist / type / query) and drop everything else โ one atomic replace, no N+1 deletes. Quota: ๐ข GET + 1 PUT.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | type mode: keep only this playable type | |
| query | No | query mode: keep items whose name contains this substring | |
| artist | No | artist mode: keep tracks by this artist (ID/URI or name) | |
| values | No | uris mode: track uris to keep | |
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Default true โ pass false to commit. | |
| keep_by | Yes | Match mode for what to KEEP | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | Yes | Playlist to prune (ID or spotify:playlist: URI) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it delivers: it discloses the destructive consequence ('drop everything else'), the atomic single-replace implementation, and the quota cost ('GET + 1 PUT'). It does not discuss reversibility or permission needs, but the atomicity and cost disclosure go meaningfully beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero filler: the first front-loads the core semantic and behavior, the second gives the quota. Every clause earns its place, and the high-value 'atomic replace, no N+1 deletes' detail is positioned right after the purpose 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?
For a 9-parameter mutation tool with no annotations and no output schema, the description covers the essential behavior: semantics, match modes, atomicity, and cost. The main gaps are the lack of explicit guidance on pairing keep_by with the correct mode-specific parameter and no mention of return shape, though the schema's self-describing params and dry_run/response_format fields partially compensate.
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 baseline is 3 and the schema already documents all 9 parameters. The description adds modest value by enumerating the four match modes (uri / artist / type / query), which maps onto the keep_by enum and its companion params, but it adds no syntax or format detail beyond that.
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 'Inverse removal' and states a specific operation: 'keep only matching items (by uri / artist / type / query) and drop everything else.' This clearly names the verb, resource, and scope, and the inverse-removal framing distinguishes it from removal/trim siblings like remove_from_playlist and filter_playlist_by_artist.
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 conveys when to use the tool via 'keep only matching items and drop everything else' and hints at efficiency advantages ('one atomic replace, no N+1 deletes'). However, it does not explicitly name any sibling alternative or state when NOT to use it, leaving the agent to infer routing against a sibling list that includes closely related tools like playlist_keep_artist, playlist_trim, and replace_playlist_items.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_move_blockA
Move a contiguous block of items (1-based start + count) so its first item lands at a target position expressed in the ORIGINAL numbering. The rest of the playlist closes up around it. Written as one atomic replace. Quota: ๐ข 2 GETs + 1 PUT. Also covers: reorder_playlist_items, playlist_resequence โ See also: reorder_playlist_items, playlist_resequence.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | How many contiguous items to move. Default 1 | |
| start | Yes | 1-based position of the first item to move | |
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Pass false to commit. Default true | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | Yes | Playlist to edit, as ID or spotify:playlist: URI | |
| to_position | Yes | 1-based position (ORIGINAL numbering) where the block should land | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and discloses atomicity ('one atomic replace'), the surrounding replay behavior ('closes up'), and quota cost (2 GETs + 1 PUT). It could add explicit mention of permanent mutation/authorization requirements when dry_run is false, but the PUT/dry-run signals cover the main safety trait.
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 core semantics are front-loaded in the first sentence and the operational notes are compact. There is minor redundancy in repeating the same two sibling names in 'Also covers' and 'See also', but no material bloat.
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 7-parameter mutation with no output schema, the description supplies the key conceptual model, atomicity, and quota. Remaining operational details (dry_run, response_format, max_results) are handled by a fully-covered schema, so nothing essential 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, but the description adds valuable relational meaning: start + count define a block, the block's first item lands at to_position, and the playlist closes the gap. This is meaning beyond the individual property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a precise operationโmoving a contiguous block of playlist itemsโand specifies the indexing convention and target semantics. This clearly differentiates it from generic reorder or swap tools and from the named siblings.
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 routes the agent by stating it 'covers' reorder_playlist_items and playlist_resequence and lists them as see-also, which helps choose among siblings. It does not spell out when not to use it or compare against nearby tools like playlist_move_to_top, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_move_to_topA
Bring matching items (uris / artist / query) to the FRONT of a playlist in one atomic replace. Deliberately avoids Spotify reorder N+1 for large moves. Quota: ๐ข GET + 1 PUT.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Move items whose name contains this substring | |
| artist | No | Move every track by this artist (ID/URI or name) | |
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Default true โ pass false to commit. | |
| match_uris | No | Track uris to move to the top | |
| playlist_id | Yes | Playlist to reorder (ID or spotify:playlist: URI) | |
| stable_order | No | Keep playlist order among matches and non-matches. Default true | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses atomicity ('one atomic replace'), efficiency rationale, quota usage, and via the dry_run parameter, that the tool is preview-safe by default. It doesn't disclose whether the operation is reversible or whether non-matching items are preserved, but the stable_order parameter hints at order preservation and the dry_run default makes experimentation safe.
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 dense sentences with no filler. The first sentence front-loads the core behavior and matching criteria, the second explains the design rationale, and the third gives quota. All information is useful and not repeated elsewhere.
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 7-parameter complexity with no output schema and no annotations, the description does a solid job of conveying purpose, matching modes, atomicity, and quota. It could go one step further and mention the effect when no matches are found, and the exact meaning of stable_order in prose, but the schema covers stable_order and the dry_run default mitigates risk.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with every parameter documented in the schema itself, so the baseline is 3. The description adds value by explaining the matching dimensions ('uris / artist / query') and the atomic-replace nature, which clarifies how these parameters relate to the operation. It doesn't add per-parameter details beyond the schema, but the schema already covers them thoroughly.
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 ('Bring'), a precise effect ('to the FRONT of a playlist'), the matching criteria ('uris / artist / query'), and the mechanism ('one atomic replace'). It also differentiates itself from the Spotify reorder N+1 approach, distinguishing it from siblings like reorder_playlist_items, playlist_move_block, and playlist_swap_positions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when this tool is preferable ('Deliberately avoids Spotify reorder N+1 for large moves') and provides quota information ('Quota: ๐ข GET + 1 PUT'), which helps an agent decide whether it is an appropriate choice. However, it doesn't explicitly say when NOT to use it or name a sibling alternative for small moves, though the atomic-replace rationale implies it is best for large moves.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_names_bulk_normalizeA
One-shot name hygiene across your library: strip "(Official Copy)"-style noise, trailing "2" duplicates, apply a prefix/suffix, or renumber. Preview โ commit. Quota: ๐ก GET + N PUTs (N = renamed only).
| Name | Required | Description | Default |
|---|---|---|---|
| op | No | Normalize op. Default strip_noise | |
| match | No | Only rename playlists whose name contains this substring | |
| prefix | No | prefix: text to prepend | |
| suffix | No | suffix: text to append | |
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Default true โ pass false to commit. | |
| apply_to | No | Rename only your own playlists or every followed one. Default owned | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden and mostly succeeds: "Preview โ commit" signals the two-phase safety model, and the quota line reveals that only actually renamed playlists incur PUTs. It does not discuss undoability or effects on collaborators, but the core mutation behavior is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences deliver scope, operation types, safety model, and cost implications without filler. The most important qualifier, "One-shot," is front-loaded, and every phrase 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 7-parameter mutation tool with no output schema or annotations, the description gives enough behavioral context (preview first, quota, commit semantics) and the schema handles parameter details. It is slightly incomplete on what the preview plan looks like or how responses vary, but the dry_run parameter description partially covers that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds real semantics beyond the schema: it clarifies what strip_noise actually does with examples and ties the quota to the dry_run/commit behavior. It does not need to restate match, apply_to, or response_format since those are already well-described in 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 states a specific operation: one-shot playlist name hygiene with concrete transforms like stripping "(Official Copy)" noise, handling trailing "2" duplicates, adding prefix/suffix, or renumbering. This clearly distinguishes it from generic library tools like clean_all_playlists or library_hygiene.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it โ for batch playlist-name cleanup with preview-then-commit โ but it names no alternatives or exclusion conditions. With many sibling tools covering playlist hygiene, an agent gets no explicit routing guidance about when to prefer this over similar tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_overlap_matrixB
Pairwise Jaccard overlap for 2โ10 playlists โ which of your mixes have drifted into the same set. Quota: ๐ข N GETs.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| min_overlap | No | Jaccard threshold to report a pair. Default 0.5 | |
| playlist_ids | Yes | Playlists to compare (2โ10) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the disclosure burden and does disclose one meaningful behavioral trait: 'Quota: ๐ข N GETs,' which tells the agent this is a read-only operation with a measurable quota cost. However, it does not describe result shape, error behavior, or interaction between dry_run and quota, so the behavioral disclosure is partial rather than rich.
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 compact sentences with no wasted words: the core function is front-loaded, followed by a single high-value quota clause. Every element earns its place, and the user-facing gloss adds context without bloating the definition.
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 5-parameter tool with no output schema and no annotations, the description adequately covers purpose, input range, and read-only quota cost, but it leaves gaps: the returned matrix format is unspecified, the min_overlap default behavior is only in the schema, and pairwise result presentation is not described. It is a workable definition but missing enough context to fully guide 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%, so the schema already documents all five parameters, setting the baseline at 3. The description adds marginal reinforcementโ'2โ10 playlists' maps to playlist_ids constraints and 'Jaccard' maps to min_overlapโbut it does not add new meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific operationโ'Pairwise Jaccard overlap for 2โ10 playlists'โwith a clear resource scope and a user-facing framing ('which of your mixes have drifted into the same set'). It distinguishes from simpler siblings like playlist_intersect or overlap_playlists by naming the pairwise Jaccard metric, though it never explicitly names an alternative tool.
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 explicit guidance on when to use this tool versus the many overlapping siblings (playlist_intersect, overlap_playlists, playlist_intersection, find_duplicate_tracks_across_playlists, playlist_pair_check). The phrase 'which of your mixes have drifted into the same set' implies a use case but provides no when-to-use or when-not-to-use conditions, and no alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_pair_checkA
Pairwise relationship report for two playlists: sizes, overlap, Jaccard similarity, and sampled candidates from each side that the other lacks (for merging or splitting decisions). Read-only. Quota: ๐ข 4 GETs.
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_a_id | Yes | First playlist, as ID or spotify:playlist: URI | |
| playlist_b_id | Yes | Second playlist, as ID or spotify:playlist: URI | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and discloses two meaningful traits: 'Read-only' (no mutation side effects) and 'Quota: ๐ข 4 GETs' (cost/rate awareness). The word 'sampled' also signals candidates are a non-exhaustive subset, a genuine behavioral nuance. Edge-case behavior (invalid/private playlists) is not covered, but the safety and cost profile is.
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 front-load the purpose and output metrics, then append safety and quota facts with zero filler. Every clause ('Read-only', 'Quota: ๐ข 4 GETs', 'for merging or splitting decisions') 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 moderate-complexity analysis tool with fully documented parameters, the description covers purpose, output content, decision context, safety, and cost. With no output schema, the listed report contents plus the response_format enum compensate reasonably. Minor gaps remain (behavior on invalid/private playlists, determinism of sampling), but nothing blocks 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% โ all four parameters (playlist_a_id, playlist_b_id, max_results, response_format) carry descriptions covering URI formats, bounds, defaults, and enums. The tool description adds no parameter-level detail beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific deliverable โ a 'pairwise relationship report' for two playlists โ and enumerates concrete metrics (sizes, overlap, Jaccard similarity, sampled missing candidates) plus the decision context (merging/splitting). This differentiates it from sibling actions like playlist_union, diff_playlists, or playlist_overlap_matrix, which are matrix/action-oriented rather than pairwise decision-support reports.
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?
'For merging or splitting decisions' plus 'Read-only' gives an agent clear context for when to invoke this: the analysis step before a merge/split mutation. It doesn't explicitly name alternatives or state when-not-to-use conditions, so it stops short of the explicit-exclusion bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_remove_artistA
Remove every track by one artist from a playlist (match by artist name, case-insensitive, or by artist ID / spotify:artist: URI). Shows exactly what would go. Quota: ๐ข 2 GETs + 1 PUT when committing.
| Name | Required | Description | Default |
|---|---|---|---|
| artist | Yes | Artist name (case-insensitive) or artist ID / spotify:artist: URI | |
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Pass false to commit. Default true | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | Yes | Playlist to edit, as ID or spotify:playlist: URI | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral disclosure burden. It clearly states the destructive action (removes tracks), the preview behavior ('Shows exactly what would go'), and the quota cost ('2 GETs + 1 PUT when committing'). This is strong transparency for a mutation tool, though it does not mention irreversibility or auth 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?
Three short, information-dense sentences. The core purpose is front-loaded, matching modes are explained, and the quota is appended without fluff. 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 mutation tool with no annotations and no output schema, the description covers the essential behavior, matching semantics, preview mode, and quota cost. It is suitably complete for an agent to decide and invoke the tool, though a brief note on required playlist ownership or irreversibility would make it fully comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters well. The description adds matching flexibility for the 'artist' parameter and reinforces the dry-run/commit distinction, but most parameter meaning is already present in 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 states a specific verb ('Remove'), a precise resource ('every track by one artist from a playlist'), and the matching modes (name case-insensitive, artist ID, or spotify:artist: URI). This clearly distinguishes it from generic remove_from_playlist and similar artist-filtering siblings.
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 what the tool does and that it previews changes, but it gives no guidance on when to choose this tool over alternatives like playlist_exclude_artists or filter_playlist_by_artist. No explicit when-to-use or when-not-to-use context is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_resequenceA
Sort a playlist in place โ by track name, artist, album, duration, or date added โ written back as one atomic replace. Episodes sort last (no artist/album key). Quota: ๐ข 2 GETs + 1 PUT. Also covers: reorder_playlist_items (range-based), playlist_move_block โ See also: reorder_playlist_items, playlist_move_block.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Pass false to commit. Default true | |
| sort_by | Yes | Sort key. artist/album use the first artist / album name | |
| direction | No | Sort direction. Default asc | asc |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | Yes | Playlist to sort, as ID or spotify:playlist: URI | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the safety and behavior burden and does well: it discloses in-place mutation, atomic replacement, quota cost, and a non-obvious episode-ordering rule. It does not mention that dry_run defaults to true, meaning a default call only previews and does not perform the 'written back' behavior, which is a notable 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?
Two dense sentences front-load the core action ('Sort a playlist in place') and then supply only high-value extras: sort keys, atomicity, quota, episode edge case, and related tools. There is no filler and no repetition of schema fields.
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 mutating tool with no annotations and no output schema, the description delivers the core behavior, an important edge case, quota, and sibling pointers, while the schema fills in all parameter details including the dry_run default. The main remaining gaps are the lack of return-shape information and the slight tension between the description's 'written back' framing and the default dry_run=true behavior.
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 every parameter has a meaningful description, so the schema carries the parameter-semantics burden and the baseline is 3. The description adds sort-key names and the episode exception, but it does not add parameter-level detail beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a precise operation ('Sort a playlist'), scopes it ('in place'), enumerates the five sort keys, and adds the atomic-replace behavior. This clearly distinguishes it from the reorder/move siblings it names and from the many playback/search tools in the sibling list.
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 by naming the operation and cross-referencing reorder_playlist_items and playlist_move_block, but it never explicitly states when to choose this tool over alternatives or when not to use it. 'Also covers' blurs whether those are subsumed operations or separate tools, and it does not position itself against sibling tools like playlist_sort, sort_playlist_plan, or playlist_shuffle.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_reverseC
Reverse a playlist in one atomic replace. Quota: ๐ข GET all + PUT/POST. Also covers: reverse_playlist_plan โ See also: reverse_playlist_plan.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| playlist_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It does add useful context: 'atomic replace' indicates the mutation is all-or-nothing, and the quota line hints at the required API verbs. However, it omits reversibility, side effects, and the role of dry_run as a safety preview.
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 first sentence is concise and front-loaded. The second sentence is redundant and confusing, repeating reverse_playlist_plan twice in a short span without adding useful structure or guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, this description is too thin. It does not explain what a successful call returns, what happens on failure, whether the original playlist can be restored, or how this tool relates to reverse_playlist_plan operationally.
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 only 50%, and the description adds no parameter-level meaning beyond the schema. playlist_id is left as an undocumented string, and dry_run is only explained in the schema, not reinforced or clarified in the 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 states a specific action and resource: 'Reverse a playlist in one atomic replace.' This clearly indicates an apply-style mutation. However, the reference to reverse_playlist_plan is ambiguous and does not clearly distinguish this tool from that sibling.
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 only nod to an alternative is 'See also: reverse_playlist_plan,' but it gives no guidance on when to use this tool versus the plan variant. The phrase 'Also covers: reverse_playlist_plan' is confusing rather than instructive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_rotateB
Rotate a playlist by N positions: positive N moves the first N items to the end, negative N moves the last |N| to the front (wraps around). Written as one atomic replace. Quota: ๐ข 2 GETs + 1 PUT.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Pass false to commit. Default true | |
| positions | Yes | Rotation amount; positive = first N move to end, negative = last |N| move to front | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | Yes | Playlist to rotate, as ID or spotify:playlist: URI | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the disclosure burden. I adds real behavioral context โ 'Written as one atomic replace' discloses atomicity and the quota line '2 GETs + 1 PUT' discloses a mutating write path โ but it never explicitly states that the operation modifies the playlist or that dry_run defaults to true to avoid changes.
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, each earning its place: core semantics, implementation note, and cost. The rotation behavior is front-loaded and there is zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-paramder tool with a 100%-documented schema and no output schema, the description covers the key gaps: rotation math, atomicity, and quota. Nothing essential is missing, though it could have referenced the dry_run plan workflow or the rotate_playl_plan sibling given the read-first mutation pattern.
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 baseline is 3. The description mostly restates what the positions schema already says, adding only the 'wraps around' nuance; it does not materially extend the paramter 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 with precise, unambiguous semantics: 'Rotate a playlist by N positions' with exact direction behavior for positive and negative N including wrap-around. The behavior is defined well enough to distinguish from rotation-related sibling tools, though it does not explicitly name any sibling (e.g., rotate_playlist_plan, playlist_reverse) to rule out confusion.
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 when-to-use or when-not-to-use guidance and does not reference alternatives like rotate_playlist_plan or reorder_playlist items. The quota and atomic-replace notes imply cost context, but nothing tells an agent when this tool beats another.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_seed_shuffleA
Shuffle a playlist in place (FisherโYates) with an optional deterministic seed โ same seed, same order, so you can preview and commit the exact same shuffle. Unavailable items are kept, pinned at the end. Quota: ๐ข 2 GETs + 1 PUT.
| Name | Required | Description | Default |
|---|---|---|---|
| seed | No | Deterministic seed (0โ2^31): the same seed produces the same shuffle. Omit for random | |
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Pass false to commit. Default true | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | Yes | Playlist to shuffle, as ID or spotify:playlist: URI | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it delivers: 'in place' plus quota '1 PUT' disclose mutation, deterministic seed behavior is stated, and edge-case behavior ('Unavailable items are kept, pinned at the end') and cost ('2 GETs + 1 PUT') are disclosed. It stops short of warning that a committed shuffle is irreversible or naming required auth scopes, but this is well above the typical bar for an annotation-free mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core action, then edge-case and cost details. No wasted words; the quota line is compact and informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-param mutation tool with no output schema and no annotations, it covers purpose, algorithm, determinism, unavailable-item handling, and quota โ enough to invoke correctly and safely, especially since dry_run defaults to true. The main gap is the return value/PLAN shape and explicit auth requirements, but the schema's response_format and dry_run descriptions partially cover those.
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 five parameters. The description adds a workflow gloss (seed โ 'same seed, same order'; dry_run โ 'preview and commit') but does not add syntax or format details 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 states a specific verb+resource+mechanism: 'Shuffle a playlist in place (FisherโYates) with an optional deterministic seed.' The 'in place' mutation and seeded determinism distinguish it from siblings like playlist_shuffle (plain shuffle) and set_shuffle (playback shuffle mode). An agent can tell what this does and when it differs 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?
The 'same seed, same order, so you can preview and commit the exact same shuffle' phrasing clearly frames the intended workflow: reproducible, previewable shuffle mutations with dry_run as the safe default. However, it never names an alternative (e.g., playlist_shuffle) or states when not to use it, so guidance is contextual and implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_shuffleB
Fisher-Yates shuffle a playlist (seeded optional). Quota: ๐ข GET all + PUT/POST.
| Name | Required | Description | Default |
|---|---|---|---|
| seed | No | ||
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| playlist_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It adds useful context: Fisher-Yates implies a fair/unbiased permutation, 'seeded optional' implies reproducibility, and 'GET all + PUT/POST' implies the tool reads the full playlist and writes it back. However, it never explicitly states that the shuffle destroys the existing order in place, requires playlist-edit permissions, or is irreversible, which a mutation tool should disclose.
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 tightly packed sentences with no filler. The core action is front-loaded, and the quota/behavior hint is appended efficiently. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with zero annotations, no output schema, and only 33% schema coverage, the description is too sparse. Missing: whether the shuffle replaces the playlist in place, whether it can be undone, permission requirements, what the return value is, and how it relates to the nearly identical sibling playlist_seed_shuffle. An agent cannot safely invoke this without making assumptions.
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 low at 33% (only dry_run is described). The description partially compensates by clarifying that seeding is optional for the seed parameter, but it adds nothing about the required playlist_id format (URI vs ID) and does not explain what the seed value controls beyond its existence. This is partial compensation for a significant documentation 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 states a specific verb (shuffle), resource (playlist), and algorithm (Fisher-Yates), making the core action unambiguous. However, it does not differentiate from the sibling 'playlist_seed_shuffle,' which appears to overlap with the 'seeded optional' capability, leaving the agent to guess which tool to prefer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance is provided. The quota note is operational context, not selection guidance, and with ~300 siblings including playlist_seed_shuffle, playlist_reverse, and playlist_rotate, the description offers no help in choosing this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_sliceA
Copy a slice of one playlist โ positions start..end, first/last N, or an added-at date range โ into a NEW playlist. Era snapshots, side A/B, decadal splits. Quota: ๐ข GET + create + chunked adds.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | range: 0-based EXCLUSIVE end | |
| mode | Yes | Slice mode | |
| name | Yes | Name for the new slice playlist | |
| count | No | first/last: how many items (default 10) | |
| start | No | range: 0-based inclusive start (default 0) | |
| public | No | Public visibility for a newly created playlist. Default: private | |
| date_to | No | added_between: inclusive YYYY-MM-DD | |
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Default true โ pass false to commit. | |
| date_from | No | added_between: inclusive YYYY-MM-DD | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | Yes | Source playlist (ID or spotify:playlist: URI) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It does disclose the quota profile (GET + create + chunked adds) and the non-destructive nature of copying to a new playlist, which is good behavioral context. However, it omits the default dry_run=true behavior that controls whether anything is created, and says nothing about return format or errors, so transparency is partial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences plus a quota tag, front-loaded with the core action. The mode summary and use-case examples earn their place, and the quota edge is valuable operational context. No waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter tool with no output schema, the description covers the core operation, the three modes, and the quota, which is fairly complete. It lacks a note about the default dry_run/preview behavior and does not descrive return or error cases, but most parameter details are in the schema, so a 4 is reasonable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with descriptions, so baseline is 3. The description restates the modes in plain language but adds no information beyond the schema's enum and parameter descriptions, so it does not raise the score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Copy') and resource ('a slice of one playlist โฆ into a NEW playlist'), and enumerates the three slice modes (positions, first/last N, added-at date range). It does not explicitly differentiate from sibling tools like extract_playlist_range or split_playlist, so it is clear but not sibling-distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use cases through examples ('Era snapshots, side A/B, decadal splits') and the mode list, but it never says when to choose this over the many sibling playlist-slicing tools, and there are no exclusions or alternatives. This is implied usage only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_snapshot_detailA
Inspect one playlist inside a local backup snapshot: its item_count as recorded plus the full item list (truncated by max_results). Read-only, no API calls.
| Name | Required | Description | Default |
|---|---|---|---|
| backup_file | Yes | Snapshot file name, e.g. backup-2026-08-28-1.json (see playlist_history) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_name | Yes | Playlist name inside the snapshot (exact match first, then case-insensitive substring) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, and it explicitly states 'Read-only, no API calls'โcritical safety and side-effect information. It also discloses that the item list is truncated by max_results and that the data is historical/local. This is complete for a non-mutating offline inspection 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 two concise, high-information sentences with no redundant wording. The primary capability is front-loaded in the first sentence, and the safety trait (read-only, no API calls) is clearly stated in the second.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that all parameters are thoroughly described in the schema and the tool is a simple read-only inspection, the description covers the essential behavioral aspects: what is retrieved, the truncation behavior, and that no API calls are made. It could specify the exact return shape more precisely since there is no output schema, but 'item_count plus full item list' is sufficient for an agent to understand the result.
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 all four parameters are already documented in the schema. The description adds only modest semantic value beyond the schema, such as clarifying that max_results truncates the item list and mentioning item_count in the output, which is enough to meet the baseline expected with full schema 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 identifies a specific action ('Inspect') and resource ('one playlist inside a local backup snapshot'), and states what is returned (item_count plus item list). It distinguishes itself from live API tools by noting it is offline and reads backups, but it does not explicitly differentiate among the many snapshot-related sibling 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?
Clear usage context is provided: this tool is for inspecting local backup data without making API calls, which tells the agent when to prefer it over live-data tools. It stops short of a 5 because it doesn't name any alternative snapshot tools or provide explicit when-not-to-use guidance relative to siblings like read_playlist_snapshot.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_sortC
Sort a playlist in place by added_at/name/artist/duration/popularity. Quota: ๐ข GET all + PUT/POST. Also covers: sort_playlist_plan / sort_playlist_apply (safe plan/apply) โ See also: sort_playlist_plan, sort_playlist_apply.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| sort_by | No | name_asc | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | Yes | ||
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral disclosure burden. It reveals that the operation mutates a playlist ('in place') and mentions quota, but it does not disclose side effects, reversibility, permission requirements, or what changes a dry_run prevents. The 'safe plan/apply' phrasing is vague and unhelpful.
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 first sentence is concise and information-dense, and the quota note is useful. However, the ending redundantly mentions the plan/apply siblings twice ('Also covers' plus 'See also'), adding confusion rather than clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, so the description must explain return behavior, mutation impact, and tool selection context. It explains none of these: an agent cannot tell what the tool returns, whether dry_run is recommended for safety, or how this relates to the plan/apply siblings. This is particularly risky for an in-place 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 already documents dry_run, max_results, and response_format, covering about 60% of parameters. The description adds useful context for sort_by by naming the underlying fields, but it does not clarify playlist_id, sort direction semantics, or how dry_run affects the result beyond the schema 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 opening phrase 'Sort a playlist in place by added_at/name/artist/duration/popularity' clearly names a specific verb, resource, and sort keys. However, the subsequent 'Also covers: sort_playlist_plan / sort_playlist_apply' blurs the tool's exact scope and does not sharply distinguish it from those siblings.
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 explicit guidance on when to choose this tool over sort_playlist_plan or sort_playlist_apply. The 'See also' note names siblings but provides no decision criteria, and 'Also covers' is ambiguous about whether this tool is meant to replace them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_staleness_reportA
Per-playlist staleness report: newest/oldest added_at, median item age and count added in the last 90 days โ find playlists rotting in place. Quota: 1 + N reads (N = playlists scanned), page-capped.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | median_age | |
| limit | No | How many playlists to scan. Default 50. | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
| per_playlist_cap | No | Max items paged per playlist. Default 500. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It usefully discloses quota cost ('1 + N reads') and that reads are page-capped. However, it does not state whether the operation is strictly read-only, what happens with large playlists, or how failures/rate limits behave.
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 tightly packed sentences lead with the core metrics and purpose, then add quota and paging constraints. No filler or redundant restating of the tool name.
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 report-style tool with no output schema, the description names its key output fields and cost model, which is enough for an agent to decide whether to invoke it. It falls slightly short on explaining return structure and comparing with sibling tools, but the quota note and metric list make it largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high (80%), so the schema already documents most parameters. The description adds useful context about paging and scanning cost, but it does not clarify individual parameter semantics beyond the schema, such as how sort interacts with the report or what response_format variants produce.
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 specifies a per-playlist report with concrete metrics (newest/oldest added_at, median item age, count added in last 90 days) and an explicit intent ('find playlists rotting in place'). This clearly distinguishes it from sibling tools like playlist_staleness_score or playlist_health_check.
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 a clear context for use โ detecting stale or rotting playlists โ but does not explicitly say when to prefer this over related alternatives such as playlist_staleness_score, get_playlist_added_dates, or playlist_health_check. No exclusions or comparison guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_staleness_scoreA
Local staleness check: days since the most-recent / median added_at in a playlist, a fresh/aging/stale/fossil grade, and refresh suggestions. Read-only. Quota: ๐ข 1โ2 GETs.
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | ISO 3166-1 alpha-2 market for availability, e.g. 'US' | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | Yes | Playlist to score (ID or spotify:playlist: URI) | |
| threshold_days | No | Days over which a playlist counts as stale. Default 90 | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden and does disclose two important behavioral traits: 'Read-only' and 'Quota: ๐ข 1โ2 GETs.' This goes beyond the schema and gives an agent confidence about side effects and cost, though it could say more about edge cases like empty playlists or missing added_at values.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two compact sentences with zero filler: the operation is front-loaded, the outputs are enumerated, and the read-only/quota caveats are stated at the end. Every phrase 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 read-only scoring tool with a fully documented schema, the description covers the output essentials and cost/safety profile. It is slightly incomplete only in not clarifying how this 'local' score relates to the sibling playlist_staleness_report tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline of 3 applies. The description adds context about the core staleness concept (added_at, grades, refresh suggestions) but does not materially enrich the individual parameters 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?
The description names a specific verb and resource: 'Local staleness check' of a playlist, with concrete outputs (days since most-recent/median added_at, a grade, refresh suggestions). It is clear and self-contained, though it does not explicitly contrast itself with the similarly named sibling playlist_staleness_report.
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 word 'Local' and the read-only label imply this is a per-playlist check rather than a report, and the quota gives expected cost. However, no explicit when-to-use or when-not-to-use guidance is provided, and no alternative tools are named for comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_strip_episodesA
Purify a playlist after collab drift: strip every podcast EPISODE (or every TRACK) with one client-side filter + atomic replace. Quota: ๐ข GET + 1 PUT.
| Name | Required | Description | Default |
|---|---|---|---|
| strip | No | What to remove. Default episodes | |
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Default true โ pass false to commit. | |
| playlist_id | Yes | Playlist to purify (ID or spotify:playlist: URI) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses that this is a mutating operation ('atomic replace' and 'PUT'), gives a quota ('GET + 1 PUT'), and explains the filter approach. It does not detail reversibility or side effects, but 'dry_run' in the schema covers preview behavior, so this is reasonably 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?
Two tight sentences with no filler: the purpose, use case, mechanism, and quota are all packed in efficiently. The most important behavioral note is front-loaded before the quota detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The combination of description and fully documented schema gives the agent playlist_id, strip options, dry_run preview behavior, response_format choices, and quota awareness. There is no output schema and no explicit example of the returned plan, but the response_format parameter sufficiently sketches expected output styles.
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 every parameter already has a meaningful description. The tool description adds little parameter-level detail beyond reflecting the 'episodes' or 'tracks' choice, 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?
States a specific verb and resource: 'strip every podcast EPISODE (or every TRACK)' from a playlist. It also names the mechanism ('one client-side filter + atomic replace') and gives a use context ('after collab drift') that distinguishes it from generic remove/filter playlist siblings.
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 clearly frames when to use the tool: 'purify a playlist after collab drift' and strip either episodes or tracks. It does not explicitly name alternatives or exclusions, but the context is specific enough to guide selection among many playlist-maintenance siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_subtractB
Remove tracks of B..N from A. Quota: ๐ข N GETs + DELETE or PUT.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| base_playlist_id | Yes | ||
| subtract_playlist_ids | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The quota line ('N GETs + DELETE or PUT') adds useful behavioral context about API cost and mutation method, which is not visible in schema or annotations. However, with no annotations and no output schema, the description does not disclose details like duplicate handling, reversibility, or whether only the base playlist is modified.
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 only two sentences and front-loads the operation before the quota note. The 'B..N' shorthand is compact but sacrifices some clarity; still, there is no filler or repeated schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The core action, operand mapping, and quota are present, but this is a mutating tool with no annotations and no output schema, so more context would help: what happens to duplicate occurrences, whether other playlist content is preserved, and any edge case behavior. It is minimally viable but leaves room for inference.
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 assigns meaning to the two required parameters by mapping 'A' to base_playlist_id and 'B..N' to subtract_playlist_ids, which is essential since the schema gives them no descriptions. It does not specify ID formats or how duplicates are treated, but it compensates for the low 33% schema coverage on the core parameters.
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 ('Remove') and resource ('tracks ... from A'), making it clear this is a playlist set-subtraction operation. It also distinguishes itself from sibling set tools like playlist_intersect or playlist_union, but the shorthand 'B..N' and 'A' is not explicitly tied to the parameter names.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to choose playlist_subtract over related tools such as playlist_keep_only, playlist_exclude_artists, or playlist_intersect. The description only states what the operation does, not the conditions or context in which it should be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_swap_positionsA
Swap the items at two 1-based positions โ e.g. flip tracks 3 and 7. Positions may be any two distinct slots in the playlist. Written as one atomic replace. Quota: ๐ข 2 GETs + 1 PUT.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Pass false to commit. Default true | |
| position_a | Yes | First position (1-based) | |
| position_b | Yes | Second position (1-based) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | Yes | Playlist to edit, as ID or spotify:playlist: URI | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burdenโand it does well: it reveals the operation is an atomic replace and gives an operational quota ('๐ข 2 GETs + 1 PUT'). It does not cover failure modes or side effects, but the atomicity and cost are meaningful behavioral traits beyond the schema. No contradiction with annotations 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?
Three compact sentences, each earning its place: the first defines the operation, the second resolves ambiguity about position constraints, and the third adds atomicity and quota context. No filler or repetition of schema fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is mostly sufficient for a simple two-position swap, but it omits a crucial behavioral detail: the schema's dry_run parameter defaults to true, meaning the tool only returns a PLAN unless dry_run=false is explicitly set. The description's 'Swap' language could mislead an agent into thinking an actual mutation occurs by default. With no output schema, it also does not describe the return value, leaving some invocation uncertainty.
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 value by clarifying the positions must be 'any two distinct slots'โa constraint not enforced in the schemaโand provides a concrete example. This helps the agent understand valid invocations beyond the schema's 1-based definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a highly specific verb and resource: 'Swap the items at two 1-based positions' with a concrete example ('flip tracks 3 and 7'). This makes the action unmistakable and distinguishes it from nearby siblings like reorder_playlist_items or playlist_move_block, which handle different rearrangement semantics.
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 clear usage: use this when you want to exchange exactly two items at known positions. It adds context with 'Positions may be any two distinct slots' and 'Written as one atomic replace,' but it does not explicitly list alternatives or state when not to use it. Still, the context is clear enough for an agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_symmetric_differenceA
Tracks in exactly one of two playlists (XOR). Quota: ๐ข 2 GETs.
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id_a | Yes | ||
| playlist_id_b | Yes | ||
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the burden of behavioral disclosure. It reveals quota cost ('๐ข 2 GETs'), which is useful, but says nothing about whether results include only track IDs, whether the operation respects max_results, how ordering is determined, or what edge-case behavior exists (e.g., duplicate tracks within a playlist).
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 with zero filler. The core XOR semantics are front-loaded and the quota hint is a compact bonus. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only playlist comparison among ~700 siblings, the description defines the core operation cleanly and notes quota. It does not state the return shapeโwhether the agent should expect full track objects or just IDsโand does not address duplicates or ordering. With no output schema available, that omission is a realistic gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%; the two required ID parameters have no descriptions in the schema, and the description does not elaborate on them beyond the tool name. However, their meaning is essentially self-evident from the tool name and description. max_results and response_format are described in the schema, so the partial gap does not create confusion.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: 'Tracks in exactly one of two playlists (XOR).' This distinguishes it from related playlist set-operation siblings like playlist_intersect, playlist_union, and playlist_subtract, though it doesn't explicitly name them. The term 'XOR' adds mathematical precision.
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 XOR definition implicitly conveys when to use it: when the user wants items exclusive to one playlist versus the other. It does not explicitly state alternatives or exclusions, but the set-operation framing is clear enough among the many playlist sibling tools that an agent can route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_table_of_contentsA
Build a table of contents for a playlist: totals, runtime, and "chapters" โ contiguous position ranges grouped by the month each block was added โ plus contributor counts. Read-only. Quota: ๐ข 1โ2 GETs.
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | Yes | Playlist to index (ID or spotify:playlist: URI) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden and discloses two important behaviors: the operation is read-only and costs only 1โ2 GETs. It also explains how 'chapters' are derived (contiguous position ranges grouped by month added), which is meaningful behavioral context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tight sentences: the first front-loads the operation and output definition, the second adds safety and cost information. Every clause earns its place, and the 'chapters' definition avoids elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Because there is no output schema, the description supplies a high-level return contract (totals, runtime, chapters, contributor counts) and notes cost and side effects. It does not cover edge cases like an empty playlist or missing added-date metadata, but the core information needed to invoke and interpret the tool is present.
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 playlist_id, max_results, and response_format. The description adds no parameter-level details beyond the schema, matching the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource โ 'Build a table of contents for a playlist' โ and enumerates the exact outputs (totals, runtime, chapters, contributor counts). It is clear about what the tool produces, though it does not explicitly differentiate it from sibling playlist-overview tools such as get_playlist_added_dates or playlist_era_profile.
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 intended use is implied by the purpose statement: call this when a playlist-level overview with monthly-added chapters is wanted. However, there are no explicit when-to-use/when-not-to-use instructions and no alternatives are named, so an agent is left to infer the right selection among many sibling playlist tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_template_applyA
Create an instant mood/vibe playlist from a template (focus, wind-down, gym, commute) composed from your existing listening data. Creates a new playlist and fills it.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Playlist name (default: "<Template> Mix") | |
| limit | No | How many tracks (1-100, default 30) | |
| public | No | Whether the playlist is public | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| template | Yes | Template name | |
| description | No | Playlist description override | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It does state the core mutation: it creates a new playlist and fills it, which indicates a write operation. However, it does not mention the dry_run preview mode, potential side effects, required permissions, or what kind of response the caller should expect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The primary action is front-loaded, and the second sentence reinforces the side effect without redundancy. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is somewhat thin. It conveys the core behavior and data source, but omits important context such as dry_run behavior, response formats, and relationship to similar playlist creation/filling tools. The 100% schema coverage compensates for parameter details, but not for 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?
Schema description coverage is 100%, so the baseline is 3. The description does add useful context by explaining the playlist is 'composed from your existing listening data' and enumerating template values, but it does not meaningfully expand on parameter semantics 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 verb ('Create'), the resource ('playlist'), and the distinguishing feature ('from a template...composed from your existing listening data'). It lists the template options, which helps differentiate it from generic playlist creation tools like create_playlist, though it does not explicitly name a sibling alternative.
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 intended use case is implied: when a user wants an instant mood/vibe playlist from a predefined template. However, there is no explicit guidance about when to prefer this over alternatives like create_playlist, playlist_fill_from_search, or playlist_from_tags, nor any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_to_libraryB
Save all tracks of a playlist to your Liked Songs (library). Quota: ๐ข GET playlist items + PUT /me/tracks (chunked 50).
| Name | Required | Description | Default |
|---|---|---|---|
| dedupe | No | Skip tracks already saved (default true) | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| playlist_id | Yes | Source playlist ID | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It does disclose meaningful behavior beyond the verb 'save': the quota cost (๐ข), the underlying API calls (GET playlist items + PUT /me/tracks), and the chunked-50 batching behavior. However, it omits details an agent might need, such as reversibility, what happens on partial failure, or what the tool returns, since there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero wasted words. The core action is front-loaded, and the quota note packs the API path and batching behavior into a single compact clause. Every element 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 write operation with four parameters and no output schema or annotations, the description covers the core action and quota but leaves gaps: no usage guidance versus siblings, no description of what the call returns, and no behavioral notes beyond chunking. Since the schema fully documents parameters, the tool is callable, but an agent lacks context for result handling and alternative selection.
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 all four parameters (playlist_id, dedupe, dry_run, response_format) are already documented in the schema with meaningful descriptions. The tool description adds no parameter-level semantics beyond what the schema provides; the quota note only hints at how playlist_id is consumed (GET playlist items). 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 states a specific verb and resource: 'Save all tracks of a playlist to your Liked Songs (library)'. This clearly conveys the action and target, and implicitly distinguishes the tool from reverse-direction siblings like library_to_playlist and generic savers like save_to_library or save_items. However, it never names an alternative or explicitly differentiates, so it stops 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?
No guidance is given on when to choose this tool versus alternatives such as save_to_library, library_to_playlist, or add_to_playlist. There are no exclusions, prerequisites, or use-case conditions. The only extra sentence is about quota mechanics, which is implementation detail, not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_trimA
Trim playlist to N items (keep first/last/random). Quota: ๐ข GET all + PUT/POST.
| Name | Required | Description | Default |
|---|---|---|---|
| keep | Yes | ||
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| keep_which | No | first | |
| playlist_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The quota line discloses that the tool reads all playlist items and then writes via PUT/POST, which is a useful behavioral trait beyond the simple verb. However, with no annotations provided, the description still omits important context such as whether the mutation is reversible, whether it requires playlist ownership, and what the response contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two compact clauses with zero wasted words. The core purpose is front-loaded, and the quota note is placed second for quick scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential operation and one behavioral detail (quota), which is adequate for a straightforward mutation tool. But with no output schema and no annotations, it leaves gaps around return value, error cases, and preconditions that an agent would need to fully trust the 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?
'N items' clarifies the `keep` parameter and 'first/last/random' defines the `keep_which` enum, adding meaning the schema lacks. However, `playlist_id` semantics are only inferable from its name, `dry_run` is absent from the description (though well-described in the schema), and overall schema description coverage is only 25%, so compensation is only partial.
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 precise action ('Trim playlist to N items') with an explicit resource and scope, and the parenthetical 'keep first/last/random' differentiates it from sibling tools like playlist_trim_to_duration or playlist_slice. This is a specific, unambiguous purpose statement.
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 choose this tool over closely related siblings such as playlist_trim_to_duration, playlist_slice, or playlist_keep_only. The quota note ('GET all + PUT/POST') is informational about cost, not a usage condition or alternative-selection rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_trim_to_durationA
Fit a playlist to a target runtime (e.g. "exactly 30 min for the commute"): greedy keep-first/last/random selection within ยฑtolerance seconds, written as one atomic replace. Complements item-count playlist_trim. Quota: ๐ข GET + 1 PUT.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Default true โ pass false to commit. | |
| keep_which | No | Greedy direction: keep the first N that fit, the last N, or a random draw. Default first | first |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | Yes | Playlist to trim, as ID or spotify:playlist: URI | |
| tolerance_sec | No | Acceptable deviation from the target, in seconds. Default 30 | |
| target_minutes | Yes | Target runtime in minutes | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does it well: it discloses the selection algorithm, the ยฑtolerance behavior, the atomic all-or-nothing replace, and the API quota (GET + 1 PUT). This is exactly the behavioral context an agent needs before mutating a playlist.
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-load the use case and algorithm, then add sibling differentiation and quota. Every sentence contributes meaningful information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given seven parameters and no annotations or output schema, the description covers the essential operational facts: purpose, algorithm, side-effect atomicity, quota, and relation to a sibling. It doesn't describe return shapes in prose, but the schema's dry_run and response_format parameter descriptions already handle those, so the remaining gap is minor.
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 and the description does not need to repeat parameter details. It adds value by explaining how target_minutes, tolerance_sec, and keep_which interact through greedy selection within tolerance, which goes beyond individual schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Fit a playlist to a target runtime') and adds the key algorithm details: greedy keep-first/last/random selection within a tolerance. It also explicitly contrasts with the item-count sibling playlist_trim, so the agent can distinguish the two 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 'Complements item-count playlist_trim' line names the closest alternative and implies the duration-vs-count selection criterion, and the commute example gives a concrete use case. It doesn't enumerate all possible alternatives like playlist_filter_runtime or split_playlist_by_duration, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_unionC
Union of 2โ10 playlists into target (deduped, first-seen order). Quota: ๐ข N GETs + PUT/POST.
| Name | Required | Description | Default |
|---|---|---|---|
| dedupe | No | ||
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| target_name | No | ||
| target_playlist_id | No | ||
| source_playlist_ids | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With zero annotations, the description carries the full burden of behavioral disclosure. It reveals deduplication, first-seen order, and a quota hint, but does not disclose whether an existing target playlist is overwritten, merged, or created, nor what gets destroyed or changed. For a mutation tool, this is a significant transparency 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 a single front-loaded sentence with no fluff, and the quota line adds operational context without bloating it. It could be slightly clearer about target behavior, but the current length is appropriate.
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, no annotations, and only 20% parameter schema coverage. The description does not explain how the target is chosen or created, whether the operation is destructive, or what response the agent should expect. For a five-parameter mutation tool, this is not enough information for reliable 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 only 20%, so the description must compensate. It clarifies the source playlist count range and dedupe behavior, but says nothing about the target_name versus target_playlist_id distinction, how the target is resolved, or how dry_run behaves beyond the schema's own note. Key parameter semantics remain unresolved.
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 clear operation: 'Union of 2โ10 playlists into target,' including deduplication and ordering behavior. It is specific enough to understand the core purpose, though it does not explicitly distinguish itself from sibling tools like merge_playlists or playlist_intersect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance or exclusions are provided. The only usable signal is the operation itself and the '2โ10 playlists' constraint. It does not mention alternatives such as playlist_union_preview or merge_playlists, so an agent has no stated basis for selecting this over similar playlist-combination tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_union_previewA
Preview the union of 2โ10 playlists as a first-seen-ordered sequence, with per-playlist counts and how many tracks are unique to each โ read-only, no writes. Quota: ๐ข N GETs.
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_ids | Yes | Playlists to union (2โ10) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and handles it well: it explicitly declares read-only/no-writes, discloses the quota cost (๐ข N GETs), and reveals ordering semantics (first-seen) which implies deduplication behavior. It does not cover truncation interactions with max_results or exact count semantics, but the key safety and cost traits an agent needs are stated.
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 core purpose, ordering behavior, output contents, safety guarantee, and quota cost are each delivered in a compact, front-loaded format. 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?
Despite having no output schema and no annotations, the description conveys the output shape (ordered sequence, per-playlist counts, unique-to-each counts) and the safety profile, while the schema fully documents parameters. The only notable gap is not mentioning pagination/truncation semantics for max_results relative to the counts, but for a low-complexity preview tool this is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all three parameters (playlist_ids, max_results, response_format) already well documented in the schema including defaults, bounds, and enum meanings. The tool description adds no parameter-specific semantics beyond restating the 2โ10 playlist bound already present in the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Preview'), a specific resource (the union of 2โ10 playlists), and precise behavioral detail ('first-seen-ordered sequence, with per-playlist counts and how many tracks are unique to each'). This clearly differentiates it from siblings like playlist_intersect, playlist_subtract, and especially playlist_union, which is the write counterpart.
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 'Preview' framing plus the explicit 'read-only, no writes' declaration makes the usage context clear: use this to inspect a union result without committing changes. However, it does not explicitly name the alternative (playlist_union) or state the condition for choosing between them, leaving that routing to inference from the name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_onA
Play a context/uris/search query on a named device (resolves device name โ id via GET /me/player/devices, then PUT /me/player/play). ๐ก (1 read + 1 write; +1 if volume/shuffle). Supports device name substring or exact id.
| Name | Required | Description | Default |
|---|---|---|---|
| uris | No | Array of track/episode URIs | |
| query | No | Search query to play (tracks) โ alternatives: context_uri or uris | |
| device | Yes | Device name substring (case-insensitive) or exact device id | |
| volume | No | Set volume (0-100) before play | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| shuffle | No | Set shuffle before play | |
| context_uri | No | Spotify context URI (playlist/album/artist URI) | |
| position_ms | No | Start position in ms | |
| search_type | No | When query mode: type to search (default track) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden, and it does so well: it discloses the read/write sequence, the extra write for volume/shuffle via '๐ก (1 read + 1 write; +1 if volume/shuffle)', and the device-name resolution mechanism. It does not mention failure behavior, but the disclosed side effects are unusually clear for a tool without annotations.
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 only two sentences, front-loads the primary action, and packs in endpoint flow, cost characterization, and device matching behavior without waste. 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?
For a 10-parameter tool with no output schema and no annotations, the description plus the fully-covered schema is strong: it explains the resolution flow, side-effect count, and accepted input modes. It does not explicitly state mutual exclusivity of query/uris/context_uri, but the schema's 'alternatives' notes and the slash-separated phrasing make that adequately inferable.
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 every parameter. The description adds the high-level grouping 'context/uris/search query' and restates the device-matching rule, but most of this duplicates schema text such as 'Device name substring (case-insensitive) or exact device id'. This lands at the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and target: 'Play a context/uris/search query on a named device.' It also names the underlying API flow (GET /me/player/devices, then PUT /me/player/play), which makes the tool's purpose concrete and distinguishes it from generic play tools by emphasizing named-device resolution.
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 'on a named device' plus 'Supports device name substring or exact id' clearly signals the intended use case: playing when a specific device must be selected. It does not explicitly list siblings like play or transfer_playback as alternatives, so it stops short of full when-to-use versus when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
predict_next_tracksB
Predict the next N tracks that will play from the queue, each with its own runtime and the cumulative time until it plays. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | How many upcoming items to predict. Default 5 | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. The explicit 'Read-only' statement is a useful side-effect disclosure, and the output fields are described. However, it does not address edge cases like an empty queue, whether the prediction is exact or estimated, or how the response is structured.
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, each earning its place: the first states the operation and output, the second states the safety profile. It is front-loaded, clear, and free of filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with two optional, fully documented parameters, the description covers the core output well. However, without an output schema it does not specify the response container or queue-boundary behavior, and the lack of alternative routing leaves some contextual gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both 'count' and 'response_format' are documented with defaults and allowed values. The description's reference to 'next N tracks' only echoes the 'count' parameter and does not add meaningful parameter semantics beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Predict'), a resource ('next N tracks that will play from the queue'), and the key output fields (runtime, cumulative time until it plays). It is clear about what the tool does, but it does not explicitly differentiate itself from queue-related siblings like get_queue, describe_queue, or peek_next.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus queue-related alternatives. There are no conditions, exclusions, or mentions of sibling tools, leaving the agent to infer suitability from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prune_old_snapshotsB
Delete old local snapshots, keeping the newest N per playlist and optionally dropping those older than a cutoff; dry_run=true (default) only reports what would go Snapshot guide: take_playlist_snapshot (create), list_saved_snapshots (list), read_playlist_snapshot (read), diff_playlist_snapshots / snapshot_new_tracks / snapshot_removed_tracks (diff), restore_playlist_from_snapshot / restore_playlist_plan (restore).
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: perform the read side and return a deterministic PLAN without writing/deleting anything. Default true โ pass false to commit. | |
| playlist | No | Restrict pruning to this playlist (ID or URI) | |
| keep_last | No | Snapshots to KEEP per playlist (default 5) | |
| older_than_days | No | Additionally prune snapshots older than this many days | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It does explain the dry_run=true default preview behavior and the retention criteria, which is useful. However, it does not clarify what happens on commit, whether deletions are permanent, what the returned plan contains, or how the 'keep N' and 'older than cutoff' rules interact.
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 first sentence is efficient and front-loads the core behavior. The dry-run clause is also valuable, but the trailing 'Snapshot guide' is tangential, and the sentence is grammatically truncated ('only reports what would go Snapshot guide').
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, combined with 100% schema coverage, makes the tool minimally callable. However, there is no output schema, and the description does not explain what the returned plan looks like or what happens when dry_run=false, leaving a meaningful gap for a destructive maintenance 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 coverage is 100%, so the baseline is 3. The description adds aggregate meaning by linking keep_last to 'newest N per playlist' and older_than_days to 'older than a cutoff', but it does not add per-parameter detail 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 names a specific verb ('Delete'), resource ('old local snapshots'), and a retention policy ('keeping the newest N per playlist'). It is obvious what the tool does, though it does not explicitly distinguish itself from the sibling delete_playlist_snapshot or snapshot_retention_plan.
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 Snapshot guide lists related create/list/read/diff/restore tools, which implies a snapshot-management context, but it never states when prune_old_snapshots should be chosen over alternatives. There is no explicit when-to-use or when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publisher_portfolioA
Per-publisher portfolio across your saved shows: show count, listed episode totals, and sampled runtime of their recent episodes โ who owns your listening time. Defaults to 10 recent episodes per show.
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| eps_per_show | No | Recent episodes sampled per show for runtime. Default 10 | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral transparency burden and does reasonably well: it discloses that it samples recent episodes per show, states the default sample size, and clarifies that the runtime figures are based on a sample rather than the full catalog. It does not state explicitly that the operation is read-only, but the report-like language strongly implies it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that leads with the core concept, enumerates the output metrics, and ends with the default behavior. Every phrase earns its place, and there is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete enough for a read-oriented report tool: it states the scope (saved shows), the grouping concept (per publisher), and the key output values. Since there is no output schema, the description adequately covers return expectations, though it does not mention ordering, pagination behavior, or whether max_results applies to publishers or to total rows.
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 schema already documents all three parameters. The description adds a small amount of context by explaining the eps_per_show default in terms of 'recent episodes,' but it does not significantly enrich understanding of max_results or response_format beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's purpose: it builds a per-publisher portfolio from the user's saved shows and lists the exact metrics it computes (show count, listed episode totals, sampled runtime). It is specific enough to be useful, though it does not explicitly distinguish itself from similar-sounding sibling tools like saved_shows_publisher_census.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it โ when you want a publisher-level view of your saved shows โ but it gives no explicit guidance about when not to use it or which alternatives to prefer. There is no mention of sibling tools such as show_runtime_stats or saved_shows_publisher_census that may overlap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
queue_duplicate_checkA
Check the upcoming queue for duplicate tracks/episodes and report each duplicate group with its positions and wasted runtime. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It explicitly states 'Read-only' and describes the reporting behavior (duplicate groups, positions, wasted runtime), which discloses the safety profile and the main side-effect boundary. It does not go into auth or edge cases, but for a read-only check this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the action and scope, with no filler. The 'Read-only' sentence earns its place as a clear safety qualifier.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool, the description captures the core behavior and output shape: duplicate groups, positions, and wasted runtime. Since there is no output schema, a bit more detail about empty-queue behavior or how positions are counted could help, but the essential information is present.
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 sole parameter response_format is fully described in the schema with an enum and default, so schema description coverage is 100%. Baseline 3 applies because the description itself adds no parameter-level detail, but none is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses a specific verb ('Check') and a specific resource ('upcoming queue') with a defined outcome: duplicate tracks/episodes with positions and wasted runtime. The queue scope clearly separates it from sibling playlist-duplicate tools such as find_duplicates_in_playlist and find_duplicate_tracks_across_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 makes the queue context clear and labels the operation read-only, but it never explicitly tells an agent when to choose this over the many duplicate-detection siblings. Usage is implied by the name and 'upcoming queue' rather than stated with exclusions or alternative tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
queue_nextB
Queue a track/episode to play next (tail insert with honest disclosure โ Spotify has no insert-next API; tail placement is the API reality). Optionally notes temp-playlist workaround. ๐ข (1 write)
| Name | Required | Description | Default |
|---|---|---|---|
| uri | Yes | Spotify track or episode URI (spotify:track:โฆ / spotify:episode:โฆ) | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| device_id | No | Target device id | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full behavioral burden. It discloses that this is a write operation (' (1 write)'), that it performs a tail insert rather than an insert-next, and why (Spotify has no insert-next API). It also signals that a temp-playlist workaround exists. This is genuinely useful contextual behavior beyond what the schema structure conveys.
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 definition is compact โ roughly three clauses โ and front-loads the main action before the behavioral caveat. The 'Optionally notes temp-playlist workaround' fragment is slightly awkard as meta-instruction, but it earns its place by flagging an alternative strategy in few words. No redundancy with the 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?
For a 4-parameter mutation with no annotations and no output schema, the description covers the key behavioral trait (tail insert) but omits response/return behavior (notable given the response_format parameter exists), device prerequisities, and any relationship to sibling queue tools. Adequate at the core, with clear gaps about what happens when the tool is invoked.
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 (uri, dry_run, device_id, response_format). The description adds little parameter-level meaning beyond echoing 'track/episode,' which the uri schema field already covers ('Spotify track or episode URI'). The 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 first clause, 'Queue a track/episode to play next,' names a specific verb and resource. The parenthetical 'tail insert with honest disclosure โ Spotify has no insert-next API' clarifies that despite the tool name suggesting insert-next, it appends at the queue tail, which is valuable disambiguation for an agent. It stops short of a 5 because it does not explicitly differentiate from the sibling add_to_queue, which could plausibly appear to serve the same purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance is provided. With siblings like add_to_queue, queue_next_episode, and queue_replace_via_playlist in the toolset, the description never tells an agent how to choose between them. The 'Optionally notes temp-playlist workaround' line reads as a meta-instruction to the model rather than user-facing selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
queue_next_episodeA
Find the next unplayed episode of a show (not in recently-played and not fully played) within an episodes_back lookahead and queue it โ podcast binge glue. Quota: ๐ก 2-3 reads + 1 write (POST /me/player/queue).
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| show_id | Yes | Show ID (or spotify:show: URI) | |
| device_id | No | Target device id for the queue add | |
| episodes_back | No | How many of the newest episodes to look back through (default 10) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the tool performs reads and a write, gives a quota (2-3 reads + 1 write), names the actual endpoint (POST /me/player/queue), and explains the selection behavior. This is strong behavioral transparency for a mutating tool, though it doesn't describe failure/no-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?
The description is compact and front-loaded: it states the core behavior first, then gives quota and endpoint detail. Every sentence earns its place, with no redundant filler or restating of the tool name.
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 mutating queue tool with no output schema and no annotations, the description provides enough contextual information to select and call it correctly: the selection algorithm, quota, and write endpoint. It could add what happens when no candidate episode exists or how dry_run affects the response, but the existing covere is strong for this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema documentation covers 100% of parameters, so the baseline is 3. The description mentions 'episodes_back lookahead', which lightly reinforces the episodes_back parameter, but it doesn't add meaningfully beyond what the schema already documents. The schema itself provides adequate descriptions for dry_run, show_id, device_id, episodes_back, and response_format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb+resource combination: it finds the next unplayed episode of a show and queues it. It also clarifies the selection criteria (not in recently-played, not fully played, episodes_back lookahead), which distinguishes it from generic queue_next or queue_playlist tools. The 'podcast binge glue' phrase further contextualizes its intended role.
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 makes the tool's use case explicit: automatically finding and queueing the next unplayed episode of a specific show. It does not explicitly name alternatives or exclusions, but the scope ('of a show', 'episodes_back lookahead') is clear enough for an agent to know when it applies relative to sibling queueing tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
queue_playlistA
Queue all tracks from a playlist/album/artist URI in order (cap 200). mode=append adds to end; mode=replace is not supported โ Spotify has no queue-clear endpoint. Also covers: single add via add_to_queue, bulk via batch_add_to_queue โ See also: add_to_queue, batch_add_to_queue.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | append: add to end; replace: not supported โ returns ok:false with guidance | append |
| limit | No | Max tracks to queue (cap 200). Default 100. | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| device_id | No | Target device id for queue adds | |
| source_uri | Yes | Source Spotify URI (playlist/album/artist/track/episode) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It usefully discloses the 200-track cap, in-order queuing, append semantics, and the absence of a queue-clear endpoint. However, it does not state side effects on the active queue, device/playback prerequisites, or dry_run behavior, which would be more transparent for a mutating 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 first sentence is tight and front-loaded, but the closing fragment 'Also covers: single add via add_to_queue, bulk via batch_add_to_queue โ See also: add_to_queue, batch_add_to_queue' is redundant and slightly confusing, listing the same tools twice.
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 six-parameter mutating tool with no output schema and no annotations, the description covers core behavior and related tools, but it omits dry_run semantics, return/response expectations, and contradicts the schema's broader source_uri types by saying only playlist/album/artist URI.
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 six parameters. The description adds the 'in order' guarantee and the replace limitation, but these largely echo schema constraints and it omits track/episode as accepted source types that the schema lists.
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 opens with a specific verb and resource: 'Queue all tracks from a playlist/album/artist URI in order (cap 200).' It also names the sibling tools add_to_queue and batch_add_to_queue, so an agent can distinguish bulk-collection queuing from single/bulk add operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states that mode=append adds to the end, that mode=replace is unsupported because Spotify has no queue-clear endpoint, and points to add_to_queue for single adds and batch_add_to_queue for bulk adds. It lacks a crisp 'use X when...' rule, but the alternative routing is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
queue_profileA
Composition profile of the current queue: unique artists, albums, track-vs-episode mix, longest consecutive block by one artist. Quota: ๐ข 1 read (GET /me/player/queue), local compute.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It does disclose meaningful behavior: the quota (1 read), the HTTP verb (GET), and that computation is local โ together implying a read-only, side-effect-free, idempotent operation. It does not, however, address edge cases like an empty queue or no active playback session, nor 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?
Two sentences with zero filler. The core purpose and computed fields are front-loaded in the first sentence, and the second adds cost/endpoint context compactly. The emoji is informative (green = cheap quota), not decorative. Every element earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-optional-parameter tool with no output schema, the description covers purpose, computed fields, quota cost, and the underlying endpoint. The only notable gap is undocumented edge-case behavior (e.g., empty queue, missing active session), but this is minor for a read-only analysis tool that already discloses its compute model.
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%. The single parameter response_format is fully documented in the schema itself ('concise' = human prose, 'detailed' = more fields, 'json' = raw API object). The tool description adds no additional parameter meaning beyond what the schema already provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: computing a 'composition profile of the current queue', then enumerates the exact computed outputs (unique artists, albums, track-vs-episode mix, longest consecutive block by one artist). This clearly distinguishes it from queue siblings like get_queue (raw item list), get_queue_snapshot (point-in-time capture), and split_queue_plan (planning/mutation prep).
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 scope is implied well enough โ an agent can infer this is the tool for composition statistics rather than raw queue access. However, it never explicitly names alternatives or exclusion conditions, such as 'for raw queue items use get_queue' or 'for runtime estimation use queue_runtime_report', despite a large family of queue-related siblings. Guidance is present but left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
queue_prune_planA
Plan pruning the upcoming queue: identify redundant duplicate entries (and optionally podcast episodes) to drop, and emit a clean re-queue list. Spotify has no queue-removal endpoint, so this is a plan you act on with queue playback. Read-only planner.
| Name | Required | Description | Default |
|---|---|---|---|
| drop_episodes | No | Also plan to drop podcast episodes from the queue. Default false | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It explicitly discloses the key behavioral trait: this tool is read-only and only produces a plan, it does not modify the queue because Spotify lacks a queue-removal endpoint. It also mentions optional handling of podcast episodes. However, it doesn't disclose what happens with the plan output (e.g., whether it includes track URIs, counts, or a re-queue list format), nor does it address rate limits or whether the queue is fetched live or from a snapshot.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences and front-loads the core purpose. Every sentence earns its place: the first states the plan and optional episodes, the second explains the Spotify limitation and the plan nature, the third confirms read-only. No wasted words, but the read-only tag is a bit redundant with the first sentence's 'plan' emphasis.
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 read-only planner with two optional parameters, the description is mostly complete. However, there is no output schema and the description doesn't explain what the 'clean re-queue list' looks like (e.g., plain URIs, track names, counts) or how the agent should act on the plan. Also, it doesn't mention whether the plan is applied automatically or left to the user, though it does say 'you act on with queue playback.' That's sufficient but could use more detail about the emitted plan's structure.
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 both parameters (drop_episodes and response_format) with defaults and descriptions. The tool description adds minimal extra meaning: it mentions 'podcast episodes' which maps to drop_episodes. It doesn't add details about response_format values beyond what the schema provides, but that's acceptable given full schema 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 specifies a precise verb ('Plan'), the resource ('upcoming queue'), and the action ('identify redundant duplicate entries... and emit a clean re-queue list'). It also clearly distinguishes itself from a direct mutation by stating 'Spotify has no queue-removal endpoint, so this is a plan you act on with queue playback.' This clearly separates it from sibling tools like remove_from_queue or queue_replace_via_playlist.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly communicates when to use this tool: when the user wants to prune the upcoming queue and needs a plan rather than direct action. It implies when not to use it: when a direct mutation is needed, since Spotify has no queue-removal endpoint. It doesn't explicitly name alternative tools for direct queue manipulation, but it does state the constraint that forces this to be a plan, which is strong contextual guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
queue_replace_via_playlistA
Honest no-clear-endpoint workaround to replace the live queue: snapshot it, optionally filter (drop dupes / keep only given artists), build a playlist, and start it as the playback context โ the live queue is replaced via context switch (Spotify has no queue-clear endpoint). Quota: ๐ก 1 read + 2-3 writes.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| device_id | No | Device to start the new context on | |
| drop_dupes | No | Drop repeated URIs from the snapshot (default true) | |
| keep_artists | No | When given, keep only tracks by these artists (case-insensitive; episodes are dropped under this filter) | |
| playlist_name | No | Playlist name (default "Queue snapshot <date>") | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and meets it: it honestly labels the tool as a workaround, explains that replacement actually happens via context switch rather than queue mutation, and discloses the quota cost (1 read + 2-3 writes). This gives the agent important side-effect and rate-limit awareness.
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 tightly packed sentences deliver purpose, mechanism, optional filtering behavior, honest caveat, and quota with no filler. The key purpose is front-loaded, and the quota note is cleanly appended.
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 mutating tool with no annotations and no output schema, the description explains the workflow, the main side effect, the workaround, and the quota. It does not describe return shapes or edge cases, but the complete input schema covers the parameter details, so those omissions are minor.
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 parameter documentation already carries the meaning. The description adds only a coarse mapping to the workflow (drop dupes / keep artists, build playlist) without introducing syntax, defaults, or enum behavior 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?
First phrase states a specific verb and resource: 'replace the live queue.' It then describes the exact mechanism (snapshot, optional filters, build playlist, start as playback context), making it clearly distinguishable from siblings like queue_next or queue_playlist. Calling out that Spotify has no clear endpoint further sharpens the purpose.
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 good contextual cues for when to use it: when the goal is replacing the queue and when no native clear endpoint exists. However, it does not explicitly name sibling alternatives or state when not to use it, so the agent must infer the boundary with tools like queue_playlist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
queue_runtime_reportA
Compute runtime statistics for the upcoming queue: total, average, longest and shortest items plus time remaining on the current track. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
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 explicitly states 'Read-only,' which is a meaningful behavioral guarantee for a compute/report tool, and it discloses what statistics are calculated. It does not address edge cases like an empty queue or no current track, but for a simple read-only reporting tool this is reasonably 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?
One compact sentence front-loads the core purpose, lists the computed metrics, and ends with the important 'Read-only' qualifier. There is no filler, repetition, or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter, read-only statistics tool, the description is largely complete: it states what is computed and confirms safety. The main gap is that it does not define behavior when there is no current track or an empty queue, which could matter given 'time remaining on the current track' is part of the output.
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 response_format parameter is fully documented in the input schema with its enum values and descriptions, achieving 100% schema coverage. The description adds no extra parameter-level detail, but the baseline of 3 applies because the schema already handles parameter semantics.
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 a specific verb ('Compute'), a clear resource ('runtime statistics for the upcoming queue'), and enumerates the exact metrics produced: total, average, longest, shortest items, and time remaining on the current track. The 'Read-only' qualifier further separates it from queue-mutating siblings like add_to_queue or queue_duplicate_check.
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 intended use is implied: call this when you need aggregate runtime statistics about the upcoming queue. However, it does not explicitly distinguish itself from related queue-inspection tools such as describe_queue, get_queue_snapshot, or queue_profile, nor does it state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quick_save_nowA
One-call "like this song": saves the currently-playing track (or the last recent recently-played tracks) straight to your library. Collapses get_currently_playing โ save_to_library into a single step. 1 player read + 1 library write. dry_run previews.
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | ISO-3166 market code passed on the player read, e.g. 'US' | |
| recent | No | Save the N most recent plays (only used as fallback when nothing is currently playing). Default 1. | |
| dry_run | No | Preview the save plan without writing (default true) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does substantial work: it discloses that the tool performs "1 player read + 1 library write" (a mutation), that dry_run previews without writing (and dry_run defaults to true in the schema), and that recent plays are only a fallback when nothing is currently playing. Missing are idempotency behavior (already-saved tracks) and auth requirements, but the core mutation and dry-run safety traits are clearly disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, each earning its place: primary purpose, collapsed pipeline, operation cost (1 read + 1 write), and dry_run behavior. The purpose is front-loaded in the first sentence and there is zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 4-optional-param tool with no output schema, the description covers purpose, fallback behavior, the composed pipeline, the mutation cost, and dry_run safety. Gaps are the return-value details of the three response formats and idempotency semantics, but against a sibling list of 500+ tools, the explicit naming of the collapsed pipeline provides strong disambiguation.
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 baseline is 3; all four parameters (market, recent, dry_run, response_format) are already documented in the schema. The description adds mild reinforcement by explaining the `recent` fallback semantics and dry_run preview behavior, but provides no meaningfully new parameter 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?
The description states a specific verb + resource: "saves the currently-playing track (or the last `recent` recently-played tracks) straight to your library." It also differentiates from siblings by naming the exact pipeline it collapses (get_currently_playing โ save_to_library), so an agent can distinguish it from the standalone get/save tools without opening schemas.
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 makes the use case clear via "One-call 'like this song'" and explicitly names the two-step alternative it collapses (get_currently_playing โ save_to_library), which effectively tells the agent when this convenience wrapper is appropriate. It lacks an explicit 'when-not' or 'use X instead when you need finer control' exclusion, so it stops just short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quota_probeA
Fire 2-3 lightweight authenticated reads and report Retry-After / quota state plus a per-endpoint 403 gating map โ actionable evidence for the #330 gauntlet. Quota: 2-3 reads.
| Name | Required | Description | Default |
|---|---|---|---|
| probe_set | No | minimal = /me ยท light = + /me/player ยท full = + /me/top/tracks + /me/audiobooks. Default light. | light |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does well: it discloses that the tool performs authenticated reads, consumes 2-3 quota units, and is non-mutating by nature. It does not discuss failure modes (e.g., behavior when already rate-limited) or whether results vary by auth scope, but the key operational traits are 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?
Two tight sentences with the action and output front-loaded; the quota note is useful and earned. The only deduction is the '#330 gauntlet' phrasing, which is internal jargon that a generic agent cannot resolve โ it occupies space without contributing actionable meaning.
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 low-complexity tool with fully documented enum parameters, the description covers the essentials: what it does, what it returns (quota state, Retry-After, 403 map), and its quota cost. Gaps remain: no explicit trigger conditions for invocation, and the read-count mismatch with probe_set=full undermines the stated quota contract. With no output schema, the return description is adequate but could be more precise about the 'quota state' format.
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, but the description introduces a misleading inconsistency: it claims 'Fire 2-3... reads' and 'Quota: 2-3 reads,' while the schema's probe_set=full enumerates four endpoints (/me, /me/player, /me/top/tracks, /me/audiobooks). An agent selecting 'full' would exceed the stated quota footprint. The description adds no semantic value beyond the schema and actively conflicts with it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Fire 2-3 lightweight authenticated reads') and a concrete deliverable ('Retry-After / quota state plus a per-endpoint 403 gating map'). This is clearly differentiated from all siblings, which are data retrievals, searches, or mutations โ none of them probe rate-limit/quota state. The 'actionable evidence for the #330 gauntlet' clause adds context without obscuring the core purpose.
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 context is implied rather than explicit: the tool is for diagnosing quota/403 conditions, and the '#330 gauntlet' reference hints at a specific workflow. However, it never states when to prefer this over alternatives, when not to use it, or whether it should precede heavy API operations. An agent is left to infer the intended triggers from the tool name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_playlist_snapshotA
Read one local playlist snapshot and return its meta plus the captured track rows (truncated by max_results) Snapshot guide: take_playlist_snapshot (create), list_saved_snapshots (list), read_playlist_snapshot (read), diff_playlist_snapshots / snapshot_new_tracks / snapshot_removed_tracks (diff), restore_playlist_from_snapshot / restore_playlist_plan (restore).
| Name | Required | Description | Default |
|---|---|---|---|
| snapshot | Yes | Snapshot id (filename stem), filename, or path | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and it does disclose the core behavior: it reads a local snapshot, returns meta + captured track rows, and truncates based on max_results. It stops short of stating explicit side-effect-freeness or error behavior, though 'Read' strongly implies no mutation.
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 core behavior is front-loaded and the snapshot guide is compact but useful. The sentence is slightly run-on and repeats the tool name in the guide, but every part contributes.
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 3-parameter local read tool with no output schema, the description gives enough to call it correctly: what it reads, what it returns, truncation, response formats, and sibling routing. It leaves 'meta' somewhat unspecified and does not discuss missing-snapshot errors, but those are minor for a simple read.
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 schema already documents snapshot, max_results, and response_format fully. The description adds little beyond tying max_results to truncation; baseline 3 applies because 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?
Description uses a specific verb and resource ('Read one local playlist snapshot') and states the returned content ('meta plus the captured track rows (truncated by max_results)'). The trailing snapshot guide names sibling tools by role, distinguishing read from create/list/diff/restore.
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 snapshot guide explicitly maps each operation to its tool: take_playlist_snapshot (create), list_saved_snapshots (list), read_playlist_snapshot (read), diff_playlist_snapshots/snapshot_new_tracks/snapshot_removed_tracks (diff), restore_playlist_from_snapshot/restore_playlist_plan (restore). This tells an agent when this tool is the right choice and names alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
receipt_lookupA
Find mutation receipts by id, date range or affected URI โ closes the receipts loop (issue โ lookup). Local, zero API calls.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Exact receipt id (rcpt_N) | |
| uri | No | Match receipts whose URI list contains this URI | |
| since | No | Only receipts issued... they carry no wall-clock; use id/uri filters mostly | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the disclosure burden. It does add meaningful behavioral context by stating this is local and makes zero API calls, implying an offline read-only lookup. It does not describe behavior for unknown ids, empty results, or whether the local receipt store is persistent, which leaves some transparency gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with the primary action and filter dimensions front-loaded. Every clause earns its place: the search criteria, the loop context, and the cost/behavior note 'Local, zero API calls.' There is no filler or redundant restating of the tool name.
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 lookup tool with no output schema and no annotations, the description gives a clear role, search dimensions, and a strong localization signal. However, it omits the result behavior beyond response_format, such as what happens when no receipt matches, and does not disambiguate against receipt-related siblings like verify_receipt. This is adequate for basic invocation but not fully complete for an agent choosing among many similar tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: id, uri, since, and response_format all already have descriptions, and response_format has an enum with explanations of each output style. The description's filter list (id, date range, affected URI) maps cleanly to the parameters but adds no semantics beyond the schema. Baseline 3 is appropriate when the schema does the documentation work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Find') plus a clear resource ('mutation receipts') and enumerates the lookup dimensions: id, date range, or affected URI. The 'issue โ lookup' loop context also clarifies the tool's role in the mutation workflow. It does not explicitly name a sibling like verify_receipt, so differentiation is implicit rather than spelled out.
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?
'Closes the receipts loop (issue โ lookup)' gives a usable trigger condition: after a mutation is issued, look up its receipt here. 'Local, zero API calls' adds a practical selection signal. However, the description does not state when to prefer a sibling such as verify_receipt or mutation_log_export, so exclusions and alternatives are left implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_feedbackA
Record a local-only taste verdict (love/like/mixed/boring/dislike) or list stored verdicts. Never touches the network โ memory for future recommendations. (Legacy alias of statsfm_record_feedback โ prefer the canonical name.)
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Optional free-text note | |
| action | No | record (default) stores a verdict; list returns stored verdicts | |
| rating | No | Required for record | |
| subject | No | Track/artist/album/genre name. Required for record | |
| subject_type | No | Required for record | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the disclosure burden. It clearly states local-only behavior, no network access, and persistence as memory for future recommendations. It does not detail duplicate handling or exact output, but the core behavioral safety profile is explicit.
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 plus a parenthetical, all information-dense: purpose, key constraint, and routing note. No filler or repeated schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple two-action tool, the description plus full schema coverage gives an agent enough to select and invoke it. It delivers key context (local-only, no network, legacy alias) and the response_format parameter hints at output shapes. It could add a sentence on return values or duplicate behavior, but nothing blocks correct 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?
All six parameters have descriptions in the schema (100% coverage), so the baseline applies. The description mentions the rating enum values and the record/list actions, but adds no new parameter-level semantics beyond what the schema already specifies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool records or lists local-only taste verdicts, enumerates the valid verdict values, and notes it never touches the network. This provides a concrete verb-resource pair and distinguishes it from network-based statsfm siblings.
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 says 'Never touches the network' and 'memory for future recommendations', establishing when to use this local tool. The parenthetical explicitly names statsfm_record_feedback as the canonical alternative and instructs the agent to prefer it, giving a clear when-not-to-use rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refresh_smart_playlistA
Refresh a persisted smart playlist: rebuild candidates from the stored rule and recreate the playlist content.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Rule name saved via save_smart_playlist_rule | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| playlist_id | No | Existing playlist id to refresh (else creates new) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing behavioral traits. 'Recreate the playlist content' conveys that this mutates and replaces existing playlist content, which is useful, but it does not explicitly state that the operation is destructive/overwriting or describe what happens when no playlist_id is provided (create new). The disclosure is adequate but shallow for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one tight sentence with the operative verb front-loaded and no filler words. The colon-separated elaboration ('rebuild candidates... recreate content') earns its place by explaining the internal behavior. It is concise rather than under-specified, though it could carry slightly more context without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema fully documents all four parameters, which reduces the description's burden. However, this is a mutating tool with no annotations and no output schema, so the description should ideally disclose return behavior, explicit overwrite semantics, and when it creates a new playlist vs refreshing an existing one. It covers the core action but leaves the operational envelope to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline of 3 applies; every parameter (name, dry_run, playlist_id, response_format) is already documented in the input schema with clear semantics. The description does not add parameter-level meaning beyond what the schema provides, but it does not need to.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('refresh') targeting a specific resource ('persisted smart playlist') and then explains the mechanism ('rebuild candidates from the stored rule and recreate the playlist content'). This clearly distinguishes it from sibling tools like create_smart_playlist and save_smart_playlist_rule, so an agent can tell which operation is which without opening schemas.
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 its use case: it is for refreshing an already-persisted smart playlist rather than creating one. The name parameter referencing 'Rule name saved via save_smart_playlist_rule' hints at the prerequisite, but the description itself gives no explicit when-to-use or when-not-to-use guidance and names no alternatives among the many playlist/mutation siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_duplicate_playlist_itemsA
Remove duplicate items from a playlist: keeps the first occurrence of each track and removes later repeats. Exact URI repeats are always cleaned; pass include_relinked=true to also collapse same-song entries that appear under different URIs (remasters/relinks). Supports dry_run; removals of 10+ items ask for confirmation via elicitation. Also covers: playlist_dedupe_advanced, dedupe_playlist_plan โ See also: playlist_dedupe_advanced, dedupe_playlist_plan.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| playlist_id | Yes | Playlist ID | |
| include_relinked | No | Also collapse same-song duplicates under different URIs (relinks/remasters). Default false โ only exact URI repeats are removed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does it well. It discloses the destructive removal behavior, keep-first-occurrence semantics, the optional relinked collapse, the dry-run preview mode, and the confirmation elicitation threshold for large removals.
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 core information is front-loaded and dense, but the tail is redundant and confusing: 'Also covers: playlist_dedupe_advanced, dedupe_playlist_plan โ See also: playlist_dedupe_advanced, dedupe_playlist_plan' repeats the same two names with no added value. This weakens an otherwise compact description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description covers the core behavior, destructive threshold, dry-run escape hatch, and the key include_relinked branch. It is slightly incomplete on clear routing among the dedupe-related siblings, but an agent can invoke this tool correctly with what is provided.
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 three parameters and their meanings. The description adds only minor elaboration around include_relinked and dry_run, not enough to raise it above the baseline for fully covered schemas.
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: remove duplicate items from a playlist, with the precise rule of keeping the first occurrence and removing later repeats. It also clarifies the exact-URI vs relinked behavior, but it does not explicitly differentiate this tool from similarly named siblings like playlist_dedupe_advanced or dedupe_playlist_plan.
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 useful invocation context: dry_run is supported, and removals of 10+ items trigger confirmation. However, it only names related tools via 'Also covers / See also' without saying when to choose this tool over playlist_dedupe_advanced or dedupe_playlist_plan, leaving the alternatives guidance mostly implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_from_libraryA
Preferred. Accepts the widest URI mix (track, album, episode, show, audiobook, user, playlist) in one request. Remove one or more items from the user's library via Spotify's unified library endpoint. Max 40. Set dry_run=true to preview.
| Name | Required | Description | Default |
|---|---|---|---|
| uris | Yes | Spotify URIs to remove | |
| dry_run | No | Preview only: show exactly which URIs would be removed without calling the API | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It clearly states the destructive nature ('Remove'), the maximum batch size (40), and the dry_run preview option. However, it does not mention irreversibility, authentication requirements, or what happens after successful removal, which would be valuable for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences carry all key decision information up front: preference, accepted input breadth, action, limit, and preview capability. There is no filler or redundant restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description gives the essential operational details: what it removes, which URI types are supported, the batch limit, and a safe preview path. It could add response/error expectations, but the core call guidance is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine semantic value by enumerating the accepted URI types (track, album, episode, show, audiobook, user, playlist) that the schema's generic 'Spotify URIs to remove' does not convey. It also reinforces the max-40 limit and dry_run preview behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Remove one or more items from the user's library') and identifies the specific unified library endpoint. It also signals relative scope with 'widest URI mix' and lists accepted item types, which helps distinguish it from sibling removal tools like remove_saved_items.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Preferred' and 'widest URI mix' communicate when this tool should be selected over more narrow removal tools, and 'Set dry_run=true to preview' gives a concrete safe-usage pattern. It does not name alternative tools explicitly or state when not to use it, but the 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.
remove_from_library_by_playlistA
Remove from Liked Songs any tracks that also appear in a given playlist. Quota: ๐ก 2 GETs + DELETE (chunked).
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| playlist_id | Yes | Playlist ID whose tracks will be removed from library | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does meaningful work: 'Quota: ๐ก 2 GETs + DELETE (chunked)' discloses the API cost, the destructive nature of the operation, and that the DELETE executes in chunks โ all beyond the schema. The description also implicitly defines what gets destroyed (playlist-overlapping tracks in Liked Songs). It stops short of noting reversibility or what happens when tracks are absent from the library, but the quota and chunking disclosures are genuine added value.
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 zero waste: the core operation is front-loaded first, and the quota disclosure follows as essential cost information for an agent deciding whether to invoke a destructive, multi-call operation. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a moderate-complexity cross-cutting mutation (playlist ร library intersection), the description is largely sufficient: purpose, cost, and chunked execution are stated, and all parameters are fully documented in the schema, including a dry_run safety valve. Remaining gaps โ no mention of undo/reversibility (undo_mutation and backup_first exist as siblings) and no behavior for non-matching tracks โ are minor rather than crippling.
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 three parameters: playlist_id's role ('Playlist ID whose tracks will be removed from library'), dry_run's preview behavior, and response_format's enum semantics. The description adds no parameter-level detail beyond what the schema provides, which matches the baseline of 3 for high 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 names a specific verb and resource combination: 'Remove from Liked Songs any tracks that also appear in a given playlist.' This precisely captures both the target (Liked Songs/library) and the selection criterion (tracks overlapping a playlist), distinguishing it from siblings like remove_from_library, remove_from_playlist, and unsave_orphan_tracks without needing to open the schema. It is a specific, non-tautological statement of the operation.
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 makes the use case evident โ cleaning Liked Songs against a playlist's contents โ but provides no explicit when-to-use or when-not-to-use guidance. It does not name alternatives such as remove_saved_items, remove_from_library, or playlist_subtract, nor does it state conditions that would favor them. The usage context is implied by the operation's semantics rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_from_playlistB
Remove tracks or episodes from a playlist. Max 100 entries per call.
| Name | Required | Description | Default |
|---|---|---|---|
| uris | Yes | URIs to remove; use { uri, positions } to target specific occurrences of a repeated URI | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| playlist_id | Yes | Playlist ID | |
| snapshot_id | No | Apply the removal against this playlist version instead of the latest |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It only says 'Remove' and repeats the max-100 constraint already present in the schema. It does not disclose mutability, irreversibility, permissions, snapshot behavior, or what a dry-run preview provides.
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, front-loaded sentences communicate the core operation and the batch limit with no filler. Every word contributes.
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 schema covers parameters well, but the overall tool context is incomplete for an unannotated mutation: no return-value expectations, no warning that removals are permanent, and no explanation of how snapshot_id or dry_run interact with the remove action.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents playlist_id, uris, dry_run, and snapshot_id. The description adds only a high-level statement about removing tracks/episodes and a max limit already enforced by maxItems, so it adds little 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 states a specific verb and resource: 'Remove tracks or episodes from a playlist.' It is clear and distinct from sibling tools like add_to_playlist or remove_from_library_by_playlist, though it could have explicitly differentiated itself from related removal variants such as remove_unavailable_playlist_items.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives, no exclusions, and no mention of positional removal for repeated URIs. Sibling tools with overlapping semantics exist, but no routing or preference cues are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_playlist_rangeA
Delete a positional range of a playlist (0-based start, EXCLUSIVE end; negative values count from the end): backs up the current items to a local file first, then removes by positions + uris. dry_run defaults to TRUE. Quota: ๐ข GET + chunked deletes when committing.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | 0-based EXCLUSIVE end; negative = from end. Default: all items | |
| start | No | 0-based inclusive start; negative = from end. Default 0 | |
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Pass false to commit. Default true | |
| playlist_id | Yes | Playlist to trim (ID or spotify:playlist: URI) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are present, the description carries the full burden, and it delivers: it discloses that items are backed up locally before removal, that dry_run defaults to true, and that committing uses chunked deletes. This is strong transparency for a destructive 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?
Three sentences front-load the core operation and safety behavior with no filler. The range semantics, backup behavior, dry_run default, and quota note are all compressed efficiently into a compact description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool, the description covers the critical operational aspects: backup, dry_run default, and quota behavior. It could be improved by naming a related alternative or describing the committed-operation output, but the prose plus complete schema 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?
The schema already documents all five parameters at 100% coverage, including start/end semantics and dry_run behavior. The description reinforces these semantics and adds the 'removes by positions + uris' implementation note, but the schema remains the primary source of parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise operation: deleting a positional range of a playlist, with explicit indexing semantics. This clearly distinguishes it from read/extract tools like extract_playlist_range, even though it does not name siblings.
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 positional range deletion but never explicitly states when to use this tool over alternatives like remove_from_playlist or playlist_trim. It gives context about dry_run and backup, but no exclusion criteria or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_saved_episodeA
Remove episodes from your library (DELETE /me/episodes) โ removal verb: also see remove_saved_shows (shows), delete_playlist_snapshot (local). After cross-checking which are actually saved โ previews a PLAN by default; pass dry_run=false to commit.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Default true โ pass false to commit. | |
| episode_ids | Yes | Episode IDs/URIs to remove (1โ50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It adds meaningful behavior beyond the schema by disclosing the dry-run PLAN default, the explicit commit mechanism, and the pre-check against saved episodes. It does not detail irreversibility or API side effects, but the safety-first default is a strong 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?
Two dense sentences convey purpose, endpoints, sibling alternatives, default behavior, and how to commit. The phrase 'removal verb:' is slightly awkward, but the description is otherwise tightly packed with no filler and leads with the core action.
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 removal tool with no output schema and no annotations, the description covers the essential call semantics: what is removed, how the safety default works, and how to actually perform the removal. It does not describe error conditions or PLAN details, but the core decision-making and invocation knowledge is present.
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 explains dry_run, episode_ids, and response_format. The description adds context about cross-checking and PLAN behavior but does not add parameter-level meaning beyond what the schema provides. 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?
States the specific verb 'Remove episodes from your library' and the underlying API endpoint (DELETE /me/episodes). It also names sibling tools with the same removal intent (remove_saved_shows, delete_playlist_snapshot) and scopes the difference by resource type, so the agent can distinguish it from nearby 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?
Provides clear operational guidance: it cross-checks saved status, previews a PLAN by default, and requires dry_run=false to commit. It names related removal siblings but stops short of explicit when-to-use versus alternatives like remove_saved_items or remove_from_library, leaving some routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_saved_itemsA
Legacy per-type variant (kept for grandfathered app credentials that lack unified /me/library access). Prefer remove_from_library. Remove one or more items from the user's library. Accepts track, album, show, episode, and audiobook URIs (e.g. spotify:track:abc). Max 50. Set dry_run=true to preview.
| Name | Required | Description | Default |
|---|---|---|---|
| uris | Yes | Spotify URIs to remove | |
| dry_run | No | Preview only: show exactly which URIs would be removed without calling the API | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does reveal the legacy nature, supported URI types, the 50-item maximum, and the dry_run preview behavior. However, it does not explicitly describe side effects, required permissions, idempotency, or what happens on a real removal, which would be valuable for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loads the most important caveat (legacy variant, prefer remove_from_library) before the core action. Every sentence contributes useful information, and there is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is largely complete for a moderately simple tool: it covers the action, supported inputs, limits, preview mode, and the preferred alternative. It does not explicitly describe the response or side effects, but the response_format parameter is documented in the schema, and no output schema exists to otherwise clarify return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already has 100% parameter coverage, so the baseline is 3. The description adds value beyond the schema by enumerating accepted URI types (track, album, show, episode, audiobook) and giving a concrete format example (spotify:track:abc), which helps the agent form valid inputs. It also reinforces dry_run usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Remove one or more items from the user's library') and specifies the resource. It also explicitly differentiates itself from the preferred sibling tool by labeling itself a 'Legacy per-type variant' and directing users to remove_from_library, making its purpose unmistakable.
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 explicit usage context: it is kept for grandfathered app credentials that lack unified /me/library access. It also names the preferred alternative ('Prefer remove_from_library'), giving an agent clear guidance on when to choose this tool versus the sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_saved_showsA
Bulk-remove shows from your library (DELETE /me/shows) โ removal verb family: also see unsubscribe_from_show (single), remove_saved_episode (episodes). After cross-checking which of the given IDs are actually saved โ previews a PLAN by default; pass dry_run=false to commit.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Default true โ pass false to commit. | |
| show_ids | Yes | Show IDs/URIs to remove (1โ50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations to lean on, the description carries the safety burden well: it discloses the mutation, the DELETE semantics, and the critical plan-by-default, commit-only-with-dry_run=false behavior. It does not mention reversibility or authorization, but the dry-run safety mechanism is the most important behavioral detail and it is present.
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 compact yet information-dense: endpoint, scope, alternatives, and commit semantics all appear in two sentences without repetition. Every clause adds useful guidance for an agent deciding to call this tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive bulk operation with no annotations and no output schema, this description covers the essential call decisions: what it removes, how it differs from siblings, and how to preview before committing. It could say a bit more about the shape of the plan/result, but it is complete enough 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 coverage is 100%, so the schema already documents all three parameters. The description adds beyond that by explaining the planning behavior tied to dry_run and the cross-checking of saved IDs, which gives the parameter meaningful operational 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 a specific action โ bulk-removing shows from the library โ and anchors it to a concrete API endpoint (DELETE /me/shows). It explicitly distinguishes this tool from siblings by noting unsubscribe_from_show for single shows and remove_saved_episode for episodes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives direct routing guidance by naming the removal verb family and the exact sibling alternatives for single-show and episode removals. It also explains the preview-vs-commit flow, telling the agent to pass dry_run=false when actually committing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename_deviceA
Rename a device locally (sidecar label โ Spotify has no rename endpoint).
| Name | Required | Description | Default |
|---|---|---|---|
| new_name | Yes | Friendly label | |
| device_id | Yes | Device id | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does disclose the most critical trait: the rename is local-only and will not propagate to Spotify. However, it does not say whether the label persists across sessions, what happens when an unknown device_id is supplied, or whether other tools in the toolset (compare_devices, device_sync_state) reflect the new label.
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 10-word sentence with a tightly packed parenthetical that earns its place by explaining why the operation is local. The key scoping constraint is front-loaded ahead of any caveat, and every word 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?
The core operation and its key limitation are covered, which is sufficient for correct invocation in the common case. But with no output schema and no annotations, the sidecar lifecycle is left open: persistence, handling of unknown devices, and interaction with device-sync tooling are unaddressed, leaving an agent to guess at edge-case behavior.
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 all three parameters are already documented and the baseline is 3. The description adds some meaning by clarifying that new_name is a 'sidecar label' rather than a Spotify-visible device name, but it contributes nothing beyond the schema for device_id or response_format.
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 ('Rename') and resource ('device') and immediately scopes the operation with 'locally (sidecar label)'. This distinguishes it from playback/device-control siblings like switch_device, get_devices, and transfer_playback by establishing that it is a local label change, not a Spotify API operation.
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 its use case โ renaming a device โ and the note that 'Spotify has no rename endpoint' signals this is the only available rename path, which is useful routing context. However, it does not state when not to use it, name alternatives explicitly, or mention prerequisites such as whether the device must first exist in the local sidecar store (e.g., via get_devices or device_sync_state).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reorder_playlist_itemsB
Move a range of items within a playlist. Spotify semantics: when insert_before > range_start, the effective destination shifts down by range_length because the moved range is lifted out first (e.g. moving [2] to insert_before=4 lands it AT index 3). Also covers: playlist_resequence (full resequence), playlist_move_block โ See also: playlist_resequence, playlist_move_block.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| playlist_id | Yes | Playlist ID | |
| range_start | Yes | Index of the first item to move | |
| range_length | No | Number of items to move. Default: 1 | |
| insert_before | Yes | Index to insert the range before |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose a genuinely non-obvious behavioral detail: effective destination shifts down by range_length when insert_before > range_start. It also references dry_run as a preview mechanism. However, it omits permission requirements, mutation side effects, and response/error behavior, which are meaningful gaps for a mutating operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence is tight and the offset semantics earn their place. However, the final clause is redundant and confusing: 'Also covers ... โ See also: ...' repeats the same tool names and leaves ambiguity about whether this tool subsumes them or merely relates to them.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations, no output schema, and five parameters, the description covers the most important semantic trap but leaves gaps: it does not describe the return value, clarify when to use associated sibling tools, or state required permissions or failure behavior. It is adequate for a straightforward range move but not fully complete for confident selection among many playlist-mutation tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds real value beyond the schema by explaining the interaction between range_start, range_length, and insert_before, including a concrete example such as moving [2] to insert_before=4 landing at index 3. This is exactly the kind of relationship the individual parameter descriptions do not 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 opens with a specific verb and resource: 'Move a range of items within a playlist.' It further sharpens meaning by explaining Spotify's insert_before offset semantics with an example. However, the trailing 'Also covers: playlist_resequence...' blurs scope instead of cleanly differentiating this tool from those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance is provided. While the description mentions playlist_resequence and playlist_move_block in a 'See also' list, it never states when an agent should choose those alternatives over this tool, nor does it define the boundaries between them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
repeat_listener_reportA
Quantify repeat listening in recently-played history: share of plays going to tracks heard more than once plus consecutive same-track replays (default 150 items). Quota: GET /me/player/recently-played cursor walk.
| Name | Required | Description | Default |
|---|---|---|---|
| max_items | No | Max recently-played items to walk (default 150; the API pages 50 per call). | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It delivers a genuinely valuable behavioral fact: the tool consumes API quota via a GET /me/player/recently-played cursor walk, plus the 150-item default window. It clearly implies a read-only analytical operation, though it stops short of explicitly stating idempotency or the number of API calls it may make.
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 zero filler: the first front-loads the purpose and precise metrics, the second discloses the quota behavior. 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?
For a 3-parameter report tool with no output schema and no annotations, the description covers the core purpose, the default window, and the quota cost. The response_format enum partly covers output shape, but the description doesn't describe the returned object structure nor explicitly route to/away from overlapping siblings; still, the essentials an agent needs before calling are present.
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's mention of the 150-item default reinforces the max_items parameter semantics and ties it to the quota note, but all three parameters (max_items, max_results, response_format) are already well-documented in the schema, so the description adds only marginal 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 opens with a specific verb ('Quantify') and resource ('recently-played history'), then precisely defines the two computed metrics: share of plays to tracks heard more than once and consecutive same-track replays. This clearly distinguishes it from raw-data tools like get_recently_played and from adjacent analytics like most_replayed and binge_detector_report.
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 analytic scope is evident from the description, so when to use it is implied: any question about repeat-listening patterns in recently-played history. However, no alternative tools are named and no exclusions are stated, even though several siblings (most_replayed, binge_detector_report, listening_report) occupy overlapping analysis territory.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
repeat_queue_toggleB
One-call queue-repeat helper โ sets repeat=context/off and optionally shuffle in 1-2 writes. ๐ข.
| Name | Required | Description | Default |
|---|---|---|---|
| enable | Yes | true โ repeat=context, false โ repeat=off | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| shuffle | No | Also set shuffle state | |
| device_id | No | Target device id | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral disclosure burden. It does add one useful trait โ the write-count optimization ('in 1-2 writes') โ but it fails to disclose that this is a state-mutating operation with consequences for the current playback context, what 'repeat=context' actually changes, whether shuffle is left untouched when omitted, or any prerequisite such as an active device. The ๐ข emoji hints at safety without substantiating it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words; the core action ('sets repeat=context/off and optionally shuffle') appears immediately. The trailing '๐ข' emoji is decorative noise and slightly detracts, but the overall structure is 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?
For a state-changing tool with no annotations and no output schema, this description is thin. It does not explain what 'repeat=context' means for the current queue, what the default target device is, how dry_run interacts with the '1-2 writes' claim, or what happens to shuffle when the parameter is omitted. An agent would have to infer several behaviors to call this 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 five parameters, warranting the baseline 3. The description adds marginal value by mapping 'enable' to the repeat=context/off values and 'shuffle' to the optional shuffle action, but it does not add semantics beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('sets'), a clear resource (repeat=context/off), and an optional second action (shuffle), which lets an agent understand the core operation. The 'one-call helper' framing distinguishes it from single-purpose siblings like set_repeat and set_shuffle. However, the coined term 'queue-repeat' is slightly ambiguous about whether this targets the current queue's repeat mode specifically.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'one-call helper' phrasing implies this is a consolidation tool for when both repeat and optionally shuffle need to be set together, distinguishing it from the standalone set_repeat/set_shuffle siblings. But it never explicitly names the alternatives or states conditions for choosing this tool over them, so usage guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
replace_playlist_itemsA
Replace ALL items in a playlist with the supplied URIs, overwriting the current contents. Lists longer than 100 URIs are sent in chunks internally (replace + appends).
| Name | Required | Description | Default |
|---|---|---|---|
| uris | Yes | Complete ordered list of track or episode URIs the playlist should contain | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| playlist_id | Yes | Playlist ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, and it delivers: it explicitly warns of the destructive overwrite semantics and reveals the non-obvious internal chunking behavior for lists over 100 URIs. The only gap is the lack of a warning about partial application or atomicity if a chunk fails mid-way.
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 zero wasted words. The destructive core behavior is front-loaded in the first sentence, and the second sentence adds the genuinely useful chunking detail. 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 destructive mutation tool with no output schema and no annotations, the description covers the core behavior and the chunking mechanism well. However, it omits what the return value looks like, whether the chunked operation is atomic or can partially apply on failure, and whether a snapshot/backup should be taken first โ meaningful gaps for a destructive operation.
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 baseline is 3. The uris parameter is already described as 'Complete ordered list of track or episode URIs' in the schema, and the description's chunking note adds behavioral context to that parameter. However, the description does not add meaning beyond what the schema already documents, so 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb-resource pair ('Replace ALL items in a playlist') and crucially clarifies the overwrite semantics ('overwriting the current contents'). This clearly differentiates it from sibling tools like add_to_playlist, remove_from_playlist, and reorder_playlist_items, so an agent can immediately tell what this tool is for.
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 'Replace ALL' and 'overwriting the current contents' phrasing implies this is the wholesale-replacement tool as opposed to incremental playlist edits, but it never explicitly names alternatives or states when not to use it (e.g., 'use add_to_playlist to append'). Usage context is implied rather than stated, which is adequate but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
replay_sessionC
Replay a tagged listening session: queue its tracks or create a playlist.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Replay via queue or new playlist | queue |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| session_id | Yes | Session id | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of explaining side effects and behavior. It only states the high-level action and modes; it does not disclose whether queueing replaces the current queue, whether playlist creation has side effects, whether dry_run prevents all mutations, or what the response looks like. This is a meaningful gap for a tool that can mutate playback or create playlists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence that front-loads the core operation and then names the two modes. There is no filler or redundant wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has four parameters, no output schema, no annotations, and side-effect potential, so a richer description is needed. The current text explains the basic purpose but omits behavior around queue replacement, playlist creation details, dry_run effects, and relationship to session-related 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 description coverage is 100%, so the schema already documents all four parameters. The description adds some context by tying mode to 'queue its tracks or create a playlist', but it does not go beyond what the schema already states about dry_run or response_format.
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 a specific action ('Replay') and a specific resource ('a tagged listening session'), then clarifies the two modes: queueing tracks or creating a playlist. It is clear enough to identify what the tool does, though it does not explicitly distinguish itself from sibling tools like list_sessions or queue_playlist.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a use case (replaying a tagged listening session) but gives no explicit guidance on when to choose this tool over alternatives, no prerequisites, and no exclusions. For example, it does not mention that a sessions must already be tagged via tag_listening_session or that other queue/playlist tools exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_artistC
Resolve an artist name or URI to a Spotify artist ID via search
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Search results to consider, 1โ10. Default: 5 | |
| query | Yes | Artist name, spotify:artist: URI, or search query | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full disclosure burden, but it is silent on key behavior: does it return a single canonical ID or a list of candidate matches? The singular 'to a Spotify artist ID' framing conflicts with the schema's max_results up to 2000 and response_format varieties, implying multi-result output. It also does not disclose ID format (base62 vs spotify:artist: URI), ambiguity handling, or what 'detailed' vs 'concise' returns look like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with zero filler; the core verb, resource, and mechanism are stated immediately. However, the extreme brevity omits essential qualifiers about output multiplicity, so it is efficient but slightly under-informative for its length.
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 resolution tool whose entire purpose is producing an ID (or IDs), the absence of any return-value description is a significant gap, especially with no output schema and no annotations. It also fails to reconcile the duplicate pagination-like parameters (limit vs max_results) or explain how response_format changes the result. An agent cannot predict what this tool will actually return.
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 with descriptions and constraints. The description adds nothing beyond the schema, but the baseline of 3 applies because the schema carries the full semantic load. No additional clarification is needed for parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('resolve') and resource ('artist name or URI' โ 'Spotify artist ID'), which clearly conveys the transformation the tool performs. It is conceptually distinct from plain searching, though it does not explicitly name or differentiate sibling tools like search_artists or artist_name_disambiguator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus the many overlapping siblings (search_artists, search, artist_name_disambiguator, get_artist). There are no conditions, exclusions, or scenarios described, leaving the agent to guess which search-like tool fits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restore_library_snapshotA
STRICTLY ADDITIVE restore of a library snapshot written by backup_library_snapshot. Adds only what is missing: saves absent tracks/albums/shows/episodes/audiobooks, follows unfollowed artists, and creates NEW playlists named 'Restored ยท ()' โ existing playlists are never touched and nothing is ever deleted, renamed, or overwritten. dry_run defaults to TRUE (read-only preview); setting dry_run=false requires explicit interactive confirmation before any write, and restores are refused entirely in environments without confirmation support.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | DEFAULT true: read-only preview of exactly what would be added. Set false to perform the (additive) writes after explicit confirmation. | |
| categories | No | Which snapshot categories to restore. Default: all | |
| backup_path | Yes | Path to the snapshot JSON file from backup_library_snapshot | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states that the operation is strictly additive, never deletes/renames/overwrites, never touches existing playlists, and requires confirmation for writes. This fully informs an agent about side effects and safety constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every clause earns its place: it front-loads the critical 'STRICTLY ADDITIVE' constraint, details the exact scope of writes, and specifies confirmation requirements. No redundant filler or vague phrasing.
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 non-trivial restore operation with 5 parameters and no output schema, the description covers safety semantics, dry-run behavior, and category scope well. It lacks explicit details about the return value/response format, but the response_format parameter partially compensates and the preview behavior is already described.
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 each parameter already has clear descriptions including defaults and enums. The tool description reinforces the dry_run behavior but does not substantially add meaning beyond the schema, 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 names a specific operationโ'restore of a library snapshot written by backup_library_snapshot'โand enumerates the exact actions taken: saving absent tracks/albums/shows/episodes/audiobooks, following unfollowed artists, and creating new playlists. It clearly differentiates this from sibling restore tools like restore_playlist_from_snapshot by scoping it to whole-library snapshots.
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 concrete usage guidance: dry_run defaults to true for read-only preview, writes require explicit interactive confirmation, and restores are refused without confirmation support. It does not explicitly name alternatives for narrower restore scenarios, but the strict-additive and dry-run guidance makes appropriate use clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restore_playback_stateA
Restore a saved playback state snapshot (seeks, shuffle/repeat, queue context) to a device.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Snapshot name | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| device_id | No | Target device id | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It lists the state components restored, but does not disclose that current playback/queue state will be overwritten, whether an active or specific device is required, or what the response/reversibility situation is.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. The parenthetical adds useful precision about what the snapshot contains, and every word contributes to the core meaning.
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 core operation and parameters are understandable given the full schema, but there is no output schema and no annotations. The definition lacks guidance about default device behavior, destructive side effects, and how to choose this over closely related restore/resume tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds no real parameter-level detail beyond what the schema already provides: 'name' maps to snapshot name, 'device' maps to device_id, but no syntax or additional semantics are supplied.
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 identifies a specific verb ('Restore'), a specific resource ('saved playback state snapshot'), and clarifies the scope with the parenthetical '(seeks, shuffle/repeat, queue context)'. This distinguishes it from library/playlist snapshot restore tools and other playback helpers.
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 explicit: a saved snapshot must already exist and the action targets a device, so it likely follows save_playback_state or list_playback_states. However, it does not name alternative tools or state when not to use this instead of similar tools like resume_playback_position, continue_last, or transfer_playback_with_state.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restore_playlist_from_snapshotA
Make a live playlist match a snapshot (add missing, remove extra tracks); dry_run=true (default) returns the deterministic PLAN without touching Spotify Snapshot guide: take_playlist_snapshot (create), list_saved_snapshots (list), read_playlist_snapshot (read), diff_playlist_snapshots / snapshot_new_tracks / snapshot_removed_tracks (diff), restore_playlist_from_snapshot / restore_playlist_plan (restore).
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: perform the read side and return a deterministic PLAN without writing/deleting anything. Default true โ pass false to commit. | |
| playlist | No | Target playlist (default: the snapshotโs own playlist_id) | |
| snapshot | Yes | Snapshot to restore from (id, filename, or path) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It does disclose the key safety default: 'dry_run=true ... returns the deterministic PLAN without touching Spotify,' and implies mutation via 'add missing, remove extra tracks.' However, it never explicitly warns that committing with dry_run=false is destructive or irreversible, nor does it describe what a committed restore returns.
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 core purpose and dry-run default are front-loaded, and the snapshot guide is compact and useful. The main structural issue is the run-on quality around 'without touching Spotify Snapshot guide,' which lacks clear punctuation, but there is no filler or redundant prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description communicates the essential operation and a safe default, and the schema covers parameters well. However, it leaves the restore_playlist_plan relationship ambiguous and does not clarify the exact output when a restore is committed, so it is usable but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents dry_run, playlist, snapshot, and response_format. The tool description adds little beyond contextualizing dry_run and the snapshot workflow, 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 states the exact operation: 'Make a live playlist match a snapshot (add missing, remove extra tracks).' This clearly identifies the resource and the behavior, and the snapshot guide helps distinguish it from snapshot creation, reading, and diffing 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 'Snapshot guide' provides a useful workflow: take/list/read/diff snapshots before restoring, which helps an agent understand when this tool is appropriate. However, it does not explicitly distinguish when to use restore_playlist_from_snapshot versus restore_playlist_plan, so the routing is somewhat implied rather than fully stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restore_playlist_planA
Read-only plan of exactly which tracks would be added/removed to make a live playlist match a snapshot โ never mutates Snapshot guide: take_playlist_snapshot (create), list_saved_snapshots (list), read_playlist_snapshot (read), diff_playlist_snapshots / snapshot_new_tracks / snapshot_removed_tracks (diff), restore_playlist_from_snapshot / restore_playlist_plan (restore).
| Name | Required | Description | Default |
|---|---|---|---|
| playlist | No | Target playlist (default: the snapshotโs own playlist_id) | |
| snapshot | Yes | Snapshot to plan from (id, filename, or path) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It explicitly discloses the key behavioral trait: read-only, never mutates. It also clarifies that the tool produces a plan rather than executing changes, which is the most important behavioral distinction. It doesn't detail response formatting, but the plan's content is sufficiently specified.
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 opening sentence is dense and front-loaded with the core behavior, and it earns its place. The trailing Snapshot guide is somewhat redundant given the sibling list, but it is well-organized and useful for orienting the agent. Minor redundancy prevents a 5.
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 plan-preview tool with no output schema and no annotations, the description covers the essential points: what it does, what it doesn't do, and how it relates to the snapshot lifecycle. It could go further by describing the shape of the returned plan, but 'exactly which tracks would be added/removed' provides enough functional completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% โ all three parameters (playlist, snapshot, response_format) have descriptive text including defaults and enum values. The description adds conceptual context about how playlist and snapshot relate, but it doesn't add meaningful parameter-level semantics beyond what the schema already provides, so the 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 clearly states the tool's function with a specific verb ('plan'), resource (snapshot-to-playlist reconciliation), and output (exactly which tracks would be added/removed). It explicitly distinguishes itself as read-only and separates itself from restore_playlist_from_snapshot, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The Snapshot guide categorizes related tools (create/list/read/diff/restore) and places restore_playlist_plan under restore, while the 'never mutates' note signals it is the preview counterpart to restore_playlist_from_snapshot. This is clear context, though it stops short of an explicit 'use this when you want to preview before restoring' instruction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resume_playback_positionA
Resume a captured playback bookmark: transfer playback to the bookmarked device and seek to the bookmarked position. Preview by default โ pass dry_run=false to execute.
| Name | Required | Description | Default |
|---|---|---|---|
| play | No | Start playback after transferring. Default true | |
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Default true โ pass false to commit. | |
| bookmark_id | Yes | Bookmark id as returned by capture_playback_position / list_playback_bookmarks | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
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 and does it reasonably well: it discloses that the tool will transfer playback to a device, seek to a position, and that it previews by default unless dry_run=false is passed. It stops short of describing failure modes, device availability issues, or effects on current playback, but the key side effects are 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?
Two crisp sentences with no filler. The core purpose and mechanics are front-loaded, and the critical dry_run execution detail is placed at the end where it is easy to notice.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation-style tool with no output schema and no annotations, the description covers the essential operational context: what the tool does, what side effects it has, and how to switch from preview to execution. It could add explicit prerequisites or alternative routing, but the schema already documents the bookmark_id provenance, so the description is largely complete for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds slight value by connecting bookmark_id to the 'bookmarked device and position' and by reaffirming the dry_run execution semantics, but it goes no further than the schema already does for play and response_format.
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 action ('Resume') applied to a concrete resource ('a captured playback bookmark') and defines what that entails: transfer playback to the bookmarked device and seek to the bookmarked position. This clearly differentiates it from related siblings like capture_playback_position, delete_playback_bookmark, or episode_resume.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it: when a captured bookmark exists and the user wants to resume it by moving playback to the bookmarked device. It also gives clear execution guidance via the dry_run=false flag. However, it does not explicitly discuss alternatives or when not to use it, leaving route selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reverse_playlist_planA
Plan (and optionally commit) reversing a playlist's entire order via one atomic replace โ dry_run defaults to TRUE so it returns the reversed PLAN read-only. Quota: ๐ข GET + 1 PUT when committing. Also covers: playlist_reverse variant โ See also: playlist_reverse.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Pass false to commit. Default true | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | Yes | Playlist to reverse (ID or spotify:playlist: URI) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It discloses that dry_run returns a read-only PLAN, that committing costs 'GET + 1 PUT', and that the operation is an atomic replace. It does not describe failure modes or the PLAN structure in detail, but the key behavioral traits are 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 compact and front-loaded with the primary purpose. The quota line and variant note are useful, though 'Also covers: playlist_reverse variant โ See also: playlist_reverse' is slightly redundant and could be tightened.
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 adequately covers dry_run/commit semantics and quota, but there is no output schema and no annotation support. It does not explain what the returned PLAN contains, how response_format alters it, or how max_results affects it, leaving moderate gaps for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all parameters. The description reinforces dry_run's default and adds 'atomic replace' context, but it does not add meaningful semantics for max_results or response_format beyond what the schema provides. The baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action: 'reversing a playlist's entire order via one atomic replace'. It also distinguishes itself as a planning variant by mentioning 'playlist_reverse variant' and 'See also: playlist_reverse', making sibling differentiation clear.
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 clearly conveys when to use the tool: it plans, dry_run defaults to TRUE, and commit is optional. It references playlist_reverse as a related alternative. It stops short of explicit exclusion rules or comparison against other plan tools like sort_playlist_plan, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
room_levelA
Level the room: read the active device volume and apply the same percent to every other live device. Quota: ๐ก 1 read + N writes (one volume PUT per target device).
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
| exclude_device_id | No | Additional device id to leave untouched |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for behavioral disclosure. It explicitly states that the tool performs 1 read and N writes, with one volume PUT per target device, which reveals the mutating side effect and quota cost. It does not discuss auth or failure behavior, but the core state-changing behavior is 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?
Two dense sentences with zero fluff: the first states the purpose and mechanism, the second gives quota details. The most important behavioral information is front-loaded before operational cost details.
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 straightforward mutation tool with three optional, fully documented parameters and no output schema, the description provides enough context to call it correctly. It could note what happens when no other live devices exist or how results are reported, but those are minor gaps against the clear behavioral and quota summary.
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 baseline is 3. The description adds high-level operational context (N writes, target devices) but does not elaborate on individual parameters beyond what the schema already documents. That is sufficient given the schema's completeness.
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 clear verb phrase 'Level the room' and then specifies the exact action: read the active device volume and apply the same percent to every other live device. This clearly identifies the resource (live devices) and the operation, and it distinguishes the tool from volume-related siblings such as volume_step or set_volume.
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 conveys a clear user intent (leveling the room) and precisely explains what happens, making it evident when to use this tool. It does not explicitly name alternatives or exclude conditions, but the operation itself is the usage context. Since no when-not guidance is provided, it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rotate_playlist_planA
Plan (and optionally commit) rotating a playlist by N positions โ positive moves the first N items to the end, negative moves the last |N| to the front; dry_run defaults to TRUE so it returns the rotated PLAN read-only. Quota: ๐ข GET + 1 PUT when committing.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Pass false to commit. Default true | |
| positions | No | Rotation amount; positive = first N to end, negative = last |N| to front. Default 1 | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | Yes | Playlist to rotate (ID or spotify:playlist: URI) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries behavioral disclosure. It reveals that the default behavior is read-only planning, that passing false commits, and that quota is ๐ข GET + 1 PUT only when committing. It also clarifies rotation direction semantics for positive and negative N, which is rich, actionable 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 sentences communicate the core action, direction rule, safety default, and quota impact. There is no filler or redundant phrasing; 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?
Despite the lack of an output schema, the description supplies enough to invoke the tool safely: rotation rule, dry_run default, and quota effect. It could say more about the structure of the returned PLAN, but the combination of the schema and this summary is adequate for a 5-parameter 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 coverage is 100%, so the baseline is 3. The description restates positions and dry_run behavior but adds no parameter meaning that the input schema does not already provide. max_results and response_format semantics remain entirely schema-defined.
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 names a specific operation: 'Plan (and optionally commit) rotating a playlist by N positions' and specifies rotation direction for positive/negative N. It clearly signals a read-only planning mode via dry_run, but it does not explicitly distinguish itself from sibling playlist_rotate, so it misses the top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context: dry_run defaults to TRUE so the tool returns a read-only plan, and committing costs one PUT. This implies the plan-then-commit workflow effectively. It does not name a sibling alternative or an explicit when-not-to-use case, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sample_playlist_tracksA
Draw a uniform random sample of N tracks from a playlist โ deterministic when a seed is given (same seed + same playlist = same sample), read-only. Quota: ๐ข 1โ2 GETs.
| Name | Required | Description | Default |
|---|---|---|---|
| seed | No | Seed for reproducible sampling. Omit for a fresh random draw | |
| count | No | Sample size (1โ200). Default 10 | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | Yes | Playlist to sample (ID or spotify:playlist: URI) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does well: it explicitly states read-only, highlights deterministic behavior with seeds, and discloses quota impact ('1โ2 GETs'). It could add whether sampling is without replacement or what happens if count exceeds playlist length, but the core safety and determinism traits are clearly disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One tightly packed sentence conveys purpose, randomness, determinism, read-only behavior, and quota cost. Every element earns its place, and the most decision-relevant traits appear first.
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 read-only sampling tool with a well-described schema, most needed operational context is present. The description omits edge-case behavior such as sampling more tracks than exist, but the schema and 100% parameter coverage mitigate this. Overall, an agent can invoke it correctly with confidence.
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 parameters are already documented. The description still adds meaning beyond the schema by framing count and seed in terms of 'uniform random sample' and reproducibility, clarifying what the seed controls. It does not repeat parameter details, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('draw'), a precise resource ('a playlist'), and a distinctive behavior ('uniform random sample of N tracks'). It also clarifies determinism with a seed and read-only semantics, which separates it from playlist mutation and shuffle 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 clearly implies when to use it โ when a random, optionally reproducible sample of playlist tracks is needed โ and explains seed behavior. However, it does not name alternatives or state when not to use it, leaving the agent to infer routing from among many similar playlist tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_artist_new_releasesA
Find new releases for an artist and save unsaved albums to Your Library (diffs against /me/library/contains)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Albums to fetch, 1โ50. Default: 20 | |
| market | No | ISO 3166-1 alpha-2 country code, e.g. 'US' | |
| artist_id | Yes | Spotify artist ID | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing side effects, and it does state that this tool saves to Your Library and skips albums already saved via a diff. It could add more about reversibility or auth, but the core mutating, idempotent behavior is clear.
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 efficiently worded sentence that front-loads the action and adds the worthwhile diffing detail in parentheses. Every word contributes to understanding the tool's purpose and behavior.
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 composite find-and-save tool with no output schema or annotations, the description covers purpose, target resource, and side-effect behavior, while the schema covers parameters. The main gap is that it does not describe what the tool returns after saving, which an agent might need when crafting a user-facing response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all four parameters and the description adds no additional parameter-level semantics. The baseline of 3 applies because the description correctly reflects the overall task but does not enrich any individual parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete action and resource: find new releases for an artist and save unsaved albums to Your Library. It also conveys the unique diffing behavior against /me/library/contains, which clearly separates it from generic save tools or read-only discography 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 intended use is implied: call this when you need to find and save an artist's new releases while avoiding duplicates. However, it never explicitly says when to prefer this over alternatives like generic save_to_library or read-only release lookup tools, or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
saved_albums_by_decadeB
Group your saved albums by release decade (from each album release_date) and show a histogram. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| scan_cap | No | Max saved items to walk per paginated source (default: SPOTIFY_MCP_FETCH_ALL_CAP) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the full disclosure burden. It does add useful behavioral facts โ the tool is read-only and grouping derives from each album's release_date. However, it omits other consequential behaviors, such as paginated walking controlled by scan_cap, the default result cap, and how albums without a release_date are handled.
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 of roughly 20 words with the core purpose front-loaded and no filler. The parenthetical release_date clarification and the standalone 'Read-only' note each earn their place, though the terseness comes at the cost of the behavioral detail missing elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description must carry the return-value burden, but it only says 'show a histogram' โ leaving the bucket structure, response shape, and the effect of max_results/scan_cap on the output unspecified. An agent could make a reasonable default call, but would be guessing at output details and limit interactions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% โ scan_cap, max_results, and response_format all carry documented semantics in the input schema. The description adds no parameter-specific meaning beyond that baseline, so the 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 ('Group... and show'), a specific resource (saved albums), and an explicit grouping key (release decade from release_date), so an agent knows exactly what the tool computes. However, it does not explicitly differentiate itself from near-sibling aggregation tools like saved_albums_by_year, saved_albums_by_label, or saved_albums_by_type that appear in the same tool family.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied by the purpose statement โ an agent wanting a decade-level histogram of saved albums can infer this is the right tool. But there is no explicit when-to-use guidance, no exclusions, and no routing among the many similar siblings such as saved_albums_by_year, era_distribution_report, or decade_sampler_plan, leaving selection partially to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
saved_albums_by_labelB
Group your saved albums by record label (from each album payload) and rank labels by count. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| scan_cap | No | Max saved items to walk per paginated source (default: SPOTIFY_MCP_FETCH_ALL_CAP) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It does state 'Read-only,' which is a useful safety hint. However, it omits other behaviors such as the potentially expensive walk through all saved albums (up to scan_cap), performance implications, or how results are presented. It does not mention that it aggregates from album payloads, though that is implied. The read-only disclosure is good, but more behavioral context (e.g., possibly long execution, no mutation) would be expected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the core purpose and includes the key constraint of 'from each album payload' and the read-only hint. There is no filler or redundancy. It earns its place perfectly.
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 tool with no output schema and no annotations, the description is incomplete. It does not describe the structure of the returned data (beyond the response_format hint), nor does it warn about potential long runtimes due to scanning the entire saved library. It also lacks error-handling or edge-case information (e.g., albums without a label). Given the complexity of walking a large library, more context would be necessary for an agent to use it safely and efficiently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage with descriptive text for all three parameters (scan_cap, max_results, response_format), so the baseline is 3. The tool description adds no additional meaning beyond what the schema already states. It does not clarify how parameters interact with grouping or ranking, but the schema is sufficiently self-explanatory.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear, specific operation: grouping saved albums by record label and ranking labels by count. The verb 'group' and resource 'saved albums' are explicit, and the grouping key (record label) distinguishes it from sibling tools like saved_albums_by_year or saved_albums_by_type. No ambiguity remains about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to choose this tool over alternatives. It does not mention any use cases, exclusions, or comparisons to sibling tools such as saved_albums_by_decade, saved_albums_by_type, or library_genre_report. An agent must infer applicability solely from the name, which is insufficient for optimal tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
saved_albums_by_typeA
Group your saved albums by album_type (album / single / compilation / EP). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| scan_cap | No | Max saved items to walk per paginated source (default: SPOTIFY_MCP_FETCH_ALL_CAP) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full disclosure burden and does credibly declare 'Read-only', a meaningful safety signal for a tool whose name alone does not reveal mutability. However, it stays silent on the paginated-scan behavior implied by scan_cap โ the walk may stop before the full library is inspected, so results can be partial โ and on what the grouped output looks like. These material traits are left to the agent to discover.
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 the action front-loaded ('Group your saved albums...') and the safety note second ('Read-only'). The enumerated album types earn their place, and there is zero filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with fully documented optional parameters, this is close to adequate, but in the absence of an output schema the description does not convey whether the result is grouped counts or grouped album lists, and it never warns that scan_cap bounds the walk and thus the result may be incomplete. Those gaps leave an agent uncertain about how to interpret the return value.
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%: scan_cap, max_resultss, and response_format all carry their own descriptions in the schema. The description's album_type list refers to the output grouping key rather than any parameter, so it adds no param-level meaning beyond the schema. 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?
States a specific verb and resource: 'Group your saved albums by album_type'. The enumerated values (album / single / compilation / EP) fully pin down the grouping dimension, which cleanly distinguishes this from sibling grouping tools like saved_albums_by_decade and saved_albums_by_label without opening their schemas.
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 its use case โ an agent needing saved albums grouped by album_type โ but it never states when to prefer it over alternatives such as get_saved_albums, search_saved_albums, or saved_albums_by_decade, and it gives no when-not conditions. Usage is inferrable but not explicitly guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
saved_albums_by_yearB
Histogram of your saved albums by release year. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| scan_cap | No | Max saved items to walk per paginated source (default: SPOTIFY_MCP_FETCH_ALL_CAP) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full disclosure burden, and 'Read-only' is a meaningful safety declaration that this tool performs no mutations. Beyond that, however, it does not disclose how the histogram is shaped in return, how albums without a release year are handled, or that the tool walks the full saved-album library subject to scan_cap. These are material behaviors for an aggregation tool, so 3 is appropriate.
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 totaling nine words, with the purpose front-loaded and the read-only qualifier appended. Every word earns its place and nothing is redundant or padded; this is an appropriately sized description for a tool whose parameters are already fully documented in the 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?
For a simple aggregation tool with three fully documented optional parameters and no output schema, the description conveys the core purpose and the non-destructive nature. The clear gaps are the lack of differentiation from saved_albums_by_decade and the absence of edge-case behavior such as albums missing a release year or partial scans under scan_cap, making it minimally viable rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters (scan_cap, max_results, response_format) and the baseline is 3. The description adds only marginal context by identifying 'your saved albums' as the data source, which lightly ties scan_cap to the saved-library walk, but it adds no new meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific operation โ produce a histogram of saved albums grouped by release year โ naming both the resource (saved albums) and the grouping key. However, it does not explicitly distinguish itself from the closely related sibling saved_albums_by_decade, which buckets the same data at a coarser granularity; the name, not the description, carries that differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of the natural alternatives (saved_albums_by_decade, saved_albums_by_label, saved_albums_by_type) for other grouping needs. The 'Read-only' sentence conveys safety, not selection criteria, so an agent is left to infer when this tool is the right choice among roughly a dozen saved-album analysis siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_discover_weeklyA
Archive your Discover Weekly into a regular playlist (creates or overwrites the archive). Resolves Discover Weekly via /me/playlists exact match first, falling back to search (unverified); dry_run previews; idempotent if archive already matches. Result echoes source identity (owner, url, verified).
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| archive_name | No | Archive playlist name (created if missing, overwritten if present) | Discover Weekly Archive |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations to carry the burden, the description discloses the mutation behavior ('creates or overwrites'), the risk in fallback resolution ('unverified'), the safety valve ('dry_run previews'), and idempotence behavior. It also explains what the result contains, which is valuable for an operation that overwrites state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences pack the core purpose, resolution strategy, dry-run behavior, idempotence, and output expectation with no filler. The most important mutation semantics appear in the first sentence, and every sentence adds new information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating tool with no output schema, the description is unusually complete: it covers what the tool does, what could be overwritten, how it resolves the source playlist, the preview option, idempotence, and what the response reports. An agent gets enough to call it correctly without needing clarifications.
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 dry_run, archive_name, and response_format clearly. The description adds context like idempotence and result echo, but that is not primarily parameter-level meaning; it reinforces the schema rather than filling gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb and resource: 'Archive your Discover Weekly into a regular playlist (creates or overwrites the archive)'. It clearly differentiates this from a plain playlist save or a one-off track save, and the focus on Discover Weekly separates it from sibling tools like save_release_radar or backup_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 gives clear operational context: it resolves Discover Weekly through /me/playlists exact match first, falls back to search, supports dry_run for preview, and is idempotent when the archive already matches. It doesn't explicitly name alternative tools or state when not to use this tool, but the intended use case is strongly implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
saved_library_deltaA
Diff your current saved tracks/albums against a local backup snapshot (from backup_now): added since / removed since. Quota: ๐ก getAllPages walks + local file read.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Which shelves to diff. Default all | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| fresh_cap | No | Max fresh liked tracks to walk. Default fetch-all cap | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| snapshot_id | No | Snapshot id or backup file name (e.g. "backup-2026-08-01-1") | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It does disclose meaningful behavioral traits: the quota cost ('๐ก getAllPages walks + local file read') and the fact that it touches the local filesystem. However, it does not explain what happens when no snapshot exists, nor how the dry_run parameter fits a diff-only tool (dry_run implies possible mutations, which the description never addresses). It is read-only in spirit but that is implied, not stated.
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?
Purpose is front-loaded in the first sentence, and the quota is compressed into a single token-style line with an emoji. There is no filler. It loses one point because the second sentence's space could have carried usage guidance or behavioral clarification instead of only quota info, but overall it is 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?
For a 6-parameter tool with no annotations and no output schema, the description gives the core purpose, the snapshot provenance, and cost โ a solid start. But it omits edge-case behavior (missing/corrupt snapshot), differentiation from several near-identical siblings, and any description of what the added/removed output looks like beyond the two labels. These gaps matter more because annotations and output schema carry none of the burden.
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 baseline is 3 โ the schema already documents all 6 parameters individually. The description adds only marginal cross-parameter context by tying snapshot_id to the backup_now backup source. It does not explain fresh_cap vs max_results tradeoffs or how type interacts with the diff scope, but the schema already covers each parameter's meaning adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Diff'), a specific resource ('current saved tracks/albums against a local backup snapshot'), and the outcome ('added since / removed since'). It also names the snapshot source tool (backup_now), which anchors the concept and distinguishes it from playlist-snapshot or remote-state diff siblings despite the large sibling list.
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 'from backup_now' implies the prerequisite (a local backup must exist first), and the diff semantics imply when it applies. However, it never explicitly routes the agent away from closely related siblings such as library_snapshot_diff, diff_since_snapshot, snapshot_diff_summary, or find_new_since_snapshot, nor does it state when NOT to use it. Given the huge sibling set with overlapping snapshot-diff names, explicit exclusion would add real value.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
saved_runtime_by_eraB
Total listening runtime of your saved tracks grouped by the release decade of each trackโs album. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| scan_cap | No | Max saved items to walk per paginated source (default: SPOTIFY_MCP_FETCH_ALL_CAP) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden, and the explicit 'Read-only' tag is a genuine safety disclosure beyond what the name conveys โ the most important trait an agent needs before invoking. However, it discloses nothing else: no implication of scanning up to 10,000 paginated saved items, no cost or quota considerations, and no behavior at scan limits. It covers the safety profile but not the operational 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 consists of one front-loaded sentence stating the core aggregation plus a two-word safety qualifier 'Read-only.' With the title null, this is the only textual definition, and there is zero waste โ every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains the core computation and the schema fully documents all parameters, making the tool safely invokable in isolation. However, with no output schema, it doesn't indicate the shape of the returned per-decade breakdown, and it gives no selection context among the large field of era/reporting siblings. Adequate for invocation but incomplete for confident tool choice.
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 documents all three parameters with defaults (scancap, max_results, response_format), so the baseline of 3 applies. The tool description itself adds no parameter-level meaning beyond what the input schema provides, which is acceptable because coverage is complete.
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 precise aggregation โ total listening runtime of saved tracks grouped by release decade of each track's album โ which clearly identifies the tool's computation and resource. The phrasing is unambiguous and distinguishes it from siblings like saved_tracks_by_artist (grouped by artist) and saved_albums_by_decade (albums, not track runtime), though it doesn't explicitly name any alternatives. The verb is implied rather than explicit, but the noun phrase carries full clarity.
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 offers no guidance on when to use this tool relative to the many overlapping analytical siblings (saved_tracks_by_artist, era_distribution_report, era_preference_report, playlist_era_profile, album_duration_report). No prerequisites, exclusions, or alternative-selection conditions are stated, so the agent must infer usage context from the name and subject matter alone. This is 'no guidance' rather than misleading guidance, hence a 2.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
saved_shows_publisher_censusA
Count your saved shows by publisher and rank the biggest presses in your subscriptions โ read-only census over the whole shelf. Defaults to top 10 publishers, 'concise' prose.
| Name | Required | Description | Default |
|---|---|---|---|
| top_n | No | Publishers to list. Default 10 | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It explicitly states this is read-only, covers the entire saved-shows shelf, defaults to top 10 publishers, and defaults to 'concise' prose output. This is meaningful behavioral context beyond what the schema alone conveys, though it doesn't disclose rate-limit or failure 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?
Two sentences deliver the core purpose, scope, read-only nature, default behavior, and output style with zero filler. The key behavioral facts are 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 read-only aggregation tool with three well-documented optional parameters, the description covers essential context: scope, purpose, defaults, and output style. It doesn't detail response structure, but no output schema exists and this is a simple census/ranking tool, so the gap is minor.
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 parameters are already fully documented. The description reinforces that top_n defaults to 10 and response_format defaults to 'concise', but it doesn't add additional semantic nuance 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 states a specific verb ('Count'), a specific resource ('your saved shows'), and the aggregation dimension ('by publisher'). It also distinguishes itself as a read-only census over the whole shelf, which clearly separates it from show-related siblings like list_saved_shows or get_show_details.
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 clearly frames this as a census/ranking operation over saved shows, making it easy to infer when to use it versus a simple listing or detail lookup. It does not explicitly name alternative tools or exclusion conditions, but the phrase 'read-only census over the whole shelf' and the ranking intent provide strong usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
saved_track_age_reportB
Histogram of when you saved each liked track (added_at): age buckets plus a per-year add histogram. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| scan_cap | No | Max saved items to walk per paginated source (default: SPOTIFY_MCP_FETCH_ALL_CAP) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden, and the explicit 'Read-only' label is genuine behavioral disclosure. However, it doesn't disclose that scan_cap can truncate the paginated walk of the library (making the histogram possibly partial), nor any behavior around defaults or response_format differences.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, zero filler. The core output concept and scope are front-loaded, the read-only trait is appended, and every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description is the only place to define the result, yet it stops at 'age buckets plus a per-year add histogram' without defining bucket boundaries, explaining how scan_cap truncation affects the histogram, or how output varies by response_format. Invocable with defaults, but interpretation on large libraries is ambiguous.
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% โ every parameter already has a documented meaning and default. The description's 'per-year add histogram' phrase describes output, not inputs, so it adds no parameter-level meaning beyond the schema; 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 names a specific resource (liked/saved tracks) and field (added_at) and states the exact output shape: a histogram with age buckets plus a per-year breakdown. It is clear on its own terms, though it's phrased as a noun rather than a verb and doesn't explicitly distinguish itself from close siblings like saved_tracks_by_artist or added_on_this_day.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance is given, and no alternatives are named. With roughly 200 siblings including several adjacent temporal/library reports (saved_tracks_by_artist, library_growth_timeline, added_on_this_day, taste_shift_report), the agent must infer applicability purely from the name and the histogram wording โ no routing help is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
saved_tracks_by_artistA
List your SAVED tracks for one artist ("everything I've saved by X"): resolves the artist ID when given a name, then filters the liked shelf. Quota: ๐ก getAllPages + 1 search (name input).
| Name | Required | Description | Default |
|---|---|---|---|
| artist | Yes | Artist ID/URI, or a name (1 search to resolve) | |
| market | No | ISO 3166-1 alpha-2 market for the artist search, e.g. 'US' | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It proactively discloses the quota cost (getAllPages + 1 search) and explains the internal resolution-then-filter behavior. This is meaningful transparency beyond the schema, though it does not cover every potential edge case.
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 compact and front-loads the core behavior, then appends the quota detail. The parenthetical example 'everything I've saved by X' is useful shorthand, and no sentence 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?
Given five parameters, no output schema, and no annotations, the description covers the essential selection and invocation logic: what the tool does, how it resolves names, and what quota it consumes. The response_format parameter fills in the output-shape gap, so the definition is reasonably complete for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does reinforce that the artist parameter accepts either a name or an ID and that a name triggers a search, but it does not add much beyond the schema's existing parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('List your SAVED tracks for one artist') and clarifies the exact behavioral flow: resolve the artist ID from a name, then filter the liked shelf. This clearly distinguishes it from more generic sibling tools like get_saved_tracks or artist_top_vs_saved.
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 makes the use case obvious: the user wants 'everything I've saved by X' for a single artist. It does not explicitly name alternative tools or when not to use it, but the scope is specific enough that an agent can identify when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
saved_tracks_rouletteA
Deal N random cards from your saved tracks into a FRESH playlist โ an instant rediscovery sampler. Quota: ๐ก getAllPages + 1 create + chunked adds.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Save shelf to draw from. Default tracks | |
| name | No | New playlist name. Default "Saved Roulette YYYY-MM-DD" | |
| count | No | How many cards to deal (10โ100). Default 20 | |
| dedupe | No | Drop duplicate uris before dealing. Default false | |
| public | No | Public visibility for a newly created playlist. Default: private | |
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Default true โ pass false to commit. | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. The quota line (' getAllPages + 1 create + chunked adds') is a genuine operational disclosure โ it reveals a compound read-then-write flow with pagination, exactly one playist creation, and batched adds. However, it doesn't disclose that repeated calls accumulate new playists in the libary, doesn't state permissions, and the mutation nature is only implied via metaphor and '1 create'.
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 zero filler โ the core action is front-loaded and the quota disclosure occupies a deliberately separate second sentence. The emoji conveys quota severity compactly. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description doesn't explain the return shape, but the schema's dry_run ('Preview only ... return a PLAN without changing anything') and response_format ('concise/detaied/json') parameters carry much of that burden. What's missing from the tool description itself is the commit workflow (dry_run defaults true, pass false to commit) and side-effect acknowledgement โ an agent can piece it together from the schema, but not from the description alone.
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%, with every parameter (count, dedupe, dry_run, public, response_format, from, name) documented inline, so the baseline 3 applies. The description's 'N random cards' maps to `count` but adds no syntax or formatting detail beyond the schema. No compensation needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action โ dealing N random tracks from saved tracks into a brand-new playlist โ and the 'rediscovery sampler' framing makes the intent obvious. It distinguishes itself from the many library/playlist siblings by emphasizing random sampling into a FRESH playlist, though it doesn't name a sibling explicitly. The 'cards' metaphor is slightly loose given the `from` enum also allows albums/episodes, but the default tracks behavior is correctly front-loaded.
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 'instant rediscovery sampler' phrase implies the use case โ surfacing forgotten saved tracks โ but there are no explicit when-to-use/when-not-to-use instructions and no named alternatives. Given the large sibling set (surprise_me, playlist_seed_shuffle, library_to_playlist, sample_playlist_tracks), the agent must infer when this tool fits. The context is implied, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
saved_vs_playlist_coverageA
Report which of your saved tracks appear in none of your owned/followed playlists, with a coverage ratio. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: report the request cost of the scan without performing it (default false) | |
| scan_cap | No | Max saved items to walk per paginated source (default: SPOTIFY_MCP_FETCH_ALL_CAP) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of disclosing side effects. It explicitly states 'Read-only,' which signals no mutation, and it describes the output as a report with coverage ratio. This is meaningful behavioral context beyond the bare tool name and schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. The core purpose is front-loaded, and the read-only safety note is a useful separate clarification. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only report tool with four well-documented parameters and no output schema, the description states the input context and expected output clearly. It could add the exact coverage-ratio formula or clarify the default response style, but the combination of description and schema gives an agent enough 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 parameters are well-documented in the input schema. The description adds no parameter-specific meaning, but because the schema already handles that burden, a 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 uses a specific verb ('Report') and names the exact resource and scope: saved tracks compared against owned/followed playlists, plus a coverage ratio. It clearly conveys what the tool does, though it does not explicitly differentiate itself from similar sibling tools like library_coverage_report.
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 a clear functional contextโfinding saved tracks absent from playlistsโbut it does not state when to prefer this tool over alternatives or when not to use it. There are no explicit exclusions or alternative tool references, so usage guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_episodeA
Save episodes to your library (PUT /me/episodes) โ previews a PLAN with episode names by default; pass dry_run=false to commit.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Default true โ pass false to commit. | |
| episode_ids | Yes | Episode IDs/URIs to save (1โ50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It does well by explicitly warning that the tool only previews a PLAN by default and that the mutation only happens when dry_run=false. This reveals the non-obvious dry-run-then-commit behavior and gives a concrete sense of the side-effect boundary.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One concise sentence with no filler. The core purpose is front-loaded, followed immediately by the most important behavioral caveat. The endpoint and commit flag are packed efficiently 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?
For a simple three-parameter tool, the description plus fully-documented schema is nearly complete. It explains the preview/commit flow and what the PLAN contains. The main gap is the lack of detail about what the commit response looks like, since there is no output schema, but the response_format parameter partially mitigates 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 schema already covers 100% of parameters with rich descriptions, so the baseline is 3. The high-level description adds little parameter-specific meaning beyond referencing PLAN output with episode names; it does not explain ID formats, limits, or response_format beyond what the schema already states.
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 action and resource: 'Save episodes to your library (PUT /me/episodes)'. This clearly differentiates it from generic sibling tools like save_to_library and check/remove episode tools by naming the exact endpoint and target entity.
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 clearly conveys the primary usage context: saving episodes to the user's library. It also gives crucial operational guidance: defaults to a preview-only PLAN, and requires dry_run=false to actually commit. However, it does not explicitly mention alternatives or exclusions, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_itemsA
Legacy per-type variant (kept for grandfathered app credentials that lack unified /me/library access). Prefer save_to_library. Save one or more items to the user's library. Accepts track, album, show, episode, and audiobook URIs (e.g. spotify:track:abc). Max 50. Set dry_run=true to preview.
| Name | Required | Description | Default |
|---|---|---|---|
| uris | Yes | Spotify URIs to save (e.g. ["spotify:track:abc", "spotify:album:xyz"]) | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the behavioral burden. It discloses the legacy status, the credential limitation, the maximum of 50 items, and the dry_run preview behavior. It does not discuss idempotency or failure behavior, but for a straightforward save operation it provides meaningful non-obvious context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and every sentence carries either routing, context, or parameter guidance. It is slightly telegraphic ('Max 50', 'per-type variant') but not padded. Minor jargon like 'grandfathered app credentials' is acceptable because the next sentence explains its relevance.
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 3-parameter tool with no output schema, this is complete: it explains when to use it, why it exists, what it saves, which URI types are valid, the size limit, and how to preview. The response_format parameter is already documented in the schema, so its absence from the description is not a gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by enumerating accepted URI types (track, album, show, episode, audiobook), giving a concrete URI example, and clarifying that dry_run previews the change. These specifics go beyond the schema's generic 'Spotify URIs' phrasing.
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 ('Save') and resource ('user's library'), enumerates supported URI types, and explicitly labels itself as a legacy per-type variant. It also names the preferred sibling (save_to_library), so an agent can distinguish it immediately.
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 explicitly instructs 'Prefer save_to_library' and gives the exact condition for choosing this tool: grandfathered app credentials that lack unified /me/library access. This is clear when-to-use and when-not-to-use guidance, not just implied context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_playback_stateB
Snapshot current playback state to a named local slot (sidecar JSON).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Slot name (default: timestamp) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does reveal the persistence mechanism (local sidecar JSON) and that this is a mutating write, but it omits key traits: whether an existing slot with the same name is overwritten, what 'playback state' includes (context, queue, device, position?), whether active playback is required as a precondition, and what happens on failure.
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 nine-word sentence that front-loads the action and includes the two most decision-relevant facts: the destination ('named local slot') and the format ('sidecar JSON'). Every word earns its place with zero waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with only two optional, fully documented parameters and no output schema, the description is minimally adequate: it tells the agent what action to take and where the result goes. However, it lacks usage context among many similar siblings and does not clarify edge behavior (overwrite, empty state, inclusivity of the snapshot), leaving an agent to guess.
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 both parameters (name, response_format) are already fully documented in the schema. The description adds only marginal value by linking 'named' to the name parameter and 'sidecar JSON' to the JSON storage format, so the 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 ('Snapshot'), a clear resource ('current playback state'), and a destination ('named local slot (sidecar JSON)'). This is unambiguous about what the tool does, but it does not explicitly differentiate itself from closely related siblings like capture_playback_position, checkpoint_playback, get_playback_snapshot, or save_scene.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. With roughly a dozen overlapping snapshot/save/capture tools among siblings (checkpoint_playback, capture_playback_position, save_scene, taste_checkpoint, get_playback_snapshot), an agent has no basis to choose between them, and no exclusion conditions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_queue_as_playlistA
Capture the current playback queue as a durable playlist. Reads GET /me/player/queue, creates (or appends to) a playlist, adds URIs in batches of 100 preserving order. Handles mixed track/episode URIs.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Name for the new playlist (required when creating; omit when target_playlist_id is given) | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| description | No | Playlist description (when creating a new playlist) | |
| include_current | No | Include the currently-playing track/episode as the first item (default true) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
| include_episodes | No | Include episodes in the saved playlist (default true โ set false for tracks only) | |
| target_playlist_id | No | Existing playlist ID to append to (alternative to name โ when given, URIs are appended to this playlist) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden, and it does well: it discloses that this is a mutating operation (creates/appends), that it reads the live queue via a specific endpoint, that URIs are batched at 100 items, that order is preserved, and that mixed track/episode URIs are handled. It also implies dry-run support via the schema. It does not mention failure behavior (e.g., empty queue) or idempotency, but the disclosed pipeline is substantial.
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 information-dense sentences with no filler. The core action and key behavioral constraints (order preservation, batching, mixed URIs) are front-loaded in the first sentence, with the endpoint and append mode following. 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 7-parameter mutation tool with no output schema and no annotations, the description covers the process pipeline thoroughly: queue read, playlist create/append, 100-item batch add, mixed URI handling, order preservation. Gaps include the empty-queue failure case and a note on what the return value looks like, though the response_format parameter partially addresses expected output. Overall, an agent has enough context to call the tool correctly in most scenarios.
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 seven parameters clearly, including the mutually exclusive name/target_playlist_id semantics and the dry_run preview behavior. The description adds context about the overall operation (batching, order, mixed URI handling) but does not add meaning beyond the schema's per-parameter descriptions. 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 uses a specific verb ('Capture') and resource ('the current playback queue as a durable playlist'), and details the sequence of operations: reads GET /me/player/queue, creates or appends to a playlist, adds URIs in batches of 100 preserving order. This clearly distinguishes it from sibling tools like get_queue, create_playlist, add_to_playlist, or queue_replace_via_playlist.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what it does and how (reads the queue endpoint, creates/appends, batches, handles mixed URIs), which implies when to use it: when a user wants to save the current queue as a playlist. However, it does not explicitly state when not to use it or name alternatives (e.g., use get_queue if only previewing, or create_playlist if starting from scratch). Guidance 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.
save_release_radarA
Archive your Release Radar into a regular playlist (creates or overwrites the archive). Resolves Release Radar via /me/playlists exact match first, falling back to search (unverified); dry_run previews; idempotent if archive already matches. Result echoes source identity (owner, url, verified).
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| archive_name | No | Archive playlist name (created if missing, overwritten if present) | Release Radar Archive |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, this description carries the full burden and delivers richly. It openly discloses the create-or-overwrite behavior, resolution strategy ('/me/playlists exact match first, falling back to search'), the unverified status of fallback matches, dry_run preview semantics, idempotency, and the echo of source identity. This is exemplary behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is packed into three sentences, each carrying unique information: operation and overwrite semantics, resolution algorithm and dry_run/idempotency, and result echo. No wasted words, every phrase is informative, and the most important behavior (archive/overwrite) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers operation semantics, resolution path, safety via dry_run, idempotency, and output echo. With 3 optional params, full schema coverage, and no output schema, there is no missing critical information. The only minor gap is not explicitly describing the default archive_name behavior as 'Release Radar Archive', but this is available in the schema; overall this is complete enough.
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 beyond the schema by explaining the overall resolution algorithm and that archive_name is 'created if missing, overwritten if present,' which reinforces the create/overwrite semantics. dry_run is contextually enriched with 'preview' and 'validate inputs' in the description. Slight gap: response_format behavior beyond schema enum labels isn't detailed in the description, but the schema already has clear descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Archive') and resource ('your Release Radar'), and uniquely distinguishes this tool from siblings like save_discover_weekly or create_playlist by clarifying it creates or overwrites an archive playlist. It also explains how Release Radar is resolved, which fully disambiguates the operation.
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 context: it should be used when the user wants to save their Release Radar playlist to an archive, and it mentions dry_run for preview and idempotency when the archive already matches. It doesn't explicitly name sibling alternatives or state when not to use it, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_sceneB
Save a named playback scene (device + volume + shuffle/repeat + optional context) to the local sidecar (~/.spotify-mcp/scenes.json)
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Scene name (key in the sidecar) | |
| repeat | No | Repeat mode: 'off' | 'track' | 'context' | |
| volume | No | Master volume percent (0โ100) | |
| shuffle | No | Shuffle state | |
| context_uri | No | Context URI to start on apply (e.g. spotify:playlist:โฆ) | |
| device_hint | No | Device name substring (case-insensitive) or exact device id | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden. It usefully reveals that this is a local sidecar file write rather than a live Spotify API mutation, and specifies exactly which fields get persisted. However, it does not disclose overwrite semantics on name collision, whether the device is validated at save time, or whether any Spotify-side effect occurs.
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 25-word sentence that front-loads the verb and core concept, then packs the field composition and the concrete file path into parentheses without waste. Every phrase earns its place and the most decision-relevant details (what is saved, where it goes) appear first.
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 7-parameter write tool with no annotations and no output schema, the description covers the core invoke-time facts: required name is implied by 'named', the optional fields are enumerated, and the persistence target is given. What's missing is overwrite behavior, the relationship to apply_scene/list_scenes/delete_scene, and any sense of the return value. The schema covers paramter semantics well, but the description alone doesn't fully prepare an agent for edge cases like re-saving an existing name.
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 7 parameters thoroughly with types, ranges, enums, and examples. The description adds marginal value by grouping the fields ('device + volume + shuffle/repeat + optional context') and signposting context as optional, which matches the schema's required-only-name rule. This is the expected baseline-3 scenario where the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Save'), a concrete resource ('named playback scene'), enumerates its contents (device + volume + shuffle/repeat + optional context), and names the storage location (~/.spotify-mcp/scenes.json). This is clear and makes the scene concept tangible, though it does not explicitly distinguish itself from the closely named sibling save_playback_state.
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 such as save_playback_state, apply_scene, or list_scenes. There is no mention of prerequisites, when a scene is appropriate, or which sibling performs the inverse operation. The usage context is only implied by the word 'save'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_show_digestA
Create or update a digest playlist from the latest show_new_episodes radar (auto-save helper).
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| playlist_name | No | Digest playlist name (default: Show Digest) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose side effects. It says 'Create or update' but does not explain whether updating overwrites an existing digest playlist, preserves manual edits, or has any side effects beyond the playlist mutation. For a mutating tool with no annotation coverage, this is a significant transparency 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 one efficient, front-loaded sentence. It communicates the action, the source data, and the helper role without extraneous words or repetition of schema details.
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 tool with only optional parameters and full schema documentation, the description gives enough context about the source ('show_new_episodes radar') and intent ('auto-save helper'). The main gap is behavioral: it does not describe what the tool returns or the precise update semantics, but the schema covers the input surface.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters (dry_run, playlist_name, response_format) are already well documented. The description adds no additional parameter-level meaning, which is acceptable at baseline given the schema's completeness.
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 specifies a clear action ('Create or update') and resource ('digest playlist') sourced from the 'latest show_new_episodes radar'. It also identifies itself as an 'auto-save helper', which distinguishes it from broader playlist or discovery tools like 'show_new_episodes' or 'discovery_digest'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: after show_new_episodes produces a radar, this saves/updates the digest playlist from it. It does not give explicit exclusions or compare with alternatives, but the phrase 'auto-save helper' and the reference to the radar provide clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_smart_playlist_ruleA
Persist a smart-playlist rule to the local sidecar for later refresh (mirrors backup sidecar pattern).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Rule name / playlist key | |
| rule | Yes | Rule object (source, filters, limit, etc.) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It discloses the core effectโpersisting to a local sidecarโand even references the backup sidecar pattern, which helps set expectations. However, it does not mention overwrite behavior, idempotency, sidecar file scope, or failure/response details, leaving some operational uncertainty.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. The parenthetical 'mirrors backup sidecar pattern' is compact and adds useful context without bloating the 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?
The description covers the essential facts: what is saved, where it is saved, and why. However, with no annotations and no output schema, it leaves out details about response content, overwrite semantics, and what 'later refresh' concretely requires. The response_format parameter partially covers output expectations, but the overall context is adequate rather than fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for all parameters, including the nested rule object and response_format enum. The description adds no parameter-specific meaning beyond the general notion of a 'rule', 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 uses a specific verb ('Persist') and names the resource ('smart-playlist rule') and destination ('local sidecar'), with an explicit purpose ('for later refresh'). This clearly distinguishes it from siblings like create_smart_playlist, which would create an actual playlist, and refresh_smart_playlist, which would consume the saved rule.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates this tool is for persisting a rule locally so it can be refreshed later, giving clear contextual usage direction. It does not explicitly name alternatives or exclusion conditions, but the sidecar-persistence framing separates it effectively from playlist-creation and refresh tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_to_libraryB
Preferred. Accepts the widest URI mix (track, album, episode, show, audiobook, user, playlist) in one request. Save one or more items to the user's library via Spotify's unified library endpoint. Max 40. Set dry_run=true to preview.
| Name | Required | Description | Default |
|---|---|---|---|
| uris | Yes | Spotify URIs to save (e.g. ["spotify:track:abc", "spotify:user:xyz"]) | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries the burden. It discloses mutation (save to library), but not whether saves are idempotent, what happens with already-saved items (errors/ignored), authorization scope needed, or rate limits. dry_run description is in schema param, not description. Behavioral traits beyond annotations are absent.
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, no wasted words. Front-loaded with 'Preferred' and the URI mix. The dry_run note is useful and early. However, 'via Spotify's unified library endpoint' is mildly redundant with the rest of the sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate for a simple save call with 3 params and no output schema, but it omits error behavior for already-saved items and required auth scope. Given the operation is a mutation and among many save-related siblings, a bit more voice on difference vs save_items or save_episode would make it complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline 3. The description adds the contextual 'widest URI mix' and max 40 โ max 40 already in schema. dry_run semantics is described in schema, not in description. Little added value, but not missing.
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 states specific verb 'Save' + resource 'user's library' via 'unified library endpoint'. Notes max 40 and dry_run. However, it doesn't differentiate from siblings like save_items, remove_saved_items, save_episode, playlist_to_library, library_to_playlist which also involve saving/library actions. It claims 'Preferred' which implies distinction but doesn't say preferred over which alternative.
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 'Preferred' and 'Accepts the widest URI mix' in one request, implying it should be used ahead of narrower save tools. There is some guidance via 'dry_run=true to preview' for testing. But it doesn't explicitly state when not to use, nor name any sibling alternatives (e.g., check_saved_items before calling, or save_episode for shows/episodes). It does provide a clear use context: user wants to save mixed item types.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_sampler_searchA
Build a scene sampler: search artists by a scene/genre keyword, then fetch each act's newest release as a one-track-per-artist listening plan. Quota: ๐ก one /search call + one album peek per artist.
| Name | Required | Description | Default |
|---|---|---|---|
| scene | Yes | Scene/genre keyword (e.g. "shoegaze") | |
| market | No | ISO 3166-1 alpha-2 market code (e.g. 'US'); omit for 'from_token' behaviour | |
| max_artists | No | Artists to sample (search cap 10). Default: 8 | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and covers the key behavior: one /search call followed by one album peek per artist, plus the quota cost and the output shape. It does not discuss failure modes or side effects, but the core read-only pipeline and cost structure are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the first conveys purpose and workflow, the second conveys quota/cost. The most important task information is front-loaded before the cost note.
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 four-parameter tool with no output schema and no annotations, the description explains the workflow, result type, and quota while the schema documents parameter details. It is slightly incomplete only in not describing what each response_format returns or when to route to a sibling, but an agent can still invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description echoes 'scene/genre keyword' and indirectly relates max_artists to per-artist album peeks, but adds nothing further about market or response_format semantics.
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 composite operation: build a scene sampler by searching artists for a scene/genre keyword and converting each artist's newest release into a one-track-per-artist listening plan. This clearly distinguishes it from plain search tools, but it does not explicitly contrast with any sibling tool, so it misses the top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The opening imperative 'Build a scene sampler' gives a concrete trigger and the rest of the sentence defines the workflow, making the intended use clear. It does not provide when-not-to-use guidance or name alternatives such as search_artists or genre_dive_search, but the context is strong enough for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
schedule_wind_downA
Ramp playback volume down to a floor over N minutes (stepping every step_minutes), then pause. Runs in-process until done or cancelled via cancel_wind_down.
| Name | Required | Description | Default |
|---|---|---|---|
| minutes | Yes | Total ramp duration in minutes (1โ180) | |
| device_id | No | Target device id; defaults to the active device | |
| floor_volume | No | Volume floor the ramp never goes below (default 10) | |
| step_minutes | No | Minutes between volume steps (default 5) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses a key behavioral trait beyond the schema: the tool runs in-process until done or cancelled via cancel_wind_down. With no annotations provided, this transparency is valuable, though it could further explain side effects like pausing playback or the impact of a long-running call.
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 compact, with no filler, and front-loads the core behavior before mentioning cancellation. Every sentence contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a potentially long-running mutation tool, the description covers the main behavioral contract and names its cancellation counterpart. It does not describe what the tool returns upon completion or cancellation, and there is no output schema, so that small gap remains.
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 parameters adequately. The description reinforces the meaning of minutes and step_minutes but does not add substantial meaning beyond what the input schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: ramping playback volume down over N minutes and then pausing. It is clear about the operation, though it does not explicitly differentiate itself from the related volume_ramp sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like volume_ramp or sleep_timer is provided. The description implies a wind-down use case but does not state conditions or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scope_auditA
Decode the current token's granted OAuth scopes and classify every registered tool module: callable, scope-gated, or read-only. Optional probe fires one lightweight read for actionable evidence. Supports the #329 gating audit.
| Name | Required | Description | Default |
|---|---|---|---|
| probe | No | Fire one probe read (/me/top/artists) to verify top-list access | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It does disclose that the optional probe 'fires one lightweight read' for actionable evidence, and it clarifies the classification categories. However, it does not explicitly state whether the overall operation is side-effect-free or whether decoding scopes involves any external calls beyond the optional probe.
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 compact and front-loaded, stating the primary function first, then the optional probe behavior, then the supporting audit context. No filler or redundant restating of the tool name is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is no output schema and no annotations, the description does enough by naming the output categories (callable, scope-gated, read-only) and the optional probe effect. It could be slightly more explicit about the exact output shape or response variants, but it is sufficient for an agent to understand what the tool will return and when the probe is relevant.
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 input schema already documents both probe and response_format. The description only restates that an optional probe exists and does not add new parameter-level meaning. This matches the baseline for fully schema-documented parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pair: 'Decode the current token's granted OAuth scopes and classify every registered tool module: callable, scope-gated, or read-only.' This precisely states what the tool does and clearly separates it from the many sibling catalog, playback, and library 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 implies usage as a gating audit tool with 'Supports the #329 gating audit,' but it does not explicitly say when to use it versus alternatives like quota_probe, inspect_tool, or toolset_report. No exclusions or alternative routing are provided, so the agent must infer when this is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchA
Search Spotify's catalog for tracks, artists, albums, playlists, shows, episodes, or audiobooks. Pass types as an array (e.g. ["artist"]) to search a single kind โ no track/album fallback noise. Decision guide: search (general, โค10/type), search_deep (paginated fetch_all up to 50/type), search_fresh (tag:new last 2 weeks), search_by_isrc (exact ISRC), whats_new (personal radar from follows).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Results per type, 1โ10. Default: 5 | |
| query | Yes | Search query | |
| types | No | Content types to search, as an array. Default: ["track","artist","album"]. Pass e.g. ["artist"] for an artist-only search. "audiobook" is only available in the US, UK, CA, IE, NZ and AU markets. | |
| market | No | ISO 3166-1 alpha-2 country code, e.g. 'US' โ uppercased automatically | |
| offset | No | Index of the first result to return, 0โ1000. Use with limit to page through results | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
| include_external | No | Pass "audio" to include externally-hosted audio items marked as playable |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It discloses a non-obvious behavior: single-type searches produce no track/album fallback noise, and it clarifies per-type result limits. While it doesn't discuss result shape or rate limits, a read-only catalog search has minimal side-effect risk, and the stated behaviors are meaningful and beyond schema info.
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 with no wasted words: purpose, usage nuance, and sibling routing. The most decision-relevant information is front-loaded, and the decision guide is compactly formatted for scannability.
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 an 8-parameter tool with no output schema and no annotations, this is nearly complete. The schema covers all parameter details, and the description supplies the missing cross-tool routing and types-array nuance. Minor omissions like explicit return-value shape and market restrictions for audiobooks are either already in the schema or low-risk 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 description coverage is 100%, so the baseline is 3. The description adds value by giving a concrete example for `types`, explaining the behavioral consequence of using a singleton array, and tying the tool's result limits to the decision guide. This goes beyond the schema's plain property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise verb ('Search Spotify's catalog') and enumerates every supported item type, making the tool's scope unambiguous. It also distinguishes itself from sibling search tools in the decision guide, so an agent can tell them apart without inspecting schemas.
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 decision guide explicitly maps conditions to alternatives: general โค10/type for this tool, paginated fetch_all for search_deep, tag:new for search_fresh, exact ISRC for search_by_isrc, and personal radar for whats_new. It also instructs agents to pass a singleton types array to avoid fallback noise, which is a clear when/how-to-use directive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_advancedA
Structured advanced-search composer: builds a valid Spotify filter query from typed fields and runs it. Supported filter syntax: track:"name" artist:"name" album:"name" year:1984 year:1980-1989 genre:"pop" tag:new (last ~2 weeks) tag:hipster (lowest-popularity) isrc:CCXXXNNNNNNN upc:NNNNNNNNNNNNN. Pass whichever fields you have; they are quoted and composed for you. Quota: ๐ข one GET /search call.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Results per page, 1โ10 (Feb-2026 /search cap). Default: 5 | |
| types | No | Content types to search (up to 3). Default: ['track'] | |
| fields | Yes | At least one field is required | |
| market | No | ISO 3166-1 alpha-2 market code (e.g. 'US'); omit for 'from_token' behaviour | |
| max_results | No | ||
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose meaningful behavior: fields are 'quoted and composed for you,' the quota is explicitly stated ('๐ข one GET /search call'), and tag semantics are clarified. However, it doesn't disclose return format, error behavior for invalid field combinations, or pagination behavior with max_results โ though the response_format parameter partially covers output via the schema. Decent but not rich behavioral 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?
Four sentences with the core purpose front-loaded before the syntax reference. The filter syntax list is dense but earns its place since it enumerates the tool's core capability. The quota note is compact and useful. Slightly long, but every sentence contributes โ no filler or tautology.
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 fully covers the mechanics (what filters, composition behavior, cost), which is the hard part given the nested fields object. But with zero annotations and no output schema, the missing pieces matter: no sibling routing among ~15 search tools, no note on how this differs from search_deep/search_fresh, and no hint about return behavior beyond the schema's response_format. Adequate for calling the tool, incomplete for confidently choosing it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 83%, so the high-coverage baseline of 3 applies. The description genuinely adds value beyond the schema: it explains tag:new means 'last ~2 weeks' and tag:hipster means 'lowest-popularity' (the schema only lists the enum values), shows the year range syntax (year:1984 / year:1980-1989) with example formats for isrc/upc, and clarifies that fields are auto-quoted. That is real semantic enrichment, not schema repetition.
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 ('builds a valid Spotify filter query from typed fields and runs it'), which clearly distinguishes it from simple keyword search siblings. The 'structured advanced-search composer' framing signals this is the field-based search tool. However, it doesn't name which sibling it competes with, and with 15+ search variants (search_tracks, search_deep, search_fresh, search_by_isrc) the differentiation is implied rather than explicit.
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?
'Pass whichever fields you have' gives clear input guidance, and the syntax list tells the agent what filter fields are available. But there is no explicit when-to-use vs alternatives โ no statement like 'use search_tracks for simple keyword queries' or 'use search_by_isrc for ISRC-only lookups.' With a crowded sibling family, explicit routing would materially help an agent avoid picking the wrong search tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_albumsA
Search albums only (GET /search?type=album). Quota: ๐ข single.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Results per type, 1โ10. Default: 5 | |
| query | Yes | Search query | |
| market | No | ISO 3166-1 alpha-2 country code, e.g. 'US' | |
| offset | No | Index of the first result to return, 0โ1000 | |
| max_results | No | Max items to return | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
| include_external | No | Pass "audio" to include externally-hosted audio items |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral transparency burden. It adds useful context by naming the endpoint and quota cost ('๐ข single'), but it does not describe response behavior, result format, or confirm the read-only nature beyond what the operation implies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. The core scope is front-loaded, and the quota note is a useful one-line addition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate for a simple read-only search with a fully documented schema, but it omits explicit guidance on when to prefer this over the generic search tool and does not state expected return semantics. It is functional but leaves some context implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all seven parameters with types, constraints, and defaults. The description adds no parameter-level meaning, which is acceptable given the schema's completeness.
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 ('Search') and resource ('albums only'), and includes the exact API endpoint. This cleanly distinguishes it from sibling tools like search_tracks and search_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?
The 'albums only' phrasing implies this tool is for album-scoped searches, but it does not explicitly route users away from the generic 'search' tool or explain when a broader search would be preferable. Usage is inferable but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_artistsA
Search artists only (GET /search?type=artist). Quota: ๐ข single.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Results per type, 1โ10. Default: 5 | |
| query | Yes | Search query | |
| market | No | ISO 3166-1 alpha-2 country code, e.g. 'US' | |
| offset | No | Index of the first result to return, 0โ1000 | |
| max_results | No | Max items to return | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
| include_external | No | Pass "audio" to include externally-hosted audio items |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden. It adds a GET endpoint and quota signal ('๐ข single'), implying a cheap read-only call, but it does not explicitly state auth needs, side effects, or output 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?
Two short, front-loaded fragments: the core purpose and endpoint come first, followed by quota. Every part earns its place and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with full parameter documentation, the description supplies the differentiator ('artists only'), the exact endpoint, and quota. The lack of an output schema is partially mitigated by the response_format parameter's documented options, leaving only minor gaps around return shape.
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 input schema already documents all seven parameters. The description adds no parameter-specific meaning beyond the artist-scoped endpoint, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise action and scope: 'Search artists only' with the underlying GET /search?type=artist endpoint. This clearly distinguishes it from the general search tool and the other type-specific search siblings.
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?
'Artists only' gives a clear context and an exclusion: use this when the target is artist results, not other entity types. However, it does not explicitly name alternatives such as search or search_tracks for non-artist queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_audiobooksA
Search audiobooks only (GET /search?type=audiobook). Audiobooks are only available in the US, UK, CA, IE, NZ and AU markets. Quota: ๐ข single.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Results per type, 1โ10. Default: 5 | |
| query | Yes | Search query | |
| market | No | ISO 3166-1 alpha-2 country code, e.g. 'US' | |
| offset | No | Index of the first result to return, 0โ1000 | |
| max_results | No | Max items to return | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
| include_external | No | Pass "audio" to include externally-hosted audio items |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It adds value beyond the schema by revealing the endpoint, the type restriction, the market limitation, and the quota class ('๐ข single'). It does not detail response format or pagination behavior, but for a search operation this is a reasonable level of transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place: the core action, the market constraint, and the quota signal. The most important information is front-loaded, and there is no filler or repetition of schema details.
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 seven parameters are fully documented in the schema and no output schema exists, the description provides the essential operational context: type restriction, market availability, and quota. It is slightly lean in not describing what the response looks like or how the market restriction interacts with default behavior, but it is still sufficient for an agent to invoke 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?
The input schema already provides 100% description coverage for all seven parameters, so the baseline is 3. The description adds domain-specific meaning by enumerating the only markets where audiobooks are available, which directly informs the possible values of the 'market' parameter. This goes beyond the schema's generic ISO code pattern, so a 4 is warranted.
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 audiobooks only', and reinforces it with the exact endpoint and type parameter (GET /search?type=audiobook). This clearly distinguishes it from sibling search tools like search_tracks or search_albums. The market availability note adds useful scope without obscuring the core action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear contextual guidance by noting that audiobooks are only available in specific markets, which tells the agent where this tool is applicable. It does not explicitly name alternative tools or say 'use search for other content types', but the 'only' phrasing and market restriction imply the boundary. This is clear context with a meaningful exclusion, though not a full when-to-use/when-not-to-use statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_by_isrcA
Exact track resolution from an ISRC via the isrc: search filter โ the dedupe/relink anchor for catalog work. Quota: ๐ข one GET /search call. Decision guide: search_by_isrc for ISRC-only exact match; search/search_deep for general text, search_fresh for tag:new newness.
| Name | Required | Description | Default |
|---|---|---|---|
| isrc | Yes | ISRC code, e.g. USUM71703861 (spaces/dashes tolerated) | |
| market | No | ISO 3166-1 alpha-2 market code (e.g. 'US'); omit for 'from_token' behaviour | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the behavioral burden. It clearly discloses that the tool performs one GET /search call, states the quota, and emphasizes the exact-match behavior. It does not explicitly state 'read-only/no side effects,' but the search/GET framing makes that sufficiently clear.
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 compact and front-loaded with the core function, then packs quota and decision guidance into a few tight clauses. Every sentence adds operational value with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a single required parameter and fully documented schema, the description includes quota, exact-match semantics, and a routing guide against sibling search tools. Nothing essential is missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter already documented in the input schema. The description adds only the conceptual `isrc:` filter context and does not need to repeat parameter details. This meets the baseline for high schema 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 states a specific verb and resource: 'Exact track resolution from an ISRC' via the `isrc:` search filter. It further distinguishes itself by calling itself 'the dedupe/relink anchor for catalog work.' This clearly separates it from broad search 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 explicitly provides a decision guide: 'search_by_isrc for ISRC-only exact match; search/search_deep for general text, search_fresh for tag:new newness.' This names alternatives and the exact conditions that make this tool the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_deepA
Paged catalog search that walks past the API limit of 10 results per type. Fetches up to 5 pages of 10 results per requested type server-side, dedupes by id, and returns compact rows. Decision guide: use search_deep when you need >10 results/type (paginated fetch_all); otherwise use search (single page), search_fresh (new releases), search_by_isrc (ISRC-exact), whats_new (personal follows).
| Name | Required | Description | Default |
|---|---|---|---|
| pages | No | Pages of 10 results to walk per type, 1โ5. Default: 1 | |
| query | Yes | Search query | |
| types | No | Content types to search. Default: ["track"] | |
| market | No | ISO 3166-1 alpha-2 country code, e.g. 'US' | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses paging behavior ('Fetches up to 5 pages of 10 results per requested type server-side'), deduplication ('dedupes by id'), and output style ('returns compact rows'). It does not mention rate limits, errors, or read-only status explicitly, but the search semantics and disclosed mechanics are substantial.
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 with zero filler. The first sentence states the tool's core function, the second explains mechanics, and the third provides a decision guide. The key constraint and differentiator are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has six parameters, no output schema, and no annotations, the description plus the full schema coverage is largely sufficient for an agent to select and invoke it correctly. It explains the pagination cap, dedupe behavior, compact-row return style, and sibling routing. The only minor gap is the exact field structure of 'compact rows' and possible pagination edge cases, but these do not block 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%, so the schema already documents all six parameters. The description adds context about pages and types ('5 pages of 10 results per requested type'), but most of that repeats the schema's 'Pages of 10 results to walk per type.' It does not add meaningful parameter-level detail beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the verb ('Paged catalog search'), the resource ('catalog'), and the key differentiator ('walks past the API limit of 10 results per type'). It explicitly distinguishes itself from search, search_fresh, search_by_isrc, and whats_new, so an agent can identify this tool without inspecting schemas.
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 'Decision guide' sentence provides explicit when-to-use guidance ('use search_deep when you need >10 results/type') and names the alternatives for other cases. This leaves no ambiguity about when to prefer search_deep over its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_episodesA
Search podcast episodes only (GET /search?type=episode). Quota: ๐ข single.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Results per type, 1โ10. Default: 5 | |
| query | Yes | Search query | |
| market | No | ISO 3166-1 alpha-2 country code, e.g. 'US' | |
| offset | No | Index of the first result to return, 0โ1000 | |
| max_results | No | Max items to return | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
| include_external | No | Pass "audio" to include externally-hosted audio items |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does add useful behavioral context: it reveals the HTTP method (GET) and quota cost ('Quota: ๐ข single'). However, it does not disclose return format, pagination behavior, or other operational details beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact clauses deliver the core scope and endpoint with zero filler. The essential 'episodes only' qualifier is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema covers parameters well, and the description provides endpoint and quota context. Yet with no output schema and no guidance on when to choose this over sibling search tools, the definition remains adequate but incomplete.
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 seven parameters. The description adds no parameter-specific meaning, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Search podcast episodes only', and reinforces it with the exact endpoint 'GET /search?type=episode'. This clearly distinguishes it from track/artist/album/show search siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus the generic 'search' tool or other search_* siblings. The word 'only' implies scope but no explicit alternative or exclusion is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_freshA
Query-scoped newness: runs your query with Spotify's tag:new filter (last ~2 weeks of releases) โ per-artist/genre "what just dropped" without the dead browse/new-releases endpoint. Quota: ๐ข one GET /search call. Decision guide: search_fresh for newness-filtered hits; search (general), search_deep (paginated), search_by_isrc (ISRC-exact), whats_new (personal follows).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Results per page, 1โ10 (Feb-2026 /search cap). Default: 5 | |
| query | Yes | Base query, e.g. an artist name ('Noise Pop 2026') or genre | |
| types | No | Types to search. Default: ['album','track'] (tag:new is only meaningful for releases) | |
| market | No | ISO 3166-1 alpha-2 market code (e.g. 'US'); omit for 'from_token' behaviour | |
| max_results | No | ||
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses that the tool makes one GET /search call, applies Spotify's `tag:new` filter, covers roughly the last two weeks of releases, and avoids the dead browse/new-releases endpoint. This is strong behavioral context, though it stops short of describing edge cases like empty results or auth requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it opens with the core concept, then adds quota, then a decision guide. Every part earns its place, with no filler or redundant restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with six parameters and no output schema, the description covers purpose, usage boundaries, quota, and alternatives well. The main gaps are the undocumented max_results parameter and the absence of any note about return shape, though response_format partially addresses this in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (83%), so the baseline is 3. The description adds context about how the query maps to `tag:new` and that release types are the meaningful target, but it does not explain remaining parameters like max_results, which also lacks a schema description. The schema and description together are adequate but not enhanced enough for a higher score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool runs a query with Spotify's `tag:new` filter for recent releases, and names the exact use case: per-artist/genre 'what just dropped'. It distinguishes itself from siblings by explicitly contrasting with search, search_deep, search_by_isrc, and whats_new.
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 'Decision guide' is explicit: use search_fresh for newness-filtered hits, and names search, search_deep, search_by_isrc, and whats_new as alternatives with their respective purposes. This gives an agent clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_historyB
Recall past searches (local sidecar, 90-day expiry). Optionally filter by query substring.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max entries to return (default 20) | |
| query | No | Substring to filter past queries | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the transparency burden. It does disclose meaningful behavioral context: results are stored in a 'local sidecar' and expire after 90 days. However, it does not mention important operational traits such as what happens when no local sidecar exists, whether this is a pure read operation, or how empty results are handled.
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, focused sentence with no filler. Core action, storage location, retention policy, and optional filtering are all conveyed efficiently 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 retrieval tool with no required parameters, the description is mostly adequate, and the schema fills in parameter details. However, with no output schema or annotations, the description does not clarify return structure beyond the response_format enum, nor does it address edge cases like missing history data or how 'local sidecar' relates to other history tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented with defaults and meanings. The description adds marginal value by reinforcing that 'query' filters by substring, but it does not go beyond what the schema already provides. 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 a specific verb ('Recall') and a clear resource ('past searches'), with valuable constraints ('local sidecar, 90-day expiry'). It is unambiguous about what the tool does, though it does not explicitly differentiate itself from sibling tools like history_search or search_history_stats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus alternatives such as history_search, search_history_stats, or search_rerun. 'Recall past searches' implies a use case, but there are no exclusions, comparisons, or conditions to help an agent choose correctly among the many search-related siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_history_statsA
Analytics over the local search-history sidecar: top queries, type breakdown, recency. Quota: ๐ข local only (no API).
| Name | Required | Description | Default |
|---|---|---|---|
| top_n | No | Top N queries to show (default 10) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden, and it does add real behavioral context: 'local only (no API)' discloses the quota/backing-store trait and heavily implies a read-only, side-effect-free analytics operation. It does not explicitly state read-only behavior or describe what 'type breakdown' or 'recency' produce, but for a simple local stats tool the disclosed locality/cost signal is meaningful.
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 with zero filler: the first front-loads what the tool does and its output facets, the second conveys the quota trait in a compact emoji-prefixed tag. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (two optional params, no required fields, no output schema) and the presence of a response_format parameter that governs output shape, the description is nearly complete: it covers the domain (search-history analytics), the data source (local sidecar), and the cost profile (no API). The only minor gap is not previewing the shape of the 'concise'/'detailed' output, but the schema's response_format descriptions already carry that weight.
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 both parameters (top_n, response_format) are already documented with defaults, ranges, enum values, and format meaningsโmeeting the baseline of 3. The description's mention of 'top queries' loosely maps to top_n but adds no new parameter-level detail beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific operation ('Analytics over the local search-history sidecar') and enumerates concrete outputs (top queries, type breakdown, recency), so an agent knows what this tool does. It implies differentiation from siblings like search_history and history_search through the word 'Analytics', but does not explicitly name a sibling or draw the contrast, so it stops 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 quota note ('๐ข local only (no API)') provides useful cost/locality context that helps an agent decide when calling is cheap, and the analytics framing implies use for summary/statistics tasks over search history. However, there is no explicit when-to-use vs. alternatives guidanceโe.g., it never says 'for raw history lookups use search_history'โso routing depends on inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_market_diffA
Same query run in two markets with the result sets diffed โ availability/regional insight in one card. Quota: ๐ก 2 GET /search calls (one per market).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Results per page, 1โ10 (Feb-2026 /search cap). Default: 5 | |
| query | Yes | Search query | |
| types | No | Types to search (up to 2). Default: ['track'] | |
| market_a | Yes | First market code, e.g. 'US' | |
| market_b | Yes | Second market code, e.g. 'GB' | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses that the tool makes 2 GET /search calls (quota: ๐ก), one per market, and that results are diffed into a card. This adds meaningful operational context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences deliver the core purpose first and the quota cost second, with no filler. Every word earns its place and the most decision-relevant information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description adequately explains the output shape ('one card') and the operational cost. It does not elaborate on how the diff is rendered or edge cases, but for a read-oriented comparison tool with fully documented parameters, this is complete enough 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%, so all six parameters are already documented in the input schema. The description adds no new parameter-level meaning beyond clarifying that two market codes are compared, which is the baseline expectation.
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 exactly what the tool does: runs the same query in two markets and diffs the result sets to surface availability/regional differences. The 'one card' output and the explicit two-market scope clearly distinguish it from plain search_market_diff siblings like search and market_availability.
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 clearly implies the use case: comparing search availability or regional insight between two markets. It does not explicitly name alternatives or exclusion conditions, but the context is strong enough for an agent to select this tool over the many search/market siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_playlistsA
Search playlists only (GET /search?type=playlist). Quota: ๐ข single.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Results per type, 1โ10. Default: 5 | |
| query | Yes | Search query | |
| market | No | ISO 3166-1 alpha-2 country code, e.g. 'US' | |
| offset | No | Index of the first result to return, 0โ1000 | |
| max_results | No | Max items to return | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
| include_external | No | Pass "audio" to include externally-hosted audio items |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the burden. It usefully discloses quota ('๐ข single') and the GET endpoint, which implies a read-only, low-cost operation, but it does not explicitly state safety, pagination behavior, or what happens on errors.
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 compact sentences with the core scope front-loaded. The quota note is minimal and informative; there is no filler 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 input schema is rich, but with no output schema and no annotations, the description leaves the agent to infer return shape and how this tool relates to generic search or other search variants. It is adequate for making a simple call but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every parameter already has a description. The tool description adds no parameter-level meaning, so the 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?
States a specific verb ('Search') and resource ('playlists'), and scopes it with 'only' plus the endpoint (GET /search?type=playlist). This clearly differentiates it from the generic 'search' and the many sibling search_tracks/search_artists/search_albums 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?
'Search playlists only' implies when the tool should be used, but it does not name alternatives such as 'search' for multi-type results or explicitly say when not to use this tool. The usage context is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_rerunA
Re-execute a stored search by history id via GET /search.
| Name | Required | Description | Default |
|---|---|---|---|
| history_id | Yes | History entry id | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for behavioral disclosure. It states the operation ('re-execute') and HTTP method (GET), implying a read-only action, but does not explicitly note that it is non-destructive, does not mention any side effects (e.g., history updates, rate limits), nor does it describe the output format beyond the existence of response_format in the schema. The description is minimal and lacks behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that communicates the core functionality and endpoint, with no fluff or redundant phrasing. It is appropriately concise and front-loaded with the key action.
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 tool this simple, the description covers the essential action, but it doesn't explain how to obtain a history id (e.g., from search_history or a prior search), nor does it describe the response structure beyond the schema. Given the lack of annotations and output schema, an agent might need additional pointers, but the tool is straightforward enough that the description is adequate for basic 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?
The input schema provides 100% coverage for both parameters: history_id is described as 'History entry id' and response_format explains its three modes. The description adds no additional explanation for these parameters, so it doesn't exceed the schema's baseline. A score of 3 is appropriate because the schema already documents the parameters well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific verb 're-execute' and resource 'stored search', and identifies the endpoint 'GET /search'. This distinguishes it from sibling search tools like search_tracks and search_advanced, which perform new searches. The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description communicates the tool's purpose (re-execute a stored search by history id), which implicitly tells an agent when to use it: when a past search's history id is available. However, it does not explicitly mention any alternatives or conditions for when NOT to use it, such as preferring a fresh search tool. The guidance is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_saved_albumsA
Search saved albums (client-side filter over bounded walk). Quota: ๐ข GET /me/albums paged.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Substring match against album name/artist | |
| artist | No | Substring match against album artist | |
| scan_cap | No | Max albums to scan (default fetchAllCap) | |
| added_after | No | ISO date โ only albums added after this | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the disclosure burden and does useful work: it reveals that filtering is client-side over a bounded paginated walk and reports the quota endpoint (GET /me/albums paged). It does not explicitly state read-only behavior or response shape, but the endpoint and search semantics strongly imply a non-mutating 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?
Two short sentences, each earning its place: one defines the operation and its implementation, the other gives the quota/cost signal. No redundant filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a rich 100%-covered schema and no output schema, the description adds the missing operational context (client-side filter, bounded walk, quota) that an agent needs to anticipate cost and behavior. It stops slightly short of full completeness by not recommending a sibling for alternatives, but that belongs more to usage guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All six parameters already have complete descriptions in the schema, so the baseline applies. The phrase 'client-side filter over bounded walk' adds some context for scan_cap and max_results, but the description does not need to explain individual parameters because the schema already covers them at 100%.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pair ('Search saved albums') and adds a discriminating implementation trait ('client-side filter over bounded walk') that separates it from catalog-wide search_albums and from get_saved_albums. The scope (saved albums, not tracks/shows) is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes clear the tool operates over saved albums rather than the general catalog, but it never explicitly states when to prefer this over search_albums or search_saved_tracks, nor does it mention any exclusions. Usage context is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_saved_audiobooksA
Search saved audiobooks (bounded walk + client-side filter). Quota: ๐ข GET /me/audiobooks paged.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Substring against audiobook name/author | |
| scan_cap | No | ||
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden, and it delivers meaningfully: it discloses the underlying endpoint ('GET /me/audiobooks paged'), the client-side filtering mechanism (results are filtered locally from paged data, not server-side searched), and a quota indicator. It does not disclose what happens at the scan_cap boundary (truncation) or auth requirements, but the disclosed mechanism and quota context are genuinely useful.
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 with zero filler: purpose and mechanism first, then quota cost. Every word earns its place, and the structure is appropriately sized for a simple search tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a 4-param, 0-required tool with no output schema: the schema documents most parameters and the description conveys scope, mechanism, and quota. The gaps are the lack of sibling routing (search_audiobooks vs this tool) and no statement of what happens when scan_cap is reached โ does the user get partial results, a warning, or an error?
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 75% โ query, max_results, and response_format are documented in the schema, but scan_cap is not, and the description adds no parameter-level semantics. The phrase 'bounded walk' hints at scan_cap's role as the bound but never says so explicitly, which is a gap since scan_cap is the most behaviorally significant parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Search saved audiobooks') and adds the mechanism ('bounded walk + client-side filter'), which is clear and distinctive. The 'saved' scope differentiates it from sibling search_audiobooks, though it stops short of explicitly naming which sibling to use instead.
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 context is only implied: 'saved audiobooks' indicates a user-library scope, and 'bounded walk + client-side filter' implies a local scan with cost bounds. There is no explicit when-to-use vs when-not-to-use guidance, and with siblings like search_audiobooks (all audiobooks) and get_saved_audiobooks (plain paged listing) the agent must infer the routing on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_saved_episodesA
Search saved episodes (bounded walk + client-side filter). Quota: ๐ข GET /me/episodes paged.
| Name | Required | Description | Default |
|---|---|---|---|
| show | No | Substring against show name | |
| query | No | Substring against episode/show name | |
| scan_cap | No | ||
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does useful work: it discloses that this is a read-only GET operation, paged, and bounded rather than an unbounded native search. The phrase 'bounded walk + client-side filter' is informative, though somewhat jargon-heavy and it does not specify the exact boundary behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: one core sentence plus a compact quota/endpoint note. No filler or repetition of schema information, and the main purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Reasonably complete for a read-only search tool: the schema covers parameters and response_format hints at output style, while the description adds the key behavioral details of bounded walking, paging, and quota. It lacks an explicit output-shape description and alternative-tool guidance, but those gaps are not critical given the schema richness.
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 80%, and the schema already documents show, query, max_results, and response_format. The description adds mild context for scan_cap via 'bounded walk' but does not meaningfully elaborate parameter semantics beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Search saved episodes,' and the parenthetical 'bounded walk + client-side filter' distinguishes it from catalog-wide searches like search_episodes and unfiltered listings like get_saved_episodes. The tool's purpose is immediately identifiable.
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 through the phrase 'saved episodes,' making it clear this targets the user's library rather than the global catalog. However, it does not explicitly state when to prefer it over alternatives like search_episodes or get_saved_episodes, leaving the routing mostly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_saved_showsA
Search saved podcast shows (bounded walk + client-side filter). Quota: ๐ข GET /me/shows paged.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Substring match against show name/publisher | |
| scan_cap | No | ||
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden. It does disclose the implementation mechanism ('bounded walk + client-side filter') and the underlying API call and cost profile ('Quota: ๐ข GET /me/shows paged'), which is genuinely useful. However, it omits the completeness caveat โ matches beyond the scan cap will not be found โ and says nothing about result ordering or pagination behavior, both of which matter for a search tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste. The core purpose is front-loaded, the mechanism is tucked into a parenthetical, and the quota/cost signal is a compact second sentence. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only search tool with no annotations and no output schema, the description covers the essentials: purpose, mechanism, and quota. But scan_cap's semantics are left entirely to inference, there is no routing between the many sibling search/list tools, and the completeness limitation of a bounded walk is never stated. These gaps are meaningful for an agent deciding whether this tool can satisfy a query.
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 75%, so the schema already documents query, max_results, and response_format. The description adds modest value by explaining that query is applied client-side over a bounded walk, connecting query and scan_cap semantically. However, scan_cap itself is undocumented in the schema AND the description โ its role as the walk bound is only implied by the phrase 'bounded walk'.
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 saved podcast shows' โ which clearly distinguishes this from global catalog search (search_shows) and unfiltered listing (list_saved_shows). The parenthetical '(bounded walk + client-side filter)' further clarifies the search mechanism. However, it does not explicitly name any sibling tool for contrast, so the differentiation relies partly on the tool name itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the usage context: substring-matching against the user's saved show library rather than Spotify's global catalog. The 'bounded walk' phrase hints that this is a local filter over paged library data. But there is no explicit when-to-use vs when-not-to-use guidance, and no alternative tools are named despite many overlapping siblings (search_shows, list_saved_shows, find_show_by_publisher).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_saved_tracksA
Search your Liked Songs (saved tracks) by text query and optional facets โ client-side filter over a bounded walk of /me/tracks. For catalog-wide search use search. Reports walk truncation.
| Name | Required | Description | Default |
|---|---|---|---|
| album | No | Filter to tracks where album name contains this substring | |
| limit | No | Max results to return | |
| query | No | Substring to match against track name, artist name, or album name (case-insensitive). Omit to list by facets/sort only. | |
| artist | No | Filter to tracks where any artist name contains this substring | |
| sort_by | No | Sort order | added_desc |
| max_items | No | How many saved tracks to walk (default SPOTIFY_MCP_FETCH_ALL_CAP) | |
| added_after | No | ISO date โ only tracks added after this date | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| added_before | No | ISO date โ only tracks added before this date | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full disclosure burden and does substantial work: it states the operation is a client-side filter rather than a server-side search, discloses the bounded walk of /me/tracks, and explicitly promises to 'Reports walk truncation' โ protecting the agent from silently incomplete results. It omits performance or rate-limit caveats for large libraries, but the core behavioral risks are covered.
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: purpose+mechanism, sibling routing, and the truncation caveat. The key scoping information is front-loaded before implementation detail, with zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter tool with full schema descriptions and no output schema, the description addresses the two things an agent most needs beyond the schema: what makes this tool different from catalog search, and the correctness caveat about bounded walking. The response_format choices are documented in the schema. A brief note on the cost of larger max_items walks would round it out, but nothing essential 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 covers 100% of parameters with individual descriptions, so the baseline of 3 applies. The description adds a conceptual grouping โ 'by text query and optional facets' โ that maps query to the query parameter and album/artist/added_* to facets, which slightly aids selection but adds no syntax detail beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with a specific verb and resource ('Search your Liked Songs (saved tracks)') and names the exact mechanism ('client-side filter over a bounded walk of /me/tracks'). The explicit contrast with catalog-wide `search` distinguishes it from the many search_* siblings without needing to open 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?
Explicitly directs agents away from this tool for catalog-wide queries: 'For catalog-wide search use search.' The 'client-side filter over a bounded walk' phrasing implies a cost model (local walk, not server-side index), which helps an agent decide when a server-side search sibling is cheaper. It does not contrast with get_saved_tracks or the other search_saved_* siblings, though their resource-type differences are inferable from names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_showsA
Search podcast shows only (GET /search?type=show). Quota: ๐ข single.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Results per type, 1โ10. Default: 5 | |
| query | Yes | Search query | |
| market | No | ISO 3166-1 alpha-2 country code, e.g. 'US' | |
| offset | No | Index of the first result to return, 0โ1000 | |
| max_results | No | Max items to return | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
| include_external | No | Pass "audio" to include externally-hosted audio items |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It adds useful context: the HTTP method (GET), fixed type parameter, and a quota signal. However, it does not explain result formatting, pagination behavior, or what happens with empty results, so transparency is moderate but not rich.
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 with no filler. The primary purpose is stated first, followed by the endpoint and quota hint. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the schema fully documents all 7 parameters, the description is largely complete for a search tool. It adds the fixed type, endpoint, and quota, but with no output schema it could still say a bit more about what the search results contain or how pagination is triggered.
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%, providing baseline parameter documentation. The description adds extra meaning by revealing that the API is called with a fixed 'type=show', explaining why there is no 'type' parameter among the 7 inputs. This is valuable 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?
The description clearly states the action ('Search'), the specific resource ('podcast shows'), and the exact endpoint ('GET /search?type=show'). The word 'only' explicitly differentiates it from sibling search tools that target other content types.
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?
'Search podcast shows only' provides an explicit scope limitation and makes the intended use case clear. It does not name alternatives like search_episodes or search_tracks, but the endpoint and 'only' exclude them effectively.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_tracksA
Search tracks only (GET /search?type=track). Quota: ๐ข single.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Results per type, 1โ10. Default: 5 | |
| query | Yes | Search query | |
| market | No | ISO 3166-1 alpha-2 country code, e.g. 'US' | |
| offset | No | Index of the first result to return, 0โ1000 | |
| max_results | No | Max items to return | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
| include_external | No | Pass "audio" to include externally-hosted audio items |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It discloses quota cost via 'Quota: ๐ข single' and clarifies the search scope, but it does not explicitly state that the operation is read-only and side-effect-free, nor describe the shape of the response. This is acceptable 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?
Two short, front-loaded sentences contain the essential scope, endpoint, and a quota signal without any redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is sufficient for tool selection and basic invocation, especially because the schema documents all parameters and response_format hints at return style. But without an output schema, it leaves return-value expectations implicit and does not mention pagination behavior or how results are formatted in the default 'concise' mode.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so every parameter already has a meaningful description and constraints. The tool description adds no parameter-level detail, which is acceptable given the schema baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Search tracks only') and anchors it to an endpoint ('GET /search?type=track'). The word 'only' clearly distinguishes this from the generic search tool and other type-specific searches in the sibling list.
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 'tracks only' gives clear scope and implicitly tells an agent not to use this for artists, albums, playlists, or shows. However, it does not explicitly name alternatives or state when-not-to-use conditions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_within_playlistA
Text search inside a single playlist (client-side filter over full item walk). Quota: ๐ข GET /playlists/{id}/items paged.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Substring to match against track/episode name, artist, album | |
| market | No | Market for track relinking, e.g. 'US' | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | Yes | Playlist ID | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses that the tool walks the full playlist item list and filters client-side, and it flags the request type and quota via 'GET /playlists/{id}/items paged', signaling a read-only but potentially expensive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two compact sentences with the core purpose and mechanism front-loaded. The quota note adds practical operational value without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only search tool with full parameter documentation, the description is nearly complete: it covers scope, mechanism, quota, and output style via the response_format enum. It lacks explicit sibling-tool routing, but that is not essential for invoking it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all parameters. The description adds useful operational context about client-side filtering and paging but does not explain individual parameters beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('search'), a bounded resource ('inside a single playlist'), and the implementation approach ('client-side filter over full item walk'). This clearly differentiates it from global search tools and playlist-level browsing 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 intended use case is explicit: text search scoped to exactly one playlist. It does not name alternative tools or explicitly say when not to use it, so it lacks the strongest routing guidance but still provides clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seekB
Seek to a position in the current track
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| device_id | No | Target device ID | |
| position_ms | Yes | Position in milliseconds | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for behavioral disclosure. It says it 'seeks to a position' but does not state whether active playback is required, what happens when position_ms exceeds track length, whether playback state is preserved, or what failure modes exist. For a mutating control tool, this is a meaningful 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?
A single, front-loaded sentence that communicates the essential operation without filler. Every word earns its place, and the phrasing is immediately scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with fully documented parameters, the description is minimally viable. But with no output schema and no annotations, it leaves operational context unstated, such as whether playback must be active, whether a device must be specified, and how errors like an out-of-bounds position are handled.
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 parameters are already fully documented. The description adds little beyond the schema โ it only clarifies that the target context is the 'current track.' The baseline of 3 applies because the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Seek') and resource ('current track'), so the core purpose is clear. However, with a sibling named seek_relative, it doesn't explicitly distinguish absolute positioning from relative, even though position_ms implies absolute. Not fully self-contained on differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool instead of seek_relative, play, play_at, or other playback navigation tools. It implies use for moving within the current track but provides no exclusions, prerequisites, or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seek_relativeA
Relative seek โ forward/back by delta_ms from current progress (GET /me/player then PUT /me/player/seek, clamped to [0, duration]). ๐ข (1 read + 1 write).
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| delta_ms | Yes | Delta in ms (+ forward, - backward), e.g. 30000 or -15000 | |
| device_id | No | Target device id | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses that the operation performs one read and one write, names the exact endpoints, and notes that the result is clamped to [0, duration]. This makes the mutating side effect and boundary behavior explicit, though it does not address error cases like no active playback.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tightly-packed line that front-loads the core meaning, then efficiently adds endpoint details and the clamp behavior. The ๐ข marker and '(1 read + 1 write)' note are compact and informative rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter tool with no output schema, the description is largely complete: it gives the operation, the API sequence, the side effect, and the clamping behavior. The main gap is that it does not mention the prerequisite of active playback or how device_id affects the call, but the schema covers the parameter's meaning.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents all four parameters at 100% coverage, so the baseline is 3. The description adds extra value by clarifying that delta_ms is interpreted relative to current progress and that the effective range is clamped to the current track duration, which is not stated in 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 names the operation explicitly ('Relative seek') and distinguishes it from any absolute seek sibling by saying the movement is 'forward/back by delta_ms from current progress'. It also states the underlying API calls (GET /me/player then PUT /me/player/seek), making the tool's function unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Relative seek' and 'from current progress' clearly communicate when to use this tool: when an offset from the current playback position is needed. It does not explicitly name sibling alternatives such as 'seek' for absolute positioning, so it stops short of full exclusion guidance, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_length_reportA
Split recently-played history into listening sessions by inactivity gap (default 30 minutes) and report size/duration stats plus a distribution (default 150 items). Quota: GET /me/player/recently-played cursor walk.
| Name | Required | Description | Default |
|---|---|---|---|
| max_items | No | Max recently-played items to walk (default 150; the API pages 50 per call). | |
| gap_minutes | No | Inactivity gap (minutes) that ends a session (default 30). | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and adds meaningful behavior: it discloses that the tool performs a cursor walk against GET /me/player/recently-played and consumes quota. This tells the agent the operation is quota-bearing and paginated. It stops short of explicitly stating side effects or return behavior, but the report framing plus quota disclosure is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: the first states function and key defaults, the second states the quota/pagination implication of calling it. No filler, no redundancy, and the important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the data source, defaults, and general report contents, and the schema fully covers the parameters. However, there is no output schema, and the description doesn't specify what the 'distribution' is or the shape of the returned stats. It also doesn't distinguish this from session_stats/listening_session_report, leaving moderate gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the parameter descriptions already define max_items, gap_minutes, and response_format. The tool description only restates defaults like 30 minutes and 150 items, adding no parameter semantics beyond the schema, so the 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 names a specific operation (splitting recently-played history into sessions by inactivity gap) and a concrete outcome (size/duration stats plus a distribution). It is clear on its own, though it does not explicitly differentiate itself from similar sibling reports such as session_stats or listening_session_report.
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 first sentence implies the use case: analyzing recently-played history to identify listening sessions. But the description never states when to choose this tool over session_stats/listening_session_report, what type of question it answers, or when not to use it. The quota note is operational, not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_statsA
Session-size distribution from recently-played via detectSessions (30-min gap): session count, median/mean tracks per session, longest session, avg session length. Quota: ๐ข 1-2 reads, local compute.
| Name | Required | Description | Default |
|---|---|---|---|
| pages | No | Recently-played pages to walk (default 2, 50 items each) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full behavioral burden. It discloses the session definition (detectSessions, 30-min gap), the read-like nature ('1-2 reads'), and that computation is local. It does not discuss auth or edge cases, but it provides meaningful behavioral context beyond a generic summary.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences front-load the core purpose and metrics, then add quota/cost context. Every phrase earns its place, with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema or annotations, the description is reasonably complete: it states the data source, session definition, returned metrics, and quota. Parameter details are fully covered by the schema, and the remaining ambiguity about the exact output shape is minor for a stats-report tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters with defaults, constraints, and descriptions. The tool description does not add parameter-specific meaning beyond the schema, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource and computation: session-size distribution derived from recently-played via detectSessions with a 30-minute gap, and it enumerates the exact metrics returned. It does not explicitly name a sibling tool, but the specific source and metric list distinguish it from generic listening reports.
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 intended usage is implied: use this tool when you want session-size statistics based on recently-played history. However, it provides no explicit when-to-use or when-not-to-use guidance, and the sibling list contains many similar report/analytics tools, so an agent must infer the boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_device_volume_presetB
Store a per-device volume preset (0โ100) in the local sidecar.
| Name | Required | Description | Default |
|---|---|---|---|
| device_id | Yes | Device id | |
| volume_percent | Yes | Volume 0โ100 | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden. It does disclose a meaningful trait: the preset is stored locally in a sidecar rather than applied directly. However, it does not state whether an existing preset is overwritten, whether any validation or Spotify-side effect occurs, or what happens after storage, which are material for a mutation-like tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the core action, the resource kind, and the key constraint. It contains no filler, repetition, or irrelevant detail, earning its place entirely.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, the schema fully documents all three parameters, and the description supplies the essential storage semantics. The only notable gaps are lack of explicit alternative routing and no statement about overwrite or return behavior, but the schema's response_format description partially covers output expectations.
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 device_id, volume_percent, and response_format. The description adds useful context by framing the action as per-device and confirming the 0โ100 range, but it does not add 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 names a specific action ('Store'), a specific resource ('per-device volume preset'), and a clear location ('local sidecar'), which clearly distinguishes it from siblings like set_volume or apply_device_presets. It does not explicitly name those alternatives, but the verb and scope are unambiguous enough to prevent basic confusion.
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 about when to use this tool versus alternatives such as apply_device_presets, list_device_presets, set_volume, or volume_ramp. The description implies its purpose but does not state when it should be selected or when it should not, leaving the agent to infer the boundary from the tool name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_repeatA
Set repeat mode: off, context (repeat playlist/album), or track (repeat single track)
| Name | Required | Description | Default |
|---|---|---|---|
| state | Yes | Repeat mode | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| device_id | No | Target device ID | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden of behavioral disclosure. It only says what the tool sets, not whether an active playback device is required, whether device_id defaults to the active device, what side effects occur, or whether the operation is reversible. This is a thin disclosure for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that states the action and the meaningful option semantics without filler. Every word contributes to understanding the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple playback setter, the schema plus description cover the required state parameter and the core enum semantics. Missing pieces are behavioral expectations, device handling, and any distinction from repeat_queue_toggle, which leaves the description adequate but incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents all parameters, but the description adds meaning beyond the schema by explaining the state enum: 'context' means repeat playlist/album and 'track' means repeat single track. This is genuinely useful semantic enrichment.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Set repeat mode' with the exact allowed values (off, context, track). The parentheticals clarify the meaning of context and track, making the tool's purpose unambiguous and distinct from sibling playback controls.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when the tool should be used: whenever the caller wants to change the playback repeat mode. However, it provides no explicit when-not-to-use guidance or comparison to the closely named sibling repeat_queue_toggle, so an agent must infer the difference rather than being told.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_shuffleC
Enable or disable shuffle mode
| Name | Required | Description | Default |
|---|---|---|---|
| state | Yes | true = shuffle on, false = shuffle off | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| device_id | No | Target device ID | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, but it only states the intended toggle without explaining side effects, device targeting, or whether it affects the current playback context. It does not contradict any annotations, but it leaves important behavioral context implicit.
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, tightly written sentence with no filler or redundant phrasing. The core action is front-loaded and immediately scannable, making it appropriately concise for a simple mutation tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the schema fully covering parameters, the description alone is too thin for a no-annotation mutation tool. It does not convey scope, device dependency, playback requirements, or what the result of enabling shuffle means in context, which an agent would need to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents all four parameters, including the boolean state semantics and the dry_run preview behavior. The description adds no parameter-level detail, but this is acceptable given the schema already carries that weight.
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 ('Enable or disable') and a clear resource ('shuffle mode'), so an agent immediately knows the tool's function. It does not explicitly differentiate from sibling tools like shuffle_state_report, which is a query variant, so it misses the top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, nor does it mention conditions like needing an active playback device or context. Sibling tools such as shuffle_state_report or set_repeat imply related functionality, but no explicit when/when-not guidance is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_volumeC
Set playback volume (0โ100)
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| device_id | No | Target device ID | |
| volume_percent | Yes | Volume level 0โ100 | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It only states the action and range, without mentioning whether a specific device is targeted, whether it affects all active devices, what side effects occur, or how dry_run relates to the operation's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that is easy to scan. It is concise, though it slightly duplicates the range already present in the schema rather than adding distinguishing or behavioral context.
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 schema is rich enough to cover parameters, so the minimal description is mostly usable. However, given the large family of sibling volume and playback tools, the description lacks contextual guidance about which device or playback session it applies to and how it differs from related volume controls.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% description coverage, including the 0โ100 constraint on volume_percent, the target device_id, and the response_format enum. The description repeats the range but adds no new meaning beyond what the schema already supplies.
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: 'Set playback volume (0โ100)'. This is clear about what the tool does, though it doesn't explicitly contrast with sibling volume-related tools like mute, unmute, volume_step, or set_device_volume_preset.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as volume_step, volume_ramp, mute/unmute, or set_device_volume_preset. An agent is left to infer the appropriate context from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shortest_saved_tracksA
Rank your saved tracks by duration, shortest first. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| scan_cap | No | Max saved items to walk per paginated source (default: SPOTIFY_MCP_FETCH_ALL_CAP) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden; it does disclose the read-only safety trait and the ascending sort order. However, it does not disclose that the ranking only covers tracks walked up to scan_cap (a potentially bounded subset of the library), nor how max_results truncates output, which are material behavioral traits for interpreting results.
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 front-loaded sentences with zero filler: the core action ('Rank your saved tracks by duration, shortest first') comes first, and the safety note ('Read-only') follows. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple ranking tool with no annotations and no output schema, the purpose and safety profile are covered, but the scan_cap completeness caveat is omittedโan agent may not realize results can be a partial ranking over a bounded walk. No sibling routing is included either, though parameters themselves are well documented in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The schema already documents scan_cap, max_results, and response_format with defaults and enums, so the description's silence on parameters is acceptable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Rank'), a precise resource ('your saved tracks'), and an exact sort criterion ('by duration, shortest first'). This clearly distinguishes it from its direct counterpart longest_saved_tracks without needing to open any 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?
No guidance is given about when to use this tool versus alternatives such as get_saved_tracks, search_saved_tracks, or the natural sibling longest_saved_tracks. With roughly 500 siblings, the absence of any when/when-not routing leaves the agent to infer usage solely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
show_activity_feedA
Chronological feed of the most recent episodes across ALL your saved shows, merged and sorted newest-first โ one scroll instead of N show visits. Defaults to 3 episodes per show, newest first.
| Name | Required | Description | Default |
|---|---|---|---|
| max_shows | No | Max per-show episode lookups (request budget). Default 50 | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| eps_per_show | No | Recent episodes pulled per show. Default 3 | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It discloses that results are merged from ALL saved shows, sorted newest-first, and that the default is 3 episodes per show. It does not mention read-only status or request cost, but the read-only nature is strongly implied and no mutation claims are made.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. It front-loads the core behavior, adds a clear value proposition, and states the key default without unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description plus the fully documented input schema provides enough context for an agent to call the tool correctly. There is no output schema, but the description clearly communicates that the result is a chronological feed of episodes, which is sufficient for this aggregated read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already well documented. The description adds a small amount of context by restating the eps_per_show default and emphasizing the aggregate nature, but it does not materially expand on the schema parameter meanings.
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 resource (recent episodes across all saved shows) and the operation (a merged, chronological feed sorted newest-first). It distinguishes itself from single-show episode tools by emphasizing the cross-library aggregation and 'one scroll instead of N show visits'.
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 conveys the intended use case: seeing the latest episodes across all saved shows in a single view. It provides clear context for when to choose this tool, though it does not explicitly name alternative tools or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
show_backlog_planA
Plan (dry-run only, never mutates) your podcast backlog: unlistened episodes across saved shows ordered SHORTEST-FIRST, so the queue clears with quick wins. Defaults to 20 recent episodes per show, 20 shows.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| max_shows | No | Max per-show episode lookups (request budget). Default 20 | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| eps_per_show | No | Recent episodes pulled per show. Default 20 | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden, and it does a good job: it discloses that it never mutates (dry-run), that ordering is shortest-first, and what the defaults are. It does not mention specifics about max_results behavior (env var default) in the prose, but that is covered in the schema. Behavior regarding episode selection across saved shows is implied but clear enough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loads the most important safety and scope information (dry-run only, never mutates), and packs defaults, ordering logic, and use case without waste. Every phrase 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 read-only planning tool with no output schema, the description covers the key context: scope (unlistened episodes across saved shows), ordering (shortest-first), defaults, and mutation safety. As with the parameter dimension, it could add expected output format or response shape since there is no output schema, but the response_format parameter partially covers that, so the gap is modest.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all parameters. The description adds some interpretive value (shortest-first strategy, queue-clearing intent) but does not add parameter-level semantics beyond the schema, which is acceptable at the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('plan'), resource ('podcast backlog'), and clear behavior: dry-run only, ordered shortest-first, defaults of 20 episodes per show and 20 shows. It is distinguishable from siblings like show_backlog_report, but does not explicitly name that sibling or differentiate itself, which is a minor gap.
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 conveys when to use it: when planning podcast backlog clearing with quick wins (shortest-first). It explicitly notes the dry-run nature ('dry-run only, never mutates'), which subtly signals it is for previewing rather than executing changes. However, it does not explicitly state when not to use it or name alternatives like show_backlog_report or mark_episode_played_plan, so it stops short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
show_backlog_reportA
Per saved podcast show: unplayed episodes (resume_point), hours of backlog and newest-episode age โ decide what to unsubscribe from. Quota: 1 + N reads (budgeted).
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | backlog_hours | |
| max_shows | No | Budget for per-show episode paging. Default 25. | |
| min_hours | No | Only surface shows with at least this many backlog hours. Default 0 (all). | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the burden, and it does useful work: 'Quota: 1 + N reads (budgeted)' discloses a concrete cost profile, and 'reads' signals a non-mutating operation. It does not go into authentication, failure modes, or pagination details, but this is strong extra context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tight sentences: the first front-loads scope, output fields, and purpose, while the second adds the quota warning. There is no filler, repetition of schema fields, or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, but the description names the key returned fields and the cost behavior; combined with the well-documented input schema, an agent has enough to call the tool with defaults. It would be slightly more complete if it explicitly distinguished itself from show_backlog_plan and stale_saved_shows_plan, but it is not missing critical invocation information.
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 80%, and the parameters already carry meaningful descriptions for max_shows, min_hours, max_results, and response_format, so the baseline is 3. The description adds only loose context about what 'backlog_hours' and 'newest' refer to and does not materially clarify parameter formats beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the concrete data a caller gets per saved show โ unplayed episodes with resume_point, backlog hours, and newest-episode age โ and gives an explicit decision purpose: deciding what to unsubscribe from. It is clear enough to identify the tool's role, though it leans on the tool name for the 'report' verb and does not explicitly contrast it with similar show-planning siblings.
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 communicates a clear use case ('decide what to unsubscribe from') and signals that the call is quota-budgeted. However, it does not name alternatives such as show_backlog_plan, stale_saved_shows_plan, or shows_without_new_episodes, nor does it state when not to use this tool, so the agent must infer selection from the field list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
show_episode_searchA
Full-text search within one show's episodes (GET /shows/{id}/episodes paged + client-side q). Quota: ๐ก 1โN pages (fetch_all walks).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Results per page for the underlying paging, 1โ50. Default: 20 | |
| query | Yes | Case-insensitive substring over name/description | |
| market | No | ISO 3166-1 alpha-2 country code, e.g. 'US' | |
| offset | No | Offset for underlying paging. Default: 0 | |
| show_id | Yes | Spotify show ID | |
| fetch_all | No | When true, walk all pages (up to cap) to find matches | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses that this is a paged GET with client-side filtering and that fetch_all can walk multiple pages, along with a quota indicator. This is genuine behavioral context beyond the name and schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler; the core scope and endpoint are front-loaded, and the quota warning is placed second. Every phrase 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?
The description explains the implementation and quota, and the schema fully documents parameters, but there is no output schema and no annotation safety/behavior context. It could be more complete about return behavior or explicit routing to global search tools, so it is adequate but not fully self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by revealing that the query is applied client-side after paging and that fetch_all drives page-walking, which materially affects how limit, offset, query, and quota interact.
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 a specific verb ('search') and a specific resource ('one show's episodes'), and states the exact endpoint. The scoping phrase 'within one show's episodes' cleanly separates it from global search_episodes and from listing tools like get_show_episodes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The scope is clear: use this when you need full-text search inside a single show rather than across all shows or just listing episodes. It does not explicitly name the sibling alternatives or give when-not-to-use conditions, but the one-show constraint provides unambiguous context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
show_episode_timelineA
[local-compute] One show's episodes chronologically with hiatus-gap detection โ any gap between consecutive release dates larger than the threshold is called out ("no episode in N days"). Quota: ๐ก one paginated /shows/{id}/episodes walk (typically several API calls).
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | ISO 3166-1 alpha-2 market code (e.g. 'US'); omit for 'from_token' behaviour | |
| show_id | Yes | Spotify show ID | |
| max_results | No | ||
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
| gap_threshold_days | No | Minimum gap to flag as a hiatus, in days. Default: 14 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden and does substantial work: it discloses the underlying API interaction (one paginated /shows/{id}/episodes walk), the approximate cost (๐ก, several API calls), the ordering (chronological), and the detection algorithm with its output phrasing. It does not explicitly state read-only status or edge-case behavior (e.g., shows with a single episode), so some gaps remain.
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 no filler: purpose, distinguishing behavior, and quota each earn their place, and the purpose is front-loaded before operational detail. '[local-compute]' and '๐ก' are compact signals that convey cost and computation location without elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, algorithm, ordering, and cost, which is strong for a read-style tool, but with no output schema or annotations it omits output shape details and the interaction between max_results truncation and gap detection. Edge cases (empty show, single-episode show) are also unaddressed. It is adequate for straightforward calls but leaves an agent guessing on boundary conditions.
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 high (80%), so the baseline is 3, but the description adds real meaning to gap_threshold_days by defining the gap against consecutive release dates and illustrating the callout format. It does not compensate for the undocumented max_results parameter, but the paginated-walk mention hints at how result limits interact with the API. Overall it enriches the most analytical parameter beyond the schema's one-line definition.
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 concrete operation (chronological episode listing for one show) and leads with the differentiating feature, hiatus-gap detection with explicit threshold semantics ('no episode in N days'). This clearly separates it from siblings like list_show_episodes, get_show_episodes, and shows_release_calendar, which lack the gap-analysis angle. The scope is unambiguous: exactly one show.
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 hiatus-detection feature implies the intended use case (analyzing a single show's release cadence), and the '[local-compute]' tag plus quota signal operational constraints. However, the description never names sibling alternatives or states when not to use this tool versus list_show_episodes or show_backlog_report. Selection is left to inference rather than explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
show_new_episodesA
Find new episodes across your saved podcast shows: reports episodes released within the lookback window (default 7 days), marking which are already saved in your episode library. Fetches /me/shows then each show's latest episodes. WARNING: M saved shows โ M+1 requests (1 show page + M episode lookups). Use max_shows to budget and dry_run to preview the cost before running.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Lookback window in days. Default 7. | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| max_shows | No | Per-call budget for show episode lookups. Default: 25 (or SPOTIFY_MCP_FRESHNESS_BUDGET / SPOTIFY_MCP_SHOWRADAR_BUDGET). Scan caps at min(budget, SPOTIFY_MCP_FETCH_ALL_CAP) and reports truncation. WARNING: each lookup is an API request. | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| per_show_limit | No | How many latest episodes to check per show for recency. Default 3. | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden and exceeds it: it reveals the exact request profile ('M saved shows โ M+1 requests'), flags the cost scaling as a WARNING, and names both mitigations (max_shows to budget, dry_run to preview cost). It also discloses the fetch path (/me/shows then per-show episode lookups). This is precisely the behavioral context an agent needs to call a fan-out scan responsibly.
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, front-loaded with the core purpose before mechanism and warnings. Every sentence earns its place; the WARNING block is long but contains high-value cost information. Mild redundancy with schema text (days default, max_shows, dry_run) prevents a 5, but nothing 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?
For a 6-param, no-output-schema reporting tool, the description covers purpose, window, mechanism, cost, and budget controls โ the hard parts are all present. The main gap is that with no output schema, it never describes the result grouping/shape beyond 'reports episodes,' and it omits explicit read-only reassurance, though response_format and max_results partially cover output expectations.
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 marginal value beyond the schema by wiring max_shows and dry_run into the cost model (budget + preview cost before running) and by re-stating the 7-day default for days, which reinforces rather than repeats the param docs. It doesn't add format/syntax detail beyond schema, but the cost-framing boost is genuine.
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?
Opens with a specific verb-resource pair ('Find new episodes across your saved podcast shows') and adds precise scope: lookback window (default 7 days) plus marking which episodes are already saved. The saved-shows + time-window + saved-status framing clearly distinguishes it from single-show siblings like get_show_latest_episode and list_show_episodes, and from generic search tools, even without naming 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?
The description makes the invocation scenario explicit โ scan saved shows for recent episodes within a window โ giving clear context for when an agent should reach for it. It does not name alternatives or when-not-to-use conditions, and closely related siblings (get_newly_released_episodes, shows_release_calendar) are never referenced, but the scope statement is specific enough that an agent can infer the right selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
show_recommendation_briefA
Cross-reference newly released episodes against your saved-episode and recently-played history: which new drops are NOT yet saved or played โ a listen-next brief. Defaults to the last 14 days.
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | Inclusive release-date floor YYYY-MM-DD. Default 14 days ago | |
| max_shows | No | Max per-show episode lookups (request budget). Default 50 | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full behavioral burden. It does add useful context: the 14-day default window and the exclusion semantics (not saved, not played). However, it never explicitly states the operation is read-only/non-mutating, and says nothing about boundary behavior, cost, or error conditions.
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 zero waste. The core comparison logic is front-loaded, the output concept ('listen-next brief') is given in-line, and the default window is stated as a short closing sentence. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description should say more about what the returned 'brief' actually contains beyond the formats hinted at by response_format. It is silent on result ordering, empty-result behavior, and the shape of the human-readable brief, though the parameters and core logic are otherwise well covered.
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 (since, max_shows, max_results, response_format) with types, defaults, and formats. The description adds only marginal reinforcement via 'Defaults to the last 14 days', which the schema already states for the since parameter. 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 a specific verb ('cross-reference') and resource (newly released episodes against saved/played history), and clearly defines the output: new drops NOT yet saved or played. The filtering logic is specific enough that an agent can infer how this differs from near-siblings like get_newly_released_episodes or show_new_episodes, though it never explicitly names a sibling.
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 context is implied โ an agent would reach for this when it wants a listen-next brief of unengaged new episodes โ but the description gives no explicit when-to-use/when-not-to-use guidance and names no alternatives among the many adjacent tools (show_new_episodes, get_newly_released_episodes, check_episode_saved).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
show_runtime_statsA
[local-compute] Runtime profile for one show: total and average episode runtime plus release cadence (days between episodes), built from a paged /shows/{id}/episodes walk. Quota: ๐ก one paginated walk (typically several API calls).
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | ISO 3166-1 alpha-2 market code (e.g. 'US'); omit for 'from_token' behaviour | |
| show_id | Yes | Spotify show ID | |
| max_episodes | No | Cap on episodes analyzed. Default: SPOTIFY_MCP_FETCH_ALL_CAP | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With zero annotations the description carries the full burden and uses it well: it discloses local compute ([ocal-compute]), the paged /shows/{id}/episodes walk mechanism, and the quota cost (typically several API calls). It stops short of edge-case behavior such as empty shows or unordered walks, but the mechanism and cost profile are genuinely useful behavioral facts beyond a bare stat-returning statement.
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 zero filler. The deliverable and scope are front-loaded, and the quota sentence earns its place by giving the agent a cost signal for planning. The compact [ocal-compute] prefix is high-value context in few characters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description does the heavy lifting reasonably: it specifies the computed fields, the traversal mechanism, and cost. Gaps remain around sibling differentiation (episode_runtime_report could be confused) and edge cases such as shows with no episodes or how the walk orders episodes โ relevant at this sibling scale.
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 baseline 3 applies โ all four parameters (market, show_id, max_episodes, response_format) are already documented with defaults and enum meanings. The description adds only mild context by tying the paged walk to why max_episodes exists; no parameter-level detail is missing.
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 deliverable โ a runtime profile for one show with total/average episode runtime plus release cadence โ anchored in a concrete mechanism (paged /shows/{id}/episodes walk). The 'one show' scope and computed-stats nature clearly distinguish it from raw-listing siblings like list_show_episodes and get_show_details.
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 'for one show' scoping and quota note ( one paginated walk) give an agent useful cost and scope signals, but no alternatives are named and there is no when-not-to-use guidance. With near-neighbor siblings like episode_runtime_report, show_episode_timeline, and shows_release_calendar, explicit routing to those would materially improve selection accuracy.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shows_release_calendarA
Estimate each saved show's next expected release from its recent publish cadence (median interval between the latest publishes) โ a forward calendar for your subscriptions. Defaults to 30 show lookups.
| Name | Required | Description | Default |
|---|---|---|---|
| max_shows | No | Max per-show episode lookups (request budget). Default 30 | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does disclose the estimation method (median interval), scope (saved shows), and default budget (30 show lookups). However, it does not mention edge cases (e.g., shows with insufficient publish history to compute a median), potential side effects (none stated, though the computation implies read-only), or how the 'lookup budget' is consumed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single well-structured sentence that front-loads the core purpose and method, then appends only the essential default note. Every clause earns its place with zero redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a compute-style tool with 3 optional, fully self-describing params and no output schema, the description covers the what, how, scope, and default behavior. The response_format enum in the schema handles return-style details. The main gap is edge-case behavior for shows lacking enough publish history, but this is minor for a heuristic estimation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter (max_shows, max_results, response_format) already has a clear description in the schema. The description only echoes the max_shows default ('Defaults to 30 show lookups') and adds no new parameter-level meaning. Baseline 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Estimate'), a precise resource ('saved show's next expected release'), and the methodology ('median interval between the latest publishes'). The forward-calendar framing clearly distinguishes this predictive tool from sibling tools like list_show_episodes, get_newly_released_episodes, and shows_without_new_episodes, which deal with existing or past release data.
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 use case is implied ('a forward calendar for your subscriptions') โ an agent can infer it is for planning future releases rather than listing current ones. However, no explicit when-to-use guidance or exclusions are given, and no alternative tools are named. Given the large sibling list containing several shows-related tools, explicit routing would have helped.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shows_without_new_episodesA
Find saved shows with no episode released inside the lookback window ("which pods went quiet?") โ pages /me/shows then the latest episode per show. Defaults to 30 days, 50 show lookups.
| Name | Required | Description | Default |
|---|---|---|---|
| max_shows | No | Max per-show episode lookups (request budget). Default 50 | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| lookback_days | No | Quiet window in days. Default 30 | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden and does reveal real behavioral detail: it pages /me/shows and then fetches the latest episode per show, and it states defaults of 30 days and 50 lookups. However, it does not disclose the cost implications of performing up to 50+ per-show API lookups, rate-limit exposure, or how shows with no episodes at all are handled.
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 waste: the first front-loads the purpose and mechanism, and the second states defaults. The parenthetical "which pods went quiet?" is high-signal framing that earns its place, and nothing is repeated from the 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?
The description adequately covers what the tool does and its defaults, and the response_format parameter partially fills the output-shape gap since no output schema exists. But with no annotations and no output schema, it should also convey the multi-call cost profile and result-sorting behavior, and it omits any direction to inverse siblings, leaving an agent under-informed about operational impact.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with every parameter already documented including defaults, bounds, and semantics (e.g., max_shows as "request budget," response_format enum values). The description adds only a restatement of two defaults (30 days, 50 lookups), which is marginal value at the baseline level.
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: "Find saved shows with no episode released inside the lookback window," with the user-facing framing "which pods went quiet?" making the intent unmistakable. It also distinguishes itself from the inverse sibling show_new_episodes by describing the quiet-podcast query rather than the new-release query.
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 "which pods went quiet?" phrasing strongly implies the use case (identifying shows that have gone silent), and the defaults give a sense of the typical invocation. However, there is no explicit when-to-use versus when-not-to-use guidance against heavily overlapping siblings like show_new_episodes, get_newly_released_episodes, and stale_saved_shows_plan, leaving routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shuffle_state_reportA
Report the current shuffle and repeat state, the device they apply to and the active context. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It explicitly states 'Read-only,' disclosing non-mutating behavior, and specifies what dimensions the report covers (state, device, context). This provides meaningful transparency beyond the schema, though it does not mention edge cases such as no active playback.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tight sentence that front-loads the action and resource, then appends the 'Read-only' safety note. Every word adds value and no information 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?
For a low-complexity read-only tool with one optional parameter and no output schema, the description sufficiently conveys what the report contains and that the operation is safe. It does not fully specify edge cases like lack of active context, but the core semantics are complete enough 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%, so the single response_format parameter is already fully documented with its enum values and meaning. The description does not need to repeat parameter details; the baseline of 3 applies because the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Report') and names the exact resource being inspected: current shuffle and repeat state, the device they apply to, and the active context. This clearly separates it from mutation siblings like set_shuffle, set_repeat, and repeat_queue_toggle, so an agent can tell what this tool does 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?
The description makes the use case clear: call this when you need a read-only account of the current shuffle/repeat state and its device/context. It does not explicitly name alternatives or exclusion conditions, but the read-only framing and specific subject matter imply the appropriate context well.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sidecar_export_bundleA
One-call export of ALL local sidecar state (scenes, device presets, tags, smart rules, playback states, bookmarks, checkpoints, journal) as a single JSON for machine migration, plus a restore checklist. Zero API calls.
| Name | Required | Description | Default |
|---|---|---|---|
| pretty | No | Pretty-print the JSON bundle. Default true. | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It adds meaningful traits: 'Zero API calls' (no external network dependency), 'single JSON' (return format), and 'restore checklist' (additional output component). While it does not explicitly state whether any state is modified, the verb 'export' plus the local, read-style content list strongly implies a non-destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero fluff. The main action and full resource list are front-loaded in the first sentence, and the second sentence adds a key behavioral trait ('Zero API calls'). Every word earns its place, and the structure aids quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool exporting many state categories, the description covers the essential content list, the return type (single JSON), the purpose (machine migration), and an extra deliverable (restore checklist). It does not detail the JSON shape or edge cases, but the optional response_format parameter in the schema partially addresses the human-vs-raw output, and the description is strong enough for an agent to understand the tool's role within a large sibling set.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage with descriptions for both parameters ('pretty' and 'response_format'), including defaults and enum values. The tool description adds no parameter-specific guidance, so the baseline score of 3 appliesโthe schema does the heavy lifting and the description does not need to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action (export) and resource (ALL local sidecar state), enumerating exactly what is included: scenes, device presets, tags, smart rules, playback states, bookmarks, checkpoints, journal. This level of specificity distinguishes it from other export tools like export_playlist_json or export_library_json without needing to name them, and the purpose is immediately understandable.
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?
'For machine migration' gives a clear, concrete use case, and 'Zero API calls' signals it is a local, safe operation. The description does not explicitly name alternatives or state when not to use this tool, but the scope ('ALL local sidecar state') and context are sufficient to guide an agent toward this tool for full-state migration or backup scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
skip_nA
Advance N tracks at once via N sequential POST /me/player/next calls. Quota: ๐ด N writes (1-20, one call per skip โ Spotify has no batch-skip endpoint). Also covers: single skip via skip_next / skip_previous โ See also: skip_next, skip_previous.
| Name | Required | Description | Default |
|---|---|---|---|
| n | No | How many tracks to skip (1-20) | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| device_id | No | Device to skip on | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It clearly warns that this performs N separate write operations, has a quota of N writes, and cannot batch. This gives the agent accurate expectations about side effects and cost, although it does not mention partial failure behavior or rate-limit implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the core behavior, followed by the quota warning and sibling references. The phrase 'Also covers: single skip via skip_next / skip_previous' is slightly ambiguous, but overall the description avoids waste and 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 mutating tool with no annotations and no output schema, the description is reasonably complete: it states the operation, implementation approach, quota impact, and related tools. It could be stronger by stating when not to use it, but the schema covers parameters and the sibling list supplies alternatives.
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 adds meaning around the n parameter by explaining the sequential call mechanics, but it does not add much beyond the schema for dry_run, device_id, or response_format.
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 operation: advancing N tracks via sequential POST /me/player/next calls. It explicitly distinguishes itself from skip_next and skip_previous, making the tool's unique role easy to identify among a very large sibling set.
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 why this tool exists (no batch-skip endpoint) and notes the associated quota cost, which is essential context for choosing it. It names skip_next and skip_previous as related tools, though it could more explicitly state 'for a single skip, use skip_next/skip_previous'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
skip_nextB
Skip to the next track in the queue or context Also covers: batch skip via skip_n โ See also: skip_n, skip_previous.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| device_id | No | Target device ID | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose side effects and prerequisites. It only states the action ('Skip to the next track') with no mention that this is a mutating playback operation, whether it requires active playback, or what happens if the queue is empty. The dry_run parameter is documented in the schema, not in the description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and front-loaded with the primary purpose. The 'Also covers' fragment is grammatically awkward and slightly confusing, but the overall length is appropriate.
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 playback-control tool with three optional parameters, the description gives the core action and sibling pointers. However, it omits behavioral context like side effects, error conditions (e.g., end of queue), and the ambiguity around skip_n makes it incomplete for an agent deciding between 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?
The input schema covers 100% of parameters with descriptions for dry_run, device_id, and response_format. The description adds no parameter-specific meaning, so the baseline 3 applies due to full schema 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 states the verb 'Skip' and the resource 'next track in the queue or context,' which clearly defines the core action. It distinguishes from skip_previous by naming it in 'See also,' though the relationship to skip_n is ambiguous: 'Also covers: batch skip via skip_n' could imply this tool covers batch skipping.
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 'See also: skip_n, skip_previous' line points to related siblings, and 'batch skip via skip_n' hints that batch skipping should be routed to skip_n. However, it never explicitly states when to choose skip_next over skip_n, and the phrasing is ambiguous about whether skip_next itself handles batch skips.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
skip_previousA
Skip to the previous track. If more than 3 seconds in, restarts the current track first. Also covers: batch skip via skip_n โ See also: skip_n, skip_next.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| device_id | No | Target device ID | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does disclose an important side effect: if already >3 seconds in, it restarts the current track instead of immediately skipping. It does not mention edge cases like no previous track, but core mutation behavior is covered.
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 first sentence is efficient and front-loaded with the essential behavior. The second sentence is muddled: 'Also covers: batch skip via skip_n' is ambiguous, and 'skip_n' appears twice in the cross-reference, making it less crisp than it could be.
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 playback-control tool with a complete schema and no output schema, the description covers the core action, the key conditional behavior, and relevant sibling tools. It omits return expectations, but that is a minor gap for a side-effect-heavy 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 coverage is 100%, so the schema already documents all three parameters. The description adds no extra meaning about dry_run, device_id, or response_format, so the 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 states a specific verb ('Skip'), a clear resource ('the previous track'), and a key behavioral nuance (restart if >3 seconds in). It also distinguishes itself from skip_next and skip_n by name.
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 context: the >3-second restart rule is a genuine when-to-use detail, and it points to skip_n for batch skipping and skip_next as a sibling. However, it does not explicitly say 'when not to use' this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sleep_timerA
Keep music playing and auto-pause after N minutes: registers an in-process timer (cancel-safe; calling again replaces it) that fires PUT /me/player/pause on expiry. No fade โ distinct from stepped schedule_wind_down. Quota: ๐ข 1 read now; 1 pause on expiry. Timer lives in this MCP server process only.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| device_id | No | Device to pause on expiry (defaults to the active device at expiry time) | |
| duration_min | Yes | Minutes until auto-pause (1-480) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries the behavioral disclosure burden. It reveals the delayed side effect, replacement semantics ('calling again replaces it'), cancel-safety, the exact HTTP call on expiry, quota (1 read now; 1 pause on expiry), and the in-process-only lifespan. This goes well beyond what the schema or annotations would convey.
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 compact and information-dense: behavior first, differentiation second, quota third, and lifespan last. Every sentence provides useful operational detail, and there is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexityโ4 parameters, delayed mutation, no output schema, and no annotationsโthe description covers the essential behavior, side effects, lifecycle, quota, and sibling distinction. An agent can call this tool correctly and understand the operational constraints without additional 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?
Schema description coverage is 100%, so the baseline is 3 even though the description itself only elaborates on the timer duration. The description adds no new meaning for parameters like dry_run, device_id, or response_format 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?
The description uses a specific verb and resource: 'Keep music playing and auto-pause after N minutes' and specifies the exact mechanism ('registers an in-process timer...fires PUT /me/player/pause on expiry'). It also explicitly distinguishes itself from schedule_wind_down, so an agent can tell it apart from a close sibling without inspecting schemas.
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 names the key alternative (schedule_wind_down) and gives the differentiator ('No fade โ distinct from stepped schedule_wind_down'). It also clarifies the timer is process-local, which is critical for deciding whether this tool will persist across server restarts. This is explicit enough to guide tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sleep_timer_planA
Plan a sleep timer: pick the leading queue items whose cumulative runtime best approximates a target duration, then a final pause call. Read-only planner.
| Name | Required | Description | Default |
|---|---|---|---|
| minutes | No | Target listening duration in minutes. Default 30 | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does so by explicitly stating 'Read-only planner,' which clearly indicates that no queue or playback state is mutated, and by outlining the algorithm (select leading items, add a final pause action). There is a slight ambiguity about whether the 'pause call' is part of the returned plan or an executed action, but the word 'Plan' and the 'Read-only' qualifier resolve this reasonably well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tightly written sentences. The core behavior is front-loaded in the first sentence, and the read-only qualifier earns its place in the second. No filler or redundant phrasing.
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 low-complexity tool with two well-documented parameters, the description covers the essential behavior, the read-only nature, and the plan structure. Since there is no output schema, a brief note about the actual return format or fields would improve completeness, and it never explicitly states that it relies on the current queueโbut these are minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both 'minutes' and 'response_format' fully documented including defaults, ranges, and enum meanings. The description adds no parameter-specific detail, so the baseline of 3 applies because the schema handles the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies a concrete action ('Plan a sleep timer'), the object ('leading queue items'), the selection criterion ('cumulative runtime best approximates a target duration'), and a final 'pause call'. By labeling itself a 'Read-only planner', it differentiates clearly from the sibling execution tool 'sleep_timer' without needing to open any 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?
The description provides clear contextual guidance by framing this as a planning operation and explicitly noting it is read-only, which signals that it should be used when only a plan is needed rather than an executed sleep timer. However, it does not explicitly name the alternative (e.g., 'use sleep_timer to actually set the timer') or state when-not-to-use, so some inference is still required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
snapshot_added_at_reportA
Report when the tracks in a snapshot were added to the playlist, bucketed by month (YYYY-MM) Snapshot guide: take_playlist_snapshot (create), list_saved_snapshots (list), read_playlist_snapshot (read), diff_playlist_snapshots / snapshot_new_tracks / snapshot_removed_tracks (diff), restore_playlist_from_snapshot / restore_playlist_plan (restore).
| Name | Required | Description | Default |
|---|---|---|---|
| snapshot | Yes | Snapshot id, filename, or path | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the core behavior (a report of added dates bucketed by month) and the YYYY-MM format, which is useful. It does not explicitly state read-only/no-side-effect behavior or describe edge cases like missing tracks or invalid snapshots, but 'Report' strongly implies a non-mutating query.
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 first sentence is clear and front-loaded. However, the 'Snapshot guide' is a long list of sibling tools that is only tangentially tied to this tool's invocation, and it adds bulk without directly helping an agent call snapshot_added_at_report. The description is adequately sized but not tightly scoped.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with no nested objects, the description covers the essential purpose and output bucketing, and the response_format parameter fills in the remaining output modes. There is no output schema, so a bit more detail on the 'detailed' or 'json' shapes could help, but the core calling scenario is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds context that the 'snapshot' parameter refers to a playlist snapshot and that tracks come from that snapshot, but the schema already documents accepted formats and the response_format enum. No critical parameter meaning is missing.
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 action ('Report when tracks were added') and a precise output shape ('bucketed by month (YYYY-MM)'). It clearly distinguishes this as a report over snapshot contents, not a create/list/diff/restore operation, reinforced by the snapshot guide.
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 'Snapshot guide' provides a helpful map of create/list/read/diff/restore tools and implies this tool is a reporting sibling, but it never explicitly says when to use this tool versus alternatives like get_playlist_added_dates or snapshot_stats_report. The usage context is implied, not stated as a decision rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
snapshot_changelogB
Build a chronological changelog of a playlist from every local snapshot, describing the changes between consecutive snapshots Snapshot guide: take_playlist_snapshot (create), list_saved_snapshots (list), read_playlist_snapshot (read), diff_playlist_snapshots / snapshot_new_tracks / snapshot_removed_tracks (diff), restore_playlist_from_snapshot / restore_playlist_plan (restore).
| Name | Required | Description | Default |
|---|---|---|---|
| playlist | Yes | Playlist ID or spotify:playlist: URI | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden of behavioral disclosure. It does not state whether this is a read-only operation, whether it requires existing local snapshots, what happens if none exist, or whether any state is modified. The description adds source scope but not behavioral expectations.
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 main purpose is front-loaded, but the description becomes a long run-on sentence with an appended 'Snapshot guide' list that is not cleanly separated or punctuated. It is information-dense but structurally cluttered.
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 core action and source are stated, and the input schema fully covers parameters. However, with no annotations and no output schema, the description leaves behavioral context and selection guidance mostly implicit, making this adequate but not fully self-contained.
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 parameter descriptions already document playlist, max_results, and response_format. The tool description adds no parameter-level meaning beyond what the schema provides, landing at the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action (Build), a precise resource (chronological changelog of a playlist), and the data source (every local snapshot). It also clarifies that changes are described between consecutive snapshots, which distinguishes this tool from playlist_changelog and one-off diff 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 appended 'Snapshot guide' names related create/list/read/diff/restore tools and implies how snapshot_changelog fits into the snapshot lifecycle, but it never states when to choose this tool over alternatives. There is no explicit condition such as 'use this for a full history instead of diffing a single pair.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
snapshot_diff_summaryA
One-paragraph summary of the differences between two snapshots: counts plus the first few changed tracks Snapshot guide: take_playlist_snapshot (create), list_saved_snapshots (list), read_playlist_snapshot (read), diff_playlist_snapshots / snapshot_new_tracks / snapshot_removed_tracks (diff), restore_playlist_from_snapshot / restore_playlist_plan (restore).
| Name | Required | Description | Default |
|---|---|---|---|
| to_snapshot | Yes | Newer snapshot (id, filename, or path) | |
| from_snapshot | Yes | Older snapshot (id, filename, or path) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose the main output behavior: a one-paragraph summary with counts and first few changed tracks. Missing details are the meaning of 'first few' (limit), whether the tool mutates anything, and how response_format alters prose vs json.
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 the core function before the companion tool guide. Every sentence earns its place, and the snapshot guide is compact enough to keep the overall description scannable.
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 3-parameter tool with no output schema, the description communicates purpose, output shape, and the broader snapshot toolset. It falls slightly short of full completeness because it doesn't describe response_format's behavioral variants or a snapshot reference format (id, filename, path), though those are in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the schema already documents older/newer snapshot ids and response_format options. The description reinforces the duality of from_snapshot/to_snapshot by saying 'differences between two snapshots', but adds no syntax or format detail 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 opens with a specific verb phrase and resource: 'One-paragraph summary of the differences between two snapshots'. It also names the exact output ('counts plus the first few changed tracks'), which clearly distinguishes it from sibling diff tools like diff_playlist_snapshots and snapshot_new_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 'Snapshot guide' sentence explicitly maps snapshot operations to sibling tools (create/list/read/diff/restore), giving the agent a workflow context and alternatives. It does not explicitly state 'use this when you need a concise overview instead of a raw diff', but the output description implies the selection criterion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
snapshot_disk_usageB
Report disk usage of the snapshot directory: total size, file count, per-playlist breakdown, and the largest files Snapshot guide: take_playlist_snapshot (create), list_saved_snapshots (list), read_playlist_snapshot (read), diff_playlist_snapshots / snapshot_new_tracks / snapshot_removed_tracks (diff), restore_playlist_from_snapshot / restore_playlist_plan (restore).
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. It clearly indicates the tool reports/reads disk usage, which implies a non-destructive operation, but it does not explicitly state that it makes no modifications, nor does it mention any operational caveats, environment dependencies, or output behavior beyond the listed metrics.
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 first sentence is concise, front-loaded, and informative. However, the second sentence is a broad 'Snapshot guide' listing many sibling tools, which is not directly about invoking snapshot_disk_usage and largely duplicates information already available in the sibling tool list, adding noise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's purpose, the resource it inspects, and the main categories of returned information. With only one optional, fully documented parameter and no required parameters, an agent has enough context to call it correctly. It does not detail exact output structure for json mode, but the metric list provides adequate guidance.
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 single response_format parameter is fully described inline with its enum values and default. The description adds no additional parameter meaning, but none is needed because the schema already documents it thoroughly.
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 states a specific verb ('Report disk usage') and resource ('snapshot directory'), and enumerates the concrete outputs: total size, file count, per-playlist breakdown, and largest files. This clearly distinguishes it from snapshot creation, listing, diffing, and restore tools in the same family.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. The 'Snapshot guide' sentence lists sibling snapshot tools but does not explain when disk usage reporting is appropriate or when another snapshot utility should be chosen instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
snapshot_integrity_checkB
Validate one snapshot (or all of them): JSON parses, required _meta keys exist, and the declared track_count matches the tracks array Snapshot guide: take_playlist_snapshot (create), list_saved_snapshots (list), read_playlist_snapshot (read), diff_playlist_snapshots / snapshot_new_tracks / snapshot_removed_tracks (diff), restore_playlist_from_snapshot / restore_playlist_plan (restore).
| Name | Required | Description | Default |
|---|---|---|---|
| snapshot | No | One snapshot (id/filename/path); omit to check ALL snapshots | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It does disclose the exact validation semantics (JSON parsing, _meta key presence, track_count matching), which is substantive. But it does not state whether the check mutates anything, what happens when validation fails, or what the return shape is.
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 core behavior is front-loaded and compact. The appended 'Snapshot guide' is slightly run-on and not strictly necessary, but it is short and genuinely useful for navigating the large sibling toolset.
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?
Reasonable for a simple read-only validation tool, but with no annotations and no output schema the description leaves return value, failure behavior, and side-effect status implied. The snapshot tool guide helps, but it does not fully substitute for explicit guidance.
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 both parameters already have descriptions in the schema. The tool description reinforces that snapshot can be one or all and clarifies the validation focus, but it adds little meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Describes a specific validation action ('Validate one snapshot (or all of them)') with concrete checks: JSON parses, required _meta keys exist, and track_count matches the tracks array. It is clearly distinct from create/list/read/diff/restore tools, though it does not explicitly distinguish itself from the sibling snapshot_integrity_report.
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 'Validate...' and the embedded snapshot guide that maps create/list/read/diff/restore actions to their tools. However, it never states when to prefer this tool over snapshot_integrity_report or other validation/report siblings, and gives no exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
snapshot_integrity_reportA
Aggregate health report over all local snapshots: valid vs corrupt files, per-playlist coverage, and the age of each playlistโs newest snapshot Snapshot guide: take_playlist_snapshot (create), list_saved_snapshots (list), read_playlist_snapshot (read), diff_playlist_snapshots / snapshot_new_tracks / snapshot_removed_tracks (diff), restore_playlist_from_snapshot / restore_playlist_plan (restore).
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It conveys that the tool reads all local snapshots and produces aggregate health information, which strongly implies a read-only report operation. However, it does not explicitly confirm non-mutation, explain how corruption is determined, or note potential performance costs of scanning all snapshots.
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 primary purpose is front-loaded in one efficient sentence with concrete report dimensions. The second sentence is a compact, useful map of related snapshot operations, though it is slightly dense and could be polished; it still earns its place by orienting the agent among many snapshot siblings.
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 tool with a clear aggregate report scope, the description covers the essential context: what it reports, over what data, and how it relates to other snapshot tools. There is no output schema, but the response_format parameter partially conveys output style and the description names the main report contents, which is adequate 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?
The schema already documents response_format with a default value, an enum, and per-value descriptions, achieving 100% schema coverage. The description adds nothing about this parameter, but none is needed because the schema fully explains it. Thus the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Aggregate health report over all local snapshots' and lists specific report dimensions (valid vs corrupt files, per-playlist coverage, age of newest snapshot). This distinguishes it from the many sibling snapshot tools, which are categorized in the supplied guide as create/list/read/diff/restore operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The opening phrase makes the use case clear: an aggregate, health-focused report over all local snapshots. The 'Snapshot guide' adds helpful context by grouping related sibling tools by operation, implying when you need create/list/read/diff/restore behavior you use those tools instead. It does not explicitly name the closest alternative report tools like snapshot_integrity_check, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
snapshot_new_tracksA
List only the tracks added between an older and a newer snapshot of a playlist Snapshot guide: take_playlist_snapshot (create), list_saved_snapshots (list), read_playlist_snapshot (read), diff_playlist_snapshots / snapshot_new_tracks / snapshot_removed_tracks (diff), restore_playlist_from_snapshot / restore_playlist_plan (restore).
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| to_snapshot | Yes | Newer snapshot (id, filename, or path) | |
| from_snapshot | Yes | Older snapshot (id, filename, or path) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
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. 'List only' clearly signals a read-only diff operation, and specifying 'tracks added between an older and a newer snapshot' explains what behavior to expect. It does not discuss error cases or snapshot validity, but for a list-style diff tool this is reasonably 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 core purpose is front-loaded in a single clear sentence, and the Snapshot guide is compact and useful. The main readability issue is the run-on structure after 'playlist,' where the guide begins without clear separation, so it is not perfectly structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the four parameters are fully documented and the response_format parameter describes output modes, the description is largely sufficient for an agent to call the tool correctly. It does not mention prerequisites like needing existing snapshots or what happens when no tracks were added, but the Snapshot guide and schema cover most practical 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?
Schema description coverage is 100%, and the schema already documents from_snapshot, to_snapshot, max_results, and response_format. The description's 'older and newer snapshot' phrasing maps to the parameters but adds little beyond what the schema already conveys, 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 states a specific verb ('List') and resource ('tracks added between an older and a newer snapshot of a playlist'), making the tool's purpose immediately clear. The Snapshot guide further distinguishes it from creation, listing, reading, and restore tools, so an agent can separate it from siblings.
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 Snapshot guide explicitly groups this tool under 'diff' alongside diff_playlist_snapshots and snapshot_removed_tracks, providing clear context and alternatives. It does not explicitly say 'use this over diff_playlist_snapshots when you only need added tracks,' but the 'List only the tracks added' wording strongly implies that choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
snapshot_playlistA
Snapshot a playlist's current URIs+positions+timestamp to a sidecar JSON file (legacy, simple path playlistIdโfile). For transactional local snapshots with plsnapi naming, diff, and bundle tooling, use take_playlist_snapshot instead. Also covers: playlist snapshot (legacy).
| Name | Required | Description | Default |
|---|---|---|---|
| playlist_id | Yes | Playlist ID | |
| snapshot_id | No | Custom snapshot ID (default: timestamp) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It explains the primary effectโwriting a sidecar JSON file with URI/position/timestamp dataโand notes the legacy path convention. However, it does not disclose whether existing files are overwritten, what the return value contains, or whether the operation has side effects beyond writing the file.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The core behavior is front-loaded, the legacy caveat is immediately useful, and the sibling alternative is named without extra 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?
The definition is adequate for recognizing the tool and choosing it over the sibling, but without annotations or an output schema it should say more about return behavior and the file-writing side effect. The simple nature of the tool keeps this from being a lower score, but some operational details remain unspecified.
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 parameters. The description adds the notion of a timestamp and the simple playlistId-to-file mapping, but it does not materially deepen the meaning of snapshot_id or response_format beyond what the schema says.
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: it snapshots a playlist's current URIs, positions, and timestamp to a sidecar JSON file. It also distinguishes itself from the sibling take_playlist_snapshot by naming it as the non-legacy transactional alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent when to prefer the sibling: 'For transactional local snapshots with plsnapi naming, diff, and bundle tooling, use take_playlist_snapshot instead.' This is a clear routing instruction, and the 'legacy, simple path' phrasing identifies the niche for this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
snapshot_registry_reportA
Registry view of every local snapshot: per playlist, all snapshot ids with taken_at and track counts, plus naming anomalies in the snapshot directory Snapshot guide: take_playlist_snapshot (create), list_saved_snapshots (list), read_playlist_snapshot (read), diff_playlist_snapshots / snapshot_new_tracks / snapshot_removed_tracks (diff), restore_playlist_from_snapshot / restore_playlist_plan (restore).
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It communicates read-only intent ('registry view') and describes the report contents, including naming anomaly detection, but does not explicitly state that no mutations occur or explain edge cases such as an empty snapshot directory. Still, it adds meaningful context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose, followed by a useful snapshot guide for sibling tools. It is slightly run-on due to the transition into the guide, but every sentence provides necessary routing or output 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?
Despite lacking annotations and an output schema, the description adequately conveys what the tool returns: per-playlist snapshot IDs, taken_at values, track counts, and naming anomalies. It also gives enough sibling context to avoid misuse. Minor gaps like behavior when no snapshots exist or how anomalies are defined are not critical for selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the only parameter, response_format, which already documents the concise/detailed/json options and defaults. The description does not add new parameter semantics, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies a specific verb and resource: a registry view of every local snapshot, organized per playlist, including snapshot IDs, taken_at timestamps, track counts, and naming anomalies. It also references the snapshot guide, which helps distinguish this tool from related snapshot tools like list_saved_snapshots and read_playlist_snapshot.
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 embedded snapshot guide lists alternatives for create, list, read, diff, and restore operations, giving useful context about where this tool fits. It does not explicitly state when to prefer this over list_saved_snapshots, but the 'registry view' framing strongly implies the appropriate use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
snapshot_removed_tracksA
List only the tracks removed between an older and a newer snapshot of a playlist Snapshot guide: take_playlist_snapshot (create), list_saved_snapshots (list), read_playlist_snapshot (read), diff_playlist_snapshots / snapshot_new_tracks / snapshot_removed_tracks (diff), restore_playlist_from_snapshot / restore_playlist_plan (restore).
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| to_snapshot | Yes | Newer snapshot (id, filename, or path) | |
| from_snapshot | Yes | Older snapshot (id, filename, or path) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. 'List only' implies a read-only operation, but the description does not disclose return format, ordering, pagination behavior, potential errors, or any side effects. For a tool with no annotations and no output schema, this is a significant 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 compact: one clear purpose sentence followed by a structured snapshot workflow guide. There is no filler, and the guide adds useful sibling context, though it is slightly dense with tool names.
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 diff-list tool with well-documented parameters and a response_format parameter, the description is mostly complete. It explains the direction of the diff and workflow placement, and the schema covers parameter meanings. The main gap is absence of any detail about the actual return shape or behavior, which matters more because there is no 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 input schema covers all parameters with descriptions (100% coverage), so the baseline is 3. The description adds orientation by calling from_snapshot 'older' and to_snapshot 'newer', which helps map parameters to the diff semantics, but it does not otherwise enrich parameter meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'List only the tracks removed between an older and a newer snapshot of a playlist.' It also embeds a snapshot workflow guide that distinguishes this tool from sibling diff tools like snapshot_new_tracks and diff_playlist_snapshots.
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 snapshot guide provides clear workflow positioning ('diff' step) and names related tools for create, list, read, diff, and restore. However, it does not explicitly state when to prefer snapshot_removed_tracks over snapshot_new_tracks or diff_playlist_snapshots; this is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
snapshot_retention_planA
Report which snapshots a keep-last-N (+ optional age cutoff) retention policy would keep or delete โ never deletes anything Snapshot guide: take_playlist_snapshot (create), list_saved_snapshots (list), read_playlist_snapshot (read), diff_playlist_snapshots / snapshot_new_tracks / snapshot_removed_tracks (diff), restore_playlist_from_snapshot / restore_playlist_plan (restore).
| Name | Required | Description | Default |
|---|---|---|---|
| playlist | No | Restrict the plan to this playlist (ID or URI) | |
| keep_last | No | Snapshots to KEEP per playlist (default 5) | |
| older_than_days | No | Also mark snapshots older than this many days for deletion | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavior disclosure. It clearly states the tool is non-destructive ('never deletes anything') and reports a hypothetical keep/delete outcome, which are the key behavioral facts. It does not describe return shape or edge cases, but the core side-effect profile is 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 first clause is front-loaded and efficient, but the description then runs directly into a long 'Snapshot guide' list with missing punctuation, mixing tool-specific guidance with a family map. The guide may help orientation but reduces conciseness and clarity.
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 report-only tool with zero required parameters, the description is largely complete: it states the policy concept, the optional age dimension, and the non-destructive nature. There is no output schema, so a bit more detail on the reported fields would help, but the response_format parameter and the schema cover the main invocation needs.
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 schema already documents playlist, keep_last, older_than_days, and response_format. The description adds only conceptual mapping ('keep-last-N' and 'optional age cutoff'), which is helpful but not needed to understand the parameters.
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 begins with a specific verb and resource: 'Report which snapshots a keep-last-N (+ optional age cutoff) retention policy would keep or delete.' It also explicitly distinguishes this tool from mutating operations with 'never deletes anything,' and the snapshot guide contextualizes it among create/list/read/diff/restore siblings.
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 dry-run retention planning ('would keep or delete' and 'never deletes anything'), but it does not explicitly state when to use it versus prune_old_snapshots or other snapshot tools, nor does it give exclusion conditions. The appended snapshot guide maps sibling operation categories but does not give selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
snapshot_stats_reportA
Compute stats for one snapshot: track count, unique URIs, duplicates, and the oldest/newest added_at dates Snapshot guide: take_playlist_snapshot (create), list_saved_snapshots (list), read_playlist_snapshot (read), diff_playlist_snapshots / snapshot_new_tracks / snapshot_removed_tracks (diff), restore_playlist_from_snapshot / restore_playlist_plan (restore).
| Name | Required | Description | Default |
|---|---|---|---|
| snapshot | Yes | Snapshot id, filename, or path | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the behavioral burden. 'Compute stats' strongly implies a read-only analysis with no side effects, and the stat list is disclosed. But it does not explicitly state that no mutation occurs, what the response looks like, or what happens if the snapshot is invalid or missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence is tight and front-loaded with the tool's core purpose. The Snapshot guide adds useful sibling context but is a bit long relative to the primary description; still, each listed tool earns its place by orienting the agent among many snapshot-related siblings.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only stats tool with a 100%-covered schema, the description is largely sufficient: it states what is computed and locates the tool within the snapshot workflow. It could be more complete with explicit when-to-use guidance versus read_playlist_snapshot, but no critical call-correctness information 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 description coverage is 100%, and both parameters are already described in the schema: snapshot is an id/filename/path and response_format has an enum with default. The description adds no new parameter-level meaning, so the 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 opens with a specific verb+resource: 'Compute stats for one snapshot' and enumerates exact outputs (track count, unique URIs, duplicates, oldest/newest added_at dates). It clearly differentiates this from snapshot create/list/read/diff/restore siblings by labeling the Snapshot guide.
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 Snapshot guide maps sibling tools to operation categories (create, list, read, diff, restore), giving an agent context for how snapshot_stats_report fits. However, it never explicitly states a condition like 'use this when you need aggregate stats rather than raw snapshot contents', so the selection rule is implied rather than fully stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sort_playlist_applyA
Sort a playlist in place by name, artist, album, duration, added-at date or release era: backs up the current items to a local file first, then rewrites via one atomic replace. dry_run=true (default) previews only. Quota: ๐ข GET + 1 local write + 1 PUT.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Pass false to commit. Default true | |
| sort_by | No | Sort key. Default name | |
| direction | No | Sort direction. Default asc | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | Yes | Playlist to sort (ID or spotify:playlist: URI) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and discharges it excellently: it discloses that this is a mutating operation, that a local backup is created first, that the rewrite is a single atomic replace, that dry-run previews without changing anything, and even the quota cost (1 GET + 1 local write + 1 PUT). This is exactly the behavioral context an agent needs to safely invoke a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, zero filler: purpose and safety behavior first, then mode semantics, then quota cost. The most decision-relevant information (it's an in-place mutation with a safety backup) is front-loaded before operational details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description covers the essential contract: what changes, how it protects against data loss (backup + atomic replace), how to preview safely, and the cost. It leaves return-value details to the schema's PLAN mention and doesn't clarify edge behavior around max_results, but nothing critical to calling it safely 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 description coverage is 100%, so the baseline is 3. The description's sort-key list maps onto the sort_by enum and 'release era' helpfully aligns with the release_date value, but the schema already documents all parameters thoroughly; the dry_run restatement adds minimal value beyond the schema's own detailed 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?
States a precise action ('Sort a playlist in place') with an explicit list of sort keys (name, artist, album, duration, added-at date, release era). The 'in place' scoping plus the backup-then-atomic-replace detail clearly distinguishes it from plan-only siblings like sort_playlist_plan and simpler utilities like playlist_sort.
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 clear internal mode guidance ('dry_run=true (default) previews only'), implying a preview-then-commit workflow. However, it never explicitly routes the agent between this tool and the closely related sort_playlist_plan sibling, nor states when committing is appropriate versus when a plan-only tool should be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sort_playlist_planA
Plan a sort of a playlist by name, artist, album, duration, added-at date or release era and preview the exact resulting order โ read-only, commits nothing (use sort_playlist_apply to commit). Quota: ๐ข 1โ2 GETs.
| Name | Required | Description | Default |
|---|---|---|---|
| sort_by | No | Sort key. Default name | |
| direction | No | Sort direction. Default asc | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | Yes | Playlist to plan a sort for (ID or spotify:playlist: URI) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it delivers: 'read-only, commits nothing' discloses the non-mutating behavior, and 'Quota: ๐ข 1โ2 GETs' discloses resource cost. The only minor gap is that it doesn't touch on error cases or what happens for playlists that cannot be resolved, but the core behavioral profile is well covered.
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 dense sentences with zero filler: purpose and sort keys first, then the commit alternative, then quota. The most decision-relevant facts (read-only, preview, commit sibling) are front-loaded, and 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?
For a tool with no output schema and no annotations, the description covers purpose, behavior, quota, and the sibling to use for committing. The response_format parameter covers output shape, so the missing piece is minor (e.g., pagination interaction with max_results, or handling of duplicate sort keys). Slightly shy of fully complete, hence 4.
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 each parameter already has a solid description including defaults ('Default name', 'Default asc') and bounds. The description adds the prose list of sort keys, which mirrors the schema enum, so it adds marginal value beyond structured data. 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 states a specific verb ('plan a sort'), the resource (playlist), the available sort keys (name, artist, album, duration, added-at date, release era), and the key outcome (preview the exact resulting order). It explicitly distinguishes itself from sort_playlist_apply and is clearly differentiated from siblings like reverse_playlist_plan, rotate_playlist_plan, and interleave_playlists_plan.
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 names the alternative explicitly ('use sort_playlist_apply to commit') and gives the selection condition: use this tool when you want to preview a sort without committing. This is direct, actionable guidance an agent can act on without inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sort_uris_by_kindA
Sort Spotify references into deterministic groups by entity kind (track, album, artist, playlist, show, episode, audiobook, user) and return them labelled per group โ offline.
| Name | Required | Description | Default |
|---|---|---|---|
| uris | Yes | References to group | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It does disclose that the operation is 'offline' and 'deterministic', which is useful. However, it does not explain error behavior for invalid URIs, how duplicates are handled, the exact structure of the returned groups, or what the response_format options (concise/detailed/json) entail. This is a partial disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence. The core action is front-loaded ('Sort Spotify references'), followed by the grouping logic and the offline qualifier. There is no redundant information or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and no annotations, the description provides the essential purpose and group labels but omits details such as return format, handling of mixed or invalid URIs, and ordering of groups. While the presence of response_format suggests varying output, its specifics are not described. The description is adequate for a simple utility but leaves some operational details unclear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers both parameters with descriptions (100% coverage). The tool description adds the context that inputs are 'Spotify references' and lists valid entity kinds, which helps interpret the 'uris' parameter. It does not add syntax or format details beyond the schema, and the response_format parameter is sufficiently explained in the schema itself.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'sort', the resource 'Spotify references', and enumerates all entity kinds (track, album, artist, playlist, show, episode, audiobook, user). It also specifies the output as 'labelled per group', distinguishing it from counting or classifying tools like count_uris_by_type or classify_spotify_uris.
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 explicit guidance on when to use this tool versus alternatives. It only mentions 'offline', which hints at determinism but does not explain why one would pick this over other grouping tools (e.g., split_uri_list, uri_kind_stats). No exclusions or context of use are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
split_playlistB
Split a playlist into N chunks (new playlists). Quota: ๐ก GET all + N POST /me/playlists + N POST items.
| Name | Required | Description | Default |
|---|---|---|---|
| parts | Yes | Number of parts (2โ10) | |
| public | No | Public flag for new playlists | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| name_prefix | No | Prefix for new playlist names (default: source name) | |
| playlist_id | Yes | Source playlist ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the tool creates new playlists and provides an API quota breakdown, which is meaningful side-effect context. However, it does not state whether the source playlist is left unchanged, what permissions are needed, or how dry_run behaves beyond the schema description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, front-loaded with the core action, and the quota sentence adds valuable behavioral context without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate for basic invocation given the strong schema, but it lacks sibling differentiation, explicit source-playlist behavior, and default visibility semantics. These gaps matter for a mutating tool with no annotations or 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?
Schema description coverage is 100%, so the parameters are already well documented. The description adds quota context but no additional meaning for individual parameters, matching the baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action and outcome: split a playlist into N chunks as new playlists. However, it does not differentiate from the sibling split_playlist_by_count, which appears to serve the same purpose.
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 split_playlist_by_count or split_playlist_by_duration. The quota note is useful but does not explain selection criteria or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
split_playlist_by_countA
Split a playlist into N roughly-equal parts, each written to a NEW playlist named " 1..N" โ dry_run defaults to TRUE so it returns the part plan read-only. Quota: ๐ก GET + N creates + chunked adds when committing.
| Name | Required | Description | Default |
|---|---|---|---|
| parts | No | Number of parts (2โ50). Default 2 | |
| prefix | No | New playlist name prefix. Default: "<original name> โ Part" | |
| public | No | Public visibility for a newly created playlist. Default: private | |
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Pass false to commit. Default true | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | Yes | Playlist to split (ID or spotify:playlist: URI) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and handles it well: it discloses the mutating side effect (N playlist creations only when committing), the safe read-only dry-run default, and the quota footprint. It stops short of edge cases like playlists with fewer tracks than parts or collisions with pre-existing prefix-named playlists, 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?
Two sentences pack the core action, naming scheme, safety default, and quota into minimal text with zero filler. The most decision-relevant facts (side effect plus dry-run default) are 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 7-parameter mutation tool with no output schema and no annotations, the description covers the essentials but leaves the return value vague ('returns the part plan') and omits edge-case behavior such as uneven distribution or playlists shorter than the requested part count. An agent cannot predict what the plan contains or how degenerate inputs behave.
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 input schema already documents all seven parameters. The description adds modest value by clarifying the prefix numbering scheme ('<prefix> 1..N') and tying dry_run to the read-only plan, which matches the baseline 3 for high schema 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 states a specific verb and resource: 'Split a playlist into N roughly-equal parts, each written to a NEW playlist.' The count-based splitting together with the '<prefix> 1..N' naming convention clearly distinguishes it from siblings like split_playlist_by_duration and the generic split_playlist.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives useful operational context ('dry_run defaults to TRUE so it returns the part plan read-only' and the quota cost) that tells an agent it can preview safely. However, it never explicitly says when to prefer this over split_playlist_by_duration or split_playlist, and it offers no exclusions or alternative routing among the large sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
split_playlist_by_durationA
Split a playlist greedily into consecutive parts of a target runtime (e.g. 60-minute commute blocks), each written to a NEW playlist โ dry_run defaults to TRUE. Quota: ๐ก GET + N creates + chunked adds when committing.
| Name | Required | Description | Default |
|---|---|---|---|
| prefix | No | New playlist name prefix. Default: "<original name> โ Part" | |
| public | No | Public visibility for a newly created playlist. Default: private | |
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Pass false to commit. Default true | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| playlist_id | Yes | Playlist to split (ID or spotify:playlist: URI) | |
| tolerance_sec | No | A part may run over by up to this many seconds. Default 30 | |
| target_minutes | Yes | Target runtime per part, in minutes | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does well by revealing the dry_run default (TRUE), the cost model ('GET + N creates + chunked adds when committing'), and that outputs are new playlists. It stops short of explicitly stating that the source playlist is never modified, though 'NEW playlist' implies it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with no filler. The core purpose and algorithm are front-loaded, the dry-run safety default is highlighted, and the quota summary is packed efficiently into a short suffix.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 8 parameters, no annotations, and no output schema, the description covers the most critical facts: purpose, algorithm, output destination, dry-run safety, and commit-time cost. It does not detail the shape of the returned plan in dry_run mode, but the schema's dry_run description already mentions returning a PLAN, and this omission is minor.
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 8 parameters. The description adds some context by giving a concrete target-runtime example and stating the dry_run default, but it does not materially deepen understanding of parameters beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific verb ('Split') applied to a specific resource (a playlist), the algorithm ('greedily'), the criterion ('target runtime'), and the output behavior ('each written to a NEW playlist'). This clearly differentiates it from siblings like split_playlist_by_count, which splits by item count rather than duration.
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 example of '60-minute commute blocks' and the 'target runtime' phrasing imply the intended use case, but the description does not explicitly state when to choose this tool over alternatives such as split_playlist_by_count, playlist_trim_to_duration, or filter_playlist_by_duration. Usage context is present but not contrasted with siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
split_queue_planA
Plan splitting the upcoming queue into runtime-bounded playlist chunks (default 30 minutes each). Preview by default โ pass dry_run=false to actually create the playlists and fill them.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Default true โ pass false to commit. | |
| chunk_minutes | No | Target runtime per chunk in minutes. Default 30 | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
| playlist_name_prefix | No | Name prefix for created playlists. Default "Queue chunk" | Queue chunk |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses the critical behavior: by default the tool only previews/plans, and only with dry_run=false does it actually create and fill playlists. This is a meaningful and useful behavioral disclosure, though it does not describe return formats or post-commit side effects beyond creating/filling playlists.
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, front-loaded with the primary action and default behavior. Every clause earns its place; there is no padding or repetition of schema details.
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 tool with four fully documented parameters and a clear preview/commit distinction, the description is nearly complete. It could specify more about what the plan output looks like, but the response_format parameter partially covers that, and no output schema is required for a planning tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters well. The description adds only light reinforcement ('default 30 minutes each') and does not meaningfully extend the parameter semantics beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb+resource pair ('Plan splitting the upcoming queue') and states the core output ('runtime-bounded playlist chunks'). It is clearly distinct from general playlist splitting tools because it targets the upcoming queue and defaults to a preview/plan mode.
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 clear context: use it to plan queue splitting into time-bounded chunks, preview by default, and commit with dry_run=false. It does not explicitly name alternative tools or exclusion conditions, but the queue-specific scope and the dry-run distinction make the intended usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
split_uri_listA
Split a delimited string of Spotify references into a clean array โ accepts comma, semicolon, whitespace, or newline separators; local only.
| Name | Required | Description | Default |
|---|---|---|---|
| list | Yes | Delimited list of Spotify references | |
| delimiter | No | Explicit delimiter; default auto-detects ',', ';', whitespace, or newline | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
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 discloses 'local only' (indicating no external API calls) and 'clean array' (implying whitespace trimming or normalization). However, it does not detail handling of empty entries, duplicate references, or validation of Spotify URI formats, which could matter in edge cases. The behavioral disclosure is adequate for a simple utility but not exhaustive.
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 states the core purpose and key behaviors without redundancy. Every elementโverb, resource, separators, and localityโearns its place. It is efficient and easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward splitting utility with full schema coverage and no output schema, the description is fairly complete. It explains what the tool does, the separators it handles, and that it operates locally. It does not detail the effect of response_format, but that is covered in the schema. Given the simplicity of the tool and the richness of the schema, the description is nearly sufficient, missing only minor edge-case disclosures that would push it to 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%โall three parameters (list, delimiter, response_format) have explanatory descriptions. The tool description adds marginal value beyond the schema, such as the phrase 'clean array' hinting at output normalization, but it does not significantly enhance parameter understanding. Baseline of 3 is appropriate given full schema 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 specific verb 'Split' and the resource 'delimited string of Spotify references', and specifies the outcome 'into a clean array'. It also enumerates accepted separators (comma, semicolon, whitespace, newline), which distinguishes it from sibling tools like join_uri_list. The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: use this tool when you have a delimited string that needs splitting into an array. However, it does not provide explicit versus alternatives, such as noting that batch_parse_spotify_uris or parse_spotify_uri might be more appropriate for validation or structured parsing. No exclusions or when-not-to-use guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spotify_doctorA
Run local diagnostics: token presence/expiry, auth-time scopes vs write tools enabled by active toolsets, Premium gating notes, rate-limit cooldown, and a config snapshot. Read-only, best-effort live account probe for product/country when network available.
| Name | Required | Description | Default |
|---|---|---|---|
| verbose | No | Include per-check technical detail lines in the prose output | |
| response_format | No | Response format: concise (default) returns human-readable text, detailed adds metadata, json returns structured data |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It clearly states 'Read-only' and 'best-effort live account probe for product/country when network available', which inform the agent about side effects and network dependency. It could add failure behavior when offline, but 'best-effort' already tempers expectations.
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 deliver maximum relevant information with zero filler. The primary action and scope come first, followed by a compact comma-separated list of diagnostic categories and the read-only/network caveat.
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 there is no output schema, the description compensates by enumerating the diagnostic checks and behaviors. It names the key check categories, the live-probe behavior, and the config snapshot. It does not explicitly describe the final report structure, but the prose/response_format parameter and listed checks make the tool sufficiently complete 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%, so both parameters (verbose and response_format) are already documented in the schema. The description adds no extra parameter detail, but the baseline of 3 applies because the schema handles the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Run local diagnostics') and enumerates concrete diagnostic areas: token presence/expiry, scopes vs write tools, Premium gating, rate-limit cooldown, config snapshot. This is clear and distinguishes it from feature-specific tools, though it does not explicitly contrast with overlapping siblings like scope_audit or quota_probe.
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 as a general health-check/diagnostic tool and states it is read-only and best-effort, but it does not explicitly say when to choose it over alternatives such as scope_audit, quota_probe, or device_health. There is no exclusion criteria or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spotify_uri_kindA
Report the entity kind of a single Spotify reference (uri/url/bare ID) locally, or null when the kind segment is missing or unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | Spotify reference to inspect | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses two key behaviors: execution is local and null is returned when the kind segment is missing or unknown. It doesn't detail invalid-input handling or response_format effects, but the core behavior is transparent for this simple utility.
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 front-loads the action and object, then packs scope ('single', 'locally') and fallback behavior with no filler. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-required-param utility with no output schema, the description covers the purpose, the local nature, and the null fallback. The only gap is explicit routing among sibling URI helpers, but the low complexity and fully documented schema keep it sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds real meaning to 'ref' by clarifying it can be a uri, url, or bare ID, and that output is the entity kind with a null fallback. It adds nothing to response_format, but the schema already documents that enum fully.
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 ('Report'), a precise object ('entity kind of a single Spotify reference'), and explicitly enumerates accepted input forms (uri/url/bare ID). The local/no-API emphasis and null fallback make it distinct from siblings like classify_spotify_uris or batch_parse_spotify_uris.
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 words 'single' and 'locally' provide clear context: use this for one reference when no API call is needed. It stops short of explicitly naming alternatives or exclusions, so it misses the full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spotify_uri_to_open_urlA
Convert a spotify: URI (or bare ID + kind) into its https://open.spotify.com share URL locally, stripping nothing else.
| Name | Required | Description | Default |
|---|---|---|---|
| uri | Yes | Spotify URI, bare ID, or URL to convert | |
| kind | No | Entity kind when the input is a bare ID | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses that conversion happens 'locally' (no network call) and that it is 'stripping nothing else' โ informing the agent that the input is preserved besides the necessary URL transformation. It does not cover edge cases or output format details, but for a simple conversion tool these are sufficient behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It states the transformation, explains the accepted input forms, notes it runs locally, and clarifies it strips nothing else โ all in about 15 words. This is an efficient, structured description.
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, low-complexity conversion tool, the description plus a fully documented schema is almost complete. It covers the main purpose, the local execution, and the input variation. It could add a note about the inverse operation or when to prefer alternative URI handling tools, but nothing essential to calling it 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?
The schema already describes all three parameters with 100% coverage, including the meaning of 'uri' (Spotify URI, bare ID, or URL), 'kind' (`Entity kind when the input is a bare ID`), and 'response_format' with the enum values. The description adds almost no parameter-level detail beyond what the schema already documents, so 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 clearly states the tool converts a spotify: URI (or bare ID + kind) into its https://open.spotify.com share URL, which identifies the exact verb and resource. It also differentiates from related sibling tools like open_url_to_spotify_uri (which does the reverse) and format_spotify_uri by specifying the target output format.
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 descriptor gives a clear context: use this when you need a share URL from a spotify: URI or bare ID + kind. It does not explicitly name alternatives or exclude cases (e.g., converting open URLs back to URIs), but the intent is unambiguous from the phrase 'into its https://open.spotify.com share URL'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stale_saved_shows_planA
Build a PLAN for pruning saved shows that have published nothing within the staleness threshold โ read-only by design, it never unfollows anything; pair with remove_saved_shows to commit. Defaults to 90 days, 50 show lookups.
| Name | Required | Description | Default |
|---|---|---|---|
| max_shows | No | Max per-show episode lookups (request budget). Default 50 | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| threshold_days | No | Stale when no release within N days. Default 90 | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and credibly discharges it: 'read-only by design, it never unfollows anything' is a strong safety disclosure for an agent deciding whether invocation is side-effect free, and the defaults (90 days, 50 show lookups) pin down runtime behavior. It does not, however, describe the plan's output shape or whether a run performs live network lookups, since no output schema exists to cover that.
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 front-load the core purpose, then add the safety qualifier, the commit pairing, and the defaults in order of importance. No clause is wasted; the em-dash construction keeps the critical 'never unfollows' information adjacent to the main verb.
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 plan/commit workflow is complete for a tool whose four parameters are all optional and fully self-documented. The main gap is that, with no output schema, the description never says what the plan contains, and it doesn't differentiate itself from report-style siblings (shows_without_new_episodes, show_backlog_report) that also surface stale-show information.
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 input schema already documents the meaning, bounds, and enum of all four parameters. The description's 'Defaults to 90 days, 50 show lookups' usefully restates the schema's per-parameter defaults in one place but adds no new semantic information beyond it, matching the high-coverage baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Build a PLAN for pruning saved shows that have published nothing within the staleness threshold.' The read-only qualifier and the pairing with remove_saved_shows clearly separate it from the commit-style mutation tools in the sibling list, so an agent can tell it apart from remove_saved_shows and shows_without_new_episodes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit workflow: 'read-only by design, it never unfollows anything; pair with remove_saved_shows to commit' tells an agent to run this first for review and delegate the actual unfollowing to the named sibling. It stops short of a full 5 because it names no when-not-to-use conditions and doesn't route to analysis-only alternatives such as shows_without_new_episodes or show_backlog_report.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_podcast_sessionA
Plan a podcast session (see plan_podcast_session) and start it on a device. Limitation: Spotify cannot apply resume offsets when queueing โ only the first episode can start at its resume point (via PUT /me/player/play on its show context); later episodes are appended to the queue and play from the beginning. With dry_run, nothing is played or queued.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Restrict the source: 'episodes' = your saved episodes only, 'shows' = recent episodes of your saved shows only. Omit to use saved episodes (plus saved shows when saved_only is false) | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| minutes | Yes | Session length in minutes (1โ480) | |
| device_id | No | Target device ID; omit for the active device | |
| saved_only | No | When no kind is set, include recent episodes of saved shows too. Default: true (saved episodes only) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it delivers: the resume-offset limitation is a genuine, non-obvious behavioral gotcha that would otherwise cause download errors, and the dry_run guarantee ('nothing is played or queued') clarifies side effects. It does not cover failure modes (e.g., no active device) but what it discloses is specific and valuable.
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, front-loaded with the core purpose, followed by the most decision-relevant limitation and the dry_run safeguard. The PUT /me/player/play endpoint detail is slightly implementation-specific but earns its place by making the resume behavior concrete; no sentence 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?
For a mutation tool with real side effects, no annotations, no output schema, and seven parameters, the description covers the biggest surprise (resume-offset behavior) but leaves gaps: it never says what the tool returns (confirmation? queue summary? session description?), what happens when no device is active, or how 'plan' selects episodes beyond the schema'd parameters. Adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all seven parameters, setting the baseline at 3. The description's dry_run statement reinforces the schema's existing dry_run semantics but adds no per-parameter meaning beyond it; no compensation is needed beyond 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 states a specific action โ 'Plan a podcast session ... and start it on a device' โ with a clear resource and an explicit pointer to the planning-only sibling, plan_podcast_session. This lets an agent distinguish it from simple playback tools like play_on or queue_next and from the plan-only variant without opening schemas.
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 reference '(see plan_podcast_session)' implies that planning-only flows belong to that sibling, and the dry_run clause signals a preview-only usage mode. However, the description never explicitly states when to choose this tool over plan_podcast_session, play_on, or queue_nex โ the decision condition is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsfm_album_date_statsB
Stream totals for one album within a date window
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Only streams after this Unix-ms timestamp | |
| limit | No | 1โ500. Default: 100 | |
| before | No | Only streams before this Unix-ms timestamp | |
| user_id | Yes | stats.fm user id or customId (e.g. "martijn") | |
| album_id | Yes | stats.fm album id | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of disclosing side effects, read-only behavior, auth requirements, or rate limits. The description simply says 'Stream totals' without explicitly stating that the operation is read-only or non-destructive. It fails to disclose any behavioral traits beyond the basic function.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that conveys the essential purpose without redundancy. It is front-loaded with the key action ('Stream totals') and the resource ('one album'), followed by the temporal scope. There is no unnecessary verbosity, making it efficient for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate for a simple, well-parameterized query tool. It covers the core purpose and resource, and the schema fully documents parameters. However, it omits details about the response structure or how the optional date window and response_format affect the output. Since the tool has no output schema, a bit more context about return value shape would be helpful, but the description is still sufficient for expected usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for all parameters, so the baseline is 3. The description does not add any additional meaning or context about parameters; it relies entirely on the schema descriptions. It does not clarify how the date window interacts with the 'after' and 'before' parameters or what 'stream totals' precisely includes, but the high schema coverage meets the 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 clearly states the tool's purpose: retrieving stream totals for a specific album within a date window. It identifies the resource (album), the metric (stream totals), and the temporal constraint (date window), which is sufficient for an agent to distinguish it from related tools like statsfm_album_stats or statsfm_artist_date_stats.
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 does not explicitly indicate when to use this tool over alternatives. It provides no context such as 'use this when you need date-filtered album stats' or comparisons to similar tools. While the date window parameters imply a temporal filter, the absence of any alternative differentiation leaves usage guidance largely implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsfm_album_statsB
Stream totals for one album within a user library
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 1โ100. Default: 50 | |
| user_id | Yes | stats.fm user id or customId (e.g. "martijn") | |
| album_id | Yes | stats.fm album id | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
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 gives no information about side effects, read-only behavior, authentication requirements, rate limits, or external API dependencies.
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, focused sentence with no unnecessary detail. It is front-loaded with the core purpose and easy to scan.
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 query-like tool, the description provides the essential subject and scope, and no output schema exists to document. However, it lacks usage guidance and behavioral details, leaving some context 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?
The schema covers all four parameters with descriptions, including the enum for response_format. The description adds no additional meaning beyond the schema, so a baseline score 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 resource ('album') and scope ('within a user library') and indicates the returned data ('stream totals'). It lacks an explicit verb like 'get' or 'retrieve', but the intent is reasonably clear and distinguishable from many sibling 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 implies the primary use caseโobtaining stream totals for one album for a given userโbut it does not explicitly state when to prefer this tool over related statsfm album tools or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsfm_artist_affinityA
How deep does an artist run? Lifetime intensity (share of top-artist streams) plus a recency half-life fitted to recent stream ages. Read-only, no auth.
| Name | Required | Description | Default |
|---|---|---|---|
| artist | Yes | Artist name (substring match) or stats.fm artist ID | |
| statsfm_user | Yes | stats.fm user ID (or username) โ public profile, no auth needed | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description carries the disclosure burden and does well: it states 'Read-only, no auth' and explains the underlying metric construction (lifetime intensity plus a recency half-life). It could also mention output format or failure modes, but the core behavioral and safety-relevant traits are covered.
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 compact: a hook question, a two-part metric explanation, and a read-only/auth note. Every sentence earns its place, though the opening question is more stylistic than informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains the methodology and auth posture, and the schema fully documents all three parameters. However, there is no output schema and the description does not describe the return shape or how the 'response_format' parameter changes results, which leaves an agent partially guessing about the tool's output.
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 baseline is 3. The description does not add parameter-specific meaning beyond the schema, though it does convey the overall metric concept. It neither repeats the parameter docs nor clarifies how the two required parameters interact.
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 indicates it computes an artist affinity metric using lifetime stream share and recency half-life, and it is marked as read-only with no auth. It does not use a direct verb like 'calculate' or 'get', and it does not distinguish itself from the similar sibling 'artist_affinity', so it is not fully unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys a clear use case: measuring how deeply an artist is listened to over time, with no auth required. However, it does not explicitly state when to choose this tool over related statsfm siblings like artist_affinity or statsfm_artist_stats, nor does it give exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsfm_artist_date_statsC
Stream totals for one artist within a date window
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Only streams after this Unix-ms timestamp | |
| limit | No | 1โ500. Default: 100 | |
| before | No | Only streams before this Unix-ms timestamp | |
| user_id | Yes | stats.fm user id or customId (e.g. "martijn") | |
| artist_id | Yes | stats.fm artist id | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for behavioral disclosure. 'Stream totals' implies aggregation but doesn't specify what the output looks like (raw count, per-day breakdown, total number of streams, etc.). It doesn't mention pagination, response format, or any side effects. Since it's a read operation, the lack of a readOnlyHint annotation isn't the tool's fault, but the description doesn't compensate by clarifying it's a non-mutating query.
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 short sentence with no wasted words, achieving efficiency. However, it is so terse that it borders on under-specification, leaving out critical details. It earns a 4 for conciseness but loses points because the brevity compromises clarity about the tool's exact behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no output schema and no annotations, the description must explain return values and aggregation behavior. It doesn't mention whether it returns a single total, per-day breakdown, or average streams. The response_format parameter suggests different output styles, but the description doesn't explain what each yields. For a stats tool with multiple parameters, this is incomplete and leaves the agent guessing about the result shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all six parameters including before/after timestamps, limit, and response_format. The description adds the phrase 'within a date window' which loosely maps to before/after, but provides no additional meaning beyond what the schema already conveys. Since the schema is comprehensive, the description adds minimal value, and a 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 states a specific verb ('Stream totals') and resource ('one artist') within a date window, making the core action clear. However, it doesn't differentiate from sibling tools like statsfm_track_date_stats or statsfm_album_date_stats; the agent must infer that this is specifically for artist-level aggregation. It's more specific than a generic 'get stats' but lacks explicit sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. It doesn't mention when to prefer this over other date-stats tools (track, album) or other artist stats tools. The context is implied by the name but not explicitly stated, leaving the agent to guess based on tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsfm_artist_statsA
Stream totals for one artist within a user library
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 1โ100. Default: 50 | |
| user_id | Yes | stats.fm user id or customId (e.g. "martijn") | |
| artist_id | Yes | stats.fm artist id | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only says 'Stream totals' without explaining aggregation window, output shape, pagination, or whether totals are lifetime or filtered, leaving important behavior unspecified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words or duplication of schema information. It conveys the core purpose efficiently.
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 and schema together communicate the essential operation and required identifiers. However, without an output schema or annotations, the description does not clarify what 'totals' includes (e.g., plays, minutes) or how response_format changes the result shape, leaving some ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents all four parameters, including defaults, ranges, and the response_format enum. The description adds no additional parameter-level meaning, which is acceptable given the schema coverage 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 clearly identifies the tool's purpose: retrieving stream totals for a single artist within a user's library. It is specific enough to distinguish from related sibling tools like statsfm_track_stats or statsfm_album_stats, though it does not explicitly name those alternatives.
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 'within a user library' establishes clear context for when the tool is appropriate. It does not state exclusion criteria or name alternative tools from the large statsfm sibling set, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsfm_catalog_albumC
Look up an album in the stats.fm catalog by id
| Name | Required | Description | Default |
|---|---|---|---|
| album_id | Yes | stats.fm album id | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only says 'Look up an album' and gives no information about whether this is a read-only operation, how the catalog lookup differs from API album metadata, what the response format is, or whether it requires any special privileges. The response_format parameter hints at output behavior, but the description itself discloses little beyond the action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear sentence with no wasted words. It front-loads the verb and object. Slightly more context about response formats could improve it, but for its length it is efficiently structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema and no annotations, yet the description does not explain what 'look up' returns in practice, how the catalog context differs from other album endpoints, or which sibling alternatives might suit richer needs. Given the large sibling set and the existence of similar tools, this is incomplete for an agent to reliably select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: album_id is described as 'stats.fm album id' and response_format has enum values with a default and meaning. The description adds no additional parameter meaning beyond what the schema already provides. Baseline 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Look up') and resource ('album in the stats.fm catalog by id'). It clearly indicates the action and target. However, it doesn't explicitly differentiate from siblings like statsfm_catalog_track, get_album, or catalog_batch_lookup, so it loses a point for lack of sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as get_album, statsfm_album_stats, or catalog_batch_lookup. With a very large sibling list containing several album-related tools, the agent is left to infer usage from the name and schema alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsfm_catalog_artistB
Look up an artist in the stats.fm catalog by id
| Name | Required | Description | Default |
|---|---|---|---|
| artist_id | Yes | stats.fm artist id | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The verb 'look up' implies a read-only operation, but the description does not explicitly state that there are no side effects, nor does it mention authentication requirements, rate limits, or potential failures. Since no annotations are provided, the description carries the full burden but only partially discloses 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, concise sentence that conveys the essential purpose without extraneous details. It is well-structured and immediately understandable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and the description does not specify what the return value contains (e.g., artist details, metadata, or any response format). It also lacks information about possible errors, edge cases, or the context in which this lookup is useful, leaving the agent with limited understanding of the expected result.
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?
Both parameters (artist_id and response_format) are documented in the schema with descriptions, so schema coverage is complete. The tool description adds no additional meaning beyond what the schema already provides, thus it meets the baseline but does not exceed it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'look up' and the resource 'artist in the stats.fm catalog', which distinguishes it from similar tools like get_artist that may target a different catalog. The phrase 'by id' also specifies the input method, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as get_artist, search_artists, or other artist-related lookup tools. There is no mention of scenarios or prerequisites, leaving the selection entirely to the agent's inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsfm_catalog_trackB
Look up a track in the stats.fm catalog by id
| Name | Required | Description | Default |
|---|---|---|---|
| track_id | Yes | stats.fm track id | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states 'Look up' which implies a read-only operation, but does not disclose what is returned, whether it can fail (e.g., track not found), any rate limits, or that it is safe/non-destructive. The lack of any return description or error handling leaves the agent uncertain about side effects and outcomes.
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, focused sentence with no waste. It is appropriately sized for a simple lookup tool, though it might be slightly too terse. Structure is clear and front-loads the core action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with two parameters, the schema already covers parameters and response_format hints at output formatting. However, there is no output schema, so the description does not explain what a successful lookup returns. While the response_format parameter implies output types, the description does not explicitly state the return payload structure. This is a moderate gap for a tool that is otherwise straightforward.
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 both track_id and response_format are already well-documented in the schema. The description adds only 'by id' which reinforces track_id but adds no new meaning. Since the schema handles the parameter details, the description meets the baseline without compensation being needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Look up'), a specific resource ('a track in the stats.fm catalog'), and the key identifier ('by id'). It distinguishes itself from siblings like statsfm_catalog_artist and statsfm_catalog_album, and from get_track which likely refers to Spotify. An agent can identify the tool's purpose without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context (when you have a stats.fm track id) but does not explicitly differentiate from alternatives. For example, it doesn't state when to use this instead of statsfm_search for finding a track, or versus statsfm_track_stats for statistics. The 'by id' hint is present but no explicit when/not-to-use guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsfm_charts_albumsC
All-time chart of a user's top albums with movement indicators
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 1โ100. Default: 20 | |
| offset | No | Start position (0-based). Default: 0 | |
| user_id | Yes | stats.fm user id or customId (e.g. "martijn") | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It implies a read-only chart operation, but it does not explicitly state that the tool has no side effects, that the target user's stats need to be public, or what data the movement indicators actually represent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence with the core intent front-loaded. It is not padded with trivia, though it is concise to the point of omitting useful usage or output context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a fairly simple, read-only chart tool with all schema fields documented, so the description is minimally sufficient for basic invocation. However, there is no output schema and the description does not define what the returned chart or movement indicators look like, which leaves some ambiguity for an agent choosing or parsing the result.
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 parameters are already well documented. The description adds light context by clarifying that the tool concerns a user's all-time album chart, but it does not add meaningful detail beyond the schema for parameters like limit, offset, max_results, or response_format.
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 identifies a specific resource (a user's all-time top albums) and a distinguishing feature (movement indicators), which helps separate it from similar siblings like statsfm_charts_tracks and statsfm_charts_artists. It lacks an explicit verb like 'list' or 'fetch', but 'chart of a user's top albums' is still readily interpretable.
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 alternatives such as statsfm_top_albums, statsfm_album_stats, or statsfm_charts_artists. The description implies usage through its wording but provides no exclusions, prerequisites, or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsfm_charts_artistsB
All-time chart of a user's top artists with movement indicators
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 1โ100. Default: 20 | |
| offset | No | Start position (0-based). Default: 0 | |
| user_id | Yes | stats.fm user id or customId (e.g. "martijn") | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for disclosing behavior. It mentions 'movement indicators' but doesn't explain what they mean (e.g., rank changes over time), nor does it state whether the tool is read-only, requires authentication, or handles invalid user_ids. The description is too brief to cover the behavioral context an agent needs for a data-retrieval 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, front-loaded sentence with no waste. It conveys the core purpose and a distinctive feature (movement indicators) efficiently. It earns every word.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 5 parameters and no output schema, so the description should compensate by explaining return format, pagination behavior, and edge cases. It only vaguely mentions 'movement indicators' without defining them, and fails to describe what the response contains (e.g., list of artists, ranks, changes). This is insufficient for an agent to anticipate the tool's output or handle potential errors.
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 all parameters (user_id, limit, offset, max_results, response_format) are already documented in the schema. The tool description adds no parameter-specific meaning beyond mentioning 'movement indicators,' which relates to output rather than parameters. Baseline 3 applies because the schema fully compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns an all-time chart of a user's top artists with movement indicators. It specifies the resource (artists) and the scope (all-time chart for a user), distinguishing it from sibling tools like statsfm_top_artists or statsfm_charts_albums. The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (for viewing all-time artist charts) but provides no explicit guidance on when to prefer this over similar tools like statsfm_top_artists or statsfm_charts_albums. No exclusions or alternatives are mentioned, leaving the agent to infer from the name. While not misleading, it lacks explicit decision criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsfm_charts_tracksA
All-time chart of a user's top tracks with movement indicators
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 1โ100. Default: 20 | |
| offset | No | Start position (0-based). Default: 0 | |
| user_id | Yes | stats.fm user id or customId (e.g. "martijn") | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden for behavioral transparency, but it only describes the output (chart of top tracks) without mentioning side effects, authentication requirements, or rate limits. 'Movement indicators' hints at output format but not how the tool behaves.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no redundancy. It front-loads the core purpose ('All-time chart of a user's top tracks') and adds a distinguishing feature ('movement indicators') without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should provide enough context about the return format and content. It mentions 'chart' and 'movement indicators' but does not explain what the response includes (e.g., track names, rankings, position changes) or how the response_format parameter affects output. Moderate complexity (5 params, 1 required) leaves room for ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (all parameters have descriptions), so the baseline is 3. The tool description adds no additional parameter semantics beyond what the schema already provides, such as specifying that limit/offset control pagination or that response_format changes the response shape.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns an all-time chart of a user's top tracks, with movement indicators. This distinguishes it from other top-track tools like statsfm_top_tracks, which likely lacks the 'movement indicators' aspect. The verb is implied but unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for all-time top tracks with movement direction, but it does not explicitly mention when to use this tool over siblings like statsfm_top_tracks or get_top_tracks. No exclusions or alternative references are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsfm_charts_usersA
Rank a stats.fm user's friends by total stream count (people chart)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 1โ25. Default: 10 | |
| user_id | Yes | stats.fm user id or customId (e.g. "martijn") | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. The wording 'Rank' implies a read-only operation with no side effects, which is accurate. Yet the description does not disclose potential limitations (e.g., requiring the user to have friends) or any special behaviors, leaving it neutral.
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, front-loaded sentence with no fluff. It immediately conveys the action and target, fitting the tool's simple nature perfectly.
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 straightforward read-only tool with a fully described schema, the description provides sufficient context to understand what it does. It lacks explicit output details, but no output schema is expected, and the simplicity of the operation keeps it complete enough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters with descriptions (user_id, limit, max_results, response_format). The tool description adds no additional parameter context, so the value stays at the baseline for full schema 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 verb 'Rank' and the specific resource 'a stats.fm user's friends by total stream count (people chart)'. It is distinct from sibling tools like statsfm_charts_artists, statsfm_charts_albums, and statsfm_charts_tracks by explicitly focusing on friends.
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 makes its purpose obvious, allowing an agent to infer when to use it (e.g., when needing a friends' ranking). However, it does not explicitly name alternative tools or state exclusion criteria, so it stops short of the highest guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsfm_exposure_checkA
Where does a subject sit on the exposure ladder โ unheard / sampled / explored / established / favorite? Evidence cites lifetime + recent counts. Read-only, no auth.
| Name | Required | Description | Default |
|---|---|---|---|
| subject | Yes | Artist, track, album, or genre name to check | |
| statsfm_user | Yes | stats.fm user ID (or username) โ public profile, no auth needed | |
| subject_type | No | Which top-list to check against. Default: artist | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden, and it does a creditable job: it discloses the safety profile ('Read-only, no auth'), the evidence inputs ('lifetime + recent counts'), and the output taxonomy (the five tiers). It stops short of explaining tier semantics or behavior for unknown subjects or invalid users, but the core behavioral traits an agent needs are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place: the core question, the evidence basis, and the safety/auth profile. The most decision-relevant fact (what the tool classifies) is front-loaded, and there is zero filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only classification tool with 4 params and no output schema, the description covers purpose, evidence basis, safety, and auth. The main gaps are the lack of sibling differentiation and no detail on what 'concise' vs 'detailed' vs 'json' responses contain โ though the schema's enum descriptions partially cover the latter. Overall sufficient for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters, including enum options for subject_type and response_format. The description adds the exposure-ladder framing and evidence basis, but it adds no per-parameter meaning beyond what the schema provides. With full schema coverage, the 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 clear purpose: it classifies a subject into one of five exposure tiers (unheard/sampled/explored/established/favorite) and specifies the evidence basis (lifetime + recent counts). The resource and output are concrete and specific. However, it doesn't differentiate from the nearly identically named sibling `exposure_check`, so an agent must infer the distinction from the statsfm_ prefix and tool ordering.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the usage context โ checking a subject's engagement level on a statsfm user profile โ but never explicitly states when to reach for this tool versus similar siblings like `exposure_check`, `statsfm_artist_affinity`, or `taste_obsession_ladder`. No alternatives are named and no exclusions are given, which is a genuine gap given the large, overlapping sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsfm_forgotten_favoritesB
High-lifetime tracks with zero recent plays โ favorites that fell off. Ranked by lifetime streams. Read-only, no auth.
| Name | Required | Description | Default |
|---|---|---|---|
| top_limit | No | Lifetime top tracks to scan. Default: 50 | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| statsfm_user | Yes | stats.fm user ID (or username) โ public profile, no auth needed | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the full burden, and it does disclose the two most important behavioral facts: the operation is read-only and requires no auth. It does not, however, disclose what 'recent' means as a time window, what happens for an invalid user ID, or whether results paginate. These are meaningful behaviors left to inference.
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, each earning its place: the selection concept, the ranking criterion, and the safety profile. Fully front-loaded with the core definition first, and zero filler or repetition of the tool name.
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 read-only analytics tool, the combination is quite complete: all 4 parameters are documented in the schema, response_format covers return style, and the description states the concept and safety profile. Minor gaps remain โ no output schema means the precise return shape is unspecified, and the 'recent plays' lookback window is undefined โ but these are secondary 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%, so the baseline is 3 and the schema already documents all four parameters well (top_limit scan scope, max_results defaults, user ID format, response_format modes). The tool description itself adds no parameter-level meaning beyond the schema, so no credit above baseline is warranted.
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 defines the tool's concept: high-lifetime tracks with zero recent plays, ranked by lifetime streams. The selection criteria and ordering are specific enough for an agent to understand what it returns. However, it does not differentiate from the sibling tool literally named 'forgotten_favorites' or the similar 'taste_forgotten_bangers', so it misses the top tier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus its close siblings 'forgotten_favorites' and 'taste_forgotten_bangers'. The 'Read-only, no auth' note is a constraint, not a selection heuristic. With roughly 300 siblings and at least two tools addressing the same 'forgotten favorites' concept, an agent has no basis for choosing among them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsfm_friend_countC
How many friends a stats.fm user has
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | stats.fm user id or customId (e.g. "martijn") | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavioral traits, and it discloses none. It does not say what the output looks like, what happens for an unknown user_id, whether response_format changes the shape of the result, or whether this is a safe 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?
The description is a single short fragment with zero padding, but it is under-specified rather than efficiently complete. It also reads as a question fragment ('How many friends...') rather than a declarative tool purpose, so the structure is acceptable but not exemplary.
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 two-parameter read tool with no output schema and no annotations, the description is too thin. It leaves out return behavior, error semantics, and differentiation from statsfm_friends, so an agent cannot fully predict the call flow without additional trial or external knowledge.
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 both parameters are already documented in the schema, giving a baseline of 3. The description adds only marginal meaning by clarifying that the result is a friend count for the given user, but it does not elaborate on either parameter beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool's resource (a stats.fm user's friend count) and what it computes, so an agent can tell it returns a count rather than a list. The name and description together differentiate it from the sibling statsfm_friends, but the description itself is a question-like fragment with no explicit verb or mention of the alternative, so it falls just 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?
There is no guidance on when to call this tool versus the many sibling statsfm tools (e.g., statsfm_friends, statsfm_resolve_user, other statsfm_stats tools). No context for selection is provided other than what the name implies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsfm_friendsB
List a stats.fm user's friends
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 1โ100. Default: 10 | |
| offset | No | Start position (0-based). Default: 0 | |
| user_id | Yes | stats.fm user id or customId (e.g. "martijn") | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description only says 'List'. It does not explicitly confirm read-only behavior, auth requirements, rate limits, pagination, or output shape beyond what the schema already exposes.
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, focused sentence with no redundant wording. The action and resource are front-loaded, making the purpose immediately clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and the schema covers parameters well, but with no output schema the description does not explain the returned friend-list structure or any edge cases such as public vs. private friend visibility. Some context 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 description coverage is 100% for all 5 parameters, so the description adds no meaningful parameter semantics beyond the baseline already provided by 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 ('List') and resource ('a stats.fm user's friends'). The tool name and sibling set distinguish it from statsfm_friend_count and statsfm_resolve_user.
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?
Gives no guidance on when to choose this over related tools, when not to use it, or which alternatives to prefer. No explicit usage context is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsfm_genre_artistsC
Artists tagged with a genre in the stats.fm catalog
| Name | Required | Description | Default |
|---|---|---|---|
| genre | Yes | Genre tag, e.g. "rock" or "hip-hop/rap" | |
| limit | No | 1โ100. Default: 10 | |
| offset | No | Start position (0-based). Default: 0 | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing side effects or safety. It does not mention whether the operation is read-only, whether it modifies data, or any other behavioral aspects. The phrase 'in the stats.fm catalog' hints at a lookup but does not explicitly state non-mutating 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, concise sentence that fully conveys the purpose without unnecessary words. It is perfectly sized for a simple lookup tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the schema is comprehensive and the description is clear, the lack of any context about output format, typical use cases, or relation to other statsfm tools makes it incomplete for an agent unfamiliar with the ecosystem. However, given the low complexity, a score of 3 (average) is fair.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% coverage with descriptions for all parameters (genre, limit, offset, max_results, response_format). The tool description adds no extra meaning beyond the schema, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the resource (artists) and the qualifier (tagged with a genre in the stats.fm catalog), which is specific enough to distinguish from other tools. However, it lacks an explicit verb like 'List' or 'Retrieve', making the action slightly ambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool vs alternatives. The description does not mention any conditions, prerequisites, or comparisons to similar statsfm tools such as statsfm_top_artists or get_artist_genres.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsfm_listening_erasA
Change points in monthly listening: groups months into eras split on top-artist turnover or >60% volume shifts. Read-only, no auth.
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| statsfm_user | Yes | stats.fm user ID (or username) โ public profile, no auth needed | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly discloses the read-only and no-auth behavior, which is valuable given no annotations are provided. It also reveals the algorithm's trigger conditions (top-artist turnover or >60% volume shifts), giving the agent realistic expectations about what 'era' boundary means. It stops short of describing output format, limits, or edge cases, but the core behavioral characterization is significantly above baseline.
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 terse sentences carry the algorithm, scope, auth profile, and read-only trait without filler. The core behavioral trigger is front-loaded, then the safety/auth note is appended. 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?
For a public-profile read-only tool with fully documented parameters, the description covers the essential trigger semantics and auth constraints. It doesn't define the return schema or edge-case handling (e.g., what happens with very few months of data), but the low complexity and clear read-only profile make the missing details non-critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description adds algorithmic context about what the statsfm_user parameter is used for and what the max_results might cap, although it doesn't elaborate on response_format semantics. The threshold explanation ('>60% volume shifts') gives meaning to the output without directly referencing parameters, so it adds modest value 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 states a specific analytical taskโidentifying change points in monthly listening and segmenting months into eras based on top-artist turnover or volume shiftsโwith clear scope. This distinguishes it from siblings like statsfm_listening_sessions, listening_streaks, and statsfm_recaps, while the 'read-only, no auth' qualifier differentiates it from mutation-oriented 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 makes clear this is a read-only analysis tool for statsfm user public profiles, and the threshold logic (top-artist turnover or >60% volume shifts) tells an agent when the output is relevant. However, it doesn't explicitly name alternative tools or offer when-not-to-use guidance, though the sibling list contains related analysis tools like listening_sessions that could have been called out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsfm_listening_sessionsA
Group recent streams into sessions: a gap longer than gap_minutes starts a new session (default 30). Read-only, no auth.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Streams to fetch. Default: 100 | |
| gap_minutes | No | Inactivity gap that splits sessions. Default: 30 | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| statsfm_user | Yes | stats.fm user ID (or username) โ public profile, no auth needed | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden and does meaningful work: it states 'Read-only, no auth,' which addresses safety and access requirements, and it discloses the session-splitting rule (gap longer than gap_minutes starts a new session). This goes beyond what the schema alone provides. It could add more (output shape, sorting, edge cases), but the key safety profile is clearly conveyed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, roughly 19 words, with the primary action front-loaded and the safety/scope note appended. Every clause earns its placeโalgorithm, default, read-only status, and auth requirementโwith zero filler 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 covers the core semantics and safety, but there is no output schema to fall back on, and the description never explains what a 'session' looks like in the return value (start/end times, stream counts, structure). Additionally, with 5 parameters and a close sibling `listening_sessions`, the lack of differentiation or output-shape guidance leaves the agent with notable gaps for a moderate-complexity tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds only marginal value beyond the schema: it clarifies the gap_minutes behavior slightly ('a gap longer than gap_minutes starts a new session') and confirms the user/public data theme, but it doesn't meaningfully elaborate on limit, max_results, or response_format, which are already well-documented in 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 states a specific verb+resource ('Group recent streams into sessions') and explains the core algorithm (gap-based splitting with default 30 minutes). This is clear and substantive. It loses the 5 because it doesn't differentiate itself from the near-identical `listening_sessions` sibling tool, so an agent cannot tell which of the two to invoke.
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 context is implied: use this when you want to segment recent listening history into sessions. However, there is no explicit when-to-use guidance, no exclusions, and no mention of alternatives like `listening_sessions`, `session_stats`, or `session_length_report`, which an agent might confuse with this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsfm_now_playingB
What a stats.fm user is playing right now (null when idle)
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | stats.fm user id or customId (e.g. "martijn") | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not explicitly state that this is a read-only operation or disclose any potential side effects, errors, or authorization requirements. The only behavioral detail is the null return when idle, which is insufficient for full transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that immediately conveys the tool's purpose. There is no extraneous information or unnecessary length, making it highly efficient for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple now-playing lookup, the description provides enough context: it tells what the tool does and the idle case. However, it could be more complete by explicitly noting that it queries the stats.fm service (already evident from the name) or by mentioning any rate limits or required user consent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already includes descriptions for both parameters (user_id and response_format). The tool description adds no additional meaning beyond what the schema provides, earning the baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: retrieving what a stats.fm user is currently playing. The inclusion of 'null when idle' adds important specificity about the return value, making the purpose unmistakable.
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 over the many similar siblings (e.g., get_now_playing, get_currently_playing). The description does not mention any differentiating conditions or preferences, leaving the selection decision to the agent without hints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsfm_recapsB
Year-in-review recap: stream totals and catalog breadth for one calendar year
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Calendar year. Default: current year | |
| user_id | Yes | stats.fm user id or customId (e.g. "martijn") | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavior. It does not state whether the tool is read-only, whether it calls a remote API, whether authentication is needed, or whether any side effects or rate limits apply.
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, compact sentence with no fluff. It could be improved with a verb and a slightly more organized structure, but it remains efficient and readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description only vaguely mentions 'stream totals and catalog breadth.' It does not clarify what fields are returned, what 'catalog breadth' includes, or how the response_format parameter changes the output. This leaves important context missing for correct invocation and result expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All parameters are described in the schema itself, so the tool description adds little semantic value beyond what the schema already provides. The baseline of 3 applies because schema coverage is 100%.
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 tool as a year-in-review recap with stream totals and catalog breadth for a calendar year. It lacks an explicit verb or a crisp contrast with siblings like statsfm_top_tracks, but the purpose is still specific and understandable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for annual recap purposes but does not explicitly state when to choose this tool over sibling tools such as year_in_review, year_explorer, or statsfm_top_tracks. No exclusions or alternative guidance are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsfm_recent_streamsC
A stats.fm user's recently played streams
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Only streams after this Unix-ms timestamp | |
| limit | No | 1โ100. Default: 20 | |
| before | No | Only streams before this Unix-ms timestamp | |
| user_id | Yes | stats.fm user id or customId (e.g. "martijn") | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present and the description gives no behavioral details. It does not state whether the tool is read-only, whether it requires authentication, whether it has rate limits, or what side effects might occur.
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 very short and front-loaded, but it is under-specified rather than efficiently complete. It reads more like a label than a functional description, leaving out the verb and key context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and the description does not explain what the returned streams look like, how many are returned by default, or how response_format changes the output. The schema's enum description helps, but the overall context is incomplete for an agent to confidently select and call the 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 covers all six parameters with descriptions, so the baseline is met. However, the tool description itself adds no additional meaning beyond the schema fields such as the exact timestamp format, default ordering, or interaction between after/before and limit/max_results.
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 identifies the resource (stats.fm recent streams) but uses a noun phrase instead of an explicit verb like 'get' or 'list'. It is somewhat distinguishable from the many statsfm_* siblings by the 'recent_streams' name, but does not clearly state the action or scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as get_recently_played, statsfm_streams_stats, or statsfm_now_playing. No conditions, exclusions, or example scenarios are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsfm_record_feedbackA
Record a local-only taste verdict (love/like/mixed/boring/dislike) or list stored verdicts. Never touches the network โ memory for future recommendations.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Optional free-text note | |
| action | No | record (default) stores a verdict; list returns stored verdicts | |
| rating | No | Required for record | |
| subject | No | Track/artist/album/genre name. Required for record | |
| subject_type | No | Required for record | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly states this is a local-only operation, never touches the network, and persists verdicts as memory for future recommendations. It does not detail return behavior for the 'record' action, but the side-effect profile is transparently conveyed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with zero filler. The core action is front-loaded, the rating values are compactly listed, and the key privacy trait ('never touches the network') is stated in a memorable closing sentence.
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 tool with six parameters and no output schema, the description gives enough context to understand the tool's purpose, offline behavior, and memory aspect. It does not describe the exact return format or the response_format parameter, but the schema covers parameter details and the tool is conceptually simple.
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 parameters. The description adds the rating values and the record/list action split, but these largely duplicate the schema enum and parameter descriptions rather than adding new semantic 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?
Description uses specific verbs ('Record', 'list') and a clear resource ('local-only taste verdict'), and enumerates the exact rating scale. It also states the local-only nature, which distinguishes it from the similarly named sibling tool 'record_feedback'.
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 clearly conveys when to use this tool: for local, offline taste memory and future recommendations. It does not explicitly name an alternative or say 'use record_feedback instead', but the 'never touches the network' framing gives strong contextual guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsfm_records_artistsC
Record-holding artists of a stats.fm user (longest streaks, top milestones)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 1โ100. Default: 10 | |
| offset | No | Start position (0-based). Default: 0 | |
| user_id | Yes | stats.fm user id or customId (e.g. "martijn") | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the basic purpose and omits pagination behavior, response format, auth requirements, or that this is a read-only query. An agent has little signal on what to expect when calling it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler โ efficient and easy to scan. It is slightly thin and could benefit from one additional sentence of context, but it 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 tool with 5 parameters, no output schema, and no annotations, the description is thin. It doesn't explain what 'record-holding' means precisely, how limit interacts with max_results, or what the response looks like. An agent would have to inspect the schema and infer semantics.
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% โ all five parameters (limit, offset, user_id, max_results, response_format) are documented in the schema with defaults and formats. The description adds no parameter-level detail beyond the schema, which is acceptable given the high coverage. 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 clearly identifies the resource ('record-holding artists') and the owner (a stats.fm user), and adds examples of what qualifies ('longest streaks, top milestones'). It's distinguishable from siblings like statsfm_top_artists or statsfm_charts_artists, though it doesn't explicitly name the differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as statsfm_top_artists, statsfm_charts_artists, or statsfm_artist_stats. No exclusions, prerequisites, or context selecting this tool are given, 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.
statsfm_resolve_userA
Resolve a stats.fm user id or customId to their profile (falls back to user search)
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | stats.fm user id or customId (e.g. "martijn") | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of explaining behavior. It reveals a fallback behavior (user search) which is useful, but it does not explicitly state whether the operation is read-only, whether it makes network requests, or any other side effects. This leaves some ambiguity about the tool's runtime 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, concise sentence that packs the core functionality and the fallback behavior. It is well-structured and to the point, with no superfluous words. This makes it easy for an agent to quickly grasp the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (two parameters, no output schema), the description is adequate. It states what the tool does and the fallback behavior, which is sufficient context for an agent to determine when to call it. It does not need to elaborate on return values or other details since there is no output schema and the tool's scope is narrow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers both parameters with detailed descriptions: 'user_id' includes an example, and 'response_format' enumerates values with explanations. Since the schema coverage is 100% and the descriptions are thorough, the tool description itself does not add extra meaning beyond what is already in the parameter definitions. The baseline of 3 applies because the description does not supplement 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 tool's purpose: to resolve a stats.fm user ID or customId to their profile. It uses a specific verb ('Resolve') and names the resource (stats.fm user profile), making it unambiguous. The mention of the fallback to user search also provides additional context, distinguishing this from a simple ID lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool by noting that it falls back to user search, suggesting that it is appropriate when you have an ID and want the corresponding profile, and that search is a fallback if the ID is not found. However, it does not explicitly contrast with sibling tools like 'search' or 'get_user_profile', which would give clearer guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsfm_searchC
Search the stats.fm catalog (tracks, artists, albums, playlists, users)
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Comma-separated subset of track,artist,album,playlist,user. Default: track,artist,album | |
| limit | No | 1โ50. Default: 10 | |
| query | Yes | Search text | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only says 'Search the stats.fm catalog' โ it does not disclose that this queries a third-party service (possible rate limits/auth needs), what the default return shape is, or how results are ordered. 'Search' weakly implies read-only, but for a tool with zero annotation coverage this is a significant 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 a single front-loaded sentence with no wasted words โ verb, resource, and scope all appear immediately. It is efficiently sized, though slightly under-specified; a second sentence about when to prefer it over siblings would have earned 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?
The schema is rich and fully documents parameters, so invocation details are covered. However, the sibling set contains many ambiguity-prone search tools, and the description does nothing to help an agent select statsfm_search over them. For a tool with no annotations and no output schema, the description omits the critical selection context needed for correct 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 description coverage is 100%, so the schema already documents query, type, limit, and response_format fully. The description's parenthetical entity list lightly echoes the 'type' parameter's schema description without adding new meaning. Per the baseline for high schema coverage, a 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Search the stats.fm catalog', and enumerates the entity types covered in parentheses. It is clear about what it does, but it does not explicitly distinguish itself from the many sibling search tools (search, search_advanced, search_fresh, search_tracks, etc.), leaving the agent to infer that 'stats.fm catalog' is what separates it from the generic 'search' tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With roughly a dozen sibling search tools (search, search_history, search_saved_tracks, search_advanced, search_within_playlist, search_by_isrc, etc.), there is no statement of when statsfm_search is the right choice, when it is not, or which alternative to prefer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsfm_streams_statsA
Aggregate listening stats (totals, percentiles, catalog cardinality) for a user, optionally windowed
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Only streams after this Unix-ms timestamp | |
| before | No | Only streams before this Unix-ms timestamp | |
| user_id | Yes | stats.fm user id or customId (e.g. "martijn") | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description conveys the core behaviorโaggregating user listening statsโand mentions optional windowing. But with no annotations provided, it does not disclose details like default time range, handling of unknown user IDs, or whether the operation is read-only, leaving some behavioral context to inference.
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 front-loaded sentence with no filler. It communicates the action, resource, output categories, and an optional modifier while remaining compact and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential action and scope, and the schema covers all parameters. However, with no annotations and no output schema, the agent is left without explicit detail on return structure, default behavior when no window is provided, or how this tool relates to the many sibling statsfm statistics tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains user_id, after, before, and response_format. The description adds a high-level framing around aggregation and windowing but does not materially deepen parameter-level understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Aggregate') and resource ('listening stats') and lists concrete output categories: totals, percentiles, catalog cardinality. It is clear about the user-level scope and optional windowing, though it does not explicitly differentiate itself from sibling stats tools like statsfm_track_stats or statsfm_artist_stats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it: when you need aggregated listening statistics for a user, optionally over a time window. However, it names no alternatives and gives no exclusion criteria, leaving the agent to infer the distinction from sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsfm_taste_profileA
Taste snapshot from stats.fm: core artists, top genres, loyalty-vs-novelty balance, and day-parting (when you listen). Read-only, no auth.
| Name | Required | Description | Default |
|---|---|---|---|
| range | No | stats.fm range window. Default: lifetime | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| statsfm_user | Yes | stats.fm user ID (or username) โ public profile, no auth needed | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure, and it explicitly states 'Read-only, no auth.' This is a valuable safety and access trait. It does not cover rate limits or error behavior, but for a public read-only stats.fm lookup, the key behavioral facts are present.
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, information-dense sentence that front-loads the tool's purpose and immediately adds the read-only/no-auth context. There is no filler and no repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool, the description plus a fully documented four-parameter schema is largely sufficient to invoke it correctly. The lack of an output schema is partially mitigated by the response_format parameter and the listed data categories, though exact return-value structure is not described.
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 every parameter already has a meaningful schema description: range, max_results, statsfm_user, and response_format. The description adds no parameter-level detail beyond what the schema already provides, so the baseline score 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 identifies a specific resource: a stats.fm taste snapshot, and lists concrete contents: core artists, top genres, loyalty-vs-novelty balance, and day-parting. This clearly communicates what the tool returns and distinguishes it from tools like statsfm_top_artists or statsfm_top_genres, though it does not explicitly differentiate from the sibling taste_profile.
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 this tool is for getting an overall taste-level snapshot from stats.fm, but it offers no explicit when-to-use guidance or exclusions. Given the large number of overlapping statsfm_* and taste_* sibling tools, explicit routing would improve selection accuracy.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsfm_taste_recommendationsA
Bridge-mode recommendations: adjacent genres/artists between the listenerโs core and the unexplored, each with evidence and a risk note. Heuristic over stats.fm tops โ read-only, no auth.
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| statsfm_user | Yes | stats.fm user ID (or username) โ public profile, no auth needed | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does substantial work: it discloses read-only semantics, no-auth requirement, and that the output is heuristic (approximate, not guaranteed), plus the per-item output shape (evidence + risk note). This sets accurate expectations for safety and quality. It does not cover rate limits, determinism, or error behavior, but the essential operational traits are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences deliver mode, scope, output structure, data source, heuristic nature, safety, and auth state in roughly 25 words. The key concept ('Bridge-mode recommendations') is front-loaded, and no sentence is redundant with the schema. This is efficient, telegraphic communication with zero waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema and no annotations, the description compensates well by naming the return shape (recommendations each with evidence and a risk note) and the operational profile (read-only, no auth). The remaining gap is disambiguation from the overlapping sibling `taste_recommendations` and any notes on how the three response_format values alter output โ the schema documents the enum but not the practical differences between 'concise', 'detailed', and 'json'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% โ all three parameters (statsfm_user, max_results, response_format) already carry descriptions in the schema, including defaults, constraints, and enum semantics. The description adds no parameter-level detail, so it correctly relies on the schema rather than duplicating it. 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 names a specific deliverable โ bridge-mode recommendations โ and defines scope precisely: adjacent genres/artists between the listener's core and unexplored territory, each with evidence and a risk note. It also identifies the data source (stats.fm tops) and heuristic nature. However, it never explicitly contrasts with the near-identically-named sibling `taste_recommendations`; the 'bridge-mode' qualifier implies the distinction without stating it.
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 context is implied through 'bridge-mode' (suggesting the user wants connections between known and unknown territory) and 'read-only, no auth' (suggesting safe, self-service use). But there is no explicit when-to-use guidance, no when-not-to-use conditions, and no routing to alternatives such as `taste_recommendations`, `taste_genre_bridge`, or `statsfm_exposure_check` โ all of which exist in the sibling list and overlap in scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsfm_top_albumsC
A stats.fm user's most-streamed albums
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 1โ100. Default: 10 | |
| range | No | Ranking window. Default: lifetime | |
| offset | No | Start position (0-based). Default: 0 | |
| user_id | Yes | stats.fm user id or customId (e.g. "martijn") | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description must carry the full burden. It does indicate an implied read operation and that the results are ranked by streaming counts, but it says nothing about pagination, response format, sorting, authentication, or any other operational 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 short phrase, but it is more under-specification than concise. For a tool with 6 parameters and no output schema, this level of brevity omits important practical details, so the piece does not earn its place as a functional description.
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 should say what the caller will receiveโe.g., a list of albums ordered by streams, with default formatting. It only says 'most-streamed albums', which is enough to identify the topic but not enough to understand the return shape or constraints such as limit and offset.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes all six parameters, with descriptions and enums for `range` and `response_format`. Since schema description coverage is 100%, the baseline is 3; the description itself adds no parameter-level information or context that the schema does not already provide.
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 ('a stats.fm user's most-streamed albums') but does not use an explicit verb like 'get' or 'list'. It is clear about the domain and the user-scoping, though it does not itself distinguish from closely related siblings such as statsfm_top_albums_from_artist, leaving that inference to the tool name.
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 text offers zero guidance on when to choose this tool over alternatives. It does not mention related tools like statsfm_top_tracks, statsfm_top_albums_from_artist, or statsfm_album_stats, nor does it provide any context for when a user should call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsfm_top_albums_from_artistC
A user's top albums from one artist
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 1โ100. Default: 10 | |
| range | No | Ranking window. Default: lifetime | |
| offset | No | Start position (0-based). Default: 0 | |
| user_id | Yes | stats.fm user id or customId (e.g. "martijn") | |
| artist_id | Yes | stats.fm artist id | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full burden of behavioral disclosure. It only states the result (top albums) without mentioning pagination, response format, or any side effects. It does not clarify that this is a read-only operation or how it handles limits and offsets beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, using a single short phrase. It is front-loaded and efficient, but may be overly terse, sacrificing useful context for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that this tool has 7 parameters and sits among many similar sibling tools, the description is inadequate. It does not explain the relationship between user_id and artist_id, nor does it address the output structure or any constraints. The agent would need to rely on the schema alone to understand the tool's behavior, which is risky.
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 parameters are fully documented in the schema. The description adds no additional meaning beyond what is already present, which meets the baseline but does not enhance understanding of parameter interactions or defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states that it returns a user's top albums from a specific artist, which is a clear purpose. However, it does not differentiate from similar siblings like statsfm_top_tracks_from_artist or statsfm_top_albums, leaving some ambiguity about scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, typical use cases, or exclusions, so an agent cannot determine if this is the right tool without additional inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsfm_top_artistsC
A stats.fm user's most-streamed artists
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 1โ100. Default: 10 | |
| range | No | Ranking window. Default: lifetime | |
| offset | No | Start position (0-based). Default: 0 | |
| user_id | Yes | stats.fm user id or customId (e.g. "martijn") | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since annotations are absent, the description should clarify whether the operation is read-only and any side effects or access requirements. It only states a data fact, leaving behavioral aspects unspecified.
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 short phrase with no filler, which is concise. However, it could be improved by adding a verb like 'Get' for better structure.
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 does not explain the return structure, the meaning of response_format, or the difference between limit and max_results, which are essential given the six-parameter schema. This leaves the description incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All six parameters have descriptions in the schema, covering range, limit, offset, etc. The tool description adds no additional semantic information, so it meets the baseline for schema 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 identifies the resource (a stats.fm user) and the data returned (most-streamed artists), but it is phrased as a noun phrase rather than an explicit action, which slightly reduces clarity.
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 does not mention alternative tools or provide any condition for when to use this tool over siblings like statsfm_top_tracks, so an agent receives no guidance on tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsfm_top_genresC
A stats.fm user's most-streamed genres
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 1โ100. Default: 10 | |
| range | No | Ranking window. Default: lifetime | |
| offset | No | Start position (0-based). Default: 0 | |
| user_id | Yes | stats.fm user id or customId (e.g. "martijn") | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description bears full responsibility for behavioral disclosure. It does not state this is a read-only query, how results are aggregated or ordered, whether the response is a simple list or includes counts, or any caveats about missing user data. The description implies read-only intent but otherwise leaves the agent blind to behavior. A description for a rank-query tool should mention the output shape or ranking semantics, especially with no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and contains no filler, but it is also under-specified. It is a noun phrase rather than a full instruction, so its brevity does not earn it credit for being efficient โ it is simply minimal. A clear sentence like 'Retrieve a stats.fm user's most-streamed genres, ranked by stream count' would be as short and far more useful.
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 6 parameters, 2 enums, no output schema, and a large library of sibling stats.fm tools, the context is sparse. The description fails to say how the result will be presented (list of genre names? rankings and counts?), what data window is used by default, or how this tool relates to similar ones like statsfm_genre_artists. The schema covers parameter mechanics, but not the conceptual context an agent needs to understand what calling this tool will return.
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 every parameter has a description and the baseline is 3. The tool description adds minimal semantic value beyond that, only implying that the result is about 'most-streamed' genres, which hints at ranking by stream count. It doesn't enrich understanding of how range or limit impact the result, but the schema already covers those details, so this is adequate.
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 reads as a noun phrase: 'A stats.fm user's most-streamed genres.' It identifies the resource (genres) and scope (a stats.fm user) but never uses a verb like 'get', 'list', or 'fetch'. This is clearer than a pure tautology, and the word 'genres' distinguishes it from siblings like statsfm_top_artists or statsfm_top_tracks, but the lack of an explicit action leaves purpose somewhat ambiguous.
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 vs. alternatives like statsfm_top_artists, statsfm_genre_artists, or statsfm_top_tracks. No context is provided about what query should route an agent here, and no exclusions or alternative tool names are mentioned. An agent must infer usage entirely from the tool name and sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsfm_top_tracksC
A stats.fm user's most-streamed tracks
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 1โ100. Default: 10 | |
| range | No | Ranking window. Default: lifetime | |
| offset | No | Start position (0-based). Default: 0 | |
| user_id | Yes | stats.fm user id or customId (e.g. "martijn") | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the burden of explaining behavior. It only states the output (most-streamed tracks) and does not disclose whether it is read-only, how ranking is determined, what the default range is, or how pagination works.
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 very short and has no wasted words, but it is under-specified. It is concise at the cost of useful detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does not explain the return format, default range, or response_format behavior. The schema covers parameters, but the tool still feels underspecified for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All six parameters already have descriptive schema text, so the description adds little beyond the schema. It does not clarify parameter interactions or provide additional meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (a user's most-streamed tracks) and clearly distinguishes it from artist/album-specific top-track tools, but it lacks an explicit verb like 'get' or 'list'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this over sibling tools such as statsfm_top_artists, get_top_tracks, or statsfm_track_stats; the description does not state use cases or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsfm_top_tracks_from_albumC
A user's top tracks from one album
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 1โ100. Default: 10 | |
| range | No | Ranking window. Default: lifetime | |
| offset | No | Start position (0-based). Default: 0 | |
| user_id | Yes | stats.fm user id or customId (e.g. "martijn") | |
| album_id | Yes | stats.fm album id | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does not state that this is a read-only query, nor does it disclose defaults (limit 10, range lifetime), pagination behavior, response format, or any authorization requirements. The read-like nature is only implied by the word 'top tracks,' never made explicit.
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 compact and front-loaded with no filler words, and every word does contribute to identifying the resource. However, it is an under-specified noun phrase that omits a verb and any operational context, so its brevity comes at the expense of substance for a tool with seven parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 7 parameters, no annotations, and no output schema, the description is incomplete. It does not explain return values, ranking windows, defaults, or how it differs from closely related siblings in a long list of statsfm tools. An agent would need to infer nearly everything from parameter names and enum values, which is insufficient for reliable selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents all seven parameters including bounds, enums, defaults, and the meaning of user_id and album_id. The description adds nothing about parameters; the phrase 'one album' loosely suggests a single album_id, but the schema already conveys this, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description is a noun phrase that largely restates the tool name: 'A user's top tracks from one album.' It does identify the resource (a ranked list of tracks from a single album for a given user) and hints at differentiation from siblings like statsfm_top_tracks or statsfm_top_tracks_from_artist, but it lacks a verb and never states the operation or what is returned, so it adds little beyond the name.
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 alternatives such as statsfm_top_tracks, statsfm_top_tracks_from_artist, or statsfm_album_stats. The description does not mention recommended scenarios, exclusions, or how this tool relates to the other statsfm ranking tools, so an agent must infer usage purely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsfm_top_tracks_from_artistC
A user's top tracks from one artist
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 1โ100. Default: 10 | |
| range | No | Ranking window. Default: lifetime | |
| offset | No | Start position (0-based). Default: 0 | |
| user_id | Yes | stats.fm user id or customId (e.g. "martijn") | |
| artist_id | Yes | stats.fm artist id | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral transparency. It does not state that this is a read-only lookup, mention whether it queries stats.fm or Spotify, or describe any side effects or errors. Only the noun phrase 'top tracks' implies a data return.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise phrase with no filler. It is front-loaded with the key subject, though it is grammatically a noun phrase rather than a complete sentence.
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 lookup with a fully documented schema, the one-line description is mostly sufficient, but it does not describe the return shape or distinguish output variants (concise/detailed/json) beyond what the response_format parameter already implies. Given no output schema, a bit more context would help.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already contains full descriptions for all 7 parameters, including defaults and enum meanings. The tool description adds no extra parameter context, so it meets but does not exceed the baseline for schema 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 identifies the resource (user's top tracks) and the filter (one artist), distinguishing it from sibling tools like statsfm_top_tracks_from_album. However, it lacks an explicit verb such as 'Retrieves', so it falls just short of a top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to choose this tool over similar siblings (e.g., statsfm_top_tracks, artist_top_tracks, get_artist_top_tracks). The description only states what the tool returns, not the conditions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsfm_track_date_statsB
Stream totals for one track within a date window
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Only streams after this Unix-ms timestamp | |
| limit | No | 1โ500. Default: 100 | |
| before | No | Only streams before this Unix-ms timestamp | |
| user_id | Yes | stats.fm user id or customId (e.g. "martijn") | |
| track_id | Yes | stats.fm track id | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden of disclosing behavioral traits. The description does not explicitly state that this is a read-only operation or that it has no side effects. While a stats tool likely implies non-mutating behavior, this is not stated, leaving some ambiguity.
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, compact sentence that conveys the core purpose without unnecessary words. It clearly states the subject (one track) and the scope (date window). There is no fluff or redundant information, making it highly 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?
The description provides enough context to understand the primary function, especially with the schema detailing parameters like after, before, and response_format. It does not explicitly describe the output structure, but the response_format parameter hints at presentation options. Overall, it is sufficiently complete for a simple stats query, though a brief note on output granularity would enhance clarity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters with descriptions, so the baseline is 3. The tool description does not add further semantic detail about the parameters, but it does align with the schema by mentioning a 'track' and 'date window'. Since the schema is already thorough, no additional parameter explanation is necessary.
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 provides stream totals for a single track over a date range, which aligns with the tool name. However, it lacks an explicit verb like 'get' or 'retrieve', making it slightly ambiguous as a command. It effectively distinguishes itself from similar tools by emphasizing the date-window aspect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives such as statsfm_track_stats or statsfm_artist_date_stats. The description does not mention any conditions or scenarios that would make this tool preferable. Without explicit usage instructions, the agent must infer context from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsfm_track_statsB
Stream totals for one track within a user library
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 1โ100. Default: 50 | |
| user_id | Yes | stats.fm user id or customId (e.g. "martijn") | |
| track_id | Yes | stats.fm track id | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, and the description does not state whether this is read-only, whether authentication is required, or whether rate limits or pagination apply. It is likely a query, but the safety and side-effect profile is not made explicit.
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, focused sentence that front-loads the core purpose with no filler or redundant detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple query tool with well-documented parameters and no output schema, the description is sufficient to understand the scope. It does not provide extra context such as time range or aggregation details, but nothing essential is missing 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 coverage is 100% and each parameter already has a useful description, including limit range/default, user_id format, track_id type, and response_format values. The tool description adds no additional parameter meaning, so the 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?
States a specific action ('stream totals') and a specific resource ('one track within a user library'), which clearly distinguishes it from sibling statsfm tools like statsfm_track_date_stats, statsfm_artist_stats, or statsfm_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?
Provides no explicit guidance on when to prefer this tool over alternatives, nor any exclusions or prerequisites. The intended use must be inferred from the name and the short description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
subscribe_to_showA
Save one or more shows to your library (PUT /me/shows) โ previews a deterministic PLAN by default; pass dry_run=false to commit.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Default true โ pass false to commit. | |
| show_ids | Yes | Show IDs/URIs to save (1โ50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does this well by explicitly stating that the tool previews a deterministic PLAN by default and only changes anything when dry_run=false. For a mutation-capable tool, this boundary between read-only preview and side-effecting commit is exactly the behavioral context an agent needs. It could also mention idempotency or partial-failure behavior, but the current disclosure is strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with the action, and immediately provides the crucial default-safe behavior. There is no filler, and the inclusion of the endpoint in parentheses is a useful compact addition. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter tool with 100% schema coverage and no output schema, the description covers the necessary invocation context: what it does, the endpoint, the default plan preview, and how to commit. It does not enumerate edge cases like duplicate show IDs, invalid IDs, or partial failures, but those are not essential for an agent to invoke the tool correctly. The description is sufficiently complete for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so all three parameters (show_ids, dry_run, response_format) are already fully documented in the schema. The description adds value by tying dry_run to the PLAN-vs-commit semantics, which reinforces the schema's own dry_run text. This is a reasonable baseline-3 case: the schema does the heavy lifting and the description adds a small but meaningful behavioral clarification.
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 verb and resource: 'Save one or more shows to your library', and even includes the underlying endpoint (PUT /me/shows). This clearly distinguishes it from sibling tools like unsubscribe_from_show or remove_saved_shows, despite the large sibling list. The action and scope are completely unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear guidance on the dry_run default: preview the deterministic PLAN by default, and pass dry_run=false to actually commit. This tells an agent when it is safe to call and what flag flips it into a mutating mode. It does not name alternative tools for similar operations, but for this tool the primary usage decision is the dry-run versus commit choice, which is explicitly covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
surprise_meA
"Surprise me": picks a random saved track, saved album, or owned playlist and plays it. Randomness seedable via seed for reproducible picks. Quota: ๐ก 1-3 reads + 1 write (PUT /me/player/play).
| Name | Required | Description | Default |
|---|---|---|---|
| seed | No | Seed for reproducible picks (omit for true randomness) | |
| type | No | What to surprise you with (default any) | any |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| device_id | No | Target device id | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
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 โ and it delivers. It explicitly discloses the mutation ('1 write (PUT /me/player/play)'), the quota cost ('1-3 reads'), and seedable reproducibility. This is strong transparency for a playback-affecting tool. It stops short of covering device-selection behavior or failure modes like an empty library or no active device.
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 waste. The core behavior is front-loaded first, followed by the seed capability and quota cost. Each sentence earns its place, and the quota note is compact operational context rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The core behavior, write operation, and quota are well covered, and the schema fully documents all 5 parameters. However, with no annotations and no output schema, the description omits practical context an agent needs: default device behavior, what happens with an empty library, and whether current playback is interrupted.
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 baseline is 3. The description's seed mention ('Randomness seedable via seed for reproducible picks') largely duplicates the schema's own seed description. It adds no extra meaning for type, device_id, dry_run, or response_format beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'picks a random saved track, saved album, or owned playlist and plays it.' The scope is precise about which item types are eligible, and the play action makes the tool's function unmistakable even against a large sibling list containing similar random-pick 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 behavior description implies when to use it (user wants a random surprise pick played from their library), but there is no explicit alternative routing or exclusion. With siblings like saved_tracks_roulette, daily_pick, and continue_last present, an agent receives no guidance on how to distinguish this tool from them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
switch_deviceA
Transfer playback to a device by fuzzy name or sidecar label โ pure handoff, no content args (complements play_on which plays content, and handoff which is pos-preserving id-only). Quota: ๐ข 1 read + 1 write.
| Name | Required | Description | Default |
|---|---|---|---|
| play | No | true = keep playing on the target (default); false = transfer paused | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| device_name | Yes | Device name substring (case-insensitive), exact id, or sidecar label | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the disclosure burden. It clearly states this is a pure handoff with no content arguments and even discloses quota cost (1 read + 1 write). It does not detail failure behavior or side effects on the old device, but the core behavioral traits are 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?
Two dense sentences deliver the action, the selection mechanism, the distinction from siblings, and quota information. The most decision-relevant details are front-loaded, and 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?
For a moderately complex tool with no annotations and no output schema, the description covers purpose, alternatives, and cost. It could add failure behavior or a pointer to device discovery, but the essential selection and invocation context is present.
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 schema already documents all parameters. The description adds useful framing around device_name ('fuzzy name or sidecar label') and reinforces 'no content args', but does not meaningfully explain play, dry_run, or response_format beyond their existing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Transfer playback to a device', and adds a clear selection mechanism ('fuzzy name or sidecar label'). It explicitly contrasts with play_on (plays content) and handoff (position-preserving id-only), which makes the tool's role unmistakable.
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 names two siblings and explains the key differences: play_on plays content, while handoff is id-only and position-preserving. It does not mention the sibling transfer_playback, which could plausibly overlap, so the routing guidance is strong but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tag_listening_sessionB
Tag a listening session (auto-detected 30-min gaps from recently-played) with labels.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Optional note | |
| tags | No | Tags to attach | |
| session_id | Yes | Session id (or new label to create) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it only adds context about how sessions are detected. It omits critical behavioral details: session_id appears overloaded ('or new label to create' per the schema), and it doesn't state whether tags replace existing tags, are appended, or whether the change is reversible. It also doesn't mention side effects or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that states the action first and tucks the session-detection context into a parenthetical. Every word earns its place, and there is no filler 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?
For a mutation tool with four parameters, no annotations, and no output schema, the description is under-specified. It doesn't explain what the tool returns on success, how tags are applied (append vs. replace), how to use the 'new label to create' capability, or how it relates to tag_management and session-report 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?
The input schema provides descriptions for all four parameters, so the baseline is 3. The description itself adds no parameter-level explanation and does not clarify the ambiguous 'Session id (or new label to create)' behavior described in the schema, so it neither helps nor hurts beyond the 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 uses a specific verb ('Tag') and a clear resource ('listening session'), and it defines what counts as a session via 'auto-detected 30-min gaps from recently-played.' This makes the tool's purpose unambiguous and easily distinguishable from session-querying siblings like describe_listening_session or list_sessions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus related alternatives such as tag_management, describe_listening_session, or listening_session_start. There are no exclusions, prerequisites, or context about whether sessions need to exist first. The usage scenario is only implied by the action verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tag_managementA
Declare or retract genre tags for an artist in your local sidecar (~/.spotify-mcp/genre-tags.json), which library_genre_report and filter_by_genre consume. add requires at least one tag; remove drops the listed tags, or the artist entirely when none are listed. Supports dry_run preview.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Tags to add/remove; omit on remove to drop the artist entirely | |
| action | Yes | add tags to an artist, or remove tags/artist | |
| artist | Yes | Artist name exactly as it appears in your library | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden and does so well: it names the exact file being mutated, describes the edge case where remove with no tags deletes the artist entirely, and advertises dry_run as a preview gate. It omits reversibility/undo behavior and first-run file creation, and leaves add-vs-merge semantics implicit, which keeps 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?
Three sentences, each earning its place: purpose plus target and consumers, per-action behavior, and dry_run support. The most decision-relevant information is front-loaded, and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a moderately complex tool (5 params, 2 enums, no output schema, no annotations), the description covers purpose, persistence location, downstream consumers, action behavior, and preview mode. Return-value shape is left to the response_format parameter rather than the description, and first-run file creation is not addressed, but nothing critical blocks a correct 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 description coverage is 100%, so the schema already documents all five parameters (including the omit-on-remove tag behavior and response_format variants). The description adds no parameter-level detail beyond echoing those semantics, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb pair (declare/retract), a resource (genre tags for an artist), an exact persistence target (~/.spotify-mcp/genre-tags.json), and the downstream consumers (library_genre_report, filter_by_genre). This makes it unambiguous against read-style siblings like get_artist_genres and artist_genres_compact.
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 clear workflow context by stating the sidecar file is what library_genre_report and filter_by_genre consume, and it spells out action-specific semantics (add requires at least one tag; remove drops listed tags or the artist entirely). It does not name an alternative tool or state explicit when-not conditions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
take_playlist_snapshotA
Capture a live playlistโs items (uri, name, added_at) into a timestamped local JSON snapshot file; dry_run=true previews the walk and target filename without writing. Newest, transactional snapshot (swarm) โ preferred over legacy snapshot_playlist. See also list_saved_snapshots, read_playlist_snapshot, diff_playlist_snapshots. Also covers: playlist snapshot (swarm). Snapshot guide: take_playlist_snapshot (create), list_saved_snapshots (list), read_playlist_snapshot (read), diff_playlist_snapshots / snapshot_new_tracks / snapshot_removed_tracks (diff), restore_playlist_from_snapshot / restore_playlist_plan (restore).
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | Free-text note stored in the snapshot _meta block | |
| dry_run | No | Preview only: perform the read side and return a deterministic PLAN without writing/deleting anything. Default true โ pass false to commit. | |
| playlist | Yes | Playlist ID or spotify:playlist: URI to snapshot | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the behavioral burden. It discloses that the tool writes a local JSON file and that dry_run=true previews without writing. It could add details like file location/return value, but the main persistence and side-effect behavior is clearly communicated.
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 core behavior is front-loaded and the text is organized, but the 'See also' list and the 'Snapshot guide' overlap somewhat, so it is slightly longer than strictly necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does not clearly state what the non-dry-run invocation returns or where the snapshot file is written. For a state-creating tool with five parameters, that return-value gap keeps it from being fully complete, though schema covers all parameters and dry-run behavior is described.
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, but the description adds value by specifying that snapshots contain uri/name/added_at and that dry_run previews the walk plus target filename. That goes beyond the schema's generic parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (capture), resource (live playlist's items), and output (timestamped local JSON snapshot file). It also differentiates itself from the legacy snapshot_playlist and nearby read/diff snapshot tools, so an agent can tell what this tool uniquely does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says it is preferred over legacy snapshot_playlist and the 'Snapshot guide' maps create vs list vs read vs diff vs restore tools. This gives clear when-to-use and alternative routing rather than leaving it to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
taste_checkpointA
Save a snapshot of your current top artists/tracks/genres to a dated sidecar slot for longitudinal taste tracking (pair with taste_checkpoint_diff). 2 reads, sidecar write only.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | Slot label. Default: today as YYYY-MM-DD. | |
| time_range | No | Which top-list window to snapshot. Default medium_term. | medium_term |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden and does real work: '2 reads, sidecar write only' tells the agent the call costs two reads and never mutates Spotify account state, only a local dated sidecar slot. This is a meaningful safety-transparency signal beyond the schema. It stops short of disclosing label-collision/overwrite behavior, but the core side-effect profile is clear.
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 totaling roughly 30 words, with the action, storage location, and purpose front-loaded and the cost/side-effect note in the second sentence. No filler; 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?
For a simple tool with 0 required parameters, 100% documented schema, and no output schema, the description covers purpose, storage target, cost, and companion workflow. The only notable omissions are overwrite behavior for an existing label and what the tool returns, but these are minor given the low complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% โ label, time_range, and response_format each have inline descriptions with defaults and enums โ so the baseline is 3. The description itself adds no parameter-level detail beyond the schema, though 'current top artists/tracks/genres' loosely echoes the top-list window concept.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pair ('Save a snapshot of your current top artists/tracks/genres') plus an explicit purpose ('longitudinal taste tracking') and names the companion tool (taste_checkpoint_diff). This clearly differentiates it from sibling storage tools like backup_library, snapshot_playlist, and save_playback_state.
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 longitudinal taste tracking' supplies clear usage context, and '(pair with taste_checkpoint_diff)' tells the agent which sibling completes the workflow. It does not explicitly enumerate exclusions, such as when to prefer backup_library or get_top_tracks, but the purpose framing makes the intended use unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
taste_checkpoint_diffA
Diff two saved taste checkpoints: new entrants, drop-offs, genre drift and Jaccard similarity. Pure local sidecar โ zero API calls. List slots with from="?" or omit.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Newer checkpoint label | |
| from | No | Older checkpoint label | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden and does meaningful work: it states the tool is purely local, makes zero API calls, and describes the kind of analysis produced. It does not cover edge cases like missing checkpoints or clarification of the list-slots behavior, but the core behavioral profile is clearly disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the main purpose, followed by the important local/no-API trait. The final sentence 'List slots with from="?" or omit' is a bit cryptic and awkwardly punctuated, but it is short and carries extra functional information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and no annotations, the description covers the operation, the computed diff dimensions, and the special list-slots invocation. It does not fully explain return shape, label syntax, or prerequisite checkpoints, but the core invocation behavior is understandable enough for an agent to use and discover the rest.
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, but the description adds a hidden usage pattern not in the schema: passing from='?' or omitting it to list checkpoint slots. This is valuable extra semantics. The other parameters remain well-covered by the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: 'Diff two saved taste checkpoints', and lists concrete outputs: new entrants, drop-offs, genre drift, and Jaccard similarity. The 'Pure local sidecar โ zero API calls' phrasing also distinguishes this from API-backed sibling tools like diff_playlist_snapshots or library_snapshot_diff.
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 useful context: it is a local sidecar with zero API calls, implying it is appropriate for offline or lightweight comparisons of saved checkpoints. It also hints at a list-slots mode with 'from="?" or omit'. However, it does not explicitly state when to prefer this over related diff/snapshot tools or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
taste_daily_briefA
Yesterday (or a given date) in brief: top-3 tracks, 2 revival picks, novelty share vs the lifetime core. Read-only, no auth.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | UTC date YYYY-MM-DD. Default: yesterday | |
| statsfm_user | Yes | stats.fm user ID (or username) โ public profile, no auth needed | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states 'Read-only, no auth', which is clear about the tool's non-destructive nature and authentication requirements. However, it does not mention any rate limits or potential data aggregation behavior, though this is minor for a read-only tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise and well-structured: one sentence summarizing the output and another stating the read-only/auth nature. No filler 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 provides enough context to understand what the tool does and its safety profile. It does not explicitly mention that it operates per user (statsfm_user parameter), but that is captured in the schema. For a simple read-only brief, the description is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds some meaning by implying the 'date' parameter (via 'Yesterday (or a given date)') and explaining the output content, but it does not elaborate on the 'statsfm_user' or 'response_format' parameters. The schema already provides descriptions for all parameters (coverage 100%), so the description adds minimal extra semantic value beyond clarifying the date's purpose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: providing a daily brief for yesterday or a given date, with specific content (top-3 tracks, 2 revival picks, novelty share vs lifetime core). It is concise and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any guidance on when to use this tool compared to the many similar taste-related sibling tools (e.g., taste_profile, taste_recommendations). It lacks explicit context for scenario-based selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
taste_diamond_rotationA
Diamond-mining rotation: mid-tier lifetime tracks (rank ~20โ60) absent from recent streams โ deep cuts to re-polish. Read-only, no auth.
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| track_count | No | Diamonds to list. Default: 10 | |
| statsfm_user | Yes | stats.fm user ID (or username) โ public profile, no auth needed | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly notes 'Read-only, no auth', which clearly communicates that the tool has no side effects and requires no credentials. It also implies the tool performs analysis on listening history rather than mutating state. Given no annotations were provided, this level of behavioral disclosure is solid, though it does not mention potential rate limits or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that packs in the core purpose, selection criteria, and a helpful note on read-only/no-auth behavior. The metaphorical language is slightly decorative but does not bloat the description. It is well-structured and front-loaded with the tool's main function.
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 conveys the tool's selection logic and side-effect profile, and the response_format parameter hints at output styles. However, with no output schema, it does not explicitly state what the returned data will contain (e.g., track IDs, metadata, or a summary). This leaves a modest gap in completeness for an agent deciding whether the tool's output will satisfy a task.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents all four parameters (statsfm_user, max_results, track_count, response_format) with types, constraints, defaults, and enum values. The description adds no further semantic detail beyond what the schema provides, so the baseline score of 3 is appropriate due to full schema 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 identifies the tool's purpose: surfacing mid-tier lifetime tracks (rank ~20โ60) that have not been recently streamed, framed as 'deep cuts to re-polish'. It uses a metaphorical verb ('Diamond-mining rotation') rather than a literal one like 'list' or 'recommend', but the intended behavior is still reasonably specific and distinguishable from sibling 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 states the tool is read-only and requires no auth, which is useful operational guidance. However, it does not explicitly explain when to prefer this tool over closely related siblings like taste_forgotten_bangers, taste_revival_queue, or taste_obsession_ladder, nor does it provide concrete examples of appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
taste_era_playlistA
Era window โ representative track list: pick a listening era and get its playlist spec. Read-only, no auth.
| Name | Required | Description | Default |
|---|---|---|---|
| era_index | No | Era index (0 = oldest). Default: latest | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| track_count | No | Tracks to list. Default: 15 | |
| statsfm_user | Yes | stats.fm user ID (or username) โ public profile, no auth needed | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states 'Read-only, no auth,' which directly addresses side effects and authentication requirements. Since no annotations are provided, this statement carries the full burden, and it successfully communicates that the tool does not modify data and requires no credentials. It does not mention other potential behaviors like rate limits, but for a read-only tool this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence: 'Era window โ representative track list: pick a listening era and get its playlist spec. Read-only, no auth.' It is front-loaded with the main action and output, contains no fluff, and effectively uses an arrow to show input-to-output transformation. Every word contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description only hints at the return content with 'representative track list' and 'playlist spec.' It does not specify the structure, fields, or format of the output, aside from the 'response_format' parameter which lists options but not their full content. Given the absence of an output schema, the description should provide more detail about what the tool returns to be fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, meaning each parameter already has a clear description (e.g., 'era_index: Era index (0 = oldest). Default: latest'). The tool description itself adds no extra meaning about parameters beyond what is already in the schema. Given the high schema coverage, a baseline score of 3 is appropriate; the description does not improve or detract from parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Era window โ representative track list: pick a listening era and get its playlist spec.' It names the resource (listening era) and the output (playlist spec), which is specific enough to convey the core purpose. It does not explicitly differentiate from sibling tools like 'listening_eras' or 'taste_to_playlist', but the phrase 'representative track list' indicates a distinct focus.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus the many similar sibling tools (e.g., 'listening_eras', 'taste_to_playlist', 'taste_daily_brief'). It simply states what it does without any conditional or comparative context. There is no 'use this when...' or reference to scenarios where this tool is preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
taste_forgotten_bangersA
Forgotten-bangers playlist spec: lifetime tops missing from the recent sample, ranked with a revival pick. Read-only, no auth.
| Name | Required | Description | Default |
|---|---|---|---|
| top_limit | No | Lifetime top tracks to scan. Default: 50 | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| track_count | No | Bangers to list. Default: 15 | |
| statsfm_user | Yes | stats.fm user ID (or username) โ public profile, no auth needed | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations to carry the safety profile, the description explicitly declares read-only and no-auth behavior, and explains the algorithm (lifetime tops missing from recent sample, revival pick). It does not fully describe return formatting, but the main side-effect and auth traits are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly packed sentences present the purpose, algorithm, and safety model with no filler. The critical read-only/no-auth information is clearly separated and easy to scan.
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 schema fully documents parameters, but because there is no output schema and no annotations, the description should say more about what the returned 'playlist spec' looks like and how it compares with similar taste tools. The read-only/no-auth statement and domain recipe make it minimally viable but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with defaults and meanings for all five parameters, so the description does not need to restate them. The description adds only loose domain context (lifetime tops, recent sample) rather than mapping parameters to behavior, keeping this at the schema-driven 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 identifies a concrete output ('forgotten-bangers playlist spec') and gives a distinct data recipe: lifetime top tracks missing from the recent sample, ranked with a revival pick. It is clear enough to distinguish from generic taste tools, though it stops short of naming sibling alternatives or using an explicit verb like 'generate'.
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 'Read-only, no auth' phrase gives useful selection context and implies it is safe to call without credentials, but there is no explicit when/when-not statement or pointer to comparable siblings such as taste_revival_queue or forgotten_favorites. Usage is only implied by the tool's domain name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
taste_genre_bridgeA
Genre-bridge playlist spec: picks spanning two genres with evidence + risk per pick. Read-only, no auth.
| Name | Required | Description | Default |
|---|---|---|---|
| to_genre | No | Target genre (substring). Default: most novel adjacent genre | |
| from_genre | No | Start genre (substring). Default: lifetime #1 | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| track_count | No | Picks to list. Default: 8 | |
| statsfm_user | Yes | stats.fm user ID (or username) โ public profile, no auth needed | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the safety burden, and it discharges it by stating 'Read-only, no auth' โ no side effects, no credentials needed โ and by hinting at the output shape with 'evidence + risk per pick.' It does not discuss rate limits or data sources, but for a read-only spec tool these are minor omissions.
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, front-loaded with the purpose, then the distinguishing output, then the safety/auth facts. Every clause earns its place 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?
With 100% schema coverage and no output schema, the description only needs to cover safety and return shape, which it does via 'Read-only, no auth' and 'evidence + risk per pick.' The only slight gap is that 'spec' is not expanded, though 'Read-only' resolves the main ambiguity of whether it creates a playlist.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All six parameters are already documented in the schema (100% coverage), so the baseline is 3. The description's 'spanning two genres' adds minor relational meaning by clarifying that from_genre and to_genre are the two endpoints of a bridge, but it does not add format or semantics beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('picks') and resource (tracks spanning two genres), and the 'genre-bridge ... spanning two genres' scope clearly distinguishes it from sibling taste playlist tools like taste_era_playlist, taste_forgotten_bangers, and taste_to_playlist, none of which bridge two genres. It also names distinct output elements โ evidence + risk per pick โ which further signals what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: an agent can infer to use this when a two-genre bridge playlist is desired, but the description gives no explicit when/when-not guidance and names no alternatives. Given the large sibling family of taste_* playlist tools, explicit routing would materially help, so it stops at 3.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
taste_listening_clockA
Listening-clock summary: day-part split (UTC), peak window, and a sequencing note for playlist order. Read-only, no auth.
| Name | Required | Description | Default |
|---|---|---|---|
| statsfm_user | Yes | stats.fm user ID (or username) โ public profile, no auth needed | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states 'Read-only, no auth', which are the key behavioral aspects. Since no annotations are provided, the description carries the full burden, and this statement covers the main side-effect profile completely.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with the tool's purpose, and compactly lists the three output components (day-part split, peak window, sequencing note) plus access characteristics (read-only, no auth). Every clause carries useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a summary tool without an output schema, the description lists exactly what the summary contains and notes the timezone (UTC), which is sufficient for an agent to understand the shape and content of the result.
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?
Given that schema description coverage is 100%, the parameters are already well-documented in the schema. The description adds no parameter-specific nuance, leaving parameter understanding entirely to 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 tool provides a listening-clock summary with specific components: day-part split in UTC, peak window, and a sequencing note for playlist order. It distinguishes itself from sibling tools by highlighting the playlist-order sequencing angle.
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 does not explicitly mention when to use this tool over alternatives like listening_clock or weekday_listening_report. The unique sequencing note is implied but not spelled out as a decision criterion, leaving the agent to infer the appropriate use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
taste_novelty_loyaltyA
Loyalty-vs-novelty report: top-5 share, recent-outside-core share, and a verdict (comfort / balanced / explorer). Read-only, no auth.
| Name | Required | Description | Default |
|---|---|---|---|
| range | No | stats.fm range window. Default: lifetime | |
| statsfm_user | Yes | stats.fm user ID (or username) โ public profile, no auth needed | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden for behavioral transparency. It explicitly states 'Read-only, no auth,' which addresses side effects and access requirements. It does not mention rate limits or error behavior, but for a read-only reporting tool these are secondary. Overall, it provides a solid baseline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that packs all essential information: the report type, its key metrics, the verdict options, and the read-only/auth status. There is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description appropriately hints at the return structure by listing top-5 share, recent-outside-core share, and the verdict. It does not explain parameter interactions, but the parameter descriptions in the schema cover that. The tool's purpose and output are sufficiently clear for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters with descriptions (range, statsfm_user, response_format), so the baseline is 3. The description does not add extra detail about how parameters influence the report, but the schema descriptions suffice for basic understanding. No additional semantic value is provided 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 identifies the tool's purpose: it generates a loyalty-vs-novelty report with specific components (top-5 share, recent-outside-core share, verdict). This is a distinct resource among the many taste-related sibling tools, and the action is implicit in 'report' but the output structure makes it unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a loyalty-vs-novelty analysis is desired, but it does not explicitly distinguish this from other taste tools (e.g., taste_profile, taste_recommendations). No alternatives or when-not-to-use conditions are mentioned, so guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
taste_obsession_ladderB
Obsession ladder: artists ranked by stream share, each with an exposure tier. Read-only, no auth.
| Name | Required | Description | Default |
|---|---|---|---|
| range | No | stats.fm range window. Default: lifetime | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| statsfm_user | Yes | stats.fm user ID (or username) โ public profile, no auth needed | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does add a useful safety profile: 'Read-only, no auth.' This is consistent with the schema's 'public profile, no auth needed' note. However, it does not disclose what an 'exposure tier' is, how pagination behaves, what data source backs the tool, or how output varies by response format โ gaps that matter for a no-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler: the core function is front-loaded, and the safety note is appended. Every word earns its place. Slightly more detail would improve utility, but as written it is efficient and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, so the description must compensate โ but it does not explain the return structure, the meaning of exposure tiers, or how 'ladder' output differs from statsfm_top_artists. For an analytics tool with 4 parameters and no structured return documentation, the agent is left guessing at output shape and semantics.
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 all four parameters (range, max_results, statsfm_user, response_format) are already self-documented with defaults, enums, and constraints. The description adds nothing about parameters, which is acceptable given the baseline-3 standard for high coverage, but it also doesn't reinforce which parameters matter most.
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 clear function: artists ranked by stream share with an exposure tier. It names the resource (artists), the ranking metric (stream share), and a distinguishing output concept (exposure tier), which separates it from generic profile tools. However, it does not explicitly contrast with close siblings like statsfm_top_artists, which could overlap in agent 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?
No when-to-use or when-not-to-use guidance is provided. With roughly 200 sibling tools including many taste_* and statsfm_* analytics tools, the agent gets no help choosing this over statsfm_top_artists, statsfm_artist_affinity, or taste_profile. The only contextual hint is the implicit ranking/exposure-tier framing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
taste_profileA
Taste snapshot from stats.fm: core artists, top genres, loyalty-vs-novelty balance, and day-parting (when you listen). Read-only, no auth. (Legacy alias of statsfm_taste_profile โ prefer the canonical name.)
| Name | Required | Description | Default |
|---|---|---|---|
| range | No | stats.fm range window. Default: lifetime | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| statsfm_user | Yes | stats.fm user ID (or username) โ public profile, no auth needed | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. The description mentions read-only and no auth, and lists the output concept (core artists, top genres, etc.). However, it doesn't disclose things like pagination limits, default range behavior, or what 'loyalty-vs-novelty' and 'day-parting' mean in output terms. Since annotations are absent, the description adds useful but not complete behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, info-dense: what the tool returns, auth/read-only status, and alias routing. Front-loaded with the most important facts. No waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only snapshot tool with 100% schema coverage and no output schema, the description gives a clear picture of what will be returned and that no auth is needed. Missing only minor details like pagination limits or default range, but for an agent selecting and invoking this tool, it's nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description doesn't add extra parameter detail beyond mapping 'range' and 'response_format' conceptually. It mentions day-parting and loyalty-vs-novelty, which relates to the output but not to parameter semantics. With schema covering all params, this is an adequate 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 states a specific verb ('snapshot'), the resource ('stats.fm'), and the exact contents: core artists, top genres, loyalty-vs-novelty balance, day-parting. It also names the legacy alias and explicitly says it's read-only with no auth. This clearly distinguishes it from statsfm_taste_profile (canonical) and other statsfm 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 explicitly says 'Read-only, no auth' and notes it's a 'Legacy alias of statsfm_taste_profile โ prefer the canonical name.' This tells the agent when to use it (read-only taste snapshot) and to prefer the canonical sibling, plus the legacy alias situation is transparent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
taste_recommendationsA
Bridge-mode recommendations: adjacent genres/artists between the listenerโs core and the unexplored, each with evidence and a risk note. Heuristic over stats.fm tops โ read-only, no auth. (Legacy alias of statsfm_taste_recommendations โ prefer the canonical name.)
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| statsfm_user | Yes | stats.fm user ID (or username) โ public profile, no auth needed | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and delivers: 'read-only, no auth' declares the safety profile, 'Heuristic over stats.fm tops' reveals the data source and approximate nature, and the legacy-alias note explains the tool's status. It stops short of mentioning error behavior (e.g., unknown statsfm_user) but covers the critical traits.
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 compact sentences with zero waste: output shape first, then data source and safety, then routing note. The most decision-relevant fact (prefer the canonical name) is preserved in a trailing parenthetical that doesn't dilute the front-loaded core definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description names the output elements (evidence, risk note) so an agent knows what to expect. With 100% schema parameter coverage, auth/safety stated, and alias handling addressed, almost everything needed is present; the only gap is that 'bridge-mode' and 'listener's core' are defined only implicitly.
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 all three parameters are already documented and the baseline of 3 applies. The description adds only marginal param context (linking 'listener's core' to the user and 'stats.fm tops' to the data source) rather than new per-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+resource: 'Bridge-mode recommendations' of 'adjacent genres/artists between the listener's core and the unexplored', each with evidence and a risk note. It is immediately distinguishable from the many taste_* siblings by its precise scope and by explicitly flagging itself as a legacy alias of statsfm_taste_recommendations.
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?
Clearly routes the agent to the canonical sibling ('Legacy alias of statsfm_taste_recommendations โ prefer the canonical name') and gives context for when it applies (bridge-mode exploration toward the unexplored). It does not contrast against other recommendation tools like taste_genre_bridge or exposure_check, so alternative-selection guidance is partial.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
taste_revival_queueA
Revival queue builder: ordered re-listen queue from forgotten favorites + dormant-affinity artists, each with a search_tracks fallback line. Read-only, no auth.
| Name | Required | Description | Default |
|---|---|---|---|
| queue_size | No | Queue length. Default: 10 | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| statsfm_user | Yes | stats.fm user ID (or username) โ public profile, no auth needed | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the disclosure burden and it does disclose that the tool is read-only and requires no auth, plus reveals the search_tracks fallback behavior. It does not detail fallback semantics or output behavior, but the safety-critical traits are explicitly stated.
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, information-dense sentence front-loads the core purpose and then adds the key safety/fallback traits. No filler 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 what the tool composes and that it is read-only, but no output schema is provided and the return shape/fallback mechanics are left vague. For an agent to know exactly what a 'revival queue' with 'search_tracks fallback line' looks like in the response, more detail would be needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents all four parameters. The tool description adds no parameter-specific meaning, so the 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 identifies a concrete function: building an ordered re-listen queue from forgotten favorites and dormant-affinity artists, with a search_tracks fallback. That is specific enough to understand the tool's resource and output, though it does not explicitly differentiate it from sibling tools like taste_forgotten_bangers or statsfm_forgotten_favorites.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to choose this tool over the many related taste/queue tools. The phrase 'Revival queue builder' implies a use case, but the description never states conditions, exclusions, or alternative tools, so an agent must infer when it is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
taste_shift_reportB
Compare short_term vs long_term top artists+tracks: rising/falling + Jaccard similarity. Quota: 4ร GET /me/top/*.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Limit per window | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It does disclose one meaningful behavioral trait โ that this tool expends quota equivalent to 4ร GET /me/top/* calls โ which is useful for rate-limit and cost awareness. However, it does not state read-only status, output shape, or how rising/falling and Jaccard similarity are computed, leaving notable gaps.
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, tightly packed sentence that front-loads the core behavior and appends the quota note second. Every word earns its place and there is no fluff. It loses a point only because the telegraphic 'rising/falling + Jaccard similarity' phrasing is slightly cramped and could mislead without elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the schema covering both parameters, this is a comparively complex analysis tool (four API calls, comparison logic, two windows) with no output schema and no annotations. The description omits output shape, computation semantics, read-only confirmination, and edge cases (e.g., empty windows). An agent can invoke it, but cannot predict what it returns or how to interpret the comparison, which is incomplete for a tool of this comlexity.
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 both parameters (limit and response_format) are already documented with default values, ranges, and format semantics in the schema. The description adds no parameter-level meaning beyond what the schema provides, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (Compare), a specific resource (short_term vs long_term top artists+tracks), and the concrete outputs (rising/falling + Jaccard similarity). It is clear and actionable, but it does not explicitly differentiate from conceptually overlapping siblings such as top_artist_ranking_delta, taste_checkpoint_diff, or discovery_ratio, so it stops 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?
No guidance is given on when to reach for this tool instead of a sibling. It never mentions alternatives, exclusions, or selection criteria, despite a crowded family of listening-analysis tools (taste_checkpoint_diff, top_track_ranking_delta, listening_report, discovery_ratio) where routing guidance would be valuable. The quota note hints at cost but not at when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
taste_to_playlistA
Taste profile โ playlist track list (DRY RUN first): blend lifetime tops with recent streams into a copy-pasteable track list. Read-only โ never writes to Spotify.
| Name | Required | Description | Default |
|---|---|---|---|
| seed | No | Blend seed. Default: mixed | |
| dry_run | No | Preview only (default true). False still only returns the list โ writes happen via Spotify tools. | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| track_count | No | Tracks to list. Default: 20 | |
| statsfm_user | Yes | stats.fm user ID (or username) โ public profile, no auth needed | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Explicitly discloses that the tool never writes to Spotify and is read-only. Also labels it a 'DRY RUN,' so users know there will be no side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences, direct and free of fluff. It efficiently communicates purpose and safety.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core purpose and read-only behavior. While it doesn't detail output formats, the 'copy-pasteable track list' hint and schema cover the essentials.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description doesn't add parameter-specific details, but the schema already covers all 6 parameters with 100% description coverage, so the baseline is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: blending lifetime tops with recent streams into a track list. It also explicitly notes the read-only nature, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides direct guidance with 'DRY RUN first' and 'Read-only โ never writes to Spotify,' telling users the tool is safe to preview. Doesn't reference alternatives, but the dry-run instruction is a strong usage hint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
taste_weekly_recapA
Week-in-review brief: stream count, top artists/tracks of the window, busiest day, novelty share. Read-only, no auth.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Window in days back from now. Default: 7 | |
| statsfm_user | Yes | stats.fm user ID (or username) โ public profile, no auth needed | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the explicit 'Read-only, no auth' disclosure is genuinely valuable and carries the safety burden โ it tells the agent this is a safe read operation requiring no credentials. However, it stops there: no mention of failure modes (invalid/private profile, empty window, rate limits) or how the stats.fm API is accessed.
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 entire description is one 18-word sentence: deliverable and content list front-loaded, safety note appended, zero filler or repetition. Every word earns its place, making it easy to scan and 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?
For a simple read-only report tool the core is covered: deliverable, contents, auth profile, and all params are documented. But 'novelty share' is unexplained domain jargon, there is no output schema to define return shape, and edge cases (empty window, invalid or private user) 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 description coverage is 100%: days (window, default 7), statsfm_user (ID or username, public, no auth), and response_format (concise/detailed/json meanings) are all documented in the schema. Per the baseline rule, the description need not add param detail, and it doesn't โ it provides no syntax or format information 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 names a specific deliverable โ a 'Week-in-review brief' โ and enumerates its contents (stream count, top artists/tracks, busiest day, novelty share), so an agent knows precisely what output to expect. The weekly framing distinguishes it from siblings like taste_daily_brief and week_in_review_playlist, though it never names a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Week-in-review' label combined with the days parameter defaulting to 7 implies a weekly recap use case, but the description gives no explicit guidance on when to pick this over the many sibling recap tools (taste_daily_brief, listening_recap_brief, statsfm_recaps, weekly_rotation_report). No alternatives or exclusions are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
title_length_outliersB
Statistical outliers in saved-track title length (characters): mean/median plus the longest and shortest titles. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| scan_cap | No | Max saved items to walk per paginated source (default: SPOTIFY_MCP_FETCH_ALL_CAP) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states 'Read-only,' which is a meaningful safety trait, and mentions the statistical outputs. However, with no annotations provided, the description carries the full burden of behavioral disclosure. It omits details such as how saved tracks are traversed, whether title length includes spaces, how outliers are defined beyond longest/shortest, or any side effects or rate-limit implications. This is insufficient for a tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single well-structured sentence that front-loads the core purpose ('Statistical outliers in saved-track title length'), includes the key outputs (mean/median, longest/shortest), and appends 'Read-only' with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does summarize the return content, but it remains vague about format and quantityโhow many titles count as 'longest' and 'shortest,' and how response_format affects the output. The optional parameters are described only in the schema, and the description does not connect them to the reporting behavior, leaving gaps for an agent to resolve.
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 each parameter is already documented. The tool description adds no additional meaning to scan_cap, max_results, or response_format beyond what the schema provides, such as how scan_cap affects outlier calculation. 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 tool's function: computing statistical outliers in saved-track title length, with mean/median and longest/shortest titles. It is specific about the resource (saved-track titles) and the computation, avoiding tautology. However, it does not explicitly distinguish itself from similar sibling statistics tools like longest_saved_tracks or shortest_saved_tracks, so it misses full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus alternatives. With a large sibling set containing many saved-track analysis and statistics tools, the description leaves the agent to infer the appropriate context without any explicit exclusions or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toolset_reportA
Report the active toolsets and registration modules, plus the live registered tool count โ answers "how much surface is exposed right now". Discovery set; always available. Also see find_tool / inspect_tool.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. 'Report' and 'Discovery set' imply a non-destructive read-only operation, and 'always available' communicates availability. It does not detail authentication, rate limits, or return format, but for a zero-parameter meta-report this is reasonably 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 two sentences, front-loaded with the main purpose, then adds availability and related-tool context. Every sentence earns its place, with no filler or redundant restatement of the tool name.
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 zero-parameter discovery tool with no output schema, the description is complete: it states what is reported, the question it answers, its availability, and related tools. An agent has everything needed to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and an empty input schema, so there are no parameter semantics to clarify. The description adds no parameter-related detail, which is appropriate; the baseline of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Report') and names exact resources: active toolsets, registration modules, and the live registered tool count. It also positions the tool as part of the discovery set and explicitly points to find_tool / inspect_tool, distinguishing it from those related siblings.
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 clear usage context: it is a discovery-set tool that is 'always available' and answers a specific question about how much surface is exposed. It also mentions find_tool / inspect_tool as alternatives for more targeted inspection, though it does not explicitly state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
top_artist_leaderboardA
Score top artists across all three time windows with recency-weighted points (shortร3, mediumร2, longร1) and rank the combined leaderboard. Quota: 3ร GET /me/top/artists.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Artists fetched per window (default 30). | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden. It does well: it discloses the quota (3ร GET /me/top/artists) and reveals the fusion behavior of combining three windows into one ranking. It does not discuss side effects (none apparent) or error behavior, but for a read-only aggregation the key behavioral traits are covered.
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, both information-dense. The first sentence front-loads the core action and scoring weights; the second gives the quota. The only small waste is that the quota could be redundant with a debug-focused tool, but it is genuinely useful for API-cost planning.
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 read-only aggregation with no required parameters and no output schema, the description conveys the algorithm, the API cost, and the input knobs. It lacks explicit ranking/response shape details, but the response_format enum covers that partially, and the lack of output schema lowers the burden.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes all three parameters with 100% coverage, so the baseline is 3. The description adds the notion of 'per window' interpretation for limit, which helps connect the parameter to the three-window behavior, but does not provide detail on how max_results or response_format interact with the scoring.
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 verb (Score), the resource (top artists), the scope (all three time windows), and the ranking scheme (recency-weighted points with multipliers). This distinguishes it clearly from siblings like get_top_artists, top_artists_by_range, and top_artist_ranking_delta without needing to open schemas.
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 formula and quota disclosure tell the agent what the tool does and what API cost it has, which implicitly covers when to use it. However, it does not explicitly state exclusions or name alternative tools for cases where this leaderboard is not needed, despite many similar siblings existing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
top_artist_ranking_deltaA
Show how each top artistโs rank moved between two time windows (climbers first; default compares short_term against medium_term). Quota: 2ร GET /me/top/artists.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Artists per window (default 20). | |
| base_range | No | Baseline window. Default: medium_term | medium_term |
| compare_range | No | Window to compare against the baseline. Default: short_term | short_term |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does meaningful work: it discloses output ordering ('climbers first'), the default comparison windows, and the quota cost ('2ร GET /me/top/artists'). It does not mention response shape or edge cases, but the core behavioral traits are surfaced.
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 deliver the core behavior, ordering, defaults, and quota with no filler. The most important information is front-loaded and 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?
The description is sufficient for a simple comparison tool: it covers what is computed, the default windows, ordering, and quota. Since there is no output schema, a bit more detail about the exact returned structure would help, but the response_format parameter partially covers output expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all four parameters with defaults, enums, and descriptions, so schema coverage is 100%. The description adds context about the default comparison direction and ordering, but does not need to repeat parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Show') and resource ('each top artist's rank moved'), plus the key comparison between two time windows. It clearly distinguishes this tool from static ranking tools like top_artist_leaderboard and from the track-level sibling top_track_ranking_delta.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for rank-movement analysis between time windows and states the default comparison, but it does not explicitly say when to choose this over siblings or when to avoid it. No alternative tools are named, leaving usage guidance to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
top_artists_by_rangeA
Top artists for each time window with rank deltas (short vs long). Quota: up to 3ร GET /me/top/artists.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Limit per window | |
| time_range | No | Window or all | all |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the disclosure burden. It does disclose an important behavioral trait: 'Quota: up to 3ร GET /me/top/artists,' which tells the agent the tool may make multiple network calls and consume quota. It does not mention auth requirements, error behavior, or side effects, but for a read-only listing tool the quota note provides useful transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no redundant phrasing. Key output concept and quota disclosure are front-loaded. The quota sentence is dense but 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?
The tool is moderately complex with 3 optional params, 2 enums, and no output schema, and the description covers purpose and cost but not output shape beyond 'rank deltas' or scenario guidance. The response_format parameter in the schema partially covers return expectations. Overall it is adequate but relies on the schema and sibling names to fill in the full picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes all three parameters with descriptions and enums, so the baseline is 3. The description adds only indirect context ('time window' maps to time_range) and no additional parameter semantics. It does not compensate for anything the schema lacks.
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 specifies a concrete deliverable: 'Top artists for each time window with rank deltas (short vs long)'. It clearly identifies the resource and the analytical output, and the quota note grounds it as an API-backed listing. However, it does not explicitly differentiate from similar siblings like top_artist_ranking_delta, 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 each time window with rank deltas' implies the tool is meant for comparing ranking shifts over short vs long windows, and the quota note signals cost when choosing it. It does not state when to prefer it over get_top_artists, top_artist_leaderboard, or top_artist_ranking_delta, nor does it give exclusion criteria. This is implied guidance, not explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
top_genre_censusA
Build a weighted genre census from your top artists (rank-weighted across the three windows; genres resolved via the batch /artists endpoint, default 40 artists per window). Quota: 3ร GET /me/top/artists + 1ร GET /artists?ids=.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Artists fetched per window (default 40). | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It explicitly discloses the quota (3ร GET /me/top/artists + 1ร GET /artists?ids=), which is important operational context, and explains the weighting/resolution logic. It stops short of describing return shape or side-effect profile, but for a read/computation tool this is strong disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The primary action is front-loaded, implementation details and quota are compactly placed in a parenthetical, and 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 tool with 3 all-optional parameters and no output schema, the description provides key context: source data, weighting method, resolution endpoint, default window size, and API quota. The only minor gap is not making explicit what the returned census looks like beyond the response_format enum, but the schema covers that partially.
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 a baseline of 3 is appropriate. The description mentions the default 40 artists per window, which mirrors the limit parameter description and adds no new meaning; it also does not clarify max_results or response_format beyond what the schema already says.
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 ('Build') and resource ('weighted genre census from your top artists'), with concrete details about rank weighting across three time windows and genre resolution via the batch /artists endpoint. This is clearly distinguishable from sibling genre-related tools like get_artist_genres or library_genre_report.
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 clear context: the tool is for constructing a weighted genre census based on a user's top artists, with rank weighting and three windows. It does not explicitly name alternatives, but the usage context is unambiguous enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
top_track_leaderboardA
Score top tracks across all three time windows with recency-weighted points (shortร3, mediumร2, longร1) and rank the combined leaderboard. Quota: 3ร GET /me/top/tracks.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Tracks fetched per window (default 30). | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavior itself. It does so by revealing that this tool makes three GET /me/top/tracks calls (quota), applies recency weights, and produces a ranked leaderboard. It does not explicitly state read-only/no-side-effect status, but no mutation language appears and the cost/aggregation disclosure carries most of the burden.
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-load the core scoring algorithm and then provide quota/cost information. There is no filler or redundancy; each sentence adds distinct useful context.
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 read-only aggregation with no output schema and no annotations, the description covers the essential behavior: inputs/fetches, weighting, output type, and API cost. It leaves some ambiguity about exact result fields and duplicate/tie handling across windows, but the schema's response_format descriptions cover output modalities.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters are already covered by the input schema with defaults, ranges, and enum semantics, so the schema does the heavy lifting. The description adds little parameter-specific detail beyond confirming the three time windows, which makes the 'per window' limit meaningful.
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 operation: score top tracks across all three Spotify time windows with explicit recency weights (shortร3, mediumร2, longร1) and output a ranked combined leaderboard. It also names the underlying endpoint and quota, making the tool easy to distinguish from siblings like get_top_tracks or top_track_ranking_delta.
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 'across all three time windows' gives clear context for when to choose this tool: when a combined recency-weighted ranking is needed rather than a single-window top-tracks result. It does not explicitly name alternative tools or state when not to use it, so it is short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
top_track_ranking_deltaA
Show how each top trackโs rank moved between two time windows (climbers first; default compares short_term against medium_term). Quota: 2ร GET /me/top/tracks.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Tracks per window (default 20). | |
| base_range | No | Baseline window. Default: medium_term | medium_term |
| compare_range | No | Window to compare against the baseline. Default: short_term | short_term |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden, and it does well by disclosing the quota cost (2ร GET /me/top/tracks), the sort behavior (climbers first), and the default windows. It does not over-explain side effects, but 'Show' pluas a read-only report.
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 senences deliver purpose, ordering, default window pairing, and quota information with no redundancy. The key behavior is front-loaded and 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?
For a read-only report tool with four optional enum/limited parameters and no nested objects, the description plus schema covers selection and invocation well. It does not detail edge cases like unranked tracks or the exact JSON output shape, but the purpose and response_format defaults are sufficient for a typical 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?
Input schema coverage is 100%, and all for parameters already have descriptions and defaults. The description reinforces the short_term/medium_term defaults but adds no genuinely new parameter semantics beyond the schema. 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 operation: show how each top track's rank moved between two time windows, with climbers first and a concrete default pairing. This clearly distinguishes it from static ranking siblings like top_track_leaderboard and from the artist-focused top_artist_ranking_delta.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for rank-movement comparisons and states the default windows, but it does not explicitly say when to prefer this over siblings such as top_track_leaderboard or top_artist_ranking_delta. There is usable context, yet no explicit alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
track_album_bundleA
Context card for one track: the track plus its full album metadata and the album's remaining track listing (the "what am I listening to" card). Quota: ๐ก 2 API calls (GET /tracks/{id} + GET /albums/{id}/tracks).
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | ISO 3166-1 alpha-2 market code (e.g. 'US'); omit for 'from_token' behaviour | |
| track_id | Yes | Spotify track ID | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the burden, and it discloses the quota (2 API calls) and exact GET endpoints called, which is valuable operational context beyond the schema. It also clarifies the output scope (track plus album metadata plus remaining track listing). It stops short of explicitly stating 'read-only' or 'no side effects', but the GET endpoints and 'context card' framing imply a safe read.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tight sentences that front-load the core purpose and then give quota/endpoint details. No filler or redundant restatement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-bundle tool with all parameters documented in the schema, the description covers what the tool returns, how much it costs, and which APIs back it. A small gap is not explicitly describing response_format behavior, but the schema already covers that; overall the context is complete enough to call 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 coverage is 100%, so the schema already documents all three parameters; the description repeats no parameter details. It adds no extra semantics about market or response_format beyond what the schema provides, so a 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 a specific deliverable ('context card for one track'), specifies its exact contents (track, full album metadata, album's remaining track listing), and frames it as the 'what am I listening to' card, which clearly separates it from plain get_track/get_album tools. This is a specific verb+resource with enough detail to distinguish the bundle from sibling 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 gives an implicit use context via the quoted 'what am I listening to' card, suggesting when a user wants surrounding album context for a single track. It does not name alternative tools or state exclusion conditions, so usage guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
track_enrichment_batchA
Up to 50 track IDs โ enriched rows: album release date, label and artist genres joined back onto each track via chunked several-tracks + several-albums + several-artists fan-in. Quota: ๐ก ~3 chunked API calls (one per several-* endpoint, more when chunking splits).
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Projection of enrichment columns. Default: all four | |
| track_ids | Yes | Up to 50 Spotify track IDs | |
| max_results | No | ||
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden and delivers genuine behavioral detail: the internal fan-in across three several-* endpoints, the chunking behavior that scales call count, and the medium-quota cost (๐ก ~3 chunked API calls). It does not disclose error/partial-failure behavior, input-order preservation, or that duration is also enrichable, but the disclosed mechanism and quota go well beyond what the schema exposes.
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, front-loaded with the core transform before the quota detail. Every phrase earns its place; the compact notation ('โ', 'fan-in', 'several-*') is telegraphic but efficient. Slightly jargon-heavy for a general agent, so not a 5.
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 core transform and cost profile are well covered, but for a 4-parameter tool with no output schema and no annotations, the description leaves response_format behavior (what 'concise' vs 'json' actually returns given the fan-in), max_results semantics, and error handling for invalid or duplicate track IDs unexplained. An agent could call it successfully on the happy path but would be guessing about limits and failure modes.
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 join semantics for the fields enum (release_date, label, genres are sourced from albums/artists), which the schema enum alone does not convey. However, max_results has no schema description and is never mentioned in the tool description, and duration is omitted from the prose despite being a valid fields value; with 75% schema coverage the description partially compensates but leaves a real 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 specifies the operation precisely: 'Up to 50 track IDs โ enriched rows' with a defined output composition (album release date, label, artist genres joined back onto each track). It clearly distinguishes this from siblings like get_several_tracks (raw fetch), catalog_batch_lookup (generic lookup), and artist_genres_compact (artist-level only) by naming the several-* fan-in mechanism and the enrichment scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The mechanism disclosure ('chunked several-tracks + several-albums + several-artists fan-in') and quota estimate ('~3 chunked API calls... more when chunking splits') imply this is the batched/joined alternative to calling the three several-* endpoints manually, and the 'Up to 50' cap implies an exclusion beyond 50 IDs. However, no alternative tool is explicitly named and there is no when-to-use/when-not-to-use or condition-based routing guidance, so the choice is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
track_release_originA
Find where a track first appeared: walks an artist's releases chronologically and reports the earliest album/single/compilation containing the track, plus later re-appearances. Quota: ๐ด paginated walk + batched /albums lookups.
| Name | Required | Description | Default |
|---|---|---|---|
| artist_id | Yes | Spotify artist ID, URI, or URL | |
| track_name | Yes | Track title to locate (case-insensitive) | |
| max_releases | No | Releases to scan. Default: 60 | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It reveals the algorithmic approach (chronological walk across releases), the quota cost (paginated walk + batched lookups), and the nature of the output (earliest + re-appearances). This goes beyond the mere schema, though it omits edge cases like no match found or exact behavior of response_format variants.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero wasted words. The primary purpose is front-loaded in the first sentence, and the quota warning is neatly appended. It is efficient and well-structured for quick parsing by an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a moderate-complexity read-only lookup with no output schema, the description provides a solid high-level understanding: what it searches, how it scans, and what it reports. It relies on the response_format parameter to articulate output granularity. Minor gaps (e.g., behavior when no match is found, or handling of artist_id forms) are not critical given the parameter descriptions already cover input formats.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%; all four parameters (artist_id, track_name, max_releases, response_format) are documented with meaningful descriptions in the schema itself. The tool description adds no additional semantic nuance beyond what the property descriptions already provide, 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 states a specific verb ('Find') and resource ('where a track first appeared'), then elaborates on the exact behavior: walks an artist's releases chronologically and reports the earliest album/single/compilation plus later re-appearances. This clearly distinguishes it from sibling tools like track_album_bundle or find_canonical_track, which serve different lookup purposes.
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 conveys that this tool is used to trace origin and re-appearances within an artist's discography, and includes a quota warning indicating it's a heavy operation. However, it does not explicitly mention when to prefer alternatives (e.g., track_album_bundle for a single release) or provide exclusion criteria. The usage context is implied but not formalized.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
track_rotation_reportA
Report how many times each track appears in recently-played history and bucket them into heavy/regular/light rotation (default 150 history items). Quota: GET /me/player/recently-played cursor walk.
| Name | Required | Description | Default |
|---|---|---|---|
| max_items | No | Max recently-played items to walk (default 150; the API pages 50 per call). | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it does solid work: 'Quota: GET /me/player/recently-played cursor walk' discloses that the tool consumes API quota and paginates through history โ the key behavioral trait an agent needs before invoking a possibly multi-call operation. It also states the default 150-item window. It stops short of explicitly noting the operation is non-mutating, though 'Report' implies read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero filler: the first front-loads the purpose and bucketing behavior, the second appends the quota/pagination warning that matters for agent decisions. Every word earns its place, and the most distinctive detail (heavy/regular/light buckets) leads the description.
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 report tool with no output schema and no annotations, the description covers the essentials: data source (recently-played history), computation (per-track counts with rotation buckets), the default window, and the quota cost of execution. The main gaps are the lack of alternative-tool routing and no description of the returned shape beyond what response_format's enum values imply, but the schema compensates for the format dimension.
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 baseline is 3 and the schema fully documents max_items, max_results, and response_format. The description merely reinforces the max_items default ('default 150 history items') without adding parameter meaning beyond the schema. The pagination hint 'the API pages 50 per call' already lives in the schema, so no extra credit is warranted.
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: 'Report how many times each track appears in recently-played history and bucket them into heavy/regular/light rotation.' The heavy/regular/light bucketing is a distinctive behavior that separates it from plain history tools like get_recently_played and from weekly_rotation_report. An agent can understand exactly what computation this tool performs.
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 intended usage is implied โ if you want rotation categorization of recently-played history, call this tool โ but no alternatives are named and no when-not-to-use conditions are given. Siblings like get_recently_played, most_replayed, and weekly_rotation_report overlap in data source, yet nothing tells the agent how to route among them. The default-window and quota notes provide context but not decision criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transfer_playbackC
Move playback to a different Spotify Connect device
| Name | Required | Description | Default |
|---|---|---|---|
| play | No | Force play immediately (default: maintain current state) | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| device_id | Yes | Target device ID to transfer playback to | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
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. 'Move' implies a mutation, but it does not disclose whether current playback state (position, queue) is preserved, whether the target device must already be active, or what happens to the source device. The 'play' parameter hints at state behavior, but the description itself does not explain it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that states the action and target. This is efficient and immediately scannable; no filler exists, though it could add a bit more behavioral context without becoming bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is thin. It lacks details about playback state preservation, error conditions, device availability requirements, and response format. The schema covers parameters, but behavioral and environmental context is missing. Sibling tools like transfer_playback_with_state and switch_device suggest adjacent use cases that this description does not disambiguate.
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, including defaults and enums. The description adds no additional parameter-level semantics, but the schema fully carries that weight. 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 'Move playback to a different Spotify Connect device' uses a clear verb ('Move') and a specific resource ('playback' to a 'Spotify Connect device'). It distinguishes itself functionally from sibling tools like pause, play, and switch_device, though it doesn't explicitly contrast with 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?
No explicit guidance on when to use this tool versus alternatives like switch_device, handoff, or transfer_playback_with_state. The description implies a use case (moving playback) but does not state prerequisites (e.g., device must be active) or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transfer_playback_with_stateA
Transfer playback to another device while restoring the full state: same track, position, shuffle and repeat. Preview by default โ pass dry_run=false to execute the transfer.
| Name | Required | Description | Default |
|---|---|---|---|
| play | No | Start playback after transferring. Default true | |
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Default true โ pass false to commit. | |
| target_device | Yes | Target device id or name substring | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does disclose the important preview-by-default behavior: pass dry_run=false to execute. However, it does not describe side effects such as what happens to the current device, whether playback must be active, or what the preview plan contains. The dry_run detail is also largely restated in the schema, so the added value here is moderate.
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 wasted words. The purpose and state-restoration claim come first, followed immediately by the critical execution instruction about dry_run. This is a model of concision and front-loading.
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 tool with only four simple parameters and no nested objects, the description is complete enough for correct selection and invocation: it explains what the tool does, when it is relevant, and how to execute versus preview. The lack of explicit return-value information is partially mitigated by the response_format parameter and the schema's dry_run description.
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 baseline is 3. The description adds minimal parameter insight beyond restating the dry_run default and the state-restoration intent; it does not clarify the response_format choices or the matching rules for target_device beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action (transfer playback), a specific resource (another device), and the key differentiator: full state restoration including track, position, shuffle, and repeat. This clearly distinguishes it from the sibling transfer_playback, which presumably does not restore state.
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 'while restoring the full state' establishes the intended use case: use this tool when playback state must be preserved across device transfer. It does not explicitly name simpler alternatives like transfer_playback or switch_device, but the context is clear enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
undo_last_mutationA
Undo the most recent reversible mutation (receipt FIFO). Same inversion semantics as undo_mutation. Supports dry_run.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and it does disclose key traits: only reversible mutations are undone, ordering is FIFO by receipt, the inversion semantics match undo_mutation, and dry_run is supported. It does not describe no-op/error behavior, but the main side effects and scope are clear.
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 containing the core operation, ordering semantics, reference semantics, and a preview option. There is no filler, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-optional-param tool the core call is clear, but because there are no annotations and no output schema, the description leaves return behavior and failure/no-op cases unstated and relies on the sibling undo_mutation definition for 'inversion semantics'. The references make it usable, not fully self-contained.
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 schema coverage is 100% and both parameters already have meaningful descriptions. The description only restates dry_run support without adding new relationship, precedence, or format details, so it adds no 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?
States a specific verb ('Undo'), a precise target ('the most recent reversible mutation'), and an ordering rule ('receipt FIFO'). It also distinguishes itself from sibling undo_mutation by selecting the latest entry rather than a specific one, so an agent knows what this tool is for.
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 'most recent reversible mutation' implies when this tool applies, and the reference to undo_mutation signals an alternative exists for other undo cases. It does not explicitly say 'use undo_mutation for a specific receipt' or list exclusion cases, so it leaves some routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
undo_mutationA
Undo a specific mutation by receipt ID. Inverts: playlist_items addโremove, library saveโremove. Non-reversible kinds return not reversible. Supports dry_run.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| receipt_id | Yes | Receipt ID to undo | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does disclose that the tool mutates, handles non-reversible kinds, and supports dry-run previews. However, it does not describe side effects, response content beyond errors, or what happens when a receipt is unknown or expired.
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, front-loaded sentences: purpose, scope with concrete inverse examples, and a limitation/preview note. No filler or redundant restating of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description could do more to explain what the caller receives, especially for successful undo operations. It covers the main inputs and a key error case, but leaves gaps around unknown receipts and how it relates to undo_preview.
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 context that receipt_id refers to a logged mutation and that dry_run previews, but it does not add syntax, formatting, or default behavior beyond what the schema already states.
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 ('Undo'), a specific resource ('mutation by receipt ID'), and explicit inverse mappings. This distinguishes it from siblings like undo_last_mutation and mutation_log_export without needing to open 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?
The 'by receipt ID' requirement and 'Non-reversible kinds return not reversible' imply when the tool is usable, but the description never names alternatives like undo_last_mutation, undo_preview, or receipt_lookup. Usage context is mostly left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
undo_previewA
Dry-run for undo_mutation: shows exactly what a receipt-driven revert WOULD do (diff of before/after, target inversion calls) without executing. 0-2 reads.
| Name | Required | Description | Default |
|---|---|---|---|
| check | No | Optionally verify the target still exists (1 read) | |
| mutation_id | Yes | Receipt id (rcpt_N) to preview reverting | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. It clearly states this is a non-executing dry-run, shows what output will contain (diff, target inversion calls), and gives a read-cost estimate. It does not disclose the exact output format beyond the schema's response_format enum, but the key safety-relevant behavior (no execution) is explicit.
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 compact and front-loaded, with the core purpose stated in the opening phrase. The read-cost hint is a useful addition, and there is no redundant text or repetition of schema details.
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 non-executing preview tool with a fully-covered schema and no output schema, the description covers the essential context: what it does, what it doesn't do, and the cost. It could mention expected response format more explicitly, but the response_format parameter already documents the options. No critical gap for an agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are already well-documented. The description adds meaning by tying mutation_id to a receipt id and mentions the optional check behavior but does not add much beyond the schema. Baseline 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies this as a dry-run for undo_mutation, explicitly stating it shows what a receipt-driven revert would do (diff of before/after, target inversion calls) without executing. This distinguishes it from the actual mutation tool and other read tools, making its purpose unmistakable.
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 frames the tool as a preview before executing undo_mutation, naming the related mutation tool and stating that it does not execute. The '0-2 reads' cost hint additionally signals when it is safe to invoke, giving clear context for when to use it versus the actual undo operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfollow_artistsA
Unfollow one or more artists (1โ50 IDs). Requires user-follow-modify. Set dry_run=true to preview.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Spotify artist IDs to unfollow | |
| dry_run | No | Preview only: show exactly which artists would be unfollowed without calling the API | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It discloses the auth requirement (user-follow-modify), the bulk range (1โ50), and that dry_run previews without calling the API. It does not mention irreversibility or failure modes, but the core behavioral traits are present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The action, constraints, auth requirement, and preview usage are all delivered efficiently 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 mutation tool with no output schema and no annotations, the description is reasonably complete: it covers required permission, ID limits, and a preview mode. It could go slightly further by noting reversibility or response shape, but nothing essential is missing for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains ids, dry_run, and response_format. The description adds marginal value by restating the ID count range and preview behavior, but it does not add meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Unfollow artists') with a clear scope (1โ50 IDs), making the tool's purpose unmistakable. It also naturally distinguishes itself from siblings like follow_artists and get_followed_artists without needing to name 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?
The description provides clear operational context: it states the required auth scope and recommends dry_run=true for previewing. It does not explicitly enumerate when to use an alternative tool, but the tool's purpose is so specific that the usage context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unmuteA
Restore the volume level remembered by mute (falls back to 50% if nothing remembered). Quota: ๐ข 1 write (sidecar read is local).
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| device_id | No | Device to unmute (defaults to the key mute remembered / active device) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does meaningful work: it discloses the fallback-to-50% edge case, the write quota (1 write), and that the sidecar read is local. It does not describe the effect on the active device or what happens on failure, but covers the key behavioral traits.
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. The core action and fallback are front-loaded, and the quota note is a compact second sentence that earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with three optional, fully documented parameters, the description covers behavior, edge case, and cost. The only gap is return-value format, which is partially addressed by the response_format parameter and the absence of an 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?
Schema coverage is 100%, so the schema already documents all three parameters. The description adds context about the remembered-volume mechanism that maps to device_id's default, but does not add syntax or formatting details 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?
States a specific verb (restore), resource (volume level remembered by mute), and the fallback behavior, clearly distinguishing it from siblings like mute, set_volume, and volume_ramp. An agent can tell instantly what it does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'remembered by mute' implies the usage scenario โ unmuting after a mute โ but it never explicitly names alternatives or says when not to use it. With a huge sibling list containing set_volume, volume_ramp and volume_step, explicit routing guidance would help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unpin_playlistB
Unfollow (unpin) a playlist. DELETE /playlists/{id}/followers. Supports dry_run and elicitation for bulk use.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| playlist_id | Yes | Playlist ID to unfollow | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the behavioral burden. It openly reveals the mutation via 'DELETE /playlists/{id}/followers' and notes dry_run support, which is useful. However, it does not disclose side effects, permission requirements, reversibility by re-pinning, or what happens on success/failure, leaving meaningful gaps.
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 with no fluff; the core action and endpoint are front-loaded. The phrase 'elicitation for bulk use' is jargon-heavy and could be clearer, but overall the description is compact and scannable.
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 unfollow operation with a fully documented schema, the description is mostly sufficient to select and invoke the tool. But with no annotations and no output schema, it omits return behavior, authorization needs, and clarification of 'elicitation.' The endpoint reference partially compensates, but an agent still lacks some 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?
Schema coverage is 100%, so the structured descriptions already document playlist_id, dry_run, and response_format. The description's mention of dry_run adds little beyond the schema, and 'elicitation' is mentioned without explanation. It provides only slight context that dry_run is intended for bulk use.
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 verb and resource: 'Unfollow (unpin) a playlist.' It also includes the underlying API endpoint, which removes any ambiguity about what operation is performed. This clearly distinguishes it from related tools like pin_playlist, unfollow_artists, or remove_from_library.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance on when to use this tool versus alternatives. 'Supports dry_run and elicitation for bulk use' hints at bulk scenarios but does not define them or cite sibling tools. An agent must infer that this is the right tool for unfollowing playlists from the name and action phrase alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unplayable_saved_checkA
Audit your saved library for tracks the API marks unplayable (is_playable false or a restrictions block) and show why. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| scan_cap | No | Max saved items to walk per paginated source (default: SPOTIFY_MCP_FETCH_ALL_CAP) | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states 'Read-only', which is meaningful because no annotations are present. It also clarifies that the tool identifies unplayable tracks and explains why. However, it does not describe output behavior, pagination, or edge cases such as an empty library or partial scans.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the action, resource, criteria, and safety profile. There is no filler or redundant restating of the tool name.
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 read-only audit tool with three optional and well-documented parameters, the description covers the core purpose, the exact detection logic, and the read-only guarantee. It lacks a hint about the output structure, though the response_format parameter partially covers that, and it could benefit from naming related tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter already having a description, defaults, and constraints. The tool description adds no parameter-specific meaning, but the schema fully carries that burden, 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 uses a specific verb ('Audit'), a clear resource ('your saved library'), and a precise criterion ('is_playable false or a restrictions block'). It also states the tool will 'show why', which distinguishes it from generic library retrieval or cleanup 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 phrasing clearly implies this is for reviewing saved tracks that the API considers unplayable, but it does not explicitly state when to use it versus alternatives such as dead_library_finder or remove_unavailable_playlist_items. No exclusions or routing guidance are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unsave_orphan_tracksA
Find saved tracks that appear in no playlist (orphans) and optionally unsave them. Quota: ๐ก walks library + all playlists (capped). Destructive when dry_run=false.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| scan_cap | No | Max saved tracks to scan (default fetchAllCap) | |
| max_remove | No | Max orphans to remove (default 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full disclosure burden and does well: it flags the quota tier (๐ก), the scan scope ('walks library + all playlists (capped)'), and the destructive condition ('Destructive when dry_run=false'). It does not mention reversibility or return behavior, but the critical safety traits for a mutation tool are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with zero filler: purpose is front-loaded first, followed by quota behavior and a destructive warning. Every sentence earns its place and the critical safety information is positioned at the end for emphasis.
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 destructive tool with fully self-documenting parameters, the description covers the essentials: what it does, how expensive it is, and when it mutates. Minor gaps remain โ the exact playlist universe (user-owned vs followed playlists) is inferred, and with no output schema the return shape is only hinted at via response_format.
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 baseline of 3 applies โ each of the four parameters is already documented in the schema. The description adds marginal semantic value by clarifying that dry_run=false triggers the destructive path and that unsaving is optional, but it does not extend meaning for scan_cap, max_remove, or response_format.
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-resource pair ('Find saved tracks... and optionally unsave them') and defines the key term 'orphans' inline as 'saved tracks that appear in no playlist'. This scope clearly differentiates it from related siblings like find_duplicate_tracks_across_playlists and dead_library_finder without needing to open their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied: the agent can infer it is for hygiene/cleanup of saved tracks not referenced by any playlist, and 'Destructive when dry_run=false' hints at a safe-preview workflow. However, it names no explicit alternatives, exclusions, or conditions for when this tool is preferable over library_hygiene, dead_library_finder, or remove_saved_items.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unsubscribe_from_showA
Remove ONE saved show from your library (DELETE /me/shows) โ removal verb: also see remove_saved_shows (bulk), delete_playlist_snapshot (local snapshots). After confirming what it is โ previews a PLAN naming the show by default; pass dry_run=false to commit.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: perform the read side and return a PLAN without changing anything. Default true โ pass false to commit. | |
| show_id | Yes | Show ID, spotify:show: URI, or open.spotify.com/show URL | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden, and it reveals the key safety trait: the default is a read-only 'PLAN naming the show', and changes only happen when 'dry_run=false' is passed. It also exposes the underlying DELETE endpoint and that this is a library mutation. It does not discuss reversibility or auth, but the preview/commit distinction is substantive behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the primary action, but it contains awkward artifacts such as 'removal verb:' and the dangling 'After confirming what it is โ' clause that harms readability. It earns some credit for compactness, but the phrasing is not clean enough for a high structure score.
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-required-parameter removal tool, the description covers the essential context: what is removed, via which endpoint, and how the default dry-run-then-commit flow works. The schema fills in parameter formats and response_format options. The main remaining gap is a fuzzy notion of 'confirming what it is,' which is not fully explained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters are fully described in the schema (100% coverage), so the description is not required to re-document them. The phrase 'ONE saved show' adds a small semantic nuance to show_id, and the dry_run commit note mirrors the schema. No meaningful parameter semantics are added 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 opens with a specific verb and object: 'Remove ONE saved show from your library', identifies the exact endpoint (DELETE /me/shows), and immediately distinguishes itself from remove_saved_shows (bulk) and delete_playlist_snapshot (local snapshots). This leaves no doubt about what the tool does and how it differs from its closest siblings.
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 names the relevant alternatives in context ('remove_saved_shows (bulk)', 'delete_playlist_snapshot (local snapshots)'), and the single-vs-bulk contrast gives the agent an explicit routing cue. The default preview behavior and the dry_run=false commit instruction also tell the agent how to invoke it safely. It does not spell out an exhaustive when-not list, but the guidance is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_playlistC
Update a playlist's name, description, or visibility
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Alias for playlist_id | |
| name | No | New name | |
| public | No | New public state | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| description | No | New description | |
| playlist_id | No | Playlist ID | |
| collaborative | No | New collaborative state |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, but it only says 'Update' without explaining mutation semantics. It does not mention whether unspecified fields remain unchanged, whether changes are reversible, required permissions, or that dry_run is available for previewing a change.
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 focused sentence with no wasted words, and the primary action and resource are front-loaded. It loses a point for omitting the collaborative field and for not signaling important behavior like partial updates or dry_run.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a 7-parameter mutation tool with no annotations and no output schema, but the description provides only a minimal summary. It does not clarify core behavioral questions such as whether only provided fields are updated, whether both id and playlist_id are interchangeable, or what happens when no optional field is supplied.
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 parameter descriptions already document each field, including dry_run and the id/playlist_id alias. The tool description adds little beyond naming three of the supported fields and does not clarify the update semantics for collaborative or the alias relationship beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action (update) and resource (a playlist), specifying three updatable aspects: name, description, and visibility. It is distinguishable from siblings like create_playlist or reorder_playlist_items, though it omits the collaborative field that the schema also supports, slightly limiting completeness.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives such as reorder_playlist_items, replace_playlist_items, upload_playlist_cover, or create_playlist. The description does not state that this is for metadata-only updates or mention prerequisites like owning the playlist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_playlist_coverA
Replace a playlist's cover image with a base64-encoded JPEG. Requires the ugc-image-upload scope on the Spotify developer dashboard app (plus playlist-modify-public/private); without it Spotify rejects the upload with 403.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| jpeg_base64 | Yes | Base64-encoded JPEG file contents (max 256 KB decoded) | |
| playlist_id | Yes | Playlist ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses that the tool mutates a playlist cover, requires specific OAuth scopes, and fails with 403 if the scope is missing. While this adds meaningful context about authentication and failure modes, it does not elaborate on side effects beyond replacement or other behaviors such as idempotency, rate limits, or the dry_run parameter's behavior, which the schema does describe but the description does not reinforce.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no fluff. The primary action is front-loaded in the first sentence, and the second sentence adds the essential prerequisite and failure condition. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-parameter tool with no output schema, the description covers the essential context: what it does, what is required (scopes), and a specific failure mode. It lacks explicit alternative guidance and does not mention the dry_run parameter, but given the low complexity and full schema coverage, the description is sufficiently complete for an agent to invoke the tool correctly in most scenarios.
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 baseline is 3. The description does not add meaning beyond the schema: it restates that the image is a base64-encoded JPEG and that playlist_id identifies the target, but the schema already contains these details. No supplementary parameter context, such as size constraints beyond the schema or format nuances, is provided in the 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 states a specific verb and resource: 'Replace a playlist's cover image with a base64-encoded JPEG.' This clearly identifies the mutation operation. However, it does not explicitly distinguish itself from sibling tools like clone_playlist_cover or get_playlist_cover, so while the purpose is clear, the differentiation must be inferred from the name and context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (to replace a playlist cover) and provides a critical prerequisite: the required ugc-image-upload scope plus playlist-modify-public/private, warning about 403 rejection. It does not explicitly mention when not to use it or describe alternatives such as get_playlist_cover for retrieval or clone_playlist_cover for copying an existing cover, leaving usage guidance mostly implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uri_kind_statsB
Aggregate statistics over a batch of Spotify references: counts per form, per kind, share percentages, and the modal kind โ all computed locally.
| Name | Required | Description | Default |
|---|---|---|---|
| uris | Yes | References to profile |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It adds useful context by disclosing 'all computed locally' and listing the output metrics, which goes beyond the name. However, it does not disclose behavior on invalid or malformed URIs, what 'form' versus 'kind' means, or how the 500-item limit is handled โ significant gaps for a tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence: the main clause states action and resource, the colon list enumerates outputs, and the em-dash clause adds the local-computation behavior. Roughly twenty words with no filler; every element earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter local computation tool, the description is mostly adequate: it names the inputs and the full set of computed metrics. But with no output schema and no annotations, it should clarify what 'form' and 'kind' denote and how invalid URIs are treated. The lack of disambiguation from very similar siblings also leaves the context incomplete for an agent navigating the large URI-utility cluster.
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 the single 'uris' parameter (albeit weakly as 'References to profile'). Per baseline, this earns a 3. The description adds the framing that these are 'Spotify references' and clarifies what analysis is performed on them, but it does not specify expected URI formats or edge-case constraints beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Aggregate statistics'), a clear resource ('a batch of Spotify references'), and enumerates the exact computed outputs (counts per form, per kind, share percentages, modal kind). It is clear on its own, but it does not explicitly distinguish itself from close siblings like count_uris_by_type, classify_spotify_uris, or uri_namespace_census.
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. The description never names a sibling or states a selection condition, which matters given the dense cluster of URI-analysis tools in the sibling list (count_uris_by_type, parse_spotify_uri, classify_spotify_uris, uri_namespace_census). The only hint is 'computed locally,' which implies no network dependency but does not route the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uri_namespace_censusA
Census of a batch of Spotify references grouped by reference form (uri/url/id/invalid) and by entity kind โ a local frequency table, no network calls.
| Name | Required | Description | Default |
|---|---|---|---|
| uris | Yes | Up to 500 Spotify references | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must convey behavioral traits. It states 'no network calls' and that it produces a 'frequency table,' which are useful. However, it does not mention whether it handles malformed inputs gracefully, anything about performance for large batches, or the exact output format (though schema covers max 500). The description adds some transparency beyond the schema but could be more explicit about return structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tightly constructed sentence that includes the key attributes: purpose, grouping, and the local/no-network nature. No unnecessary words; it is highly efficient 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?
The tool has no output schema, so the description should convey what the result looks like. It states a 'frequency table' grouped by reference form and entity kind, which gives a reasonable mental model. However, it does not detail the exact structure or mention the effect of the response_format parameter (though that is in the schema). For a simple analysis tool, this is largely sufficient, but slightly more detail about the returned representation would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, meaning both parameters (uris and response_format) are already described in the schema. The description does not add extra meaning to parameters beyond what the schema provides. Its mention of 'grouped by reference form' indirectly relates to the input but adds no new parameter-specific guidance, so a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: it performs a 'census' of Spotify references, grouping them by reference form (uri/url/id/invalid) and entity kind. It also notes 'a local frequency table, no network calls,' which distinguishes it from many sibling tools that make API calls. This is a precise and unambiguous purpose.
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 by stating it is a local frequency table with no network calls, which suggests it is for offline analysis. However, it does not explicitly name alternative tools (e.g., classify_spotify_uris, count_uris_by_type) or state when to choose this over them. Guidelines are only implicit, not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uri_shorthand_expandA
Expand shorthand Spotify refs like "t:", "pl/", or "track:" into canonical spotify: URIs. Codes: t/tr=track, al=album, ar=artist, pl/p=playlist, sh=show, ep=episode, ab=audiobook, u=user โ local only.
| Name | Required | Description | Default |
|---|---|---|---|
| refs | Yes | Shorthand refs like "t:22charId" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses a key trait: 'local only,' indicating no network/API call. It also documents the shorthand code mappings. It does not detail error handling for invalid refs or the exact return shape, but the core behavior is 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 a single dense sentence with no filler. Every element earns its place: the action, examples, code mapping, and the local-only note. Information is front-loaded with the purpose before the code list.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with no output schema, the description is mostly complete: it explains the input format, the output, and the local behavior. Remaining gaps are minor โ exact return type and invalid-input handling โ and do not prevent 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 coverage is 100% for the single refs parameter, but the description adds significant meaning beyond the schema by explaining all accepted codes (t/tr, al, ar, pl/p, sh, ep, ab, u) and giving multiple format examples. This goes beyond the schema's minimal example.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Expand') and resource ('shorthand Spotify refs'), and specifies the output ('canonical spotify: URIs'). It provides examples and a full code mapping, making it distinct from sibling URI tools like normalize_spotify_uri or parse_spotify_uri.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool โ whenever you have shorthand refs like 't:<id>' or 'pl/<id>' โ and notes it is 'local only.' However, it does not explicitly contrast with alternatives such as canonicalize_spotify_uri or make_spotify_uri, nor state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uri_to_base62A
Strip a spotify: URI (or URL) down to its raw base62 ID string, locally; null when the reference has no extractable ID.
| Name | Required | Description | Default |
|---|---|---|---|
| uri | Yes | Spotify URI, URL, or bare ID | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does disclose two important behaviors: the operation happens locally and returns null when no extractable ID exists. It does not detail edge cases like malformed URLs or behavior across all URI kinds, but the core behavioral contract is visible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. It states the action, the input, the output, the locality, and the null behavior efficiently.
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 local utility with two well-documented parameters, the description covers the essential behavior: input forms, output type, and null case. It is slightly incomplete in not clarifying how response_format affects the output, but the schema already documents that parameter.
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 parameters are already well documented in the schema. The description adds general context about the output but does not materially extend the meaning of the uri or response_format parameters beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ("Strip") and a specific resource (a Spotify URI/URL down to its raw base62 ID string), which clearly identifies the tool's function. It also distinguishes it from nearby URI utilities by emphasizing the extraction of the raw base62 ID and the local, non-network nature of the operation.
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 explicit guidance about when to use this tool versus alternatives such as extract_spotify_id, format_spotify_uri, or normalize_spotify_uri. The phrase "locally" implies a lightweight local transformation, but no alternatives or exclusion criteria are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_spotify_uriA
Validate a Spotify reference against the URI grammar and 22-char base62 ID rule locally, returning a field-by-field validity report.
| Name | Required | Description | Default |
|---|---|---|---|
| uri | Yes | Spotify URI, URL, or bare ID to validate |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It states that validation happens locally, applies specific grammar/ID rules, and returns a structured validity report. It doesn't mention edge-case handling or whether invalid input ever errors, but the disclosed behavior is substantial for a validation-only 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?
A single, tightly written sentence that front-loads the action and includes the most decision-relevant details: local execution, validation rules, and report shape. No filler 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?
For a simple one-parameter utility, the description is largely complete: it says what is validated, how it is validated, where it runs, and what is returned. The lack of an output schema makes the absence of exact report-field details a minor gap, but not a blocking one.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers the single parameter with 100% description coverage, specifying that it accepts a URI, URL, or bare ID. The description adds 'Spotify reference' but does not materially extend the parameter semantics 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 uses a specific verb ('Validate'), names the resource ('Spotify reference'), and specifies the exact rules ('URI grammar and 22-char base62 ID rule'). The phrase 'returning a field-by-field validity report' distinguishes it from nearby boolean-returning validators like is_valid_spotify_uri.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: this is the local validation tool that produces a detailed field-by-field report. It implicitly tells an agent when to choose it over a simpler boolean check, though it does not explicitly name alternatives or state exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_receiptA
Verify that a previous mutation actually landed on Spotify by looking up its receipt
| Name | Required | Description | Default |
|---|---|---|---|
| receipt_id | Yes | Receipt ID from a receipt-bearing mutation result |
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 discloses the tool's verifcation behavior as read-only confirmation of a mutation, but it does not state whether verification is asynchronous, how receipt IDs expire, what happens if the mutation hasn't propagated, or what the return value looks like. Basic behavioral context is present, but depth is limited.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, fully front-loaded with the main purpose, and no filler. It earns its place by expressing both the operation and its trigger condition efficiently.
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 tool with full schema coverage and no output schema, the description is mostly sufficient. However, because no annotations exist, the agent may benefit from knowing whether verification is best-effort, whether a not-found receipt implies mutation failure or eventual consistency, and what response shape to expect. These are meaningful gaps for an AI agent deciding whether to act on the result.
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 describes receipt_id as 'Receipt ID from a receipt-bearing mutation result.' The description adds a crucial semantic layer by clarifying that this parameter is a confirmation artifact for a prior mutation, which helps the agent understand provenance. This is modest value beyond the schema, so a 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb-resource pair: 'verify' that a previous mutation 'landed on Spotify' by 'looking up its receipt.' This distinguishes it from the near-sibling receipt_lookup and other mutation-related tools, since it explicitly frames the purpose as post-mutation confirmation rather than generic receipt retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use this tool: after a mutation that returns a receipt, to confirm the change took effect. While it does not explicitly name alternatives or exclusions, the phrasing 'actually landed on Spotify' provides clear context distinguishing it from pure lookup tools like receipt_lookup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
volume_rampA
Generic volume ramp to a target percent over N minutes (up OR down, step-controlled, optional end-state pause/play) โ a superset of schedule_wind_down (which is down-only with floor+pause). Quota: ๐ข stepped PUT /me/player/volume writes (ceil(minutes/step_minutes) calls), in-process, cancel-safe (restart replaces).
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| minutes | No | Total ramp duration in minutes (default 5) | |
| device_id | No | Target device id (defaults to active device) | |
| end_state | No | Applied after the final step (default none) | none |
| step_minutes | No | Minutes between steps (default 1) | |
| target_percent | Yes | Ramp target (0-100) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full behavioral burden and delivers: it discloses the underlying stepped PUT/me/player/volume writes, the exact quota formula (ceil(minutes/step_minutes) calls), that it is in-process, and that it is cancel-safe via restart replacement. This gives an agent concrete expectations about side effects and lifecycle 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?
Two dense sentences earn their place: the first states the core behavior and the superset relation, the second provides quota and safety semantics. It is front-loaded with the main purpose and avoids 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?
The description covers the core ramp behavior, the sibling alternative, quota impact, and cancel-safety, which is robust for a tool with no output schema. It does not explicitly mention what response the agent should expect, but the response_format parameter and schema descriptions fill most of that gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaning beyond parameter names by explaining that the operation is a ramp over minutes, step-controlled, and that quota scales with minutes/step_minutes; this enriches understanding of target_percent, minutes, and step_minutes. It does not detail every parameter, but the schema already documents them.
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 states a specific action: a generic volume ramp to a target percent over N minutes, explicitly covering up or down, step-control, and optional end-state pause/play. It also differentiates from schedule_wind_down by naming it and clarifying the superset relationship.
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 clearly contrasts volume_ramp with schedule_wind_down, telling the agent when this tool is appropriate (up or down, step-controlled, with optional pause/play) versus the sibling (down-only with floor+pause). It does not explicitly mention volume_step, set_volume, or other volume-related siblings as alternatives, so guidance is partial but helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
volume_reportA
Read-only volume snapshot across all devices, including sidecar presets vs live deltas โ "what's the volume everywhere right now?". Quota: ๐ข 1 read (GET /me/player/devices).
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and succeeds: it explicitly declares read-only status, discloses the underlying call (GET /me/player/devices), and quantifies cost (๐ข 1 read). The 'sidecar presets vs live deltas' phrasing also reveals the comparison behavior. It stops short of covering edge cases like no active devices, but the safety/cost profile is clearly communicated.
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 plus a quota tag: safety, scope, intent, and cost are all front-loaded with no filler. The emoji-qualified quota and inline endpoint add operational value without bloating the 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?
This is a low-complexity tool (one optional parameter, no required params, no output schema), and the description plus the well-documented response_format cover the essentials: what it reports, across what scope, and at what cost. The only notable gap is behavior when no devices are active, a minor edge case for an otherwise complete read-only report tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: response_format's enum values are each explained in the schema itself ('concise' = human prose, 'json' = raw API object). The description adds nothing about the parameter, which is acceptable at this coverage level, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: a read-only 'volume snapshot across all devices', with explicit scope ('including sidecar presets vs live deltas') and a plain-language intent model ('what's the volume everywhere right now?'). It is clearly distinguishable from volume-control tools like set_volume, volume_step, and volume_ramp, though it does not explicitly name the closest sibling get_device_volume_report.
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 quoted intent phrase gives a usable trigger for when to call it, and the quota note ('1 read') communicates the cost. However, it provides no when-not-to-use guidance or routing against the many volume-related siblings (get_device_volume_report, compare_devices, get_devices), leaving the agent to infer boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
volume_stepA
Nudge volume up/down by a step (reads current volume via GET /me/player, then PUT /me/player/volume clamped 0-100). ๐ก (1 read + 1 write).
| Name | Required | Description | Default |
|---|---|---|---|
| step | Yes | Delta, e.g. +10 or -10 | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| device_id | No | Target device id (else active) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full safety burden, and it does well by explicitly disclosing that the tool performs one read and one write via named endpoints. It also reveals the clamping behavior to 0-100, which is behavioral information beyond what the schema or parameter descriptions provide.
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 one compact sentence that front-loads the core action, then efficiently packs the endpoint mechanics and the read/write cost into a parenthetical. Every element adds value, and nothing 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?
For a small mutation tool with four well-documented parameters and no output schema, the description provides the essential mechanics, the clamp behavior, and a clear cost signal. It could go further by noting prerequisites like the need for an active device or what happens when no device_id is specified and none is active, but it is reasonably complete for an agent to invoke safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all four parameters at 100% coverage, so the baseline is 3. The description adds little parameter-specific meaning beyond restating the step-based intent, and the clamp detail applies to the resulting volume rather than to any parameter's format.
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 action ('Nudge volume up/down by a step') and the resource (player volume), making it immediately distinct from absolute setters like set_volume or gradual rampers like volume_ramp. It also names the exact endpoints involved, leaving no ambiguity about what the tool operates on.
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 this tool is for relative, step-based volume changes rather than absolute setting, but it never explicitly states when to choose it over set_volume or volume_ramp. It gives no exclusion criteria or alternative tool names, leaving the agent to infer the intended usage context from the verb 'nudge'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
watch_artistsA
Add artists to a local watchlist sidecar for new-release polling
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Watchlist name. Default: "default" | |
| artist_ids | Yes | Spotify artist IDs to watch | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose that this writes to a 'local watchlist sidecar' rather than altering Spotify state, which is useful. However, it does not mention idempotency, duplicate handling, persistence, or what happens if the sidecar does not yet exist.
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 action and resource, then states the purpose. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description and schema together are sufficient for a basic understanding, but there is no output schema and no annotation to clarify return behavior or side effects. The description does not explain what the tool returns, how the watchlist is stored, or how this watchlist is later consumed by polling workflows.
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 three parameters. The tool description adds no parameter-specific meaning beyond what is already present in the schema, making the baseline score of 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Add'), a concrete resource ('local watchlist sidecar'), and the purpose ('new-release polling'). This clearly distinguishes it from read-only artist tools and from sibling tools like check_artist_releases or save_artist_new_releases.
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 purpose 'for new-release polling' implies when this tool is appropriate, but the description never explicitly says when to use it instead of related siblings like save_artist_new_releases, artistwatch_new_additions, or save_release_radar. Context is present, but exclusions and alternatives are left unstated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
weekday_heatmapA
Plays bucketed by weekday ร daypart (morning/afternoon/evening/night) โ listening_heatmap is hour-of-day; this adds the weekly dimension. Quota: ๐ข 1-2 reads, local compute.
| Name | Required | Description | Default |
|---|---|---|---|
| pages | No | Recently-played pages to walk (default 2) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
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 discloses quota ('๐ข 1-2 reads, local compute'), which is helpful behavioral context. However, it doesn't state whether it requires recently-played history, whether pagination pages are walked from the start, or whether the heatmap is returned as structured data vs prose. It's a read-only tool by nature but that's not explicit.
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 zero waste: the first explains what the tool does and how it relates to a sibling; the second communicates quota and compute cost. Front-loaded with the core behavior.
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 read-only aggregation tool with two well-documented parameters and no output schema, the description is mostly complete. It explains the bucketing, the distinction from the hour-of-day heatmap, and quota. Minor gaps: doesn't say what data source is used (recently played vs full history) or whether 'pages' implies walking recently-played pages in order.
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% โ both pages and response_format have descriptions in the schema. The tool description adds no additional parameter semantics beyond stating the daypart buckets. Baseline 3 is appropriate because the schema already documents the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool groups plays by weekday and daypart (morning/afternoon/evening/night), and differentiates it from listening_heatmap which is hour-of-day. This distinguishes it from sibling tools like listening_clock_heatmap and weekday_listening_report.
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 'listening_heatmap is hour-of-day; this adds the weekly dimension', which tells the agent when to choose this tool over the most similar alternative. It doesn't enumerate all possible alternatives or exclusions, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
weekday_listening_reportA
Break recently-played history down by weekday (plays, unique tracks, unique artists, busiest day; MonโSun ordering, default 150 items). Quota: GET /me/player/recently-played cursor walk.
| Name | Required | Description | Default |
|---|---|---|---|
| max_items | No | Max recently-played items to walk (default 150; the API pages 50 per call). | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses the data source, the GET-based quota impact, cursor-walk behavior, weekday ordering, and default item count. It does not specify timezone handling or define 'plays' precisely, but overall it is transparent about how the tool operates.
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 compact and front-loaded: the first sentence states purpose and output, the second adds quota/API behavior. There is no filler or redundant restating of the tool name.
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 read-heavy aggregation tool with no output schema and no annotations, the description covers the key context: source data, aggregation fields, ordering, default scope, and quota cost. Minor gaps remain around timezone interpretation and the exact structure of concise versus detailed output, but these are not critical for 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%, so both parameters are already documented. The description adds a little behavioral context (MonโSun ordering, default 150 items), but it does not substantially enhance understanding of max_items or response_format beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Break recently-played history down by weekday') and names the exact output dimensions (plays, unique tracks, unique artists, busiest day). It is clear, though it does not explicitly distinguish itself from similar sibling tools like weekday_heatmap or listening_report.
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 intended use is implied: use this when you need a weekday breakdown of recently-played history. However, it gives no explicit when-to-use guidance, exclusions, or alternatives, leaving the agent to infer when this is preferable over related reporting tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
week_in_review_playlistA
Create a "Week of " playlist from the last 7 days of plays: deduped, ordered by recency. Rerunning replaces the same playlist's content โ your weekly ritual in one call. Quota: 1-3 reads + 1-3 writes. dry_run previews the tracklist.
| Name | Required | Description | Default |
|---|---|---|---|
| rerun | No | If a playlist with the same name exists, replace its content instead of failing. | |
| dedupe | No | Keep one entry per track. Default true. | |
| dry_run | No | Preview the plan (default true). | |
| week_offset | No | 0 = last 7 days, 1 = the week before that, etc. | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With zero annotations provided, the description carries the full burden and delivers substantive disclosure: rerun replaces rather than duplicates, quota cost is stated (1-3 reads + 1-3 writes), dry_run is offered as a safety valve, and transformations (dedupe, recency order) are named. It doesn't cover empty-week or failure behavior, but the core side-effect profile is well communicated.
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 short sentences with zero filler: purpose is front-loaded, followed by rerun semantics, quota, and dry_run. Every clause earns its place and conveys distinct actionable 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?
Despite having no annotations and no output schema, the description covers purpose, naming convention, transformations, rerun idempotency, quota cost, and the dry-run preview. The main residual gap is return-format behavior, which is partially addressed by the response_format parameter in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters with defaults and meaning. The description's mention of 'dry_run previews the tracklist' mildly reinforces the schema but adds no new parameter-level semantics, so the 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?
States a specific verb ('Create'), a concrete resource (a 'Week of <date>' playlist), and precise scope ('last 7 days of plays: deduped, ordered by recency'). This clearly distinguishes it from siblings like get_recently_played (read-only fetch), create_playlist (blank playlist), and year_in_review/monthly_listening_report (different aggregation windows).
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?
'Your weekly ritual in one call' gives clear recurring-use context, and 'Rerunning replaces the same playlist's content' explains re-execution behavior. It does not explicitly name alternative tools or exclusion conditions, but the intended invocation scenario is apparent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
weekly_rotation_reportA
Track day-by-day rotation from recently-played history: plays, unique tracks/artists, and first-heard-this-window tracks per day (oldestโnewest, default 150 items). Quota: GET /me/player/recently-played cursor walk.
| Name | Required | Description | Default |
|---|---|---|---|
| max_items | No | Max recently-played items to walk (default 150; the API pages 50 per call). | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It does usefully disclose the underlying API call ('GET /me/player/recently-played'), the cursor-walk quota behavior, ordering (oldestโnewest), and the default item count. This is meaningful operational context beyond the tool's name, though it does not mention error behavior or auth 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 tight sentences carry the full definition. The first front-loads the core purpose and outputs; the second adds the quota and API detail. No filler, no redundant restating of the tool name, and every phrase adds 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?
The description covers the source data, aggregation granularity, output dimensions, ordering, default limit, and API quota behavior. Given the schema documents parameter details and output format choices, this is nearly complete for an analysis tool. Minor gaps like timezone/day-boundary handling and explicit response shape do not critically block correct 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 description coverage is 100%, so the schema already documents both parameters well. The description adds 'oldestโnewest' and 'default 150 items,' but the default is also present in the schema. It does not materially expand meaning beyond the structured field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: tracking day-by-day rotation from recently-played history, with concrete output dimensions (plays, unique tracks/artists, first-heard tracks). It is clear enough to distinguish from generic listening history tools, though it does not explicitly contrast itself with sibling report tools like track_rotation_report or listening_week_in_time.
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 use case is implied: it is for day-by-day rotation analysis over recently-played history. However, the description gives no explicit guidance on when to choose this tool over similar report tools, and no exclusions or alternative routing. It is adequate but leaves the selection burden mostly on the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whats_newA
Personal new-releases radar: derive what's new from followed artists (new albums/singles) and saved shows (new podcast episodes), replacing the removed browse/new-releases surface. WARNING: N followed artists = N+1 API requests (1 follow page + N album lookups); a large library can exhaust small dev-account quotas in one call. Use max_artists to budget and dry_run to preview the cost before running. Decision guide: whats_new for personal follows radar; search_fresh for query-scoped tag:new, search/search_deep for general catalog, search_by_isrc for ISRC-exact.
| Name | Required | Description | Default |
|---|---|---|---|
| kinds | No | Which sources to scan. Default: ['albums','podcasts'] | |
| since | No | Only include releases on/after this date (YYYY-MM-DD), or 'last-check' to resume from the stored watermark file (default path ~/.spotify-mcp/freshness.json) | |
| dry_run | No | Preview only: validate inputs and describe exactly what would change without performing it | |
| days_back | No | Look this many days back when `since` is omitted. Default: 30 | |
| max_artists | No | Per-call budget for artist album lookups (and show episode lookups). Default: 25 (or SPOTIFY_MCP_FRESHNESS_BUDGET). Walk caps at this budget and reports truncation. Independent of SPOTIFY_MCP_FETCH_ALL_CAP. WARNING: each lookup is an API request. | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses the N+1 API request cost model ('N followed artists = N+1 API requests'), warns about quota exhaustion, and recommends safe usage through max_artists and dry_run. This is substantial non-obvious behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each earning its place: purpose first, then cost warning, then mitigation, then decision guide. It is front-loaded and free of filler, packing maximum useful information into minimal space.
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 complex, high-cost tool with 7 parameters and no annotations or output schema, the description is remarkably complete. It covers purpose, usage boundaries, API cost, mitigation, alternatives, and key parameter semantics. Nothing essential for correct invocation seems 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 adds value beyond the schema by linking max_artists and dry_run to the API-cost model, which helps an agent choose parameter values intelligently. It does not repeat all parameter descriptions, but the schema already covers them fully.
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 verb and resource: 'derive what's new from followed artists (new albums/singles) and saved shows (new podcast episodes)'. It also distinguishes the tool from siblings in the decision guide, naming search_fresh, search/search_deep, and search_by_isrc as alternatives.
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 'Decision guide' explicitly states when to use this tool vs alternatives. It also provides concrete operational guidance: 'Use max_artists to budget and dry_run to preview the cost before running', which goes beyond generic when-to-use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
where_was_iA
Orient yourself in an audiobook: matches current playback against the full chapter list and reports which chapter you are on, how far into it, and how much listening time remains.
| Name | Required | Description | Default |
|---|---|---|---|
| audiobook_id | Yes | Spotify audiobook ID | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It states that the tool compares current playback to the full chapter list and only reports results, strongly implying a read-only, non-mutating operation. It could be more explicit about failure modes like no active playback, but the core behavior is 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 a single, dense sentence with no filler. The verb and resource are front-loaded, and every clause adds information about what the tool does or returns.
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 must convey return semantics itself. It covers the key results: chapter identity, progress within it, and remaining listening time. It does not specify exact field names or edge-case behavior, but for a positioning query this is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the description does not need to re-document parameters. It adds slight context by implying audiobook_id refers to the currently playing audiobook, but it does not meaningfully extend what the schema already states about audiobook_id or response_format.
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 a specific use case ('orient yourself in an audiobook') and concrete outputs: current chapter, playback progress, and remaining listening time. It clearly distinguishes itself from generic playback tools, but does not explicitly compare against similar siblings like audiobook_progress or audiobook_chapter_map.
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 'Orient yourself in an audiobook' plus 'matches current playback' makes the intended trigger clear: the agent should use this when a user asks where they are in an audiobook or how much is left. It does not list exclusions or alternatives, but the context is strong enough without them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
year_explorerA
Time-machine view of one release year built from your own library plus a small catalog supplement: saved albums and saved tracks originally released in that year, plus top catalog matches via a year: search. Quota: 2 capped library walks + 1 /search call.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | Release year to explore | |
| market | No | ISO 3166-1 alpha-2 market code (e.g. 'US'); omit for 'from_token' behaviour | |
| catalog_limit | No | Results per page, 1-10 (Feb-2026 /search cap). Default: 5 | |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
| saved_album_cap | No | Default: 1000 | |
| saved_track_cap | No | Default: 2000 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full transparency burden. It discloses the operational quota ('2 capped library walks + 1 /search call') and clarifies the behavior of combining saved items with catalog matches. The term 'view' implies a read-only operation, though an explicit 'does not modify data' statement would strengthen it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two well-structured sentences: the first front-loads the core purpose and data sources, and the second states the quota. There is no redundant or vague filler, making it easy to parse and act on.
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 tool with six parameters, no output schema, and no annotations, the description gives a solid high-level picture: purpose, data sources, and quota. The schema covers parameter semantics, so nothing critical is missing for selection or invocation, though a brief note on when not to use it would make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All six parameters are fully described in the schema, so the baseline is 3. The description adds context about caps and search usage that relates to the parameters, but it does not introduce meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's function: a year-based time-machine view combining saved albums/tracks with catalog matches. It distinguishes itself from siblings by specifying the exact data sources and the year: search mechanism, so an agent can separate it from generic search or saved-library tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides enough detail to infer the tool is for exploring a specific release year across both library and catalog. However, it does not explicitly state when to choose this tool over alternatives like saved_albums_by_year or search, nor does it mention exclusions or preferred contexts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
year_in_reviewA
Spotify-Wrapped substitute: top tracks/artists across all top-list time ranges, decade mix, library growth and discovery ratio, rendered as a markdown review. Local compute. Quota: ~9 reads (3 top ranges ร 2 lists + library + history).
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Year to review (used for library-growth histogram framing). Default: current year. | |
| max_results | No | Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50) | |
| output_format | No | Render as markdown review or raw json | markdown |
| response_format | No | 'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object | concise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, and it does well: 'Local compute' reveals the execution/privacy trait, and 'Quota: ~9 reads (3 top ranges ร 2 lists + library + history)' is an unusually precise cost disclosure that strongly implies a read-only operation. It does not cover edge cases like empty years or missing history data, but the operational traits that matter most โ cost and compute locality โ are clearly disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste. The 'Spotify-Wrapped' hook is front-loaded in the first clause, and the second sentence packs local compute and the quota into a compact, parseable breakdown ('3 top ranges ร 2 lists + library + history'). 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?
For a complex aggregator with no annotations and no output schema, the description adequately covers scope, cost, and output format. Gaps remain: the unresolved output_format/response_format 'json' overlap, how max_results interacts with the fixed ~9-read quota, and no signal about behavior for years with no history data. An agent can call the tool correctly in the common case, but not with full confidence about edge behavior.
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 baseline is 3; the tool description itself adds no per-parameter detail beyond the schema. Notably, it fails to disambiguate the interaction between output_format and response_format, which both accept a 'json' value โ an agent cannot tell which takes precedence or whether they are aliases. The description leaves this ambiguity unresolved, so it neither adds value nor actively misleads.
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 'Spotify-Wrapped substitute,' a strong semantic anchor, then enumerates the concrete resources (top tracks/artists across all top-list time ranges, decade mix, library growth, discovery ratio) and the output form ('rendered as a markdown review'). This compound scope clearly distinguishes the tool from narrower siblings like get_top_tracks, top_artists_by_range, or discovery_ratio.
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 'Spotify-Wrapped substitute' framing and the quota disclosure (~9 reads) implicitly tell an agent this is a heavy, comprehensive annual report, implying it is for full-scope end-of-year reviews rather than single-metric lookups. However, it never names alternatives or states when NOT to use it, despite many overlapping siblings (listening_report, taste_shift_report, library_growth_report, discovery_ratio) that an agent could confuse it with. The guidance is implied, not explicit.
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.
19 tool updates
v1.30.0- Added
statsfm_artist_affinity - Added
statsfm_exposure_check - Added
statsfm_forgotten_favorites - Added
statsfm_listening_eras - Added
statsfm_listening_sessions - Added
statsfm_record_feedback - Added
statsfm_taste_profile - Added
statsfm_taste_recommendations - Added
taste_daily_brief - Added
taste_diamond_rotation - Added
taste_era_playlist - Added
taste_forgotten_bangers - Added
taste_genre_bridge - Added
taste_listening_clock - Added
taste_novelty_loyalty - Added
taste_obsession_ladder - Added
taste_revival_queue - Added
taste_to_playlist - Added
taste_weekly_recap
38 tool updates
v1.29.0- Added
artist_affinity - Added
exposure_check - Added
forgotten_favorites - Added
listening_eras - Added
listening_sessions - Added
record_feedback - Added
statsfm_album_date_stats - Added
statsfm_album_stats - Added
statsfm_artist_date_stats - Added
statsfm_artist_stats - Added
statsfm_catalog_album - Added
statsfm_catalog_artist - Added
statsfm_catalog_track - Added
statsfm_charts_albums - Added
statsfm_charts_artists - Added
statsfm_charts_tracks - Added
statsfm_charts_users - Added
statsfm_friend_count - Added
statsfm_friends - Added
statsfm_genre_artists - Added
statsfm_now_playing - Added
statsfm_recaps - Added
statsfm_recent_streams - Added
statsfm_records_artists - Added
statsfm_resolve_user - Added
statsfm_search - Added
statsfm_streams_stats - Added
statsfm_top_albums - Added
statsfm_top_albums_from_artist - Added
statsfm_top_artists - Added
statsfm_top_genres - Added
statsfm_top_tracks - Added
statsfm_top_tracks_from_album - Added
statsfm_top_tracks_from_artist - Added
statsfm_track_date_stats - Added
statsfm_track_stats - Added
taste_profile - Added
taste_recommendations
64 tool updates
v1.28.0- Changed
audiobook_progress2 fields changed- changed
Input schema / properties / market / descriptionPrevious value: -"Market"New value: +"Market, e.g. 'US'" - added
Input schema / properties / market / patternAdded value: +"^[A-Za-z]{2}$"
- Changed
backup_first1 field changed- added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Added
batch_add_to_queue - Changed
browse_category_deepdive2 fields changed- changed
Input schema / properties / country / descriptionPrevious value: -"ISO 3166-1 alpha-2 country code"New value: +"ISO 3166-1 alpha-2 country code, e.g. 'US'" - added
Input schema / properties / country / patternAdded value: +"^[A-Za-z]{2}$"
- Changed
category_resolver2 fields changed- changed
Input schema / properties / country / descriptionPrevious value: -"ISO 3166-1 alpha-2 country code"New value: +"ISO 3166-1 alpha-2 country code, e.g. 'US'" - added
Input schema / properties / country / patternAdded value: +"^[A-Za-z]{2}$"
- Changed
clean_all_playlists2 fields changed- changed
Input schema / properties / apply / descriptionPrevious value: -"false (default): report only โ nothing is changed. true: execute the cleanup across all playlists with duplicates."New value: +"Deprecated alias for dry_run โ prefer dry_run. false (default): report only. true: execute the cleanup across all playlists with duplicates. If both are given, dry_run wins." - added
Input schema / properties / dry_runAdded value: +{ + "description": "Preview only โ when true, nothing is changed; when false via dry_run=false or apply=true, executes the cleanup", + "type": "boolean" +}
- Changed
create_smart_playlist1 field changed- added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Changed
diff_since_snapshot1 field changed- added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Changed
find_duplicate_playlists1 field changed- added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Changed
find_show_by_publisher2 fields changed- changed
Input schema / properties / market / descriptionPrevious value: -"ISO 3166-1 alpha-2 market for the search"New value: +"ISO 3166-1 alpha-2 market for the search, e.g. 'US'" - added
Input schema / properties / market / patternAdded value: +"^[A-Za-z]{2}$"
- Changed
find_tool1 field changed- added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Changed
get_album_tracks1 field changed- added
Input schema / properties / fetch_allAdded value: +{ + "description": "When true, walk all pages via getAllPages up to cap (fetch_all_cap) โ use for \"all\" queries. Default: false", + "type": "boolean" +}
- Changed
get_artist_albums1 field changed- added
Input schema / properties / fetch_allAdded value: +{ + "description": "When true, walk all pages via getAllPages up to cap (fetch_all_cap) โ use for \"all\" queries. Default: false", + "type": "boolean" +}
- Changed
get_artist_discography2 fields changed- changed
Input schema / properties / market / descriptionPrevious value: -"ISO 3166-1 alpha-2 country code"New value: +"ISO 3166-1 alpha-2 country code, e.g. 'US'" - added
Input schema / properties / market / patternAdded value: +"^[A-Za-z]{2}$"
- Changed
get_artist_top_tracks2 fields changed- changed
Input schema / properties / market / descriptionPrevious value: -"ISO 3166-1 alpha-2 country code. Defaults to the account country."New value: +"ISO 3166-1 alpha-2 country code, e.g. 'US' โ defaults to the account country" - added
Input schema / properties / market / patternAdded value: +"^[A-Za-z]{2}$"
- Changed
get_categories2 fields changed- changed
Input schema / properties / country / descriptionPrevious value: -"ISO 3166-1 alpha-2 country code"New value: +"ISO 3166-1 alpha-2 country code, e.g. 'US' (alias: market)" - added
Input schema / properties / country / patternAdded value: +"^[A-Za-z]{2}$"
- Changed
get_category2 fields changed- changed
Input schema / properties / country / descriptionPrevious value: -"ISO 3166-1 alpha-2 country code"New value: +"ISO 3166-1 alpha-2 country code, e.g. 'US'" - added
Input schema / properties / country / patternAdded value: +"^[A-Za-z]{2}$"
- Changed
get_category_playlists2 fields changed- changed
Input schema / properties / country / descriptionPrevious value: -"ISO 3166-1 alpha-2 country code"New value: +"ISO 3166-1 alpha-2 country code, e.g. 'US' (alias: market)" - added
Input schema / properties / country / patternAdded value: +"^[A-Za-z]{2}$"
- Changed
get_episode2 fields changed- changed
Input schema / properties / market / descriptionPrevious value: -"ISO 3166-1 alpha-2 country code"New value: +"ISO 3166-1 alpha-2 country code, e.g. 'US'" - added
Input schema / properties / market / patternAdded value: +"^[A-Za-z]{2}$"
- Changed
get_episode_details2 fields changed- changed
Input schema / properties / market / descriptionPrevious value: -"ISO 3166-1 alpha-2 market for availability"New value: +"ISO 3166-1 alpha-2 market for availability, e.g. 'US'" - added
Input schema / properties / market / patternAdded value: +"^[A-Za-z]{2}$"
- Changed
get_playlist_followers1 field changed- added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Changed
get_playlist_items1 field changed- added
Input schema / properties / fetch_allAdded value: +{ + "description": "Fetch every item across pages (up to 500), continuing FROM offset rather than restarting at 0. limit is the page size. Note: library tools' fetch_all instead ignores offset โ contracts differ between modules (#110).", + "type": "boolean" +}
- Changed
get_saved_albums2 fields changed- changed
Input schema / properties / market / descriptionPrevious value: -"ISO 3166-1 alpha-2 country code"New value: +"ISO 3166-1 alpha-2 country code, e.g. 'US'" - added
Input schema / properties / market / patternAdded value: +"^[A-Za-z]{2}$"
- Changed
get_saved_episodes2 fields changed- changed
Input schema / properties / market / descriptionPrevious value: -"ISO 3166-1 alpha-2 country code"New value: +"ISO 3166-1 alpha-2 country code, e.g. 'US'" - added
Input schema / properties / market / patternAdded value: +"^[A-Za-z]{2}$"
- Changed
get_saved_tracks2 fields changed- changed
Input schema / properties / market / descriptionPrevious value: -"ISO 3166-1 alpha-2 country code"New value: +"ISO 3166-1 alpha-2 country code, e.g. 'US'" - added
Input schema / properties / market / patternAdded value: +"^[A-Za-z]{2}$"
- Changed
get_show_details2 fields changed- changed
Input schema / properties / market / descriptionPrevious value: -"ISO 3166-1 alpha-2 market for availability"New value: +"ISO 3166-1 alpha-2 market for availability, e.g. 'US'" - added
Input schema / properties / market / patternAdded value: +"^[A-Za-z]{2}$"
- Changed
get_show_episodes1 field changed- added
Input schema / properties / fetch_allAdded value: +{ + "description": "When true, walk all pages via getAllPages up to cap (fetch_all_cap) โ use for \"all\" queries. Default: false", + "type": "boolean" +}
- Changed
get_show_latest_episode2 fields changed- changed
Input schema / properties / market / descriptionPrevious value: -"ISO 3166-1 alpha-2 market for availability"New value: +"ISO 3166-1 alpha-2 market for availability, e.g. 'US'" - added
Input schema / properties / market / patternAdded value: +"^[A-Za-z]{2}$"
- Changed
import_playlist1 field changed- added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Changed
inspect_tool1 field changed- added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Changed
list_playlist_snapshots1 field changed- added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Changed
list_show_episodes2 fields changed- changed
Input schema / properties / market / descriptionPrevious value: -"ISO 3166-1 alpha-2 market for availability"New value: +"ISO 3166-1 alpha-2 market for availability, e.g. 'US'" - added
Input schema / properties / market / patternAdded value: +"^[A-Za-z]{2}$"
- Changed
market_availability3 fields changed- removed
Input schema / properties / markets / items / maxLengthRemoved value: -5 - removed
Input schema / properties / markets / items / minLengthRemoved value: -2 - added
Input schema / properties / markets / items / patternAdded value: +"^[A-Za-z]{2}$"
- Changed
market_validate3 fields changed- removed
Input schema / properties / markets / items / maxLengthRemoved value: -2 - removed
Input schema / properties / markets / items / minLengthRemoved value: -2 - added
Input schema / properties / markets / items / patternAdded value: +"^[A-Za-z]{2}$"
- Changed
pause1 field changed- added
Input schema / properties / dry_runAdded value: +{ + "description": "Preview only: validate inputs and describe exactly what would change without performing it", + "type": "boolean" +}
- Changed
playlist_collaboration_report1 field changed- added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Changed
playlist_era_profile2 fields changed- changed
Input schema / properties / market / descriptionPrevious value: -"ISO 3166-1 alpha-2 market. When given, items are REFETCHED with this market so album release dates resolve (disclosed second GET)."New value: +"ISO 3166-1 alpha-2 market, e.g. 'US' โ when given, items are REFETCHED with this market so album release dates resolve (disclosed second GET)" - added
Input schema / properties / market / patternAdded value: +"^[A-Za-z]{2}$"
- Changed
playlist_fill_from_search4 fields changed- changed
Input schema / properties / market / descriptionPrevious value: -"ISO 3166-1 alpha-2 market for search"New value: +"ISO 3166-1 alpha-2 market for search, e.g. 'US'" - removed
Input schema / properties / market / maxLengthRemoved value: -2 - removed
Input schema / properties / market / minLengthRemoved value: -2 - added
Input schema / properties / market / patternAdded value: +"^[A-Za-z]{2}$"
- Changed
playlist_health_check1 field changed- added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Changed
playlist_staleness_score2 fields changed- changed
Input schema / properties / market / descriptionPrevious value: -"ISO 3166-1 alpha-2 market for availability"New value: +"ISO 3166-1 alpha-2 market for availability, e.g. 'US'" - added
Input schema / properties / market / patternAdded value: +"^[A-Za-z]{2}$"
- Changed
quick_save_now2 fields changed- changed
Input schema / properties / market / descriptionPrevious value: -"ISO-3166 market code passed on the player read"New value: +"ISO-3166 market code passed on the player read, e.g. 'US'" - added
Input schema / properties / market / patternAdded value: +"^[A-Za-z]{2}$"
- Changed
remove_unavailable_playlist_items1 field changed- added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Changed
save_artist_new_releases2 fields changed- changed
Input schema / properties / market / descriptionPrevious value: -"ISO 3166-1 alpha-2 country code"New value: +"ISO 3166-1 alpha-2 country code, e.g. 'US'" - added
Input schema / properties / market / patternAdded value: +"^[A-Za-z]{2}$"
- Changed
saved_tracks_by_artist2 fields changed- changed
Input schema / properties / market / descriptionPrevious value: -"ISO 3166-1 alpha-2 market for the artist search"New value: +"ISO 3166-1 alpha-2 market for the artist search, e.g. 'US'" - added
Input schema / properties / market / patternAdded value: +"^[A-Za-z]{2}$"
- Changed
search2 fields changed- changed
Input schema / properties / market / descriptionPrevious value: -"ISO 3166-1 alpha-2 country code"New value: +"ISO 3166-1 alpha-2 country code, e.g. 'US' โ uppercased automatically" - added
Input schema / properties / market / patternAdded value: +"^[A-Za-z]{2}$"
- Changed
search_albums2 fields changed- changed
Input schema / properties / market / descriptionPrevious value: -"ISO 3166-1 alpha-2 country code"New value: +"ISO 3166-1 alpha-2 country code, e.g. 'US'" - added
Input schema / properties / market / patternAdded value: +"^[A-Za-z]{2}$"
- Changed
search_artists2 fields changed- changed
Input schema / properties / market / descriptionPrevious value: -"ISO 3166-1 alpha-2 country code"New value: +"ISO 3166-1 alpha-2 country code, e.g. 'US'" - added
Input schema / properties / market / patternAdded value: +"^[A-Za-z]{2}$"
- Changed
search_audiobooks2 fields changed- changed
Input schema / properties / market / descriptionPrevious value: -"ISO 3166-1 alpha-2 country code"New value: +"ISO 3166-1 alpha-2 country code, e.g. 'US'" - added
Input schema / properties / market / patternAdded value: +"^[A-Za-z]{2}$"
- Changed
search_deep2 fields changed- changed
Input schema / properties / market / descriptionPrevious value: -"ISO 3166-1 alpha-2 country code"New value: +"ISO 3166-1 alpha-2 country code, e.g. 'US'" - added
Input schema / properties / market / patternAdded value: +"^[A-Za-z]{2}$"
- Changed
search_episodes2 fields changed- changed
Input schema / properties / market / descriptionPrevious value: -"ISO 3166-1 alpha-2 country code"New value: +"ISO 3166-1 alpha-2 country code, e.g. 'US'" - added
Input schema / properties / market / patternAdded value: +"^[A-Za-z]{2}$"
- Changed
search_market_diff6 fields changed- removed
Input schema / properties / market_a / maxLengthRemoved value: -2 - removed
Input schema / properties / market_a / minLengthRemoved value: -2 - added
Input schema / properties / market_a / patternAdded value: +"^[A-Za-z]{2}$" - removed
Input schema / properties / market_b / maxLengthRemoved value: -2 - removed
Input schema / properties / market_b / minLengthRemoved value: -2 - added
Input schema / properties / market_b / patternAdded value: +"^[A-Za-z]{2}$"
- Changed
search_playlists2 fields changed- changed
Input schema / properties / market / descriptionPrevious value: -"ISO 3166-1 alpha-2 country code"New value: +"ISO 3166-1 alpha-2 country code, e.g. 'US'" - added
Input schema / properties / market / patternAdded value: +"^[A-Za-z]{2}$"
- Changed
search_shows2 fields changed- changed
Input schema / properties / market / descriptionPrevious value: -"ISO 3166-1 alpha-2 country code"New value: +"ISO 3166-1 alpha-2 country code, e.g. 'US'" - added
Input schema / properties / market / patternAdded value: +"^[A-Za-z]{2}$"
- Changed
search_tracks2 fields changed- changed
Input schema / properties / market / descriptionPrevious value: -"ISO 3166-1 alpha-2 country code"New value: +"ISO 3166-1 alpha-2 country code, e.g. 'US'" - added
Input schema / properties / market / patternAdded value: +"^[A-Za-z]{2}$"
- Changed
search_within_playlist2 fields changed- changed
Input schema / properties / market / descriptionPrevious value: -"Market for track relinking"New value: +"Market for track relinking, e.g. 'US'" - added
Input schema / properties / market / patternAdded value: +"^[A-Za-z]{2}$"
- Changed
seek1 field changed- added
Input schema / properties / dry_runAdded value: +{ + "description": "Preview only: validate inputs and describe exactly what would change without performing it", + "type": "boolean" +}
- Changed
set_repeat1 field changed- added
Input schema / properties / dry_runAdded value: +{ + "description": "Preview only: validate inputs and describe exactly what would change without performing it", + "type": "boolean" +}
- Changed
set_shuffle1 field changed- added
Input schema / properties / dry_runAdded value: +{ + "description": "Preview only: validate inputs and describe exactly what would change without performing it", + "type": "boolean" +}
- Changed
set_volume1 field changed- added
Input schema / properties / dry_runAdded value: +{ + "description": "Preview only: validate inputs and describe exactly what would change without performing it", + "type": "boolean" +}
- Changed
show_episode_search2 fields changed- changed
Input schema / properties / market / descriptionPrevious value: -"ISO 3166-1 alpha-2 country code"New value: +"ISO 3166-1 alpha-2 country code, e.g. 'US'" - added
Input schema / properties / market / patternAdded value: +"^[A-Za-z]{2}$"
- Changed
snapshot_playlist1 field changed- added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Changed
spotify_doctor1 field changed- added
Input schema / properties / response_formatAdded value: +{ + "description": "Response format: concise (default) returns human-readable text, detailed adds metadata, json returns structured data", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Changed
undo_last_mutation1 field changed- added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Changed
undo_mutation1 field changed- added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
550 tool updates
v1.26.1- Changed
add_to_playlist4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / check_duplicatesAdded value: +{ + "description": "Skip URIs that are already in the playlist instead of appending them (default: false)", + "type": "boolean" +} - added
Input schema / properties / dry_runAdded value: +{ + "description": "Preview only: validate inputs and describe exactly what would change without performing it", + "type": "boolean" +} - added
Input schema / properties / position / maximumAdded value: +9007199254740991
- Changed
add_to_queue3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / dry_runAdded value: +{ + "description": "Preview only: validate inputs and describe exactly what would change without performing it", + "type": "boolean" +} - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Added
added_on_this_day - Added
album_anniversary_check - Added
album_duration_report - Added
album_edition_lint - Added
album_focus_report - Added
album_openers_report - Added
album_representative_plan - Added
album_track_explorer - Added
album_track_stats - Added
albums_runtime_batch - Added
apply_device_presets - Added
apply_scene - Added
apply_snapshot_changes - Added
apply_volume_plan - Added
archive_played_episodes - Added
artist_album_completeness - Added
artist_album_timeline - Added
artist_catalog_stats - Added
artist_collab_network - Added
artist_collaboration_network - Added
artist_collection_gaps - Added
artist_complete_check - Added
artist_completeness_score - Added
artist_debut_release_finder - Added
artist_decade_span - Added
artist_deep_cuts - Added
artist_deep_dive - Added
artist_discography_explorer - Added
artist_discography_gaps - Added
artist_discography_search - Added
artist_discography_stats - Added
artist_discography_timeline - Added
artist_era_map - Added
artist_era_sampler - Added
artist_first_release - Added
artist_genres_compact - Added
artist_latest_release_report - Added
artist_latest_releases - Added
artist_listening_clock - Added
artist_live_albums_finder - Added
artist_name_disambiguator - Added
artist_reissue_detector - Added
artist_release_digest - Added
artist_release_type_breakdown - Added
artist_representation_census - Added
artist_scout_from_playlists - Added
artist_singles_timeline - Added
artist_top_vs_saved - Added
artist_velocity_report - Added
artistwatch_new_additions - Added
audiobook_chapter_map - Added
audiobook_library_progress - Added
audiobook_progress - Added
audiobooks_by_author - Added
b_sides_detector - Added
b_sides_finder - Added
backup_first - Added
backup_library - Added
balance_playlist_pairs - Added
base62_to_uri - Added
batch_add_to_playlist - Added
batch_parse_spotify_uris - Added
binge_detector_report - Added
browse_category_deepdive - Added
cancel_wind_down - Added
canonicalize_spotify_uri - Added
capture_playback_position - Added
catalog_batch_lookup - Added
category_resolver - Added
chapter_bookmarks - Added
check_artist_releases - Added
check_episode_saved - Changed
check_following_artists3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / max_resultsAdded value: +{ + "description": "Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50)", + "exclusiveMinimum": 0, + "maximum": 2000, + "type": "integer" +} - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Added
check_in_library - Added
check_playlist_following - Changed
check_saved_items5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / max_resultsAdded value: +{ + "description": "Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50)", + "exclusiveMinimum": 0, + "maximum": 2000, + "type": "integer" +} - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +} - changed
Input schema / properties / uris / descriptionPrevious value: -"Spotify URIs to check (accepts tracks, albums, shows, episodes, artists, playlists)"New value: +"Spotify URIs to check (accepts tracks, albums, shows, episodes, audiobooks)" - changed
Input schema / properties / uris / maxItemsPrevious value: -40New value: +50
- Added
checkpoint_playback - Added
classify_spotify_uris - Added
clean_all_playlists - Added
clone_playlist_cover - Added
collab_density_report - Added
collab_mix_from_followed - Added
compare_devices - Added
compare_playlist_covers - Added
continue_last - Added
copy_playlist - Added
count_uris_by_type - Changed
create_playlist2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / dry_runAdded value: +{ + "description": "Preview only: validate inputs and describe exactly what would change without performing it", + "type": "boolean" +}
- Added
create_smart_playlist - Added
daily_pick - Added
dead_library_finder - Added
decade_sampler_plan - Added
dedupe_playlist_apply - Added
dedupe_playlist_plan - Added
dedupe_spotify_uris - Added
deep_cuts_finder - Added
deep_dive_report - Added
delete_playback_bookmark - Added
delete_playlist_snapshot - Added
delete_scene - Added
describe_listening_session - Added
describe_queue - Added
device_health - Added
device_sync_state - Added
device_type_census - Added
diff_playlist_snapshots - Added
diff_playlists - Added
diff_since_snapshot - Added
discover_weekly_diff - Added
discovery_digest - Added
discovery_ratio - Added
duplicate_saved_versions - Added
episode_bookmark - Added
episode_context_bundle - Added
episode_guest_census - Added
episode_resume - Added
episode_runtime_report - Added
era_distribution_report - Added
era_preference_report - Added
explicit_content_ratio - Added
export_all_playlists - Added
export_followed_artists - Added
export_library_json - Added
export_listening_history - Added
export_playlist - Added
export_playlist_json - Added
export_playlist_markdown - Added
export_profile_state - Added
export_shows_opml - Added
export_snapshot_bundle - Added
extract_playlist_range - Added
extract_spotify_id - Added
featuring_density_report - Added
filter_by_genre - Added
filter_playlist_by_artist - Added
filter_playlist_by_duration - Added
filter_playlist_by_era - Added
find_canonical_track - Added
find_collaborations - Added
find_duplicate_playlists - Added
find_duplicate_saved_tracks - Added
find_duplicate_spotify_uris - Added
find_duplicate_tracks_across_playlists - Added
find_duplicates_in_playlist - Added
find_lost_since_snapshot - Added
find_new_since_snapshot - Added
find_show_by_publisher - Added
find_tool - Added
follow_artists - Added
followed_playlists_audit - Added
following_analytics - Added
format_spotify_uri - Added
front_to_back_plan - Added
genre_dive_search - Added
genre_trends_over_time - Changed
get_album4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / marketAdded value: +{ + "description": "ISO 3166-1 alpha-2 country code. Defaults to the account country; affects track playability.", + "pattern": "^[A-Za-z]{2}$", + "type": "string" +} - added
Input schema / properties / max_resultsAdded value: +{ + "description": "Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50)", + "exclusiveMinimum": 0, + "maximum": 2000, + "type": "integer" +} - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Changed
get_album_tracks5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / marketAdded value: +{ + "description": "ISO 3166-1 alpha-2 country code. Defaults to the account country; affects track availability.", + "pattern": "^[A-Za-z]{2}$", + "type": "string" +} - added
Input schema / properties / max_resultsAdded value: +{ + "description": "Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50)", + "exclusiveMinimum": 0, + "maximum": 2000, + "type": "integer" +} - added
Input schema / properties / offset / maximumAdded value: +9007199254740991 - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Changed
get_artist2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Changed
get_artist_albums7 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / limit / descriptionPrevious value: -"Results per page, 1โ50. Default: 20"New value: +"Results per page, 1โ10. Default: 10" - changed
Input schema / properties / limit / maximumPrevious value: -50New value: +10 - added
Input schema / properties / marketAdded value: +{ + "description": "ISO 3166-1 alpha-2 country code. Defaults to the account country; affects album availability.", + "pattern": "^[A-Za-z]{2}$", + "type": "string" +} - added
Input schema / properties / max_resultsAdded value: +{ + "description": "Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50)", + "exclusiveMinimum": 0, + "maximum": 2000, + "type": "integer" +} - added
Input schema / properties / offsetAdded value: +{ + "description": "Index of the first album to return. Default: 0", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Added
get_artist_appearances - Added
get_artist_discography - Added
get_artist_genres - Added
get_artist_singles - Added
get_artist_top_tracks - Changed
get_audiobook3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / market / patternAdded value: +"^[A-Za-z]{2}$" - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Changed
get_audiobook_chapters5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / market / patternAdded value: +"^[A-Za-z]{2}$" - added
Input schema / properties / max_resultsAdded value: +{ + "description": "Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50)", + "exclusiveMinimum": 0, + "maximum": 2000, + "type": "integer" +} - added
Input schema / properties / offset / maximumAdded value: +9007199254740991 - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Added
get_available_markets - Added
get_categories - Added
get_category - Added
get_category_playlists - Changed
get_chapter3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / market / patternAdded value: +"^[A-Za-z]{2}$" - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Added
get_context_inspect - Changed
get_currently_playing3 fields changed- added
Input schema / properties / additional_typesAdded value: +{ + "default": [ + "track", + "episode" + ], + "description": "Item types to include in the response. Default: ['track', 'episode']", + "items": { + "enum": [ + "track", + "episode" + ], + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / marketAdded value: +{ + "description": "ISO 3166-1 alpha-2 country code โ localises item names; lowercase input is uppercased; defaults to the account market", + "pattern": "^[A-Za-z]{2}$", + "type": "string" +} - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Added
get_device_volume_report - Changed
get_devices2 fields changed- added
Input schema / properties / max_resultsAdded value: +{ + "description": "Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50)", + "exclusiveMinimum": 0, + "maximum": 2000, + "type": "integer" +} - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Changed
get_episode2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Added
get_episode_details - Changed
get_followed_artists3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / max_resultsAdded value: +{ + "description": "Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50)", + "exclusiveMinimum": 0, + "maximum": 2000, + "type": "integer" +} - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Changed
get_me1 field changed- added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Added
get_newly_released_episodes - Changed
get_now_playing3 fields changed- added
Input schema / properties / additional_typesAdded value: +{ + "default": [ + "track", + "episode" + ], + "description": "Item types to include in the response. Default: ['track', 'episode']", + "items": { + "enum": [ + "track", + "episode" + ], + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / marketAdded value: +{ + "description": "ISO 3166-1 alpha-2 country code โ localises item names; lowercase input is uppercased; defaults to the account market", + "pattern": "^[A-Za-z]{2}$", + "type": "string" +} - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Added
get_playback_context - Added
get_playback_snapshot - Changed
get_playlist8 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / fetch_all / descriptionPrevious value: -"Fetch all items across pages (up to 500) instead of a single page"New value: +"Fetch all items across pages (up to 500), continuing FROM offset. limit is the page size. Note: library tools' fetch_all ignores offset โ contracts differ between modules (#110)." - changed
Input schema / properties / id / descriptionPrevious value: -"Playlist ID"New value: +"Alias for playlist_id" - added
Input schema / properties / max_resultsAdded value: +{ + "description": "Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50)", + "exclusiveMinimum": 0, + "maximum": 2000, + "type": "integer" +} - added
Input schema / properties / offset / maximumAdded value: +9007199254740991 - added
Input schema / properties / playlist_idAdded value: +{ + "description": "Playlist ID", + "type": "string" +} - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "id" -]
- Added
get_playlist_added_dates - Changed
get_playlist_cover6 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / idAdded value: +{ + "description": "Alias for playlist_id, matching get_playlist", + "type": "string" +} - added
Input schema / properties / max_resultsAdded value: +{ + "description": "Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50)", + "exclusiveMinimum": 0, + "maximum": 2000, + "type": "integer" +} - changed
Input schema / properties / playlist_id / descriptionPrevious value: -"Playlist ID"New value: +"Playlist ID (or pass it as 'id')" - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "playlist_id" -]
- Added
get_playlist_followers - Added
get_playlist_items - Added
get_playlist_snapshot - Changed
get_queue2 fields changed- added
Input schema / properties / max_resultsAdded value: +{ + "description": "Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50)", + "exclusiveMinimum": 0, + "maximum": 2000, + "type": "integer" +} - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Added
get_queue_snapshot - Changed
get_recently_played7 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / after / maximumAdded value: +9007199254740991 - added
Input schema / properties / after / minimumAdded value: +-9007199254740991 - added
Input schema / properties / before / maximumAdded value: +9007199254740991 - added
Input schema / properties / before / minimumAdded value: +-9007199254740991 - added
Input schema / properties / max_resultsAdded value: +{ + "description": "Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50)", + "exclusiveMinimum": 0, + "maximum": 2000, + "type": "integer" +} - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Changed
get_saved_albums5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / fetch_all / descriptionPrevious value: -"Fetch all pages instead of one page (ignores limit/offset; capped at 500 items)"New value: +"Fetch all pages instead of one page (ignores limit/offset)" - added
Input schema / properties / max_resultsAdded value: +{ + "description": "Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50)", + "exclusiveMinimum": 0, + "maximum": 2000, + "type": "integer" +} - added
Input schema / properties / offset / maximumAdded value: +9007199254740991 - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Changed
get_saved_audiobooks4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / max_resultsAdded value: +{ + "description": "Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50)", + "exclusiveMinimum": 0, + "maximum": 2000, + "type": "integer" +} - added
Input schema / properties / offset / maximumAdded value: +9007199254740991 - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Added
get_saved_counts - Changed
get_saved_episodes5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / fetch_all / descriptionPrevious value: -"Fetch all pages instead of one page (ignores limit/offset; capped at 500 items)"New value: +"Fetch all pages instead of one page (ignores limit/offset)" - added
Input schema / properties / max_resultsAdded value: +{ + "description": "Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50)", + "exclusiveMinimum": 0, + "maximum": 2000, + "type": "integer" +} - added
Input schema / properties / offset / maximumAdded value: +9007199254740991 - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Changed
get_saved_shows5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / fetch_all / descriptionPrevious value: -"Fetch all pages instead of one page (ignores limit/offset; capped at 500 items)"New value: +"Fetch all pages instead of one page (ignores limit/offset)" - added
Input schema / properties / max_resultsAdded value: +{ + "description": "Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50)", + "exclusiveMinimum": 0, + "maximum": 2000, + "type": "integer" +} - added
Input schema / properties / offset / maximumAdded value: +9007199254740991 - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Changed
get_saved_tracks5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / fetch_all / descriptionPrevious value: -"Fetch all pages instead of one page (ignores limit/offset; capped at 500 items)"New value: +"Fetch all pages instead of one page (ignores limit/offset)" - added
Input schema / properties / max_resultsAdded value: +{ + "description": "Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50)", + "exclusiveMinimum": 0, + "maximum": 2000, + "type": "integer" +} - added
Input schema / properties / offset / maximumAdded value: +9007199254740991 - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Added
get_several_albums - Added
get_several_artists - Added
get_several_audiobooks - Added
get_several_chapters - Added
get_several_episodes - Added
get_several_shows - Added
get_several_tracks - Changed
get_show3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / market / patternAdded value: +"^[A-Za-z]{2}$" - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Added
get_show_details - Changed
get_show_episodes5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / market / patternAdded value: +"^[A-Za-z]{2}$" - added
Input schema / properties / max_resultsAdded value: +{ + "description": "Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50)", + "exclusiveMinimum": 0, + "maximum": 2000, + "type": "integer" +} - added
Input schema / properties / offset / maximumAdded value: +9007199254740991 - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Added
get_show_latest_episode - Changed
get_top_artists4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / max_resultsAdded value: +{ + "description": "Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50)", + "exclusiveMinimum": 0, + "maximum": 2000, + "type": "integer" +} - added
Input schema / properties / offsetAdded value: +{ + "description": "Start position (0-based). Default: 0", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Changed
get_top_tracks4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / max_resultsAdded value: +{ + "description": "Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50)", + "exclusiveMinimum": 0, + "maximum": 2000, + "type": "integer" +} - added
Input schema / properties / offsetAdded value: +{ + "description": "Start position (0-based). Default: 0", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Changed
get_track2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Changed
get_user_playlists5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / fetch_all / descriptionPrevious value: -"Fetch every page (up to 500 playlists) instead of a single page"New value: +"Fetch every playlist (up to 500), continuing FROM offset rather than restarting at 0. limit is the page size. Note: library tools' fetch_all instead ignores offset โ contracts differ between modules (#110)." - added
Input schema / properties / max_resultsAdded value: +{ + "description": "Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50)", + "exclusiveMinimum": 0, + "maximum": 2000, + "type": "integer" +} - added
Input schema / properties / offset / maximumAdded value: +9007199254740991 - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Added
get_user_playlists_by_id - Added
get_user_profile - Added
grow_playlist - Added
handoff - Added
history_search - Added
import_from_sidecar - Added
import_playlist - Added
import_profile_state - Added
inspect_tool - Added
interleave_playlists_plan - Added
is_local_census - Added
is_valid_spotify_uri - Added
join_uri_list - Added
jump_to_chapter - Added
label_discography_explorer - Added
label_explorer - Added
last_heard - Added
library_coverage_report - Added
library_genre_report - Added
library_growth_report - Added
library_growth_timeline - Added
library_hygiene - Added
library_snapshot_diff - Added
library_to_playlist - Added
library_value_summary - Added
list_all_chapters - Added
list_backups - Added
list_device_presets - Added
list_playback_bookmarks - Added
list_playback_states - Added
list_playlist_snapshots - Added
list_saved_shows - Added
list_saved_snapshots - Added
list_scenes - Added
list_sessions - Added
list_show_episodes - Added
listening_clock - Added
listening_clock_heatmap - Added
listening_consistency_score - Added
listening_gaps_report - Added
listening_heatmap - Added
listening_history_export - Added
listening_journal_append - Added
listening_recap_brief - Added
listening_report - Added
listening_session_close - Added
listening_session_report - Added
listening_session_start - Added
listening_streak_report - Added
listening_streaks - Added
listening_week_in_time - Added
longest_saved_tracks - Added
lyric_snippet_search - Added
make_spotify_uri - Added
mark_episode_played_plan - Added
market_availability - Added
market_validate - Added
merge_playlists - Added
merge_playlists_plan - Added
merge_snapshot_changes_plan - Added
monthly_listening_report - Added
mood_bucket_report - Added
morning_briefing - Added
most_replayed - Added
move_items_between_playlists - Added
move_tracks_between_playlists - Added
mutation_log_export - Added
mute - Added
never_played_saved - Added
new_music_from_saved_artists - Added
new_music_from_top_artists - Added
normalize_spotify_uri - Added
now_playing_history - Added
open_url_to_spotify_uri - Added
orphaned_artist_check - Added
overlap_playlists - Added
parse_spotify_uri - Changed
pause2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Added
pause_everywhere - Added
peek_next - Added
pin_playlist - Added
plan_podcast_session - Added
plan_volume_level_across_devices - Changed
play8 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / dry_runAdded value: +{ + "description": "Preview only: validate inputs and describe exactly what would change without performing it", + "type": "boolean" +} - changed
Input schema / properties / offset / descriptionPrevious value: -"Index within context to start from"New value: +"Index within an album/playlist context to start from. Ignored for ad-hoc uris; not valid for artist contexts (use offset_uri instead)." - added
Input schema / properties / offset / maximumAdded value: +9007199254740991 - added
Input schema / properties / offset_uriAdded value: +{ + "description": "Track URI inside the context to start from โ required for artist contexts, where a numeric index is rejected", + "type": "string" +} - added
Input schema / properties / position_ms / maximumAdded value: +9007199254740991 - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +} - added
Input schema / properties / uris / maxItemsAdded value: +100
- Added
play_at - Changed
play_from_search4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / dry_runAdded value: +{ + "description": "Preview only: validate inputs and describe exactly what would change without performing it", + "type": "boolean" +} - added
Input schema / properties / marketAdded value: +{ + "description": "ISO 3166-1 alpha-2 country code โ affects availability/relinking of results; defaults to the account market", + "pattern": "^[A-Za-z]{2}$", + "type": "string" +} - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Added
play_on - Added
playback_compare_states - Added
playback_health_check - Added
playback_timeline - Added
playlist_add_by_search - Added
playlist_artist_heat - Added
playlist_balance - Added
playlist_changelog - Added
playlist_chunk_preview - Added
playlist_clone_live - Added
playlist_clone_snapshot - Added
playlist_collab_toggle - Added
playlist_collaboration_report - Added
playlist_cover_from_track - Added
playlist_dedupe_advanced - Added
playlist_diff - Added
playlist_difference_plan - Added
playlist_edit_journal - Added
playlist_era_profile - Added
playlist_exclude_artists - Added
playlist_expression_algebra - Added
playlist_fill_from_search - Added
playlist_filter_runtime - Added
playlist_flip_order - Added
playlist_from_tags - Added
playlist_health_check - Added
playlist_history - Added
playlist_intersect - Added
playlist_intersection - Added
playlist_keep_artist - Added
playlist_keep_only - Added
playlist_move_block - Added
playlist_move_to_top - Added
playlist_names_bulk_normalize - Added
playlist_overlap_matrix - Added
playlist_pair_check - Added
playlist_remove_artist - Added
playlist_resequence - Added
playlist_reverse - Added
playlist_rotate - Added
playlist_seed_shuffle - Added
playlist_shuffle - Added
playlist_slice - Added
playlist_snapshot_detail - Added
playlist_sort - Added
playlist_staleness_report - Added
playlist_staleness_score - Added
playlist_strip_episodes - Added
playlist_subtract - Added
playlist_swap_positions - Added
playlist_symmetric_difference - Added
playlist_table_of_contents - Added
playlist_template_apply - Added
playlist_to_library - Added
playlist_trim - Added
playlist_trim_to_duration - Added
playlist_union - Added
playlist_union_preview - Added
predict_next_tracks - Added
prune_old_snapshots - Added
publisher_portfolio - Added
queue_duplicate_check - Added
queue_next - Added
queue_next_episode - Added
queue_playlist - Added
queue_profile - Added
queue_prune_plan - Added
queue_replace_via_playlist - Added
queue_runtime_report - Added
quick_save_now - Added
quota_probe - Added
read_playlist_snapshot - Added
receipt_lookup - Added
refresh_smart_playlist - Added
remove_duplicate_playlist_items - Added
remove_from_library - Added
remove_from_library_by_playlist - Changed
remove_from_playlist7 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / dry_runAdded value: +{ + "description": "Preview only: validate inputs and describe exactly what would change without performing it", + "type": "boolean" +} - added
Input schema / properties / snapshot_idAdded value: +{ + "description": "Apply the removal against this playlist version instead of the latest", + "type": "string" +} - changed
Input schema / properties / uris / descriptionPrevious value: -"URIs to remove"New value: +"URIs to remove; use { uri, positions } to target specific occurrences of a repeated URI" - added
Input schema / properties / uris / items / anyOfAdded value: +[ + { + "type": "string" + }, + { + "properties": { + "positions": { + "items": { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "uri": { + "type": "string" + } + }, + "required": [ + "uri", + "positions" + ], + "type": "object" + } +] - removed
Input schema / properties / uris / items / typeRemoved value: -"string" - added
Input schema / properties / uris / maxItemsAdded value: +100
- Added
remove_playlist_range - Added
remove_saved_episode - Changed
remove_saved_items3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / dry_runAdded value: +{ + "description": "Preview only: show exactly which URIs would be removed without calling the API", + "type": "boolean" +} - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Added
remove_saved_shows - Added
remove_unavailable_playlist_items - Added
rename_device - Changed
reorder_playlist_items5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / dry_runAdded value: +{ + "description": "Preview only: validate inputs and describe exactly what would change without performing it", + "type": "boolean" +} - added
Input schema / properties / insert_before / maximumAdded value: +9007199254740991 - added
Input schema / properties / range_length / maximumAdded value: +9007199254740991 - added
Input schema / properties / range_start / maximumAdded value: +9007199254740991
- Added
repeat_listener_report - Added
repeat_queue_toggle - Added
replace_playlist_items - Added
replay_session - Added
resolve_artist - Added
restore_library_snapshot - Added
restore_playback_state - Added
restore_playlist_from_snapshot - Added
restore_playlist_plan - Added
resume_playback_position - Added
reverse_playlist_plan - Added
room_level - Added
rotate_playlist_plan - Added
sample_playlist_tracks - Added
save_artist_new_releases - Added
save_discover_weekly - Added
save_episode - Changed
save_items3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / dry_runAdded value: +{ + "description": "Preview only: validate inputs and describe exactly what would change without performing it", + "type": "boolean" +} - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Added
save_playback_state - Added
save_queue_as_playlist - Added
save_release_radar - Added
save_scene - Added
save_show_digest - Added
save_smart_playlist_rule - Added
save_to_library - Added
saved_albums_by_decade - Added
saved_albums_by_label - Added
saved_albums_by_type - Added
saved_albums_by_year - Added
saved_library_delta - Added
saved_runtime_by_era - Added
saved_shows_publisher_census - Added
saved_track_age_report - Added
saved_tracks_by_artist - Added
saved_tracks_roulette - Added
saved_vs_playlist_coverage - Added
scene_sampler_search - Added
schedule_wind_down - Added
scope_audit - Changed
search7 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / include_externalAdded value: +{ + "description": "Pass \"audio\" to include externally-hosted audio items marked as playable", + "enum": [ + "audio" + ], + "type": "string" +} - added
Input schema / properties / max_resultsAdded value: +{ + "description": "Max items to return (default: SPOTIFY_MCP_MAX_ITEMS env or 50)", + "exclusiveMinimum": 0, + "maximum": 2000, + "type": "integer" +} - added
Input schema / properties / offsetAdded value: +{ + "description": "Index of the first result to return, 0โ1000. Use with limit to page through results", + "maximum": 1000, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +} - changed
Input schema / properties / types / descriptionPrevious value: -"Content types to search, as an array. Default: [\"track\",\"artist\",\"album\"]. Pass e.g. [\"artist\"] for an artist-only search."New value: +"Content types to search, as an array. Default: [\"track\",\"artist\",\"album\"]. Pass e.g. [\"artist\"] for an artist-only search. \"audiobook\" is only available in the US, UK, CA, IE, NZ and AU markets." - changed
Input schema / properties / types / items / enumPrevious value: -[ - "track", - "artist", - "album", - "playlist", - "show", - "episode" -]New value: +[ + "track", + "artist", + "album", + "playlist", + "show", + "episode", + "audiobook" +]
- Added
search_advanced - Added
search_albums - Added
search_artists - Added
search_audiobooks - Added
search_by_isrc - Added
search_deep - Added
search_episodes - Added
search_fresh - Added
search_history - Added
search_history_stats - Added
search_market_diff - Added
search_playlists - Added
search_rerun - Added
search_saved_albums - Added
search_saved_audiobooks - Added
search_saved_episodes - Added
search_saved_shows - Added
search_saved_tracks - Added
search_shows - Added
search_tracks - Added
search_within_playlist - Changed
seek3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / position_ms / maximumAdded value: +9007199254740991 - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Added
seek_relative - Added
session_length_report - Added
session_stats - Added
set_device_volume_preset - Changed
set_repeat2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Changed
set_shuffle2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Changed
set_volume2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Added
shortest_saved_tracks - Added
show_activity_feed - Added
show_backlog_plan - Added
show_backlog_report - Added
show_episode_search - Added
show_episode_timeline - Added
show_new_episodes - Added
show_recommendation_brief - Added
show_runtime_stats - Added
shows_release_calendar - Added
shows_without_new_episodes - Added
shuffle_state_report - Added
sidecar_export_bundle - Added
skip_n - Changed
skip_next3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / dry_runAdded value: +{ + "description": "Preview only: validate inputs and describe exactly what would change without performing it", + "type": "boolean" +} - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Changed
skip_previous3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / dry_runAdded value: +{ + "description": "Preview only: validate inputs and describe exactly what would change without performing it", + "type": "boolean" +} - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Added
sleep_timer - Added
sleep_timer_plan - Added
snapshot_added_at_report - Added
snapshot_changelog - Added
snapshot_diff_summary - Added
snapshot_disk_usage - Added
snapshot_integrity_check - Added
snapshot_integrity_report - Added
snapshot_new_tracks - Added
snapshot_playlist - Added
snapshot_registry_report - Added
snapshot_removed_tracks - Added
snapshot_retention_plan - Added
snapshot_stats_report - Added
sort_playlist_apply - Added
sort_playlist_plan - Added
sort_uris_by_kind - Added
split_playlist - Added
split_playlist_by_count - Added
split_playlist_by_duration - Added
split_queue_plan - Added
split_uri_list - Added
spotify_doctor - Added
spotify_uri_kind - Added
spotify_uri_to_open_url - Added
stale_saved_shows_plan - Added
start_podcast_session - Added
subscribe_to_show - Added
surprise_me - Added
switch_device - Added
tag_listening_session - Added
tag_management - Added
take_playlist_snapshot - Added
taste_checkpoint - Added
taste_checkpoint_diff - Added
taste_shift_report - Added
title_length_outliers - Added
toolset_report - Added
top_artist_leaderboard - Added
top_artist_ranking_delta - Added
top_artists_by_range - Added
top_genre_census - Added
top_track_leaderboard - Added
top_track_ranking_delta - Added
track_album_bundle - Added
track_enrichment_batch - Added
track_release_origin - Added
track_rotation_report - Changed
transfer_playback3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / dry_runAdded value: +{ + "description": "Preview only: validate inputs and describe exactly what would change without performing it", + "type": "boolean" +} - added
Input schema / properties / response_formatAdded value: +{ + "default": "concise", + "description": "'concise' = human prose, 'detailed' = more fields in prose, 'json' = raw API object", + "enum": [ + "concise", + "detailed", + "json" + ], + "type": "string" +}
- Added
transfer_playback_with_state - Added
undo_last_mutation - Added
undo_mutation - Added
undo_preview - Added
unfollow_artists - Added
unmute - Added
unpin_playlist - Added
unplayable_saved_check - Added
unsave_orphan_tracks - Added
unsubscribe_from_show - Changed
update_playlist5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / dry_runAdded value: +{ + "description": "Preview only: validate inputs and describe exactly what would change without performing it", + "type": "boolean" +} - changed
Input schema / properties / id / descriptionPrevious value: -"Playlist ID"New value: +"Alias for playlist_id" - added
Input schema / properties / playlist_idAdded value: +{ + "description": "Playlist ID", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "id" -]
- Changed
upload_playlist_cover2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / dry_runAdded value: +{ + "description": "Preview only: validate inputs and describe exactly what would change without performing it", + "type": "boolean" +}
- Added
uri_kind_stats - Added
uri_namespace_census - Added
uri_shorthand_expand - Added
uri_to_base62 - Added
validate_spotify_uri - Added
verify_receipt - Added
volume_ramp - Added
volume_report - Added
volume_step - Added
watch_artists - Added
week_in_review_playlist - Added
weekday_heatmap - Added
weekday_listening_report - Added
weekly_rotation_report - Added
whats_new - Added
where_was_i - Added
year_explorer - Added
year_in_review
50 tool updates
v1.0.1- First observed
add_to_playlist - First observed
add_to_queue - First observed
check_following_artists - First observed
check_saved_items - First observed
create_playlist - First observed
get_album - First observed
get_album_tracks - First observed
get_artist - First observed
get_artist_albums - First observed
get_audiobook - First observed
get_audiobook_chapters - First observed
get_chapter - First observed
get_currently_playing - First observed
get_devices - First observed
get_episode - First observed
get_followed_artists - First observed
get_me - First observed
get_now_playing - First observed
get_playlist - First observed
get_playlist_cover - First observed
get_queue - First observed
get_recently_played - First observed
get_saved_albums - First observed
get_saved_audiobooks - First observed
get_saved_episodes - First observed
get_saved_shows - First observed
get_saved_tracks - First observed
get_show - First observed
get_show_episodes - First observed
get_top_artists - First observed
get_top_tracks - First observed
get_track - First observed
get_user_playlists - First observed
pause - First observed
play - First observed
play_from_search - First observed
remove_from_playlist - First observed
remove_saved_items - First observed
reorder_playlist_items - First observed
save_items - First observed
search - First observed
seek - First observed
set_repeat - First observed
set_shuffle - First observed
set_volume - First observed
skip_next - First observed
skip_previous - First observed
transfer_playback - First observed
update_playlist - First observed
upload_playlist_cover
TDQS
Scored across 608 tools
With 608 tools, the surface is saturated with near-duplicates: get_now_playing vs get_currently_playing vs get_playback_snapshot, listening_streaks vs listening_streak_report, playlist_intersect vs playlist_intersection, b_sides_finder vs b_sides_detector, plus roughly 20 URI-parsing utilities and 30+ snapshot tools. Explicit legacy aliases help at the margins, but an agent cannot reliably disambiguate such overlapping clusters.
Names mix verb_noun (get_track, create_playlist), noun_verb (playlist_sort, playlist_intersect), bare verbs (play, pause, mute, seek), and there is no consistent preview/commit pattern (sort_playlist_plan vs playlist_sort vs sort_playlist_apply; reverse_playlist_plan vs playlist_reverse). Arbitrary aliasing like get_show_episodes/list_show_episodes and statsfm_taste_profile/taste_profile adds further chaos.
608 tools is an extreme count for any MCP server, far beyond the 50+ threshold for a failing score. The scope could be served by a small fraction of these tools; dozens of report tools, snapshot variants, and URI helpers are redundant.
The server covers the full Spotify API surface plus stats.fm and local sidecar features: playback, library, playlists, search, podcasts, audiobooks, analytics, snapshots, and mutation tracking. Missing features are mostly removed API endpoints (artist top tracks, user profile) with explicit disclosures, and genuine gaps (queue clear, insert-next) have documented workarounds.
Maintenance
Related MCP Connectors
Spotify: Spotify Data API for Millions of songs & podcasts, artists, albums, playlists and more.
Full Spotify Web API coverage - albums, artists, playlists, player controls, and more.
The media memory layer for AI agents and their humans. Your AI client gets 29 tools to search your collection, add items, update ratings, preview music, and find patterns across everything you've read, watched, and listened to.
AI music and podcast platform for autonomous agents. SoundCloud for AI bots.
Related MCP Servers
- FlicenseBqualityDmaintenanceEnables AI assistants to control Spotify playback, search for music, manage playlists, and interact with your Spotify library through natural language commands.19-
- FlicenseAqualityDmaintenanceEnables AI assistants to control Spotify playback, search for music, manage playlists, and access library information through the Spotify API. Requires Spotify Premium for playback control features.4-
- AlicenseBqualityDmaintenanceEnables AI assistants to control Spotify playback, manage playlists, search music, and access listening history. Requires Spotify Premium and uses secure OAuth 2.0 with PKCE authentication.1353 npmMIT
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to control Spotify playback, search music, manage playlists and library, and access user listening insights via the Spotify Web API.-