Skip to main content
Glama

Get lyrics

get_lyrics
Read-onlyIdempotent

Fetch lyrics for a track by LRCLIB ID or exact artist/title. Supports plain, synced, or both formats, with pagination for long lyrics and instrumental status detection.

Instructions

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.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
idNoLRCLIB track id, as returned by search_tracks. Preferred over the name fields.
formatNo'plain' returns the text only. 'synced' returns LRC text plus a parsed list of timestamped lines. 'both' returns each of them.plain
offsetNoCharacter offset to resume from, for lyrics longer than max_chars.
max_charsNoMaximum characters of lyrics text to return in this call.
album_nameNoAlbum name, to pick between releases.
track_nameNoSong title, matched exactly by LRCLIB. Required when 'id' is absent.
artist_nameNoArtist name, matched exactly by LRCLIB. Required when 'id' is absent.
duration_secondsNoTrack duration, to pick between versions of differing length.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
notesYes
trackYes
offsetYes
sourceYes
statusYes
truncatedYes
attributionYes
next_offsetYes
total_charsYes
plain_lyricsYes
synced_linesYesParsed timestamped lines.
synced_lyricsYesRaw LRC text, one timestamp per line.
paginated_formYesWhich body the character counts and the offset describe. Timed text carries its timestamps, so it is longer than the words alone.
returned_charsYes
synced_lines_truncatedYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed19 schema fields changedv2.0.0
    • addedInput schema / properties / id / maximum
      Added value: +9007199254740991
    • addedInput schema / properties / offset / maximum
      Added value: +9007199254740991
    • changedOutput schema / properties / next_offset / anyOf
      Previous value: -[
      -  {
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maximum": 9007199254740991,
      +    "minimum": -9007199254740991,
      +    "type": "integer"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedOutput schema / properties / offset / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / offset / minimum
      Added value: +-9007199254740991
    • addedOutput schema / properties / plain_lyrics / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / plain_lyrics / type
      Removed value: -[
      -  "string",
      -  "null"
      -]
    • addedOutput schema / properties / returned_chars / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / returned_chars / minimum
      Added value: +-9007199254740991
    • addedOutput schema / properties / synced_lyrics / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / synced_lyrics / type
      Removed value: -[
      -  "string",
      -  "null"
      -]
    • addedOutput schema / properties / total_chars / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / total_chars / minimum
      Added value: +-9007199254740991
    • addedOutput schema / properties / track / properties / album_name / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / track / properties / album_name / type
      Removed value: -[
      -  "string",
      -  "null"
      -]
    • addedOutput schema / properties / track / properties / duration_seconds / anyOf
      Added value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / track / properties / duration_seconds / type
      Removed value: -[
      -  "number",
      -  "null"
      -]
    • addedOutput schema / properties / track / properties / id / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / track / properties / id / minimum
      Added value: +-9007199254740991
  2. Changed2 schema fields changedv1.4.0
    • addedOutput schema / properties / paginated_form
      Added value: +{
      +  "description": "Which body the character counts and the offset describe. Timed text carries its timestamps, so it is longer than the words alone.",
      +  "enum": [
      +    "plain",
      +    "synced"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "status",
      -  "track",
      -  "plain_lyrics",
      -  "synced_lyrics",
      -  "synced_lines",
      -  "synced_lines_truncated",
      -  "total_chars",
      -  "returned_chars",
      -  "offset",
      -  "next_offset",
      -  "truncated",
      -  "attribution",
      -  "source",
      -  "notes"
      -]New value: +[
      +  "status",
      +  "track",
      +  "plain_lyrics",
      +  "synced_lyrics",
      +  "synced_lines",
      +  "synced_lines_truncated",
      +  "paginated_form",
      +  "total_chars",
      +  "returned_chars",
      +  "offset",
      +  "next_offset",
      +  "truncated",
      +  "attribution",
      +  "source",
      +  "notes"
      +]
  3. First observedv1.0.0

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly, idempotent, and non-destructive behavior. The description adds valuable details beyond annotations: default truncation with 'truncated'/'next_offset', instrumental status as a valid no-retry outcome, and the attribution requirement. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five dense sentences, each carrying distinct operational information. Purpose is front-loaded, and there is no filler or redundant restating of schema content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite a complex 8-parameter surface, the description covers all critical runtime behaviors: input selection, format choice, synced availability checking, truncation/continuation, the instrumental edge case, and attribution. The output schema handles return-value details, so nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all parameters are already documented. The description goes further by linking id to search_tracks results, clarifying artist/track exact-match semantics as a fallback, explaining format values in user terms, and describing how offset and max_chars interact with truncation flags.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a clear verb and resource: 'Fetch the lyrics of one track from LRCLIB.' It distinguishes itself from siblings by referencing the id from search_tracks and exact artist/title fallback, making its scope unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides strong operational context: how to identify the track, when to expect synced lyrics via has_synced_lyrics, and how to handle instrumental tracks as valid results. It does not explicitly name get_track as the metadata alternative, but the workflow guidance is clear and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Deploy Server

Other Tools