MCP server for LRCLIB. Search tracks and fetch plain or time-synced (LRC) lyrics. No API key required.
Three tools with clear verb-noun naming (search_tracks, get_lyrics, get_track) and good action-oriented descriptions. All tools have input schemas with typed parameters and descriptions. Tool descriptions range 66-179 chars, within the 10-1024 baseline. However, parameter descriptions are sparse and domain-specific context could be stronger. All tools correctly marked as read-only with proper hints. Output schemas are documented but not exposed in schema definitions themselves. No critical security issues (read-only, no credentials). Main gaps: parameter descriptions could be more detailed (format, constraints, examples), output structure not formally specified in schema, and pagination/result limits not addressed despite potential for large result sets.
Fetch full lyrics for a track by its LRCLIB id. Returns plain lyrics, time-synced (LRC) lyrics, or both if available.
Get complete track metadata and lyrics by LRCLIB id. Includes artist, album, duration, and both plain and synced lyrics if available.
Search for tracks by free text or structured metadata (artist, track, album). Returns matching tracks with metadata but no lyrics.
Parameter descriptions are minimal. 'id' params say only 'LRCLIB track id' without format, valid range, or how to obtain them. 'syncedLyrics' boolean lacks guidance on default behavior or when to set true vs false.
search_tracks accepts four input params (q, trackName, artistName, albumName) but does not document whether they are mutually exclusive, combined with AND/OR logic, or what happens if multiple are provided. This ambiguity forces LLM guessing.
No documented output schema or pagination. search_tracks likely returns an array of tracks, but the response structure (fields, count, next_cursor, limit applied) is not formally specified. Large result sets could blow context window without pagination.
Tool descriptions do not explain failure modes or error recovery. What happens if a track id does not exist? What if LRCLIB is unreachable? No guidance for LLM on retry vs fallback strategy.
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 62 | 2025-06-18+ | v2 |
search_tracks free-text query parameter 'q' lacks constraints or guidance. Should LLM normalize input? Are there length limits? What characters are allowed? Unconstrained string params invite LLM hallucination.