Bide & Musique
Pesquise a coleção Bide & Musique de canções francesas esquecidas. Discos, letras, sem chave de API.
Documentação
mcp-bideetmusique
Bide & Musique é uma web rádio francesa e a coleção de discos que ela toca, catalogada à mão pela associação voluntária que a administra. Seu tema é a canção esquecida: o fracasso, o disco de novidade, o tema de televisão, o single que ninguém relançou. A página de um disco traz o intérprete, os autores e compositores, o ano, o selo e sua referência de catálogo, a capa, a duração, as colocações nas paradas da própria estação e as letras quando um ouvinte as transcreveu.
Este servidor conecta um cliente de chat a essa coleção. Você pode pesquisá-la ao longo de um eixo por vez, por intérprete, título, autor, letra, selo ou ano; ler um disco por completo; ler o que o site guarda sobre um artista com sua discografia; sortear um disco aleatoriamente; e ver o que acabou de ser catalogado. Ele não exige chave de API nem conta.
Instalação
Instalação em um clique
Claude Code
claude mcp add bideetmusique -- npx -y mcp-bideetmusique
Claude Desktop, Cursor e qualquer cliente que use o formato de configuração padrão
{
"mcpServers": {
"bideetmusique": {
"command": "npx",
"args": ["-y", "mcp-bideetmusique"]
}
}
}
Node 24 ou posterior é necessário, e nenhuma variável de ambiente precisa ser definida.
Com Docker
{
"mcpServers": {
"bideetmusique": {
"command": "docker",
"args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-bideetmusique:2.0.1"]
}
}
}
-i mantém o stdin aberto, que é por onde o protocolo trafega, e -t fica de fora
porque um TTY reescreve o fluxo. O contêiner precisa de HTTPS de saída para
www.bide-et-musique.com, e nada mais: sem volume, sem porta, sem credencial.
Pacote, sem npm
Baixe mcp-bideetmusique-2.0.1.mcpb de
o lançamento mais recente
e abra-o. Um cliente que suporte pacotes MCP o instala por conta própria, sem
npm e sem arquivo de configuração para editar. O pacote carrega suas dependências,
então nada é baixado no momento da instalação.
O que você pode perguntar
- « 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?"
O caminho comum vai de uma pesquisa a um disco: uma linha carrega um song_id, e
get_song o lê.
Ferramentas
| Ferramenta | O que ela faz |
|---|---|
search_songs | Pesquisa a coleção ao longo de um eixo por vez. |
get_song | Lê um disco por completo, incluindo as letras. |
get_artist | Lê um artista e os discos que a coleção guarda dele. |
get_random_song | Sorteia um disco que ninguém escolheu. |
list_new_songs | Lê o que a coleção acabou de catalogar. |
search_songs
Pesquisa ao longo de um eixo, que precisa ser nomeado: cada um faz uma pergunta diferente, e uma resposta em um não diz nada sobre os outros. Um nome que não retorna nada como intérprete pode ainda ser um título.
| Argumento | Tipo | Obrigatório | O que faz |
|---|---|---|---|
query | string, até 200 caracteres | sim | O que procurar nesse eixo. |
search_type | performer, title, writer, lyrics, label ou year | sim | O eixo ao longo do qual pesquisar. |
page | inteiro, 1 a 200, padrão 1 | não | Qual página de linhas. |
limit | inteiro, 1 a 50, padrão 20 | não | Linhas a servir. |
search_type | Encontra |
|---|---|
performer | o artista creditado no disco |
title | o nome da canção |
writer | quem a escreveu ou compôs |
lyrics | as palavras cantadas nela |
label | o selo em que ela saiu |
year | o ano impresso nela |
O eixo year aceita um ano de quatro dígitos e nada mais: o site descarta
qualquer outra palavra ali em vez de filtrar por ela. Várias palavras-chave são combinadas
com AND e cada uma é correspondida dentro das palavras, então cada palavra extra
estreita a pesquisa, e uma frase entre aspas não retorna nada, independentemente do
que o formulário do próprio site oferece.
Em retorno: linhas carregando song_id, que get_song recebe; title; url;
e o artist. total_matches é o número que o site imprime, contando
canções correspondentes em todas as páginas, então ele excede as linhas de uma página.
page_served é a página que o site realmente serviu, já que ele responde a uma página além
da última com a última página e sem erro: leia-a em vez de assumir a página
pedida. page_count e has_more_pages são null onde o site
não imprimiu nenhum dos dois.
get_song
Lê um disco por completo.
| Argumento | Tipo | Obrigatório | O que faz |
|---|---|---|---|
song_id | string, até 20 caracteres | sim | O id que uma linha de pesquisa carrega. |
include_lyrics | booleano, padrão true | não | Carrega as letras transcritas quando a página as tem. |
Em retorno: title, artist, credited_performer, year, writers,
duration com o texto exatamente como o disco o imprime e seu precision,
labels com uma entrada por selo, catalogue_reference, presentation,
sleeve_credits, image_url, added_on como data ISO, as colocações
nas paradas da estação, favourites e comments. O título, o artista e a duração são
sempre informados; o resto está ausente em alguns discos e volta null em vez
de ser adivinhado, e um contador para o qual a página não imprime nada é desconhecido em vez de
zero. lyrics.available diz se a página carrega uma transcrição, e
lyrics.text guarda as palavras com o transcriber que as escreveu.
get_artist
Lê o que a coleção guarda sobre um artista, com os discos que ela tem dele.
| Argumento | Tipo | Obrigatório | O que faz |
|---|---|---|---|
artist_id | string, até 20 caracteres | sim | O id do artista que um disco carrega. |
limit | inteiro, 1 a 200, padrão 100 | não | Discos dele a servir. |
Em retorno: name, aliases, surname, first_name, nationality,
birth_date, presentation, see_also, links e photo_url, cada um null ou
vazio onde a página não afirma nada. discography carrega os discos dele, cada um
com seu song_id para get_song, seu title, url, year e com que frequência a
estação o programou. discography_count conta os discos servidos e
songs_on_page os discos que a página guardava, então uma discografia truncada fica visível.
get_random_song
Sorteia um disco que ninguém escolheu, entre os ids que o site serve. É para navegar pela coleção quando nenhuma canção específica está sendo perguntada.
| Argumento | Tipo | Obrigatório | O que faz |
|---|---|---|---|
include_lyrics | booleano, padrão true | não | Carrega as letras transcritas quando a página as tem. |
Em retorno: o disco que get_song retorna.
list_new_songs
Lê o que a coleção acabou de catalogar.
| Argumento | Tipo | Obrigatório | O que faz |
|---|---|---|---|
limit | inteiro, 1 a 50, padrão 20 | não | Linhas a servir. |
Em retorno: linhas carregando song_id, title lidas da linha que o feed
publica, artist_name, listed_as, url e published_at.
entries_in_feed é o número de entradas que o feed guarda, que é um número
fixo e não diz nada sobre quantos discos a coleção guarda.
Configuração
Toda variável é opcional. Defina-as no bloco env da configuração do seu cliente.
| Variável | Padrão | O que ela faz |
|---|---|---|
BIDE_USER_AGENT | a identidade do projeto | Nomeia seu aplicativo para o site, com um endereço onde uma pessoa pode ser alcançada. |
BIDE_MIN_INTERVAL_MS | 3000 | Intervalo entre duas solicitações, de 2000 a 60000. |
BIDE_TIMEOUT_MS | 20000 | Prazo para uma solicitação, de 1000 a 120000. |
BIDE_MAX_RETRIES | 3 | Tentativas após uma falha transitória, de 0 a 10. |
BIDE_CACHE_TTL_MS | 900000 | Por quanto tempo uma página fica na memória, de 0 a 86400000. |
BIDE_CACHE_MAX_ENTRIES | 200 | Páginas guardadas na memória de uma vez, de 0 a 10000. |
BIDE_LOG_LEVEL | error | silent, error, info ou debug, escrito no stderr. |
Um valor fora do intervalo volta ao padrão, e o motivo é escrito no stderr.
Erros
Toda falha carrega um de seis códigos, uma mensagem e, onde ajuda, uma dica nomeando o próximo passo.
| Código | O que aconteceu | O que fazer |
|---|---|---|
not_found | O site respondeu e não possui tal registro. | Verifique o id com search_songs. |
invalid_input | Os argumentos foram recusados antes de qualquer solicitação ser enviada. | Leia a mensagem, que nomeia o argumento. |
rate_limited | O site pediu que este cliente diminuísse o ritmo. | Aguarde o número de segundos que a dica indica e chame novamente com os mesmos argumentos. O registro ainda está lá. |
parse_failure | A página carregou e o conteúdo esperado estava ausente. | Reporte em o rastreador de problemas. |
network_error | A solicitação não foi concluída. | Tente novamente em breve. |
timeout | A solicitação passou do prazo. | Aumente BIDE_TIMEOUT_MS, ou peça menos linhas. |
Como biblioteca
A camada que lê o site é publicada por conta própria, com seu ritmo, seu cache e seus erros, e sem protocolo anexado.
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 e getNewSongs respondem cada um a { data, cached },
e lançam um erro carregando um dos seis códigos. O intervalo mínimo de dois segundos entre
duas solicitações também se aplica aqui.
Ritmo e atribuição
As solicitações saem uma de cada vez com pelo menos três segundos entre elas, e o
intervalo mínimo de dois segundos se mantém independentemente de como o servidor está configurado. Bide & Musique é
mantido por uma associação voluntária com recursos próprios, e esse ritmo é o que a
coleção merece. O User-Agent sempre termina com a identidade do projeto e um
endereço onde uma pessoa pode ser contatada.
Cada resultado carrega o endereço da página do registro. O catálogo é o trabalho da associação e dos ouvintes que o construíram, transcrições incluídas.
Este servidor MCP é um projeto não oficial, sem afiliação com Bide & Musique.
Privacidade
Este servidor não coleta nada sobre você e não envia nada ao seu autor. Ele roda
na sua máquina, contata www.bide-et-musique.com e nada mais, mantém as respostas na memória
enquanto roda e não grava nada em disco.
PRIVACY.md declara o que uma solicitação carrega e quais configurações alteram
qualquer parte disso.
Desenvolvimento
npm install
npm run build:fixtures
npm test
npm run check
Os testes rodam contra fixtures gerados e não fazem nenhuma solicitação de rede. A suíte ao vivo,
npm run test:live, faz uma solicitação por rota e roda todas as noites contra o
próprio site.
Contribuindo
Bugs, perguntas e ideias pertencem ao rastreador de problemas. Pull requests são bem-vindos; abrir uma issue primeiro ajuda a concordar sobre a forma da mudança. Veja CONTRIBUTING.md.
Licença
MIT, veja LICENSE. O catálogo pertence a Bide & Musique e aos ouvintes que o construíram.
mcp-bideetmusique (français)
Bide & Musique é uma rádio web francesa e a coleção de discos que ela transmite, catalogada à mão pela associação voluntária que a mantém. Seu assunto é a canção esquecida: o fracasso, o disco de fantasia, o tema de televisão, o compacto que ninguém relançou. A página de um disco traz o intérprete, os autores e compositores, o ano, o selo e sua referência de catálogo, a capa, a duração, as classificações do hit-parade da estação, e as letras quando um ouvinte as transcreveu.
Este servidor conecta um cliente de conversa a essa coleção. Pode-se pesquisar segundo um eixo por vez, por intérprete, título, autor, letras, selo ou ano; ler uma ficha inteira; ler o que o site contém sobre um artista com sua discografia; sortear um disco; e ver o que acabou de ser catalogado. Nenhuma chave de API, nenhuma conta.
Instalação
Instalação em um clique
Claude Code
claude mcp add bideetmusique -- npx -y mcp-bideetmusique
Claude Desktop, Cursor e qualquer cliente no formato de configuração padrão
{
"mcpServers": {
"bideetmusique": {
"command": "npx",
"args": ["-y", "mcp-bideetmusique"]
}
}
}
Node 24 ou mais recente é necessário, e nenhuma variável de ambiente precisa ser preenchida.
Com Docker
{
"mcpServers": {
"bideetmusique": {
"command": "docker",
"args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-bideetmusique:2.0.1"]
}
}
}
-i mantém a entrada padrão aberta, que é o canal do protocolo, e -t é
omitido porque um TTY reescreve o fluxo. O contêiner precisa de acesso HTTPS
de saída para www.bide-et-musique.com, e nada mais: nenhum volume, nenhuma
porta, nenhuma credencial.
Bundle, sem npm
Baixe mcp-bideetmusique-2.0.1.mcpb de
a última publicação
e abra-o. Um cliente que gerencia bundles MCP o instala sozinho, sem npm e
sem arquivo de configuração para modificar. O bundle carrega suas dependências, portanto
nada é baixado na instalação.
O que se pode pedir
- « O que Bide & Musique tem de Jacques Dutronc? »
- « Quais canções falam de um submarino em suas letras? »
- « Leia-me esta ficha: o selo, o ano, quem a escreveu. »
- « Faça-me ouvir algo aleatório na coleção. »
- « O que foi catalogado recentemente? »
O caminho comum vai de uma pesquisa a uma ficha: uma linha carrega um
song_id, e get_song a lê.
As ferramentas
| Ferramenta | O que faz |
|---|---|
search_songs | Pesquisa na coleção segundo um eixo por vez. |
get_song | Lê uma ficha inteira, letras incluídas. |
get_artist | Lê um artista e os discos que a coleção tem dele. |
get_random_song | Sorteia um disco que ninguém escolheu. |
list_new_songs | Lê o que a coleção acabou de catalogar. |
search_songs
Pesquisa segundo um eixo, que é preciso nomear: cada um faz uma pergunta diferente, e uma resposta sobre um não diz nada sobre os outros. Um nome que não retorna nada como intérprete pode muito bem ser um título.
| Argumento | Tipo | Obrigatório | O que faz |
|---|---|---|---|
query | string, até 200 caracteres | sim | O que se procura neste eixo. |
search_type | performer, title, writer, lyrics, label ou year | sim | O eixo de pesquisa. |
page | inteiro, 1 a 200, padrão 1 | não | Qual página de linhas. |
limit | inteiro, 1 a 50, padrão 20 | não | Linhas a servir. |
search_type | Encontra |
|---|---|
performer | o artista creditado no disco |
title | o nome da canção |
writer | quem a escreveu ou compôs |
lyrics | as palavras que são cantadas nela |
label | o selo que a publicou |
year | o ano impresso nela |
O eixo year aceita um ano com quatro dígitos e nada mais: o site descarta
qualquer outra palavra em vez de filtrar por ela. Várias palavras-chave são
combinadas por E e cada uma é pesquisada dentro das palavras, portanto cada palavra
adicional restringe a pesquisa, e uma expressão entre aspas não retorna
nada, independentemente do que o formulário do site proponha.
Em retorno: linhas carregando song_id, que get_song retoma; title;
url; e o artist. total_matches é o número que o site imprime,
contando as canções correspondentes em todas as páginas, portanto ultrapassa as
linhas de uma página. page_served é a página que o site realmente serviu,
já que ele responde a uma página além da última com a última página e sem
erro: leia-a em vez de supor a página solicitada. page_count e
has_more_pages valem null onde o site não imprimiu nem um nem outro.
get_song
Lê uma ficha inteira.
| Argumento | Tipo | Obrigatório | O que faz |
|---|---|---|---|
song_id | string, até 20 caracteres | sim | O identificador que uma linha carrega. |
include_lyrics | booleano, padrão true | não | Trazer as letras transcritas quando a página as tem. |
Em retorno: title, artist, credited_performer, year, writers,
duration com o texto exatamente como a ficha o imprime e sua precision,
labels com uma entrada por selo, catalogue_reference, presentation,
sleeve_credits, image_url, added_on em data ISO, as classificações do
hit-parade da estação, favourites e comments. O título, o artista e a
duração são sempre indicados; o resto está ausente em algumas fichas e retorna
null em vez de ser adivinhado, e um contador que a página não imprime é desconhecido
em vez de nulo. lyrics.available diz se a página carrega uma transcrição, e
lyrics.text contém as palavras com o transcriber que as anotou.
get_artist
Lê o que a coleção contém sobre um artista, com os discos que ela tem dele.
| Argumento | Tipo | Obrigatório | O que faz |
|---|---|---|---|
artist_id | string, até 20 caracteres | sim | O identificador de artista que uma ficha carrega. |
limit | inteiro, 1 a 200, padrão 100 | não | Discos dele a servir. |
Em retorno: name, aliases, surname, first_name, nationality,
birth_date, presentation, see_also, links e photo_url, cada um null
ou vazio onde a página não indica nada. discography carrega seus discos, cada um
com seu song_id para get_song, seu title, url, year e o número de
vezes que a estação o programou. discography_count conta os discos servidos
e songs_on_page aqueles que a página continha, de modo que uma discografia
truncada fica visível.
get_random_song
Sorteia um disco que ninguém escolheu, entre os identificadores que o site serve. Serve para percorrer a coleção quando nenhuma canção específica está em questão.
| Argumento | Tipo | Obrigatório | O que faz |
|---|---|---|---|
include_lyrics | booleano, padrão true | não | Trazer as letras transcritas quando a página as tem. |
Em retorno: a ficha que retorna get_song. |
list_new_songs
Lê o que a coleção acabou de catalogar.
| Argumento | Tipo | Obrigatório | O que faz |
|---|---|---|---|
limit | inteiro, 1 a 50, padrão 20 | não | Linhas a servir. |
Em retorno: linhas com song_id, title lido na linha que o fluxo
publica, artist_name, listed_as, url e published_at. entries_in_feed
é o número de entradas que o fluxo contém, que é um número fixo e não diz
nada sobre a quantidade de discos que a coleção contém.
Configuração
Cada variável é opcional. Elas são definidas no bloco env da
configuração do cliente.
| Variável | Padrão | O que faz |
|---|---|---|
BIDE_USER_AGENT | a identidade do projeto | Nomeia seu aplicativo junto ao site, com um endereço para contato. |
BIDE_MIN_INTERVAL_MS | 3000 | Intervalo entre duas requisições, de 2000 a 60000. |
BIDE_TIMEOUT_MS | 20000 | Tempo limite de uma requisição, de 1000 a 120000. |
BIDE_MAX_RETRIES | 3 | Tentativas após uma falha temporária, de 0 a 10. |
BIDE_CACHE_TTL_MS | 900000 | Duração durante a qual uma página permanece em memória, de 0 a 86400000. |
BIDE_CACHE_MAX_ENTRIES | 200 | Páginas mantidas em memória por vez, de 0 a 10000. |
BIDE_LOG_LEVEL | error | silent, error, info ou debug, escrito na saída de erro. |
Um valor fora do intervalo volta ao padrão, e o motivo é escrito na saída de erro.
Erros
Cada falha carrega um dos seis códigos, uma mensagem e, quando ajuda, uma indicação do próximo passo.
| Código | O que aconteceu | O que fazer |
|---|---|---|
not_found | O site respondeu e não tem essa ficha. | Verifique o identificador com search_songs. |
invalid_input | Os argumentos foram recusados antes de qualquer requisição. | Leia a mensagem, que nomeia o argumento. |
rate_limited | O site pede que este cliente desacelere. | Aguarde os segundos indicados e chame novamente com os mesmos argumentos. A ficha ainda está lá. |
parse_failure | A página carregou e o conteúdo esperado está ausente. | Reporte em o rastreador de incidentes. |
network_error | A requisição não foi concluída. | Tente novamente em breve. |
timeout | A requisição excedeu seu tempo limite. | Aumente BIDE_TIMEOUT_MS, ou peça menos linhas. |
Como biblioteca
A camada que lê o site é publicada sozinha, com seu ritmo, seu cache e seus erros, sem protocolo anexado.
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 e getNewSongs respondem cada um
{ data, cached }, e levantam um erro com um dos seis códigos. O piso de
dois segundos entre duas requisições também vale aqui.
Ritmo e atribuição
As requisições saem uma a uma com pelo menos três segundos entre elas, e o
piso de dois segundos vale independentemente da configuração. Bide & Musique
é mantido por uma associação voluntária com recursos próprios, e esse ritmo é o que
devemos à coleção. O User-Agent sempre termina com a identidade do
projeto e um endereço para contato.
Cada resultado traz o endereço da página da ficha. O catálogo é a obra da associação e dos ouvintes que o construíram, transcrições incluídas.
Este MCP é um projeto não oficial, sem afiliação à Bide & Musique.
Privacidade
Este servidor não coleta nada sobre você e não envia nada ao autor. Ele roda na
sua máquina, junta apenas www.bide-et-musique.com, guarda suas respostas em memória enquanto
roda e não escreve nada no disco. PRIVACY.md diz o que uma
requisição leva e quais ajustes mudam isso.
Desenvolvimento
npm install
npm run build:fixtures
npm test
npm run check
Os testes rodam em fixtures geradas e não emitem nenhuma requisição.
A suíte ao vivo, npm run test:live, emite uma requisição por rota e roda
todas as noites contra o próprio site.
Contribuindo
Anomalias, perguntas e ideias têm seu lugar em o rastreador de incidentes. As propostas de modificação são bem-vindas; abrir um ticket primeiro ajuda a alinhar a forma da mudança. Veja CONTRIBUTING.md.
Licença
MIT, veja LICENSE. O catálogo pertence à Bide & Musique e aos ouvintes que o construíram.