Lyrics.com

Busca letras de canciones en lyrics.com por palabra o por título, y obtén la letra completa. No se requiere clave API.

Documentación

mcp-lyricscom

npm CI license MCP Registry Glama M8ven LobeHub Install in Cursor Install in VS Code

lyrics.com es un gran catálogo público de letras de canciones. Archiva una canción por su título, su artista, el álbum en el que apareció y el año, y contiene las palabras mismas. Su búsqueda llega hasta el interior de esas palabras.

Este servidor conecta un cliente de chat con ese catálogo. Puedes buscar una canción por una línea que recuerdes, buscar por título y artista, y leer las palabras de una canción, en fragmentos, con las palabras que buscabas localizadas en el texto. No requiere clave API ni cuenta.

Versión francesa


Instalación

Instalación en un clic

Install in Cursor Install in VS Code

Claude Code

claude mcp add lyricscom -- npx -y mcp-lyricscom

Claude Desktop, Cursor y cualquier cliente que use el formato de configuración estándar

{
  "mcpServers": {
    "lyricscom": {
      "command": "npx",
      "args": ["-y", "mcp-lyricscom"]
    }
  }
}

Se requiere Node 24 o posterior, y no es necesario establecer ninguna variable de entorno.

Con Docker

{
  "mcpServers": {
    "lyricscom": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-lyricscom:2.0.1"]
    }
  }
}

-i mantiene abierta la entrada estándar, que es por donde viaja el protocolo, y -t se omite porque una TTY reescribe el flujo. El contenedor necesita HTTPS saliente hacia www.lyrics.com, y nada más: sin volumen, sin puerto, sin credenciales.

Paquete, sin npm

Descarga mcp-lyricscom-2.0.1.mcpb desde la última versión y ábrelo. Un cliente que admita paquetes MCP lo instala por sí solo, sin npm y sin archivo de configuración que editar. El paquete incluye sus dependencias, por lo que no se descarga nada en el momento de la instalación.

Lo que puedes preguntar

  • "¿Qué canción dice 'I've got a hand for you'?"
  • "Encuéntrame la letra de Wichita Lineman de Glen Campbell."
  • "Léeme la segunda mitad de esas palabras."
  • "¿Dónde aparece la palabra 'lineman' en esa canción?"
  • "¿En qué álbumes está esa canción?"

El camino habitual va de una búsqueda a una lectura: una fila lleva un id, y get_lyrics toma ese id.

Herramientas

HerramientaQué hace
search_lyricsEncuentra una canción a partir de una línea dentro de sus palabras.
search_songsEncuentra canciones por título, acotado por artista.
get_lyricsLee las palabras de una canción, en fragmentos.

search_lyrics

Encuentra una canción a partir de palabras dentro de su letra. El sitio clasifica de forma aproximada, por lo que una coincidencia se verifica antes de servirse.

ArgumentoTipoObligatorioQué hace
querycadena, de 1 a 120 caracteresLa línea, o parte de ella, a buscar.
limitentero, de 1 a 50, por defecto 10noFilas a servir.
pageentero, de 1 a 20, por defecto 1noQué página de filas.
verifysnippet, full o none, por defecto snippetnoCómo confirmar que las palabras realmente aparecen.
include_excerptbooleano, por defecto truenoLlevar la línea coincidente con cada fila.

verify decide cuánto vale una fila. snippet verifica el extracto que el sitio ya devolvió y no cuesta nada. full obtiene hasta cinco páginas de canciones y verifica las palabras completas, lo cual es lento y puede provocar limitación de velocidad. none sirve lo que el sitio clasificó, sin verificar.

A cambio: filas que llevan id, que get_lyrics toma; title; artist; album y year, null cuando el catálogo no indica ninguno; source_url; y excerpt, la línea coincidente. raw_result_count es lo que el sitio devolvió y filtered_out cuántas filas eliminó la verificación, por lo que ambos juntos indican cuán aproximada fue la clasificación. has_more y next_page continúan.

search_songs

Encuentra canciones por título, acotado por artista.

