Skip to main content
Glama
imprvhub

MCP Claude Spotify

by imprvhub

MCP Claude Spotify

Trust Score

Features

  • Spotify authentication

  • Search for tracks, albums, artists, and playlists

  • Playback control (play, pause, next, previous)

  • Full playlist management (create, update, delete, reorder tracks, manage cover images)

  • Get personalized recommendations

  • Access user's top played tracks over different time periods

  • View recently played tracks

Related MCP server: Spotify MCP Server

Demo

Requirements

  • Node.js 16 or higher

  • Spotify account

  • Claude Desktop

  • Spotify API credentials (Client ID and Client Secret)

Installation

Installing via Smithery

To install MCP Claude Spotify for Claude Desktop automatically via Smithery:

npx -y @smithery/cli install @imprvhub/mcp-claude-spotify --client claude

Installing Manually

  1. Clone or download this repository:

git clone https://github.com/imprvhub/mcp-claude-spotify
cd claude-spotify-mcp
  1. Install dependencies:

npm install
  1. Build the project (if you want to modify the source code):

npm run build

The repository already includes pre-built files in the build directory, so you can skip step 3 if you don't plan to modify the source code.

Setting up Spotify Credentials

To use this MCP, you need to obtain Spotify API credentials:

  1. Go to Spotify Developer Dashboard

  2. Log in with your Spotify account

  3. Click "Create App"

  4. Fill in your app information:

    • App name: "MCP Claude Spotify" (or whatever you prefer)

    • App description: "Spotify integration for Claude Desktop"

    • Website: You can leave this blank or put any URL

    • Redirect URI: Important - Add http://127.0.0.1:8888/callback

  5. Accept the terms and conditions and click "Create"

  6. In your app dashboard, you'll see the "Client ID"

  7. Click "Show Client Secret" to reveal your "Client Secret"

Save these credentials as you'll need them for configuration.

Running the MCP Server

There are two ways to run the MCP server:

  1. Open a terminal or command prompt

  2. Navigate to the project directory

  3. Run the server directly:

node build/index.js

Keep this terminal window open while using Claude Desktop. The server will run until you close the terminal.

The Claude Desktop can automatically start the MCP server when needed. To set this up:

Configuration

The Claude Desktop configuration file is located at:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Edit this file to add the Spotify MCP configuration. If the file doesn't exist, create it:

{
  "mcpServers": {
    "spotify": {
      "command": "node",
      "args": ["ABSOLUTE_PATH_TO_DIRECTORY/mcp-claude-spotify/build/index.js"],
      "env": {
        "SPOTIFY_CLIENT_ID": "your_client_id_here",
        "SPOTIFY_CLIENT_SECRET": "your_client_secret_here"
      }
    }
  }
}

Important: Replace:

  • ABSOLUTE_PATH_TO_DIRECTORY with the complete absolute path where you installed the MCP

    • macOS/Linux example: /Users/username/mcp-claude-spotify

    • Windows example: C:\\Users\\username\\mcp-claude-spotify

  • your_client_id_here with the Client ID you obtained from Spotify

  • your_client_secret_here with the Client Secret you obtained from Spotify

If you already have other MCPs configured, simply add the "spotify" section inside the "mcpServers" object.

Setting up auto-start scripts (Optional)

For a more reliable experience, you can set up auto-start scripts:

  1. Create a file named start-spotify-mcp.bat in the project directory with the following content:

@echo off
cd %~dp0
node build/index.js
  1. Create a shortcut to this BAT file

  2. Press Win+R, type shell:startup and press Enter

  3. Move the shortcut to this folder to have it start with Windows

  1. Create a file named com.spotify.mcp.plist in ~/Library/LaunchAgents/ with the following content:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.spotify.mcp</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/bin/node</string>
        <string>ABSOLUTE_PATH_TO_DIRECTORY/mcp-claude-spotify/build/index.js</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
    <key>StandardErrorPath</key>
    <string>/tmp/spotify-mcp.err</string>
    <key>StandardOutPath</key>
    <string>/tmp/spotify-mcp.out</string>
    <key>EnvironmentVariables</key>
    <dict>
        <key>SPOTIFY_CLIENT_ID</key>
        <string>your_client_id_here</string>
        <key>SPOTIFY_CLIENT_SECRET</key>
        <string>your_client_secret_here</string>
    </dict>
