Internet Radio (internet-radio-mcp)

Busca más de 50,000 emisoras de radio por internet del directorio público Radio Browser por nombre, género, país o idioma; obtén URLs de transmisión, estaciones principales y en tendencia, países y géneros. Solo lectura, sin clave API. Instalación: npx -y github:AlonDrilich/internet-radio-mcp

Documentación

internet-radio-mcp

Un servidor Model Context Protocol (MCP) de código abierto para radio por internet. Permite que Claude, Cursor, VS Code Copilot y otros clientes MCP busquen emisoras de radio en todo el mundo y obtengan sus URL de transmisión directas. También lista emisoras populares y en tendencia, países y géneros.

Los datos de las emisoras provienen de Radio Browser, un directorio de dominio público mantenido por la comunidad con más de 50,000 emisoras que tienen transmisiones funcionales. El servidor está creado por 72FM, un reproductor de radio web gratuito construido sobre el mismo directorio. Cada resultado incluye un listen_url que reproduce la emisora en el navegador en 72FM, así como el stream_url propio de la emisora.

Las emisoras pertenecen a sus radiodifusores. Ni 72FM ni este servidor las poseen, operan o seleccionan. Cualquier persona puede añadir o editar entradas en el directorio, por lo que una transmisión puede estar ocasionalmente fuera de línea.

  • Sin clave de API, sin cuenta, solo lectura.
  • 5 herramientas, 1 prompt, transporte stdio.
  • Dependencias de ejecución: @modelcontextprotocol/server (el SDK oficial de MCP para TypeScript, v2) y zod.

Preguntas de ejemplo

  • "Encuentra emisoras de jazz en Brasil"
  • "¿Cuáles son las emisoras más populares en Japón?"
  • "Dame la URL de transmisión de BBC World Service"
  • "¿Qué está en tendencia en la radio por internet ahora mismo?"
  • "¿Qué países tienen más emisoras de radio?"
  • "¿Qué géneros puedo buscar? Luego encuéntrame algunas emisoras de lofi."

Instalación

Requiere Node.js 20 o más reciente. El servidor se ejecuta directamente desde GitHub con npx, por lo que no hay nada que instalar globalmente.

Claude Code

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

Luego ejecuta /mcp en una sesión para confirmar que internet-radio está conectado.

Claude Desktop

Abre Configuración → Desarrollador → Editar configuración. Esto abre claude_desktop_config.json: en macOS está en ~/Library/Application Support/Claude/claude_desktop_config.json, y en Windows en %APPDATA%\Claude\claude_desktop_config.json. Añade:

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

Reinicia Claude Desktop.

Cursor

Añade el servidor a ~/.cursor/mcp.json para usarlo en todas partes, o a .cursor/mcp.json para usarlo en un solo proyecto:

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

VS Code (GitHub Copilot, modo Agente)

Añade el servidor a .vscode/mcp.json, o ejecuta MCP: Añadir servidor desde la Paleta de comandos:

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

Otros clientes

Cualquier cliente MCP que pueda lanzar un servidor stdio puede usar el mismo comando: npx -y github:AlonDrilich/internet-radio-mcp.

El primer lanzamiento descarga el paquete desde GitHub, lo que tarda unos segundos. Los lanzamientos posteriores usan la caché de npx.

Herramientas

Todas las herramientas son de solo lectura y están anotadas con readOnlyHint: true y openWorldHint: true. Cada resultado contiene:

  • un resumen de una línea,
  • los mismos datos como texto JSON,
  • structuredContent que coincide con el outputSchema de la herramienta.

Las transmisiones rotas (transmisiones que fallaron la última verificación automática del directorio) se excluyen de las búsquedas.

HerramientaArgumentosDevuelve
search_stationsname?, tag? (género), countrycode? (ISO 3166-1 alpha-2, p. ej. BR), language? (p. ej. portuguese), order = votes | clickcount | bitrate (por defecto votes), limit 1–50 (por defecto 10)Emisoras coincidentes
get_stationid (Radio Browser stationuuid)Una emisora
top_stationsby = votes | clicks | trending (por defecto votes), countrycode?, tag?, limit 1–50 (por defecto 10)Emisoras más votadas, más reproducidas o en tendencia
list_countriesmin_stations? (por defecto 1), limit?Nombre del país, código ISO, número de emisoras y página de país en 72FM (https://72fm.com/radio/<iso2>)
list_genreslimit 1–100 (por defecto 30)Principales etiquetas de género por número de emisoras. Las etiquetas de marcador de posición y las que no son de género se filtran (p. ej. undefined, radio, fm, y nombres de países, regiones o idiomas).

Campos de la emisora

{
  "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 es la URL de transmisión resuelta del directorio, o la URL original cuando no existe una resuelta.
  • listen_url reproduce la emisora en el navegador en 72FM.
  • tags contiene hasta 8 etiquetas.

Prompt

find_radio(request) encuentra emisoras para un estado de ánimo, lugar, actividad o género, por ejemplo "jazz tranquilo para una tarde lluviosa" o "radio de Lisboa".

Fiabilidad

El servidor consulta los espejos de Radio Browser en este orden, con un tiempo de espera de 8 segundos para cada uno:

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

Si los tres fallan, la herramienta devuelve un error claro (isError: true) y el servidor sigue ejecutándose. Las solicitudes se identifican con User-Agent: internet-radio-mcp/1.0 (+https://72fm.com).

Puedes cambiar este comportamiento con dos variables de entorno opcionales:

  • RADIO_BROWSER_MIRRORS: URL base separadas por comas para usar en lugar de las predeterminadas.
  • RADIO_BROWSER_TIMEOUT_MS: el tiempo de espera para cada espejo, en milisegundos (por defecto 8000).

Desarrollo

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

El código fuente son módulos ES simples con tipos JSDoc (src/), por lo que no hay paso de compilación. Por eso npx github:… funciona sin una publicación en npm.

Relacionados

Datos y créditos

  • Los datos del directorio de emisoras provienen de Radio Browser y son de dominio público. Gracias a sus mantenedores y colaboradores. Si usas este servidor con frecuencia, considera apoyar a Radio Browser.
  • Las transmisiones, nombres y logotipos pertenecen a sus respectivos radiodifusores.
  • 72FM es un reproductor de radio web gratuito construido sobre el directorio de Radio Browser.

Licencia

MIT © Alon Drilich (72FM)