ArgumentoTipoObligatorioQué hace
titlecadena, de 1 a 120 caracteresEl título de la canción, o parte de él.
artistcadena, hasta 120 caracteresnoConservar las canciones atribuidas a este artista.
limitentero, de 1 a 50, por defecto 10noFilas a servir.
pageentero, de 1 a 20, por defecto 1noQué página de filas.
matchloose o strict, por defecto loosenoCon qué precisión debe coincidir el artista.

A cambio: las filas que search_lyrics devuelve, con artist_filter reflejando lo que se pidió y filtered_out contando lo que la restricción de artista eliminó. strict conserva los artistas cuyo nombre coincide tal como está escrito; loose acepta un nombre escrito de forma diferente.

get_lyrics

Lee las palabras de una canción. Las letras largas se sirven en fragmentos.

ArgumentoTipoObligatorioQué hacer
idcadenauno de dosEl id de la canción que lleva una fila de búsqueda.
urluna URL de lyrics.comuno de dosLa dirección de la página de la canción.
max_charsentero, de 200 a 20000, por defecto 6000noCaracteres de texto a servir en esta llamada.
offsetentero, 0 o más, por defecto 0noDesplazamiento de caracteres para reanudar.
highlightcadena, hasta 120 caracteresnoPalabras a localizar dentro del texto.

A cambio: status, leyendo ok o no_lyrics para una página que el sitio tiene sin palabras; title, artist y source_url; y lyrics, el fragmento en sí. La lectura se describe mediante total_chars, returned_chars, offset, next_offset y truncated: pasa next_offset de nuevo para seguir leyendo, y null allí significa el final. line_count cuenta las líneas del fragmento, y highlight responde por cada palabra si fue found y en qué line_number, que es null cuando no lo fue.

Configuración

Toda variable es opcional. Establécelas en el bloque env de la configuración de tu cliente.

VariableValor por defectoQué hace
LYRICSCOM_USER_AGENTla identidad del proyectoNombra tu aplicación ante el sitio, con una dirección donde se pueda contactar a una persona.
LYRICSCOM_MIN_INTERVAL_MS1100Intervalo entre dos solicitudes, de 500 a 60000.
LYRICSCOM_TIMEOUT_MS15000Plazo para una solicitud, de 1000 a 120000.
LYRICSCOM_MAX_RETRIES3Intentos tras un fallo transitorio, de 0 a 10.
LYRICSCOM_CACHE_TTL_MS900000Cuánto tiempo permanece una respuesta en memoria, de 0 a 86400000.
LYRICSCOM_CACHE_MAX_ENTRIES200Respuestas retenidas en memoria a la vez, de 0 a 10000.
LYRICSCOM_LOG_LEVELerrorsilent, error, info o debug, escritos en stderr.

Un valor fuera de su rango vuelve al valor por defecto, y la razón se escribe en stderr.

Sobre el User-Agent. Este servidor nombra el proyecto y enlaza a su repositorio, y el sitio lo sirve. Sí rechaza de plano algunos agentes de herramientas genéricos: un curl simple recibe un 403. Un error blocked_user_agent significa que la identidad fue rechazada, y LYRICSCOM_USER_AGENT te permite establecer una de tu elección. Lo que pongas allí es tu decisión y tu responsabilidad.

Errores

Cada fallo lleva uno de estos códigos, un mensaje y, donde ayuda, una pista que nombra el siguiente paso.

CódigoQué pasóQué hacer
not_foundEl sitio respondió y no tiene tal canción.Verifica el id con search_songs.
invalid_inputLos argumentos fueron rechazados antes de enviar cualquier solicitud.Lee el mensaje, que nombra el argumento.
throttledEl sitio pidió a este cliente que se ralentizara.Espera y vuelve a llamar con los mismos argumentos. La canción sigue allí.
blocked_user_agentEl sitio rechazó la identidad que envió este cliente.Establece LYRICSCOM_USER_AGENT.
parse_failureLa página cargó y faltaba el contenido esperado.Repórtalo en el rastreador de incidencias.
network_errorLa solicitud no se completó.Inténtalo de nuevo en breve.
timeoutLa solicitud superó su plazo.Aumenta LYRICSCOM_TIMEOUT_MS, o pide un max_chars más pequeño.

throttled y blocked_user_agent son los dos nombres de este servidor para una negativa a servir, y un llamador que lea varias fuentes las normaliza en lo que llame limitación de velocidad.

