Skip to main content
Glama
fborello

MCP Spotify Server

by fborello

🎵 MCP Spotify Server

Um servidor MCP (Model Context Protocol) que permite interagir com o Spotify através de LLMs. Este servidor fornece ferramentas para buscar música, controlar reprodução, gerenciar playlists e muito mais.

🚀 Funcionalidades

  • Autenticação OAuth2 com Spotify

  • Busca por músicas, artistas, álbuns e playlists

  • Controle de reprodução (tocar, pausar, próximo, anterior)

  • Informações da música atual

  • Gerenciamento de dispositivos

  • Listagem e reprodução de playlists

Related MCP server: Spotify MCP Node Server

📋 Pré-requisitos

  1. Node.js (versão 18 ou superior)

  2. Conta Spotify (Premium recomendado para funcionalidade completa)

  3. Aplicação Spotify registrada no Spotify Developer Dashboard

  4. ngrok (para expor o servidor local)

🛠️ Instalação

  1. Clone o repositório:

    git clone https://github.com/fborello/MCPSpotify.git
    cd MCPSpotify
  2. Instale as dependências:

    npm install
  3. Instale o ngrok:

    macOS (com Homebrew):

    brew install ngrok/ngrok/ngrok

    Windows (com Chocolatey):

    choco install ngrok

    Linux:

    # Baixe o binário do site oficial
    curl -s https://ngrok-agent.s3.amazonaws.com/ngrok.asc | sudo tee /etc/apt/trusted.gpg.d/ngrok.asc >/dev/null
    echo "deb https://ngrok-agent.s3.amazonaws.com buster main" | sudo tee /etc/apt/sources.list.d/ngrok.list
    sudo apt update && sudo apt install ngrok

    Ou baixe diretamente do site oficial

  4. Configure as variáveis de ambiente:

    cp env.example .env
  5. Edite o arquivo .env com suas credenciais:

    SPOTIFY_CLIENT_ID=seu_client_id_aqui
    SPOTIFY_CLIENT_SECRET=seu_client_secret_aqui
    SPOTIFY_REDIRECT_URI=http://localhost:3000/callback
  6. Configure o MCP (opcional):

    Para Claude Desktop:

    cp configs/claude-desktop.example.json ~/.claude-desktop/config.json
    # Edite o arquivo com seu caminho e credenciais

    Para Cursor:

    cp configs/cursor.example.json ~/.cursor/mcp.json
    # Edite o arquivo com seu caminho e credenciais

    Para outros clientes MCP:

    cp mcp-config.example.json mcp-config.json
    # Edite o arquivo com seu caminho e credenciais

🔧 Configuração do Spotify

  1. Acesse o Spotify Developer Dashboard

  2. Clique em "Create App"

  3. Preencha os dados:

    • App name: MCP Spotify Server

    • App description: Servidor MCP para integração com Spotify

  4. Após criar, copie o Client ID e Client Secret

  5. Clique em "Edit Settings" e adicione http://localhost:3000/callback nas Redirect URIs

🌐 Configuração do ngrok

Para que o OAuth do Spotify funcione corretamente, você precisa expor seu servidor local para a internet. O ngrok é a ferramenta recomendada para isso.

1. Crie uma conta no ngrok (opcional mas recomendado)

  • Acesse ngrok.com e crie uma conta gratuita

  • Isso permite URLs estáveis e remove limitações de tempo

2. Configure o ngrok

# Autentique sua conta (opcional)
ngrok config add-authtoken SEU_TOKEN_AQUI

# Exponha a porta 8080
ngrok http 8080