</dict>
</plist>
  1. Replace the path and credentials with your actual values

  2. Load the agent with: launchctl load ~/Library/LaunchAgents/com.spotify.mcp.plist

  1. Create a file named spotify-mcp.service in ~/.config/systemd/user/ (create the directory if it doesn't exist):

[Unit]
Description=Spotify MCP Server for Claude Desktop
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/node ABSOLUTE_PATH_TO_DIRECTORY/mcp-claude-spotify/build/index.js
Restart=on-failure
Environment="SPOTIFY_CLIENT_ID=your_client_id_here"
Environment="SPOTIFY_CLIENT_SECRET=your_client_secret_here"

[Install]
WantedBy=default.target
  1. Replace the path and credentials with your actual values

  2. Enable and start the service:

systemctl --user enable spotify-mcp.service
systemctl --user start spotify-mcp.service
  1. Check status with:

systemctl --user status spotify-mcp.service

Usage

  1. Restart Claude Desktop after modifying the configuration

  2. In Claude, use the auth-spotify command to start the authentication process

  3. A browser window will open for you to authorize the application

  4. Log in with your Spotify account and authorize the application

  5. Important: After successful authentication, restart Claude Desktop to properly initialize the MCP's tool registry and WebSocket session token cache

  6. After restarting, all Spotify MCP tools will be properly registered and available for use

The MCP server runs as a child process managed by Claude Desktop. When Claude is running, it automatically starts and manages the Node.js server process based on the configuration in claude_desktop_config.json.

Available Tools

Authentication

auth-spotify

Initiates the Spotify authentication process.

search-spotify

Searches for tracks, albums, artists, or playlists.

Parameters:

  • query: Search text

  • type: Type of search (track, album, artist, playlist)

  • limit: Number of results (1-10, default: 5)

Playback Control

get-current-playback

Gets information about the current playback state.

play-track

Plays a specific track on an active device.

Parameters:

  • trackId: Spotify track ID

  • deviceId: (Optional) Spotify device ID to play on

pause-playback

Pauses the current playback.

next-track

Skips to the next track.

previous-track

Returns to the previous track.

Playlist Management

get-user-playlists

Gets a list of the user's playlists.

Parameters:

  • limit: (Optional) Number of playlists to return (1-50, default: 20)

  • offset: (Optional) Index of the first playlist to return (default: 0)

create-playlist

Creates a new playlist for the current user.

Parameters:

  • name: Playlist name

  • description: (Optional) Description

  • public: (Optional) Whether it's public or private

update-playlist

Updates a playlist's name, description, public/private status, or collaborative setting.

Parameters:

  • playlistId: Spotify ID of the playlist

  • name: (Optional) New name for the playlist

  • description: (Optional) New description for the playlist

  • public: (Optional) Whether the playlist should be public

  • collaborative: (Optional) Whether the playlist should be collaborative (must set public to false first)

delete-playlist

Unfollows (removes) a playlist from your library. The playlist still exists on Spotify but is no longer in your library.

Parameters:

  • playlistId: Spotify ID of the playlist

get-playlist-tracks

Gets the tracks in a playlist with pagination support.

Parameters:

  • playlistId: Spotify ID of the playlist

  • limit: (Optional) Number of tracks to return (1-50, default: 20)

  • offset: (Optional) Index of the first track to return (default: 0)

add-tracks-to-playlist

Adds tracks to a playlist.

Parameters:

  • playlistId: Playlist ID

  • trackIds: Array of track IDs

remove-tracks-from-playlist

Removes tracks from a playlist.

Parameters:

  • playlistId: Spotify ID of the playlist

  • trackIds: Array of Spotify track IDs to remove

reorder-playlist-tracks

Reorders tracks in a playlist by moving a range of tracks to a new position.

Parameters:

  • playlistId: Spotify ID of the playlist

  • rangeStart: Position of the first track to move

  • insertBefore: Position where the tracks should be inserted

  • rangeLength: (Optional) Number of tracks to move (default: 1)

get-playlist-cover

Gets the cover image of a playlist.

Parameters:

  • playlistId: Spotify ID of the playlist

upload-playlist-cover

Uploads a custom cover image for a playlist (base64 encoded JPEG, max 256KB).

Parameters:

  • playlistId: Spotify ID of the playlist

  • imageBase64: Base64 encoded JPEG image

Discovery & History

get-recommendations

Gets track recommendations based on seed tracks, artists, or genres.

Parameters:

  • seedTracks: (Optional) Array of Spotify track IDs

  • seedArtists: (Optional) Array of Spotify artist IDs

  • seedGenres: (Optional) Array of genre names

  • limit: (Optional) Number of recommendations (1-100, default: 20)

get-top-tracks

Gets the user's most played tracks over a specified time range.

Parameters:

  • limit: (Optional) Number of tracks to return (1-50, default: 20)

  • offset: (Optional) Index of the first track to return (default: 0)

  • time_range: (Optional) Time frame for calculating affinity:

    • short_term: Approximately last 4 weeks

    • medium_term: Approximately last 6 months (default)

    • long_term: Several years of data

get-recently-played

Gets the user's recently played tracks.

Parameters:

  • limit: (Optional) Maximum number of tracks to return (1-50, default: 20)

  • before: (Optional) Unix timestamp in milliseconds. Returns tracks played before this time

  • after: (Optional) Unix timestamp in milliseconds. Returns tracks played after this time

Troubleshooting

"Server disconnected" error

If you see the error "MCP Spotify: Server disconnected" in Claude Desktop:

  1. Verify the server is running:

    • Open a terminal and manually run node build/index.js from the project directory

    • If the server starts successfully, use Claude while keeping this terminal open

  2. Check your configuration:

    • Ensure the absolute path in claude_desktop_config.json is correct for your system

    • Double-check that you've used double backslashes (\\) for Windows paths

    • Verify you're using the complete path from the root of your filesystem

  3. Try the auto-start option:

    • Set up the auto-start script for your operating system as described in the "Setting up auto-start scripts" section

    • This ensures the server is always running when you need it

Browser doesn't open automatically

If the browser doesn't open automatically during authentication, manually visit: http://127.0.0.1:8888/login

Authentication error

Make sure you've correctly configured the redirect URI in your Spotify Developer dashboard: http://127.0.0.1:8888/callback

Server startup error

Verify that:

  • Environment variables are correctly configured in your claude_desktop_config.json or launch script

  • Node.js is installed and compatible (v16+)

  • Required ports (8888) are available and not blocked by firewall

  • You have permission to run the script in the specified location

Tools not appearing in Claude

If the Spotify tools don't appear in Claude after authentication:

  • Make sure you've restarted Claude Desktop after successful authentication

  • Check the Claude Desktop logs for any MCP communication errors

  • Ensure the MCP server process is running (run it manually to confirm)

  • Verify that the MCP server is correctly registered in the Claude Desktop MCP registry

Checking if the server is running

To check if the server is running:

  • Windows: Open Task Manager, go to the "Details" tab, and look for "node.exe"

  • macOS/Linux: Open Terminal and run ps aux | grep node

If you don't see the server running, start it manually or use the auto-start method.

Testing

This project includes automated tests to ensure code quality and functionality. The test suite uses Jest with TypeScript support and covers:

  • Zod schema validation - verifies all input schemas correctly validate data

  • Spotify API interactions - tests API request handling and error handling

  • MCP server functionality - ensures proper registration and execution of tools

Running Tests

First, make sure all development dependencies are installed:

npm install

To run all tests:

npm test

To run a specific test file:

npm test -- --testMatch="**/tests/schemas.test.ts"

If you encounter issues with ESM modules, make sure you're using Node.js v16 or higher and that the NODE_OPTIONS environment variable includes the --experimental-vm-modules flag as configured in the package.json.

Test Structure

  • tests/schemas.test.ts: Tests for input validation schemas

  • tests/spotify-api.test.ts: Tests for Spotify API interactions

  • tests/server.test.ts: Tests for MCP server functionality

Adding New Tests

When adding new functionality, please include corresponding tests:

  1. For new schemas, add validation tests in schemas.test.ts

  2. For Spotify API functions, add tests in spotify-api.test.ts

  3. For MCP tools, add tests in server.test.ts

All tests should be written using Jest and the ESM module format with TypeScript.

Security Notes

  • Never share your Client ID and Client Secret

  • Access token is now stored in the user's home directory at ~/.spotify-mcp/tokens.json to enable persistence between sessions and multiple instances

  • No user data is stored on disk

Revoking Application Access

For security reasons, you may want to revoke the application's access to your Spotify account when:

  • You no longer use this integration

  • You suspect unauthorized access

  • You're troubleshooting authentication issues

To revoke access:

  1. Go to your Spotify Account page

  2. Navigate to "Apps" in the menu

  3. Find "MCP Claude Spotify" (or the name you chose for your app)

  4. Click "REMOVE ACCESS"

This immediately invalidates all access and refresh tokens. The next time you use the auth-spotify command, you'll need to authorize the application again.

Contributing

Contributions are welcome! Here are some guidelines to follow:

Development Workflow

  1. Fork the repository

  2. Create a feature branch (git checkout -b feature/amazing-feature)

  3. Make your changes

  4. Run tests to ensure they pass (npm test)

  5. Commit your changes (git commit -m 'Add some amazing feature')

  6. Push to the branch (git push origin feature/amazing-feature)

  7. Open a Pull Request

Code Style Guidelines

This project follows these coding standards:

  • Use TypeScript with strict type checking

  • Follow ESM module format

  • Use 2 spaces for indentation

  • Use camelCase for variables and functions

  • Use PascalCase for classes and interfaces

  • Document functions with JSDoc comments

  • Keep line length under 100 characters

Project Structure

The project follows this structure:

mcp-claude-spotify/
├── src/               # Source code
├── build/             # Compiled JavaScript
├── tests/             # Test files
├── public/            # Public assets
└── ...

Pull Request Process

  1. Ensure your code follows the style guidelines

  2. Update documentation if needed

  3. Add tests for new functionality

  4. Make sure all tests pass

  5. Your PR will be reviewed by maintainers

License

This project is licensed under the Mozilla Public License 2.0 - see the LICENSE file for details.

Available Tools

12 tools
add-tracks-to-playlistC

Add tracks to a playlist

ParametersJSON Schema
NameRequiredDescriptionDefault
playlistIdYesSpotify ID of the playlist
trackIdsYesArray of Spotify track IDs to add

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 but only states the basic action. It doesn't mention whether this requires specific permissions (e.g., user authorization), rate limits, how duplicates are handled, or what happens on failure, which are critical 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 extremely concise with a single, direct sentence that front-loads the core action. There is no wasted language, making it efficient and easy to parse, though this brevity contributes to gaps in other dimensions.

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 as a mutation operation with no annotations or output schema, the description is insufficient. It lacks details on behavioral traits, error handling, return values, and integration with sibling tools, leaving significant gaps for effective agent 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 schema description coverage is 100%, with clear documentation for both parameters (playlistId and trackIds). The description adds no additional meaning beyond what the schema already provides, such as format examples or constraints, so it meets the baseline for adequate but unenhanced parameter information.

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 verb ('Add') and resource ('tracks to a playlist'), making the tool's function immediately understandable. However, it doesn't differentiate from potential sibling operations like 'create-playlist' or 'play-track', which would require more specificity for 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 like 'create-playlist' for new playlists or 'play-track' for immediate playback. It lacks context about prerequisites (e.g., needing an existing playlist) or exclusions, leaving usage unclear.

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

auth-spotifyC

Authenticate with Spotify

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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. 'Authenticate with Spotify' implies a state-changing operation (likely obtaining or refreshing tokens), but it doesn't disclose behavioral traits like whether it's interactive, requires user input, stores credentials, has side effects, or handles errors. This leaves critical gaps for an agent to understand how to invoke it safely.

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 with just three words, front-loading the core action ('Authenticate') and target ('Spotify'). There's zero waste or redundancy, 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 authentication (often involving tokens, scopes, or user interaction), no annotations, no output schema, and sibling tools that likely depend on auth, the description is incomplete. It doesn't explain what authentication entails, what it returns, or how it integrates with other tools, leaving significant gaps for an agent.

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 0 parameters with 100% coverage, so no parameter documentation is needed. The description doesn't add parameter details, which is appropriate here. A baseline of 4 is given since the schema fully covers the absence of parameters, and the description doesn't need to compensate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

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

The description 'Authenticate with Spotify' states the general purpose (authentication) and target service (Spotify), but it's vague about what authentication means in this context. It doesn't specify whether this initiates OAuth flow, validates existing tokens, or manages credentials, nor does it distinguish from other authentication-related operations that might exist.

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., needing authentication before using other Spotify tools), timing considerations, or whether it's required for sibling tools like 'add-tracks-to-playlist' or 'search-spotify'. Without this, an agent might misuse it.

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