Como biblioteca

La capa que lee el sitio se publica por separado, con su ritmo, su caché y sus errores, y sin protocolo adjunto.

import { LyricsComClient } from "mcp-lyricscom/client";

const client = new LyricsComClient();
const { data, cached } = await client.getSong({ id: "1234567" });
console.log(data.title, data.artist, cached);

search y getSong responden cada uno { data, cached }, y lanzan un error que lleva uno de los códigos anteriores. El intervalo mínimo entre dos solicitudes también se aplica aquí.

Ritmo y atribución

Las solicitudes salen de una en una con al menos un segundo entre ellas, y el mínimo de medio segundo se mantiene sin importar cómo esté configurado el servidor. Una búsqueda verify: "full" obtiene hasta cinco páginas de canciones, que es lo más costoso que hace este servidor.

Cada resultado lleva el artista, el título y la dirección de la página de la canción. Las letras de las canciones son obra de sus autores y editores. Este proyecto no reclama derechos sobre ellas, no incluye ninguna base de datos de las mismas y no escribe nada en disco.

Este servidor MCP es un proyecto no oficial, sin afiliación con lyrics.com.

Privacidad

Este servidor no recopila nada sobre ti y no envía nada a su autor. Se ejecuta en tu máquina, contacta únicamente con www.lyrics.com y nada más, mantiene sus respuestas en memoria mientras se ejecuta y no escribe nada en el disco. PRIVACY.md indica qué lleva una solicitud y qué ajustes cambian cualquier parte de ella.

Desarrollo

npm install
npm run build:fixtures
npm test
npm run check

Las pruebas se ejecutan contra fixtures generados y no realizan ninguna solicitud de red. La suite en vivo, npm run test:live, realiza una solicitud por ruta y se ejecuta cada noche contra el propio sitio.

Contribuciones

Los errores, preguntas e ideas pertenecen a el rastreador de incidencias. Las solicitudes de extracción son bienvenidas; abrir una incidencia primero ayuda a acordar la forma del cambio. Consulta CONTRIBUTING.md.

Licencia

MIT, ver LICENSE. Las letras pertenecen a sus autores y editores.


mcp-lyricscom (français)

Versión en inglés

lyrics.com es un gran catálogo público de letras de canciones. Clasifica una canción por su título, su artista, el álbum donde ha aparecido y el año, y contiene las letras mismas. Su búsqueda va al interior de esas letras.

Este servidor conecta un cliente de conversación con ese catálogo. Se puede buscar una canción por un verso que recuerdas, buscar por título y por artista, y leer las letras de una canción por tramos, con las palabras buscadas localizadas en el texto. Sin clave de API, sin cuenta.

Instalación

Instalación en un clic

Install in Cursor Install in VS Code

Claude Code

claude mcp add lyricscom -- npx -y mcp-lyricscom

Claude Desktop, Cursor y cualquier cliente con formato de configuración estándar

{
  "mcpServers": {
    "lyricscom": {
      "command": "npx",
      "args": ["-y", "mcp-lyricscom"]
    }
  }
}

Se necesita Node 24 o más reciente, y no hay ninguna variable de entorno que rellenar.

Con Docker

{
  "mcpServers": {
    "lyricscom": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-lyricscom:2.0.1"]
    }
  }
}

-i mantiene la entrada estándar abierta, que es el canal del protocolo, y -t se omite porque un TTY reescribe el flujo. El contenedor necesita acceso HTTPS saliente hacia www.lyrics.com, y nada más: sin volúmenes, sin puertos, sin identificadores.

Bundle, sin npm

Descarga mcp-lyricscom-2.0.1.mcpb desde la última publicación y ábrelo. Un cliente que gestiona bundles MCP lo instala solo, sin npm y sin archivo de configuración que modificar. El bundle lleva sus dependencias, por lo tanto no se descarga nada en la instalación.

Lo que se puede pedir

  • «¿Cuál es la canción que dice "I've got a hand for you"?»
  • «Encuéntrame las letras de Wichita Lineman de Glen Campbell.»
  • «Léeme la segunda mitad de esas letras.»
  • «¿Dónde aparece la palabra "lineman" en esta canción?»
  • «¿En qué álbumes aparece esta canción?»