3. Atualize a Redirect URI

  1. Copie a URL HTTPS fornecida pelo ngrok (ex: https://abc123.ngrok.io)

  2. No Spotify Dashboard, adicione https://abc123.ngrok.io/callback nas Redirect URIs

  3. Atualize seu arquivo .env:

    SPOTIFY_REDIRECT_URI=https://abc123.ngrok.io/callback

4. Inicie o servidor

# Em um terminal, mantenha o ngrok rodando
ngrok http 8080

# Em outro terminal, inicie o servidor
npm run dev

🚀 Uso

Desenvolvimento

# Terminal 1: Inicie o ngrok
ngrok http 8080

# Terminal 2: Inicie o servidor
npm run dev

Produção

npm run build
npm start

🎯 Ferramentas Disponíveis

Autenticação

  • spotify_auth - Inicia o processo de autenticação

  • spotify_set_tokens - Finaliza a autenticação com o code de retorno

Busca

  • spotify_search - Busca por músicas, artistas, álbuns ou playlists

Controle de Reprodução

  • spotify_play - Toca uma música específica

  • spotify_pause - Pausa a reprodução

  • spotify_resume - Retoma a reprodução

  • spotify_next - Pula para a próxima música

  • spotify_previous - Volta para a música anterior

Informações

  • spotify_current_playing - Obtém informações sobre a música atual

  • spotify_devices - Lista dispositivos disponíveis

  • spotify_playlists - Lista playlists do usuário

Playlists

  • spotify_play_playlist - Toca uma playlist específica

📝 Exemplos de Uso

Fluxo de Autenticação

  1. Iniciar o login (vai abrir o navegador)

{
  "name": "spotify_auth",
  "arguments": {}
}
  1. Depois de autorizar no Spotify, copie o code retornado e finalize:

{
  "name": "spotify_set_tokens",
  "arguments": { "code": "SEU_CODE_AQUI" }
}

Buscar uma música

{
  "name": "spotify_search",
  "arguments": {
    "query": "Bohemian Rhapsody",
    "type": "track",
    "limit": 5
  }
}

Tocar uma música

{
  "name": "spotify_play",
  "arguments": {
    "track_id": "4uLU6hMCjMI75M1A2tKUQC"
  }
}

Buscar playlists

{
  "name": "spotify_playlists",
  "arguments": {
    "limit": 10
  }
}

✅ Validar o Servidor MCP

Para verificar se o servidor está configurado corretamente:

npm run validate

Este comando irá:

  • ✅ Verificar se o build existe

  • ✅ Validar o arquivo .env

  • ✅ Checar variáveis de ambiente

  • ✅ Mostrar a configuração correta para o cliente MCP

Configuração do Cliente MCP

Após validar, você pode usar a configuração sugerida pelo script no seu arquivo de configuração do cliente:

Para Cursor (~/.cursor/mcp.json):

{
  "mcpServers": {
    "spotify": {
      "command": "node",
      "args": ["dist/index.js"],
      "cwd": "/caminho/para/MCPSpotify",
      "env": {
        "SPOTIFY_CLIENT_ID": "seu_client_id",
        "SPOTIFY_CLIENT_SECRET": "seu_client_secret",
        "SPOTIFY_REDIRECT_URI": "sua_redirect_uri"
      }
    }
  }
}

Para Claude Desktop (~/.claude-desktop/config.json):

{
  "mcpServers": {
    "spotify": {
      "command": "node",
      "args": ["dist/index.js"],
      "cwd": "/caminho/para/MCPSpotify",
      "env": {
        "SPOTIFY_CLIENT_ID": "seu_client_id",
        "SPOTIFY_CLIENT_SECRET": "seu_client_secret",
        "SPOTIFY_REDIRECT_URI": "sua_redirect_uri"
      }
    }
  }
}

Importante:

  • Use node dist/index.js (não tsx src/index.ts) para produção

  • Certifique-se de que o caminho cwd está correto

  • Inclua as variáveis de ambiente no arquivo de configuração

  • Após alterar a configuração, reinicie o cliente MCP

🔒 Segurança

  • As credenciais do Spotify são armazenadas apenas localmente

  • Os tokens de acesso são renovados automaticamente

  • Nenhuma informação é enviada para servidores externos (exceto Spotify)

🐛 Solução de Problemas

Erro de Autenticação

  • Verifique se as credenciais no .env estão corretas

  • Confirme se a Redirect URI está configurada no Spotify Dashboard

  • Certifique-se de que o ngrok está rodando e a URL está atualizada no .env

  • Verifique se a URL do ngrok no Spotify Dashboard corresponde à URL no arquivo .env

Erro "Cannot find module" ou caminho incorreto

  • Erro: Cannot find module '/Users/.../src/index.ts'

  • Solução: Use node dist/index.js ao invés de tsx src/index.ts no arquivo de configuração do MCP

  • Execute npm run build antes de usar o servidor

  • Certifique-se de que o cwd no arquivo de configuração aponta para o diretório correto do projeto

  • Execute npm run validate para gerar a configuração correta

Dispositivo Não Encontrado

  • Certifique-se de que o Spotify está aberto em algum dispositivo

  • Verifique se o dispositivo está ativo na sua conta Spotify

Erro de Permissões

  • Algumas funcionalidades requerem Spotify Premium

  • Verifique se todas as permissões foram concedidas durante a autenticação

Problemas com ngrok

  • URL muda a cada reinicialização: Use uma conta ngrok gratuita para URLs estáveis

  • Erro de conexão: Verifique se o ngrok está rodando na porta correta (3000)

  • Timeout: Certifique-se de que o servidor está rodando antes de iniciar o ngrok

  • URL não acessível: Verifique se o firewall não está bloqueando a conexão

📄 Licença

MIT License - veja o arquivo LICENSE para detalhes.

🤝 Contribuição

Contribuições são bem-vindas! Sinta-se à vontade para abrir issues e pull requests.

📞 Suporte

Se você encontrar problemas ou tiver dúvidas, abra uma issue no repositório.

Available Tools

14 tools
spotify_add_tracks_to_playlistC

Adiciona músicas a uma playlist existente

ParametersJSON Schema
NameRequiredDescriptionDefault
playlist_idYesID da playlist no Spotify
track_idsYesArray com os IDs das músicas para adicionar

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 full burden for behavioral disclosure. While 'adiciona' implies a write/mutation operation, the description doesn't disclose important behavioral traits: whether authentication is required, rate limits, what happens if tracks already exist in the playlist, error conditions, or what the response looks like. It provides only the basic action without operational context.

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 extremely concise - a single Portuguese sentence that directly states the tool's purpose. There's zero waste or redundancy, and it's front-loaded with the essential information. Every word earns its place.

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

Completeness2/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 is incomplete. It doesn't address authentication requirements (critical given the sibling 'spotify_auth' tool), doesn't explain what happens on success/failure, and provides no context about the Spotify API's behavior. The description should do more to compensate for the lack of structured metadata.

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?

With 100% schema description coverage, the schema already documents both parameters thoroughly. The description doesn't add any meaningful semantic context beyond what's in the schema - it doesn't explain format requirements, constraints, or provide examples. The baseline of 3 is appropriate when 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 action ('Adiciona' - adds) and target resource ('músicas a uma playlist existente' - tracks to an existing playlist), providing a specific verb+resource combination. However, it doesn't distinguish this tool from potential alternatives like 'spotify_create_playlist' which might also add tracks during creation, or clarify if this is the only way to add tracks versus other methods.

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 guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (like authentication), doesn't specify when to use this versus 'spotify_create_playlist' for new playlists, and offers no context about limitations or best practices for adding tracks.

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

spotify_authB

Inicia o processo de autenticação com o Spotify

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/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 states the tool initiates authentication but doesn't describe what this entails (e.g., opening a browser, returning tokens, requiring user interaction, or handling errors). 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 a single, efficient sentence in Portuguese that directly states the tool's purpose without any unnecessary words. It is appropriately sized and front-loaded, making it easy to parse quickly.

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

Completeness2/5

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

Given the complexity of an authentication tool with no annotations and no output schema, the description is incomplete. It doesn't explain what the tool returns (e.g., tokens, URLs, or status), how it interacts with the user, or any behavioral traits like rate limits or errors, leaving the agent with insufficient context for effective use.

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 with 100% schema description coverage, so the schema fully documents the lack of inputs. The description doesn't add parameter details beyond what the schema provides, but with no parameters, a baseline of 4 is appropriate as there's nothing to compensate for.

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 action ('Inicia o processo de autenticação') and the target resource ('com o Spotify'), making the purpose understandable. It doesn't explicitly differentiate from sibling tools like 'spotify_set_tokens', but the verb 'inicia' suggests starting a process rather than setting tokens directly, which provides some implicit distinction.

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 guidance on when to use this tool versus alternatives like 'spotify_set_tokens', nor does it mention prerequisites or context for authentication. It implies usage for authentication but lacks explicit when/when-not instructions or references to other tools.

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

spotify_create_playlistC

Cria uma nova playlist no Spotify

ParametersJSON Schema
NameRequiredDescriptionDefault
descriptionNoDescrição da playlist (opcional)
nameYesNome da playlist
publicNoSe a playlist deve ser pública (padrão: false)

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 full burden. It states it creates a playlist but doesn't disclose behavioral traits like required permissions, whether it's idempotent, error handling, or what the response includes. This is a significant gap for a mutation 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence in Portuguese with zero waste. It's appropriately sized and front-loaded, clearly stating the tool's purpose without unnecessary elaboration.

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

Completeness2/5

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

Given this is a mutation tool with no annotations and no output schema, the description is incomplete. It lacks details on behavioral aspects, prerequisites, and expected outcomes, making it inadequate for an AI agent to fully understand how to invoke it correctly.

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 (name, description, public) with descriptions. The description adds no additional meaning beyond what the schema provides, meeting the baseline of 3 when 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 'Cria uma nova playlist no Spotify' clearly states the action (creates) and resource (new playlist on Spotify) in Portuguese. It's specific about what the tool does, though it doesn't explicitly differentiate from sibling tools like 'spotify_playlists' which likely lists playlists rather than creates them.

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 guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., authentication via spotify_auth), exclusions, or contextual cues for choosing this over other playlist-related tools.

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

