MCP server implementing Genius API tools for song identification and detailed song information retrieval
Two tools with clear, actionable descriptions (194 - 250 chars, within baseline 34 - 392). Both have verb-noun naming (identify_song, get_song_details) and documented input schemas with types and descriptions. However, output schemas are not visible in the provided source code, only input schemas are shown. Parameter descriptions are present and specific (e.g., 'numeric Genius song ID', 'minimum 3-5 words recommended'). No error handling guidance or recovery paths documented. No tool annotations (readOnlyHint, destructiveHint) despite both being READ_ONLY. Missing output schema documentation is a significant gap for LLM planning.
Fetches comprehensive details about a specific song from Genius using its numeric ID (obtained from identify_song results). Returns release date, album, featured artists, producers, writers, description, and streaming links (Apple Music, Spotify, YouTube). IMPORTANT: Use the "id" field from identify_song results, NOT the URL.
Searches the Genius database to identify songs based on lyric snippets. Returns structured song data including title, artist, Genius URL, and album artwork. Use when users provide any lyrics, song fragments, or ask "what song is this" with quoted text. Works best with distinctive, memorable lyrics (minimum 3-5 words recommended).
Output schemas not documented. LLMs cannot plan downstream calls or extract required fields (e.g., song_id from identify_song to feed into get_song_details). Source shows only input schemas; return types are inferred from descriptions.
No tool annotations despite both tools being READ_ONLY. Annotations (readOnlyHint, destructiveHint, idempotentHint) are current MCP spec patterns that help agents reason about safety and retry logic.
No error handling guidance. Descriptions lack recovery hints (e.g., 'If no matches found, try shorter lyric snippets' or 'If song_id is invalid, call identify_song first'). Agents cannot self-correct on failures.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 79 | <=2025-11-25 | v2 |
identify_song 'limit' parameter defaults to 3 but description says 'Use 1 for high-confidence queries, 3-5 for ambiguous lyrics.' Default choice (3) is not justified as the common case. Consider whether 1 or 3 is the safer default.
get_song_details description emphasizes 'Use the "id" field from identify_song results, NOT the URL' but does not explain what happens if a user passes a URL or invalid ID. No validation error guidance.