MCP server for Radio Browser API — search and discover internet radio stations worldwide
Three well-named tools with complete input schemas and solid descriptions. All tools follow verb_noun pattern (radio_search, radio_get_station, radio_top_stations). Descriptions are 150 - 250 chars, within the 10 - 1024 baseline. All parameters have types and descriptions. Tool annotations (readOnlyHint, idempotentHint, destructiveHint, openWorldHint) are present and correct. Output is formatted as readable text with station details, stream URLs, and UUIDs. Error handling returns actionable messages. Main gaps: output schema not formally documented (LLM must infer structure from text response), no pagination support despite potential for large result sets, and parameter descriptions could be more prescriptive about constraints (e.g., 'country' should clarify exact format expected).
Get details of a specific radio station by its UUID, including stream URL. Use the UUID from radio_search results.
Search for internet radio stations by name, country, or genre tag. Returns station name, country, tags, bitrate, stream URL, and UUID. At least one of query, country, or tag must be provided. Always present stream URLs as clickable markdown links so users can listen directly.
Get the most popular radio stations worldwide, sorted by click count. Always present stream URLs as clickable markdown links so users can listen directly.
Output schema not formally documented. Responses are formatted as plain text; LLM must infer structure (station name, country, tags, bitrate, URL, UUID) from the formatStations() output. A structured JSON response with typed fields would enable more reliable downstream tool chaining and data extraction.
No pagination support. radio_search and radio_top_stations accept a 'limit' parameter (max 30) but do not return a total count, next_cursor, or offset. If a user wants results 31 - 60, there is no way to fetch them. Large result sets risk context window exhaustion.
Parameter 'country' description lacks format guidance. Should clarify: 'Full country name (e.g., Germany, United Kingdom), not ISO codes or abbreviations.' Current description 'Filter by country name (e.g. "Germany", "United Kingdom")' includes examples that LLMs may treat as the only valid options.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 65 | 2026-07-28+ | v2 |
Error handling returns plain text error messages but does not categorize errors as retryable, user-fixable, or fatal. E.g., 'Error: Network timeout' gives no guidance on whether the LLM should retry, ask the user, or abandon the request.
radio_search requires 'at least one of query, country, or tag' but validation is done at runtime with a plain text error. This constraint should be documented in the schema (e.g., via a custom validation note) so LLMs understand the requirement before calling.