spotify_current_playingB

Obtém informações sobre a música que está tocando

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/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. It states the tool gets information, implying a read-only operation, but doesn't specify what information is returned (e.g., track name, artist, album), whether it requires active playback, error handling (e.g., if nothing is playing), or rate limits. This leaves significant gaps for an agent to understand the tool's 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 a single, efficient sentence in Portuguese that directly states the tool's purpose without unnecessary words. It's front-loaded with the core action ('Obtém informações'), making it easy to parse. Every part of the sentence earns its place by conveying essential intent.

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

Completeness2/5

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

Given the tool's complexity (simple read operation) but lack of annotations and no output schema, the description is incomplete. It doesn't explain what information is returned (e.g., JSON structure), error conditions, or dependencies like authentication. For a tool that interacts with an external service (Spotify), more context is needed to use it effectively.

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 the input schema has 100% description coverage (though empty). The description doesn't need to explain parameters, so it naturally meets the baseline. It doesn't add or detract from parameter understanding, as there are none to document.

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 'Obtém informações sobre a música que está tocando' clearly states the tool's purpose: to get information about the currently playing music. It uses a specific verb ('Obtém') and resource ('música que está tocando'), making the intent unambiguous. However, it doesn't explicitly differentiate from siblings like 'spotify_devices' or 'spotify_playlists', which also provide information but about different resources.

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 guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., requires authentication via 'spotify_auth'), context (e.g., only works if music is actively playing), or exclusions (e.g., not for historical playback data). With siblings like 'spotify_search' for finding tracks, clear usage distinctions are missing.

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

