TIDAL MCP: My Custom Picks
The TIDAL MCP server enables personalized music recommendations and playlist management by integrating with TIDAL's API.
With this server, you can:
Authenticate with your TIDAL account through a browser flow
Retrieve favorite tracks from your TIDAL library
Get personalized music recommendations based on your favorites, specific seed tracks, or custom criteria (mood, genre, tempo, recency)
View and list your existing TIDAL playlists
Retrieve tracks contained within any of your playlists
Create new playlists in your TIDAL account with specified titles and tracks
Delete playlists you no longer need
Mentioned as a reference point for music recommendation features, but the MCP specifically integrates with TIDAL, not Spotify.
Provides tools for interacting with TIDAL music streaming service, including authenticating with TIDAL, retrieving favorite tracks, getting personalized music recommendations, creating and managing playlists, and accessing track radio functionality.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@TIDAL MCP: My Custom Pickscreate a playlist from my favorite tracks with chill late-night vibes"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
TIDAL MCP: My Custom Picks 🌟🎧

Most music platforms offer recommendations — Daily Discovery, Top Artists, New Arrivals, etc. — but even with the state-of-the-art system, they often feel too "aggregated". I wanted something more custom and context-aware.
With TIDAL MCP, you can ask for things like:
"Based on my last 10 favorites, find similar tracks — but only ones from recent years."
"Find me tracks like those in this playlist, but slower and more acoustic."
The LLM filters and curates results using your input, finds similar tracks via TIDAL’s API, and builds new playlists directly in your account.
Features
🌟 Music Recommendations: Get personalized track recommendations based on your listening history plus your custom criteria.
၊၊||၊ Playlist Management: Create, view, and manage your TIDAL playlists
Related MCP server: Spotify Overload - More Tools (18) | More Functions | More Rocking Out
Quick Start
Prerequisites
Python 3.10+
uv (Python package manager)
TIDAL subscription
Installation
Clone this repository:
git clone https://github.com/yuhuacheng/tidal-mcp.git cd tidal-mcpCreate a virtual environment and install dependencies using uv:
uv venv source .venv/bin/activate # On Windows: .venv\Scripts\activateInstall the package with all dependencies from the pyproject.toml file:
uv pip install --editable .This will install all dependencies defined in the pyproject.toml file and set up the project in development mode.
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:

Steps to Install MCP Configuration
Open Claude Desktop
Go to Settings > Developer
Click on "Edit Config"
Paste the modified JSON configuration
Save the configuration
Restart Claude Desktop
Suggested Prompt Starters
Once configured, you can interact with your TIDAL account through a LLM by asking questions like:
“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.”
💡 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!
Available Tools
The TIDAL MCP integration provides the following tools:
tidal_login: Authenticate with TIDAL through browser login flowget_favorite_tracks: Retrieve your favorite tracks from TIDALrecommend_tracks: Get personalized music recommendationscreate_tidal_playlist: Create a new playlist in your TIDAL accountget_user_playlists: List all your playlists on TIDALget_playlist_tracks: Retrieve all tracks from a specific playlistdelete_tidal_playlist: Delete a playlist from your TIDAL account
License
Acknowledgements
Available Tools
7 toolscreate_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
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| track_ids | Yes | ||
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by disclosing authentication requirements, naming convention guidance, and post-creation processing steps. However, it doesn't mention potential failure modes, rate limits, or whether the operation is idempotent, leaving some behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately front-loaded with purpose and usage, but contains verbose sections like the detailed naming convention guidance and post-processing steps that could be streamlined. While all content is relevant, some sentences could be more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description does well by covering authentication, parameters, usage context, and post-creation expectations. However, it lacks explicit information about return value structure and error handling, which would help complete the context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates by explaining all three parameters in the Args section, adding meaning about track IDs being TIDAL-specific, description being optional with default, and title being the playlist name. It doesn't specify format constraints for track IDs, leaving a minor 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 clearly states the tool's purpose with specific verb ('Creates') and resource ('new TIDAL playlist'), and distinguishes it from sibling tools like 'delete_tidal_playlist' and 'get_user_playlists' by focusing on creation rather than deletion or retrieval.
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 provides explicit usage guidance with a dedicated 'USE THIS TOOL WHENEVER' section listing specific user request patterns, plus prerequisites ('user must be authenticated with TIDAL first') and references to alternative tools ('first check the user's existing playlists using get_user_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
| Name | Required | Description | Default |
|---|---|---|---|
| playlist_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It clearly states this is a destructive operation ('Deletes', 'Get rid of'), mentions authentication requirements, and provides post-execution guidance ('Confirm the playlist was deleted successfully'). However, it doesn't mention potential side effects (e.g., whether deletion is permanent/reversible) or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, usage guidelines, prerequisites, processing instructions, Args, Returns) but contains some redundancy (e.g., 'This function deletes...' repeats the opening sentence). Most sentences earn their place, but could be slightly tighter.
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 destructive tool with no annotations and no output schema, the description does well by covering purpose, usage, authentication, parameter semantics, and expected response handling. However, it could better explain the return value format ('dictionary containing the status') and potential error cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage for the single parameter, the description fully compensates by clearly explaining 'playlist_id: The TIDAL ID of the playlist to delete (required)' in the Args section. This adds essential meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Deletes') and resource ('a TIDAL playlist by its ID'), distinguishing it from sibling tools like create_tidal_playlist or get_user_playlists. It provides a complete, unambiguous statement of 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 description includes explicit 'USE THIS TOOL WHENEVER' examples covering various user request phrasings, plus a clear prerequisite ('The user must be authenticated with TIDAL first'). This provides comprehensive guidance on when to use this tool versus alternatives.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It successfully describes key behaviors: authentication requirements ('if not authenticated'), error handling ('if retrieval fails'), and the default limit behavior. However, it doesn't mention rate limits, pagination, or whether this 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, usage guidelines, function description, args, returns). While slightly longer than minimal, every section adds value. The information is front-loaded with the core purpose in the first sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read operation with no annotations or output schema, the description provides comprehensive context: clear purpose, usage guidelines, parameter semantics, return format details, and error conditions. The main gap is the lack of explicit read-only declaration, though this is implied by 'retrieves'.
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?
With 0% schema description coverage and only one parameter, the description provides good semantic context for the 'limit' parameter, explaining its purpose, default value, and usage guidance ('should be large enough by default unless specified otherwise'). This compensates well for the lack of schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('retrieves tracks') and resource ('from the user's TIDAL account favorites'), distinguishing it from sibling tools like get_playlist_tracks or get_user_playlists which target different resources. The opening sentence provides a complete, unambiguous purpose statement.
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 includes an explicit 'USE THIS TOOL WHENEVER' section with multiple example user queries, providing clear guidance on when to invoke this tool. It distinguishes this tool from alternatives by focusing specifically on favorite tracks rather than playlists or recommendations.
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 all tracks from a specified TIDAL playlist.
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 all 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.
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. Mention the total number of tracks in the playlist
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 (default: 100)
Returns:
A dictionary containing the playlist information and all tracks in the playlist
| Name | Required | Description | Default |
|---|---|---|---|
| playlist_id | Yes | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly describes the read-only nature ('retrieves'), specifies the default limit parameter behavior, and provides detailed guidance on how to process and present results. However, it doesn't mention potential limitations like rate limits or authentication 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?
The description is appropriately front-loaded with the core purpose, but includes extensive processing instructions that might be better placed elsewhere. While the content is valuable, the structure could be more streamlined by separating usage guidelines from implementation details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description provides substantial context including purpose, usage guidelines, parameter semantics, and detailed processing instructions. However, it doesn't explicitly describe the return format beyond 'a dictionary containing playlist information and all tracks,' leaving some ambiguity about the exact response structure.
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?
With 0% schema description coverage, the description must compensate for the lack of parameter documentation. It provides clear semantic meaning for both parameters: playlist_id ('TIDAL ID of the playlist to retrieve') and limit ('Maximum number of tracks to retrieve'). The description also explains where to obtain playlist_id and specifies the default value for limit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('retrieves') and resource ('tracks from a specified TIDAL playlist'). It distinguishes this tool from siblings like get_user_playlists (which lists playlists) and get_favorite_tracks (which retrieves favorite tracks rather than playlist tracks).
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 provides explicit usage guidelines with a dedicated 'USE THIS TOOL WHENEVER' section listing multiple user query patterns. It also specifies prerequisites (playlist_id must come from get_user_playlists) and distinguishes this tool from alternatives by focusing on playlist content retrieval.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It successfully describes key behaviors: that it retrieves playlists sorted by last updated date (most recent first), and provides guidance on how to process results. It doesn't mention authentication requirements, rate limits, or error conditions, but covers the core operational behavior adequately.
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 well-structured with clear sections for purpose, usage guidelines, behavioral details, and return format. However, it includes overly specific implementation advice ('When processing the results...') that belongs in agent instructions rather than tool description. Some sentences don't earn their place in a tool definition context.
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 read-only tool with no parameters and no output schema, the description provides good contextual completeness. It explains what the tool does, when to use it, how results are sorted, and what information is returned. The main gap is the lack of authentication context (TIDAL account requirement), but otherwise covers the essential context for this tool's complexity level.
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 0 parameters with 100% schema description coverage. The description appropriately doesn't waste space discussing non-existent parameters. The baseline for 0 parameters is 4, and the description meets this by focusing on what the tool does rather than parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Fetches the user's playlists from their TIDAL account.' This is a specific verb+resource combination that distinguishes it from sibling tools like get_favorite_tracks or get_playlist_tracks. However, it doesn't explicitly differentiate from create_tidal_playlist or delete_tidal_playlist in terms of read vs write operations.
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 provides explicit usage guidelines with a dedicated section: 'USE THIS TOOL WHENEVER A USER ASKS FOR:' followed by multiple example queries. This gives clear context for when to use this tool versus alternatives like get_favorite_tracks or recommend_tracks for different types of music content requests.
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
| Name | Required | Description | Default |
|---|---|---|---|
| track_ids | No | ||
| filter_criteria | No | ||
| limit_per_track | No | ||
| limit_from_favorite | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's behavior: it can use either provided track IDs or the user's TIDAL favorites as seeds, returns both seed and recommended tracks, and includes important processing instructions (e.g., not including seed tracks in recommendations, avoiding duplicates). However, it doesn't mention rate limits, authentication needs, or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately front-loaded with the core purpose and usage guidelines, but it becomes overly verbose with 10 detailed processing instructions for the agent. While some instructions are helpful, others (like formatting requirements and internet search suggestions) exceed what's typically needed in a tool description and could be streamlined.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a recommendation tool with 4 parameters, no annotations, and no output schema, the description does a good job of explaining the tool's behavior, parameters, and expected usage. It covers the main aspects well, though it could benefit from more detail about the return structure (beyond 'a dictionary containing both the seed tracks and recommended tracks') and any limitations or error cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must compensate for the lack of parameter documentation in the schema. It provides clear explanations for all four parameters: 'track_ids' (optional seeds), 'filter_criteria' (specific preferences), 'limit_per_track' (recommendations per track), and 'limit_from_favorite' (favorite tracks to use as seeds). The description adds meaningful context beyond the bare parameter names in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Recommends music tracks based on specified track IDs or can use the user's TIDAL favorites if no IDs are provided.' This specifies the verb ('recommends'), resource ('music tracks'), and distinguishes it from sibling tools like 'get_favorite_tracks' or 'create_tidal_playlist' which have different functions.
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 provides explicit guidance on when to use this tool with a bulleted list of user request scenarios (e.g., 'Music recommendations', 'Track suggestions', 'What should I listen to?'). It also distinguishes usage from alternatives by specifying this is for recommendations based on track IDs or favorites, unlike sibling tools that manage playlists or retrieve favorites directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tidal_loginA
Authenticate with TIDAL through browser login flow.
This will open a browser window for the user to log in to their TIDAL account.
Returns:
A dictionary containing authentication status and user information if successful
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It describes the action (opens a browser window) and return value (dictionary with auth status and user info), which covers basic behavior. However, it lacks details on error handling, timeouts, or what happens if the user cancels the login, leaving gaps in transparency for an authentication 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?
The description is concise and well-structured: two sentences that clearly state the action and the return value, with no wasted words. It's front-loaded with the main purpose. A minor deduction because it could be slightly more efficient by combining ideas, but overall it's very effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of an authentication tool with no annotations and no output schema, the description is moderately complete. It covers the core action and return value, but lacks details on prerequisites (e.g., browser availability), side effects, or error cases. For a tool that interacts with external systems, more context would be beneficial to ensure safe and correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, and schema description coverage is 100%, so there are no parameters to document. The description doesn't need to add parameter semantics beyond the schema, but it correctly notes no inputs are required. Baseline is 4 for 0 parameters, as it appropriately handles the absence of parameters without redundancy.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Authenticate with TIDAL through browser login flow.' It specifies the verb (authenticate) and resource (TIDAL) with the mechanism (browser login flow). However, it doesn't explicitly differentiate from sibling tools, which are all data retrieval/manipulation tools rather than authentication tools, so it doesn't fully address sibling 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 description implies usage context by mentioning 'browser login flow' and returning authentication status, suggesting this tool should be used to establish a session before other TIDAL operations. However, it doesn't explicitly state when to use it versus alternatives (e.g., if there are other auth methods) or provide clear exclusions, leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a distinct purpose with no overlap: create/delete playlists, get favorites, get playlist tracks, get user playlists, recommend tracks, and login. The descriptions clearly differentiate them, and an agent can easily select the correct tool for any TIDAL-related request without confusion.
All tool names follow a consistent verb_noun pattern with 'tidal' prefix (e.g., create_tidal_playlist, get_favorite_tracks, recommend_tracks). The naming is uniform and predictable, making it easy for agents to understand and use the toolset.
With 7 tools, this server is well-scoped for managing TIDAL playlists and recommendations. It covers essential operations (CRUD for playlists, fetching tracks, login) without being too sparse or bloated, making each tool valuable and necessary for the domain.
The toolset provides strong coverage for playlist management (create, delete, list, view tracks) and recommendations, with a login tool for authentication. A minor gap is the lack of an update_playlist tool for modifying existing playlists, but agents can work around this by deleting and recreating. Overall, it supports core TIDAL workflows effectively.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for Suno AI music generation, lyrics, and covers
Find independent music by how it sounds: similar tracks and playlists from a track link.
MCP server for Producer/Riffusion AI music generation
An MCP server that integrates with Discord to provide AI-powered features.
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server that enables highly personalized music recommendations from TIDAL based on custom criteria, allowing users to create and manage playlists directly in their TIDAL account.7MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for Spotify playlist curation and management. 18 tools for song analysis, smart playlist creation, top tracks analysis, and automated recommendations.1MIT
- FlicenseNot gradedqualityDmaintenanceAn MCP server that provides intelligent playlist curation tools using Spotify track data and audio feature analysis. It enables AI assistants to create mood-based playlists, find similar songs, analyze audio characteristics, and curate personalized music collections.
- AlicenseAqualityAmaintenanceA community-maintained MCP server for TIDAL that enables personalized music recommendations, full playlist management, and advanced search across tracks, albums, artists, and playlists via natural language.196MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/yuhuacheng/tidal-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server