MCP server for Bide & Musique: search the hand-built catalogue of forgotten French songs by performer, title, writer or lyrics. No API key.
mcp-bideetmusique
以下摘录自该仓库的 README(片段) · 在 GitHub 读完整 README →
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**
**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.0.1.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
| Tool | What it does |
| ----------------- | --------------------------------------------------------------- |
| search_songs | Searches the collection along one axis at a time. |
| get_song | Reads one record in full, words included. |
| get_artist | Reads an artist and the records the collection holds of theirs. |
| get_random_song | Draws a record nobody chose. |
| list_new_songs | Reads what the collection has just catalogued. |
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.
| Argument | Type | Required | What it does |
| ------------- | ----------------------------------------------------------- | -------- | ------------------------------ |
| query | string, up to 200 characters | yes | What to look for on that axis. |
| search_type | performer, title, writer, lyrics, label or year | yes | The axis to search along. |
| page | integer, 1 to 200, default 1 | no | Which page of rows. |
| limit | integer, 1 to 50, default 20 | no | Rows to serve. |
| search_type | Finds |
| ------------- | --------------------------------- |
| performer | the artist credited on the record |
| title | the name of the song |
| writer | who wrote or composed it |
| lyrics | the words sung in it |
| label | the label it came out on |
| year | the year printed on it |
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.
| Argument | Type | Required | What it does |
| ---------------- | --------------------------- | -------- | --------------------------------------------------- |
| song_id | string, up to 20 characters | yes | The id a search row carries. |
| include_lyrics | boolean, default true | no | Carry the transcribed words when the page has them. |