Skip to main content
Glama
raydollete

TIDAL Music MCP

by raydollete

TIDAL Music MCP

Claude Code MCP Python License uv

This was originally a fork of yuhuacheng/tidal-mcp but has grown into a more robust implementation of Tidal features. In addition to added Tidal search functionality and the ability to run tidal-dl-ng (if you have it installed), there have been other stability and performance improvements, including batch operations for large track lists.

Features

  • 🔍 Music Search: Search TIDAL's catalog for tracks, albums, and artists by name

  • Batch Operations: Search for multiple songs and create playlists efficiently in a single request

  • 🌟 Music Recommendations: Get personalized track recommendations based on your listening history plus your custom criteria.

  • ၊၊||၊ Playlist Management: Create, view, and manage your TIDAL playlists

  • 📥 Music Downloads: Download tracks, albums, playlists, and favorites via tidal-dl-ng integration

Related MCP server: SpotifyMCP

Quick Start

Prerequisites

  • Python 3.10+

  • uv (Python package manager)

  • TIDAL subscription

Installation

  1. Clone this repository:

    git clone https://github.com/yourusername/tidal-dl-mcp.git
    cd tidal-dl-mcp
  2. Important: Do NOT create a virtual environment or run uv pip install --editable . in this directory. Claude Desktop uses uv run with --with flags to create an isolated environment automatically. Having a local .venv or editable install can cause version conflicts and hangs.

MCP Client Configuration

Claude Desktop Configuration

To add this MCP server to Claude Desktop, you need to update the MCP configuration file. Here's an example configuration: (you can specify the port by adding an optional env section with the TIDAL_MCP_PORT environment variable)

{
  "mcpServers": {
    "TIDAL Integration": {
      "command": "/path/to/your/uv",
      "env": {
        "TIDAL_MCP_PORT": "5100"
      },
      "args": [
        "run",
        "--with",
        "requests",
        "--with",
        "mcp[cli]",
        "--with",
        "flask",
        "--with",
        "tidalapi",
        "mcp",
        "run",
        "/path/to/your/project/tidal-mcp/mcp_server/server.py"
      ]
    }
  }
}

Example scrrenshot of the MCP configuration in Claude Desktop: Claude MCP Configuration

Steps to Install MCP Configuration

  1. Open Claude Desktop

  2. Go to Settings > Developer

  3. Click on "Edit Config"

  4. Paste the modified JSON configuration

  5. Save the configuration

  6. Restart Claude Desktop

Suggested Prompt Starters

Once configured, you can interact with your TIDAL account through a LLM by asking questions like:

Search Examples:

  • "Search for Bohemian Rhapsody"

  • "Find albums by Radiohead"

  • "Look up the artist Daft Punk"

Recommendation Examples:

  • "Recommend songs like those in this playlist, but slower and more acoustic."

  • "Create a playlist based on my top tracks, but focused on chill, late-night vibes."

  • "Find songs like these in playlist XYZ but in languages other than English."

Playlist Management Examples:

  • "Add this track to my workout playlist"

  • "Put these songs in my 90's playlist"

  • "Show me all tracks in my road trip playlist"

Batch Playlist Creation Examples:

  • "Create a playlist called 'Road Trip Mix' with these songs: Bohemian Rhapsody, Hotel California, Stairway to Heaven, Sweet Home Alabama"

  • "Make me a workout playlist with 20 high-energy rock songs from the 80s"

  • "Build a dinner party playlist with jazz standards like Take Five, So What, and My Favorite Things"

💡 You can also ask the model to:

  • Use more tracks as seeds to broaden the inspiration.

  • Return more recommendations if you want a longer playlist.

  • Or delete a playlist if you're not into it — no pressure!

Download Examples (requires tidal-dl-ng):

  • "Download this track: 12345678"

  • "Download the album with ID 87654321"

  • "Download all my favorite tracks"

Available Tools

The TIDAL MCP integration provides the following tools:

Core Tools:

  • tidal_login: Authenticate with TIDAL through browser login flow

  • search_tidal: Search TIDAL for tracks, albums, and artists by name

  • get_favorite_tracks: Retrieve your favorite tracks from TIDAL

  • recommend_tracks: Get personalized music recommendations

  • create_tidal_playlist: Create a new playlist in your TIDAL account

  • add_tracks_to_playlist: Add tracks to an existing playlist

  • get_user_playlists: List all your playlists on TIDAL

  • get_playlist_tracks: Retrieve tracks from a playlist (supports pagination with offset/limit for large playlists)

  • delete_tidal_playlist: Delete a playlist from your TIDAL account

Batch Tools (optimized for large operations):

  • batch_search_tidal: Search for multiple songs in a single request (up to 100 queries). 10-50x faster than individual searches.

  • create_playlist_from_songs: Create a playlist from a list of song names/descriptions. Automatically searches for each song and adds the best matches.

Download Tools (requires tidal-dl-ng):

  • download_track: Download a single track by ID

  • download_album: Download an entire album by ID

  • download_playlist: Download all tracks from a playlist

  • download_favorites: Download all favorites (tracks, albums, artists, or videos)

Security & Privacy

