RoamDial — World Radio Map
Server Details
Explore 35,000+ live radio stations from 215 countries by city, genre, mood, and ICY track title.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- ddter/roamdial-mcp
- GitHub Stars
- 0
- Server Listing
- RoamDial MCP Server
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 4 tools
Each tool targets a distinct intent: keyword discovery (search_stations), profile lookup (get_station), live metadata for a known station (get_now_playing), and randomized discovery (spin_globe). The only overlap is that spin_globe also returns ICY track metadata, which could be confused with get_now_playing, but the random/globe framing keeps the boundary reasonably clear.
All names are snake_case and verb-first (get_*, search_*, spin_*), giving a predictable pattern. spin_globe is slightly more playful/domain-specific than the get/search pairs, but still follows verb_noun, so the deviation is minor.
Four tools is lean but well-matched to a focused radio-directory service: discovery, detail, live metadata, and random exploration. Each tool earns its place, though the surface is at the low end of comfortable.
The read-only domain (search, detail, now-playing, random pick) is well covered with no dead ends for typical listener workflows. Minor gaps exist around taxonomy/browse endpoints (e.g. listing available countries/genres or map-bounds queries) that agents would have to approximate via search.
Available Tools
4 toolsget_now_playingGet Live Now Playing (ICY)ARead-onlyInspect
Query real-time ICY stream metadata for a verified station in the RoamDial directory. Returns the track/show title, sampling timestamp (observedAt), and availability reason.
| Name | Required | Description | Default |
|---|---|---|---|
| stationId | Yes | 12-character hex station ID or slug-id from the RoamDial directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| city | Yes | |
| mapUrl | Yes | |
| country | Yes | |
| listenUrl | Yes | |
| localTime | Yes | |
| stationId | Yes | |
| nowPlaying | Yes | |
| stationName | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, open-world, non-idempotent, and non-destructive behavior. The description adds useful context beyond those annotations by noting the data is real-time, that a sampling timestamp (observedAt) is returned, and that an availability reason is provided, which signals possible unavailability.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core action and followed by the key return fields. It contains no filler and every sentence contributes to understanding the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read-only tool with annotations and an output schema, the description is largely complete: it identifies the data source, the live nature of the result, and the key returned pieces. It could be stronger by clarifying when to use this instead of get_station or search_stations, but that gap is more about usage guidance than core completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema already explains that stationId is a 12-character hex station ID or slug-id from the RoamDial directory. The description adds the notion of a 'verified station' but does not provide additional format details, examples, or constraints beyond what is in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific operation: querying real-time ICY stream metadata for a station in the RoamDial directory. It distinguishes this from a general station lookup by emphasizing live now-playing metadata, but it does not explicitly name or contrast with siblings like get_station or search_stations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the phrase 'real-time ICY stream metadata for a verified station,' suggesting it should be used when current track/show information is needed. However, there is no explicit when-to-use guidance, no exclusions, and no mention of alternatives among the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stationGet Station ProfileARead-onlyIdempotentInspect
Get the detailed profile of a station by ID or slug-id, including broadcast metadata, Wikipedia summary, RoamDial internal listener stats, and similar stations.
| Name | Required | Description | Default |
|---|---|---|---|
| stationId | Yes | 12-character hex station ID (e.g. "aaaaaaaaaaaa") or slug-id (e.g. "classic-fm-aaaaaaaaaaaa"). |
Output Schema
| Name | Required | Description |
|---|---|---|
| station | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, so the safety profile is covered. The description adds the payload composition, which helps an agent decide whether a fetch is worth it, but it says nothing about missing/invalid IDs, external Wikipedia dependency timing, or freshness of listener stats.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; every clause contributes either the action or a category of returned data.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present the description need not explain return values, and one fully documented parameter plus strong annotations leaves little uncovered. Only edge-case behavior for an unknown ID is unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema itself gives the 12-character hex form plus a slug-id example. The description's 'by ID or slug-id' restates that rather than adding new meaning, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('Get') plus resource ('detailed profile of a station') and an enumeration of what the profile contains (broadcast metadata, Wikipedia summary, listener stats, similar stations). It is clearly distinguishable from search_stations and get_now_playing, though it never names a sibling to contrast against.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'by ID or slug-id' implicitly tells the agent this is the lookup tool for when you already hold an identifier, which is the practical discriminator versus search_stations. There are no explicit exclusions or stated preconditions, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_stationsSearch Radio StationsARead-onlyIdempotentInspect
Search live radio stations in the RoamDial directory by keyword, country, city, genre, or language. Returns verified stations with direct listenUrl and mapUrl.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | City or state/region name. | |
| genre | No | Genre slug or keyword (e.g. "classical", "jazz", "rock", "pop", "electronic", "news", "hip-hop", "country", "world", "oldies"). | |
| limit | No | Maximum number of stations to return (1-25, default 10). | |
| query | No | Station name, call sign, frequency, city, or keyword. | |
| country | No | ISO 2-letter country code (e.g. "GB", "JP", "US") or country name/alias ("UK", "usa", "japan"). | |
| language | No | Broadcast language (e.g. "English", "Japanese"). |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| stations | Yes | |
| snapshotBuiltAt | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare the full safety profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint=false), so behavior is largely covered structurally. The description adds that stations are 'verified' and return direct listenUrl and mapUrl, which is modest value beyond the annotations and mostly overlaps the output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: capability and filter dimensions first, return content second. No redundant phrasing and nothing that restates the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-shape explanation is unnecessary, and all six parameters are documented in the schema. The only gap is behavioral detail around filter combination and empty results, which is minor for a read-only search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each parameter has an example-rich description, so the baseline of 3 applies. The description names the same five filter dimensions without adding syntax, precedence, or combination rules beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (search live radio stations in the RoamDial directory) plus the five filter dimensions and the returned artifact (listenUrl, mapUrl). It is clearly distinguishable from the get_* siblings, though it never names them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: search when you have a keyword/country/genre/language rather than a known station, which is the role of the get_station sibling. However, no explicit when-to-use, when-not-to-use, or alternative routing is given, and there is no guidance on combining filters or handling zero results.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spin_globeSpin the Radio GlobeARead-onlyInspect
Pick a random live radio station from the 3D globe (optionally constrained by country or genre) and sample its current ICY track title within a 2.5s budget.
| Name | Required | Description | Default |
|---|---|---|---|
| genre | No | Optional genre slug or keyword. | |
| country | No | Optional ISO 2-letter country code or country name/alias. |
Output Schema
| Name | Required | Description |
|---|---|---|
| station | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, non-idempotent and non-destructive, so the safety profile is covered. The description adds real value beyond that: it discloses nondeterministic random selection, a 2.5s latency budget, and that the result includes a sampled ICY track title. It does not say what happens when no station matches the filter, which is the main remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler: the core action, the optional filters, and the time budget all appear in order of importance. Nothing is repeated from the annotations or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't explain return values, and the latency budget plus the nondeterminism note cover the operationally important behavior for a two-optional-param tool. The one omission is the empty-result / no-matching-station behavior, which matters for a randomized lookup with filters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented as optional genre and country inputs. The description only restates that these are optional constraints on the random pick, without adding format guidance beyond the schema's ISO-code and slug notes. Baseline 3 is appropriate when the schema carries the parameter detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('pick a random live radio station from the 3D globe') plus a secondary action ('sample its current ICY track title'), which separates it from the deterministic siblings search_stations, get_station and get_now_playing. It stops short of naming those alternatives explicitly, so the differentiation is inferable rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It signals the use case (random discovery, optionally narrowed by country or genre) but gives no explicit when-not guidance and never points to search_stations or get_now_playing as the deterministic alternatives. An agent can infer the intent, but must reason about the selection itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
- First observed
get_now_playing - First observed
get_station - First observed
search_stations - First observed
spin_globe
Related MCP Connectors
264 emisoras de radio colombianas en vivo: busca por ciudad, genero o dial y escuchalas.
Public TV and radio catalogue with measured stream health, folders and M3U feeds for VLC.
Find live radio stations, podcasts, free audiobooks, song charts and the radio guide on OndaCast.
Search and discover currently playable Nordic cultural recordings.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceInternet radio + AI DJ for Claude. 55,000+ stations across 197 countries. Search, play, and get recommendations through natural language.1MIT
- AlicenseAqualityBmaintenanceEnables MCP clients such as Claude, Cursor, and VS Code Copilot to search more than 50,000 internet radio stations by name, genre, country, or language and retrieve their direct stream URLs. It also surfaces the most popular and trending stations along with country and genre listings, with no API key or account required.5466 npm1MIT
- AlicenseNot gradedqualityBmaintenanceEnables Claude to search the Radio Browser directory for live internet radio stations and return working stream URLs, supporting queries by country, genre, popularity, or specific station.MIT
- AlicenseNot gradedqualityFmaintenanceInternet radio for Claude and your terminal with ~25,000 verified live stations from 197 countries. Control playback, search, and get recommendations through natural language.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.