Skip to main content
Glama
walterreiner

mcp-spotify-cli

by walterreiner

MCP Spotify CLI

Agente de línea de comandos (CLI) para controlar Spotify mediante lenguaje natural. Implementa la arquitectura Model Context Protocol (MCP) para separar el servidor de herramientas de Spotify del cliente LLM. Soporta múltiples proveedores de IA (Groq, Gemini, OpenAI).

Arquitectura

El proyecto consta de dos componentes principales:

  • mcp_spotify/server.py: Servidor MCP que expone la API de Spotify (Spotipy) como tools estandarizadas.

  • mcp_spotify/agent.py: Cliente que interactúa con el usuario, procesa el lenguaje natural mediante adaptadores LLM y ejecuta las tools del servidor con un límite de iteraciones de seguridad para prevenir consumo excesivo de tokens.

Related MCP server: Spotify MCP Server

Funcionalidades (Tools)

  • get_current_track: Obtiene información del track en reproducción.

  • list_devices: Lista dispositivos activos.

  • search_track / search_playlist: Búsqueda en el catálogo de Spotify.

  • get_my_playlists: Retorna las playlists guardadas por el usuario autenticado.

  • play, pause, next_track, previous_track: Control básico de reproducción.

  • set_volume, set_shuffle, set_repeat: Control de estado y preferencias.

Requisitos

  • Python 3.12+

  • Gestor de paquetes uv.

  • Cuenta de Spotify Premium (necesaria para los endpoints de control de reproducción).

  • App registrada en Spotify Developer Dashboard para obtener Client ID y Client Secret.

  • API Keys de los proveedores LLM a utilizar (Groq, Google GenAI, OpenAI).

Instalación

  1. Clonar el repositorio.

  2. Instalar dependencias utilizando uv:

    uv sync

    (Dependencias principales: mcp, spotipy, google-genai, openai, python-dotenv).

  3. Configurar el archivo .env en la raíz del proyecto.

Configuración (.env)

Crear un archivo .env con las siguientes variables:

SPOTIPY_CLIENT_ID="tu_client_id"
SPOTIPY_CLIENT_SECRET="tu_client_secret"
SPOTIPY_REDIRECT_URI="[http://127.0.0.1:8080](http://127.0.0.1:8080)"
GROQ_API_KEY="tu_api_key_de_groq"
GEMINI_API_KEY="tu_api_key_de_google"
OPENAI_API_KEY="tu_api_key_de_openai"

Ejecución

Ejecutar el agente especificando el proveedor y, opcionalmente, el modelo.

Sintaxis:

uv run mcp-spotify <proveedor> [modelo]

Ejemplo:

Usar Groq (default: llama-3.3-70b-versatile)

uv run mcp-spotify groq

Usar Gemini (default: models/gemini-2.0-flash)

uv run mcp-spotify gemini

Usar Gemini con un modelo específico

uv run mcp-spotify gemini models/gemini-1.5-flash

Modelo de mayor capacidad de razonamiento

uv run mcp-spotify gemini models/gemini-2.5-pro

Usar un modelo específico de OpenAI

uv run mcp-spotify openai gpt-4o

Uso

Una vez iniciado, el prompt permite ingresar comandos en lenguaje natural:

"reproducir mi playlist 'nombre_de_tu_playlist' en modo shuffle"

"baja el volumen al 50% y pasá a la siguiente canción"

"¿qué está sonando?"


Créditos

🛠️ Nota de desarrollo y aprendizaje

Este proyecto es una iniciativa de aprendizaje personal con fines educativos. He desarrollado este agente utilizando el Model Context Protocol (MCP) y bibliotecas de Python, contando con la asistencia de Inteligencia Artificial para la estructura del código, la resolución de errores y la implementación de buenas prácticas de desarrollo.

Comparto este repositorio con la comunidad como una forma de documentar mi proceso de aprendizaje y con la esperanza de que pueda servir como punto de partida o referencia para alguien que esté explorando la integración de LLMs con APIs externas.

¡Cualquier feedback, sugerencia de mejora o pull request es más que bienvenido!