This application accesses your TIDAL account data (favorites, playlists, search history) through TIDAL's official API. Key security notes:

  • OAuth tokens are stored in your system's temp directory (<temp>/tidal-session-oauth.json)

  • Network binding is localhost-only (127.0.0.1) - not accessible from other machines

  • No telemetry - your data is never sent to third parties

  • Third-party libraries - uses community-maintained tidalapi, not an official TIDAL SDK

See SECURITY.md for full details on data access, storage, and reporting vulnerabilities.

Troubleshooting

If the MCP server hangs when Claude Desktop tries to call tools:

  1. Delete any local Python environment artifacts:

    # Remove these if they exist in the project directory
    rm -rf .venv
    rm -rf tidal_mcp.egg-info
    rm -f uv.lock
    
    # Clear Python cache
    find . -type d -name __pycache__ -exec rm -rf {} +
  2. Check for port conflicts (default port is 5050):

    # Windows
    netstat -ano | findstr ":5050"
    
    # Kill any conflicting processes
    taskkill /PID <pid> /F
  3. Restart Claude Desktop after making changes

  4. Check logs at:

    • Windows: %APPDATA%\Claude\logs\mcp-server-tidal.log

    • macOS/Linux: ~/.claude/logs/mcp-server-tidal.log

License

MIT License

Acknowledgements

Available Tools

16 tools
add_tracks_to_playlistA
Adds tracks to an existing TIDAL playlist.

USE THIS TOOL WHENEVER A USER ASKS FOR:
- "Add this song to my playlist"
- "Put these tracks in my [playlist name] playlist"
- "Add this to my favorites playlist"
- "Include this track in my workout playlist"
- Any request to add songs/tracks to an existing playlist

This function adds one or more tracks to a playlist that already exists in the user's TIDAL account.
The playlist_id must be provided, which can be obtained from the get_user_playlists() function.

When processing the results of this tool:
1. Confirm how many tracks were successfully added
2. If allow_duplicates is False and some tracks were already in the playlist, they won't be added again
3. Mention the playlist name and provide a link to it

Args:
    playlist_id: The TIDAL ID of the playlist to add tracks to (required)
    track_ids: List of TIDAL track IDs to add to the playlist (required)
    allow_duplicates: If False (default), tracks already in the playlist won't be added again

Returns:
    A dictionary containing the status and number of tracks added
ParametersJSON Schema
NameRequiredDescriptionDefault
track_idsYes
playlist_idYes
allow_duplicatesNo

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must cover behavioral traits. It clarifies that duplicates are handled based on the allow_duplicates flag, but it does not mention error conditions (e.g., invalid playlist_id, authentication requirements) or confirm that it is a write operation. More detail would improve transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose and includes structured sections (usage, parameters, results). However, it is slightly verbose, especially the processing instructions that could be condensed or moved to an output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description adequately describes the return value (dictionary with status and count). It covers the main behaviors but lacks details on error responses and edge cases, which would enhance completeness for an AI agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description explains each parameter: playlist_id (required, obtainable via get_user_playlists), track_ids (list of TIDAL track IDs), and allow_duplicates (behavior when false). It adds context beyond the schema, though it could specify that track_ids items must be strings.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with a clear statement of the tool's function: 'Adds tracks to an existing TIDAL playlist.' It uses a specific verb ('adds') and resource ('existing TIDAL playlist'), and the purpose is distinct from sibling tools like create_tidal_playlist or delete_tidal_playlist.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly lists example user requests that should trigger this tool ('Add this song to my playlist', etc.) and implies when not to use it (when the playlist does not already exist). This provides clear decision guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

batch_search_tidalA
Search TIDAL for multiple tracks/albums/artists in a single request.
This is MUCH MORE EFFICIENT than calling search_tidal multiple times.

USE THIS TOOL WHEN:
- You need to search for multiple songs to create a playlist
- You have a list of song names to look up
- You're building a collection of tracks based on a user's description
- The user provides a list of songs they want to find

This tool processes all searches concurrently, making it 10-50x faster than
calling search_tidal repeatedly for each song.

When processing the results:
1. Check each result for the 'tracks' array with matching songs
2. Use the first track in each result as the best match
3. Some queries may have 'error' instead of results - handle gracefully
4. Collect track IDs for playlist creation

Args:
    queries: List of search queries. Each item can be:
             - A string: "Bohemian Rhapsody Queen" (searches for tracks)
             - A dict with 'query' and optional 'type':
               {"query": "Bohemian Rhapsody", "type": "track"}
             Valid types: "track", "album", "artist", "playlist", "all"
             Default type is "track" if not specified.
             Maximum 100 queries per request.
    limit_per_query: Maximum results per query (default: 5, max: 20)
                    Keep this low (1-5) for faster responses when you only need the best match.

Returns:
    Dictionary with 'results' array containing search results for each query.
    Each result includes the original query and matching tracks/albums/etc.

Example:
    batch_search_tidal([
        {"query": "Bohemian Rhapsody Queen", "type": "track"},
        {"query": "Yesterday Beatles", "type": "track"},
        "Stairway to Heaven"  # String queries default to track type
    ], limit_per_query=1)
