
Internet Radio
io.github.AlonDrilichv1.0.2Updated Oct 6, 2026
Search internet radio stations, stream URLs, top stations, countries and genres (Radio Browser).
Overview
Lets an assistant search internet radio stations worldwide and return their stream URLs, plus top stations, countries and genres.
- What it does
- Provides five read-only tools over the public Radio Browser directory: search_stations by name, genre tag, country code or language; get_station by station ID; top_stations by votes, clicks or trending; list_countries; and list_genres. Each result includes a summary line, JSON data and structured content, with a station's own stream_url and a listen_url that plays it in the browser on 72FM. A find_radio prompt turns a mood, place or activity into station suggestions.
- When to use it
- Useful when you want an assistant to find radio stations by genre, country or language, look up a specific station's stream URL, or see what is popular or trending. It suits listening suggestions and quick directory lookups rather than playback inside the assistant.
- Requirements
- Node.js 20 or newer, launched over stdio with npx from GitHub, or the published container image run with Docker. No API key or account is needed. Network access to the Radio Browser mirrors is required; optional environment variables RADIO_BROWSER_MIRRORS and RADIO_BROWSER_TIMEOUT_MS can override the defaults.
Installation
In SourceWeft
- Open Internet Radio in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
internet-radio-mcp
An open-source Model Context Protocol (MCP) server for internet radio. It lets Claude, Cursor, VS Code Copilot and other MCP clients search radio stations worldwide and get their direct stream URLs. It also lists top and trending stations, countries and genres.
The station data comes from Radio Browser, a community-maintained, public-domain directory with over 50,000 stations that have working streams. The server is built by 72FM, a free web radio player built on the same directory. Every result includes a listen_url that plays the station in the browser on 72FM, as well as the station's own stream_url.
Stations belong to their broadcasters. Neither 72FM nor this server owns, operates or curates them. Anyone can add or edit entries in the directory, so a stream can occasionally be offline.
- No API key, no account, read-only.
- 5 tools, 1 prompt, stdio transport.
- Runtime dependencies:
@modelcontextprotocol/server(the official MCP TypeScript SDK, v2) andzod.
Example questions
- "Find jazz stations in Brazil"
- "What are the most popular stations in Japan?"
- "Give me the stream URL for BBC World Service"
- "What's trending on internet radio right now?"
- "Which countries have the most radio stations?"
- "What genres can I search for? Then find me some lofi stations."
Install
Requires Node.js 20 or newer. The server runs straight from GitHub with npx, so there is nothing to install globally.
Claude Code
Then run /mcp in a session to confirm that internet-radio is connected.
Claude Desktop
Open Settings → Developer → Edit Config. This opens claude_desktop_config.json: on macOS it is at ~/Library/Application Support/Claude/claude_desktop_config.json, and on Windows at %APPDATA%\Claude\claude_desktop_config.json. Add:
Restart Claude Desktop.
Cursor
Add the server to ~/.cursor/mcp.json to use it everywhere, or to .cursor/mcp.json to use it in one project:
VS Code (GitHub Copilot, Agent mode)
Add the server to .vscode/mcp.json, or run MCP: Add Server from the Command Palette:
Other clients
Any MCP client that can launch a stdio server can use the same command: npx -y github:AlonDrilich/internet-radio-mcp.
The first launch downloads the package from GitHub, which takes a few seconds. Later launches use the npx cache.
Docker
The same server is published as a container image, and is listed in the official MCP Registry as io.github.AlonDrilich/internet-radio-mcp:
In a client config, use "command": "docker" with "args": ["run", "-i", "--rm", "ghcr.io/alondrilich/internet-radio-mcp:latest"].
Tools
All tools are read-only and annotated with readOnlyHint: true and openWorldHint: true. Each result contains:
- a one-line summary,
- the same data as JSON text,
structuredContentthat matches the tool'soutputSchema.
Broken streams (streams that failed the directory's last automated check) are excluded from searches.
Station fields
stream_urlis the directory's resolved stream URL, or the original URL when no resolved one exists.listen_urlplays the station in the browser on 72FM.tagsholds up to 8 tags.
Prompt
find_radio(request) finds stations for a mood, place, activity or genre, for example "calm jazz for a rainy evening" or "radio from Lisbon".
Untrusted data
Station names, tags, languages, countries and URLs come from a public directory that anyone can edit, and the server hands them to an AI assistant. The server therefore treats every field as untrusted input:
- Text is reduced to a single line: line breaks and control characters become spaces; zero-width characters, bidirectional controls, private-use code points, the invisible Unicode "tag" characters and every other invisible "default-ignorable" code point (variation selectors, fillers, joiners) are removed, except the emoji selector and the zero-width joiners that real text needs, which survive only in runs of at most two; names are cut at 120 characters, tags at 40, other fields at 60.
- URLs (
stream_url,homepage,favicon) must be plainhttporhttpswritten out in full, without credentials or backslashes, and are returned in their parsed canonical form; anything else (javascript:,data:,file:,https:host, a bare word) is dropped, and a station with no valid id or no playable stream is left out of the results. bitrateis converted when a station reports bits per second, and dropped when it is implausible; the directory's own bitrate sort is not offered because it ranks those entries first.- Every result and the server instructions say that these fields are data, not instructions.
- Replies are capped at 5 MB, must be a JSON list, and a mirror that redirects or answers with something else counts as failed.
This reduces the risk of indirect prompt injection; it cannot remove it. A station can still be called "Ignore previous instructions", and that text will be shown, as one capped line, like any other name. Treat results as untrusted when you build on them.
Reliability
The server queries the Radio Browser mirrors in this order, with an 8-second timeout for each:
de1.api.radio-browser.infode2.api.radio-browser.infoall.api.radio-browser.info
If all three fail, the tool returns a clear error (isError: true) and the server keeps running. Requests identify themselves with User-Agent: internet-radio-mcp/1.0 (+https://72fm.com).
You can change this behavior with two optional environment variables:
RADIO_BROWSER_MIRRORS: comma-separated base URLs to use instead of the defaults. OnlyhttpsURLs without credentials are accepted (plainhttponly forlocalhost,127.0.0.1or[::1], for testing); anything else is ignored with a warning on stderr. Redirects are never followed.RADIO_BROWSER_TIMEOUT_MS: the timeout for each mirror, in milliseconds: a whole number from 100 to 60000 (default8000).
Development
The source is plain ES modules with JSDoc types (src/), so there is no build step. That is why npx github:… works without an npm publish.
Related
- radio-playlists: weekly M3U playlists by country and genre from the same directory (browse online).
- radio-player-72fm: WordPress plugin for putting a station's player on a site.
- All 72FM tools: 72fm.com/developers.
Data and credits
- The station directory data comes from Radio Browser and is in the public domain. Thanks to its maintainers and contributors. If you use this server heavily, please consider supporting Radio Browser.
- Streams, names and logos belong to their respective broadcasters.
- 72FM is a free web radio player built on the Radio Browser directory.
License
MIT © Alon Drilich (72FM)
Source: README.md at commit 2a508b3
Tools
0Version history
1- v1.0.2LatestOct 6, 2026

