A powerful Model Context Protocol (MCP) server that enables AI assistants to interact with your personal Discogs music collection. Built on Cloudflare Workers using the official Cloudflare Agents SDK and @modelcontextprotocol/sdk.
- π Secure OAuth Authentication: Connect your Discogs account safely
- π§ Intelligent Mood Mapping: Translate emotions into music ("mellow", "energetic", "Sunday evening vibes")
- π Advanced Search Intelligence: Multi-strategy search with OR logic and relevance scoring
- π Collection Analytics: Comprehensive statistics and insights about your music
- π― Context-Aware Recommendations: Smart suggestions based on mood, genre, and similarity
- β‘ Edge Computing: Global low-latency responses via Cloudflare Workers
- ποΈ Smart Caching: Intelligent KV-based caching for optimal performance
discogs-mcp.com is the maintainer's private instance. It's locked to a single Discogs account and will return a 403 for anyone else.
Why? The Discogs API rate limit (60 requests per minute, per registered app) is too tight to share across users. One active collection query from a single user can saturate it. Rather than run a broken multi-tenant service, each user deploys their own Worker with their own Discogs API credentials.
The good news: deploying your own copy is straightforward, runs on the Cloudflare Workers free tier, and takes about 10 minutes. See Self-Hosting below.
- Node.js 18+
- Cloudflare account (free tier is fine)
- Discogs account with a registered developer app (you'll need a Consumer Key and Consumer Secret)
git clone https://github.com/rianvdm/discogs-mcp.git
cd discogs-mcp
npm installwrangler kv namespace create MCP_SESSIONS --env production
wrangler kv namespace create MCP_LOGS --env production
wrangler kv namespace create OAUTH_KV --env productionCopy the returned IDs into wrangler.toml under [env.production].
wrangler secret put DISCOGS_CONSUMER_KEY --env production
wrangler secret put DISCOGS_CONSUMER_SECRET --env production
wrangler secret put JWT_SECRET --env production # any random stringBy default, anyone with a Discogs account who discovers your Worker URL can authenticate and consume your rate-limit budget. To restrict it to just you β or to a small group of trusted users β set ALLOWED_DISCOGS_USER_ID in wrangler.toml under [env.production.vars]:
[env.production.vars]
# Single user
ALLOWED_DISCOGS_USER_ID = "123456"
# Or a comma-separated list for multiple users
ALLOWED_DISCOGS_USER_ID = "123456,789012,345678"You can find your numeric ID by visiting https://api.discogs.com/users/<your-username> and looking at the id field. Leave the value empty to run an open instance.
npm run deploy:prodYour Worker URL will be something like https://discogs-mcp.<your-subdomain>.workers.dev. The MCP endpoint is /mcp.
Replace https://your-worker.workers.dev below with your own URL.
Claude Desktop β Settings β Integrations β Add Integration β https://your-worker.workers.dev/mcp
Claude Code:
claude mcp add --transport http discogs https://your-worker.workers.dev/mcpWindsurf (~/.codeium/windsurf/mcp_config.json):
{
"mcpServers": {
"discogs": {
"serverUrl": "https://your-worker.workers.dev/mcp"
}
}
}Continue.dev / Zed / Generic:
{
"mcpServers": {
"discogs": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://your-worker.workers.dev/mcp"]
}
}
}MCP Inspector (testing):
npx @modelcontextprotocol/inspector https://your-worker.workers.dev/mcpThis server uses MCP OAuth 2.1 with Discogs as the identity provider. When you connect for the first time:
- Your MCP client automatically opens a browser window
- Authorize the application on Discogs
- You're redirected back and authenticated β no copy-pasting required
- Your session persists for 7 days
| Tool | Description |
|---|---|
ping |
Test server connectivity |
server_info |
Get server information and capabilities |
auth_status |
Check authentication status and get login instructions |
Search & discovery
| Tool | Description |
|---|---|
search_collection |
Search your collection with explicit genre filters, mood-aware ranking, and master-level dedup |
search_discogs |
Search the Discogs-wide catalog (releases, masters, artists, labels) β marks results you already own |
get_release |
Get detailed information about a specific release (tracklist, formats, labels) |
get_collection_stats |
View genre breakdown, decade analysis, format distribution, and ratings |
get_recommendations |
Get personalized recommendations by genre, decade, mood, or similarity |
Collection management
| Tool | Description |
|---|---|
add_to_collection |
Add a release to a folder (defaults to Uncategorized) |
remove_from_collection |
Remove a specific release instance from a folder |
move_release |
Move a release instance between folders |
rate_release |
Rate a release from 0 (no rating) to 5 stars |
Folders
| Tool | Description |
|---|---|
list_folders |
List all folders with release counts |
create_folder |
Create a new folder |
edit_folder |
Rename an existing folder (system folders excluded) |
delete_folder |
Delete an empty folder (system folders excluded) |
Custom fields
| Tool | Description |
|---|---|
list_custom_fields |
List all custom fields defined on your collection |
edit_custom_field |
Set a custom field value on a specific release instance |
Diagnostics
| Tool | Description |
|---|---|
get_cache_stats |
View cache performance (total entries, pending requests, breakdown) |
Access Discogs data via standardized MCP resource URIs:
discogs://collection # Complete collection (JSON)
discogs://release/{id} # Specific release details
discogs://search?q={query} # Search results
# Set dev secrets (same Discogs app is fine for dev)
wrangler secret put DISCOGS_CONSUMER_KEY
wrangler secret put DISCOGS_CONSUMER_SECRET
wrangler secret put JWT_SECRET
# Run the Worker locally
npm run dev
# Test with MCP Inspector
npx @modelcontextprotocol/inspector http://localhost:8787/mcpThe default [vars] block in wrangler.toml leaves ALLOWED_DISCOGS_USER_ID empty, so local dev is open to any Discogs account β convenient for testing.
npm test # Run all tests
npm test -- --watch # Run tests in watch mode- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
MIT License - see LICENSE file for details.
- Discogs for the music database API
- Model Context Protocol for the standard
- Cloudflare Workers for the platform