[图片]
mcp-bideetmusique
[npm]
[CI]
[license]
[MCP Registry]
[Glama]
[M8ven]
[LobeHub]
[Install in Cursor]
[Install in VS Code]
Bide & Musique is a French web radio and the
collection of records it plays, catalogued by hand by the volunteer association
that runs it. Its subject is the forgotten song: the flop, the novelty record,
the television theme, the single nobody reissued. A record's page carries the
performer, the writers and composers, the year, the label and its catalogue
reference, the sleeve, the duration, the station's own chart placings, and the
words when a listener transcribed them.
This server connects a chat client to that collection. You can search it along
one axis at a time, by performer, title, writer, lyrics, label or year; read one
record in full; read what the site holds about an artist with their discography;
draw a record at random; and see what has just been catalogued. It needs no API
key and no account.
Version française
Install
One-click install
[Install in Cursor]
[Install in VS Code]
Claude Code
Claude Desktop, Cursor, and any client using the standard config format
Node 24 or later is required, and no environment variable has to be set.
With Docker
-i keeps stdin open, which is where the protocol travels, and -t is left out
because a TTY rewrites the stream. The container needs outbound HTTPS to
www.bide-et-musique.com, and nothing else: no volume, no port, no credential.
Bundle, without npm
Download mcp-bideetmusique-2.1.0.mcpb from
the latest release
and open it. A client that supports MCP bundles installs it on its own, with no
npm and no configuration file to edit. The bundle carries its dependencies, so
nothing is fetched at install time.
What you can ask
- « 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?"
The ordinary path runs from a search to a record: a row carries a song_id, and
get_song reads it.
Tools
search_songs
Searches along one axis, which has to be named: each asks a different question,
and an answer on one says nothing about the others. A name that returns nothing
as a performer may still be a title.
The year axis takes one four-digit year and nothing else: the site drops any
other word there instead of filtering on it. Several keywords are combined with
AND and each is matched inside words, so every extra word narrows the search, and
a quoted phrase returns nothing whatever the site's own form offers.
In return: rows carrying song_id, which get_song takes; title; url;
and the artist. total_matches is the number the site prints, counting
matching songs across every page, so it exceeds the rows of one page.
page_served is the page the site actually served, since it answers a page past
the last one with the last page and no error: read it rather than assuming the
page asked for. page_count and has_more_pages are null where the site
printed neither.
get_song
Reads one record in full.
In return: title, artist, credited_performer, year, writers,
duration with the text exactly as the record prints it and its precision,
labels with one entry per label, catalogue_reference, presentation,
sleeve_credits, image_url, added_on as an ISO date, the station's chart
placings, favourites and comments. The title, the artist and the duration are
always stated; the rest is absent on some records and comes back null rather
than guessed, and a counter the page prints nothing for is unknown rather than
zero. lyrics.available says whether the page carries a transcription, and
lyrics.text holds the words with the transcriber who wrote them down.
get_artist
Reads what the collection holds about one artist, with the records it has of
theirs.
In return: name, aliases, surname, first_name, nationality,
birth_date, presentation, see_also, links and photo_url, each null or
empty where the page states nothing. discography carries their records, each
with its song_id for get_song, its title, url, year and how often the
station programmed it. discography_count counts the records served and
songs_on_page the records the page held, so a truncated discography is visible.
get_random_song
Draws a record nobody chose, over the ids the site serves. It is for browsing the
collection when no particular song is being asked about.
In return: the record get_song returns.
list_new_songs
Reads what the collection has just catalogued.
In return: rows carrying song_id, title read off the line the feed
publishes, artist_name, listed_as, url and published_at.
entries_in_feed is the number of entries the feed holds, which is a fixed
number and says nothing about how many records the collection holds.
Configuration
Every variable is optional. Set them in the env block of your client config.
A value outside its range falls back to the default, and the reason is written to
stderr.
Errors
Every failure carries one of six codes, a message, and where it helps a hint
naming the next move.
As a library
The layer reading the site is published on its own, with its pacing, its cache
and its errors, and with no protocol attached.
search, getSong, getArtist and getNewSongs each answer { data, cached },
and throw an error carrying one of the six codes. The two-second floor between
two requests holds here as well.
Pacing and attribution
Requests go out one at a time with at least three seconds between them, and the
floor of two seconds holds however the server is configured. Bide & Musique is
run by a volunteer association on its own means, and this pacing is what the
collection is owed. The User-Agent always ends with the project identity and an
address where a person can be reached.
Every result carries the address of the record's page. The catalogue is the work
of the association and of the listeners who built it, transcriptions included.
This MCP server is an unofficial project, with no affiliation to Bide & Musique.
Privacy
This server collects nothing about you and sends nothing to its author. It runs
on your machine, contacts www.bide-et-musique.com and nothing else, holds its answers in memory
while it runs, and writes nothing to disk.
PRIVACY.md states what a request carries and which settings change
any of it.
Development
Tests run against generated fixtures and make no network request. The live suite,
npm run test:live, makes one request per route and runs nightly against the
site itself.
Contributing
Bugs, questions and ideas belong in
the issue tracker. Pull
requests are welcome; opening an issue first helps agree on the shape of the
change. See CONTRIBUTING.md.
License
MIT, see LICENSE. The catalogue belongs to Bide & Musique and to the
listeners who built it.
mcp-bideetmusique (français)
English version
Bide & Musique est une radio web française et
la collection de disques qu'elle diffuse, cataloguée à la main par l'association
bénévole qui la tient. Son sujet est la chanson oubliée : le bide, le disque de
fantaisie, le générique de télévision, le 45 tours que personne n'a réédité. La
page d'un disque porte l'interprète, les auteurs et compositeurs, l'année, le
label et sa référence de catalogue, la pochette, la durée, les classements du
hit-parade de la station, et les paroles quand un auditeur les a transcrites.
Ce serveur relie un client de conversation à cette collection. On peut y chercher
selon un axe à la fois, par interprète, titre, auteur, paroles, label ou année ;
lire une fiche en entier ; lire ce que le site contient sur un artiste avec sa
discographie ; tirer un disque au hasard ; et voir ce qui vient d'être catalogué.
Aucune clé d'API, aucun compte.
Installation
Installation en un clic
[Install in Cursor]
[Install in VS Code]
Claude Code
Claude Desktop, Cursor, et tout client au format de configuration standard
Node 24 ou plus récent est nécessaire, et aucune variable d'environnement n'est à
renseigner.
Avec Docker
-i garde l'entrée standard ouverte, qui est le canal du protocole, et -t est
omis parce qu'un TTY réécrit le flux. Le conteneur a besoin d'un accès HTTPS
sortant vers www.bide-et-musique.com, et de rien d'autre : aucun volume, aucun
port, aucun identifiant.
Bundle, sans npm
Téléchargez mcp-bideetmusique-2.1.0.mcpb depuis
la dernière publication
et ouvrez-le. Un client qui gère les bundles MCP l'installe seul, sans npm et
sans fichier de configuration à modifier. Le bundle emporte ses dépendances, donc
rien n'est téléchargé à l'installation.
Ce qu'on peut demander
- « Qu'est-ce que Bide & Musique a de Jacques Dutronc ? »
- « Quelles chansons parlent d'un sous-marin dans leurs paroles ? »
- « Lis-moi cette fiche : le label, l'année, qui l'a écrite. »
- « Fais-moi écouter quelque chose au hasard dans la collection. »
- « Qu'est-ce qui a été catalogué récemment ? »
Le chemin ordinaire va d'une recherche à une fiche : une ligne porte un
song_id, et get_song la lit.
Les outils
search_songs
Cherche selon un axe, qu'il faut nommer : chacun pose une question différente, et
une réponse sur l'un ne dit rien des autres. Un nom qui ne rend rien comme
interprète peut très bien être un titre.
L'axe year prend une année à quatre chiffres et rien d'autre : le site laisse
tomber tout autre mot au lieu de filtrer dessus. Plusieurs mots-clés sont
combinés par ET et chacun est cherché à l'intérieur des mots, donc chaque mot
supplémentaire resserre la recherche, et une expression entre guillemets ne rend
rien, quoi qu'en propose le formulaire du site.
En retour : des lignes portant song_id, que get_song reprend ; title ;
url ; et l'artist. total_matches est le nombre que le site imprime,
comptant les chansons correspondantes sur toutes les pages, donc il dépasse les
lignes d'une page. page_served est la page que le site a réellement servie,
puisqu'il répond à une page au-delà de la dernière par la dernière page et sans
erreur : lisez-la plutôt que de supposer la page demandée. page_count et
has_more_pages valent null là où le site n'a imprimé ni l'un ni l'autre.
get_song
Lit une fiche en entier.
En retour : title, artist, credited_performer, year, writers,
duration avec le texte exactement comme la fiche l'imprime et sa precision,
labels avec une entrée par label, catalogue_reference, presentation,
sleeve_credits, image_url, added_on en date ISO, les classements du
hit-parade de la station, favourites et comments. Le titre, l'artiste et la
durée sont toujours indiqués ; le reste est absent sur certaines fiches et revient
null plutôt que deviné, et un compteur que la page n'imprime pas est inconnu
plutôt que nul. lyrics.available dit si la page porte une transcription, et
lyrics.text contient les mots avec le transcriber qui les a notés.
get_artist
Lit ce que la collection contient sur un artiste, avec les disques qu'elle a de
lui.
En retour : name, aliases, surname, first_name, nationality,
birth_date, presentation, see_also, links et photo_url, chacun null
ou vide là où la page n'indique rien. discography porte ses disques, chacun
avec son song_id pour get_song, son title, url, year et le nombre de
fois où la station l'a programmé. discography_count compte les disques servis
et songs_on_page ceux que la page contenait, si bien qu'une discographie
tronquée se voit.
get_random_song
Tire un disque que personne n'a choisi, parmi les identifiants que le site sert.
Il sert à parcourir la collection quand aucune chanson précise n'est en
question.
En retour : la fiche que rend get_song.
list_new_songs
Lit ce que la collection vient de cataloguer.
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.
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.
Comme bibliothèque
La couche qui lit le site est publiée seule, avec son rythme, son cache et ses
erreurs, sans protocole attaché.
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
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.