Skip to main content
Glama
pentafive

Your Spotify MCP Server

by pentafive

Your Spotify MCP Server

CI License: Apache 2.0 Node.js

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:

Requirements

  • Node.js 18+

  • Your Spotify instance (self-hosted)

  • Your Spotify public token (from Your Spotify settings)

Setup

1. Install Dependencies

npm install

2. Build

npm run build

3. Get Your Spotify Token

  1. Open your Your Spotify dashboard

  2. Go to Settings

  3. 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 ID

  • SPOTIFY_CLIENT_SECRET - Spotify App Client Secret

  • SPOTIFY_ACCESS_TOKEN - Spotify OAuth Access Token

  • SPOTIFY_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 clean

Architecture

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 control

Roadmap

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

Documentation

Contributing

See CONTRIBUTING.md for guidelines.

Security

See SECURITY.md for vulnerability reporting.

License

Apache 2.0 - See LICENSE for details.

Available Tools

18 tools
analyze_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?"

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idsYesArray of Your Spotify user IDs to compare (2-5 users)
modeNoAnalysis mode: "average" (songs someone loves) or "minima" (songs everyone knows)minima
limitNoNumber of tracks to return (1-30)
start_dateNoOptional start date filter (YYYY-MM-DD)
end_dateNoOptional end date filter (YYYY-MM-DD)

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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?"

ParametersJSON Schema
NameRequiredDescriptionDefault
pattern_typeNoType of pattern to analyzehour_of_day
start_dateNoStart date in YYYY-MM-DD format
end_dateNoEnd date in YYYY-MM-DD format

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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

The description clearly states the tool's purpose: 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.

Usage Guidelines3/5

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?"

ParametersJSON Schema
NameRequiredDescriptionDefault
period1_startYesStart date of first period (YYYY-MM-DD)
period1_endYesEnd date of first period (YYYY-MM-DD)
period2_startYesStart date of second period (YYYY-MM-DD)
period2_endYesEnd date of second period (YYYY-MM-DD)

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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

The description clearly states the tool's purpose: '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.

Usage Guidelines4/5

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"

ParametersJSON Schema
NameRequiredDescriptionDefault
start_dateYesStart date in YYYY-MM-DD format
end_dateYesEnd date in YYYY-MM-DD format

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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"

ParametersJSON Schema
NameRequiredDescriptionDefault
start_dateNoStart date in YYYY-MM-DD format
end_dateNoEnd date in YYYY-MM-DD format
formatNoExport formatsummary
includeNoData types to include
limitNoMaximum items to export (1-30)

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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?"

ParametersJSON Schema
NameRequiredDescriptionDefault
artist_idYesSpotify artist ID or URI
start_dateNoStart date in YYYY-MM-DD format
end_dateNoEnd date in YYYY-MM-DD format

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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

The description clearly states the tool's purpose 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.

Usage Guidelines4/5

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?"

ParametersJSON Schema
NameRequiredDescriptionDefault
artist_idYesSpotify artist ID (22 character alphanumeric string) or Spotify URI

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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?"

ParametersJSON Schema
NameRequiredDescriptionDefault
start_dateYesStart date in YYYY-MM-DD format
end_dateNoEnd date in YYYY-MM-DD format (defaults to today)
limitNoNumber of discoveries to return (1-30)

TDQS

A3.7/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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

The description clearly states the tool's purpose 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.

Usage Guidelines4/5

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?"

ParametersJSON Schema
NameRequiredDescriptionDefault
start_dateNoStart date in YYYY-MM-DD format
end_dateNoEnd date in YYYY-MM-DD format
granularityNoTime period granularityday

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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

The description clearly states the tool's purpose: '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.

Usage Guidelines3/5

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"

ParametersJSON Schema
NameRequiredDescriptionDefault
start_dateNoStart date in YYYY-MM-DD format (defaults to all history)
end_dateNoEnd date in YYYY-MM-DD format (defaults to today)
limitNoNumber of artists to return (1-30, default 10)

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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

The description clearly states the tool's purpose: '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.

Usage Guidelines3/5

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?"

ParametersJSON Schema
NameRequiredDescriptionDefault
start_dateNoStart date in YYYY-MM-DD format. If omitted, includes all history.
end_dateNoEnd date in YYYY-MM-DD format. If omitted, includes up to today.
limitNoNumber of tracks to return (1-30). Default is 10.
output_formatNoOutput format: "toon" (default, 40-60% token savings) or "json"toon

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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

The description clearly states the tool's purpose: '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.

Usage Guidelines4/5

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?"

ParametersJSON Schema
NameRequiredDescriptionDefault
track_idYesSpotify track ID or URI
start_dateNoStart date in YYYY-MM-DD format
end_dateNoEnd date in YYYY-MM-DD format

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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

The description clearly states the tool's purpose 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.

Usage Guidelines3/5

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?"

ParametersJSON Schema
NameRequiredDescriptionDefault
track_idYesSpotify track ID (22 character alphanumeric string) or Spotify URI

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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"

ParametersJSON Schema
NameRequiredDescriptionDefault
new_usernameYesNew display name (alphanumeric, underscore, hyphen only)

TDQS

A3.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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"

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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

Given the tool's complexity (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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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?"

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query (track name, artist name, or album name)
typeNoType of search: track, artist, or albumtrack
start_dateNoStart date in YYYY-MM-DD format
end_dateNoEnd date in YYYY-MM-DD format
limitNoNumber of results to return (1-30, default 10)

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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"

ParametersJSON Schema
NameRequiredDescriptionDefault
timezoneNoIANA timezone identifier (e.g., America/New_York)

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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

The description clearly states the tool's purpose 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.

Usage Guidelines3/5

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

A3.7/5.0
Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count4/5

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.

Completeness5/5

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

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/pentafive/your-spotify-mcp'

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