ParametersJSON Schema
NameRequiredDescriptionDefault
queriesYes
limit_per_queryNo

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses concurrency, 10-50x speedup, maximum 100 queries, and expected result structure including error handling. No annotations present, so description fully compensates.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-organized with sections for overview, usage, processing steps, and parameter details. No redundant sentences; every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, description fully explains return structure, how to interpret results, and error handling. Covers all necessary context for an AI agent to use the tool effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage, description extensively explains both parameters: queries can be strings or dicts with type options, limit_per_query with default and max, plus an example showing usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it searches TIDAL for multiple items in a single request, explicitly contrasting with the less efficient search_tidal. Verb 'search' and resource 'TIDAL' are specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit 'USE THIS TOOL WHEN' list with concrete scenarios, and implies when not to use by comparing efficiency with sibling search_tidal.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_playlist_from_songsA
Creates a TIDAL playlist by searching for songs and adding the best matches.
This is the RECOMMENDED way to create a playlist when you have song names/descriptions.

USE THIS TOOL WHEN:
- A user provides a list of song names to add to a playlist
- You need to create a playlist from song descriptions (not track IDs)
- You want to build a playlist based on user-provided song names

This tool handles the entire workflow efficiently:
1. Batch search for all songs concurrently
2. Collect the best matching track IDs
3. Create the playlist with all found tracks

This is MUCH faster than searching for songs one-by-one and then creating a playlist.

Args:
    title: Name for the new playlist
    song_descriptions: List of song descriptions to search for.
                      Include artist name for better matching.
                      Examples: ["Bohemian Rhapsody by Queen", "Yesterday Beatles",
                                "Stairway to Heaven Led Zeppelin"]
                      Maximum 100 songs per request.
    description: Optional playlist description

Returns:
    Dictionary with:
    - playlist: Created playlist details including URL
    - matched_songs: List of songs that were found with their track info
    - unmatched_songs: List of songs that couldn't be found
    - match_rate: e.g., "45/50" showing how many songs were matched

Example:
    create_playlist_from_songs(
        title="My 80s Favorites",
        song_descriptions=[
            "Take On Me a-ha",
            "Livin' on a Prayer Bon Jovi",
            "Sweet Child O' Mine Guns N' Roses"
        ],
        description="Classic 80s hits"
    )
ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
descriptionNo
song_descriptionsYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It describes the workflow (batch search, collect matches, create playlist), maximum 100 songs per request, and the return structure. However, it does not mention potential side effects (e.g., overwriting existing playlists) or required permissions. Still, it's fairly transparent about behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with sections (purpose, when-to-use, workflow, args, returns, example). It is slightly verbose but every part adds value. Front-loaded with the main verb and resource. Could trim minor redundancy but overall efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 3 parameters, no output schema, and no annotations, the description provides comprehensive context: return dictionary details (playlist, matched_songs, unmatched_songs, match_rate), workflow steps, example usage, and limitations (max 100 songs). It fully compensates for the lack of structured documentation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% (no property descriptions in schema), but the description adds an 'Args' block detailing each parameter: title as 'Name for the new playlist', song_descriptions with examples and max 100, description as optional. This adds significant meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool creates a TIDAL playlist by searching for songs and adding best matches. It distinguishes from siblings like 'create_tidal_playlist' (which likely creates empty playlists) and 'add_tracks_to_playlist' (which adds tracks by ID). The verb 'create' and resource 'playlist from songs' are specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'USE THIS TOOL WHEN:' section lists three scenarios (song names, descriptions, building from names). Implicitly tells when not to use (when track IDs are available). Also notes it's faster than alternatives like searching one-by-one then creating. Provides clear context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_tidal_playlistA
Creates a new TIDAL playlist with the specified tracks.

USE THIS TOOL WHENEVER A USER ASKS FOR:
- "Create a playlist with these songs"
- "Make a TIDAL playlist"
- "Save these tracks to a playlist"
- "Create a collection of songs"
- Any request to create a new playlist in their TIDAL account

This function creates a new playlist in the user's TIDAL account and adds the specified tracks to it.
The user must be authenticated with TIDAL first.

NAMING CONVENTION GUIDANCE:
When suggesting or creating a playlist, first check the user's existing playlists using get_user_playlists()
to understand their naming preferences. Some patterns to look for:
- Do they use emoji in playlist names?
- Do they use all caps, title case, or lowercase?
- Do they include dates or seasons in names?
- Do they name by mood, genre, activity, or artist?
- Do they use specific prefixes or formatting (e.g., "Mix: Summer Vibes" or "[Workout] High Energy")

Try to match their style when suggesting new playlist names. If they have no playlists yet or you
can't determine a pattern, use a clear, descriptive name based on the tracks' common themes.

