mcp-lrclib
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| LRCLIB_LOG_LEVEL | No | silent, error, info or debug. Logs go to stderr. | error |
| LRCLIB_TIMEOUT_MS | No | Per-request timeout. | 15000 |
| LRCLIB_USER_AGENT | No | User-Agent sent to LRCLIB. Please keep that shape if you override it. | mcp-lrclib v<version> (<repo url>) |
| LRCLIB_MAX_RETRIES | No | Retries on rate limiting and transient errors. | 3 |
| LRCLIB_CACHE_TTL_MS | No | In-memory cache lifetime (15 minutes). | 900000 |
| LRCLIB_MIN_INTERVAL_MS | No | Minimum gap between requests. Values below 200 ms are ignored. | 500 |
| LRCLIB_CACHE_MAX_ENTRIES | No | In-memory cache size. | 200 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| search_tracksA | Search LRCLIB for tracks by title, artist or album, and get the id needed to fetch lyrics with get_lyrics. Give either 'query' as free text, or 'track_name' and 'artist_name' separately for a narrower search. Results carry metadata only: title, artist, album, duration, and whether plain and time-synced lyrics exist. Use 'duration_seconds' and 'album_name' in the results to tell releases and re-recordings of the same song apart, and 'has_synced_lyrics' to know whether karaoke-style timed lyrics are available before fetching them. LRCLIB indexes tracks by their metadata, so it cannot search for a word appearing inside the lyrics. |
| get_lyricsA | Fetch the lyrics of one track from LRCLIB, given the id returned by search_tracks, or an exact artist and title. Set 'format' to "synced" for karaoke-style lyrics with a timestamp on every line, "plain" for the text alone, or "both". Check 'has_synced_lyrics' in the search results first: not every track has timed lyrics. Lyrics can be long, so the text is truncated by default: check 'truncated' and call again with 'offset' set to 'next_offset' to continue reading. Instrumental tracks come back with status "instrumental" and no text, which is a valid answer, so do not retry them. Always cite 'attribution' when showing lyrics to a user. |
| get_trackA | Look up one LRCLIB track by its id and return its metadata without the lyrics: title, artist, album, duration, and whether plain and time-synced lyrics exist. Use this to confirm you have the right release or version before calling get_lyrics, or to check whether timed lyrics exist for a track id you already hold. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 3 tools
The tools are mostly distinct: search_tracks finds tracks by query while get_track fetches a specific track by ID, and get_lyrics retrieves lyric content. There is minor overlap in that both search_tracks and get_track return metadata, but their purposes are clearly separated by search vs. direct lookup.
All tool names follow a consistent verb_noun pattern: search_tracks, get_lyrics, and get_track. The naming is predictable and makes the action and resource type immediately clear.
Three tools is an appropriate scope for an LRCLIB lyrics server. Each tool covers a distinct part of the workflow: searching, fetching lyrics, and fetching track metadata, with no unnecessary duplication.
The tool surface covers the full read-only workflow for this domain: discover tracks, inspect metadata, and fetch either plain or synced lyrics. Descriptions also handle edge cases like truncation, instrumental tracks, and timing checks, so there are no obvious dead ends.