create-playlistC

Create a new playlist for the current user

ParametersJSON Schema
NameRequiredDescriptionDefault
descriptionNoDescription of the playlist (optional)
nameYesName of the playlist
publicNoWhether the playlist should be public (default: false)

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 creates a playlist but doesn't cover critical aspects like authentication requirements, rate limits, whether it returns the created playlist ID, or error conditions. This leaves significant gaps for an agent to understand how to invoke it safely and effectively.

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 directly states the tool's purpose without unnecessary words. It's front-loaded with the core action and resource, 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 tool's complexity (a write operation with no annotations and no output schema), the description is insufficient. It doesn't explain what happens after creation (e.g., returns a playlist ID), authentication needs, or how it fits into workflows with sibling tools. For a mutation tool in this context, more completeness 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 description coverage is 100%, with clear descriptions for all parameters (name, description, public). The description adds no additional parameter semantics beyond what's in the schema, such as explaining format constraints or default behaviors. Baseline 3 is appropriate since the schema adequately documents 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 clearly states the action ('Create') and resource ('new playlist for the current user'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'get-user-playlists' or 'add-tracks-to-playlist', which would require mentioning this is specifically for creation rather than retrieval or modification.

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 'auth-spotify'), when not to use it (e.g., for updating existing playlists), or how it relates to siblings like 'add-tracks-to-playlist' for populating playlists after creation.

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

get-current-playbackB

Get information about the user's current playback state

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 full burden for behavioral disclosure. It states it retrieves information (implying read-only), but doesn't specify what data is returned (e.g., track details, device info, playback status), potential errors (e.g., no active playback), or authentication requirements (implied by 'user's' but not explicit). This is inadequate 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, efficient sentence that directly states the tool's function without unnecessary words. It's front-loaded with the core purpose, 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 no annotations and no output schema, the description is incomplete. It doesn't explain what 'information' is returned (e.g., JSON structure, fields like track name or progress), behavioral aspects like error handling, or how it integrates with sibling tools. For a tool that likely returns complex playback state data, this leaves significant 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 input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately doesn't discuss parameters, earning a baseline high score since it doesn't need to compensate for gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

The description clearly states the tool's purpose with a specific verb ('Get') and resource ('information about the user's current playback state'), making it immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'pause-playback' or 'play-track', which are related to playback control rather than state retrieval.

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 how it differs from other playback-related tools in the sibling list, leaving the agent to infer usage context.

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

get-recommendationsC

Get track recommendations based on seeds

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of tracks to return (1-100, default: 20)
seedArtistsNoArray of Spotify artist IDs to use as seeds (optional)
seedGenresNoArray of genre names to use as seeds (optional)
seedTracksNoArray of Spotify track IDs to use as seeds (optional)

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 tool's function but omits critical details such as authentication requirements (implied by sibling 'auth-spotify'), rate limits, response format, or error handling. This is a significant gap for a tool that likely interacts with an external API.

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 front-loads the core purpose without unnecessary words. It earns its place by succinctly conveying the tool's function, making it easy for an agent 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 API-based recommendation tool with no annotations and no output schema, the description is incomplete. It fails to address authentication, response structure, or error cases, leaving the agent with insufficient context for reliable invocation in a real-world scenario.

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 parameter documentation in the input schema (e.g., 'limit' range, optional arrays for seeds). The description adds no additional parameter semantics beyond the schema, but the schema is comprehensive, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

