Internet Radio (internet-radio-mcp)

Pesquise mais de 50.000 estações de rádio pela internet no diretório público Radio Browser por nome, gênero, país ou idioma; obtenha URLs de transmissão, estações mais populares e em alta, países e gêneros. Somente leitura, sem chave de API. Instalação: npx -y github:AlonDrilich/internet-radio-mcp

Documentação

internet-radio-mcp

Um servidor Model Context Protocol (MCP) de código aberto para rádio na internet. Ele permite que Claude, Cursor, VS Code Copilot e outros clientes MCP pesquisem estações de rádio no mundo todo e obtenham suas URLs de stream diretas. Ele também lista estações em alta e em tendência, países e gêneros.

Os dados das estações vêm do Radio Browser, um diretório de domínio público mantido pela comunidade com mais de 50.000 estações que possuem streams funcionais. O servidor é construído pela 72FM, um player de rádio web gratuito construído sobre o mesmo diretório. Cada resultado inclui um listen_url que reproduz a estação no navegador na 72FM, além do stream_url da própria estação.

As estações pertencem aos seus radiodifusores. Nem a 72FM nem este servidor as possuem, operam ou curadoria. Qualquer pessoa pode adicionar ou editar entradas no diretório, então um stream pode ocasionalmente ficar offline.

  • Sem chave de API, sem conta, somente leitura.
  • 5 ferramentas, 1 prompt, transporte stdio.
  • Dependências de execução: @modelcontextprotocol/server (o SDK oficial do MCP TypeScript, v2) e zod.

Perguntas de exemplo

  • "Encontre estações de jazz no Brasil"
  • "Quais são as estações mais populares no Japão?"
  • "Me dê a URL do stream da BBC World Service"
  • "O que está em alta na rádio na internet agora?"
  • "Quais países têm mais estações de rádio?"
  • "Quais gêneros posso pesquisar? Depois encontre algumas estações de lofi."

Instalação

Requer Node.js 20 ou mais recente. O servidor roda diretamente do GitHub com npx, então não há nada para instalar globalmente.

Claude Code

claude mcp add internet-radio -- npx -y github:AlonDrilich/internet-radio-mcp

Depois execute /mcp em uma sessão para confirmar que internet-radio está conectado.

Claude Desktop

Abra Configurações → Desenvolvedor → Editar Config. Isso abre claude_desktop_config.json: no macOS fica em ~/Library/Application Support/Claude/claude_desktop_config.json, e no Windows em %APPDATA%\Claude\claude_desktop_config.json. Adicione:

{
  "mcpServers": {
    "internet-radio": {
      "command": "npx",
      "args": ["-y", "github:AlonDrilich/internet-radio-mcp"]
    }
  }
}

Reinicie o Claude Desktop.

Cursor

Adicione o servidor a ~/.cursor/mcp.json para usá-lo em todos os lugares, ou a .cursor/mcp.json para usá-lo em um único projeto:

{
  "mcpServers": {
    "internet-radio": {
      "command": "npx",
      "args": ["-y", "github:AlonDrilich/internet-radio-mcp"]
    }
  }
}

VS Code (GitHub Copilot, modo Agente)

Adicione o servidor a .vscode/mcp.json, ou execute MCP: Adicionar Servidor na Paleta de Comandos:

{
  "servers": {
    "internet-radio": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "github:AlonDrilich/internet-radio-mcp"]
    }
  }
}

Outros clientes

Qualquer cliente MCP que possa iniciar um servidor stdio pode usar o mesmo comando: npx -y github:AlonDrilich/internet-radio-mcp.

O primeiro lançamento baixa o pacote do GitHub, o que leva alguns segundos. Lançamentos posteriores usam o cache do npx.

Ferramentas

Todas as ferramentas são somente leitura e anotadas com readOnlyHint: true e openWorldHint: true. Cada resultado contém:

  • um resumo de uma linha,
  • os mesmos dados como texto JSON,
  • structuredContent que corresponde ao outputSchema da ferramenta.