El camino habitual va de una búsqueda a una lectura: una línea lleva un id, y get_lyrics retoma ese identificador.

Las herramientas

HerramientaLo que hace
search_lyricsEncuentra una canción a partir de un verso de sus letras.
search_songsEncuentra canciones por título, acotadas por artista.
get_lyricsLee las letras de una canción, por tramos.

search_lyrics

Encuentra una canción a partir de palabras contenidas en sus letras. El sitio clasifica ampliamente, por lo tanto una coincidencia se verifica antes de servirse.

ArgumentoTipoRequeridoLo que hace
querycadena, de 1 a 120 caracteresEl verso, o una parte, a buscar.
limitentero, de 1 a 50, por defecto 10noLíneas a servir.
pageentero, de 1 a 20, por defecto 1noQué página de líneas.
verifysnippet, full o none, por defecto snippetnoCómo confirmar que las palabras están presentes.
include_excerptbooleano, por defecto truenoLlevar el verso correspondiente en cada línea.

verify decide qué vale una línea. snippet verifica el extracto que el sitio ya ha renderizado y no cuesta nada. full va a buscar hasta cinco páginas de canciones y verifica las letras completas, lo cual es lento y puede desencadenar una limitación. none sirve lo que el sitio ha clasificado, sin verificación.

En retorno: líneas que llevan id, que get_lyrics retoma; title; artist; album y year, null donde el catálogo no indica nada; source_url; y excerpt, el verso correspondiente. raw_result_count es lo que el sitio ha renderizado y filtered_out el número de líneas que la verificación ha retirado, de modo que ambos juntos dicen cuán amplia era la clasificación. has_more y next_page continúan.

search_songs

Encuentra canciones por título, acotadas por artista.

ArgumentoTipoRequeridoLo que hace
titlecadena, de 1 a 120 caracteresEl título de la canción, o una parte.
artistcadena, hasta 120 caracteresnoConservar solo las canciones de este artista.
limitentero, de 1 a 50, por defecto 10noLíneas a servir.
pageentero, de 1 a 20, por defecto 1noQué página de líneas.
matchloose o strict, por defecto loosenoLa rigurosidad de la coincidencia sobre el artista.

En retorno: las líneas que renderiza search_lyrics, con artist_filter que devuelve lo que se ha pedido y filtered_out que cuenta lo que la restricción sobre el artista ha retirado. strict conserva los artistas cuyo nombre coincide tal como está escrito; loose acepta un nombre escrito de otra manera.

get_lyrics

Lee las letras de una canción. Las letras largas se sirven por tramos.

ArgumentoTipoRequeridoLo que hace
idcadenauno de los dosEl identificador que lleva una línea.
urluna dirección lyrics.comuno de los dosLa dirección de la página de la canción.
max_charsentero, de 200 a 20000, por defecto 6000noCaracteres de texto a servir en esta llamada.
offsetentero, 0 o más, por defecto 0noPosición en caracteres donde retomar.
highlightcadena, hasta 120 caracteresnoPalabras a localizar en el texto.

En retorno: status, que vale ok o no_lyrics para una página que el sitio contiene sin letras; title, artist y source_url; y lyrics, el tramo mismo. La lectura se describe con total_chars, returned_chars, offset, next_offset y truncated: devuelve next_offset para continuar, y null marca el final. line_count cuenta las líneas del tramo, y highlight responde por cada palabra si ha sido found y en qué line_number, null cuando no lo ha sido.

Configuración

Cada variable es opcional. Se colocan en el bloque env de la configuración del cliente.

VariablePor defectoLo que hace
LYRICSCOM_USER_AGENTla identidad del proyectoNombra tu aplicación ante el sitio, con una dirección donde contactar a una persona.
LYRICSCOM_MIN_INTERVAL_MS1100Intervalo entre dos solicitudes, de 500 a 60000.
LYRICSCOM_TIMEOUT_MS15000Tiempo de espera de una solicitud, de 1000 a 120000.
LYRICSCOM_MAX_RETRIES3Intentos después de un fallo pasajero, de 0 a 10.
LYRICSCOM_CACHE_TTL_MS900000Duración durante la cual una respuesta permanece en memoria, de 0 a 86400000.
LYRICSCOM_CACHE_MAX_ENTRIES200Respuestas guardadas en memoria a la vez, de 0 a 10000.
LYRICSCOM_LOG_LEVELerrorsilent, error, info o debug, escrito en la salida de error.

