Bide & Musique

Busca en la colección de Bide & Musique de canciones francesas olvidadas. Discos, letras, sin clave de API.

Documentación

mcp-bideetmusique

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

Bide & Musique es una radio web francesa y la colección de discos que reproduce, catalogada a mano por la asociación de voluntarios que la gestiona. Su tema es la canción olvidada: el fracaso, el disco curioso, el tema de televisión, el sencillo que nadie reeditó. La página de un disco incluye el intérprete, los autores y compositores, el año, el sello y su referencia de catálogo, la carátula, la duración, las posiciones en la lista de la propia emisora y la letra cuando un oyente la transcribió.

Este servidor conecta un cliente de chat con esa colección. Puedes buscarla a lo largo de un eje a la vez, por intérprete, título, autor, letra, sello o año; leer un disco completo; leer lo que el sitio guarda sobre un artista con su discografía; sacar un disco al azar; y ver lo que se acaba de catalogar. No necesita clave de 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 bideetmusique -- npx -y mcp-bideetmusique

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

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

Se requiere Node 24 o posterior, y no hay que establecer ninguna variable de entorno.

Con Docker

{
  "mcpServers": {
    "bideetmusique": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-bideetmusique: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 de salida hacia www.bide-et-musique.com, y nada más: sin volumen, sin puerto, sin credencial.

Paquete, sin npm

Descarga mcp-bideetmusique-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 lleva sus dependencias, así que no se descarga nada en el momento de la instalación.

Lo que puedes preguntar

  • « Qu'est-ce que Bide & Musique a de Jacques Dutronc ? »
  • "Which songs mention a submarine in their words?"
  • "Read me that record: the label, the year, who wrote it."
  • "Play me something at random from the collection."
  • "What has been catalogued lately?"

El camino habitual va de una búsqueda a un disco: una fila lleva un song_id, y get_song lo lee.

Herramientas

HerramientaQué hace
search_songsBusca en la colección a lo largo de un eje a la vez.
get_songLee un disco completo, con la letra incluida.
get_artistLee un artista y los discos que la colección guarda de él.
get_random_songSaca un disco que nadie eligió.
list_new_songsLee lo que la colección acaba de catalogar.

search_songs

Busca a lo largo de un eje, que tiene que nombrarse: cada uno plantea una pregunta distinta, y una respuesta sobre uno no dice nada sobre los demás. Un nombre que no devuelve nada como intérprete puede seguir siendo un título.

ArgumentoTipoObligatorioQué hace
querycadena, hasta 200 caracteresQué buscar en ese eje.
search_typeperformer, title, writer, lyrics, label o yearEl eje por el que buscar.
pageentero, de 1 a 200, por defecto 1noQué página de filas.
limitentero, de 1 a 50, por defecto 20noFilas que servir.
search_typeEncuentra
performerel artista acreditado en el disco
titleel nombre de la canción
writerquién la escribió o compuso
lyricsla letra que se canta en ella
labelel sello con el que salió
yearel año impreso en ella

El eje year acepta un año de cuatro dígitos y nada más: el sitio descarta cualquier otra palabra ahí en lugar de filtrar por ella. Varias palabras clave se combinan con Y y cada una se compara dentro de las palabras, así que cada palabra extra estrecha la búsqueda, y una frase entre comillas no devuelve nada sea cual sea el formulario propio del sitio.

A cambio: filas que llevan song_id, que get_song toma; title; url; y el artist. total_matches es el número que imprime el sitio, que cuenta las canciones coincidentes en todas las páginas, así que supera las filas de una página. page_served es la página que el sitio sirvió realmente, ya que responde a una página más allá de la última con la última página y sin error: léela en lugar de asumir la página pedida. page_count y has_more_pages son null donde el sitio no imprimió ni uno ni otro.

get_song

Lee un disco completo.

ArgumentoTipoObligatorioQué hace
song_idcadena, hasta 20 caracteresEl id que lleva una fila de búsqueda.
include_lyricsbooleano, por defecto truenoLleva la letra transcrita cuando la página la tiene.

A cambio: title, artist, credited_performer, year, writers, duration con el texto exactamente como lo imprime el disco y su precision, labels con una entrada por sello, catalogue_reference, presentation, sleeve_credits, image_url, added_on como fecha ISO, las posiciones en la lista de la emisora, favourites y comments. El título, el artista y la duración siempre se indican; el resto falta en algunos discos y vuelve null en lugar de adivinarse, y un contador para el que la página no imprime nada se desconoce en lugar de ser cero. lyrics.available dice si la página lleva una transcripción, y lyrics.text contiene la letra con el transcriber que la anotó.

get_artist

Lee lo que la colección guarda sobre un artista, con los discos que tiene de él.

ArgumentoTipoObligatorioQué hace
artist_idcadena, hasta 20 caracteresEl id de artista que lleva un disco.
limitentero, de 1 a 200, por defecto 100noDiscos suyos que servir.

A cambio: name, aliases, surname, first_name, nationality, birth_date, presentation, see_also, links y photo_url, cada uno null o vacío donde la página no indica nada. discography lleva sus discos, cada uno con su song_id para get_song, su title, url, year y con qué frecuencia la emisora lo programó. discography_count cuenta los discos servidos y songs_on_page los discos que tenía la página, así que una discografía truncada es visible.

get_random_song

Saca un disco que nadie eligió, entre los ids que sirve el sitio. Sirve para navegar por la colección cuando no se pregunta por ninguna canción concreta.

ArgumentoTipoObligatorioQué hace
include_lyricsbooleano, por defecto truenoLleva la letra transcrita cuando la página la tiene.

A cambio: el disco que devuelve get_song.

list_new_songs

Lee lo que la colección acaba de catalogar.

ArgumentoTipoObligatorioQué hace
limitentero, de 1 a 50, por defecto 20noFilas que servir.

A cambio: filas que llevan song_id, title leídos de la línea que publica el feed, artist_name, listed_as, url y published_at. entries_in_feed es el número de entradas que tiene el feed, que es un número fijo y no dice nada sobre cuántos discos tiene la colección.

Configuración

Todas las variables son opcionales. Establécelas en el bloque env de la configuración de tu cliente.

VariablePor defectoQué hace
BIDE_USER_AGENTla identidad del proyectoNombra tu aplicación ante el sitio, con una dirección donde se pueda contactar a una persona.
BIDE_MIN_INTERVAL_MS3000Intervalo entre dos peticiones, de 2000 a 60000.
BIDE_TIMEOUT_MS20000Plazo para una petición, de 1000 a 120000.
BIDE_MAX_RETRIES3Intentos tras un fallo transitorio, de 0 a 10.
BIDE_CACHE_TTL_MS900000Cuánto tiempo permanece una página en memoria, de 0 a 86400000.
BIDE_CACHE_MAX_ENTRIES200Páginas guardadas en memoria a la vez, de 0 a 10000.
BIDE_LOG_LEVELerrorsilent, error, info o debug, escritos en stderr.

Un valor fuera de su rango vuelve al valor por defecto, y el motivo se escribe en stderr.

Errores

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

CódigoQué ocurrióQué hacer
not_foundEl sitio respondió y no tiene ese registro.Comprueba el id con search_songs.
invalid_inputLos argumentos fueron rechazados antes de enviar ninguna solicitud.Lee el mensaje, que nombra el argumento.
rate_limitedEl sitio pidió a este cliente que fuera más lento.Espera el número de segundos que indica la pista y vuelve a llamar con los mismos argumentos. El registro sigue ahí.
parse_failureLa página cargó y el contenido esperado estaba ausente.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 BIDE_TIMEOUT_MS, o pide menos filas.

Como biblioteca

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

import { BideEtMusiqueClient } from "mcp-bideetmusique/client";

const client = new BideEtMusiqueClient();
const { data, cached } = await client.getSong("1234");
console.log(data.title, data.labels, cached);

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

Ritmo y atribución

Las solicitudes salen de una en una con al menos tres segundos entre ellas, y el mínimo de dos segundos se mantiene sin importar cómo esté configurado el servidor. Bide & Musique es gestionado por una asociación voluntaria con sus propios medios, y este ritmo es lo que se le debe a la colección. El User-Agent siempre termina con la identidad del proyecto y una dirección donde se puede contactar a una persona.

Cada resultado lleva la dirección de la página del registro. El catálogo es obra de la asociación y de los oyentes que lo construyeron, transcripciones incluidas.

Este servidor MCP es un proyecto no oficial, sin afiliación con Bide & Musique.

Privacidad

Este servidor no recopila nada sobre ti y no envía nada a su autor. Se ejecuta en tu máquina, contacta a www.bide-et-musique.com y nada más, guarda 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 ello.

Desarrollo

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

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

Contribuciones

Errores, preguntas e ideas van en 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, consulta LICENSE. El catálogo pertenece a Bide & Musique y a los oyentes que lo construyeron.


mcp-bideetmusique (français)

Versión en inglés

Bide & Musique es una radio web francesa y la colección de discos que difunde, catalogada a mano por la asociación voluntaria que la mantiene. Su tema es la canción olvidada: el fracaso, el disco de fantasía, la sintonía de televisión, el sencillo de 45 rpm que nadie ha reeditado. La página de un disco lleva el intérprete, los autores y compositores, el año, el sello y su referencia de catálogo, la portada, la duración, las clasificaciones del hit-parade de la estación, y las letras cuando un oyente las ha transcrito.

Este servidor conecta un cliente de conversación con esa colección. Se puede buscar según un eje a la vez, por intérprete, título, autor, letras, sello o año; leer una ficha completa; leer lo que el sitio contiene sobre un artista con su discografía; sacar un disco al azar; y ver lo que acaba de ser catalogado. 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 bideetmusique -- npx -y mcp-bideetmusique

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

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

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

Con Docker

{
  "mcpServers": {
    "bideetmusique": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-bideetmusique: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.bide-et-musique.com, y nada más: sin volúmenes, sin puertos, sin identificadores.

Bundle, sin npm

Descarga mcp-bideetmusique-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, así que no se descarga nada en la instalación.

Lo que se puede pedir

  • «¿Qué tiene Bide & Musique de Jacques Dutronc?»
  • «¿Qué canciones hablan de un submarino en sus letras?»
  • «Léeme esta ficha: el sello, el año, quién la escribió.»
  • «Hazme escuchar algo al azar de la colección.»
  • «¿Qué se ha catalogado recientemente?»

El camino habitual va de una búsqueda a una ficha: una línea lleva un song_id, y get_song la lee.

Las herramientas

HerramientaQué hace
search_songsBusca en la colección según un eje a la vez.
get_songLee una ficha completa, letras incluidas.
get_artistLee un artista y los discos que la colección tiene de él.
get_random_songSaca un disco que nadie ha elegido.
list_new_songsLee lo que la colección acaba de catalogar.

search_songs

Busca según un eje, que hay que nombrar: cada uno plantea una pregunta diferente, y una respuesta sobre uno no dice nada de los demás. Un nombre que no devuelve nada como intérprete puede muy bien ser un título.

ArgumentoTipoRequeridoQué hace
querycadena, hasta 200 caracteresLo que se busca en este eje.
search_typeperformer, title, writer, lyrics, label o yearEl eje de búsqueda.
pageentero, 1 a 200, por defecto 1noQué página de líneas.
limitentero, 1 a 50, por defecto 20noLíneas a servir.
search_typeEncuentra
performerel artista acreditado en el disco
titleel nombre de la canción
writerquién la escribió o compuso
lyricslas palabras que se cantan en ella
labelel sello que la publicó
yearel año impreso en ella

El eje year toma un año de cuatro dígitos y nada más: el sitio descarta cualquier otra palabra en lugar de filtrar por ella. Varias palabras clave se combinan con Y y cada una se busca dentro de las palabras, así que cada palabra adicional estrecha la búsqueda, y una expresión entre comillas no devuelve nada, diga lo que diga el formulario del sitio.

En respuesta: líneas que llevan song_id, que get_song retoma; title; url; y el artist. total_matches es el número que el sitio imprime, contando las canciones correspondientes en todas las páginas, así que supera las líneas de una página. page_served es la página que el sitio realmente sirvió, ya que responde a una página más allá de la última con la última página y sin error: léela en lugar de suponer la página solicitada. page_count y has_more_pages valen null donde el sitio no imprimió ni uno ni otro.

get_song

Lee una ficha completa.

ArgumentoTipoRequeridoQué hace
song_idcadena, hasta 20 caracteresEl identificador que lleva una línea.
include_lyricsbooleano, por defecto truenoLlevar las letras transcritas cuando la página las tiene.

En respuesta: title, artist, credited_performer, year, writers, duration con el texto exactamente como la ficha lo imprime y su precision, labels con una entrada por sello, catalogue_reference, presentation, sleeve_credits, image_url, added_on en fecha ISO, las clasificaciones del hit-parade de la estación, favourites y comments. El título, el artista y la duración siempre se indican; el resto está ausente en algunas fichas y vuelve null en lugar de adivinarse, y un contador que la página no imprime es desconocido en lugar de nulo. lyrics.available dice si la página lleva una transcripción, y lyrics.text contiene las palabras con el transcriber que las anotó.

get_artist

Lee lo que la colección contiene sobre un artista, con los discos que tiene de él.

ArgumentoTipoRequeridoQué hace
artist_idcadena, hasta 20 caracteresEl identificador de artista que lleva una ficha.
limitentero, 1 a 200, por defecto 100noDiscos de él a servir.

En respuesta: name, aliases, surname, first_name, nationality, birth_date, presentation, see_also, links y photo_url, cada uno null o vacío donde la página no indica nada. discography lleva sus discos, cada uno con su song_id para get_song, su title, url, year y el número de veces que la estación lo ha programado. discography_count cuenta los discos servidos y songs_on_page los que la página contenía, así que una discografía truncada se ve.

get_random_song

Saca un disco que nadie ha elegido, entre los identificadores que el sitio sirve. Sirve para recorrer la colección cuando no hay ninguna canción concreta en cuestión.

ArgumentoTipoRequeridoQué hace
include_lyricsbooleano, por defecto truenoLlevar las letras transcritas cuando la página las tiene.
En retour : la fiche que rend get_song.

list_new_songs

Lit ce que la collection vient de cataloguer.

ArgumentTypeRequisCe qu'il fait
limitentier, 1 à 50, défaut 20nonLignes à servir.

En retour : des lignes portant song_id, title lu sur la ligne que le flux publie, artist_name, listed_as, url et published_at. entries_in_feed est le nombre d'entrées que le flux contient, qui est un nombre fixe et ne dit rien du nombre de disques que la collection contient.

Configuration

Chaque variable est facultative. Elles se posent dans le bloc env de la configuration du client.

VariableDéfautCe qu'elle fait
BIDE_USER_AGENTl'identité du projetNomme votre application auprès du site, avec une adresse où joindre une personne.
BIDE_MIN_INTERVAL_MS3000Écart entre deux requêtes, de 2000 à 60000.
BIDE_TIMEOUT_MS20000Délai d'une requête, de 1000 à 120000.
BIDE_MAX_RETRIES3Tentatives après un échec passager, de 0 à 10.
BIDE_CACHE_TTL_MS900000Durée pendant laquelle une page reste en mémoire, de 0 à 86400000.
BIDE_CACHE_MAX_ENTRIES200Pages gardées en mémoire à la fois, de 0 à 10000.
BIDE_LOG_LEVELerrorsilent, error, info ou debug, écrit sur la sortie d'erreur.

Une valeur hors de sa plage retombe sur le défaut, et la raison est écrite sur la sortie d'erreur.

Erreurs

Chaque échec porte un des six codes, un message, et quand cela aide une indication du geste suivant.

CodeCe qui s'est passéQue faire
not_foundLe site a répondu, et n'a pas cette fiche.Vérifiez l'identifiant avec search_songs.
invalid_inputLes arguments ont été refusés avant toute requête.Lisez le message, qui nomme l'argument.
rate_limitedLe site demande à ce client de ralentir.Attendez les secondes indiquées et rappelez avec les mêmes arguments. La fiche est toujours là.
parse_failureLa page a chargé et le contenu attendu est absent.Signalez-le sur le suivi d'incidents.
network_errorLa requête n'a pas abouti.Réessayez sous peu.
timeoutLa requête a dépassé son délai.Augmentez BIDE_TIMEOUT_MS, ou demandez moins de lignes.

Comme bibliothèque

La couche qui lit le site est publiée seule, avec son rythme, son cache et ses erreurs, sans protocole attaché.

import { BideEtMusiqueClient } from "mcp-bideetmusique/client";

const client = new BideEtMusiqueClient();
const { data, cached } = await client.getSong("1234");
console.log(data.title, data.labels, cached);

search, getSong, getArtist et getNewSongs répondent chacun { data, cached }, et lèvent une erreur portant un des six codes. Le plancher de deux secondes entre deux requêtes tient également ici.

Rythme et attribution

Les requêtes partent une à une avec au moins trois secondes entre elles, et le plancher de deux secondes tient quelle que soit la configuration. Bide & Musique est tenu par une association bénévole sur ses propres moyens, et ce rythme est ce qu'on doit à la collection. Le User-Agent se termine toujours par l'identité du projet et une adresse où joindre une personne.

Chaque résultat porte l'adresse de la page de la fiche. Le catalogue est l'œuvre de l'association et des auditeurs qui l'ont bâti, transcriptions comprises.

Ce MCP est un projet non officiel, sans affiliation à Bide & Musique.

Confidentialité

Ce serveur ne collecte rien sur vous et n'envoie rien à son auteur. Il tourne sur votre machine, ne joint que www.bide-et-musique.com, garde ses réponses en mémoire le temps qu'il tourne, et n'écrit rien sur le disque. PRIVACY.md dit ce qu'une requête emporte et quels réglages changent cela.

Développement

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

Les tests s'exécutent sur des fixtures engendrées et n'émettent aucune requête. La suite en direct, npm run test:live, émet une requête par route et tourne chaque nuit contre le site lui-même.

Contribuer

Les anomalies, les questions et les idées ont leur place dans le suivi d'incidents. Les propositions de modification sont bienvenues ; ouvrir un ticket d'abord aide à s'accorder sur la forme du changement. Voir CONTRIBUTING.md.

Licence

MIT, voir LICENSE. Le catalogue appartient à Bide & Musique et aux auditeurs qui l'ont bâti.