Available Tools

12 tools
get_current_trackA

Devuelve la canción que está sonando ahora mismo.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/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 implies a read-only operation through the verb 'Devuelve' and specifies the returned content ('la canción que está sonando ahora mismo'), but it does not disclose other behavioral traits such as what happens if no track is playing, whether authentication is required, or any rate limits.

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?

A single, front-loaded sentence with zero waste. It immediately states the core behavior and contains no redundant or filler content.

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 low complexity, zero parameters, and an output schema that covers return values, the description is nearly complete for an agent to call the tool correctly. The only missing element is usage guidance, which prevents a perfect score.

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 takes zero parameters, so the baseline score is 4. The description adds no parameter information, which is appropriate since there are none to document and the schema already handles the empty argument object.

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?

States a specific verb ('Devuelve') and resource ('la canción que está sonando ahora mismo'), clearly defining the tool as a getter for the current track. It is inherently distinct from sibling tools like search_track, play, pause, or next_track, so an agent can tell what it does without opening the schema.

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 no explicit guidance on when to use this tool versus alternatives, nor any prerequisites or exclusions. Usage is only implied by the purpose itself, which falls short of the 'clear context' needed for a 4 or the explicit when/when-not for a 5.

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

get_my_playlistsA

Devuelve las playlists del usuario autenticado con sus URIs. Usá siempre esta herramienta primero si el usuario pide reproducir 'mi playlist' o 'mis playlists'.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/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 implies a read-only operation via 'Devuelve' and mentions authenticated-user scope, but it does not discuss permissions, rate limits, or side effects. With an output schema present, return values are covered elsewhere.

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?

Two sentences, front-loaded with the core purpose, and the usage trigger follows immediately. Every sentence earns its place with no wasted wording.

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

Completeness4/5

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

For a simple read-only list tool with an empty input schema and an output schema, the description supplies the needed scope and usage trigger. It could more explicitly distinguish when to use this versus search_playlist, but nothing essential to invoking it correctly is missing.

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 zero parameters, so there is no parameter syntax to explain. The baseline for a no-parameter tool is 4.

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 states a specific verb and resource: returns the authenticated user's playlists with their URIs. The scope 'usuario autenticado' implicitly distinguishes it from search_playlist, but no sibling is named explicitly, so it stops short 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 Guidelines4/5

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

It gives a clear trigger: always use this tool first when the user asks to play 'my playlist' or 'my playlists'. It does not name alternative tools or conditions for not using it, but the usage context is explicit and actionable.

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

list_devicesB

Lista los dispositivos Spotify disponibles.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/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 behavioral burden. It implies a read-only listing operation but does not disclose authorization requirements, whether it returns only currently available devices, or any other behavioral trait such as ordering or rate limits.

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 a single, well-formed sentence that front-loads the purpose with no wasted words. It is appropriately sized for a simple listing tool.

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

Completeness4/5

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

Given the tool's simplicity, zero parameters, and the presence of an output schema, the description does not need to explain return values. It adequately identifies the action, though additional usage context would improve completeness.

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

Parameters4/5

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

The tool has zero parameters, so the baseline is 4. The description correctly does not introduce any parameter semantics, and the empty schema is fully consistent with a no-argument listing tool.

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 states a specific verb ('Lista') and resource ('dispositivos Spotify disponibles') and is clearly distinct from sibling tools, which handle tracks, playlists, and playback control rather than device listing. However, it does not explicitly differentiate itself from siblings or clarify scope beyond listing.

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?

There is no guidance on when to call this tool versus alternatives, no mention of prerequisites, and no indication of what context makes this useful (e.g., before playback when no active device exists). The description simply states the action.

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

next_trackA

Salta a la siguiente canción y devuelve el nombre del tema.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/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 disclosure burden. It conveys that playback state advances (a mutation) and that a track name is returned, but says nothing about permission requirements, what happens at the end of a queue or when nothing is playing, or whether the cue is destructive/skippable.

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?

A single front-loaded sentence that states the action and the return value with no filler. Nothing could be removed without losing meaning.

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