spotify_devicesB

Lista dispositivos disponíveis para reprodução

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/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. It states the tool lists devices but does not describe what the list includes (e.g., device names, types, status), how it's formatted, whether it requires authentication, or any rate limits. This is a significant gap 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence in Portuguese ('Lista dispositivos disponíveis para reprodução') that directly states the tool's function without any wasted words. It is appropriately sized and front-loaded, making it highly efficient.

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

Completeness2/5

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

Given the lack of annotations and output schema, the description is incomplete. It does not explain what the output looks like (e.g., list format, device attributes), behavioral aspects like authentication requirements, or how it integrates with sibling tools (e.g., used before 'spotify_play'). For a tool in a complex Spotify API context, this leaves critical gaps.

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 there is no need for parameter details in the description. The baseline for 0 parameters is 4, as the description appropriately avoids unnecessary parameter information and focuses on the tool's purpose.

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 'Lista dispositivos disponíveis para reprodução' clearly states the tool's purpose as listing available playback devices, using specific verbs ('Lista') and resources ('dispositivos'). However, it does not explicitly differentiate from sibling tools like 'spotify_play' or 'spotify_pause', which are control tools rather than listing tools, so it falls short of a perfect score.

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 guidance on when to use this tool versus alternatives. It does not mention prerequisites (e.g., authentication status), scenarios for use (e.g., before selecting a device for playback), or exclusions, leaving the agent to infer usage from context alone.

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

