Your Spotify MCP Server
Provides access to Spotify's Web API and Your Spotify analytics to retrieve unlimited listening history, generate custom statistics and 'Wrapped' summaries, search the catalog, and control playback and playlists.
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., "@Your Spotify MCP ServerCreate a custom Wrapped summary for the summer of 2024"
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.
Your Spotify MCP Server
A Model Context Protocol (MCP) server that connects AI assistants to Your Spotify's analytics API and Spotify's Web API.
Requires: A self-hosted Your Spotify instance for unlimited listening history analytics.
Why This MCP Server?
Feature | Spotify API | Your Spotify MCP |
Listening history | Last 50 tracks | Unlimited |
Custom time ranges | No | Yes (any period) |
Play count stats | No | Yes |
Collaborative analytics | No | Yes (affinity)* |
Custom Wrapped | Annual only | Any time period |
*Affinity analysis requires authenticated web session; see Known Issues
Related MCP server: Spotify MCP Node Server
Features
Tier 1: Core Analytics (Your Spotify API)
get_track_stats - Detailed listening statistics for any track
get_top_tracks - Top tracks for any time period
get_top_artists - Top artists for any time period
get_artist_stats - Artist listening patterns
search_listening_history - Search your complete history
Tier 2: Enhanced Analytics
create_custom_wrapped - Spotify Wrapped for ANY time period
analyze_affinity - Collaborative listening analysis
get_listening_timeline - Timeline of listening activity
get_artist_rank - Your ranking for an artist
get_track_rank - Your ranking for a track
Tier 3: Power Analytics
analyze_listening_patterns - Peak listening times, habits
get_discovery_insights - New music discoveries
compare_listening_periods - Period-over-period comparisons
export_listening_data - Export in JSON, CSV, or summary format
Tier 4: Account Management
get_listening_summary - Overview of listening habits
update_user_settings - Manage account settings
generate_public_share_link - Share your stats
Tier 5: Spotify Control (Optional)
Requires Spotify API credentials - see setup below
control_playback - Play, pause, skip, seek
manage_playlist - Create and modify playlists
search_spotify - Search Spotify catalog
Note: Tiers 1-4 (18 tools) work with just Your Spotify. Tier 5 (10 additional tools) requires separate Spotify Web API credentials.
Token-Efficient Output (TOON)
This server supports TOON (Token-Oriented Object Notation) for 40-60% token savings on list responses.
# JSON output (verbose)
{"tracks": [{"name": "Song A", "artist": "Artist 1", "plays": 42}, ...]}
# TOON output (compact, default)
tracks[10]{name,artist,plays}:
Song A,Artist 1,42
Song B,Artist 2,38
...Most tools support an output_format parameter:
"toon"(default) - Compact format, ideal for AI assistants"json"- Standard JSON for programmatic use
TOON Resources:
Website: https://toonformat.dev
npm: @toon-format/toon
Requirements
Node.js 18+
Your Spotify instance (self-hosted)
Your Spotify public token (from Your Spotify settings)
Setup
1. Install Dependencies
npm install2. Build
npm run build3. Get Your Spotify Token
Open your Your Spotify dashboard
Go to Settings
Generate/copy your public token
4. Configure Environment Variables
Required:
YOUR_SPOTIFY_API_URL- Your Your Spotify API URL (e.g.,https://your-spotify-api.example.com)YOUR_SPOTIFY_TOKEN- Your public token from Your Spotify
Optional (for Tier 5 features):
SPOTIFY_CLIENT_ID- Spotify App Client IDSPOTIFY_CLIENT_SECRET- Spotify App Client SecretSPOTIFY_ACCESS_TOKEN- Spotify OAuth Access TokenSPOTIFY_REFRESH_TOKEN- Spotify OAuth Refresh Token
5. Configure Claude Desktop
Add to your Claude Desktop config (~/.config/Claude/claude_desktop_config.json on Linux):
{
"mcpServers": {
"your-spotify": {
"command": "node",
"args": ["/path/to/your-spotify-mcp/build/index.js"],
"env": {
"YOUR_SPOTIFY_API_URL": "https://your-spotify-api.example.com",
"YOUR_SPOTIFY_TOKEN": "your_public_token_here"
}
}
}
}More configurations: See examples/ for Claude Code, Gemini, and other client configs.
Usage Examples
Once configured, you can ask Claude:
"What are my top 10 tracks?"
"Show me my most played songs from summer 2024"
"Create my Spotify Wrapped for Q1 2024"
"How many times have I listened to [track name]?"
"What songs would my partner and I both enjoy?" (affinity)
Development
# Build and watch for changes
npm run watch
# Run in development mode
npm run dev
# Clean build
npm run cleanArchitecture
src/
├── index.ts # Main entry point, MCP server setup
├── lib/
│ ├── your-spotify-client.ts # Your Spotify HTTP client
│ ├── spotify-client.ts # Spotify Web API client
│ └── toon-utils.ts # TOON format utilities
├── services/
│ └── your-spotify-service.ts # Business logic layer
└── tools/
├── tier1/ # Core analytics
├── tier2/ # Enhanced analytics
├── tier3/ # Power analytics
├── tier4/ # Account management
└── tier5/ # Spotify controlRoadmap
Completed (v0.2.x)
Core analytics tools (Tier 1) - 5 tools
Enhanced analytics (Tier 2) - Custom Wrapped, Affinity, Rankings
Power analytics (Tier 3) - Patterns, Comparisons, Export
Account management (Tier 4) - Settings, Sharing
TOON format support for token-efficient output
Public token authentication
Optional (v0.2.x)
Spotify playback control (Tier 5) - Requires Spotify API credentials
Future
Dedicated API token authentication (contribution to Your Spotify upstream)
Enhanced rate limiting
WebSocket support for real-time updates
Related Projects
Your Spotify - Self-hosted Spotify tracking dashboard (required)
TOON Format - Token-efficient data format for LLMs
Documentation
Usage Guide - Practical examples and workflows
Tools Reference - Complete API reference for all 28 tools
Architecture - System design documentation
Configuration Examples - Ready-to-use configs for Claude, Gemini, etc.
Contributing
See CONTRIBUTING.md for guidelines.
Security
See SECURITY.md for vulnerability reporting.
License
Apache 2.0 - See LICENSE for details.
Available Tools
18 toolsanalyze_affinityA
Analyze listening overlap between multiple Your Spotify users.
Find songs that multiple users share in common - perfect for:
Creating collaborative playlists
Road trip music everyone enjoys
Party playlists where everyone knows the songs
Understanding shared music tastes with friends
Two analysis modes:
minima: Songs EVERYONE has listened to (highest overlap)
Good for: "Songs we ALL know"
Score based on lowest listener's play count
average: Songs that satisfy SOME people a lot
Good for: "Songs someone will love"
Score based on average play count
Example queries:
"What songs do my girlfriend and I both like?"
"Find music that everyone at the party knows"
"What's our shared music taste?"
| Name | Required | Description | Default |
|---|---|---|---|
| user_ids | Yes | Array of Your Spotify user IDs to compare (2-5 users) | |
| mode | No | Analysis mode: "average" (songs someone loves) or "minima" (songs everyone knows) | minima |
| limit | No | Number of tracks to return (1-30) | |
| start_date | No | Optional start date filter (YYYY-MM-DD) | |
| end_date | No | Optional end date filter (YYYY-MM-DD) |
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 explaining the two analysis modes and their scoring logic (lowest listener's play count vs. average play count). It could improve by mentioning potential limitations like data freshness or privacy considerations, but covers core behavioral aspects 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 (purpose, use cases, analysis modes, examples) and uses bullet points effectively. While comprehensive, it could be slightly more concise by integrating some explanatory text more tightly, but every sentence adds meaningful 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 tool with 5 parameters, 100% schema coverage, and no output schema, the description provides excellent context about what the tool does, when to use it, and how different modes work. The main gap is lack of information about return format or result structure, which would be helpful given no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds value by explaining the semantic difference between 'minima' and 'average' modes beyond the enum values, but doesn't provide additional context for other parameters like date filters or user_ids beyond what's 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 analyzes listening overlap between multiple Spotify users to find shared songs. It specifies the verb 'analyze' and resource 'listening overlap', distinguishing it from siblings like 'analyze_listening_patterns' or 'compare_listening_periods' which likely focus on different aspects of user data.
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 provides when-to-use guidance with four specific use cases (collaborative playlists, road trips, party playlists, understanding shared tastes) and two analysis modes with clear recommendations ('minima' for songs everyone knows, 'average' for songs someone will love). Example queries further illustrate appropriate contexts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_listening_patternsB
Analyze your listening patterns over time.
Discover when you listen to music most - by hour of day, day of week, or month.
Example queries:
"What time of day do I listen to music most?"
"Which day of the week has the most plays?"
"Am I a morning or evening listener?"
| Name | Required | Description | Default |
|---|---|---|---|
| pattern_type | No | Type of pattern to analyze | hour_of_day |
| start_date | No | Start date in YYYY-MM-DD format | |
| end_date | No | End date in YYYY-MM-DD format |
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 what the tool does (analyze patterns) but omits critical behavioral traits: whether it's read-only or mutative, what data sources it accesses, potential rate limits, authentication needs, or output format. The examples hint at query-like behavior but don't clarify operational constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded, starting with the core purpose followed by discovery scope and example queries. Each sentence adds value: the first states the action, the second clarifies temporal dimensions, and the examples illustrate use cases. No redundant or wasteful phrasing is present.
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 moderate complexity (3 parameters, no output schema, no annotations), the description is minimally adequate. It covers the 'what' and provides usage examples but lacks details on behavioral traits, output format, or differentiation from siblings. Without annotations or output schema, the agent must guess about safety, performance, and results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, providing clear documentation for all three parameters (pattern_type with enum, start_date, end_date). The description adds no parameter-specific semantics beyond what the schema already states, such as explaining how 'day_and_time' differs from other pattern types or date range implications. Baseline 3 is appropriate given the schema's completeness.
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: analyzing listening patterns over time by hour, day, or month. It specifies the resource (listening patterns) and verb (analyze) with concrete examples. However, it doesn't explicitly differentiate from sibling tools like 'get_listening_timeline' or 'search_listening_history', which likely provide related but different functionality.
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 through example queries (e.g., 'What time of day do I listen to music most?'), suggesting it's for temporal pattern analysis. However, it lacks explicit guidance on when to use this tool versus alternatives like 'compare_listening_periods' or 'get_listening_timeline', leaving the agent to infer context from tool names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_listening_periodsA
Compare your listening habits between two time periods.
See how your listening volume, diversity, and preferences have changed.
Example queries:
"Compare my listening in summer 2024 vs summer 2023"
"How did my music habits change from Q1 to Q2?"
"Am I listening more this year than last year?"
| Name | Required | Description | Default |
|---|---|---|---|
| period1_start | Yes | Start date of first period (YYYY-MM-DD) | |
| period1_end | Yes | End date of first period (YYYY-MM-DD) | |
| period2_start | Yes | Start date of second period (YYYY-MM-DD) | |
| period2_end | Yes | End date of second period (YYYY-MM-DD) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. The description explains what the tool does (comparative analysis of habits) but lacks critical behavioral details: it doesn't specify whether this requires user authentication, what data sources it accesses, whether it's read-only or has side effects, rate limits, or what the output format looks like. For a tool with zero annotation coverage, this is a significant gap in transparency.
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 and appropriately sized: it starts with a clear purpose statement, elaborates on what's compared, and provides concrete example queries. Every sentence adds value—no redundancy or fluff. The example queries efficiently illustrate usage without over-explaining.
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 moderate complexity (comparative analysis with 4 required parameters), no annotations, and no output schema, the description is partially complete. It adequately explains the purpose and usage through examples but lacks behavioral context (e.g., authentication needs, data sources) and output details. The schema covers parameters well, but the overall context for an AI agent to invoke this tool correctly is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all four parameters clearly documented in the schema (start/end dates for two periods in YYYY-MM-DD format). The description doesn't add any parameter-specific information beyond what the schema provides—it doesn't explain date format requirements, period duration constraints, or handling of invalid dates. With high schema coverage, the baseline score of 3 is appropriate as the schema does the heavy lifting.
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: 'Compare your listening habits between two time periods' and specifies what aspects are compared ('listening volume, diversity, and preferences'). It distinguishes from siblings by focusing on comparative analysis rather than single-period analysis (like analyze_listening_patterns) or data retrieval (like get_listening_timeline). However, it doesn't explicitly differentiate from all siblings (e.g., analyze_affinity might also involve comparison).
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 clear context for when to use this tool through example queries that illustrate typical use cases (comparing seasons, quarters, or years). It implicitly suggests usage for temporal comparison scenarios. However, it lacks explicit guidance on when NOT to use it or direct alternatives among siblings (e.g., vs. analyze_listening_patterns for single-period analysis).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_custom_wrappedA
Generate a custom Spotify Wrapped summary for ANY time period.
Unlike Spotify's official Wrapped (limited to the past year), this creates personalized listening summaries for any date range you choose.
Perfect for:
Seasonal summaries ("My Summer 2024 Wrapped")
Event-based recaps ("Music during my vacation")
Comparative analysis ("This semester vs last semester")
Monthly or weekly reviews
Returns comprehensive statistics including:
Total listening time and track counts
Top 5 tracks, artists, and albums
Listening patterns (peak hours, days)
New music discoveries in that period
Example queries:
"Create my Spotify Wrapped for summer 2024"
"What did my music look like during my road trip in March?"
"Generate a wrapped for the first half of 2024"
"Show me my December listening stats"
| Name | Required | Description | Default |
|---|---|---|---|
| start_date | Yes | Start date in YYYY-MM-DD format | |
| end_date | Yes | End date in YYYY-MM-DD format |
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 does well by specifying what the tool returns (comprehensive statistics including listening time, top tracks/artists/albums, patterns, discoveries) and clarifying it works for 'any date range.' However, it doesn't mention authentication requirements, rate limits, or data freshness considerations that would be helpful for a Spotify API 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, differentiation, use cases, returns, examples) and front-loaded with the core functionality. While comprehensive, some sentences in the 'Perfect for' section could be more concise, and the example queries section is slightly repetitive with the use cases above.
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 does a good job explaining what the tool returns (comprehensive statistics with specific examples). However, for a tool that presumably accesses user listening data, it could better address privacy/authentication context and provide more detail about the format of returned statistics beyond just listing categories.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters clearly documented in the schema. The description adds value by explaining the broader context ('ANY time period' vs official Wrapped's year limitation) and providing example date ranges in the queries, but doesn't add specific parameter semantics beyond what the schema already provides about date format requirements.
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 'generates a custom Spotify Wrapped summary for ANY time period' with specific differentiation from Spotify's official Wrapped. It explicitly distinguishes from siblings like analyze_listening_patterns or get_top_tracks by emphasizing comprehensive summary creation rather than specific analyses.
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 versus alternatives: 'Perfect for: Seasonal summaries, Event-based recaps, Comparative analysis, Monthly or weekly reviews.' It also includes example queries that demonstrate appropriate use cases, giving clear context for when this tool is the right choice among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_listening_dataC
Export your listening data in various formats.
Get a structured export of your listening history, top tracks, artists, etc.
Example queries:
"Export my 2024 listening stats"
"Give me a summary of my listening data"
"Export my top 100 tracks as JSON"
| Name | Required | Description | Default |
|---|---|---|---|
| start_date | No | Start date in YYYY-MM-DD format | |
| end_date | No | End date in YYYY-MM-DD format | |
| format | No | Export format | summary |
| include | No | Data types to include | |
| limit | No | Maximum items to export (1-30) |
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 'export' which implies data retrieval rather than mutation, but doesn't specify whether this requires authentication, has rate limits, affects user data, or what the output looks like. The example queries hint at functionality but don't describe behavioral traits like file generation, download mechanisms, or processing time.
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 reasonably concise with two main sentences followed by example queries. The first sentence states the core functionality, the second elaborates on data types, and the examples provide practical usage context. While the example section is somewhat lengthy, it serves a clear purpose and the overall structure is front-loaded with the essential information.
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 5-parameter tool with no annotations and no output schema, the description provides adequate basic context about what the tool does but lacks important behavioral details. It covers the 'what' (export listening data) but not the 'how' (authentication needs, rate limits, output format details) or 'when' (versus sibling tools). The example queries help but don't compensate for the missing behavioral transparency.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, providing clear documentation for all 5 parameters. The description adds minimal value beyond the schema - it mentions 'various formats' and 'listening history, top tracks, artists, etc.' which aligns with the 'format' and 'include' parameters but doesn't provide additional semantic context. With complete schema coverage, the baseline score of 3 is appropriate.
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 exports listening data in various formats and provides structured exports of listening history, top tracks, and artists. It distinguishes itself from sibling tools like 'get_top_tracks' or 'get_listening_timeline' by focusing on export functionality rather than analysis or retrieval. However, it doesn't explicitly differentiate from 'create_custom_wrapped' which might have overlapping export capabilities.
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 example queries that imply usage for exporting listening stats, summaries, or top tracks, but offers no explicit guidance on when to use this tool versus alternatives like 'create_custom_wrapped' or 'search_listening_history'. There's no mention of prerequisites, limitations, or specific scenarios where this export tool is preferred over other data retrieval tools in the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_artist_rankA
Find where a specific artist ranks in your listening history.
Shows the artist's position among all artists you've listened to, along with percentile ranking.
Example queries:
"Where does Radiohead rank in my listening?"
"Is Taylor Swift in my top 10?"
"What's my percentile for The Beatles?"
| Name | Required | Description | Default |
|---|---|---|---|
| artist_id | Yes | Spotify artist ID or URI | |
| start_date | No | Start date in YYYY-MM-DD format | |
| end_date | No | End date in YYYY-MM-DD format |
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 what the tool returns (artist's position and percentile ranking) but doesn't mention important behavioral aspects like whether it requires authentication, rate limits, data freshness, or how it handles artists not in the listening history. The example queries add some context but leave gaps in operational transparency.
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 structured and concise. The first two sentences clearly state the purpose and what information is returned. The three example queries are highly relevant and illustrative without being redundant. Every sentence earns its place and the information is front-loaded effectively.
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 ranking tool with no output schema, the description provides good context about what information is returned (position and percentile). However, without annotations and with no output schema, it could benefit from more detail about the return format (e.g., numeric position, percentile as percentage, possible error cases). The examples help but don't fully compensate for the lack of structured output documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all parameters well-documented in the schema itself. The description doesn't add any parameter-specific information beyond what's in the schema (artist_id as Spotify ID/URI, date formats). It mentions 'listening history' which aligns with the date parameters but doesn't provide additional semantic context. Baseline 3 is appropriate when schema does the heavy lifting.
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 verbs ('find where', 'shows') and resources ('artist', 'listening history', 'position among all artists', 'percentile ranking'). It distinguishes from siblings like get_artist_stats (which likely provides different metrics) and get_top_artists (which lists top artists rather than ranking a specific one).
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 clear context through example queries that show when to use this tool ('Where does Radiohead rank in my listening?', 'Is Taylor Swift in my top 10?', 'What's my percentile for The Beatles?'). However, it doesn't explicitly state when NOT to use it or name specific alternatives among the sibling tools, though the examples imply it's for ranking individual artists rather than getting lists or other analyses.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_artist_statsA
Get detailed listening statistics for a specific artist from your listening history.
Returns information including:
Total play count across all their tracks
Total listening time
First and last time you played any of their tracks
Your top tracks by this artist
Example queries:
"How much have I listened to Radiohead?"
"What are my top songs by The Weeknd?"
"When did I first discover NF?"
| Name | Required | Description | Default |
|---|---|---|---|
| artist_id | Yes | Spotify artist ID (22 character alphanumeric string) or Spotify URI |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the return data structure (play count, listening time, etc.), which is helpful, but omits behavioral traits like rate limits, authentication needs, data freshness, or error handling. The description doesn't contradict annotations (none exist), but could be more comprehensive for a stats 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 and front-loaded with the core purpose, followed by a bulleted list of return data and relevant examples. Every sentence adds value without redundancy, making it efficient and easy to parse for an AI agent.
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 moderate complexity (single parameter, no output schema, no annotations), the description is largely complete—it explains what the tool does and what data it returns. However, it could improve by addressing missing behavioral context (e.g., data sources, limitations) to fully compensate for the lack of annotations and 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?
Schema description coverage is 100%, with the parameter 'artist_id' fully documented in the schema (Spotify ID/URI). The description adds no additional parameter semantics beyond what the schema provides, such as format examples or validation rules, meeting the baseline for high schema coverage.
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 ('Get detailed listening statistics') and resource ('for a specific artist from your listening history'), distinguishing it from siblings like get_top_artists (aggregate list) or get_track_stats (track-level). The examples reinforce this specificity by showing artist-focused queries.
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 through examples (e.g., 'How much have I listened to Radiohead?'), suggesting it's for personal artist analytics. However, it lacks explicit guidance on when to use alternatives like get_artist_rank (ranking vs. stats) or get_top_tracks (aggregate vs. artist-specific), leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_discovery_insightsA
Discover new music you found in a specific time period.
Shows tracks and artists you listened to for the first time during the period.
Example queries:
"What new music did I discover in 2024?"
"Show me artists I found this summer"
"What were my new discoveries last month?"
| Name | Required | Description | Default |
|---|---|---|---|
| start_date | Yes | Start date in YYYY-MM-DD format | |
| end_date | No | End date in YYYY-MM-DD format (defaults to today) | |
| limit | No | Number of discoveries to return (1-30) |
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. While it states what the tool does ('shows tracks and artists'), it doesn't describe important behavioral aspects like whether this is a read-only operation, what format the results come in, whether there are rate limits, or what happens with invalid date ranges. For a tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.
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 and appropriately sized. The first sentence clearly states the purpose, the second adds crucial clarification about 'first time' listening, and the example queries provide helpful context without being redundant. Every sentence earns its place, and the information is front-loaded effectively.
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 that there's no output schema and no annotations, the description should do more to explain what the tool returns and its behavioral characteristics. While the purpose is clear, the description doesn't address the output format, error conditions, or other contextual information that would help an agent use this tool effectively. The example queries help but don't fully compensate for these 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 100%, so the schema already documents all three parameters thoroughly with formats, defaults, and constraints. The description doesn't add any parameter-specific information beyond what's in the schema. According to the scoring rules, when schema coverage is high (>80%), the baseline is 3 even with no param info in the description.
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 verbs ('discover new music', 'shows tracks and artists') and resources ('you listened to for the first time during the period'). It distinguishes itself from siblings by focusing specifically on first-time discoveries within a time period, unlike tools like 'get_top_artists' or 'search_listening_history' which have broader scopes.
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 clear context for when to use this tool ('in a specific time period', 'you listened to for the first time during the period') and includes example queries that illustrate appropriate use cases. However, it doesn't explicitly state when NOT to use it or name specific alternative tools from the sibling list for different scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_listening_timelineB
Analyze your listening activity over time.
Returns a timeline of plays and listening duration at day, week, or month granularity.
Example queries:
"Show my listening timeline for 2024"
"How has my listening changed month over month?"
"What were my most active listening days last summer?"
| Name | Required | Description | Default |
|---|---|---|---|
| start_date | No | Start date in YYYY-MM-DD format | |
| end_date | No | End date in YYYY-MM-DD format | |
| granularity | No | Time period granularity | day |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions the tool returns a timeline but doesn't disclose behavioral traits such as authentication requirements, rate limits, data privacy implications, or whether it's a read-only operation. The description adds minimal context beyond the basic function, leaving gaps in understanding how the tool behaves in practice.
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 front-loaded: it starts with the core purpose, then details the return value, and ends with relevant example queries. Every sentence earns its place by enhancing understanding without redundancy, making it efficient and well-structured.
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 moderate complexity (3 parameters, no output schema, no annotations), the description is somewhat complete but has gaps. It covers the basic function and parameters but lacks details on behavioral aspects (e.g., safety, performance) and doesn't explain the return format, which is needed since there's no output schema. This makes it adequate but not fully comprehensive for an analytical tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters (start_date, end_date, granularity) with descriptions and constraints. The description adds value by clarifying the purpose of granularity ('day, week, or month granularity') and providing example queries that illustrate parameter usage, but it doesn't add significant meaning beyond what the schema provides, aligning with the baseline score.
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: 'Analyze your listening activity over time' and 'Returns a timeline of plays and listening duration at day, week, or month granularity.' This specifies both the action (analyze) and resource (listening activity/timeline). However, it doesn't explicitly differentiate from sibling tools like 'analyze_listening_patterns' or 'search_listening_history', which likely have overlapping domains.
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 through example queries (e.g., 'Show my listening timeline for 2024'), suggesting it's for temporal analysis of listening data. However, it lacks explicit guidance on when to use this tool versus alternatives like 'compare_listening_periods' or 'analyze_listening_patterns', which might serve similar analytical purposes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_top_artistsB
Get your top artists for a specified time period.
Returns artists ranked by play count including:
Artist name and Spotify ID
Total play count
Total listening time
Example queries:
"Who are my top 10 artists this year?"
"What artists did I listen to most in summer 2024?"
"Show me my all-time top 20 artists"
| Name | Required | Description | Default |
|---|---|---|---|
| start_date | No | Start date in YYYY-MM-DD format (defaults to all history) | |
| end_date | No | End date in YYYY-MM-DD format (defaults to today) | |
| limit | No | Number of artists to return (1-30, default 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses key behavioral traits: it returns ranked artists by play count with specific data fields (artist name, Spotify ID, play count, listening time). However, it doesn't cover important aspects like authentication needs, rate limits, error handling, or whether this is a read-only operation (though implied by 'Get').
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 front-loaded: the first sentence states the core purpose, followed by a bulleted list of return data and relevant example queries. Every sentence earns its place, though the example queries could be slightly 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?
Given no annotations and no output schema, the description provides basic completeness for a read operation: it states what it does, what it returns, and includes examples. However, it lacks details on authentication, error cases, or data freshness that would be helpful for an AI agent, especially with no structured 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?
Schema description coverage is 100%, so the schema fully documents all three parameters (start_date, end_date, limit) with formats, defaults, and constraints. The description adds no additional parameter information beyond what's in the schema, meeting the baseline of 3 for high schema coverage.
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: 'Get your top artists for a specified time period.' It specifies the verb ('Get'), resource ('top artists'), and scope ('for a specified time period'). However, it doesn't explicitly differentiate from sibling tools like 'get_top_tracks' or 'get_artist_stats', which would be needed for a score of 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides implied usage through example queries (e.g., 'Who are my top 10 artists this year?'), suggesting when to use this tool for time-based artist rankings. However, it lacks explicit guidance on when to choose this over alternatives like 'get_artist_stats' or 'search_listening_history', and doesn't mention prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_top_tracksA
Get your most played tracks for any time period.
Returns your top tracks ranked by play count, with full track details and play statistics. This queries your complete listening history (not limited to Spotify's 50 recent tracks).
Time period options:
Omit dates for all-time top tracks
Specify start_date only for "since X" queries
Specify both dates for a specific range
Example queries:
"What are my top 10 songs?"
"What were my most played tracks in summer 2024?"
"Show me my top 20 songs from last month"
"What are my all-time top tracks?"
| Name | Required | Description | Default |
|---|---|---|---|
| start_date | No | Start date in YYYY-MM-DD format. If omitted, includes all history. | |
| end_date | No | End date in YYYY-MM-DD format. If omitted, includes up to today. | |
| limit | No | Number of tracks to return (1-30). Default is 10. | |
| output_format | No | Output format: "toon" (default, 40-60% token savings) or "json" | toon |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses key behavioral traits: it queries complete listening history (not limited to Spotify's 50 recent tracks), returns full track details with play statistics, and explains time period options. However, it doesn't mention authentication requirements, rate limits, or potential data freshness issues.
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 and appropriately sized. It starts with the core purpose, adds important behavioral context, explains parameter semantics through time period options, and provides concrete example queries. Every sentence serves a clear purpose with zero waste.
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 4 parameters with 100% schema coverage but no annotations or output schema, the description provides good context about what the tool does and how to use it. The example queries are particularly helpful. However, for a tool with no output schema, it could better describe the return format beyond 'full track details and play statistics' to help the agent understand the 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?
Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds some value by explaining the semantics of date parameters (omitting dates for all-time, start_date only for 'since X' queries, both dates for specific range), but doesn't provide additional meaning beyond what the schema already covers for 'limit' and 'output_format' parameters.
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: 'Get your most played tracks for any time period' with specific details about ranking by play count and querying complete listening history. It distinguishes from sibling tools like 'get_top_artists' (different resource) and 'search_listening_history' (different query approach).
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 clear context about when to use this tool (for top tracks queries) and includes example queries that illustrate practical applications. However, it doesn't explicitly contrast with alternatives like 'get_track_stats' or 'get_track_rank' from the sibling list, which might offer overlapping functionality.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_track_rankA
Find where a specific track ranks in your listening history.
Shows the track's position among all tracks you've listened to, along with percentile ranking.
Example queries:
"Where does Bohemian Rhapsody rank in my plays?"
"Is this song in my top 100?"
"What percentile is Blinding Lights in my history?"
| Name | Required | Description | Default |
|---|---|---|---|
| track_id | Yes | Spotify track ID or URI | |
| start_date | No | Start date in YYYY-MM-DD format | |
| end_date | No | End date in YYYY-MM-DD format |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions the tool shows position and percentile ranking, which is helpful, but doesn't disclose important behavioral traits: whether this requires authentication, if it's read-only or has side effects, rate limits, data freshness, or what happens with invalid track IDs. For a tool with no annotation coverage, this leaves significant 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 efficiently structured: a clear purpose statement, followed by what information is returned, then relevant example queries. Every sentence earns its place, with no redundant information, and the most important information (what the tool does) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description provides adequate basic information about the tool's purpose and return values (position and percentile). However, for a tool that queries personal listening history, it should ideally mention authentication requirements, data scope limitations, or error conditions to be more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters (track_id, start_date, end_date) with their types and formats. The description doesn't add any parameter-specific information beyond what's in the schema, maintaining the baseline score of 3 for high schema coverage.
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 verbs ('find where a track ranks', 'shows the track's position') and identifies the resource ('your listening history'). It distinguishes from siblings like get_track_stats (which likely provides different metrics) and get_top_tracks (which lists tracks rather than ranking a specific one).
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 through example queries ('Where does Bohemian Rhapsody rank in my plays?'), suggesting this tool is for checking ranking of specific tracks. However, it doesn't explicitly state when to use this vs alternatives like get_track_stats or search_listening_history, nor does it mention exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_track_statsA
Get detailed listening statistics for a specific track from your listening history.
Returns information including:
Total play count across all time
Total listening time
First and last time you played the track
Average plays per day
Your peak listening day for this track
Example queries:
"How many times have I listened to Bohemian Rhapsody?"
"When did I first listen to this song?"
"What's my most played day for this track?"
| Name | Required | Description | Default |
|---|---|---|---|
| track_id | Yes | Spotify track ID (22 character alphanumeric string) or Spotify URI |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses behavioral traits like returning specific statistics (play count, listening time, etc.) and being based on personal history, which is helpful. However, it lacks details on permissions, rate limits, or data freshness that would be important for a stats 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 appropriately sized and front-loaded: the first sentence states the purpose clearly, followed by a bulleted list of return information and example queries. Every sentence earns its place by enhancing understanding without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (single parameter, no output schema), the description is mostly complete. It explains what statistics are returned and provides usage examples, but lacks details on output format or error handling that could 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter 'track_id,' which is well-documented in the schema. The description does not add meaning beyond the schema, as it doesn't explain parameter usage or constraints further. With high schema coverage, the baseline score of 3 is appropriate.
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 verb 'Get' and resource 'detailed listening statistics for a specific track from your listening history,' specifying exactly what the tool does. It distinguishes from siblings like get_artist_stats or get_top_tracks by focusing on individual track-level statistics rather than artist rankings or aggregated lists.
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 clear context for when to use this tool: for querying detailed statistics about a specific track from personal listening history. However, it does not explicitly state when not to use it or name alternatives among sibling tools, such as using get_track_rank for rankings instead of stats.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename_accountA
Change your display username in Your Spotify.
This only affects your Your Spotify profile, not your actual Spotify account.
Example queries:
"Change my username to JonDown"
"Rename my account to MusicFan2024"
| Name | Required | Description | Default |
|---|---|---|---|
| new_username | Yes | New display name (alphanumeric, underscore, hyphen only) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While it clarifies the scope (affects Your Spotify profile, not actual Spotify account), it doesn't mention important behavioral aspects like whether this requires authentication, if changes are reversible, rate limits, or what happens to existing profile data. For a mutation tool with zero annotation coverage, this is insufficient.
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 efficiently structured with two clear sentences stating the purpose and scope, followed by helpful example queries. Every sentence earns its place, and the information is front-loaded with the core functionality stated 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 single-parameter mutation tool with no annotations and no output schema, the description provides adequate basic information about what the tool does and its scope. However, it lacks details about behavioral implications, error conditions, or what happens after execution, which would be valuable given the mutation nature of the operation.
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 doesn't explicitly mention the 'new_username' parameter, but with 100% schema description coverage (the schema fully documents the parameter with constraints), the baseline is 3. The description adds value through example queries that demonstrate parameter usage in context, showing how the parameter fits into natural language requests.
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 ('Change your display username') and resource ('in Your Spotify'), distinguishing it from sibling tools like 'update_user_settings' which likely handles broader settings. It explicitly notes this affects only the Your Spotify profile, not the actual Spotify account, providing important scope clarification.
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 clear context about when to use this tool (to change display username in Your Spotify) and includes example queries that illustrate typical use cases. However, it doesn't explicitly state when NOT to use it or mention alternatives like 'update_user_settings' for other profile changes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revoke_public_accessA
Revoke your public share token, immediately disabling the public link.
Use this when you no longer want your stats publicly accessible.
Example queries:
"Revoke my public share link"
"Disable public access to my stats"
"Remove my public profile"
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the action is immediate and disables the link, which is useful behavioral context. However, it lacks details on permissions, side effects (e.g., if data is deleted), or error handling, leaving gaps for a mutation 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 front-loaded with the core purpose, followed by usage guidance and examples. Every sentence adds value without redundancy, making it efficient and well-structured for quick understanding.
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 complexity (a mutation with no parameters) and lack of annotations/output schema, the description is mostly complete, covering purpose and usage. However, it could include more on behavioral aspects like confirmation or effects, slightly reducing completeness for a security-related action.
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 no parameter documentation is needed. The description does not mention parameters, which is appropriate, but it could briefly note the lack of inputs for clarity, slightly missing the baseline of 5 for perfect handling.
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 ('revoke') and resource ('public share token'), explaining it 'immediately disabling the public link.' It distinguishes from siblings like 'generate_public_share_link' by being the opposite operation, making the purpose explicit and differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit guidance on when to use this tool: 'when you no longer want your stats publicly accessible.' The example queries reinforce this context, and it implicitly contrasts with 'generate_public_share_link' as an alternative, offering clear usage instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_listening_historyB
Search through your complete Spotify listening history.
Unlike Spotify's recent tracks (limited to 50), this searches your ENTIRE history stored in Your Spotify.
Example queries:
"Find all times I listened to Radiohead"
"Search for songs with 'love' in the title"
"When did I listen to OK Computer?"
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query (track name, artist name, or album name) | |
| type | No | Type of search: track, artist, or album | track |
| start_date | No | Start date in YYYY-MM-DD format | |
| end_date | No | End date in YYYY-MM-DD format | |
| limit | No | Number of results to return (1-30, default 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only mentions the scope (entire history vs limited recent tracks). It doesn't disclose authentication requirements, rate limits, privacy implications, or what the response format looks like. For a search tool with no annotation coverage, this leaves significant 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 sized with a clear opening statement followed by helpful examples. Every sentence adds value, though the example section could be slightly more concise. The structure is front-loaded with the core functionality stated 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 search tool with 5 parameters, 100% schema coverage, but no annotations and no output schema, the description provides adequate basic context but lacks behavioral details. The examples help, but without output schema, the description doesn't explain what results look like or any limitations beyond scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are well-documented in the schema. The description adds minimal value beyond the schema - it mentions searching for tracks, artists, and albums (implied by the 'type' parameter) and provides example queries that suggest the 'query' parameter usage. Baseline 3 is appropriate when schema does the heavy lifting.
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 searches through 'complete Spotify listening history' with specific examples showing it searches for tracks, artists, and albums. It distinguishes itself from Spotify's limited recent tracks feature, making the purpose specific and differentiated from potential alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when searching entire history rather than recent tracks, but doesn't explicitly state when to use this tool versus the 15+ sibling tools. Example queries provide context for appropriate queries, but no explicit guidance on alternatives or exclusions is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_user_settingsB
Update your Your Spotify account settings.
Currently supports updating timezone preferences.
Example queries:
"Set my timezone to Pacific Time"
"Change my timezone to Europe/London"
| Name | Required | Description | Default |
|---|---|---|---|
| timezone | No | IANA timezone identifier (e.g., America/New_York) |
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. While it indicates this is a mutation tool ('update'), it doesn't disclose important behavioral aspects like whether this requires specific permissions, whether changes are reversible, what happens to existing settings not mentioned, or what the response looks like. The description adds minimal behavioral context beyond the basic 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 appropriately sized with two clear sentences stating the purpose and scope, followed by helpful example queries. It's front-loaded with the essential information and the examples earn their place by illustrating usage. No wasted words or redundant information.
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 adequate basic information about what the tool does but lacks completeness regarding behavioral aspects. It covers the purpose and parameter context reasonably well but doesn't address important mutation-related concerns like side effects, permissions, or response 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 schema description coverage is 100% with the single parameter 'timezone' well-documented in the schema. The description adds some context by mentioning 'timezone preferences' and providing example queries, but doesn't add significant semantic meaning beyond what the schema already provides about the IANA timezone format requirement.
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 as updating Spotify account settings, specifically mentioning timezone preferences. It provides a specific verb ('update') and resource ('your Spotify account settings'), but doesn't explicitly differentiate from sibling tools like 'rename_account' which might also modify account information.
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 through the example queries showing when to use this tool ('Set my timezone...', 'Change my timezone...'), but doesn't provide explicit guidance about when to choose this versus alternatives like 'rename_account' or whether there are prerequisites for using this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools have distinct purposes, such as analyze_affinity for user overlap and get_top_tracks for ranking tracks. However, some overlap exists between get_artist_stats and get_artist_rank, which both focus on artist-specific data, potentially causing confusion. The descriptions help differentiate them, but the boundaries could be clearer.
All tool names follow a consistent snake_case pattern with clear verb_noun structures, such as analyze_affinity, get_top_tracks, and update_user_settings. There are no deviations in naming conventions, making the set predictable and easy to navigate.
With 18 tools, the count is slightly high but reasonable for a Spotify analytics server covering user stats, sharing, and account management. It includes core functionalities like analysis, ranking, and export, though it might feel a bit heavy compared to more focused servers.
The toolset provides comprehensive coverage for Spotify listening analytics, including analysis, ranking, history search, data export, sharing, and account settings. There are no obvious gaps; it supports full lifecycle operations from data retrieval to user customization and public sharing.
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
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…
The media memory layer for AI agents and their humans. Your AI client gets 29 tools to search your collection, add items, update ratings, preview music, and find patterns across everything you've read, watched, and listened to.
Query your Twitch streams, events, supporters, raids & rankings from an AI assistant via OAuth.
Your real Instagram, TikTok, YouTube, LinkedIn and Threads history, readable by your AI.
Related MCP Servers
- FlicenseBqualityDmaintenanceEnables AI assistants to control Spotify playback, search for music, manage playlists, and interact with your Spotify library through natural language commands.19
- AlicenseBqualityDmaintenanceEnables AI assistants to control Spotify playback, manage playlists, search music, and access listening history. Requires Spotify Premium and uses secure OAuth 2.0 with PKCE authentication.13109MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to control Spotify playback, search music, manage playlists and library, and access user listening insights via the Spotify Web API.
- AlicenseBqualityCmaintenanceConnects AI assistants to the Spotify Web API, enabling playback control, search, and recommendations.8MIT
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/pentafive/your-spotify-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server