Completeness5/5

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

For a zero-parameter playback-navigation tool with an output schema already documenting the return shape, the description covers everything an agent needs in order to call it correctly. Remaining gaps (queue-end behavior) are edge cases rather than prerequisites for invocation.

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 takes zero parameters, so there is nothing for the description to disambiguate. The baseline for a parameterless tool is 4.

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?

States a specific verb and resource: 'Salta a la siguiente canción' (skip to the next song), which is unambiguous and implicitly contrasts with the sibling previous_track. It does not explicitly name or differentiate against siblings like get_current_track or play, so it stops short of a 5.

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?

There is no guidance on when to use this tool versus alternatives such as play, pause, or previous_track, nor any stated preconditions (e.g. an active playback session). The agent must infer the usage context entirely from the name and verb.

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

pauseB

Pausa la reproducción.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/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 behavioral burden, and it discloses almost nothing. It does not state whether the paused state is resumable, how it affects the current session/queue, or any auth requirement. Only the bare operation is conveyed.

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?

A single short, front-loaded sentence with zero filler or repetition. It is efficient, though its brevity stems partly from under-specification rather than genuine completeness.

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 zero-parameter action tool with an output schema available, a one-line purpose statement is nearly sufficient; the return shape is covered by the output schema. It could still note that it targets the currently active playback, but little is genuinely missing.

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 takes zero parameters, so there is nothing to disambiguate; baseline 4 applies. The description correctly implies no input is needed.

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 states a specific verb and resource (pausing playback), making the effect unambiguous and clearly distinct in intent from the sibling 'play'. It does not explicitly name or contrast against siblings, but the purpose is fully evident.

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?

Usage is only implied: an agent infers this is for suspending ongoing playback, but the description offers no explicit when-to-use, prerequisites, or contrast with 'play'/'next_track'. Adequate but with a clear gap.

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

playA

Reproduce una canción o playlist dado su URI de Spotify. Si no se pasa URI, reanuda la reproducción actual. Ejemplos de URI: spotify:track:xxx o spotify:playlist:xxx

ParametersJSON Schema
NameRequiredDescriptionDefault
uriNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden; it does disclose the default behavior when no URI is passed (resume current playback), which is real value. It omits other important traits: that playback control typically requires a premium/authenticated account, that starting a new track replaces the current playback context, and any error/queue side effects.

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?

Three short sentences, front-loaded with the primary action, followed by the fallback behavior and the format examples. Every sentence adds information with no 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?

For a single-optional-parameter tool with an output schema (so return values need not be explained), the description covers purpose, accepted identifier format, and no-argument behavior. It is nearly complete; only authentication requirements and the side effect of replacing current playback are missing.

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

Parameters4/5

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

Schema coverage is 0% and the single parameter has no description, so the tool description must compensate — and it does, providing two concrete URI format examples and explaining what happens when the optional parameter is omitted (resume). This goes meaningfully beyond the bare 'string, default ""' 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?

States a specific verb (play) and resource (song or playlist) plus the required identifier format (spotify:track:xxx / spotify:playlist:xxx). Its role is unambiguous against siblings like pause, next_track, and search_track, which are clearly different operations.

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?

It gives one conditional usage rule — omit the URI to resume current playback — which is genuinely useful. However, it never points to alternatives (e.g. using search_track/search_playlist to obtain a URI, or pause to stop), so routing guidance is only implied.

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

previous_trackA

Vuelve a la canción anterior y devuelve el nombre del tema.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/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 does disclose the return value (the track name), which is useful, but says nothing about edge behavior such as what happens on the first track of a queue or how it interacts with shuffle/repeat.

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?

One sentence with zero waste, front-loading the action before the return value. Every element earns its place.

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 no-parameter playback control with an output schema covering the return value, the description is nearly complete. Only edge-case behavior (queue boundary, shuffle interaction) is unaddressed.

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 takes zero parameters, so the baseline is 4; there is nothing for the description to clarify beyond what the empty schema already conveys.

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?