spotify_nextC

Pula para a próxima música

ParametersJSON Schema
NameRequiredDescriptionDefault
device_idNoID do dispositivo (opcional)

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 states the action ('skip to the next song') but does not mention side effects (e.g., if it advances playback queue, requires active playback, or affects shuffle/repeat modes), permissions needed, or error conditions. This leaves significant gaps in understanding the tool's behavior beyond the basic action.

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, direct sentence in Portuguese that efficiently conveys the core action without any fluff or unnecessary details. It is front-loaded and appropriately sized for a simple tool, with every word earning its place.

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

Completeness2/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 (a playback control action with one optional parameter) and lack of annotations or output schema, the description is incomplete. It does not address behavioral aspects like side effects, error handling, or interaction with sibling tools, leaving the agent with insufficient context for reliable use.

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, with the single parameter 'device_id' documented as optional and for device identification. The description adds no additional parameter semantics beyond what the schema provides, so it meets the baseline score of 3 for adequate coverage without extra value.

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 'Pula para a próxima música' (Portuguese for 'Skip to the next song') clearly states the tool's action (skip) and resource (next song), making the purpose immediately understandable. It does not explicitly differentiate from sibling tools like 'spotify_previous' or 'spotify_pause', but the verb 'skip' implies forward navigation in playback.

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 guidance on when to use this tool versus alternatives such as 'spotify_previous', 'spotify_pause', or 'spotify_resume'. It lacks context about prerequisites (e.g., whether playback must be active) or exclusions, leaving usage decisions to inference from the tool name alone.

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

spotify_pauseC

Pausa a reprodução atual

ParametersJSON Schema
NameRequiredDescriptionDefault
device_idNoID do dispositivo (opcional)

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 states the action ('Pausa') but doesn't describe effects (e.g., pauses playback on a device, requires Spotify Premium, may fail if no active playback), permissions, or response behavior. The description is minimal and lacks necessary context 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 a single, clear sentence in Portuguese ('Pausa a reprodução atual') that directly states the tool's purpose with zero wasted words. It's front-loaded and appropriately sized for a simple action, making it highly efficient and easy to parse.

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

Completeness2/5

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

