AI MCP control for foobar2000. Control your music player with an AI assistant!
This server suffers from pervasive missing input schemas and absent parameter descriptions on the majority of tools. Of 19 tools, only 3 (list_library, list_playlists, list_playlist) have visible input schemas with parameter descriptions. The remaining 16 tools (add_tracks, remove_tracks, remove_all_tracks, move_tracks, set_active_playlist, set_playing_playlist, set_playback_state, play_at_index, set_focus, create_playlist, rename_playlist, delete_playlist, set_volume, toggle_mute, get_volume, list_current_track) expose only empty input objects {} with no visible parameter definitions, violating the core requirement that every parameter must have a type and description. Tool descriptions exist for some high-level tools but are missing entirely for 14 tools, and where present (list_library, list_playlists, list_playlist), they are adequate. The resource system (current_track_resource.cpp) shows proper implementation with URI-based subscriptions and change notification, but tool-level schema definitions are critically incomplete. No output schemas are documented. Error handling in safe_main_thread_call.h shows exception conversion to mcp_exceptions with generic messages ('internal_error', 'Unknown error'), providing no recovery guidance to LLMs. Tools that perform destructive operations (remove_tracks, remove_all_tracks, delete_playlist) lack any dry-run, confirmation, or permission-gate pattern.
Get tracks from the user's media library
Get tracks from a playlist
Get all playlists with their metadata (name, track count, last modified, active/playing status). Use this to discover available playlists and their GUIDs for use with other playlist tools. You can read the playlists://. resource to get the same data and subscribe to changes.
16 of 19 tools have NO input schema definitions (empty {} objects). This prevents LLMs from understanding what parameters are required, their types, ranges, or constraints.
14 of 19 tools completely lack descriptions. LLMs cannot determine when or why to select these tools.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 38 | <=2025-11-25 | v2 |
No output schemas are documented. LLMs cannot predict the structure of responses, hampering downstream tool composition and data extraction.
Destructive tools (remove_tracks, remove_all_tracks, delete_playlist) lack any confirmation, dry-run, or permission-gate mechanism. No error handling guides the LLM to request confirmation before executing irreversible operations.
Error messages from safe_main_thread_call.h are generic ('foobar2000 error: ...', 'Unknown error in foobar2000 operation') and provide no recovery guidance. Per pattern:recovery-guide, errors must tell the LLM what to do next.
No input validation or constraint documentation. The three tools with schemas (list_library, list_playlists, list_playlist) include query parameters that accept foobar2000 search syntax but do not validate against injection attacks or malformed queries. No description of valid query syntax is embedded in the parameter descriptions for LLM consumption.
Tool composition is broken: no tool returns the IDs or references needed for downstream calls. E.g., if list_library returns tracks, what does add_tracks accept as input to identify which tracks to add? Without visible schemas and output documentation, the chain is not verifiable.
No pagination or result-limit documentation. list_library and list_playlist mention 'limit' and 'offset' parameters, but do not document a total count or next_cursor field in responses. Large music libraries could produce massive result sets that blow context windows.