States a specific verb and resource ("Vuelve a la canción anterior") plus the return value, and the word "anterior" cleanly contrasts with the sibling next_track. It does not name next_track explicitly, so it stops short of full sibling differentiation.

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?

No guidance on when to use this versus next_track or play, and no prerequisites or state requirements (e.g. whether a queue must exist). Usage is only inferable from the name.

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

search_playlistC

Busca una playlist en Spotify y devuelve el URI para reproducirla.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/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 discloses only that the output is a URI to play, which the output schema already covers; it says nothing about auth requirements, result-count or ranking behavior, or what happens on no-match. This is thin for a tool with zero annotation coverage.

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?

One short sentence with no waste, and the outcome (returning a playable URI) is front-loaded. It is efficient, though nearly too terse to be maximally useful.

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 one-parameter search tool with an output schema, the description covers the essentials and need not explain return values. However, the query format and selection among search siblings remain unaddressed, leaving a real gap for correct invocation.

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

Parameters2/5

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

Schema description coverage is 0% for the single required parameter 'query'. The description does not say whether the query is a playlist name, an artist plus playlist combination, a URL, or how partial matches are handled, so it does not compensate for the schema gap.

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?

States a specific verb and resource ('Busca una playlist') and even names the payload role ('devuelve el URI para reproducirla'). It is distinguishable from search_track by resource, but it never explicitly contrasts itself with search_track or get_my_playlists, which are the tools an agent would plausibly confuse it with.

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?