Given the tool is a mutation (pause action) with no annotations and no output schema, the description is incomplete. It lacks details on behavioral aspects (e.g., what happens on success/failure, requirements like active playback), making it inadequate for safe and effective use by an AI agent. The simplicity of the action doesn't excuse the missing context.

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 'device_id' documented as optional and a string. The description adds no parameter information beyond what the schema provides. Since schema coverage is high, the baseline score of 3 is appropriate, as the description doesn't compensate but doesn't need to 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 'Pausa a reprodução atual' clearly states the action (pause) and target (current playback) in Portuguese. It's specific about what the tool does, though it doesn't explicitly differentiate from sibling tools like 'spotify_resume' beyond the obvious action difference. The purpose is unambiguous but lacks explicit sibling comparison.

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 guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., requires active playback), exclusions, or comparisons to siblings like 'spotify_resume' or 'spotify_play'. Usage is implied from the action name alone, with no contextual instructions.

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

spotify_playC

Toca uma música específica no Spotify

ParametersJSON Schema
NameRequiredDescriptionDefault
device_idNoID do dispositivo (opcional)
track_idYesID da música no Spotify

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 full burden for behavioral disclosure. While 'Toca' implies a playback action, it doesn't specify whether this interrupts current playback, requires premium subscription, has rate limits, or what happens on success/failure. For a mutation tool with zero annotation coverage, this leaves significant behavioral questions unanswered.

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, efficient sentence that gets straight to the point with zero wasted words. It's appropriately sized for a simple playback function and front-loads the essential information.

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

Completeness2/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 is insufficient. It doesn't explain what happens after invocation (does it return success status? error messages? playback confirmation?), nor does it address authentication requirements or potential limitations. Given the complexity of media playback operations, more context is needed.

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 has 100% description coverage, with both parameters clearly documented in the schema itself. The description doesn't add any parameter information beyond what's already in the schema, so it meets the baseline of 3 when 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 action ('Toca' - plays) and the resource ('uma música específica no Spotify'), making the purpose immediately understandable. However, it doesn't differentiate this tool from similar sibling tools like 'spotify_play_playlist' or 'spotify_resume', which also involve playback functionality.

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 guidance on when to use this tool versus alternatives like 'spotify_play_playlist' (for playing entire playlists) or 'spotify_resume' (for resuming playback). There's no mention of prerequisites (like authentication status) or context about when this specific track-playing function is appropriate.

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

spotify_playlistsC

Lista playlists do usuário

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNúmero máximo de playlists (padrão: 20)

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 states it lists user playlists but doesn't mention if it requires authentication, how it handles pagination, rate limits, or what the return format is. This leaves significant gaps for a tool that likely interacts with user data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient phrase in Portuguese ('Lista playlists do usuário') that directly states the purpose without any wasted words. It's appropriately sized and front-loaded, making it easy to parse quickly.

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

Completeness2/5

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

Given the lack of annotations and output schema, the description is incomplete. It doesn't address authentication needs, return format, or error handling, which are crucial for a tool that likely requires user authorization and returns a list of playlists. This leaves the agent with insufficient context for reliable use.

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, with the 'limit' parameter well-documented. The description adds no additional parameter information beyond what the schema provides, so it meets the baseline score of 3 without compensating or adding extra value.

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 'Lista playlists do usuário' clearly states the verb ('Lista') and resource ('playlists do usuário'), making the purpose understandable. However, it doesn't explicitly differentiate from sibling tools like 'spotify_search' or 'spotify_play_playlist', which might also involve playlists, so it doesn't reach the highest score.

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 guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., authentication status), exclusions, or comparisons to siblings like 'spotify_search' for finding playlists, leaving the agent with minimal context for selection.

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

spotify_play_playlistC

Toca uma playlist específica

ParametersJSON Schema
NameRequiredDescriptionDefault
device_idNoID do dispositivo (opcional)
playlist_idYesID da playlist no Spotify

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 states the action ('play') but lacks critical details: it doesn't specify if this starts playback from the beginning, requires an active Spotify session, affects other playback, or has side effects like changing device context. For a mutation 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 a single, efficient sentence in Portuguese that directly states the tool's purpose without unnecessary words. It's front-loaded and wastes no space, making it highly concise and well-structured for quick understanding.

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

Completeness2/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 action with no annotations and no output schema), the description is incomplete. It doesn't cover behavioral aspects like authentication needs, playback effects, or error conditions, and it lacks output information. For a tool that likely interacts with an external service and changes state, this minimal description is insufficient.

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 clear descriptions for both parameters (playlist_id as required, device_id as optional). The description adds no additional meaning beyond the schema, such as format examples or usage context for device_id. Baseline 3 is appropriate since the schema adequately documents the parameters.

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 'Toca uma playlist específica' (Plays a specific playlist) clearly states the verb (play) and resource (playlist), making the purpose immediately understandable. However, it doesn't differentiate from siblings like 'spotify_play' (which likely plays something else) or 'spotify_resume' (which might resume playback), so it doesn't reach the highest score.

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 guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., authentication, active device), exclusions, or comparisons to siblings like 'spotify_play' or 'spotify_resume', leaving the agent to infer usage from context alone.

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

spotify_previousB

Volta para a música anterior

ParametersJSON Schema
NameRequiredDescriptionDefault
device_idNoID do dispositivo (opcional)

TDQS

B3.1/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 states the action ('go back to the previous song') but lacks critical details: whether it requires authentication, if it affects playback state (e.g., resumes if paused), what happens if there's no previous song (error or wrap-around), or rate limits. The description is minimal and misses key behavioral traits for a media control 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 a single, efficient sentence in Portuguese that directly states the tool's purpose with zero wasted words. It is appropriately sized for a simple action tool and front-loaded with the core functionality. Every word earns its place, making it highly concise and well-structured.

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

Completeness2/5

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

Given the tool's complexity (simple media control with one optional parameter), no annotations, no output schema, and minimal description, the description is incomplete. It lacks context on authentication needs, error conditions, playback state implications, and interaction with sibling tools (e.g., 'spotify_pause'). For a tool that modifies playback, more behavioral and contextual information is needed to guide the agent effectively.

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 input schema has 1 parameter with 100% coverage (device_id is described as optional device ID). The description adds no parameter-specific information beyond what the schema provides. Since there are 0 parameters mentioned in the description and schema coverage is high, the baseline is 3, but the tool has only one optional parameter, making the lack of param details less critical, warranting a slightly higher 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 'Volta para a música anterior' (Portuguese for 'Go back to the previous song') clearly states the tool's action with a specific verb ('volta') and resource ('música anterior'). It distinguishes itself from siblings like 'spotify_next' (go forward) and 'spotify_pause' (pause), but doesn't explicitly differentiate from all siblings (e.g., 'spotify_play' could be ambiguous). The purpose is unambiguous but lacks explicit sibling comparison.

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 guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., requires an active playback session), exclusions (e.g., not applicable if at the start of a playlist), or comparisons to similar tools like 'spotify_next' or 'spotify_play'. Usage is implied from the action alone, leaving the agent to infer context.

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

spotify_resumeC

Retoma a reprodução pausada

ParametersJSON Schema
NameRequiredDescriptionDefault
device_idNoID do dispositivo (opcional)

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 of behavioral disclosure. It states the action (resume playback) but doesn't cover critical aspects like authentication requirements (implied by sibling 'spotify_auth'), error conditions (e.g., if no playback is paused), side effects, or response format. This leaves significant 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 a single, clear sentence in Portuguese with zero wasted words. It's front-loaded with the core action and efficiently conveys the purpose without unnecessary elaboration.

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

Completeness2/5

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

For a tool that performs a mutation (resuming playback) with no annotations and no output schema, the description is incomplete. It lacks details on authentication, error handling, return values, and how it interacts with sibling tools. Given the complexity and missing structured data, more context is needed for effective use.

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 single parameter 'device_id' documented as optional and a string. The description adds no additional parameter information beyond what the schema provides, such as format examples or contextual usage. 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.

