Wraps the Genius API (api.genius.com) to provide song, artist, and album metadata search and retrieval
Genius MCP has well-structured tool definitions with clear naming (verb_noun pattern: search, get_song, get_artist, artist_songs) and comprehensive descriptions (150-250 chars each). All tools declare input schemas with typed properties and required fields. However, output schemas are completely undocumented, callers cannot see what fields to expect from responses. Parameter descriptions are present but lack constraints (e.g., no min/max for 'limit', no enum for 'query' validation). The _apiKey parameter is exposed as a tool parameter, violating secret-injection patterns. Error handling returns generic error objects without recovery guidance. No tool annotations (readOnlyHint, idempotentHint) despite all tools being read-only.
List an artist's songs ranked by popularity. Returns song METADATA (id, title, artist, Genius URL) — NOT lyric text. Example: artist_songs({ artist_id: 1421, limit: 20 })
Get METADATA for a Genius artist by ID: name, Genius URL, image, follower count, alternate names, and a short "about" description. Example: get_artist({ id: 1421 })
Get METADATA for a single Genius song by ID: title, primary artist, album, release date, pageviews, Genius URL, and a short "about" description. Does NOT return lyric text (not available via the Genius API). Example: get_song({ id: 378195 })
Search Genius for songs by title, artist, or keyword. Returns song METADATA hits (id, title, artist, Genius URL, release date, pageviews) — NOT lyric text (the Genius API does not return lyrics). Example: search({ query: "kendrick lamar humble", limit: 10 })
Output schemas completely undocumented. LLMs cannot plan downstream calls or extract fields without trial-and-error. Responses include id, title, artist, url, release_date, pageviews but this is inferred from code, not declared in tool definitions.
API key exposed as _apiKey tool parameter. Credentials must use server-side secret injection via environment variables. Agent traces log all parameters, secrets leak into logs and prompt history.
Parameter constraints missing. 'limit' has no min/max bounds (unbounded numbers let LLMs pass absurd values). 'query' accepts free-form strings with no validation guidance. No enum constraints or format declarations.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
Error handling returns generic {error: string} without recovery guidance. 'Genius auth error (check access token)' is better than most, but other errors like 'not found' or 'Unknown tool' give LLMs no actionable next step.
No tool annotations. All four tools are read-only and idempotent, but lack readOnlyHint and idempotentHint annotations. LLMs cannot infer safety properties without explicit hints.