TIDAL MCP: My Custom Picks
This server enables personalized music management with your TIDAL account through AI-powered recommendations and playlist controls.
Key capabilities:
Authenticate with your TIDAL account through browser login
Retrieve and analyze your favorite tracks with customizable limits
Get personalized music recommendations based on custom criteria (tempo, genre, release year) or seed tracks
Manage playlists: create, view, delete, and add tracks
View detailed information about tracks in specific playlists
Configure integration with Claude Desktop for seamless LLM interaction
Uses Flask as the web framework for hosting the MCP server endpoints that communicate with Tidal's API.
Provides personalized music recommendations and playlist management for Tidal users, allowing for custom criteria filtering, creating playlists, viewing favorite tracks, and managing existing playlists directly in your Tidal account.
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 based on my top tracks, but focused on 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: Tempo
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 the full burden of behavioral disclosure. It clearly describes this as a write operation ('creates a new playlist', 'adds the specified tracks'), mentions authentication requirements, provides detailed guidance on naming conventions and post-processing steps, and explains what happens after creation. It doesn't mention error conditions or rate limits, but covers most behavioral aspects well for a tool with no annotations.
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, naming convention, processing instructions, parameters, returns) but is quite lengthy. While most content is valuable, some sections like the detailed naming convention guidance and post-processing steps could be more concise. The core purpose is front-loaded, but the overall length suggests room for tighter editing.
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 provides substantial context: clear purpose, usage guidelines, authentication requirements, parameter semantics, naming conventions, and post-processing instructions. It doesn't describe the return dictionary structure or error conditions, but covers most essential aspects given the complexity of creating a playlist with tracks.
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 semantic explanations for all three parameters: title ('name of the playlist'), track_ids ('List of TIDAL track IDs to add'), and description ('Optional description'). The description adds significant value beyond the bare schema, though it doesn't specify format requirements for track IDs.
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 with the specified tracks'), distinguishing it from sibling tools like delete_tidal_playlist or get_user_playlists. It explicitly mentions adding tracks to the playlist, which differentiates it from tools that only retrieve or modify existing playlists.
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 request patterns, including specific phrases like 'Create a playlist with these songs' and 'Make a TIDAL playlist'. It also mentions prerequisites ('user must be authenticated with TIDAL first') and references sibling tools for context ('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 the full burden of behavioral disclosure. It clearly indicates this is a destructive operation ('deletes a specific playlist'), specifies authentication requirements, and hints at the return format ('dictionary containing the status'). However, it lacks details on error handling, rate limits, or irreversible consequences, which are important for a deletion 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 well-structured with clear sections (purpose, usage guidelines, behavioral notes, parameters, returns) and avoids redundancy. However, the bullet points for usage scenarios are slightly verbose; a more concise phrasing could maintain clarity while reducing length.
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 is moderately complete. It covers purpose, usage, authentication, and parameters adequately, but lacks details on return value structure, error cases, or confirmation prompts, which are critical for safe operation. It meets minimum viability but has gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0%, so the description must compensate. It adds meaningful context for the single parameter ('playlist_id: The TIDAL ID of the playlist to delete'), clarifying its purpose and requirement. While it doesn't detail format constraints (e.g., ID structure), it provides essential semantics 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 avoids tautology by explaining what deletion entails rather than just restating the name.
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 scenarios with bullet points (e.g., 'Delete my playlist', 'Remove a playlist'), includes a clear prerequisite ('user must be authenticated with TIDAL first'), and distinguishes this tool from non-deletion alternatives among siblings. It gives concrete when-to-use guidance.
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 mentions authentication requirements ('Returns an error message if not authenticated') and potential failure modes ('if retrieval fails'), which adds useful context. However, it lacks details on rate limits, pagination, or data freshness, leaving gaps for a tool that accesses user data.
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, args, returns) and front-loaded key information. It avoids redundancy, but the usage examples could be more concise (e.g., listing multiple similar queries). Overall, most sentences add value, though slight trimming is possible.
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, no output schema, and a simple input schema, the description is moderately complete. It covers purpose, usage, parameters, and basic returns/errors, but lacks details on output structure (beyond a high-level mention), authentication flow, or error handling specifics. For a data retrieval tool, this leaves some operational gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaningful semantics for the single parameter 'limit', explaining it's the 'Maximum number of tracks to retrieve' with a default of 20 and a note that it 'should be large enough by default unless specified otherwise.' This compensates for the 0% schema description coverage by clarifying the parameter's role and default behavior beyond the schema's basic type and title.
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: 'Retrieves tracks from the user's TIDAL account favorites.' It specifies the verb ('retrieves'), resource ('tracks'), and source ('user's TIDAL account favorites'), making the function unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'get_playlist_tracks' or 'recommend_tracks' beyond the 'favorites' focus.
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 listing example user queries (e.g., 'What are my favorite tracks?', 'Show me my TIDAL favorites'). It clearly indicates when to use this tool for viewing saved/favorite tracks, though it doesn't specify when not to use it or mention alternatives like 'get_playlist_tracks' for non-favorite content.
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 full burden and does well by disclosing key behaviors: it's a read operation (retrieves), requires authentication (user's TIDAL account), has a default limit (100 tracks), and returns structured data. However, it doesn't mention potential rate limits, error conditions, or pagination for large playlists, leaving some behavioral aspects uncovered.
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 sized and well-structured with clear sections: purpose statement, usage guidelines, prerequisites, processing instructions, and parameter explanations. While slightly verbose, every section adds value, and the information is front-loaded with the core purpose first.
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 2-parameter read tool with no annotations or output schema, the description provides comprehensive context: clear purpose, detailed usage scenarios, behavioral expectations, parameter explanations, and processing guidance. The main gap is the lack of output format details beyond 'a dictionary,' but given the tool's relative simplicity, this is acceptable.
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 well by explaining both parameters: playlist_id is required and can be obtained from get_user_playlists(), and limit has a default of 100. It adds meaningful context about parameter relationships and usage that the schema alone doesn't provide, though it could specify format constraints for playlist_id.
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 all tracks') and resource ('from a specified TIDAL playlist'), distinguishing it from siblings like get_user_playlists (which lists playlists) and get_favorite_tracks (which retrieves favorite tracks). The purpose is unambiguous and well-defined.
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 scenarios with six bulleted examples of user requests that warrant using this tool. It also specifies prerequisites (playlist_id must be obtained from get_user_playlists) and distinguishes this tool from alternatives by focusing on playlist tracks rather than playlist metadata or other track types.
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 effectively describes key behaviors: it retrieves data (read operation), returns playlists sorted by last updated date (most recent first), and implies it's a safe read-only function. However, it doesn't mention potential limitations like rate limits, authentication requirements, 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, but includes extensive usage examples and processing instructions that could be streamlined. While informative, some sections (like the detailed 'When processing the results' list) might be better handled by the agent's general capabilities rather than tool documentation.
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 tool's simplicity (0 parameters, no annotations, no output schema), the description provides good contextual completeness. It explains what the tool does, when to use it, and what to expect from the output. The main gap is the lack of output schema, but the description compensates by describing the return format.
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, so the baseline is 4. The description appropriately doesn't discuss parameters since none exist, focusing instead on the tool's purpose and output behavior.
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 ('fetches') and resource ('user's playlists from their TIDAL account'), distinguishing it from sibling tools like get_favorite_tracks or get_playlist_tracks. It precisely defines what the tool does without being vague or tautological.
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 multiple example user queries (e.g., 'Show me my playlists', 'List my TIDAL playlists'). It clearly distinguishes this as the tool for viewing/list operations versus sibling tools for creation, deletion, or other playlist-related actions.
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 key behaviors: it retrieves recommendations from TIDAL, uses seed tracks (either provided IDs or favorites), filters results based on criteria, and returns a dictionary with seed and recommended tracks. However, it lacks details on rate limits, authentication needs, or error handling, which are important for a tool interacting with an external service.
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 front-loaded with a clear purpose and usage guidelines, but it becomes overly verbose with 10 detailed steps for processing results (e.g., formatting, grouping, explanations). While some of this is helpful, much of it (like instructions to include URLs or avoid duplicates) is redundant or better suited for agent guidelines rather than tool description, reducing conciseness.
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 (4 parameters, no annotations, no output schema), the description is mostly complete. It covers purpose, usage, parameters, and return structure (a dictionary with seed and recommended tracks). However, it lacks details on the output format (e.g., keys in the dictionary, data types) and error cases, which are important for a tool with no output schema.
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 schema description coverage is 0%, so the description must fully compensate. It provides detailed semantics for all four parameters: 'track_ids' as optional seeds or defaults to favorites, 'filter_criteria' for preferences like 'relaxing music,' 'limit_per_track' as maximum recommendations per track with a default of 20, and 'limit_from_favorite' as maximum favorite tracks to use as seeds with a default of 20. This adds significant value 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 tool 'recommends music tracks based on specified track IDs or can use the user's TIDAL favorites if no IDs are provided.' It specifies the verb ('recommends'), resource ('music tracks'), and distinguishes from siblings like 'get_favorite_tracks' or 'create_tidal_playlist' by focusing on generating recommendations rather than retrieving or managing existing content.
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 explicitly lists scenarios for using the tool (e.g., 'Music recommendations,' 'Track suggestions,' 'What should I listen to?'), provides clear alternatives (using track IDs vs. favorites as seeds), and includes exclusions (e.g., not including seed tracks in recommendations). It also specifies when to use it versus other tools by mentioning TIDAL-specific contexts.
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 full burden and does well by disclosing key behavioral traits: it opens a browser window (interactive user flow), describes the authentication process, and mentions what gets returned. However, it doesn't cover potential failure modes, timeout behavior, or whether authentication persists across sessions.
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 perfectly sized with three sentences that each earn their place: first states the purpose and method, second explains the user interaction, third describes the return value. It's front-loaded with the core functionality and wastes no words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an authentication tool with no annotations and no output schema, the description provides good coverage of what the tool does and what it returns. However, it could be more complete by addressing error cases, whether authentication is persistent, and how this tool relates to the sibling tools that presumably require authentication.
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 parameters and 100% schema coverage, the baseline would be 4. The description appropriately doesn't discuss parameters since there are none, and instead focuses on the tool's behavior and return values, which is the correct approach for a parameterless tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Authenticate with TIDAL') and method ('through browser login flow'), distinguishing it from all sibling tools which perform data operations rather than authentication. It precisely communicates what the tool does without being vague or tautological.
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 implicitly indicates this should be used for initial authentication ('Authenticate with TIDAL'), but doesn't explicitly state when NOT to use it or mention alternatives. It provides clear context about the authentication flow but lacks explicit guidance about prerequisites or when to choose this over other authentication methods.
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 clearly distinct purpose with no overlap: create_tidal_playlist and delete_tidal_playlist handle playlist lifecycle, get_favorite_tracks and get_playlist_tracks retrieve different track sources, get_user_playlists lists playlists, recommend_tracks provides recommendations, and tidal_login handles authentication. The descriptions reinforce these distinct roles, making misselection unlikely.
All tools follow a consistent verb_noun pattern with snake_case: create_tidal_playlist, delete_tidal_playlist, get_favorite_tracks, get_playlist_tracks, get_user_playlists, recommend_tracks, and tidal_login. The naming is predictable and readable throughout the set, with no deviations in style or convention.
With 7 tools, the count is well-scoped for managing TIDAL playlists and tracks. Each tool earns its place by covering essential operations like authentication, playlist CRUD, track retrieval, and recommendations, without being overly sparse or bloated for the domain.
The tool set provides strong coverage for playlist management (create, delete, list, view tracks) and track operations (favorites, recommendations), with authentication included. A minor gap exists in updating existing playlists (e.g., add/remove tracks or edit metadata), but agents can work around this by recreating playlists as needed.
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
MCP server for Producer/Riffusion AI music generation
MCP server for progressive tool usage at any scale (see https://klavis.ai)
MCP server for Google Veo AI video generation
Related MCP Servers
- AlicenseAqualityDmaintenanceA server that lets you get customized music recommendations from TIDAL based on your specific criteria, allowing you to create new playlists directly in your TIDAL account.745MIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server for Spotify control and synchronized lyrics retrieval that enables playback management, queue navigation, and music search capabilities. It also features perception tools for real-time track analysis, including BPM, key detection, and timestamped lyrics.1163Apache 2.0
- AlicenseNot gradedqualityFmaintenanceAn MCP server that enables users to control Spotify playback, search for music, and manage playlists through MCP-compatible clients. It supports features like track recommendations and playback management using secure OAuth authentication.MIT
- 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.
Appeared in Searches
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/mikeysrecipes/tidal-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server