Streams quebrados (streams que falharam na última verificação automatizada do diretório) são excluídos das pesquisas.

FerramentaArgumentosRetorna
search_stationsname?, tag? (gênero), countrycode? (ISO 3166-1 alpha-2, ex.: BR), language? (ex.: portuguese), order = votes | clickcount | bitrate (padrão votes), limit 1–50 (padrão 10)Estações correspondentes
get_stationid (Radio Browser stationuuid)Uma estação
top_stationsby = votes | clicks | trending (padrão votes), countrycode?, tag?, limit 1–50 (padrão 10)Estações mais votadas, mais tocadas ou em tendência
list_countriesmin_stations? (padrão 1), limit?Nome do país, código ISO, contagem de estações e página do país na 72FM (https://72fm.com/radio/<iso2>)
list_genreslimit 1–100 (padrão 30)Principais tags de gênero por contagem de estações. Tags de espaço reservado e não-gênero são filtradas (ex.: undefined, radio, fm, e nomes de país, região ou idioma).

Campos da estação

{
  "id": "963fa65f-0601-11e8-ae97-52543be04c81",
  "name": "Antena 1 São Paulo, SP (ZYD823 94,7 MHz FM) [aac]",
  "country": "Brazil",
  "countrycode": "BR",
  "language": "portuguese",
  "tags": ["adult contemporary", "jazz", "pop", "smooth jazz"],
  "codec": "AAC+",
  "bitrate": 96,
  "homepage": "http://antena1.com.br/",
  "stream_url": "http://antena1.newradio.it/stream?ext=.mp3",
  "favicon": null,
  "votes": 33238,
  "lastcheckok": true,
  "listen_url": "https://72fm.com/station/963fa65f-0601-11e8-ae97-52543be04c81"
}
  • stream_url é a URL de stream resolvida do diretório, ou a URL original quando não existe uma resolvida.
  • listen_url reproduz a estação no navegador na 72FM.
  • tags contém até 8 tags.

Prompt

find_radio(request) encontra estações para um humor, lugar, atividade ou gênero, por exemplo "jazz calmo para uma noite chuvosa" ou "rádio de Lisboa".

Confiabilidade

O servidor consulta os espelhos do Radio Browser nesta ordem, com um tempo limite de 8 segundos para cada um:

  1. de1.api.radio-browser.info
  2. de2.api.radio-browser.info
  3. all.api.radio-browser.info

Se todos os três falharem, a ferramenta retorna um erro claro (isError: true) e o servidor continua rodando. As solicitações se identificam com User-Agent: internet-radio-mcp/1.0 (+https://72fm.com).

Você pode alterar esse comportamento com duas variáveis de ambiente opcionais:

  • RADIO_BROWSER_MIRRORS: URLs base separadas por vírgula para usar em vez dos padrões.
  • RADIO_BROWSER_TIMEOUT_MS: o tempo limite para cada espelho, em milissegundos (padrão 8000).

Desenvolvimento

git clone https://github.com/AlonDrilich/internet-radio-mcp
cd internet-radio-mcp
npm install
npm run typecheck   # tsc checkJs over the JSDoc-typed sources
npm run smoke       # spawns the server over stdio and calls every tool against the live API
npx @modelcontextprotocol/inspector node src/index.js   # interactive testing

O código-fonte é módulos ES simples com tipos JSDoc (src/), então não há etapa de build. É por isso que npx github:… funciona sem uma publicação no npm.

Relacionados

Dados e créditos

  • Os dados do diretório de estações vêm do Radio Browser e estão em domínio público. Agradecemos aos seus mantenedores e contribuidores. Se você usar este servidor com frequência, considere apoiar o Radio Browser.
  • Streams, nomes e logotipos pertencem aos seus respectivos radiodifusores.
  • 72FM é um player de rádio web gratuito construído sobre o diretório do Radio Browser.

Licença

MIT © Alon Drilich (72FM)