radiobrowser-api-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GRPC_PORT | No | Host port to map to the container's gRPC port 50051 when deploying with Docker Compose. For example, GRPC_PORT=50099 maps host port 50099 to container port 50051. | 50051 |
| RADIO_MCP_AUTH_TOKEN | No | Optional token required for mutating tools (register_station_click, vote_for_station, resolve_station_stream_url, add_station) when running in gRPC mode. If set, these tools require `authorization: Bearer <token>` metadata. If unset, all tools are open. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_now_playingA | Get the track currently playing on a radio station. |
| search_radio_stationsB | Search the Radio Browser directory for stations matching a name. |
| advanced_station_searchA | Advanced station search with field filters (GET /json/stations/search). |
| list_all_stationsB | List stations in the directory (GET /json/stations). Paginate with offset/limit. |
| get_station_by_uuidA | Get one station by its stationuuid (GET /json/stations/byuuid/{uuid}). |
| find_stations_by_nameC | Find stations by name (GET /json/stations/byname[/exact]/{name}). |
| find_stations_by_countryA | Find stations by country, e.g. "Australia" (GET /json/stations/bycountry[/exact]/{country}). |
| find_stations_by_country_codeC | Find stations by ISO 3166-1 country code, e.g. "AU" (GET /json/stations/bycountrycodeexact/{code}). |
| find_stations_by_stateB | Find stations by state/region (GET /json/stations/bystate[/exact]/{state}). |
| find_stations_by_languageC | Find stations by broadcast language, e.g. "english" (GET /json/stations/bylanguage[/exact]/{language}). |
| find_stations_by_tagB | Find stations by tag/genre, e.g. "chill" (GET /json/stations/bytag[/exact]/{tag}). |
| find_stations_by_codecA | Find stations by stream codec, e.g. "MP3" (GET /json/stations/bycodec[/exact]/{codec}). |
| get_top_voted_stationsC | Highest-voted stations (GET /json/stations/topvote/{count}). |
| get_most_clicked_stationsC | Most-clicked stations (GET /json/stations/topclick/{count}). |
| get_recently_clicked_stationsC | Most recently clicked stations (GET /json/stations/lastclick/{count}). |
| get_recently_updated_stationsB | Most recently changed/added stations (GET /json/stations/lastchange/{count}). |
| get_station_check_historyA | Automated stream-check history for a station (GET /json/checks). |
| register_station_clickA | Register a click (listen) for a station (GET /json/click/{uuid}). |
| vote_for_stationB | Vote for a station (GET /json/vote/{uuid}). NOTE: increments the public vote counter. |
| resolve_station_stream_urlA | Get the current stream URL for a station (GET /json/url/{uuid}). Also counts as a click. |
| add_stationA | Submit a new station to the directory (POST /json/add). Only name + url are required. |
| list_countriesC | Countries in the directory with station counts (GET /json/countries). |
| list_country_codesA | ISO 3166-1 country codes in the directory with station counts (GET /json/countrycodes). |
| list_codecsA | Stream codecs with station counts (GET /json/codecs[/{filter}]). |
| list_statesA | States/regions with station counts (GET /json/states[/{country}]). |
| list_languagesA | Broadcast languages with station counts (GET /json/languages[/{filter}]). |
| list_tagsB | Tags/genres with station counts (GET /json/tags[/{filter}]). |
| get_directory_statsB | Directory server statistics (GET /json/stats): station counts, checks, clicks, etc. |
| list_directory_serversB | Known directory mirror servers (GET /json/servers). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 29 tools
Several tools have unclear boundaries: search_radio_stations and find_stations_by_name both search by station name, and advanced_station_search also accepts name plus many other filters. The large family of find_stations_by_* endpoints is largely subsumed by advanced_station_search, creating avoidable overlap.
Most tools follow readable snake_case verb_noun patterns such as list_*, get_*, and find_stations_by_*. However, search_radio_stations breaks the find_stations_by_name convention, advanced_station_search is not verb-led, and get_now_playing uses a different structure, so consistency is only moderate.
29 tools is above the 25+ threshold and makes the server feel heavy. While each endpoint may map to a real API operation, the redundancy between search tools and the large number of near-identical find_stations_by_* tools could be reduced.
The surface covers the major workflows: searching/listening to stations, getting now-playing info, voting and click tracking, adding stations, and browsing directory statistics and metadata. It lacks update/delete station operations, but those are less central and likely require credentials or admin privileges.