get_track_lyrics
Retrieve plain text lyrics for any Spotify track to display in applications, analyze for research, or create lyric-based features.
Instructions
Retrieve plain text lyrics for any Spotify track in a clean, readable format.
🎯 USE CASES: • Analyze song lyrics for music analysis, research, or content creation • Display lyrics in music applications for reading along • Create lyric-based search and discovery features • Develop music education tools with lyric analysis • Build lyrics display features for music players
📝 WHAT IT RETURNS: • Structured response with success status and error handling • Complete track information (name, artist, album, duration) • Plain text lyrics in clean, readable format • Instrumental track detection for non-vocal content • Fallback message when lyrics are unavailable
🔍 EXAMPLES: • "Show me the lyrics for 'Bohemian Rhapsody' by Queen" • "Get the lyrics for this track" • "What are the lyrics to track ID: 4uLU6hMCjMI75M1A2tKUQC?" • "Display the song lyrics for analysis"
🎵 RESPONSE FORMAT: • Success response includes track metadata and lyrics string • Plain text lyrics with line breaks for easy reading • Error responses provide helpful fallback information • Instrumental flag indicates tracks without vocals • Clean format perfect for display and analysis
💡 LYRIC FEATURES: • Clean plain text format without timestamps • Easy to read and analyze lyrics content • Error handling for unavailable or missing lyrics • UTF-8 support for international character sets • Perfect for lyrics display and text analysis
⚠️ REQUIREMENTS: • Valid Spotify access token • Track must exist and be available in user's market • Uses external lyrics service for comprehensive coverage • Returns clean plain text lyrics only
🔍 EXAMPLE RESPONSE FORMAT:
{ "success": true, "track": { "name": "Bohemian Rhapsody", "artist": "Queen", "album": "A Night at the Opera", "duration": 354 }, "lyrics": "Verse 1: Is this the real life? Is this just fantasy? Caught in a landslide, No escape from reality.
Chorus: Mama, just killed a man Put a gun against his head Pulled my trigger, now he's dead
Verse 2: Too late, my time has come Sends shivers down my spine Body's aching all the time", "instrumental": false }
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| token | Yes | Spotify access token for authentication | |
| trackId | Yes | Spotify track ID or URI |
Implementation Reference
- src/mcp/tools/tracks.ts:444-487 (handler)The handler function that implements the core logic of the 'get_track_lyrics' tool. It retrieves track information using SpotifyService, fetches lyrics from lrclib.net API, and returns formatted lyrics or error response.handler: async (args: any, spotifyService: SpotifyService) => { const { token, trackId } = args; try { const track = await spotifyService.getTrack(token, trackId); const response = await fetch( `https://lrclib.net/api/get?artist_name=${encodeURIComponent( track.artists[0].name )}&track_name=${encodeURIComponent(track.name)}` ); if (!response.ok) { return { success: false, message: "Lyrics not found for this track", track: { name: track.name, artist: track.artists[0].name, album: track.album?.name, }, }; } const data = await response.json(); return { success: true, track: { name: data.trackName || track.name, artist: data.artistName || track.artists[0].name, album: data.albumName || track.album?.name, duration: data.duration || Math.floor(track.duration_ms / 1000), }, lyrics: data.plainLyrics || "Lyrics not available for this track", instrumental: data.instrumental || false, }; } catch (error) { return { success: false, message: "Error fetching lyrics", error: error instanceof Error ? error.message : "Unknown error", }; } },
- src/mcp/tools/tracks.ts:440-443 (schema)Input schema definition for the 'get_track_lyrics' tool, validating token and trackId parameters using Zod.schema: createSchema({ token: commonSchemas.token(), trackId: commonSchemas.spotifyId("track"), }),
- src/mcp/tools/index.ts:22-36 (registration)Registration of all tools including trackTools (which contains 'get_track_lyrics') into the central allTools registry used by the MCP server.export const allTools: ToolsRegistry = { ...albumTools, ...artistTools, ...trackTools, ...playlistTools, ...playbackTools, ...userTools, ...searchTools, };
- src/mcp/tools/tracks.ts:379-379 (registration)The 'get_track_lyrics' tool is registered as a property in the trackTools export object.get_track_lyrics: {
- src/spotify.ts:461-464 (helper)SpotifyService.getTrack helper method called by the tool handler to fetch track metadata before retrieving lyrics.async getTrack(token: string, trackId: string): Promise<SpotifyTrack> { const id = this.extractId(trackId); return await this.makeRequest<SpotifyTrack>(`tracks/${id}`, token); }