No statement of when to use this versus search_track (find a single track) or get_my_playlists (enumerate the user's own playlists). There is a hint of workflow intent ('para reproducirla') but no explicit context or exclusions.

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

search_trackC

Busca una canción en Spotify y devuelve el URI para reproducirla.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/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 discloses that the result is a URI usable for playback, which is a useful behavioral cue, but it says nothing about authentication, rate limits, result cardinality, or whether the query matches tracks only or also artists/albums.

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?

A single front-loaded sentence with no filler; the search action and the returned artifact are stated immediately. It is efficient, though very terse.

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?

The output schema exists, so the return value needn't be re-explained, but with no annotations and an undocumented required parameter, the description leaves meaningful gaps about auth and query semantics for what is a gateway tool to playback.

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?

Only one parameter exists and the schema provides 0% description coverage for it. The description hints that the query targets a song, but adds no guidance on format (title only, title+artist, free text) or matching behavior, so it only partially compensates for the undocumented parameter.

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?

It gives a specific verb+resource ('Busca una canción en Spotify') and states the output form ('devuelve el URI para reproducirla'), so the agent knows this is a lookup tool that feeds playback. It doesn't distinguish itself from the sibling search_playlist, which also searches Spotify, so it falls short of a 5.

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?

There is no explicit when-to-use guidance, no prerequisites, and no mention of when to prefer search_playlist. The connection to 'play' is only implied by the mention of returning a URI for playback.

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

set_repeatA

Cambia el modo de repetición. Valores válidos: 'off', 'track', 'context'

  • off: sin repetición

  • track: repite la canción actual

  • context: repite el álbum/playlist

ParametersJSON Schema
NameRequiredDescriptionDefault
modeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/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 usefully discloses the three modes and what each does, but says nothing about persistence, whether it applies to the active device, or interactions with the queue. Adequate disclosure for a simple setter, but not rich.

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?

Front-loads the action, then presents the values as a tight bulleted mapping. No filler sentences; every line earns its place.

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?

An output schema exists, so return values need not be explained, and the single parameter is fully documented. For a simple setter this is nearly complete, with only minor gaps around session/device prerequisites.

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

Parameters5/5

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

Schema coverage is 0% and the schema declares only a bare string with no enum, so the description is the sole source of parameter meaning. It fully enumerates the valid values ('off', 'track', 'context') and explains each one, which is exactly the value the schema fails to provide.

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?

States a specific verb and resource ('Cambia el modo de repetición'), so the agent immediately knows it sets playback repeat behavior. It does not explicitly distinguish itself from the sibling set_shuffle, but the resource is unambiguous.

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

Usage Guidelines3/5

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

Usage is only implied by the playback-control context; there is no explicit when-to-use guidance or any statement about prerequisites (e.g. an active device/session). It does not mention alternatives such as set_shuffle, though the intent is inferable.

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

set_shuffleC

Activa o desactiva el modo aleatorio (shuffle).

ParametersJSON Schema
NameRequiredDescriptionDefault
stateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/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 behavioral burden. It conveys that the operation is a bidirectional toggle, but says nothing about whether the change persists across tracks/sessions, whether it affects the current queue or only future playback, or whether it requires an active playback context.

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?

A single short sentence with no filler and the key concept front-loaded. It is efficient, though it leans on the reader's assumption that shuffle is a playback modifier.

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?

An output schema exists, so return values need no explanation, and the tool has only one required parameter. Still, for a state-mutating playback tool with no annotations, the description leaves persistence scope and preconditions unstated.

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 coverage is 0% for the single boolean parameter, so the description must compensate. It does map the parameter to an on/off concept (activar/desactivar), but never states which boolean value selects which state, leaving the mapping to be guessed.

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?

States a specific verb pair (activates/deactivates) and resource (shuffle mode), so the agent knows exactly what is being toggled. It does not, however, differentiate itself from the sibling set_repeat, which has identical grammar and semantics.

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?

There is no when-to-use guidance, no prerequisite (e.g. whether playback must be active), and no mention of the nearest alternative, set_repeat. Usage must be inferred entirely from the tool name and the playback-control sibling group.

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

set_volumeC

Ajusta el volumen. Valor entre 0 y 100.

ParametersJSON Schema
NameRequiredDescriptionDefault
volume_percentYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/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 does disclose the accepted value range (0-100), which is genuine behavioral information, but says nothing about whether the change persists, whether it applies per-device or globally, or what permissions/state are required.

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?

Two short sentences with zero filler and the constraint front-loaded. It is efficient, though terse enough that it leaves context gaps rather than being over-long.

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?

An output schema exists, so return values need not be described. However, with no annotations and no usage context, an agent lacks information about scope (which device, persistence) and prerequisites for a playback-mutating tool, leaving the definition barely adequate.

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 0% and the single parameter 'volume_percent' has no schema description, so the description's 'Valor entre 0 y 100' is the only source of its valid range. That is useful compensation, but no units nuances (e.g., clamping behavior, integer vs. float) or interaction with current volume are explained.

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 states a specific verb and resource ('Ajusta el volumen'), so an agent immediately knows this sets playback volume. It does not name or differentiate itself from siblings like set_shuffle or set_repeat, but the purpose is unambiguous.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives, no preconditions (e.g., a track must be playing), and no indication of scope (global vs. a specific device among those in list_devices). The agent must infer all usage context.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 12 tool updatesv0.1.0
    • First observedget_current_track
    • First observedget_my_playlists
    • First observedlist_devices
    • First observednext_track
    • First observedpause
    • First observedplay
    • First observedprevious_track
    • First observedsearch_playlist
    • First observedsearch_track
    • First observedset_repeat
    • First observedset_shuffle
    • First observedset_volume

TDQS

A3.5/5.0

Scored across 12 tools

Disambiguation5/5

Each tool targets a distinct resource or playback action: playback state, devices, track search, playlist search, user playlists, and specific playback controls. There is no meaningful overlap between search_track/search_playlist or between play/pause/next/previous.

Naming Consistency4/5

Names are consistently snake_case and mostly follow verb_noun or action_noun patterns (get_current_track, list_devices, set_volume). Minor deviations exist with bare verbs play/pause and next_track/previous_track, but the set remains predictable.

Tool Count5/5

Twelve tools is well-scoped for Spotify playback control, with each tool covering a distinct operation. The count is neither thin nor excessive for the domain.

Completeness3/5

Core playback is covered: play, pause, skip, volume, shuffle, repeat, current track, search, and playlists. However, notable gaps remain: no device transfer/selection despite list_devices, no seek/position control, no queue management, and no playback state beyond the current track.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers