Public leaderboard

Public assessment

XavierFabregat/spotify-mcp (@xavifabregat/spotify-mcp)

xavifabregat-spotify-mcp · v0.1.0 · scanned

What changed in the harness

Selection accuracy 94→96, token cost up 3%, unconfirmed writes 0%→0%.

Category breakdown

Where the score comes from.

Earned points across the four signals Gradable measures. Safety and Legibility are scored out of 30; Economics and Discoverability are scored out of 20.

01Safety

0.0 / 30

0.0 out of 30
02Legibility

25.0 / 30

25.0 out of 30
03Economics

15.9 / 20

15.9 out of 20
04Discoverability

14.1 / 20

14.1 out of 20

Highest-impact fix

Estimated gain +30 points

Add explicit identity and permission preflight tools

Expose machine-readable principal/tenant confirmation and a non-mutating permission check so agents can verify both before destructive actions.

Description evidence

Defects and rewrites.

10 defects found across the exposed tool descriptions. Suggested rewrites make purpose, inputs, boundaries, and returns easier for an agent to understand.

Tool Defect types Suggested rewrite
authenticate
no_return_description
Connects the user's Spotify account via OAuth, opening a browser on this machine for approval and storing tokens locally for future calls. Use when other tools report you are not authenticated, or to switch accounts. Returns a confirmation of the authenticated account once the OAuth flow completes.
play
no_return_description
Plays music by free-text query (searches and starts the best match) or by Spotify URI. Handles "play some Radiohead", "play the album Kind of Blue", "play my Discover Weekly". Returns the track/album/artist/playlist it started playing (name and URI) so you can relay it to the user and let them correct it if it picked the wrong match.
playback
params_unexplained no_return_description
Sends a transport command to the active playback session. The action parameter selects the command: pause, resume, next, previous, seek (value = target position in seconds), volume (value = 0-100), shuffle (value = on/off), or repeat (value = off/context/track). Returns the resulting playback state after the command is applied.
now_playing
no_return_description
Fetches the current playback state and returns the current track, artist, album, playback progress, active device, and shuffle/repeat state.
queue
params_unexplained no_return_description
Manages the playback queue. The action parameter selects the operation: 'add' queues a track (given by query or URI) and returns the queued track's info; 'list' returns what's currently playing plus the tracks up next.
devices
params_unexplained no_return_description
Manages Spotify Connect devices. The action parameter selects the operation: 'list' returns the available devices (name, id, active state); 'transfer' moves playback to the device given in the device parameter (matched fuzzily by name or by id) and returns the updated active device.
get_playlists
no_return_description
Fetches the user's playlists and returns each one's name, item count, and URI.
get_playlist_items
no_return_description
Fetches the tracks in one of the user's own or collaborative playlists (Spotify no longer exposes other users' playlist contents), identified by the playlist parameter (id, URI, or URL) and paginated via offset. Returns the list of tracks with their names and URIs.
modify_playlist
params_unexplained no_return_description
Creates or updates a playlist. The action parameter selects the operation: 'create' makes a new playlist (private by default, using name, description, and public) and returns its id and URI; 'add_items' appends the track URIs in uris to the existing playlist identified by playlist and returns the updated item count. Does not delete or remove anything.
library
params_unexplained no_return_description
Saves, removes, or checks items in the user's Spotify library ('liked'), for the content URIs given in uris (tracks, albums, artists to follow, shows, episodes). The action parameter selects the operation: 'save' adds the items, 'remove' deletes them, and 'check' returns a boolean per URI indicating whether it's already saved. To save the current song, get its URI from now_playing first.

Selection evidence

Confusable tool pairs.

1 pair where similar names or overlapping descriptions may send an agent toward the wrong tool.

Tool A Tool B Confidence Why they collide
get_playlists get_playlist_items low Both are read-only listing tools with similar names, but one lists playlists themselves (no params) and the other lists tracks within a specific playlist (requires playlist id) — schema requirement makes the distinction fairly clear.

Compare the field

One score is useful.
The evidence makes it actionable.

Back to the leaderboard