radiobrowser-api-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@radiobrowser-api-mcpWhat's currently playing on NTS Radio?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
RadioBrowser API — MCP server
An MCP server for the Radio Browser API plus live "now playing" track info read from station streams via ICY/Shoutcast metadata. No API keys needed.
What is the Radio Browser API?
Radio Browser is a free, community-driven
directory of internet radio stations — currently ~58,000 stations
(57,973 at last check) with ~12,000 tags. Anyone can submit stations, and
automated jobs continuously probe stream health (lastcheckok). It exposes a
free JSON webservice with no API key; the only requirement is sending a
User-Agent header. The service runs on several mirror servers, which this
project fails over across automatically:
https://de1.api.radio-browser.infohttps://de2.api.radio-browser.infohttps://nl1.api.radio-browser.info
Useful links:
Directory search UI: https://www.radio-browser.info/
Webservice docs (endpoint reference): https://www.radio-browser.info/webservice
Server implementation (Rust): https://github.com/segler-alex/radiobrowser-api-rust
Web frontend: https://github.com/segler-alex/radiobrowser-web-angular
What this project adds on top: every directory endpoint as an MCP tool, plus
get_now_playing, which the directory itself cannot provide — it resolves a
station name to a stream URL and reads the live track from the stream's
ICY/Shoutcast metadata.
Related MCP server: Spotify MCP Server
Tools (29)
Live track info:
get_now_playing(station_name, timeout=20)— current track from the station's stream via ICY/Shoutcast metadata. Returns{artist, title, raw_title, station_matched, country, stream_url}; track fields arenullwhen the station sends no titles right now.
Directory search (search_radio_stations, advanced_station_search,
list_all_stations, get_station_by_uuid, find_stations_by_name,
find_stations_by_country, find_stations_by_country_code,
find_stations_by_state, find_stations_by_language,
find_stations_by_tag, find_stations_by_codec) — mirrors of
GET /json/stations[/search|/byuuid|/by*], with exact, order,
reverse, offset, limit, hidebroken params.
Rankings & history: get_top_voted_stations, get_most_clicked_stations,
get_recently_clicked_stations, get_recently_updated_stations
(topvote/topclick/lastclick/lastchange), get_station_check_history
(GET /json/checks — the API ignores limit, so bound with seconds).
Counters & submission: register_station_click (/click), vote_for_station
(/vote), resolve_station_stream_url (/url), add_station (POST /add).
Note: click/vote/url increment public counters.
Facets & meta: list_countries, list_country_codes, list_codecs,
list_states, list_languages, list_tags, get_directory_stats,
list_directory_servers.
Run
uv run server.py # stdio transport (default)
uv run server.py --transport grpc --port 50051 # gRPC for remote connectionsgRPC exposes all 29 tools via CallTool(name, arguments_json) /
ListTools() — see radio_mcp.proto. The bridge is a generic JSON
pass-through, so new MCP tools need no gRPC-side changes. CallTool results
are wrapped in an explicit envelope {"items": [...], "count": N} so clients
can tell an object result apart from a one-item list. Regenerate stubs
only when the .proto changes:
uv run python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. radio_mcp.protogRPC auth (remote deployments)
register_station_click, vote_for_station, resolve_station_stream_url
and add_station mutate the public directory. When RADIO_MCP_AUTH_TOKEN
is set, calls to these tools must carry
authorization: Bearer <token> gRPC metadata; read-only tools stay open.
Unset (default) means everything is open — fine for localhost, not for the
internet.
Deploy (Docker / Coolify)
The image runs the server in gRPC mode on port 50051. Coolify accepts a
plain docker-compose.yml, so deployment is: new Resource → Docker Compose →
point it at this repo.
docker compose up -d --buildHost port is configurable:
GRPC_PORT=50099 docker compose up -dmaps host50099→ container50051(the in-container port is fixed). The host bind is loopback-only; Coolify overrides networking itself.For remote/Coolify deployments, set
RADIO_MCP_AUTH_TOKEN(Coolify env vars) so the mutating tools require a Bearer token (see gRPC auth above).The image installs runtime deps only (
uv sync --frozen --no-dev) and ships pre-generated protobuf stubs, so no build tools are needed at deploy.Uses insecure (plaintext) gRPC — put it behind a private network or a TLS-terminating reverse proxy; do not expose it directly to the internet.
Note: the default host port 50051 may collide if something already listens there (seen locally); set
GRPC_PORTto avoid it.
Client config (example)
{
"mcpServers": {
"radio-now-playing": {
"command": "uv",
"args": ["--directory", "/Users/maksym/code/open_code_test", "run", "server.py"]
}
}
}Available Tools
29 toolsadd_stationA
Submit a new station to the directory (POST /json/add). Only name + url are required.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| name | Yes | ||
| tags | No | ||
| state | No | ||
| country | No | ||
| favicon | No | ||
| timeout | No | ||
| homepage | No | ||
| language | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It reveals that this is a POST-based submission and that only name and url are required, but it does not disclose authentication requirements, validation rules, duplicate handling, idempotency, or what response the agent should expect after submission.
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 a single efficient sentence with no filler. It front-loads the core action, then gives the endpoint and the only truly necessary requirement. Every part earns its place.
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?
This is a mutating tool with no annotations, no output schema, and nine parameters, yet the description covers only the action and the two required fields. It omits important operational context such as response format, error behavior, authentication, and optional parameter semantics, so the definition is not complete enough for reliable invocation.
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 0%, so the description must compensate. It adds that only name and url are required, which is marginally useful, but it provides no meaning for the remaining seven optional parameters (tags, state, country, favicon, timeout, homepage, language), leaving their semantics almost entirely undocumented.
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 clearly states the operation ('Submit a new station to the directory') with a specific verb and resource, and even includes the endpoint (POST /json/add). This strongly distinguishes it from the sibling search/list/vote tools, so an agent can easily identify what this tool does.
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 description gives clear context: use this tool when submitting a new station. While it does not explicitly name alternatives or state when not to use it, the purpose itself is distinct enough from the read-oriented sibling tools that the usage context is reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
advanced_station_searchA
Advanced station search with field filters (GET /json/stations/search).
At least one of name/country/countrycode/state/language/tag/codec is required.
The *_exact flags switch that field to exact matching.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | ||
| name | No | ||
| codec | No | ||
| limit | No | ||
| order | No | votes | |
| state | No | ||
| offset | No | ||
| country | No | ||
| reverse | No | ||
| timeout | No | ||
| language | No | ||
| tag_exact | No | ||
| hidebroken | No | ||
| name_exact | No | ||
| codec_exact | No | ||
| countrycode | No | ||
| state_exact | No | ||
| country_exact | No | ||
| language_exact | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does disclose the HTTP method (GET, implying a read-only operation), the at-least-one-filter requirement, and that *_exact flags toggle exact matching. But it doesn't state the default matching mode implied by those flags (fuzzy/substring vs exact), how multiple filters combine, or ordering behavior — so transparency is partial.
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?
Three sentences, each earning its place: purpose plus endpoint, the required-filter constraint, then the exact-flag semantics. Information is front-loaded and there is zero filler or repetition of schema content.
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 19-parameter tool with 0% schema coverage, no annotations, and a large sibling family, the description covers the obligation rule and exact-flag behavior but leaves notable gaps: it doesn't explain the default matching mode implied by the exact flags, how filters combine, or how this tool relates to the find_stations_by_* family. The presence of an output schema offsets the need to document return values.
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?
At 0% schema description coverage, the description must compensate, and it does for the two most confusing areas: it enumerates which of the 19 parameters act as filter fields and explains the meaning of all seven *_exact flags. Control parameters (limit/offset/order/reverse/timeout/hidebroken) carry schema defaults, so their semantics are partially recoverable even without prose.
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 names a specific verb-resource pair — advanced station search with field filters — and pinpoints the endpoint (GET /json/stations/search). 'Advanced' and 'field filters' tacitly separate it from the single-criterion find_stations_by_* siblings, though it never names one explicitly, so sibling differentiation is implied rather than explicit.
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?
Provides a hard invocation rule (at least one of name/country/countrycode/state/language/tag/codec required), which is essential usage guidance for calling the tool correctly. However, it never says when to prefer this tool over the nine find_stations_by_* siblings or search_radio_stations; selection context is only implied by the word 'advanced'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_stations_by_codecA
Find stations by stream codec, e.g. "MP3" (GET /json/stations/bycodec[/exact]/{codec}).
| Name | Required | Description | Default |
|---|---|---|---|
| exact | No | ||
| limit | No | ||
| order | No | votes | |
| value | Yes | ||
| offset | No | ||
| reverse | No | ||
| timeout | No | ||
| hidebroken | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden; it does identify this as a GET request with an optional /exact variant, which implies a read-only lookup. However, it does not disclose the full behavior around defaults, ordering, or the meaning of exact=false beyond the obvious, so transparency is only partial.
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 a useful example and endpoint. No filler; every element earns its place.
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?
The output schema covers return shape, but the input context is not complete: 6 parameters are effectively undocumented, there are no annotations, and no alternative/selection guidance is given. For an 8-parameter tool this description leaves too much for the agent to guess.
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 0%, so the description must compensate for 8 parameters, but it only touches on value (via the MP3 example) and exact (via the endpoint). limit, offset, order, reverse, hidebroken, and timeout receive no semantic guidance beyond their names and defaults.
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: 'Find stations by stream codec', with a concrete example ('MP3') and the endpoint path. This clearly distinguishes it from sibling finders such as find_stations_by_name or find_stations_by_country because the filtering dimension is explicit.
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 implies the tool is for codec-based lookup, but it does not explicitly say when to prefer it over advanced_station_search or search_radio_stations, nor does it state any exclusions. The endpoint form gives some guidance, but the decision context is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_stations_by_countryA
Find stations by country, e.g. "Australia" (GET /json/stations/bycountry[/exact]/{country}).
| Name | Required | Description | Default |
|---|---|---|---|
| exact | No | ||
| limit | No | ||
| order | No | votes | |
| value | Yes | ||
| offset | No | ||
| reverse | No | ||
| timeout | No | ||
| hidebroken | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It adds the GET endpoint and shows the optional /exact route, which is useful, but it does not explain default fuzzy-matching behavior, pagination, result shape, or any request constraints.
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?
One front-loaded sentence conveys purpose, example, and endpoint without wasted words. The key action phrase appears first, and the endpoint parenthetical enriches it efficiently.
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 an 8-parameter tool with no annotations, this description is too thin. It omits most parameter semantics, matching behavior, and guidance for choosing between country, country-code, and state lookup variants; the output schema covers returned fields, so that absence is acceptable.
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 0%, so the description must compensate. It maps value to a country and hints that exact controls the /exact route, but leaves limit, offset, order, reverse, timeout, and hidebroken semantically unexplained despite their defaults being visible 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 the exact action ('Find stations by country') with a concrete example ('Australia') and the underlying endpoint. This clearly distinguishes it from sibling tools like find_stations_by_country_code and find_stations_by_state.
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 tool is clearly for country-name lookups, and the example reinforces that. It does not explicitly say 'use country codes with find_stations_by_country_code', but the context makes the applicable scenario unambiguous enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_stations_by_country_codeC
Find stations by ISO 3166-1 country code, e.g. "AU" (GET /json/stations/bycountrycodeexact/{code}).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| order | No | votes | |
| value | Yes | ||
| offset | No | ||
| reverse | No | ||
| timeout | No | ||
| hidebroken | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full behavioral burden. It does convey a read-only 'find' operation and the exact-match endpoint, but it does not disclose ordering, pagination, timeout behavior, or how hidden/broken stations are treated.
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 focused sentence that front-loads the core purpose, includes a helpful example, and adds the endpoint reference without filler. Every part earns its place.
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 tool with seven parameters, zero schema descriptions, and no annotations, this description is too thin. It is enough to make a basic call with the required value, but an agent lacks the information needed to use optional parameters or confidently distinguish this from sibling country/search tools.
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 0%, so the description must compensate. It usefully clarifies that the required 'value' parameter is an ISO country code via the 'AU' example, but it leaves the other six parameters (limit, order, offset, reverse, timeout, hidebroken) completely unexplained.
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 ('Find stations'), a precise key ('ISO 3166-1 country code'), and gives a concrete example ('AU') plus the exact endpoint. It does not explicitly contrast with find_stations_by_country, but the code-based scope makes the distinction reasonably clear.
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?
There is no guidance about when to use this tool versus find_stations_by_country, advanced_station_search, or other search siblings. The description explains what the tool does but not the conditions or context that should lead an agent to choose it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_stations_by_languageC
Find stations by broadcast language, e.g. "english" (GET /json/stations/bylanguage[/exact]/{language}).
| Name | Required | Description | Default |
|---|---|---|---|
| exact | No | ||
| limit | No | ||
| order | No | votes | |
| value | Yes | ||
| offset | No | ||
| reverse | No | ||
| timeout | No | ||
| hidebroken | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It reveals only that the operation is an HTTP GET (implying read-only) and that an exact-match variant exists via [/exact]. It does not disclose case sensitivity, whether value is a language name or code, pagination defaults, ordering behavior, or the semantics of hidebroken and exact.
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 a single front-loaded sentence with no filler: action, resource, example, and endpoint all earn their place. It is economical and easy to parse, though the brevity veers toward under-specification given eight undocumented parameters.
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 an 8-parameter tool with zero schema descriptions and no annotations, the description leaves the agent guessing about the meaning of most parameters and the exact-match behavior. The presence of an output schema excuses the lack of return-value detail, but the core calling semantics are under-documented.
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 0%, so the description must compensate; it adds meaning for 'value' via the example 'english' and for 'exact' via the [/exact] path segment. The remaining six parameters (limit, order, offset, reverse, timeout, hidebroken) receive no explanation in either the schema or the description.
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 ('Find'), resource ('stations'), and filtering dimension ('broadcast language'), with an example value ('english') that clarifies input format. The endpoint URL adds precision by showing the bylanguage path and the optional /exact segment. It does not explicitly name sibling alternatives, but the language dimension inherently distinguishes it from the by_name/by_country/by_tag siblings.
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?
No guidance is given on when to use this tool versus alternatives such as find_stations_by_name or list_languages, nor any when-not conditions. The only usage hint is the example value 'english' and the optional /exact endpoint variant, which implies exact matching but never explains when exact=true should be chosen.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_stations_by_nameC
Find stations by name (GET /json/stations/byname[/exact]/{name}).
| Name | Required | Description | Default |
|---|---|---|---|
| exact | No | ||
| limit | No | ||
| order | No | votes | |
| value | Yes | ||
| offset | No | ||
| reverse | No | ||
| timeout | No | ||
| hidebroken | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of disclosing behavior. It does reveal that this is a read-only GET operation and that an optional 'exact' path variant exists. However, it does not explain matching semantics, ordering behavior, pagination, or failure modes, leaving significant behavioral gaps.
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 a single front-loaded sentence with no wasted words. It is concise, but it is arguably too sparse for an 8-parameter tool with many similar siblings.
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 no annotations, 8 parameters, and overlapping sibling tools, a one-sentence description is insufficient for reliable selection and invocation. The output schema exists, so return-value details are less critical, but the description omits matching behavior, parameter semantics, and guidance for choosing this tool over alternatives.
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 0%, so the description must compensate, but it only clarifies 'value' and partially 'exact' via the REST path. It adds no meaning for limit, offset, order, reverse, timeout, or hidebroken, all of which remain unexplained.
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 names a specific verb and resource: 'Find stations by name', and even includes the REST path. It is clear about what the tool does, but it does not differentiate this from overlapping siblings like search_radio_stations or advanced_station_search.
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?
There is no guidance on when to use this tool versus alternatives such as search_radio_stations or advanced_station_search. The phrase 'Find stations by name' implies a use case, but no explicit context, exclusions, or when-not-to-use conditions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_stations_by_stateB
Find stations by state/region (GET /json/stations/bystate[/exact]/{state}).
| Name | Required | Description | Default |
|---|---|---|---|
| exact | No | ||
| limit | No | ||
| order | No | votes | |
| value | Yes | ||
| offset | No | ||
| reverse | No | ||
| timeout | No | ||
| hidebroken | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It reveals the endpoint shape, including an optional /exact path, but does not describe ordering, pagination, error behavior, or the meaning of exact matching. This is a significant gap for a tool with 8 parameters.
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 a single, front-loaded sentence with no filler. The endpoint is included in parentheses, adding useful disambiguation without bloating the text.
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?
Given 8 parameters and no annotations, the description is far from complete. It does not explain exact matching, defaults, pagination, ordering, or timeout/hidebroken behavior, so an agent cannot reliably invoke the tool with the correct configuration.
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 0%, so the description needed to explain the parameters. The endpoint hints that value maps to {state} and exact maps to the /exact path segment, but the remaining six parameters are entirely undocumented, leaving the agent to guess their semantics.
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: find stations by state/region, and the endpoint path confirms the exact query. This clearly distinguishes it from siblings like find_stations_by_country and find_stations_by_tag.
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 state/region filter implies when this tool is appropriate among the sibling find_* tools, but there is no explicit guidance about when to use it versus alternatives or when to use the exact variant. Usage context is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_stations_by_tagB
Find stations by tag/genre, e.g. "chill" (GET /json/stations/bytag[/exact]/{tag}).
| Name | Required | Description | Default |
|---|---|---|---|
| exact | No | ||
| limit | No | ||
| order | No | votes | |
| value | Yes | ||
| offset | No | ||
| reverse | No | ||
| timeout | No | ||
| hidebroken | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden. The 'GET' method and 'Find' wording indicate a read-only lookup, and the [/exact] route hint reveals an exact-match variant. But it does not disclose auth requirements, rate limits, pagination behavior, or handling of broken stations beyond what schema defaults imply.
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 a single efficient sentence, front-loading the action and resource before the parenthetical endpoint detail. It contains no wasted words, though its terseness contributes to the lack of parameter and alternative guidance.
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 an 8-parameter tool with no annotations and no schema descriptions, this definition is incomplete. The output schema covers return shape, but the description omits how to control ordering, pagination, reverse behavior, timeout, and broken-station filtering, all of which an agent may need to invoke the tool correctly for non-default use cases.
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 0%, so the description needed to compensate. It only illustrates 'value' with 'chill' and hints at 'exact' via the route, while leaving limit, offset, order, reverse, timeout, and hidebroken unexplained. These parameter names are somewhat self-explanatory, but the description adds little meaning 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?
The description clearly identifies the verb ('Find'), the resource ('stations'), and the specific dimension (tag/genre), with a concrete example ('chill') and the endpoint. It distinguishes this tool from sibling find_stations_by_* tools through the tag/genre focus, though it does not explicitly name those alternatives.
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 phrasing 'Find stations by tag/genre' gives clear context for when to use the tool, and the example makes the intended input concrete. However, it provides no explicit guidance about when not to use it or when to prefer sibling tools such as advanced_station_search or find_stations_by_name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_directory_statsB
Directory server statistics (GET /json/stats): station counts, checks, clicks, etc.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden; it explicitly states GET /json/stats, signaling a read-only operation, and lists the kinds of data returned. However, it does not disclose auth needs, response shape, or rate limits, and the trailing 'etc.' leaves behavior underspecified.
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 one tight sentence that front-loads the tool's purpose and endpoint before giving concrete examples. The 'etc.' is a minor vague addition, but overall the definition is concise and well ordered.
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?
The tool is simple: one optional parameter, no output schema, and no nested objects, so the description covers the basic resource and a few return categories. Still, usage context and the full scope of the statistics are left to 'etc.', making it adequate but not complete.
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?
The only parameter, timeout, has 0% schema description coverage, and the tool description never mentions timeout. The schema's title and default are self-explanatory, but the description adds no semantic value for the parameter.
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 names the resource ('Directory server statistics') and the endpoint, plus concrete result categories like station counts, checks, and clicks. It is clear about what the tool exposes, though it does not explicitly differentiate itself from sibling list_directory_servers beyond the 'stats' wording.
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 description gives no guidance on when to use this tool versus alternatives such as list_directory_servers or the various station statistics tools. There are no use cases, exclusions, or decision rules stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_most_clicked_stationsC
Most-clicked stations (GET /json/stations/topclick/{count}).
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It only discloses that this is a GET endpoint, implying a read-only operation, but it does not mention response behavior, timeout handling, rate limits, or other important behavioral details.
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 a single compact sentence with no unnecessary words. It front-loads the core identifying information, though it could have added a bit more useful context without becoming verbose.
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 tool with no annotations and very limited schema coverage, the description is too sparse. It omits timeout semantics, usage guidance, and behavioral context. The output schema covers return values, but the agent still lacks enough information to choose this tool correctly among many similar sibling tools.
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 0%, and the description only references count via the path placeholder. It does not explain what count controls beyond being in the URL, and it says nothing about timeout or their defaults despite both being defined 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 clearly identifies the resource as 'Most-clicked stations' and gives the exact endpoint, making the purpose understandable. It doesn't explicitly contrast with siblings like get_recently_clicked_stations or get_top_voted_stations, but the meaning is still clear.
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?
There is no guidance on when to use this tool versus alternatives such as get_top_voted_stations or get_recently_clicked_stations. The description only restates the endpoint and provides no usage context, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_now_playingA
Get the track currently playing on a radio station.
Args:
station_name: Station name, e.g. "Smooth FM Sydney" or "smooth 95.3".
timeout: Seconds for directory + stream reads; clamped to 1-60, and
shared as an overall deadline across all candidates tried.
Returns:
Dict with artist, title, raw_title, station_matched, country and
stream_url (track fields null when the station is reachable but
sending no track titles right now). Raises (as an MCP error) when
nothing is found.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | ||
| station_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden and meets it thoroughly. It specifies the returned dict fields, the null-field behavior when a reachable station sends no track titles, the MCP error raised when nothing is found, and the timeout clamping (1-60s) with shared-deadline semantics across candidates.
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 front-loaded with the one-sentence purpose, then organized into Args and Returns sections. Every sentence earns its place — examples, clamping behavior, null semantics, and error behavior all add operational value without repetition.
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?
The description compensates well for the missing output schema and annotations by covering return fields, null behavior, error behavior, and parameter semantics. Minor gaps remain: the station_matched field and the candidate-matching mechanism are mentioned but never explained, and there is no note about side effects or read-only status.
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 0%, so the description must explain both parameters, and it does. station_name gets real-world examples ('Smooth FM Sydney' or 'smooth 95.3'), and timeout gains meaning beyond its integer type: units, clamping range, and its role as a shared deadline across all candidate station attempts.
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 lead sentence uses a specific verb and resource: 'Get the track currently playing on a radio station.' This clearly differentiates it from sibling tools like get_station_by_uuid (metadata lookup) or search_radio_stations (discovery), and the return fields (artist, title) reinforce the unique purpose.
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 context is implied — an agent would infer to call this when it needs the currently playing track for a named station — but the description never explicitly states when to prefer it over the 29 sibling tools, nor names alternatives or exclusions. No statement distinguishes it from resolve_station_stream_url, which an agent could easily confuse it with.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recently_clicked_stationsC
Most recently clicked stations (GET /json/stations/lastclick/{count}).
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals the HTTP method GET and the notion of recency, but does not explain ordering, recency window, click-source semantics, or whether the operation is read-only in any explicit way.
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 a single sentence with no fluff and the endpoint is front-loaded. It is appropriately short, though it sacrifices useful detail for brevity.
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 no annotations, zero schema description coverage, and no usage guidance, the description is under-specified for reliable invocation. The presence of an output schema does not compensate for missing parameter semantics and behavioral context.
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 0%, so the description must compensate for the missing parameter documentation. It gives partial meaning to 'count' via the endpoint path, but does not explain valid ranges, default behavior, or the 'timeout' parameter at all.
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 clearly identifies the resource and operation: most recently clicked stations, backed by the GET endpoint. It does not explicitly distinguish itself from get_most_clicked_stations, but the word 'recently' provides some differentiation.
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?
No guidance is provided about when to use this tool versus get_most_clicked_stations, get_recently_updated_stations, or register_station_click. The description leaves selection entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recently_updated_stationsB
Most recently changed/added stations (GET /json/stations/lastchange/{count}).
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It discloses the HTTP method (GET), implying a read-only operation, and states that stations are ordered by recent change, but it omits timeout behavior, count bounds, and any error or rate-limit behavior.
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 a single sentence containing only the essential purpose and endpoint, with no filler or redundancy. It front-loads the semantic content before the technical path, making it maximally concise.
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 read-only list with an output schema, the description is nearly adequate: the endpoint and count placeholder cover the core invocation, and the output schema covers return shape. However, the missing timeout semantics and lack of explicit usage guidance leave notable gaps.
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 0%, and the description only indirectly explains count via the endpoint path placeholder {count}. The timeout parameter is completely unexplained in both the schema and the description, leaving the agent to infer its meaning and units.
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 clearly states the tool returns 'most recently changed/added stations' and provides the GET endpoint, making the resource and action identifiable. The phrase 'changed/added' distinguishes it from siblings like get_recently_clicked_stations, though it relies on the tool name for the explicit verb.
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 description implies when to use this tool—when needing recently changed or added stations—but does not explicitly contrast it with siblings such as get_recently_clicked_stations or provide when-not-to-use guidance. The usage context is present but stated only as a noun phrase.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_station_by_uuidA
Get one station by its stationuuid (GET /json/stations/byuuid/{uuid}).
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | ||
| station_uuid | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description includes the HTTP GET method, which conveys that this is a read-only operation, and 'one station' signals the cardinality of the response. No annotations exist, so the description carries some burden, but it does not disclose error behavior, timeout semantics, or response details.
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 one concise sentence that front-loads the core operation and includes the endpoint for reference. There is no redundant or wasted wording.
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?
The tool is simple, but there is no output schema or annotations, and the description omits timeout semantics and explicit alternatives. It is minimally adequate for invoking the tool, but an agent would benefit from knowing what happens on invalid UUIDs and what the returned station object contains.
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 0%, so the description must compensate. It clarifies that station_uuid is the identifier used in the endpoint, but it does not explain the timeout parameter at all, leaving part of the behavior undocumented.
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 clearly states the operation: retrieve one station by stationuuid. It is distinct from the many search/list siblings, which look up by name, country, language, etc., while this tool targets a known UUID directly.
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 description implies the proper use case: when you already have a stationuuid and want that specific station. However, it does not explicitly state when not to use it or point to a preferred alternative for lookups without a UUID.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_station_check_historyA
Automated stream-check history for a station (GET /json/checks).
Args:
station_uuid: Station uuid.
seconds: Only checks newer than this many seconds. The API ignores
`limit` here (verified live), so use `seconds` to bound the
response — e.g. 86400 for the last day. Defaults to 0, which
returns the FULL history (can be thousands of entries).
| Name | Required | Description | Default |
|---|---|---|---|
| seconds | No | ||
| timeout | No | ||
| station_uuid | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does substantial work: it discloses the GET endpoint (implying read-only), a verified API quirk ('The API ignores limit here (verified live)'), and the response-size trap that the default returns 'the FULL history (can be thousands of entries)'. It stops short of 5 because authentication needs and error/rate-limit behavior are not addressed, but for a read endpoint with an output schema this is strong.
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 purpose sentence is front-loaded, followed by a compact args block where every line earns its place — the 'verified live' note and the 86400 example are high-value specifics rather than filler. No wasted words and no redundancy with the 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?
The definition is largely complete for an agent to call this correctly: the required parameter is identified, the primary behavioral trap (full history by default) is disclosed, and the existing output schema relieves it of explaining return values. The silent timeout parameter is the notable omission, and with zero annotations the description alone must carry the safety profile — which it does adequately via the GET disclosure.
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 0%, so the description must compensate, and it excels for the seconds parameter: units, a concrete example (86400 for the last day), the API quirk, and the consequence of the default. station_uuid gets only a restatement ('Station uuid') and timeout is entirely undocumented in both schema and description, leaving a real gap in an otherwise strong compensation.
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 resource — 'Automated stream-check history for a station' — and names the exact endpoint (GET /json/checks), which clearly distinguishes it from sibling tools that search, list, click, or vote on stations. It falls short of 5 because the verb is implied rather than explicit and 'stream-check' is domain jargon left undefined, so an agent must infer what a check actually contains.
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 description gives practical operational guidance for the seconds parameter — how to bound the response and the consequence of the default — which is genuinely useful for invoking the tool correctly. However, it never states when to prefer this tool over alternatives or when not to use it, so tool-selection guidance is only implied by the tool's unique purpose among the siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_top_voted_stationsC
Highest-voted stations (GET /json/stations/topvote/{count}).
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the behavioral burden. It implies a read-only GET operation and sorting by votes, but it does not disclose timeout behavior, count handling, or any other caveats. The description adds little beyond the endpoint itself.
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 extremely concise with no redundant wording, and the endpoint template adds practical value. However, it reads more like a title than a self-contained description, so it earns high but not full marks.
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?
While an output schema exists, the description lacks usage alternatives and behavioral context. An agent cannot determine when to choose this over similar list tools or what the timeout parameter means. For a two-parameter tool with no annotations, this is insufficient context.
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 0%, so the description should compensate. The 'count' parameter is partially inferable from the URL template, but 'timeout' is completely unexplained. Neither parameter gains meaningful semantic context beyond its name.
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 specifies the resource ('highest-voted stations') and the endpoint with GET, making the retrieval intent clear. It is distinguishable from siblings like get_most_clicked_stations or get_recently_updated_stations, though it lacks an explicit verb such as 'retrieve' or 'list'.
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?
There is no guidance on when to use this tool versus alternatives. Siblings like get_most_clicked_stations or get_recently_updated_stations are not contrasted, so the agent must infer usage purely from the phrase 'highest-voted'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_all_stationsB
List stations in the directory (GET /json/stations). Paginate with offset/limit.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| order | No | votes | |
| offset | No | ||
| reverse | No | ||
| timeout | No | ||
| hidebroken | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It does reveal that the operation is a read-only GET and that results are paginated, which is useful. However, it does not mention default filtering behavior like hidebroken, ordering semantics, or potential large-result implications.
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 short sentences with the primary action front-loaded and the pagination instruction placed immediately after. There is no filler or redundant restatement.
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?
Even though all parameters are optional and an output schema exists, the description leaves four parameter semantics undocumented and provides no selection guidance among a large sibling set. An agent can make a default call, but cannot intentionally control ordering, timeout, or broken-station filtering.
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 0%, so the description must compensate. It only explains offset/limit via 'Paginate with offset/limit'; the other four parameters (order, reverse, timeout, hidebroken) are left entirely to inference from their names and defaults.
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 identifies the exact action ('List stations') and the target resource ('in the directory'), reinforced by the explicit endpoint GET /json/stations. This distinguishes it from search/find siblings, even though it does not name them.
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?
No guidance is given on when to use this tool versus search_radio_stations, advanced_station_search, or the many find_stations_by_* alternatives. The only usage instruction is the pagination note, which addresses how to call it, not when to select it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_codecsA
Stream codecs with station counts (GET /json/codecs[/{filter}]).
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | ||
| timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that this is a GET (read) operation and that the response includes station counts, which is useful. However, it does not mention behavior such as pagination, error cases, rate limits, or the exact effect of the filter beyond being part of the URL path.
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 entire description is one compact sentence that leads with the primary action, follows with the key output detail (station counts), and ends with the endpoint syntax. No redundant words or filler.
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?
Given the tool's simplicity and the presence of an output schema, the description covers the core purpose and endpoint. However, it leaves the timeout parameter and usage guidance unaddressed, and without annotations it does not fully stand alone as a complete specification.
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 0%, so the description must compensate. It adds meaningful semantics for the 'filter' parameter by showing it appears as a path segment in the endpoint. However, the 'timeout' parameter is not mentioned at all, leaving its units and behavior unspecified.
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 ('Stream'), the resource ('codecs'), and the unique output ('with station counts'). It includes the endpoint path, which further clarifies the action. Among sibling tools, this is the only one targeting codecs as the primary resource, so it is clearly distinguishable.
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 description implies the tool is used when you need a list of codecs with station counts, and the endpoint hints at optional filtering. However, it provides no explicit guidance on when to choose this over related siblings like find_stations_by_codec, nor does it mention any exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_countriesC
Countries in the directory with station counts (GET /json/countries).
| Name | Required | Description | Default |
|---|---|---|---|
| order | No | name | |
| reverse | No | ||
| timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It conveys a GET/list operation returning countries with counts, which signals a read-only action, but it does not describe ordering, pagination, or response behavior beyond what the output schema already covers.
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 a single efficient sentence and includes the useful endpoint. It is concise, though written as a noun phrase rather than a clear imperative sentence.
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?
The output schema covers return structure and all parameters are optional with defaults, so the tool is usable as-is. However, the lack of sibling differentiation and parameter semantics leaves an agent without enough context to confidently decide between this and list_country_codes or to customize ordering.
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 0% and the description does not mention order, reverse, or timeout. It neither defines valid values (e.g., what order options are accepted) nor otherwise compensates for the undocumented parameters.
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 identifies the resource ('countries in the directory') and a distinguishing feature ('with station counts'), plus the exact endpoint. It stops short of an explicit verb like 'lists' and does not contrast with list_country_codes, so it is clear but not fully differentiated.
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?
There is no guidance on when to choose this tool over closely related siblings such as list_country_codes or find_stations_by_country. The only usage signal is the implicit phrase 'with station counts', which is not enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_country_codesA
ISO 3166-1 country codes in the directory with station counts (GET /json/countrycodes).
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It reveals that this is a GET operation, that it returns country codes, and that station counts are included. It does not specify behavior for countries with zero stations, but for a simple listing endpoint the key behavior is adequately disclosed.
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 sentence that front-loads the resource and result contents, then appends the endpoint. Every word earns its place; there is no filler or repetition.
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?
The tool is simple with one optional generic parameter and an output schema, so the description covers the essential call context. The main gap is the lack of guidance distinguishing this from closely related country/list endpoints, but the definition remains sufficient for correct invocation.
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 0%, and the only parameter, timeout, is not mentioned in the description. The description adds no meaning beyond the schema's name/default, leaving the timeout's behavior and units to inference.
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 names a specific verb ('list'), a clear resource ('ISO 3166-1 country codes'), and a distinguishing feature ('with station counts'). It also gives the exact endpoint, making the tool's purpose unambiguous and differentiating it from siblings like list_countries or find_stations_by_country_code.
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 description implies usage: call this when you need ISO 3166-1 country codes with station counts. However, it does not explicitly state when to prefer this over related tools such as list_countries or find_stations_by_country_code, nor does it provide any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_directory_serversB
Known directory mirror servers (GET /json/servers).
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden. It does indicate a read-only GET request and that the servers are 'known', which is a helpful safety signal. However, it does not explain the timeout parameter's effect, whether network access is expected, or any response behavior beyond 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?
The description is extremely short and front-loaded, with no filler. The endpoint annotation in parentheses is a compact way to communicate the retrieval mechanism. It sacrifices some useful detail, but what is present is well-structured.
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-optional-parameter tool with an output schema, the description is minimally adequate: the resource is identified and the HTTP method is shown. It is incomplete on usage guidance and timeout semantics, but the low complexity of the tool keeps the gap from being severe.
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 0%, so the description needed to explain the timeout parameter, but it does not mention it at all. The only compensation is that 'timeout' is a fairly self-explanatory parameter name, and the schema provides a default value; no units or behavioral meaning are added.
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 identifies the resource ('known directory mirror servers') and the HTTP endpoint (GET /json/servers), which is enough to distinguish it from the many list_* siblings that target different resources. It relies on the tool name's 'list' verb rather than stating an explicit verb, so it is clear but not maximally explicit.
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?
No guidance is given about when to use this tool or when to prefer one of the many sibling listing tools. The description simply states what the tool returns, leaving the agent to infer appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_languagesA
Broadcast languages with station counts (GET /json/languages[/{filter}]).
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | ||
| timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the behavioral disclosure burden. It does state the HTTP method (GET) and the result shape (languages with station counts), conveying a read-only aggregate lookup. However, it does not mention auth, rate limits, pagination, or empty-result behavior.
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 a single sentence with no filler. The main purpose is front-loaded, and the endpoint is included as compact useful precision rather than clutter.
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 two-parameter list call with an output schema, the description is adequate but has clear gaps. It omits filter semantics and timeout meaning, and with no annotations or schema-level documentation, the agent is left to guess on non-default usage.
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 0%, so the description must compensate for the two parameters. It only shows filter as a URL path placeholder and says nothing about valid filter values or format; the timeout parameter is entirely unexplained. An agent cannot confidently construct a non-default filter from this text.
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 clearly states the operation and resource: 'Broadcast languages with station counts' and specifies the GET endpoint. This distinguishes it from sibling station-search tools because it returns aggregate counts per language rather than individual station records.
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 description implies the use case—retrieve available languages and their station counts—but it does not explicitly state when to prefer this tool over siblings like find_stations_by_language or other list_* tools. No exclusions or alternative routing are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_statesA
States/regions with station counts (GET /json/states[/{country}]).
Country must be the exact directory name, e.g. "Australia".
| Name | Required | Description | Default |
|---|---|---|---|
| country | No | ||
| timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It usefully reveals that this is a GET call, that country is an optional path segment, and that results include station counts. However, it does not disclose timeout semantics, behavior when country is omitted, or any other request/response traits.
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 short sentences with no filler. The primary purpose is front-loaded, and the country constraint is stated immediately afterward in an efficient, scannable way.
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, read-only list tool with an output schema, the description is largely sufficient: it states the resource, endpoint, country constraint, and optional path behavior. Minor gaps remain around timeout meaning and the exact result when country is absent, but these are low-risk given the schema defaults and output schema.
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 0%, so the description must compensate. It adds meaningful semantics for the country parameter, including exact directory name requirement and an example ('Australia'), and the path notation shows the parameter is optional. The timeout parameter, however, receives no additional explanation beyond the schema default.
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 opens with 'States/regions with station counts', which clearly identifies the tool's purpose and resource, and reinforces it with the endpoint path 'GET /json/states[/{country}]'. It is distinguishable from station-level search siblings, though it does not explicitly name which sibling it is not.
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 description implies when to use this tool: when you need states or regions along with station counts. It provides a specific usage rule ('Country must be the exact directory name') but does not explicitly state when to prefer this over alternatives like find_stations_by_state or list_countries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tagsB
Tags/genres with station counts (GET /json/tags[/{filter}]).
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | ||
| timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It communicates that this is a GET request returning tag/genre counts with an optional filter path segment. It does not disclose ordering, filter matching behavior, pagination, or response details, but the output schema exists and the core behavior is reasonably clear.
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 a single sentence, front-loading the resource and output and then providing the endpoint. There is no filler, and every element earns its place. It is highly scannable and appropriately compact.
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?
The output schema covers the return shape, and this is a simple read-only listing tool. However, the meaning of the filter parameter and the distinction from sibling find_stations_by_tag are left ambiguous. It is adequate for a basic call but has clear gaps that could lead an agent to misuse the filter or choose the wrong sibling.
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 0%, so the description must compensate. It only hints that 'filter' is a path segment and says nothing about its format, matching rules, or allowed values. The 'timeout' parameter is completely unexplained. With two parameters and both undocumented, the description under-delivers.
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 identifies the resource ('tags/genres') and the output ('station counts'), and includes the endpoint path (GET /json/tags[/{filter}]). It lacks an explicit verb, but the tool name 'list_tags' makes the operation clear. It does not explicitly differentiate from sibling find_stations_by_tag, but the resource and output are specific enough.
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 intended use is implied: call this when you need tags/genres with station counts. There is no explicit guidance about when to prefer this over find_stations_by_tag or other list_* tools, and no mention of exclusions or prerequisites. The optional filter in the endpoint hints at a use case but is not elaborated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
register_station_clickA
Register a click (listen) for a station (GET /json/click/{uuid}).
NOTE: increments the station's public click counter. Returns the station record.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | ||
| station_uuid | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the disclosure burden and does disclose a key side effect: 'increments the station's public click counter'. It also states the return value. It omits edge cases like auth/rate limits, but the main behavioral trait is explicit.
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 short sentences with no wasted text; the primary action is front-loaded and the side-effect note is placed where it cannot be missed.
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 two-parameter tool with no output schema, the description provides the essential behavior, side effect, and return value. It doesn't cover error behavior, but the complexity is low enough that this is a minor gap.
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 0%, so the description must compensate. It identifies the station via the endpoint '{uuid}', which maps to station_uuid, but it never explains the timeout parameter. Thus only half the parameters receive added meaning.
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 action and resource: 'Register a click (listen) for a station', and even ties it to the exact endpoint. This makes it clearly distinct from the many search/list sibling tools.
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?
Clear context is given: use it to record a click/listen and it will increment the station's public counter. It does not explicitly name alternatives or say when not to use it, but the mutation-like behavior is self-evident against the read-oriented sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_station_stream_urlA
Get the current stream URL for a station (GET /json/url/{uuid}). Also counts as a click.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | ||
| station_uuid | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It usefully discloses that the call 'also counts as a click,' which is a non-obvious side effect. However, it does not explain consequences of that click, any auth requirements, rate limits, or error behavior, leaving significant behavioral context unstated.
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 short sentences with no filler. The core purpose is front-loaded, followed by the critical side-effect note. Every word earns its place.
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?
The description states the primary return value (the current stream URL) and the endpoint, which is helpful given there is no output schema. However, it omits timeout behavior, the practical meaning of 'counts as a click,' and guidance on when to choose this tool over a sibling like register_station_click. It is adequate for a simple tool but has clear gaps.
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 0%, so the description must compensate. It clarifies that station_uuid identifies the target station and that the operation resolves its stream URL, but it does not explain the timeout parameter at all. The timeout's unit, meaning, and effect remain undocumented, and the description only partially covers parameter semantics.
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 uses a specific verb and resource: 'Get the current stream URL for a station.' It also includes the API endpoint pattern, which reinforces what the tool does. This distinguishes it from siblings like get_station_by_uuid (metadata) and register_station_click (explicit click registration), especially with the side-effect note.
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 description implies usage: call this when you need the stream URL rather than station metadata, and be aware it also counts as a click. However, it does not explicitly state when not to use it or mention any alternatives, such as get_station_by_uuid for metadata-only needs or register_station_click for explicit click registration.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_radio_stationsB
Search the Radio Browser directory for stations matching a name.
Args:
query: Free-text station name, e.g. "smooth sydney".
limit: Max results; clamped to 1-20.
Returns:
List of station dicts with name, stream URL, codec, bitrate, country.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It conveys a read-style search operation, describes the 'limit' clamping behavior, and lists returned fields. However, it does not disclose details like matching semantics, empty-result behavior, or error conditions.
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 compact and well-structured with Args and Returns sections. Every line contributes useful information, and the main purpose is front-loaded in the first sentence.
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?
The tool has an output schema and only two simple parameters, so the description is mostly sufficient for invocation. However, given the large sibling list with overlapping search tools, it lacks the contextual routing needed to confidently select this tool over alternatives like find_stations_by_name.
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 0%, so the description must compensate. It does: 'query' is explained as free-text station name with an example, and 'limit' is described as max results clamped to 1-20. This adds meaningful semantic value beyond the bare 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 verb ('Search'), resource ('Radio Browser directory'), and object ('stations matching a name'). It is clear what the tool does, but it does not differentiate itself from the similarly named sibling 'find_stations_by_name' or the broader 'advanced_station_search'.
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 description gives no guidance on when to prefer this tool over the many sibling search tools. There are no exclusions, prerequisites, or indications of which sibling to use instead, which is a significant gap given the large sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vote_for_stationB
Vote for a station (GET /json/vote/{uuid}). NOTE: increments the public vote counter.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | ||
| station_uuid | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose the key side effect—increments the public vote counter—which is helpful and not misleading. However, it does not state whether votes are idempotent, whether repeated votes are tracked, or whether any authentication or rate limiting applies.
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 very brief and front-loaded: the main action is in the first five words, and the important side-effect note is clearly appended. Every sentence adds distinct information, and there is no filler or repetition of 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?
For a state-changing tool with no annotations, no output schema, and one poorly documented parameter, the description leaves important operational details unspecified: return value, error behavior, timeout semantics, and vote-counting rules. It is functional but only minimally complete for an agent deciding how to invoke it correctly.
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 0%, so the description must compensate for the undocumented parameters. It gives no explanation of the timeout parameter and only indirectly hints at station_uuid via the endpoint path {uuid}. The parameter names are somewhat self-explanatory, but the description adds almost no semantic value beyond what the schema already shows.
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 clearly states the action ('Vote'), the resource ('a station'), and the HTTP endpoint. It also includes the key differentiating detail that the action increments the public vote counter, which separates it from sibling tools like register_station_click and the various search/list tools.
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 description gives no guidance on when to use this tool versus alternatives. It does not mention that register_station_click is for clicks, that get_top_voted_stations is for reading results, or any prerequisites or constraints such as whether the user must be logged in or how many votes are allowed.
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. Dates show when Glama detected each change.
29 tool updates
v0.1.0- First observed
add_station - First observed
advanced_station_search - First observed
find_stations_by_codec - First observed
find_stations_by_country - First observed
find_stations_by_country_code - First observed
find_stations_by_language - First observed
find_stations_by_name - First observed
find_stations_by_state - First observed
find_stations_by_tag - First observed
get_directory_stats - First observed
get_most_clicked_stations - First observed
get_now_playing - First observed
get_recently_clicked_stations - First observed
get_recently_updated_stations - First observed
get_station_by_uuid - First observed
get_station_check_history - First observed
get_top_voted_stations - First observed
list_all_stations - First observed
list_codecs - First observed
list_countries - First observed
list_country_codes - First observed
list_directory_servers - First observed
list_languages - First observed
list_states - First observed
list_tags - First observed
register_station_click - First observed
resolve_station_stream_url - First observed
search_radio_stations - First observed
vote_for_station
TDQS
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.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Radio MCP — wraps Radio Browser API (free, no auth)
TheAudioDB MCP — community music metadata database.
Podcast Index MCP — wraps the Podcast Index API (podcastindex.org)
- UnifAPIOAuthcom.unifapi
Hosted MCP server for live public-data APIs and Skills for AI agents.
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server that enables natural language control of internet radio from Claude Code, with access to 30,000+ global stations, auto-playback via mpv, and a real-time status line with audio spectrum visualization.7MIT
- AlicenseNot gradedqualityDmaintenanceEnables control of Spotify playback, track search, and user profile retrieval via MCP tools with automatic OAuth token management.1093MIT
- FlicenseAqualityDmaintenanceExposes Spotify controls as MCP tools for playback, playlist management, and AI playlist generation; includes a web app and supports multi-user profiles.14-
- FlicenseAqualityCmaintenanceMCP server for KaboomKartell radio, enabling AI assistants to query live tracks, vote for songs, and access radio stats and schedule.15-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/maxim75/radiobrowser-api-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server