Un valor fuera de su rango cae en el valor por defecto, y la razón se escribe en la salida de error.

Acerca del User-Agent. Este servidor nombra el proyecto y remite a su repositorio, y el sitio lo sirve. En cambio, rechaza ciertos agentes de herramientas genéricas: un curl desnudo recibe un 403. Un error blocked_user_agent significa que la identidad enviada ha sido rechazada, y LYRICSCOM_USER_AGENT permite establecer una de tu elección. Lo que pongas ahí es tu decisión y tu responsabilidad.

Errores

Cada fallo lleva uno de estos códigos, un mensaje y, cuando ayuda, una indicación del siguiente paso.

CódigoLo que ha sucedidoQué hacer
not_foundEl sitio ha respondido y no tiene esa canción.Verifica el identificador con search_songs.
invalid_inputLos argumentos han sido rechazados antes de cualquier solicitud.Lee el mensaje, que nombra el argumento.
throttledEl sitio pide a este cliente que reduzca la velocidad.Espera y vuelve a llamar con los mismos argumentos. La canción sigue ahí.
blocked_user_agentEl sitio ha rechazado la identidad enviada por este cliente.Establece LYRICSCOM_USER_AGENT.
parse_failureLa página ha cargado y el contenido esperado está ausente.Repórtalo en el seguimiento de incidencias.
network_errorLa solicitud no ha llegado a buen término.Reintenta en breve.
timeoutLa solicitud ha superado su tiempo de espera.Aumenta LYRICSCOM_TIMEOUT_MS, o pide un max_chars más pequeño.
throttled y blocked_user_agent son los dos nombres que este servidor da a una
negativa de servicio, y un llamador que lee varias fuentes los reduce a lo que
llama una limitación de velocidad.

Como biblioteca

La capa que lee el sitio se publica por separado, con su ritmo, su caché y sus errores, sin protocolo adjunto.

import { LyricsComClient } from "mcp-lyricscom/client";

const client = new LyricsComClient();
const { data, cached } = await client.getSong({ id: "1234567" });
console.log(data.title, data.artist, cached);

search y getSong responden cada uno { data, cached }, y lanzan un error con uno de los códigos anteriores. El intervalo mínimo entre dos solicitudes también se aplica aquí.

Ritmo y atribución

Las solicitudes salen una a una con al menos un segundo entre ellas, y el intervalo mínimo de medio segundo se mantiene independientemente de la configuración. Una búsqueda en verify: "full" busca hasta cinco páginas de canciones, lo cual es lo más costoso que hace este servidor.

Cada resultado incluye el artista, el título y la dirección de la página de la canción. Las letras son obra de sus autores y de sus editores. Este proyecto no reclama ningún derecho sobre ellas, no incluye ninguna base de letras y no escribe nada en el disco.

Este MCP es un proyecto no oficial, sin afiliación con lyrics.com.

Privacidad

Este servidor no recopila nada sobre usted y no envía nada a su autor. Se ejecuta en su máquina, solo se conecta a www.lyrics.com, mantiene sus respuestas en memoria mientras se ejecuta, y no escribe nada en el disco. PRIVACY.md dice qué lleva una solicitud y qué ajustes cambian eso.

Desarrollo

npm install
npm run build:fixtures
npm test
npm run check

Las pruebas se ejecutan sobre fixtures generados y no emiten ninguna solicitud. La suite en vivo, npm run test:live, emite una solicitud por ruta y se ejecuta cada noche contra el propio sitio.

Contribuir

Las anomalías, las preguntas y las ideas tienen su lugar en el seguimiento de incidentes. Las propuestas de modificación son bienvenidas; abrir un ticket primero ayuda a ponerse de acuerdo sobre la forma del cambio. Ver CONTRIBUTING.md.

Licencia

MIT, ver LICENSE. Las letras pertenecen a sus autores y a sus editores.