yit-player
Controls the mpv media player as the audio engine, managing audio decoding and network streaming via a detached background process.
Yit (No Tabs. Just Tunes.) Player π΅
The Fire-and-Forget Music Player for Developers.
Yit is a lightweight, headless, terminal-based audio player designed for flow states. It allows you to search, queue, and control music directly from your CLI without ever touching a browser or a heavy GUI.
It runs in the background (daemonized), meaning you can close your terminal, switch tabs, or keep coding while the music plays.
π Features
Daemon Architecture: The player runs as a detached background process. Your terminal is never blocked.
Instant Search: Uses
yt-dlpto fetch metadata in milliseconds.Smart Queue: Manage your playlist (
add,next,back,Loop) with simple commands.Cross-Platform: Works natively on Windows, macOS, and Linux.
Agent-Native: Built from the ground up to be controlled by AI Agents (Vibe Coding).
Learns Your Taste (Jarvis mode): Tracks what you finish vs. skip, builds a local taste profile, and DJs for you: personal mixes, endless radio, and an MCP server that lets Claude pick music like it knows you.
Related MCP server: Spotify MCP Server
π¦ Installation
pip install yit-playerRequirements
None! Yit automatically manages the
mpvaudio engine internally.Windows: Auto-downloads a portable
mpv.exeif missing.Mac/Linux: Uses system MPV (install via
breworaptif needed).
Troubleshooting: "Command/Path not found"
If you run yit and get an error, your Python scripts folder is not in your system PATH.
Solution: Run it like this instead (works 100% of the time):
python -m yit search "slava funk" -pβ‘ Quick Start
1. Search & Play
# Search for a song
yit search "funk sigilo"
# Auto-play the first result immediately
yit search "funk infernal" -p2. Control Playback
yit pause # (or 'p')
yit resume # (or 'r')
yit toggle # Toggle play/pause
yit stop # Kill the player3. Queue Management
yit add 1 # Add result #1 from your last search to the queue (use 1 - 5 to choose from search results)
yit queue # Show the current queue
yit next # Skip track (or 'n')
yit back # Previous track (or 'b')
yit clear # Wipe the queue4. Looping
yit loop # Loop the current track indefinitely
yit unloop # Return to normal playback5. Status
yit status # Check if currently Playing/Paused and Looped6. Favorites (β€οΈ)
Save your best tracks for later.
# list all favorites
yit fav
# Add to favorites
yit fav add # Add the CURRENTLY playing song
yit fav add 1 # Add result #1 from your last search
# Play favorites
yit fav play # Play ALL favorites (starting from #1)
yit fav play 3 # Play favorite #3
# Remove
yit fav remove 2 # Remove favorite #27. Jarvis Mode: it learns what you like π§
Every track you play is logged locally (~/.yit/plays.jsonl) with how long you actually listened, so Yit knows the difference between a song you finished and one you skipped after 5 seconds. Nothing leaves your machine.
yit dj # Personal queue: favourites you haven't heard lately + new songs like them
yit dj --discovery 0.7 # More discovery, fewer repeats
yit radio # Endless radio from the current song (YouTube Mix)
yit radio "kaavaalaa" # ...or from any song
yit mix "Artist - Song" "Artist2 - Song2" # Queue a hand-picked list
yit like # Love the current song (favorite + boost)
yit dislike [--artist] # Never again (optionally the whole artist); skips it
yit profile # See what Yit has learned about youSkip the cold start: export your YouTube Music history from Google Takeout (select YouTube and YouTube Music β history, JSON or HTML) and run:
yit import "Takeout/YouTube and YouTube Music/history/watch-history.json"π€ For AI Agents & Vibe Coding
Yit is designed to be self-documenting for AI context. If you are building an AI agent or using an LLM in your IDE:
Read context: Point your agent to AI_INSTRUCTIONS.md (included in the repo).
Discovery: Run
yit commandsto get a JSON list of all capabilities.State: Run
yit agentto get the full player state (Track, Time, Queue) in pure JSON.
Example Agent Output (yit agent):
{
"status": "playing",
"track": {
"title": "Never Gonna Give You Up",
"url": "https://..."
},
"position": 45.2,
"duration": 212.0,
"queue_length": 5
}Installation for Claude Desktop & AI IDEs (MCP)
Yit includes a built-in Model Context Protocol (MCP) server (yit-mcp). You can easily connect Yit to any supported AI IDE or desktop agent.
Add the following JSON configuration block to your client's MCP config file (e.g., mcp_config.json):
{
"mcpServers": {
"yit-player": {
"command": "yit-mcp",
"args": [],
"env": {},
"disabled": false
}
}
}Windows tip: if
yit-mcpisn't on your PATH (common withpip install --user), point the client at Python directly:"command": "C:\\Python314\\python.exe", "args": ["-m", "yit.mcp_server"]
Claude as your DJ
The MCP server ships with DJ instructions and taste-aware tools (get_listening_profile, dj_play_for_me, play_songs, start_radio, like_current_song, dislike_current_song, import_youtube_music_history). Then just talk to Claude:
"play something" β reads your profile, plays a personal mix for this time of day
"I need to focus for 2 hours" β hand-picks focus tracks from artists you love + similar ones you haven't heard
"more like this" β radio from the current song
"this is trash, never again" β dislikes and skips it; Yit remembers
π οΈ Architecture
Client: Python CLI (
yit) handles argument parsing and user signals.Daemon: A detached
mpvprocess handles audio decoding and network streaming.Communication: IPC (Inter-Process Communication) via Named Pipes (Windows) or Unix Sockets (Linux/Mac).
Persistence:
~/.yit/history.jsonstores your playback history and queue metadata.
β οΈ Disclaimer and Legal Notice
1. Educational Purpose Only
This software (Yit) is a proof-of-concept project designed strictly for educational and research purposes. Its primary goal is to demonstrate:
Advanced Python subprocess management and Daemon architecture.
Inter-Process Communication (IPC) using sockets and named pipes.
Memory-efficient resource management in CLI environments.
2. Third-Party Content
This tool acts as a command-line interface (CLI) wrapper for open-source media engines (mpv) and network libraries (yt-dlp).
No Content Hosting: This application does not host, store, distribute, or decrypt any copyrighted media content.
Streaming Only: It is designed for transient streaming of publicly available content. It does not include features to permanently download or "rip" media to the disk.
3. Terms of Service Users are responsible for ensuring their use of this tool complies with the Terms of Service of any third-party platforms they interact with. The developer of this tool assumes no liability for misuse, account suspensions, or legal consequences arising from the use of this software.
4. No Monetization This project is free and open-source. It is not monetized in any way, nor does it generate revenue from the content it accesses.
License
This project is licensed under the GNU General Public License v3.0 (GPLv3). This ensures the software remains free and open-source. Commercial distribution of this software as a closed-source product is strictly prohibited.
Contact
For any questions, please contact vijayaraj.devworks@gmail.com.
Available Tools
25 toolsadd_currently_playing_to_favoritesB
Adds the currently playing music track to the user's favorites list.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 does not state what happens if nothing is currently playing, whether duplicates are allowed, whether authentication is required, or what the output indicates.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. Every word contributes to conveying the action and target.
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 exists, so return values need not be described. However, for a mutation tool with no annotations, the description should ideally mention prerequisites such as an active playing state and duplicate-handling behavior.
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 tool has zero parameters, so the schema is empty and the baseline is 4. The description correctly indicates that the tool operates implicitly on the current playback state rather than requiring input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it adds the currently playing track to the favorites list. The phrase 'currently playing' differentiates it from add_search_result_to_favorites, though its relationship to like_current_song is not clarified.
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 explicit guidance on when to use this tool versus siblings like add_search_result_to_favorites or like_current_song. The agent must infer the use case from the name and description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_search_result_to_favoritesA
Adds a specific track number from the recent search results to favorites.
| Name | Required | Description | Default |
|---|---|---|---|
| number | 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 lacks behavioral details. It fails to disclose crucial behavioral traits for a mutation tool, such as whether the tool handles duplicates (e.g., if the track is already favorited), what happens if the track number is invalid, or if the favorite list updates immediately.
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 definition is a single, focused sentence that conveys the full scope of the tool efficiently without any wasted language.
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?
It is a minimum viable definition. It tells the agent *what* it does and *where* the input must come from (recent search results). However, for a mutation tool, it is insufficient because it provides no guarantees on success or failure states.
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 input schema defines 'number' as an integer, and the description clarifies it means a 'track number'. While this adds minor semantic context beyond the schema, the 0% schema description coverage means the description needs to do heavy lifting, and it doesn't specify the required format or bounds of this number.
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 is highly specific, using the verb 'Adds' and clearly defining the resource being operated on ('a specific track number') and the destination ('to favorites'). This makes it very easy for an agent to distinguish this tool from similar playback or search 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?
By specifying that the track must come 'from the recent search results,' the description provides an important context constraint on usage. It implicitly guides the user away from providing arbitrary track numbers, which is helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_to_queueB
Appends a track number from the latest search results directly to the end of the queue.
| Name | Required | Description | Default |
|---|---|---|---|
| number | 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 behavioral burden. It discloses that the track goes to the end of the queue, but not whether current playback continues, whether an empty queue is required or handled, what happens with an out-of-range number, or whether the queue persists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the verb, the input, and the destination of the effect all appear in one clause.
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 means return values need no explanation, and the one parameter's meaning is covered. However, for a state-mutating queue tool with zero annotation coverage, missing notes on error/out-of-range handling and interaction with playback leave it only adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% β the raw schema just says an integer named "Number" β but the description supplies the crucial semantics: it is an index into the most recent search results, not a track ID. Only the valid range and error behavior for bad numbers remain 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?
States a specific verb (appends) and resource (queue) plus the exact source of the input (track number from the latest search results), which separates it from play_search_result. It does not explicitly name that sibling, so differentiation is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"From the latest search results" implies the prerequisite that a search must precede this call, and "appends... to the end of the queue" implies it is non-disruptive queueing rather than playback. No explicit when-to-use/when-not or named alternative (e.g., play_search_result, add_search_result_to_favorites) is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clear_queueA
Clears all upcoming tracks from the queue except the one currently playing.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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, and the description does disclose the important behavioral nuance that the currently playing track is preserved. However, it does not state that this is a destructive/irreversible bulk removal, whether it affects history, or whether it requires an active player.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the scope exception is included in the same breath as the action rather than buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values needn't be explained, and with no parameters the description only needs to convey scope and effect β which it does. The remaining gap is the lack of any warning that the cleared queue is lost irreversibly.
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 tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a no-param tool applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (clears) and resource (queue/upcoming tracks), plus the key scope exception that the currently playing track survives. That detail alone separates it from get_current_queue (read) and add_to_queue (append), though it does not name siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer you'd call this to reset the queue before adding new tracks, but there is no explicit when-to-use, when-not-to-use, or alternative (e.g. skip_to_next_track) guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dislike_current_songA
Marks the current song as disliked so it's never recommended again, and skips it. block_artist=true also excludes that artist from all future recommendations.
| Name | Required | Description | Default |
|---|---|---|---|
| skip | No | ||
| block_artist | 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 and discloses key side effects: persistent exclusion from future recommendations, skipping the track, and artist-level blocking via block_artist. It does not mention reversibility, permissions, or rate limits, but the core behavioral impact is 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, front-loaded sentence that conveys the primary action and secondary parameter effect without any wasted words.
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 mutation tool with an output schema, the description covers the essential behavioral consequences: persistent dislike, skipping, and optional artist blocking. It could be slightly more complete by clarifying the skip toggle, but overall it gives enough context 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%, so the description must compensate. It explains block_artist=true well ('also excludes that artist from all future recommendations') and implies the skip behavior, but it does not clarify that skip can be set to false to avoid skipping, leaving one parameter's toggle semantics underspecified.
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 ('Marks the current song as disliked') and states the resulting behavior ('never recommended again, and skips it'). It clearly distinguishes this from sibling tools like like_current_song and skip_to_next_track.
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 it by describing the outcome (dislike and skip), but it does not explicitly name alternatives or conditions such as using skip_to_next_track instead when the user only wants to skip without disliking. The guidance 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.
dj_play_for_meA
Builds and plays a personal queue from the user's taste: favourites they haven't heard recently, mixed with new songs similar to what they love (via YouTube Mix). discovery = share of new-to-them songs (0 to 1).
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | ||
| discovery | 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 discloses the composition behavior and the meaning of the discovery blend, which is real value, but is silent on important side effects: whether it replaces or appends to the current queue, whether playback starts immediately, and any auth/subscription requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, purpose front-loaded, and the parameter clarification attached at the end where it is most useful. No 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?
An output schema exists so return values need no explanation, and the blending behavior is well captured. The remaining gap is queue-replacement and playback-start semantics for an unannotated mutating tool, plus the undocumented size parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It does well on discovery ('share of new-to-them songs (0 to 1)'), clarifying the range and intent, but 'size' (default 20) is never mentioned and must be guessed as queue length from the purpose sentence.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Builds and plays a personal queue from the user's taste,' with concrete composition logic (recent favourites + YouTube Mix similar songs). It implicitly contrasts with siblings like play_favorites or start_radio by describing the blend, but never names an alternative, so differentiation is inferential.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the personalization framing β an agent can infer this is for a curated mix rather than a plain playlist β but there is no explicit 'use this whenβ¦' or exclusion against play_favorites, start_radio, or play_songs, all of which overlap heavily.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_current_queueA
Returns the list of tracks currently in the playback queue.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 behavioral disclosure. It implies a read-only operation, but does not mention ordering, pagination, empty-queue behavior, or whether the queue reflects the current playback session.
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 clear sentence with no wasted words. The key information is front-loaded and easy to parse.
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 exists, so the description need not explain return values. For a zero-parameter read tool, the description is nearly complete; only minor behavioral details about queue ordering or scope are absent.
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 tool has zero parameters, so parameter semantics are not a concern. The description appropriately adds no parameter details because none exist.
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: returns the list of tracks in the playback queue. It is clearly distinguishable from siblings like add_to_queue, clear_queue, and get_player_status, 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?
Usage is strongly implied by the concept of the playback queue, but the description gives no explicit when-to-use guidance, prerequisites, or comparison against alternatives such as get_player_status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_listening_profileA
Returns what Yit has learned about the user's music taste as JSON: top artists and tracks (recency-weighted, from songs they actually finished), what they play at this time of day, recently played, often skipped, recent searches, favorites and dislikes. Call this before choosing music for vague or mood-based requests.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 and mostly meets it: it discloses the return format (JSON), the data provenance ('recency-weighted, from songs they actually finished'), and that skip and search history are included, which is non-obvious and behaviorally important. It omits any note on permissions, latency/cost, or how current the profile is, which a zero-annotation read tool could have mentioned.
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 and the data contents come first, with the actionable usage instruction last, so an agent learns the essentials in the opening clause. The long parenthetical field list is informative but slightly overstuffed given an output schema already exists.
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?
Because an output schema exists, the description need not document return values, and its job is mainly to justify when to fetch the profile, which it does. The only gap is freshness/refresh semantics of a 'learned' profile, which matters for an agent deciding how much to trust it.
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 tool takes no parameters, so there is nothing to disambiguate and the baseline of 4 applies. The description correctly does not invent arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Returns what Yit has learned about the user's music taste') and enumerates the concrete contents: top artists/tracks, time-of-day patterns, recently played, skips, searches, favorites and dislikes. This is clearly distinguishable from every sibling, all of which act on the player or queue rather than reading a taste model.
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?
Explicitly says when to call it: 'before choosing music for vague or mood-based requests', which cleanly separates it from direct-play siblings like play_songs or dj_play_for_me. It does not state when not to call it (e.g. for specific, fully-specified requests, where the profile is unnecessary), so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_player_statusA
Gets the current playback status (Playing/Paused/Stopped) and the name of the current track.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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; 'Gets' implies a non-mutating read, and the enumerated status values are genuinely useful behavioral detail. However, it never explicitly confirms the call is side-effect free or what happens when no player is active β meaningful gaps for a zero-annotation tool, even a low-risk one.
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 zero filler; the resource and the two return facts are packed in without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values needn't be explained, and the description still names the two key outputs. Only the idle/no-active-player edge case and the read-only guarantee are absent, which are minor for a zero-param getter.
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 tool takes zero parameters, so there is nothing for the description to disambiguate; baseline is 4. The description correctly adds no parameter prose, keeping attention on the returned state.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Gets the current playback status') and even enumerates the returned state values (Playing/Paused/Stopped) plus the current track name. This is clearly distinguishable from mutating siblings like pause_music or stop_music, though the description never names a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied β an agent can infer this is the read-side companion to pause/resume/stop, but the description never says when to call it (e.g., before deciding whether to resume) or what alternative to use for queue inspection (get_current_queue). No exclusions or prerequisites are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_youtube_music_historyA
Imports the user's Google Takeout YouTube watch history (watch-history.json or .html) so Yit knows their taste from day one. By default only YouTube Music entries are imported.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | ||
| include_regular_youtube | 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 for a mutation-style import. It discloses that only YouTube Music entries are imported by default and that Google Takeout JSON/HTML files are supported, but it does not explain merge/duplicate behavior, overwrite semantics, permissions, file-size limits, or error handling.
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 tight sentences with no wasted text. The primary action and default filtering behavior are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. However, with no annotations and a mutation-style import operation, the description should probably mention prerequisites and how existing listening data is affected. It covers the core purpose, formats, and default filter but leaves meaningful behavioral 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 meaningfully clarifies the file_path parameter by naming accepted Google Takeout formats (watch-history.json or .html) and explains the effective behavior of include_regular_youtube by stating that only YouTube Music entries are imported by 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 gives a specific verb and resource: importing Google Takeout YouTube watch history. It also states the product goal (seeding Yit's taste) and the default scope (YouTube Music entries only), so an agent can identify exactly what the 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 phrase 'so Yit knows their taste from day one' implies an onboarding/import use case, but it does not explicitly say when to use this tool, when not to use it, or what prerequisites are needed. No sibling tool covers the same import behavior, so the implied context is adequate but not strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
like_current_songA
Marks the currently playing song as liked (adds to favorites and boosts it in future recommendations).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 burden, and it does disclose a genuinely non-obvious side effect: the like boosts future recommendations, not just favorites. It omits idempotency (behavior if the song is already liked), preconditions (requires an active track), and auth needs, so the behavioral picture 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?
One sentence, front-loaded with the action, with a parenthetical that adds real information about effects. Nothing is wasted and nothing needs trimming.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and the operation is parameterless, so the description needs only to convey effect and it does. The remaining gap is routing: it never resolves its overlap with add_currently_playing_to_favorites, which is the one thing an agent still needs.
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 tool takes zero parameters, so there is no parameter semantics to explain; the baseline applies. The description correctly implies the target is implicit (whatever is currently playing) rather than passed in.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("marks the currently playing song as liked") and the parenthetical clarifies the effect. However, it does nothing to distinguish itself from the sibling add_currently_playing_to_favorites, which reads as the same operation, leaving the agent unable to tell the two apart.
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 when-to-use guidance and no mention of alternatives, despite a nearly identical sibling (add_currently_playing_to_favorites) in the same toolset. The agent must guess which of the two to invoke, and nothing says whether this applies only when a track is actively playing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_favoritesA
Lists all the user's saved favorite tracks.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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. It implies a read-only listing with no side effects, and "all" suggests no pagination, but it omits ordering, authentication requirements, and any rate or scope 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?
The definition is a single front-loaded sentence with no wasted words. It immediately states the operation and the resource.
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 zero-parameter, read-only listing tool with an output schema, the description is largely complete. It explains what is returned at a high level, though it could clarify how this differs from play_favorites.
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?
There are zero parameters, so there is no parameter semantics to explain; the baseline for a parameterless tool is 4. The description does not need to compensate for any schema gap.
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: "Lists" the user's "saved favorite tracks." The word "Lists" distinguishes it from play_favorites and remove_favorite, which imply playback and deletion, though no sibling is explicitly named.
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 does not explain when to use this tool instead of play_favorites, remove_favorite, or get_listening_profile. The listing purpose is implied, but there are no explicit usage conditions, exclusions, or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
loop_current_trackB
Locks the player to loop the current track indefinitely.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 disclosure burden, and it does convey the key trait that looping persists 'indefinitely' β a state change on the player. It omits whether the call is idempotent, what happens if a track is already looping, and how to undo it (the stop_looping sibling).
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 short sentence that front-loads the action and contains no filler or redundancy.
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 zero-arg toggle with an output schema present, the description is minimally sufficient, but the lack of any pointer to stop_looping or to player-state preconditions leaves an agent to infer the off-ramp.
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 tool takes zero parameters, so there is nothing to document and no schema gap to compensate for; the description correctly avoids inventing inputs.
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?
A specific verb ('Locks ... to loop') plus a precise resource ('the current track') makes the effect unambiguous. It does not, however, distinguish itself from the sibling stop_looping, which is the obvious inverse operation an agent would need to consider.
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 explicit guidance on when to call this versus stop_looping or a queue-based repeat mode; usage is only inferred from the name. No prerequisites (e.g., a track must be playing) are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pause_musicA
Pauses the currently playing track.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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. It discloses the core effect but not the edge cases that matter for a playback control: what happens if nothing is currently playing, whether pausing preserves queue position, or that resume_music reverses it. The presence of an output schema removes the need to explain return values.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. Nothing could be removed without losing meaning.
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 zero-parameter playback toggle with an output schema, the description covers the essentials. The only real gap is unstated behavior when no track is playing, which is a minor omission for such a simple control.
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?
Zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. Schema coverage is 100% and the empty properties object is self-explanatory.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("Pauses") and resource ("the currently playing track"), which is unambiguous and distinct from resume_music or stop_music by name alone. It stops short of explicitly contrasting itself with those siblings, so it lands at 4 rather than 5.
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 when-to-use case is strongly implied by the name and description, but there is no explicit guidance on alternatives β nothing says to use stop_music to end playback entirely or resume_music to undo this. An agent can infer this, but the description does no routing work.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_favoritesB
Plays the user's favorite tracks. If index_to_play is not provided, plays all favorites. If an index is provided, plays only that specific favorite.
| Name | Required | Description | Default |
|---|---|---|---|
| index_to_play | 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 does disclose the key behavioral fork: no index means the entire favorites list is played, an index means exactly one track. It does not say whether playback replaces the current queue, what happens to the currently playing track, or what it does when favorites are empty.
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 short sentences, front-loaded with the action and then the conditional logic; each sentence carries information. Slight redundancy between sentence one and sentence two, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and with one optional parameter the surface is small. Still missing are the index origin, error/empty-favorites behavior, and the effect on current playback state β all of which an agent needs to invoke this reliably.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the parameter, and it does explain what index_to_play does functionally. However, it never says where the index comes from (presumably the ordering returned by list_favorites), whether it is 0- or 1-based, or what happens with an out-of-range value.
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?
"Plays the user's favorite tracks" is a specific verb + resource, and the two conditional branches make the operation concrete. It is distinguishable from list_favorites (read) and play_songs (arbitrary tracks), though the description never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: the branch on whether index_to_play is present tells the agent how to call it, but nothing says when to prefer this over play_songs, dj_play_for_me, or list_favorites+play_search_result. No prerequisites or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_previous_trackB
Goes back to the previously played track.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full behavioral burden, yet it discloses nothing about what happens at the start of history (does it restart the current track or no-op?), whether it changes playback state, or whether history is a stack that gets consumed. An output schema exists, which relieves the description of explaining return values, but the runtime behavior of the navigation itself is undocumented.
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 nine-word sentence with zero filler, and the operative concept ('previously played track') lands immediately.
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 zero-parameter playback action with an output schema, the description covers the core intent, but the boundary condition that matters most for a back-navigation tool (no prior track available) is unstated. Adequate, with a clear gap around edge-case behavior.
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 tool takes zero parameters and the schema is empty, so there is nothing for the description to disambiguate. Baseline of 4 applies.
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 (go back) on a specific resource (the previously played track), which an agent can distinguish from skip_to_next_track by the word 'previously'. No sibling is named explicitly, so it stops short of full 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?
The when-to-use is only implied: an agent must infer from the name and the phrase 'previously played' that this is the counterpart to skip_to_next_track. There is no explicit statement of when not to use it, no alternative named, and no mention of how it relates to resume_music or play_search_result.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_search_resultA
Plays a specific track number from the most recent search results. Only call this AFTER a successful search.
| Name | Required | Description | Default |
|---|---|---|---|
| number | 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 must carry the behavioral burden. It discloses the search-result dependency, but does not describe side effects such as whether current playback stops, whether the queue changes, or what happens if the number is out of range.
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, front-loaded with the action and then the key prerequisite. 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 and has an output schema, but no annotations and a completely undocumented schema parameter mean the description should do more. It covers the sequencing prerequisite and the general meaning of 'number', but leaves important calling details ambiguous.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the parameter is only named 'number', so the description usefully clarifies that it refers to a track number in the most recent search results. However, it does not specify whether numbering is 1-based or 0-based, the valid range, or what happens for an invalid number.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: plays a track from the most recent search results. The scope phrase 'from the most recent search results' distinguishes it from siblings like play_songs and play_favorites, 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?
Explicitly states the prerequisite: 'Only call this AFTER a successful search.' That gives the agent clear sequencing context. It does not discuss when to prefer this over direct playback tools such as play_songs or play_favorites, so it falls short of full alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_songsA
Plays a hand-picked list of specific songs in order. Each item should be a precise search like "Artist - Song Title". Set replace_queue=false to append after the current queue instead.
| Name | Required | Description | Default |
|---|---|---|---|
| songs | Yes | ||
| replace_queue | 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 behavioral burden. It usefully discloses that replace_queue=false appends after the current queue instead, implying the default replaces the queue, but it does not describe failure behavior for unmatched songs or any permission/status side effects. Output schema exists, so return values need not be explained.
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 compact sentences with the core purpose front-loaded and each sentence adding useful information. There is no redundant or filler 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?
For a simple two-parameter playback tool, the definition covers purpose, song format, and queue replacement behavior, and the output schema can carry return details. Some edge-case behavior is missing, but the agent has enough 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. It does so for both parameters: songs should be precise searches like 'Artist - Song Title', and replace_queue controls replacement versus appending. This adds clear meaning beyond the schema names.
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: it plays a hand-picked list of specific songs in order. The phrase 'in order' and 'hand-picked list' distinguishes it from queue-appending and radio-style siblings, though it does not explicitly name 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?
Usage is implied by 'hand-picked list' and the replace_queue note, but there is no explicit guidance on when to choose this over similar siblings such as play_search_result, play_favorites, add_to_queue, or start_radio. The replace_queue sentence clarifies a parameter behavior rather than tool-selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_favoriteB
Removes a track from favorites using its index number from the favorites list.
| Name | Required | Description | Default |
|---|---|---|---|
| index | Yes |
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. It does not say whether removal is permanent, what happens when the index is out of range, whether the list re-indexes after removal, or what the operation returns β all critical for a destructive mutation.
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 well-formed sentence with no padding, and the key qualifier about the index origin is placed before the reader needs it. Nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, but for a one-parameter destructive tool with zero annotation coverage the description is thin. It omits index base, re-indexing behavior, error conditions, and confirmation/irreversibility, leaving meaningful gaps an agent could stumble on.
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 does add meaning: the 'index' is a position within the favorites list rather than a track ID. However, it leaves the base (0- vs 1-based) and whether it matches list_favorites ordering unspecified, which is the ambiguity that matters most.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Removes a track from favorites') plus the addressing mechanism ('using its index number from the favorites list'). It is distinguishable from siblings such as list_favorites and add_search_result_to_favorites, though it never explicitly contrasts itself with 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?
The phrase 'index number from the favorites list' implies the workflow (call list_favorites first, then remove by position) but never says so explicitly or names the alternative tools. There is no statement of when not to use it, or what to do if the track is not currently a favorite.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resume_musicB
Resumes playing the currently paused track.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 behavioral burden. It does not disclose what happens if no track is paused, whether this is idempotent, or any error/permission behaviorβimportant gaps for an agent invoking a playback control.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no wasted words. It states exactly what the tool does and nothing more.
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 exists, so return-value explanation is unnecessary, and the operation is simple. Still, with no annotations the description should cover edge cases like no paused track, which it omits, leaving the definition only minimally 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 tool takes zero parameters and the schema is trivially complete, so there are no parameter semantics to explain. Baseline 4 is appropriate for a zero-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Resumes') and resource ('the currently paused track'), which clearly separates it from playback-starting siblings like play_songs and play_search_result. However, it does not name those siblings explicitly, so the distinction is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'currently paused' implies the precondition for use, but there is no explicit when-to-use guidance, no statement of what to do when nothing is paused, and no named alternative (e.g., use play_songs when no track is paused).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_music_on_youtubeA
Searches YouTube for music or songs based on a natural language query. If play_first_result is true, it immediately starts playing the best match.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| play_first_result | 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 does carry real weight and it discloses the most important trait: a conditional side effect where playback begins automatically when play_first_result is true. It does not cover what happens on failure or no match, whether playback interrupts the current track/queue, or any auth or quota constraints, so the behavioral picture 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?
Two short sentences with no filler, front-loading the core action and following with the only meaningful option. Every clause carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. However, for a tool whose primary parameter triggers audible playback, the description leaves open whether search results are still returned when play_first_result is false and how this interacts with the existing queue β gaps that annotations would otherwise have covered.
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 supply parameter meaning β and it does for both: 'query' is characterized as a natural language query, and 'play_first_result' is explained as immediately playing the best match. It lacks detail on what "best match" means and what is returned when the flag is false, keeping it below a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Searches YouTube for music or songs") plus the input modality (natural language query), which clearly separates it from the playback-only siblings such as play_search_result or play_songs. It stops short of naming which sibling to use instead when the agent already has a known track, 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?
Usage is only implied: the description explains the effect of play_first_result=true ("immediately starts playing the best match") but never says when to choose this tool over play_songs, start_radio, or dj_play_for_me, nor when to set play_first_result to false. An agent can infer the search-then-play flow but gets no explicit routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
skip_to_next_trackB
Skips to the next track in the queue.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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, yet it only restates the action. It does not disclose edge-case behavior such as what happens at the end of the queue, whether it starts playback if paused, or whether the queue is mutated.
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 short sentence with no filler, and the core action is front-loaded. It is efficient, though the terseness contributes to the behavioral gaps noted elsewhere.
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 (no params) and has an output schema, so return values need not be explained. However, for a player-control mutation with no annotations, the description should still mention state effects such as end-of-queue handling, which it omits.
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 tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline of 4 applies. No parameter semantics are needed beyond the empty 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 gives a specific verb ('Skips') and resource ('next track in the queue'), so the action is unambiguous. It is naturally distinguishable from siblings like play_previous_track or loop_current_track, though it does not explicitly name a sibling to contrast with.
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 versus alternatives such as play_search_result, play_songs, or stop_music, and no preconditions stated (e.g. whether playback must be active). The agent must infer everything from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_radioA
Plays an endless-style radio of songs similar to a seed (song name or YouTube URL). With no seed it continues from the currently playing song, or from the user's top track if nothing is playing.
| Name | Required | Description | Default |
|---|---|---|---|
| seed | 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 full behavioral burden. It usefully discloses the no-seed fallback chain (current song, then top track), but says nothing about whether starting radio interrupts or replaces current playback, clears the queue, or requires any account/auth prerequisites.
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 sentences, no filler. The primary behavior is front-loaded and the edge case (no seed) follows immediately after.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the sole parameter is fully covered. The remaining gap is side-effect disclosure for a tool that alters playback state, which matters more here than for a read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% β 'seed' has no schema description at all β so the description must compensate, and it does: it specifies the accepted format (song name or YouTube URL) and the exact meaning of the empty/default value. Nothing about the single parameter is left ambiguous.
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 gives a specific verb and resource: 'Plays an endless-style radio of songs similar to a seed.' That distinguishes it in spirit from play_songs and dj_play_for_me, though it never names a sibling or explicitly contrasts with 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?
It clearly covers both invocation modes: supply a seed for similarity radio, or omit it to continue from the current song / top track. That is real context for choosing how to call it, but there is no guidance on when to prefer this over the adjacent playback tools (play_songs, dj_play_for_me).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_loopingA
Stops looping the current track so playback proceeds normally.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 full burden. It does disclose the outcome (playback proceeds normally) which is more than nothing, but it omits whether the call is idempotent, whether it errors when looping is already off, and whether other loop modes (queue/repeat) are affected.
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 with a concrete effect clause; nothing is wasted or buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, and the tool is a simple zero-param state toggle. The only real gap is the absence of annotations, which leaves the error/idempotency behavior undocumented.
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?
Zero parameters, so there is nothing to disambiguate; baseline 4 applies. The description correctly implies no arguments are needed since it acts on "the current track".
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ("Stops looping the current track") that an agent can distinguish from loop_current_track and from stop_music/stop_looping semantics. It stops short of naming the inverse sibling explicitly, but the state change is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by "the current track" and "so playback proceeds normally" β an agent can infer this is the undo of loop_current_track. There is no explicit when-to-use statement, no note on what happens if the track isn't looping, and no named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_musicA
Stops music playback entirely and closes the player.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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. It does disclose the key side effect that the player is closed, but says nothing about whether the current queue, track position, or session state survives the stop, which is the main behavioral question for this tool.
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 short sentence with the action front-loaded and the significant side effect attached. Nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and annotations are absent, so the description only needs to cover behavior. It names the terminating side effect, which is the essential fact; the gap is the unstated fate of the queue and playback state.
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 tool takes zero parameters, so there is no parameter semantics to convey; the baseline for a no-arg tool applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb plus resource ('Stops music playback') with an added scope qualifier ('entirely and closes the player') that implicitly contrasts with pause_music. It does not name the sibling it differs from, so an agent must infer the contrast rather than being routed explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'entirely' suggests this is the heavier-weight alternative to pause_music, but the description never states when to choose stop over pause, nor any precondition such as playback being active.
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.
25 tool updates
v3.1.0- First observed
add_currently_playing_to_favorites - First observed
add_search_result_to_favorites - First observed
add_to_queue - First observed
clear_queue - First observed
dislike_current_song - First observed
dj_play_for_me - First observed
get_current_queue - First observed
get_listening_profile - First observed
get_player_status - First observed
import_youtube_music_history - First observed
like_current_song - First observed
list_favorites - First observed
loop_current_track - First observed
pause_music - First observed
play_favorites - First observed
play_previous_track - First observed
play_search_result - First observed
play_songs - First observed
remove_favorite - First observed
resume_music - First observed
search_music_on_youtube - First observed
skip_to_next_track - First observed
start_radio - First observed
stop_looping - First observed
stop_music
TDQS
Scored across 25 tools
Most playback, queue, and favorites operations are distinct, but there is notable overlap between add_currently_playing_to_favorites and like_current_song, since both add the current track to favorites while like_current_song also boosts recommendations. Multiple playback entry points (search-and-play, play_favorites, dj_play_for_me, start_radio, play_songs) are differentiated by descriptions but still require careful selection.
Tool names are consistently snake_case and mostly follow a verb_noun pattern. Minor deviations exist, such as dj_play_for_me, skip_to_next_track versus play_previous_track, and some longer multi-preposition names like add_currently_playing_to_favorites.
At 25 tools, the surface is on the heavy side for a music player, even one with personalization and history import. Some operations could likely be consolidated, especially favorites/like handling and playback-initiation variants.
Core music-player workflows are covered: search, playback control, queue management, favorites, listening profile, radio/DJ modes, and history import. Minor gaps remain around volume/seek controls, removing or reordering specific queue items, and broader playlist management.
Maintenance
Related MCP Connectors
AI music and podcast platform for autonomous agents. SoundCloud for AI bots.
Generate images, video, music and voice from your CLI or AI agent. On-brand AI media toolkit.
Free, copyright-safe AI music library for video creators and AI agents.
AI playlist engine that turns music prompts into real YouTube playlists and filters bad versions.
Related MCP Servers
- AlicenseAqualityCmaintenanceControl mpv media player through AI conversation. Play music and video, manage playlists β all via natural language. Works with opencode and any MCP-compatible AI tool.166 npmMIT
- FlicenseNot gradedqualityDmaintenanceDual-mode tool server for controlling Spotify through terminal or AI assistants like Claude or ChatGPT.-
- AlicenseNot gradedqualityDmaintenanceAI-native MCP server for Qobuz that enables searching, browsing, and managing your music library, including favorites, playlists, and current playback.20 npmMIT
- AlicenseNot gradedqualityDmaintenanceEnables music composition and playback using Strudel patterns in the terminal. Supports multi-track editing, effects, rendering to WAV, and AI-assisted composition via genre presets.2AGPL 3.0