Identify any song from a URL or audio file, then get its BPM, musical key, Camelot code and harmonically compatible tracks.
Four well-named tools with clear, actionable descriptions (avg 180 chars). All tools have complete input schemas with proper types, constraints, and parameter descriptions. Naming follows verb_noun pattern (identify_song, search_tracks, get_track_analysis, find_similar_tracks). Parameters are well-constrained (ISRC regex, URL format, numeric bounds). However, output schemas are not documented, LLMs cannot see what fields to expect from responses, forcing inference and risking downstream tool chaining failures. Error handling is present but generic (SongFinderError catch-all). No tool annotations (readOnlyHint, idempotentHint) despite all tools being read-only.
Find tracks that sound like a given one. With harmonic=true it restricts results to keys that mix cleanly with the seed on the Camelot wheel, which is what you want when building a DJ set or a beatmatched playlist.
Full acoustic analysis for a track: tempo in BPM, musical key with its Camelot wheel code and harmonically compatible keys, plus energy, danceability, valence, acousticness and loudness. Requires an ISRC — get one from search_tracks or identify_song.
Identify what song is playing in an online video/track or a local audio file. Accepts a page URL (YouTube, TikTok, Instagram, SoundCloud, Bilibili, X, or any direct audio/video link) or a path to an audio file on this machine. Returns the title, artist, album, streaming links and — when it can be resolved — the ISRC needed by get_track_analysis.
Look up tracks by title and/or artist and get their ISRC codes. Use this when you already know what the song is and need the ISRC that get_track_analysis and find_similar_tracks require.
Output schemas not documented. LLMs cannot see what fields identify_song, search_tracks, get_track_analysis, and find_similar_tracks return, forcing inference and breaking tool chaining. Responses must document structure (e.g., 'Returns: {title, artist, album, isrc, streaming_links}').
No tool annotations despite all tools being read-only. Add readOnlyHint: true to all four tools so agents know they are safe to call without side effects.
Error handling is generic. SongFinderError catch-all provides no recovery guidance. Errors should categorize as retryable (network timeout) vs user-fixable (invalid ISRC format) vs fatal, with actionable next steps.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2026-07-28+ | v2 |
identify_song description mentions 'when it can be resolved, the ISRC needed by get_track_analysis' but does not document the fallback behavior when ISRC resolution fails. Does the tool return partial results or fail entirely?
find_similar_tracks 'harmonic' parameter defaults to false but description does not explain what 'harmonic=true' does in plain language. Clarify: 'When true, restricts results to keys that mix cleanly on the Camelot wheel (for DJ sets).'