When processing the results of this tool:
1. Confirm the playlist was created successfully
2. Provide the playlist title, number of tracks added, and URL
3. Always include the direct TIDAL URL (https://tidal.com/playlist/{playlist_id})
4. Suggest that the user can now access this playlist in their TIDAL account

Args:
    title: The name of the playlist to create
    track_ids: List of TIDAL track IDs to add to the playlist
    description: Optional description for the playlist (default: "")

Returns:
    A dictionary containing the status of the playlist creation and details about the created playlist
ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
track_idsYes
descriptionNo

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It states that the tool creates a new playlist and adds tracks, and mentions authentication. But it does not disclose potential side effects (e.g., duplicate names), error conditions, rate limits, or whether the operation is reversible. More behavioral details could be provided.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with bullet points and sections, but it is somewhat verbose, especially the naming convention guidance. The first sentence is clear, and the most critical information is front-loaded. It could be tightened without losing value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (3 parameters, no output schema, no annotations), the description is remarkably complete. It covers purpose, usage guidelines, parameter meanings, authentication requirement, naming convention advice, and even post-processing steps including confirmation and URL inclusion. It leaves little ambiguity for an AI agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 explains that track_ids are 'TIDAL track IDs' and that description is optional with a default. However, it does not define constraints for the title parameter (e.g., length, allowed characters). The naming convention guidance is helpful but pertains more to usage than parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a clear verb and resource: 'Creates a new TIDAL playlist with the specified tracks.' It also lists specific user requests that trigger this tool, clearly distinguishing from sibling tools like add_tracks_to_playlist which adds to existing playlists.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit examples of when to use this tool ('USE THIS TOOL WHENEVER A USER ASKS FOR:') and mentions the prerequisite of TIDAL authentication. However, it does not explicitly state when not to use it or mention alternatives like add_tracks_to_playlist for adding to existing playlists.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_tidal_playlistA
Deletes a TIDAL playlist by its ID.

USE THIS TOOL WHENEVER A USER ASKS FOR:
- "Delete my playlist"
- "Remove a playlist from my TIDAL account"
- "Get rid of this playlist"
- "Delete the playlist with ID X"
- Any request to delete or remove a TIDAL playlist

This function deletes a specific playlist from the user's TIDAL account.
The user must be authenticated with TIDAL first.

When processing the results of this tool:
1. Confirm the playlist was deleted successfully
2. Provide a clear message about the deletion

Args:
    playlist_id: The TIDAL ID of the playlist to delete (required)

Returns:
    A dictionary containing the status of the playlist deletion
ParametersJSON Schema
NameRequiredDescriptionDefault
playlist_idYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral transparency. It correctly indicates this is a destructive action ('Deletes a TIDAL playlist') and mentions authentication. However, it omits details on error handling (e.g., what happens if the playlist doesn't exist) and any irreversibility beyond deletion. The processing steps are a nice touch but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is longer than necessary, with a list of example user requests that could be condensed. The 'When processing the results' section adds some structure but feels redundant. Overall, it is moderately concise but could be tightened without losing clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (1 required parameter, no output schema), the description covers the core aspects: what the tool does, when to use it, authentication, and post-processing steps. It is sufficiently complete for a delete operation, though it could mention that the playlist must belong to the authenticated user.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema coverage is 0% (only a title for playlist_id), so the description's explanation of the parameter ('The TIDAL ID of the playlist to delete (required)') adds essential meaning beyond the schema. This compensates for the lack of schema descriptions, making the parameter clear.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Deletes a TIDAL playlist by its ID' and provides specific examples of user requests, making the purpose unambiguous. It distinctively focuses on deletion, differentiating it from sibling tools like create_tidal_playlist or add_tracks_to_playlist.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes explicit usage instructions ('USE THIS TOOL WHENEVER...') and lists common user requests, which is helpful. It also notes the authentication requirement. However, it lacks guidance on when not to use it (e.g., if the playlist is not owned by the user) or alternatives for related tasks like removing tracks.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

download_albumA
Downloads a TIDAL album to local storage using tidal-dl-ng.

USE THIS TOOL WHENEVER A USER ASKS FOR:
- "Download this album"
- "Save this album to my computer"
- "Download album ID X"
- "I want to download [album name]" (after identifying the album ID)
- Any request to download a complete album from TIDAL

IMPORTANT PREREQUISITES:
1. tidal-dl-ng must be installed: pip install tidal-dl-ng
2. User must have authenticated tidal-dl-ng: run 'tdn login' in terminal
3. tidal-dl-ng authentication is SEPARATE from TIDAL MCP authentication

When processing the results of this tool:
1. Confirm the download was successful or explain any errors
2. Note that albums may take several minutes to download
3. If tidal-dl-ng is not installed, guide user to install it
4. If authentication failed, guide user to run 'tdn login' in terminal
5. The files will be saved to tidal-dl-ng's configured download location

Args:
    album_id: The TIDAL album ID to download (numeric string)

Returns:
    A dictionary containing download status and any output messages
ParametersJSON Schema
NameRequiredDescriptionDefault
album_idYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses external dependency (tidal-dl-ng), separate authentication, potential download time, error handling guidance, and return format. No annotations exist, so the description fully bears this burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with sections for purpose, when to use, prerequisites, after-use steps, args, and returns. All sentences add value, though slightly verbose. Front-loaded with main action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given one parameter, no output schema, and low schema coverage, the description is remarkably thorough: covers purpose, prerequisites, usage, behavior, error handling, and return value. Very complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides minimal description (type string, title). The description's 'Args' section adds clear semantics: 'The TIDAL album ID to download (numeric string)', compensating for 0% schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it downloads a TIDAL album to local storage using tidal-dl-ng. Provides specific user requests that should trigger this tool, distinguishing it from siblings like download_track or download_playlist.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly lists when to use the tool with example queries and important prerequisites (installation, authentication). Lacks explicit 'when not to use' but provides comprehensive context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

download_favoritesA
Downloads all favorites of a specific type from TIDAL using tidal-dl-ng.

USE THIS TOOL WHENEVER A USER ASKS FOR:
- "Download all my favorite tracks"
- "Download my saved albums"
- "Save all my favorites to my computer"
- "Download my favorite artists' music"
- Any request to download their saved/favorite content from TIDAL

IMPORTANT PREREQUISITES:
1. tidal-dl-ng must be installed: pip install tidal-dl-ng
2. User must have authenticated tidal-dl-ng: run 'tdn login' in terminal
3. tidal-dl-ng authentication is SEPARATE from TIDAL MCP authentication

When processing the results of this tool:
1. Confirm the download was started/completed or explain any errors
2. Warn user that downloading all favorites can take a VERY long time
3. If tidal-dl-ng is not installed, guide user to install it
4. If authentication failed, guide user to run 'tdn login' in terminal
5. The files will be saved to tidal-dl-ng's configured download location

Args:
    favorite_type: Type of favorites to download. One of:
                  - "tracks" (default) - Download all favorite tracks
                  - "albums" - Download all favorite albums
                  - "artists" - Download all content from favorite artists
                  - "videos" - Download all favorite videos

Returns:
    A dictionary containing download status and any output messages
ParametersJSON Schema
NameRequiredDescriptionDefault
favorite_typeNotracks

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses external dependency (tidal-dl-ng), separate authentication, long download times, and file save location. No annotations provided, so description carries full burden. Minor omission: no mention of disk space or cancellation behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with sections and bullet points, but slightly verbose with repeated examples. Front-loaded purpose and guidelines effectively.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers installation, authentication, expected behavior, result handling, and time expectations. Adequate for a tool with external dependencies and no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Single parameter (favorite_type) fully explained with values and effects. Schema coverage 0% but description adds complete semantics beyond the basic schema definition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it downloads all favorites of a specific type from TIDAL using tidal-dl-ng. It distinguishes from sibling tools like download_album, download_playlist, and download_track, which operate on individual items.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly lists user requests that should trigger this tool (e.g., 'Download all my favorite tracks'). Provides prerequisites and warnings, and mentions error handling steps.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

download_playlistA
Downloads a TIDAL playlist to local storage using tidal-dl-ng.

USE THIS TOOL WHENEVER A USER ASKS FOR:
- "Download this playlist"
- "Save this playlist to my computer"
- "Download playlist ID X"
- "I want to download [playlist name]" (after identifying the playlist ID)
- Any request to download a complete playlist from TIDAL

IMPORTANT PREREQUISITES:
1. tidal-dl-ng must be installed: pip install tidal-dl-ng
2. User must have authenticated tidal-dl-ng: run 'tdn login' in terminal
3. tidal-dl-ng authentication is SEPARATE from TIDAL MCP authentication

When processing the results of this tool:
1. Confirm the download was successful or explain any errors
2. Note that playlists may take a long time to download depending on size
3. If tidal-dl-ng is not installed, guide user to install it
4. If authentication failed, guide user to run 'tdn login' in terminal
5. The files will be saved to tidal-dl-ng's configured download location

You can get playlist IDs from the get_user_playlists() function.

Args:
    playlist_id: The TIDAL playlist ID/UUID to download

Returns:
    A dictionary containing download status and any output messages
ParametersJSON Schema
NameRequiredDescriptionDefault
playlist_idYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so description carries full burden. It discloses that download may take long, requires external setup, separate authentication, and explains return value (dictionary with status/messages). All behavioral aspects are covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (prerequisites, usage, processing), but is somewhat lengthy. Could be slightly more concise, yet every sentence adds value and it's front-loaded with purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (external dependency, async download), the description is comprehensive: prerequisites, usage cues, error handling, output explanation, and reference to sibling tool. No output schema exists, but description explains return value adequately.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter (playlist_id). Schema only provides type/title, but description adds meaning: it's a TIDAL playlist ID/UUID and suggests using get_user_playlists to get it. This fully compensates for the 0% schema description coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Downloads a TIDAL playlist to local storage using tidal-dl-ng') and identifies the resource (playlist). It distinguishes from sibling tools like download_album and download_track.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly lists when to use (user asks to download, save) and provides prerequisites (installed tidal-dl-ng, separate authentication). Includes error handling steps and references sibling get_user_playlists for obtaining IDs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

download_trackA
Downloads a TIDAL track to local storage using tidal-dl-ng.

USE THIS TOOL WHENEVER A USER ASKS FOR:
- "Download this track"
- "Save this song to my computer"
- "Download track ID X"
- "I want to download [song name]" (after identifying the track ID)
- Any request to download a single track from TIDAL

IMPORTANT PREREQUISITES:
1. tidal-dl-ng must be installed: pip install tidal-dl-ng
2. User must have authenticated tidal-dl-ng: run 'tdn login' in terminal
3. tidal-dl-ng authentication is SEPARATE from TIDAL MCP authentication

When processing the results of this tool:
1. Confirm the download was successful or explain any errors
2. If tidal-dl-ng is not installed, guide user to install it
3. If authentication failed, guide user to run 'tdn login' in terminal
4. The file will be saved to tidal-dl-ng's configured download location

Args:
    track_id: The TIDAL track ID to download (numeric string)

Returns:
    A dictionary containing download status and any output messages
ParametersJSON Schema
NameRequiredDescriptionDefault
track_idYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the requirement for external tool installation and separate authentication, and mentions the file will be saved to tidal-dl-ng's configured location. However, it doesn't detail error messages or edge cases like network failures.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with distinct sections (usage, prerequisites, processing results, args, returns). Though somewhat long, it is clear and organized. Minor redundancy could be trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description mentions the return is a dictionary with status and messages. It covers prerequisites and typical user requests. For a download tool depending on an external tool, it provides sufficient context for successful use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description adds value by explaining that track_id is the TIDAL track ID and is a numeric string. This provides context beyond the raw schema definition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it downloads a TIDAL track to local storage using tidal-dl-ng. It distinguishes from sibling tools like download_album and download_playlist by specifying it's for a single track.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly provides usage scenarios with examples (e.g., 'Download this track', 'Save this song to my computer') and lists prerequisites (installation and separate authentication). This guides the agent on when to invoke this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_favorite_tracksA
Retrieves tracks from the user's TIDAL account favorites.

USE THIS TOOL WHENEVER A USER ASKS FOR:
- "What are my favorite tracks?"
- "Show me my TIDAL favorites"
- "What music do I have saved?"
- "Get my favorite songs"
- Any request to view their saved/favorite tracks

This function retrieves the user's favorite tracks from TIDAL.

Args:
    limit: Maximum number of tracks to retrieve (default: 20, note it should be large enough by default unless specified otherwise).

Returns:
    A dictionary containing track information including track ID, title, artist, album, and duration.
    Returns an error message if not authenticated or if retrieval fails.
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It mentions error handling for authentication issues but does not disclose other behaviors like rate limits, data freshness, or that it is a read-only operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description contains redundancy, repeating 'Retrieves tracks from the user's TIDAL account favorites' and 'This function retrieves the user's favorite tracks from TIDAL.' It could be more concise by merging the initial statement and the Args/Returns section.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity (one parameter, no output schema, no annotations), the description is fairly complete: it covers purpose, usage cues, parameter meaning, and return format. It does not mention pagination, but that is not critical for the tool's use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% for the single parameter 'limit'. The description adds meaning by explaining the default value (20) and advises that it should be large enough unless specified otherwise, which compensates well for the lack of schema description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves tracks from the user's TIDAL favorites using specific verbs and resource. It does not explicitly contrast with siblings like 'download_favorites', but the purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit example queries for when to use the tool, such as 'What are my favorite tracks?' and 'Show me my TIDAL favorites'. It lacks exclusions or alternatives, but the guidance is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_playlist_tracksA
Retrieves tracks from a specified TIDAL playlist with pagination support.

USE THIS TOOL WHENEVER A USER ASKS FOR:
- "Show me the songs in my playlist"
- "What tracks are in my [playlist name] playlist?"
- "List the songs from my playlist"
- "Get tracks from my playlist"
- "View contents of my TIDAL playlist"
- Any request to see what songs/tracks are in a specific playlist

This function retrieves tracks from a specific playlist in the user's TIDAL account.
The playlist_id must be provided, which can be obtained from the get_user_playlists() function.

PAGINATION: For large playlists, use the offset parameter to get additional tracks.
The response includes 'total_available' showing the total tracks in the playlist.
If total_available > track_count, call again with offset incremented by the limit
to get the next batch (e.g., first call offset=0, second call offset=100, etc.)

When processing the results of this tool:
1. Present the playlist information (title, description, track count) as context
2. List the tracks in a clear, organized format with track name, artist, and album
3. Include track durations where available
4. Check total_available vs track_count to know if there are more tracks
5. If there are many tracks, focus on highlighting interesting patterns or variety

Args:
    playlist_id: The TIDAL ID of the playlist to retrieve (required)
    limit: Maximum number of tracks to retrieve per request (default: 100, max: 500)
    offset: Starting index for pagination (default: 0). Use to get additional tracks.

Returns:
    A dictionary containing tracks, track_count (returned), total_available (in playlist), offset, and limit
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
playlist_idYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description fully explains pagination behavior, response structure, and the need to check total_available to fetch additional tracks. It does not cover authentication or rate limits, but as a read operation, the provided details are sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with sections, bullet points, and numbered lists. It is front-loaded with the core purpose but could be slightly more concise, especially the 'When processing the results' section which is useful but somewhat verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (pagination, multiple parameters, no output schema), the description is highly complete. It covers prerequisites, pagination mechanics, response fields, and even post-processing steps. It leaves little ambiguity for an AI agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The 'Args' section in the description adds meaning beyond the input schema by explaining each parameter's purpose, default values, and constraints (e.g., limit max 500). This compensates for the 0% schema description coverage indicated by context signals.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Retrieves tracks from a specified TIDAL playlist with pagination support' and provides extensive examples of user queries that map directly to this tool. It distinguishes itself from siblings like get_favorite_tracks and get_user_playlists by focusing on playlist tracks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly lists when to use the tool with example queries and mentions the prerequisite of obtaining playlist_id from get_user_playlists(). It does not explicitly state when not to use it, but the examples and context provide clear guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_user_playlistsA
Fetches the user's playlists from their TIDAL account.

USE THIS TOOL WHENEVER A USER ASKS FOR:
- "Show me my playlists"
- "List my TIDAL playlists"
- "What playlists do I have?"
- "Get my music collections"
- Any request to view or list their TIDAL playlists

This function retrieves the user's playlists from TIDAL and returns them sorted
by last updated date (most recent first).

When processing the results of this tool:
1. Present the playlists in a clear, organized format
2. Include key information like title, track count, and the TIDAL URL for each playlist
3. Mention when each playlist was last updated if available
4. If the user has many playlists, focus on the most recently updated ones unless specified otherwise

Returns:
    A dictionary containing the user's playlists sorted by last updated date
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Describes sorting by last updated date and processing instructions, but lacks details on authentication, side effects, or error handling; no annotations to compensate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Contains redundant example list and processing instructions beyond the core description, making it slightly verbose for what it does.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple zero-parameter read tool, the description covers purpose, usage examples, and sorting behavior; missing only minor details like authentication requirement.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters, so schema coverage is 100%; description adds no parameter info, which is acceptable. Baseline score of 4 for zero-parameter tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Fetches the user's playlists from their TIDAL account') and distinguishes from sibling tools like create/delete playlist operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit example queries and advises to use this tool for those cases, but does not mention when not to use or alternatives among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

recommend_tracksA
Recommends music tracks based on specified track IDs or can use the user's TIDAL favorites if no IDs are provided.

USE THIS TOOL WHENEVER A USER ASKS FOR:
- Music recommendations
- Track suggestions
- Music similar to their TIDAL favorites or specific tracks
- "What should I listen to?"
- Any request to recommend songs/tracks/music based on their TIDAL history or specific tracks

This function gets recommendations based on provided track IDs or retrieves the user's
favorite tracks as seeds if no IDs are specified.

When processing the results of this tool:
1. Analyze the seed tracks to understand the music taste or direction
2. Review the recommended tracks from TIDAL
3. IMPORTANT: Do NOT include any tracks from the seed tracks in your recommendations
4. Ensure there are NO DUPLICATES in your recommended tracks list
5. Select and rank the most appropriate tracks based on the seed tracks and filter criteria
6. Group recommendations by similar styles, artists, or moods with descriptive headings
7. For each recommended track, provide:
   - The track name, artist, album
   - Always include the track's URL to make it easy for users to listen to the track
   - A brief explanation of why this track might appeal to the user based on the seed tracks
   - If applicable, how this track matches their specific filter criteria
8. Format your response as a nicely presented list of recommendations with helpful context (remember to include the track's URL!)
9. Begin with a brief introduction explaining your selection strategy
10. Lastly, unless specified otherwise, you should recommend MINIMUM 20 tracks (or more if possible) to give the user a good variety to choose from.

[IMPORTANT NOTE] If you're not familiar with any artists or tracks mentioned, you should use internet search capabilities if available to provide more accurate information.

Args:
    track_ids: Optional list of TIDAL track IDs to use as seeds for recommendations.
              If not provided, will use the user's favorite tracks.
    filter_criteria: Specific preferences for filtering recommendations (e.g., "relaxing music,"
                     "recent releases," "upbeat," "jazz influences")
    limit_per_track: Maximum number of recommendations to get per track (NOTE: default: 20, unless specified otherwise, we'd like to keep the default large enough to have enough candidates to work with)
    limit_from_favorite: Maximum number of favorite tracks to use as seeds (NOTE: default: 20, unless specified otherwise, we'd like to keep the default large enough to have enough candidates to work with)

Returns:
    A dictionary containing both the seed tracks and recommended tracks
ParametersJSON Schema
NameRequiredDescriptionDefault
track_idsNo
filter_criteriaNo
limit_per_trackNo
limit_from_favoriteNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses that recommendations are based on seed tracks, uses default limits, and instructs not to include seed tracks in results. However, it does not mention any side effects or authorization needs beyond the tool's purpose.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is excessively long (over 400 words) and includes extensive post-processing instructions for the AI (steps 1-10) that are not part of the tool's core definition. The essential purpose and parameters are buried among verbose guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (seeds, filters, limits, and recommendation logic), the description is quite complete. It explains behavior when track_ids is empty, how limits work, and what the output contains. It could be improved by more explicitly stating the return format.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description compensates by explaining each parameter in detail: track_ids (optional seeds), filter_criteria (string), limit_per_track (default 20, with rationale), and limit_from_favorite (default 20). It adds meaning beyond the schema's type and default values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it recommends music tracks based on specified track IDs or the user's TIDAL favorites, and distinguishes from sibling tools by focusing on recommendations rather than search, playlists, or downloads.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly lists when to use the tool with concrete examples (e.g., 'Music recommendations', 'What should I listen to?'). It does not explicitly state when not to use it, but the positive use cases are very clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_tidalA
Search TIDAL's catalog for tracks, albums, artists, and playlists.

USE THIS TOOL WHENEVER A USER ASKS FOR:
- "Search for [song/album/artist name]"
- "Find [song name] on TIDAL"
- "Look up [artist name]"
- "Search TIDAL for [query]"
- "Find albums by [artist]"
- Any request to search or find music in TIDAL's catalog

When processing the results of this tool:
1. Present the top_hit first if available - this is TIDAL's most relevant result
2. Group results by type (tracks, albums, artists, playlists)
3. Include the TIDAL URL for each result so users can easily access them
4. For tracks, include artist and album information
5. For albums, include artist and track count
6. Format results in a clear, readable manner

Args:
    query: Search query (e.g., "Bohemian Rhapsody", "Radiohead", "Dark Side of the Moon")
    search_type: Type of content to search for:
                - "track" - Search only for tracks/songs
                - "album" - Search only for albums
                - "artist" - Search only for artists
                - "playlist" - Search only for playlists
                - "all" (default) - Search all content types
    limit: Maximum number of results per type (default: 50, max: 300)

Returns:
    Dictionary with search results organized by type (tracks, albums, artists, playlists)
    and an optional top_hit for the most relevant result
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
search_typeNoall

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so description carries full burden. It discloses return format (dictionary with grouped results and top_hit) and gives processing instructions. Does not explicitly state idempotency or safety, but as a search tool it is assumed read-only.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is structured with clear sections (purpose, when to use, processing instructions, args, returns) and front-loaded. It is somewhat long but necessary given the lack of annotations and schema descriptions; every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, so description compensates by explaining return format and processing steps. Covers search across multiple content types with parameter details. Could mention pagination behavior, but limit parameter suffices. Overall complete for a search tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description thoroughly explains each parameter: query with examples, search_type with explicit options ('track', 'album', 'artist', 'playlist', 'all'), and limit with default (50) and max (300). This adds significant value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Search TIDAL's catalog for tracks, albums, artists, and playlists.' It provides specific example user requests and distinguishes from sibling tools like batch_search_tidal, which handles multiple queries.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly lists when to use the tool with concrete user requests ('USE THIS TOOL WHENEVER A USER ASKS FOR:'). Does not explicitly mention when not to use or alternatives, but the sibling context and the examples make usage clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tidal_loginA
Initiate TIDAL authentication. Returns an auth URL for the user to open manually.
After opening the URL and completing login, call tidal_login_complete() to finish.
If already authenticated, returns success immediately.

Returns:
    A dictionary containing auth URL and instructions, or success if already authenticated
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses main behavior (returns auth URL, success if already authenticated) but omits details like URL expiration or error handling. Minor gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise at 5 sentences (including returns block), all sentences earn their place. Front-loaded with action verb 'Initiate'. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters and no output schema, the description is complete: explains purpose, manual flow, completion call, and return value.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist (0 params), so baseline is 4. Description adds meaning by explaining the tool's purpose and return value beyond the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it initiates TIDAL authentication, returns an auth URL, and distinguishes from the sibling tool tidal_login_complete by specifying when to call that function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use (initiate auth) and when not (already authenticated returns success). Also provides step-by-step guidance to call tidal_login_complete after manual login.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tidal_login_completeA
Complete a pending TIDAL authentication. Call this after the user has opened
the auth URL from tidal_login() and completed the browser login.

Args:
    timeout: Maximum seconds to wait for authentication completion (default: 300)

Returns:
    A dictionary containing authentication status and user information if successful
ParametersJSON Schema
NameRequiredDescriptionDefault
timeoutNo

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry behavioral transparency. It indicates that the tool waits for authentication completion with a timeout and returns a dictionary. However, it lacks details on what happens on timeout, error conditions, or side effects, leaving some uncertainty.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise and well-structured, with the purpose front-loaded immediately. Every sentence is relevant and necessary, with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of authentication flows and the existence of 15 sibling tools, the description provides sufficient context: it explains the flow, return type, and parameter. The absence of an output schema is partially compensated by mentioning the return dictionary. A brief note on error/timeout behavior would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although the input schema coverage is 0%, the description includes an 'Args' section that explains the timeout parameter's meaning and default value. This adds semantic value beyond the schema, which only lists the parameter name and type.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Complete a pending TIDAL authentication.' It specifies the context (after tidal_login and user completes browser login), making it easily distinguishable from sibling tools like tidal_login.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells when to use this tool: after tidal_login() and user completes browser login. It mentions the timeout parameter but does not provide explicit when-not-to-use instructions or alternatives, though the sibling tools are mostly unrelated operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 16 tool updatesv0.1.0
    • First observedadd_tracks_to_playlist
    • First observedbatch_search_tidal
    • First observedcreate_playlist_from_songs
    • First observedcreate_tidal_playlist
    • First observeddelete_tidal_playlist
    • First observeddownload_album
    • First observeddownload_favorites
    • First observeddownload_playlist
    • First observeddownload_track
    • First observedget_favorite_tracks
    • First observedget_playlist_tracks
    • First observedget_user_playlists
    • First observedrecommend_tracks
    • First observedsearch_tidal
    • First observedtidal_login
    • First observedtidal_login_complete

TDQS

A4.3/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose. The only potential overlap (search_tidal vs batch_search_tidal) is resolved by the batch tool being explicitly for multiple queries. create_tidal_playlist and create_playlist_from_songs differ by input method (track IDs vs song descriptions). Download tools are separated by content type. No ambiguity.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern with lowercase underscores. Examples: add_tracks_to_playlist, delete_tidal_playlist, get_user_playlists. The pattern is uniform across all 16 tools, with no mixing of styles.

Tool Count5/5

16 tools is well-scoped for a music streaming service. It covers authentication, search, playlist management, recommendations, favorites, and downloads. Each tool serves a clear function without unnecessary bloat.

Completeness4/5

The tool set covers core CRUD for playlists (create, read, add tracks, delete), search, recommendations, favorites retrieval, and downloads. Missing are playlist update (title/description), track removal, and add/remove favorite tracks. These are minor gaps; the surface is largely complete for typical MCP interactions.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/raydollete/tidal-dl-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server