Purpose4/5

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

The description 'Retoma a reprodução pausada' (Resumes paused playback) clearly states the tool's action and target resource (playback). It's specific with the verb 'retoma' (resumes) and resource 'reprodução pausada' (paused playback). However, it doesn't explicitly differentiate from sibling tools like 'spotify_play' or 'spotify_play_playlist', which might have overlapping functionality.

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 guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., requires active playback to be paused), exclusions, or comparisons to siblings like 'spotify_play' (which might start new playback). Usage is implied from the name but not explicitly stated.

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

spotify_set_tokensC

Conclui a autenticação com o código recebido do Spotify

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesCódigo de autorização retornado pelo Spotify após login

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 of behavioral disclosure. While 'Conclui a autenticação' implies this is a write operation that exchanges an authorization code for tokens, it doesn't disclose what tokens are obtained (access/refresh), where they're stored, whether this requires specific permissions, or what happens on failure. For an authentication tool with zero 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence in Portuguese that directly states the tool's purpose. There's zero wasted language, and it's appropriately sized for a single-parameter tool. Every word earns its place by conveying essential information about completing authentication with a Spotify code.

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

Completeness2/5

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

For an authentication tool with no annotations and no output schema, the description is insufficiently complete. It doesn't explain what authentication tokens are obtained, how they're stored/used, what the tool returns, or error conditions. Given the complexity of OAuth token exchange and the lack of structured documentation, the description should provide more context about the authentication flow and outcomes.

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 single parameter 'code' well-documented in the schema as 'Código de autorização retornado pelo Spotify após login'. The description adds no additional parameter information beyond what the schema provides. With complete schema coverage, the baseline score of 3 is appropriate as the description doesn't enhance parameter understanding.

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 action ('Conclui a autenticação' - Completes authentication) and the resource ('com o código recebido do Spotify' - with the code received from Spotify). It distinguishes from sibling tools like 'spotify_auth' by specifying this is for completing authentication with a code rather than initiating it. However, it doesn't explicitly mention that this is for OAuth token exchange, which would make it more specific.

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 guidance on when to use this tool versus alternatives. It doesn't mention that this should be used after receiving an authorization code from Spotify's OAuth flow, nor does it clarify the relationship with 'spotify_auth' (which likely initiates authentication). There are no explicit when/when-not instructions or alternative tool recommendations.

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

TDQS

A3.5/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose with no overlap: authentication (auth, set_tokens), playback control (play, pause, resume, next, previous), playlist management (create, add_tracks, playlists, play_playlist), search, and device/status queries. The descriptions reinforce these distinct roles, making misselection unlikely.

Naming Consistency5/5

All tools follow a consistent 'spotify_verb' or 'spotify_verb_noun' pattern in snake_case, with verbs like 'add', 'create', 'play', 'pause', etc. This predictability makes the tool set easy to navigate and understand at a glance.

Tool Count5/5

With 14 tools, this server is well-scoped for a Spotify integration, covering authentication, playback control, playlist operations, search, and device management. Each tool earns its place without bloat, supporting common user workflows effectively.

Completeness4/5

The tool surface is nearly complete for core Spotify interactions, including authentication, playback, playlists, and search. A minor gap is the lack of tools for modifying or deleting playlists, but agents can work around this with existing tools like create and add_tracks.

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

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables interaction with Spotify through natural language for music discovery, playback control, library management, and playlist creation. Supports searching for music, controlling playback, managing saved tracks, and getting personalized recommendations based on mood and preferences.
    109
    5
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    Enables interaction with Spotify through OAuth 2.0 authentication, supporting search for tracks/artists/albums/playlists, user profile access, and playlist management including creation and adding tracks.
    6

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/fborello/MCPSpotify'

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