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
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.
Instalación
Instalación en un clic
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
| Herramienta | Qué hace |
|---|---|
search_lyrics | Encuentra una canción a partir de una línea dentro de sus palabras. |
search_songs | Encuentra canciones por título, acotado por artista. |
get_lyrics | Lee 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.
| Argumento | Tipo | Obligatorio | Qué hace |
|---|---|---|---|
query | cadena, de 1 a 120 caracteres | sí | La línea, o parte de ella, a buscar. |
limit | entero, de 1 a 50, por defecto 10 | no | Filas a servir. |
page | entero, de 1 a 20, por defecto 1 | no | Qué página de filas. |
verify | snippet, full o none, por defecto snippet | no | Cómo confirmar que las palabras realmente aparecen. |
include_excerpt | booleano, por defecto true | no | Llevar 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.
| Argumento | Tipo | Obligatorio | Qué hace |
|---|---|---|---|
title | cadena, de 1 a 120 caracteres | sí | El título de la canción, o parte de él. |
artist | cadena, hasta 120 caracteres | no | Conservar las canciones atribuidas a este artista. |
limit | entero, de 1 a 50, por defecto 10 | no | Filas a servir. |
page | entero, de 1 a 20, por defecto 1 | no | Qué página de filas. |
match | loose o strict, por defecto loose | no | Con 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.
| Argumento | Tipo | Obligatorio | Qué hacer |
|---|---|---|---|
id | cadena | uno de dos | El id de la canción que lleva una fila de búsqueda. |
url | una URL de lyrics.com | uno de dos | La dirección de la página de la canción. |
max_chars | entero, de 200 a 20000, por defecto 6000 | no | Caracteres de texto a servir en esta llamada. |
offset | entero, 0 o más, por defecto 0 | no | Desplazamiento de caracteres para reanudar. |
highlight | cadena, hasta 120 caracteres | no | Palabras 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.
| Variable | Valor por defecto | Qué hace |
|---|---|---|
LYRICSCOM_USER_AGENT | la identidad del proyecto | Nombra tu aplicación ante el sitio, con una dirección donde se pueda contactar a una persona. |
LYRICSCOM_MIN_INTERVAL_MS | 1100 | Intervalo entre dos solicitudes, de 500 a 60000. |
LYRICSCOM_TIMEOUT_MS | 15000 | Plazo para una solicitud, de 1000 a 120000. |
LYRICSCOM_MAX_RETRIES | 3 | Intentos tras un fallo transitorio, de 0 a 10. |
LYRICSCOM_CACHE_TTL_MS | 900000 | Cuánto tiempo permanece una respuesta en memoria, de 0 a 86400000. |
LYRICSCOM_CACHE_MAX_ENTRIES | 200 | Respuestas retenidas en memoria a la vez, de 0 a 10000. |
LYRICSCOM_LOG_LEVEL | error | silent, 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ódigo | Qué pasó | Qué hacer |
|---|---|---|
not_found | El sitio respondió y no tiene tal canción. | Verifica el id con search_songs. |
invalid_input | Los argumentos fueron rechazados antes de enviar cualquier solicitud. | Lee el mensaje, que nombra el argumento. |
throttled | El sitio pidió a este cliente que se ralentizara. | Espera y vuelve a llamar con los mismos argumentos. La canción sigue allí. |
blocked_user_agent | El sitio rechazó la identidad que envió este cliente. | Establece LYRICSCOM_USER_AGENT. |
parse_failure | La página cargó y faltaba el contenido esperado. | Repórtalo en el rastreador de incidencias. |
network_error | La solicitud no se completó. | Inténtalo de nuevo en breve. |
timeout | La 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)
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
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
| Herramienta | Lo que hace |
|---|---|
search_lyrics | Encuentra una canción a partir de un verso de sus letras. |
search_songs | Encuentra canciones por título, acotadas por artista. |
get_lyrics | Lee 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.
| Argumento | Tipo | Requerido | Lo que hace |
|---|---|---|---|
query | cadena, de 1 a 120 caracteres | sí | El verso, o una parte, a buscar. |
limit | entero, de 1 a 50, por defecto 10 | no | Líneas a servir. |
page | entero, de 1 a 20, por defecto 1 | no | Qué página de líneas. |
verify | snippet, full o none, por defecto snippet | no | Cómo confirmar que las palabras están presentes. |
include_excerpt | booleano, por defecto true | no | Llevar 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.
| Argumento | Tipo | Requerido | Lo que hace |
|---|---|---|---|
title | cadena, de 1 a 120 caracteres | sí | El título de la canción, o una parte. |
artist | cadena, hasta 120 caracteres | no | Conservar solo las canciones de este artista. |
limit | entero, de 1 a 50, por defecto 10 | no | Líneas a servir. |
page | entero, de 1 a 20, por defecto 1 | no | Qué página de líneas. |
match | loose o strict, por defecto loose | no | La 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.
| Argumento | Tipo | Requerido | Lo que hace |
|---|---|---|---|
id | cadena | uno de los dos | El identificador que lleva una línea. |
url | una dirección lyrics.com | uno de los dos | La dirección de la página de la canción. |
max_chars | entero, de 200 a 20000, por defecto 6000 | no | Caracteres de texto a servir en esta llamada. |
offset | entero, 0 o más, por defecto 0 | no | Posición en caracteres donde retomar. |
highlight | cadena, hasta 120 caracteres | no | Palabras 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.
| Variable | Por defecto | Lo que hace |
|---|---|---|
LYRICSCOM_USER_AGENT | la identidad del proyecto | Nombra tu aplicación ante el sitio, con una dirección donde contactar a una persona. |
LYRICSCOM_MIN_INTERVAL_MS | 1100 | Intervalo entre dos solicitudes, de 500 a 60000. |
LYRICSCOM_TIMEOUT_MS | 15000 | Tiempo de espera de una solicitud, de 1000 a 120000. |
LYRICSCOM_MAX_RETRIES | 3 | Intentos después de un fallo pasajero, de 0 a 10. |
LYRICSCOM_CACHE_TTL_MS | 900000 | Duración durante la cual una respuesta permanece en memoria, de 0 a 86400000. |
LYRICSCOM_CACHE_MAX_ENTRIES | 200 | Respuestas guardadas en memoria a la vez, de 0 a 10000. |
LYRICSCOM_LOG_LEVEL | error | silent, 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ódigo | Lo que ha sucedido | Qué hacer |
|---|---|---|
not_found | El sitio ha respondido y no tiene esa canción. | Verifica el identificador con search_songs. |
invalid_input | Los argumentos han sido rechazados antes de cualquier solicitud. | Lee el mensaje, que nombra el argumento. |
throttled | El 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_agent | El sitio ha rechazado la identidad enviada por este cliente. | Establece LYRICSCOM_USER_AGENT. |
parse_failure | La página ha cargado y el contenido esperado está ausente. | Repórtalo en el seguimiento de incidencias. |
network_error | La solicitud no ha llegado a buen término. | Reintenta en breve. |
timeout | La 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.