Bide & Musique
Busca en la colección de Bide & Musique de canciones francesas olvidadas. Discos, letras, sin clave de API.
Documentación
mcp-bideetmusique
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.
Instalación
Instalación en un clic
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
| Herramienta | Qué hace |
|---|---|
search_songs | Busca en la colección a lo largo de un eje a la vez. |
get_song | Lee un disco completo, con la letra incluida. |
get_artist | Lee un artista y los discos que la colección guarda de él. |
get_random_song | Saca un disco que nadie eligió. |
list_new_songs | Lee 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.
| Argumento | Tipo | Obligatorio | Qué hace |
|---|---|---|---|
query | cadena, hasta 200 caracteres | sí | Qué buscar en ese eje. |
search_type | performer, title, writer, lyrics, label o year | sí | El eje por el que buscar. |
page | entero, de 1 a 200, por defecto 1 | no | Qué página de filas. |
limit | entero, de 1 a 50, por defecto 20 | no | Filas que servir. |
search_type | Encuentra |
|---|---|
performer | el artista acreditado en el disco |
title | el nombre de la canción |
writer | quién la escribió o compuso |
lyrics | la letra que se canta en ella |
label | el sello con el que salió |
year | el 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.
| Argumento | Tipo | Obligatorio | Qué hace |
|---|---|---|---|
song_id | cadena, hasta 20 caracteres | sí | El id que lleva una fila de búsqueda. |
include_lyrics | booleano, por defecto true | no | Lleva 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.
| Argumento | Tipo | Obligatorio | Qué hace |
|---|---|---|---|
artist_id | cadena, hasta 20 caracteres | sí | El id de artista que lleva un disco. |
limit | entero, de 1 a 200, por defecto 100 | no | Discos 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.
| Argumento | Tipo | Obligatorio | Qué hace |
|---|---|---|---|
include_lyrics | booleano, por defecto true | no | Lleva 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.
| Argumento | Tipo | Obligatorio | Qué hace |
|---|---|---|---|
limit | entero, de 1 a 50, por defecto 20 | no | Filas 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.
| Variable | Por defecto | Qué hace |
|---|---|---|
BIDE_USER_AGENT | la identidad del proyecto | Nombra tu aplicación ante el sitio, con una dirección donde se pueda contactar a una persona. |
BIDE_MIN_INTERVAL_MS | 3000 | Intervalo entre dos peticiones, de 2000 a 60000. |
BIDE_TIMEOUT_MS | 20000 | Plazo para una petición, de 1000 a 120000. |
BIDE_MAX_RETRIES | 3 | Intentos tras un fallo transitorio, de 0 a 10. |
BIDE_CACHE_TTL_MS | 900000 | Cuánto tiempo permanece una página en memoria, de 0 a 86400000. |
BIDE_CACHE_MAX_ENTRIES | 200 | Páginas guardadas en memoria a la vez, de 0 a 10000. |
BIDE_LOG_LEVEL | error | silent, 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ódigo | Qué ocurrió | Qué hacer |
|---|---|---|
not_found | El sitio respondió y no tiene ese registro. | Comprueba el id con search_songs. |
invalid_input | Los argumentos fueron rechazados antes de enviar ninguna solicitud. | Lee el mensaje, que nombra el argumento. |
rate_limited | El 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_failure | La página cargó y el contenido esperado estaba ausente. | 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 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)
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
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
| Herramienta | Qué hace |
|---|---|
search_songs | Busca en la colección según un eje a la vez. |
get_song | Lee una ficha completa, letras incluidas. |
get_artist | Lee un artista y los discos que la colección tiene de él. |
get_random_song | Saca un disco que nadie ha elegido. |
list_new_songs | Lee 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.
| Argumento | Tipo | Requerido | Qué hace |
|---|---|---|---|
query | cadena, hasta 200 caracteres | sí | Lo que se busca en este eje. |
search_type | performer, title, writer, lyrics, label o year | sí | El eje de búsqueda. |
page | entero, 1 a 200, por defecto 1 | no | Qué página de líneas. |
limit | entero, 1 a 50, por defecto 20 | no | Líneas a servir. |
search_type | Encuentra |
|---|---|
performer | el artista acreditado en el disco |
title | el nombre de la canción |
writer | quién la escribió o compuso |
lyrics | las palabras que se cantan en ella |
label | el sello que la publicó |
year | el 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.
| Argumento | Tipo | Requerido | Qué hace |
|---|---|---|---|
song_id | cadena, hasta 20 caracteres | sí | El identificador que lleva una línea. |
include_lyrics | booleano, por defecto true | no | Llevar 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.
| Argumento | Tipo | Requerido | Qué hace |
|---|---|---|---|
artist_id | cadena, hasta 20 caracteres | sí | El identificador de artista que lleva una ficha. |
limit | entero, 1 a 200, por defecto 100 | no | Discos 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.
| Argumento | Tipo | Requerido | Qué hace |
|---|---|---|---|
include_lyrics | booleano, por defecto true | no | Llevar 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.
| Argument | Type | Requis | Ce qu'il fait |
|---|---|---|---|
limit | entier, 1 à 50, défaut 20 | non | Lignes à 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.
| Variable | Défaut | Ce qu'elle fait |
|---|---|---|
BIDE_USER_AGENT | l'identité du projet | Nomme votre application auprès du site, avec une adresse où joindre une personne. |
BIDE_MIN_INTERVAL_MS | 3000 | Écart entre deux requêtes, de 2000 à 60000. |
BIDE_TIMEOUT_MS | 20000 | Délai d'une requête, de 1000 à 120000. |
BIDE_MAX_RETRIES | 3 | Tentatives après un échec passager, de 0 à 10. |
BIDE_CACHE_TTL_MS | 900000 | Durée pendant laquelle une page reste en mémoire, de 0 à 86400000. |
BIDE_CACHE_MAX_ENTRIES | 200 | Pages gardées en mémoire à la fois, de 0 à 10000. |
BIDE_LOG_LEVEL | error | silent, 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.
| Code | Ce qui s'est passé | Que faire |
|---|---|---|
not_found | Le site a répondu, et n'a pas cette fiche. | Vérifiez l'identifiant avec search_songs. |
invalid_input | Les arguments ont été refusés avant toute requête. | Lisez le message, qui nomme l'argument. |
rate_limited | Le site demande à ce client de ralentir. | Attendez les secondes indiquées et rappelez avec les mêmes arguments. La fiche est toujours là. |
parse_failure | La page a chargé et le contenu attendu est absent. | Signalez-le sur le suivi d'incidents. |
network_error | La requête n'a pas abouti. | Réessayez sous peu. |
timeout | La 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.