MCP server for RadioCLI, a terminal-first world radio receiver. Provides tools for searching stations, playing radio, managing favorites, controlling playback, managing alarms, and configuring appearance and agent preferences.
RadioCLI MCP server demonstrates solid tool design with 29 well-named, action-verb-prefixed tools (radio_play, radio_search, radio_create_alarm, etc.). All tools have descriptions (avg ~120 chars, within 10-1024 baseline). Input schemas are present for most tools with proper Zod validation and type constraints (enums, min/max bounds). However, output schemas are not documented in the visible code, responses are inferred but not formally specified. Parameter descriptions are present but sometimes terse (e.g., 'Alarm ID' vs 'Unique identifier for the alarm'). Error handling is basic; no recovery guidance or actionable error messages visible. Tool composition is strong, each tool has one clear responsibility, and chaining is well-supported (e.g., radio_search returns opaque IDs for radio_play). Security is good: no secrets in parameters, destructive operations (delete_alarm, install_update) require explicit confirmation. Naming is excellent, verb_noun pattern throughout, with clear distinctions (radio_pause vs radio_resume vs radio_stop). The MCP instructions are comprehensive and guide agent behavior well.
List saved favorites, recent stations, popular stations, nearby stations, countries, or recent track titles.
Clear the selected AirPlay receiver and return to local playback (macOS only).
Configure what radio_run_completion_preset does: play/stop/pause/resume, station source, conflict behavior, and optional UI override.
Create a new alarm with a schedule (once or recurring), optional label, volume, fade, and fallback station.
Delete an alarm by ID. Requires explicit confirmation.
Dismiss an active ringing alarm by ID.
List available display themes and receiver styles and show the current selections.
Output schemas not documented. Tools like radio_status, radio_search, radio_browse, radio_list_alarms return structured data but response fields are not formally specified in visible code. LLMs cannot plan downstream tool calls without knowing what fields to expect.
Parameterless tools lack input schema documentation. radio_pause, radio_resume, radio_stop, radio_next, radio_previous, radio_run_completion_preset, radio_list_alarms, radio_list_airplay_receivers, radio_clear_airplay_receiver have no visible input parameters but no explicit schema=null or empty schema shown. Ambiguous whether they accept no input or schema is omitted.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2026-07-28+ | v2 |
Install a pending RadioCLI update. Requires explicit user approval.
List available AirPlay receivers on the local network (macOS only).
List all configured alarms with their schedules, enabled status, and current ring state.
Play the next station in the queue created by the last radio_play request.
Pause playback. Safe to call repeatedly.
Play through RadioCLI using a searched/saved station id, or choose from recent, favorites, popular, or a country. For "play my most recent radio station", call this directly with source="recent" and index=0. By default this opens the normal RadioCLI TUI in a terminal window; set open_ui=false only when the user requests headless playback.
Play the previous station in the current queue.
Resume paused playback without changing stations.
Run the user-configured completion action immediately after the current task completes. This is a one-shot radio action, not a reason to create a goal, automation, reminder, task record, or monitoring task.
Search RadioCLI's public station directory by name, genre, language, city, region, or country. Use this—not web search or a browser—for requests such as "play a station from New York", then pass a returned opaque id to radio_play.
Choose whether agent-started playback opens the normal TUI and whether it switches an open TUI to Now Playing.
Select an AirPlay receiver for playback by index or receiver code (macOS only).
Change the RadioCLI display color theme or visual receiver style. An open TUI updates immediately.
Explicitly add or remove a favorite. Omit station_id to act on the current station, as in "favorite this".
Explicitly mute or unmute playback; this is not a toggle.
Set playback volume from 0 through 100 and save it as the RadioCLI preference.
Snooze an active ringing alarm for a specified number of minutes.
Get local listening time, stations heard, active days, and streak statistics.
Get current playback, active station, queue, agent preferences, and whether alarm playback is active.
Stop ordinary interactive/headless playback. This never dismisses or modifies an alarm.
Update an existing alarm's schedule, label, volume, fade, fallback station, or enabled status.
Check the installed and latest RadioCLI versions and return the appropriate update command. This is read-only and never installs an update.
Error handling and recovery guidance absent. No visible error responses, validation messages, or actionable recovery hints (e.g., 'Station not found. Try radio_search() with a different query'). Agents cannot self-correct on failures.
Pagination not visible for list tools. radio_search accepts limit (max 30) and radio_browse accepts limit (max 50), but no cursor, offset, or total_count fields documented. Large result sets may be truncated without agent awareness.
Tool annotations (readOnlyHint, destructiveHint, idempotentHint) not visible in schema. Destructive tools (radio_delete_alarm, radio_install_update) and read-only tools (radio_status, radio_search) are marked in metadata but not in formal tool annotations. Modern MCP clients expect these hints in the tool definition.