0.0 / 30
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
02Legibility
25.0 / 30
03Economics
15.9 / 20
04Discoverability
14.1 / 20
Highest-impact fix
Estimated gain +30 pointsAdd 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