The description clearly states the action ('Get track recommendations') and the mechanism ('based on seeds'), which is specific and informative. It doesn't explicitly distinguish from siblings like 'search-spotify' or 'get-top-tracks', but the focus on recommendations from seeds is reasonably distinct.

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 'search-spotify' for general searches or 'get-top-tracks' for user-specific tracks. It lacks context about prerequisites (e.g., needing seeds) or exclusions, leaving the agent to infer usage 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.

get-top-tracksB

Get the user's top played tracks over a specified time range

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoThe number of tracks to return (1-50, default: 20)
offsetNoThe index of the first track to return (default: 0)
time_rangeNoOver what time frame the affinities are computed. short_term = ~4 weeks, medium_term = ~6 months, long_term = several years (default: medium_term)

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 full burden for behavioral disclosure. While it indicates this is a read operation ('Get'), it doesn't mention authentication requirements (implied by sibling 'auth-spotify'), rate limits, data freshness, or what happens when parameters are out of bounds. For a tool accessing personal data with 3 parameters, this leaves significant behavioral gaps unaddressed.

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 front-loads the core purpose without unnecessary words. Every element ('Get', 'user's top played tracks', 'over a specified time range') contributes directly to understanding the tool's function with zero waste or redundancy.

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

Completeness3/5

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

Given 3 parameters with full schema coverage but no annotations and no output schema, the description is minimally adequate. It covers the basic purpose but lacks important context about authentication, rate limits, return format, and how this tool fits within the broader Spotify API ecosystem represented by the sibling tools. For a personal data retrieval tool, more behavioral context would be beneficial.

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

Parameters3/5

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

Schema description coverage is 100%, providing complete documentation for all 3 parameters. The description adds minimal value beyond the schema by mentioning 'time range' generally, but doesn't provide additional context about parameter interactions, typical values, or semantic meaning beyond what's already in the parameter descriptions. This meets the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

The description clearly states the action ('Get') and resource ('user's top played tracks') with a specific scope ('over a specified time range'). It distinguishes from siblings like 'search-spotify' or 'get-recommendations' by focusing on personal listening history rather than general search or algorithmic recommendations. However, it doesn't explicitly differentiate from all siblings (e.g., 'get-current-playback' also retrieves track data).

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

Usage Guidelines3/5

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

The description implies usage when needing personal listening statistics over time, but provides no explicit guidance on when to use this versus alternatives like 'search-spotify' for general track discovery or 'get-recommendations' for algorithmic suggestions. It mentions the time range parameter but doesn't explain typical use cases for different time ranges or when this tool is preferred over other track-related tools.

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

get-user-playlistsB

Get a list of the user's playlists

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, the description carries full burden but only states the action without disclosing behavioral traits. It doesn't cover permissions needed, rate limits, response format (e.g., pagination, fields returned), or side effects, which are critical for a tool that likely requires user authentication and returns 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 sentence with no wasted words. It's front-loaded and directly states the tool's function, 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 no annotations, no output schema, and the tool's likely complexity (involving user data and authentication), the description is incomplete. It lacks details on authentication needs, return values, or error handling, leaving significant gaps for an AI agent 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 with 100% schema coverage, so no parameter documentation is needed. The description doesn't add param info, but that's fine here; baseline is 4 for zero params, as it avoids redundancy and the schema fully covers the absence of inputs.

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 verb ('Get') and resource ('list of the user's playlists'), making the purpose understandable. However, it doesn't differentiate from siblings like 'create-playlist' or 'search-spotify' beyond the obvious 'get' vs 'create/search' distinction, lacking specificity about scope or format.

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 is provided on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., user authentication), context (e.g., for browsing or selecting playlists), or exclusions (e.g., not for modifying playlists), leaving usage unclear.

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

next-trackB

Skip to the next track

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 full burden but only states the action without behavioral details. It doesn't disclose if this requires authentication, affects playback state, has rate limits, or what happens on success/failure (e.g., skips in current queue or playlist). 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 with zero waste—'Skip to the next track' is front-loaded and perfectly concise. Every word earns its place, 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 (a mutation tool with no annotations or output schema), the description is incomplete. It lacks context on authentication needs, playback requirements, error conditions, or return values. For a tool that likely interacts with active playback, this leaves critical gaps for an AI agent to use it correctly.

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 0 parameters with 100% coverage, so no parameter documentation is needed. The description doesn't add param info, which is appropriate here. Baseline is 4 for zero parameters, as there's nothing to compensate for and no redundancy.

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 'Skip to the next track' clearly states the action (skip) and resource (track), making the purpose immediately understandable. It distinguishes from siblings like 'previous-track' by directionality, though not explicitly named. However, it doesn't specify if this applies to current playback or a playlist context, leaving some ambiguity compared to more specific alternatives.

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 is provided on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., requires active playback), exclusions (e.g., not usable without a queue), or sibling tools like 'play-track' or 'get-current-playback' for context. The agent must infer usage 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.

pause-playbackB

Pause the user's playback

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 full burden for behavioral disclosure. It states the action but doesn't mention side effects (e.g., whether playback can be resumed, if it requires specific permissions, or error conditions like no active playback). 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, efficient sentence with no wasted words. It's appropriately sized for a simple tool and front-loads the essential action, 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?

For a mutation tool with no annotations and no output schema, the description is insufficient. It doesn't explain what happens after pausing, potential errors, or return values, leaving the agent with incomplete operational context.

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 with 100% schema description coverage, so the schema already fully documents the lack of inputs. The description appropriately doesn't add unnecessary parameter information, maintaining a clean baseline for parameterless tools.

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 ('Pause') and target ('the user's playback'), providing a specific verb+resource combination. However, it doesn't differentiate from sibling tools like 'play-track' or 'get-current-playback' beyond the obvious pause vs play distinction, which prevents 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?

No guidance is provided on when to use this tool versus alternatives like 'play-track' or 'next-track', nor does it mention prerequisites such as requiring active playback. The description only states what it does without contextual usage information.

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

play-trackC

Play a specific track on an active device

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceIdNoSpotify ID of the device to play on (optional)
trackIdYesSpotify ID of the track to play

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions playing on an 'active device' but doesn't explain what happens if no device is active, whether this requires specific permissions (e.g., Spotify Premium), if it interrupts current playback, or what the response looks like. 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 that directly states the tool's function without unnecessary words. It's front-loaded with the core action ('Play a specific track'), making it easy to grasp quickly. Every part of the sentence earns its place by specifying the resource and context.

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 operation with no annotations and no output schema), the description is incomplete. It doesn't address key contextual aspects like error conditions (e.g., invalid track ID, no active device), behavioral outcomes (e.g., playback state changes), or integration with sibling tools (e.g., using 'get-current-playback' first). For a tool that modifies system state, more detail is needed to guide 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?

The description adds no parameter-specific information beyond what the input schema provides, which has 100% coverage with clear descriptions for both 'deviceId' (optional Spotify ID) and 'trackId' (required Spotify ID). Since the schema fully documents parameters, the baseline score of 3 is appropriate, as the description doesn't enhance or clarify semantics further.

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 ('Play') and resource ('a specific track on an active device'), making the tool's purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'next-track' or 'previous-track', which also control playback, nor does it clarify what constitutes an 'active device' versus using 'get-current-playback' to check status.

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 minimal guidance, stating only that it plays a track on an active device. It doesn't specify when to use this tool versus alternatives like 'next-track' for sequential playback, 'search-spotify' to find tracks first, or 'get-current-playback' to verify device status. No exclusions or prerequisites are mentioned, leaving usage context vague.

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

previous-trackB

Skip to the previous track

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 implies a mutation action ('skip') but doesn't specify whether this requires specific permissions, affects playback state, or has side effects like changing the current track index. For a mutation tool with zero annotation coverage, this is insufficient.

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

Conciseness5/5

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

The description is a single, clear sentence with no wasted words, making it highly efficient and front-loaded. It immediately conveys the core functionality 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 the tool's complexity (a mutation with no annotations and no output schema), the description is incomplete. It lacks information on behavioral traits like authentication needs, error conditions, or what happens if no previous track exists. For a tool that likely interacts with playback state, more context is needed.

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, and schema description coverage is 100%, so no parameter documentation is needed. The description appropriately doesn't mention parameters, which aligns with the schema. A baseline of 4 is applied since there are no parameters 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 'Skip to the previous track' clearly states the action (skip) and target resource (previous track), making the purpose immediately understandable. However, it doesn't explicitly differentiate from its sibling 'next-track' beyond the directional difference, which keeps it from 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 like 'next-track' or 'play-track', nor does it mention prerequisites such as requiring active playback or authentication. It simply states what the tool does without contextual usage information.

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

search-spotifyC

Search for tracks, albums, artists, or playlists on Spotify

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return (1-50, default: 10)
queryYesSearch query
typeNoType of item to search for (default: track)

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 but offers minimal information. It doesn't describe rate limits, authentication requirements (implied by sibling 'auth-spotify'), response format, or error handling. The description is functional but lacks critical operational context for safe and effective use.

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 directly states the tool's function without unnecessary words. It is front-loaded with the core purpose and appropriately sized for its informational content, 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 tool's moderate complexity (3 parameters, no output schema, no annotations), the description is insufficiently complete. It omits essential details like authentication needs, rate limits, response structure, and how results are ordered or filtered. Without annotations or output schema, the description should provide more operational context to guide 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?

The description mentions the searchable item types ('tracks, albums, artists, or playlists'), which aligns with the 'type' parameter enum, but adds no additional semantic context beyond what the schema provides. With 100% schema description coverage, the baseline is 3, as the schema already documents parameters like 'limit' and 'query' effectively.

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 ('Search for') and the resources ('tracks, albums, artists, or playlists on Spotify'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'get-recommendations' or 'get-top-tracks', which also retrieve music content but through different mechanisms.

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 'auth-spotify'), contrast with similar tools like 'get-recommendations' (which suggests music based on preferences), or specify scenarios where search is appropriate over other retrieval methods.

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

TDQS

B3.4/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose targeting specific Spotify operations like playback control, playlist management, search, and user data retrieval. There is no overlap or ambiguity between tools like 'pause-playback' and 'next-track' or 'get-user-playlists' and 'create-playlist'.

Naming Consistency4/5

Most tools follow a consistent verb_noun pattern (e.g., 'create-playlist', 'get-recommendations', 'pause-playback'), but there are minor deviations like 'auth-spotify' (noun_verb) and 'search-spotify' (verb_noun with appended service name). The naming is still highly readable and predictable.

Tool Count5/5

With 12 tools, this server is well-scoped for Spotify integration, covering essential areas like authentication, playback control, playlist management, search, and recommendations. Each tool earns its place without feeling excessive or insufficient for the domain.

Completeness4/5

The tool set provides comprehensive coverage for core Spotify workflows, including CRUD-like operations for playlists, playback control, and data retrieval. Minor gaps exist, such as no explicit 'update-playlist' or 'delete-playlist' tools, but agents can work around these using available tools like 'add-tracks-to-playlist' and playlist management functions.

Maintenance

ActivityStale
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

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

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

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