{"_id":"@darrenjaws/spotify-mcp","_rev":"13-d68deed492159a26f66685e01674c52a","name":"@darrenjaws/spotify-mcp","dist-tags":{"latest":"1.2.4"},"versions":{"0.1.0":{"name":"@darrenjaws/spotify-mcp","version":"0.1.0","keywords":["mcp","model-context-protocol","spotify","music","ai","claude"],"author":{"name":"Darren Jaworski","email":"darrenjaworski@gmail.com"},"license":"MIT","_id":"@darrenjaws/spotify-mcp@0.1.0","maintainers":[{"name":"darrenjaws","email":"darrenjaworski@gmail.com"}],"homepage":"https://github.com/darrenjaworski/spotify-mcp#readme","bugs":{"url":"https://github.com/darrenjaworski/spotify-mcp/issues"},"bin":{"spotify-mcp":"build/bin.js"},"dist":{"shasum":"02d3edf43282249a4a0c9323becd32b186a9c2cd","tarball":"https://registry.npmjs.org/@darrenjaws/spotify-mcp/-/spotify-mcp-0.1.0.tgz","fileCount":55,"integrity":"sha512-9G1LRR45CkaeKUvOXOKlkd3vOk86YKX4v7EFD5HoheYe/YvhXTcm0aWbZEB/TkA2yFSpZ7anDBHwLjHOcnyTeQ==","signatures":[{"sig":"MEUCIB7ppA3c5hFcL+MivIPyOcd8+tVi48l3H4LUeTrbb/R7AiEA6cb/tqbbBbSeWbpp/oBKRIht3Ss2WWga7aXVIMyEKDs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":141497},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"42c22474f4675c63bef8ae41d2d7d341ec7b797c","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsc && chmod +x build/bin.js","clean":"rm -rf build","prepare":"npm run build","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"darrenjaws","email":"darrenjaworski@gmail.com"},"repository":{"url":"git+https://github.com/darrenjaworski/spotify-mcp.git","type":"git"},"_npmVersion":"10.9.3","description":"Model Context Protocol server for Spotify integration","directories":{},"_nodeVersion":"22.20.0","dependencies":{"zod":"^3.24.1","dotenv":"^16.4.7","spotify-web-api-node":"^5.0.2","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.17.0","vitest":"^4.0.18","typescript":"^5.7.2","@types/node":"^22.10.5","@vitest/coverage-v8":"^4.0.18","@typescript-eslint/parser":"^8.19.1","@types/spotify-web-api-node":"^5.0.11","@typescript-eslint/eslint-plugin":"^8.19.1"},"_npmOperationalInternal":{"tmp":"tmp/spotify-mcp_0.1.0_1771096305252_0.12804854917562025","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@darrenjaws/spotify-mcp","version":"0.2.0","keywords":["mcp","model-context-protocol","spotify","music","ai","claude"],"author":{"name":"Darren Jaworski","email":"darrenjaworski@gmail.com"},"license":"MIT","_id":"@darrenjaws/spotify-mcp@0.2.0","maintainers":[{"name":"darrenjaws","email":"darrenjaworski@gmail.com"}],"homepage":"https://github.com/darrenjaworski/spotify-mcp#readme","bugs":{"url":"https://github.com/darrenjaworski/spotify-mcp/issues"},"bin":{"spotify-mcp":"build/bin.js"},"dist":{"shasum":"5af738d09f7fcb4232910b1660e07d3d0635cacb","tarball":"https://registry.npmjs.org/@darrenjaws/spotify-mcp/-/spotify-mcp-0.2.0.tgz","fileCount":55,"integrity":"sha512-snRoZ/0liCbVxbnSrHPGW497cxWdkhCgzw3rg3ODcmYPj11HnGw0Tyf/lBywGQMN7GikVefuvHr6dFcTTRAhUA==","signatures":[{"sig":"MEQCICDUjucejB6+/XWKSrI4RsTXoYi1UYhWJqH7Z849z9tLAiBfiWB55+9+G2aU+vK5TjmIun+EIAk71gdG8+coNyUf3Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":143619},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"6c38b7eb2550b2957dd44ca1b2c10e007839dc07","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsc && chmod +x build/bin.js","clean":"rm -rf build","prepare":"npm run build","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"darrenjaws","email":"darrenjaworski@gmail.com"},"repository":{"url":"git+https://github.com/darrenjaworski/spotify-mcp.git","type":"git"},"_npmVersion":"10.9.3","description":"Model Context Protocol server for Spotify integration","directories":{},"_nodeVersion":"22.20.0","dependencies":{"zod":"^3.24.1","dotenv":"^16.4.7","spotify-web-api-node":"^5.0.2","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.17.0","vitest":"^4.0.18","typescript":"^5.7.2","@types/node":"^22.10.5","@vitest/coverage-v8":"^4.0.18","@typescript-eslint/parser":"^8.19.1","@types/spotify-web-api-node":"^5.0.11","@typescript-eslint/eslint-plugin":"^8.19.1"},"_npmOperationalInternal":{"tmp":"tmp/spotify-mcp_0.2.0_1771099434247_0.22646746996965827","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@darrenjaws/spotify-mcp","version":"0.3.0","keywords":["mcp","model-context-protocol","spotify","music","ai","claude"],"author":{"name":"Darren Jaworski","email":"darrenjaworski@gmail.com"},"license":"MIT","_id":"@darrenjaws/spotify-mcp@0.3.0","maintainers":[{"name":"darrenjaws","email":"darrenjaworski@gmail.com"}],"homepage":"https://github.com/darrenjaworski/spotify-mcp#readme","bugs":{"url":"https://github.com/darrenjaworski/spotify-mcp/issues"},"bin":{"spotify-mcp":"build/bin.js"},"dist":{"shasum":"cf85c913fc87cffa8b5b539eaec5bb2d5f144db2","tarball":"https://registry.npmjs.org/@darrenjaws/spotify-mcp/-/spotify-mcp-0.3.0.tgz","fileCount":59,"integrity":"sha512-gyQzCgTIkyyDXikbSEtHEFltRvw8kFR+jnV0iT1lalVhYpJCt6uaguRF9k8aBbo5RkL41zPT4f9bK2tmcNX/kg==","signatures":[{"sig":"MEUCIQCzZW1z6HA1yOfenwrc1V0XgLEDdnAMlajh0s5QFLbXZwIgN0dBUdBC1SxsH8OUB8cZMVqw3R7n8IBLrcRGM5kXElg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":153181},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"815ed3c643cff49452bb0f894dec9131d968b459","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsc && chmod +x build/bin.js","clean":"rm -rf build","prepare":"npm run build","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"darrenjaws","email":"darrenjaworski@gmail.com"},"repository":{"url":"git+https://github.com/darrenjaworski/spotify-mcp.git","type":"git"},"_npmVersion":"10.9.3","description":"Model Context Protocol server for Spotify integration","directories":{},"_nodeVersion":"22.20.0","dependencies":{"zod":"^3.24.1","dotenv":"^16.4.7","spotify-web-api-node":"^5.0.2","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.17.0","vitest":"^4.0.18","typescript":"^5.7.2","@types/node":"^22.10.5","typescript-eslint":"^8.55.0","@typescript-eslint/parser":"^8.19.1","@types/spotify-web-api-node":"^5.0.11","@typescript-eslint/eslint-plugin":"^8.19.1"},"_npmOperationalInternal":{"tmp":"tmp/spotify-mcp_0.3.0_1771772852986_0.2758242651978122","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@darrenjaws/spotify-mcp","version":"0.4.0","keywords":["mcp","model-context-protocol","spotify","music","ai","claude"],"author":{"name":"Darren Jaworski","email":"darrenjaworski@gmail.com"},"license":"MIT","_id":"@darrenjaws/spotify-mcp@0.4.0","maintainers":[{"name":"darrenjaws","email":"darrenjaworski@gmail.com"}],"homepage":"https://github.com/darrenjaworski/spotify-mcp#readme","bugs":{"url":"https://github.com/darrenjaworski/spotify-mcp/issues"},"bin":{"spotify-mcp":"build/bin.js"},"dist":{"shasum":"a0409820b9463f88a7b202872d1d6f61548ffdb0","tarball":"https://registry.npmjs.org/@darrenjaws/spotify-mcp/-/spotify-mcp-0.4.0.tgz","fileCount":59,"integrity":"sha512-kUPltzZ23vs7LNarYet2+oTugEpOBsube8FAJFuKBWb/b/f7rniOfc81kmVDdKs/hGcwxwUwNjW0hAXHViIVjg==","signatures":[{"sig":"MEYCIQCR0nJKATe1XVWW0BvILlK88WnAi2DGGSNgBgG7ZYupjQIhAJNA9wNwRVPRwlBTISDoT7fNiLJu/L99/CSa1qWgxbbN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":155924},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"e676fcf6a10cf321bc38f2a957dcfd417c267624","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsc && chmod +x build/bin.js","clean":"rm -rf build","prepare":"npm run build","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"darrenjaws","email":"darrenjaworski@gmail.com"},"repository":{"url":"git+https://github.com/darrenjaworski/spotify-mcp.git","type":"git"},"_npmVersion":"10.9.3","description":"Model Context Protocol server for Spotify integration","directories":{},"_nodeVersion":"22.20.0","dependencies":{"zod":"^3.24.1","dotenv":"^16.4.7","spotify-web-api-node":"^5.0.2","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.17.0","vitest":"^4.0.18","typescript":"^5.7.2","@types/node":"^22.10.5","typescript-eslint":"^8.55.0","@typescript-eslint/parser":"^8.19.1","@types/spotify-web-api-node":"^5.0.11","@typescript-eslint/eslint-plugin":"^8.19.1"},"_npmOperationalInternal":{"tmp":"tmp/spotify-mcp_0.4.0_1771773422470_0.6050074217021619","host":"s3://npm-registry-packages-npm-production"}},"0.5.3":{"name":"@darrenjaws/spotify-mcp","version":"0.5.3","keywords":["mcp","model-context-protocol","spotify","music","ai","claude"],"author":{"name":"Darren Jaworski","email":"darrenjaworski@gmail.com"},"license":"MIT","_id":"@darrenjaws/spotify-mcp@0.5.3","maintainers":[{"name":"darrenjaws","email":"darrenjaworski@gmail.com"}],"homepage":"https://github.com/darrenjaworski/spotify-mcp#readme","bugs":{"url":"https://github.com/darrenjaworski/spotify-mcp/issues"},"bin":{"spotify-mcp":"build/bin.js"},"dist":{"shasum":"bda92a634134e2c97ae6d45c8aa90b43e4d06085","tarball":"https://registry.npmjs.org/@darrenjaws/spotify-mcp/-/spotify-mcp-0.5.3.tgz","fileCount":55,"integrity":"sha512-evGsTH9xgfxJy17M44X6WbYem2Ko1V6jqNyKKBaGkIiVPYoqM7Ub6rq+xXYrGAHWcJ33s+K/HSZlsv4BGAxPjw==","signatures":[{"sig":"MEYCIQCSgfkDxHzl2b5qeMqFHB/RkTSeBHIThp10mwf0JB4fLAIhAIdn+zJ0H6tPHYprSjfcfsbYa0u8wzQswkjHto0v2wUr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@darrenjaws%2fspotify-mcp@0.5.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":144941},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"612cb670f9e20e6531cf64b86878012fe5b6efaf","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsc && chmod +x build/bin.js","clean":"rm -rf build","prepare":"npm run build","lint:fix":"eslint src --ext .ts --fix","validate":"npm run lint && npm run build && npm test","test:watch":"vitest","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3ee32d08-b896-4170-8bca-ca327f482c9d"}},"repository":{"url":"git+https://github.com/darrenjaworski/spotify-mcp.git","type":"git"},"_npmVersion":"11.11.0","description":"Model Context Protocol server for Spotify integration","directories":{},"_nodeVersion":"22.22.0","dependencies":{"zod":"^3.24.1","dotenv":"^16.4.7","spotify-web-api-node":"^5.0.2","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.17.0","vitest":"^4.0.18","typescript":"^5.7.2","@types/node":"^22.10.5","typescript-eslint":"^8.55.0","@typescript-eslint/parser":"^8.19.1","@types/spotify-web-api-node":"^5.0.11","@typescript-eslint/eslint-plugin":"^8.19.1"},"_npmOperationalInternal":{"tmp":"tmp/spotify-mcp_0.5.3_1772081425922_0.787881684910005","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@darrenjaws/spotify-mcp","version":"0.6.0","keywords":["mcp","model-context-protocol","spotify","music","ai","claude"],"author":{"name":"Darren Jaworski","email":"darrenjaworski@gmail.com"},"license":"MIT","_id":"@darrenjaws/spotify-mcp@0.6.0","maintainers":[{"name":"darrenjaws","email":"darrenjaworski@gmail.com"}],"homepage":"https://github.com/darrenjaworski/spotify-mcp#readme","bugs":{"url":"https://github.com/darrenjaworski/spotify-mcp/issues"},"bin":{"spotify-mcp":"build/bin.js"},"dist":{"shasum":"dd73681ed9ceb1639eae2b504edae12f8afe6221","tarball":"https://registry.npmjs.org/@darrenjaws/spotify-mcp/-/spotify-mcp-0.6.0.tgz","fileCount":55,"integrity":"sha512-YzSHbfkOwmCsslnqExk16iNfFEt/TMoJt96QmvFirSTS11Lv3n8QA8J8Gd6D4gsZL2+laRlLmbPV/uaV7sD9iA==","signatures":[{"sig":"MEUCIGa1bZ0+KxmUIFBQvcZOxQii+24x2Gu0tp1Lz0wh/iAEAiEAhBkvkHkLM8TeHe1oglfN0irB6SacqeYIbks8nHX6ygo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@darrenjaws%2fspotify-mcp@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":146381},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"6027764a9a383148a9a46725b477ffe3c3ddf8d3","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsc && chmod +x build/bin.js","clean":"rm -rf build","prepare":"npm run build","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","static-checks":"npm run lint && npm run build && npm test","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3ee32d08-b896-4170-8bca-ca327f482c9d"}},"repository":{"url":"git+https://github.com/darrenjaworski/spotify-mcp.git","type":"git"},"_npmVersion":"11.11.0","description":"Model Context Protocol server for Spotify integration","directories":{},"_nodeVersion":"22.22.0","dependencies":{"zod":"^3.24.1","dotenv":"^16.4.7","spotify-web-api-node":"^5.0.2","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.17.0","vitest":"^4.0.18","typescript":"^5.7.2","@types/node":"^22.10.5","typescript-eslint":"^8.55.0","@typescript-eslint/parser":"^8.19.1","@types/spotify-web-api-node":"^5.0.11","@typescript-eslint/eslint-plugin":"^8.19.1"},"_npmOperationalInternal":{"tmp":"tmp/spotify-mcp_0.6.0_1772082794209_0.45512385301314295","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@darrenjaws/spotify-mcp","version":"0.6.1","keywords":["mcp","model-context-protocol","spotify","music","ai","claude"],"author":{"name":"Darren Jaworski","email":"darrenjaworski@gmail.com"},"license":"MIT","_id":"@darrenjaws/spotify-mcp@0.6.1","maintainers":[{"name":"darrenjaws","email":"darrenjaworski@gmail.com"}],"homepage":"https://github.com/darrenjaworski/spotify-mcp#readme","bugs":{"url":"https://github.com/darrenjaworski/spotify-mcp/issues"},"bin":{"spotify-mcp":"build/bin.js"},"dist":{"shasum":"4cc2f4f76e133a1694df3acbd9b96a7d1ec610d0","tarball":"https://registry.npmjs.org/@darrenjaws/spotify-mcp/-/spotify-mcp-0.6.1.tgz","fileCount":55,"integrity":"sha512-4qcPmGGlcljeq/KDOSkvF5Z0SlGySvmblQfIUhlm7bYPgYQVmfyixDwbMTNdTWQtwGN8z/eHCVvrliclJYUfNQ==","signatures":[{"sig":"MEQCIDJM1m93wOdI67NbtT/8H9XHdFZsiqQ2B56kzTp+CpsuAiA4/77DFAktv012c6vUvS2E+lRjVmEFo1T43rNyq/uJXA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@darrenjaws%2fspotify-mcp@0.6.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":146486},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"c4858bf98cbc1e8c80f0aabfbdc9b7d79aa5babd","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsc && chmod +x build/bin.js","clean":"rm -rf build","prepare":"npm run build","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","static-checks":"npm run lint && npm run build && npm test","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3ee32d08-b896-4170-8bca-ca327f482c9d"}},"repository":{"url":"git+https://github.com/darrenjaworski/spotify-mcp.git","type":"git"},"_npmVersion":"11.11.0","description":"Model Context Protocol server for Spotify integration","directories":{},"_nodeVersion":"22.22.0","dependencies":{"zod":"^3.24.1","dotenv":"^16.4.7","spotify-web-api-node":"^5.0.2","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.17.0","vitest":"^4.0.18","typescript":"^5.7.2","@types/node":"^22.10.5","typescript-eslint":"^8.55.0","@typescript-eslint/parser":"^8.19.1","@types/spotify-web-api-node":"^5.0.11","@typescript-eslint/eslint-plugin":"^8.19.1"},"_npmOperationalInternal":{"tmp":"tmp/spotify-mcp_0.6.1_1772145975122_0.21265814674527395","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@darrenjaws/spotify-mcp","version":"1.0.0","keywords":["mcp","model-context-protocol","spotify","music","ai","claude"],"author":{"name":"Darren Jaworski","email":"darrenjaworski@gmail.com"},"license":"MIT","_id":"@darrenjaws/spotify-mcp@1.0.0","maintainers":[{"name":"darrenjaws","email":"darrenjaworski@gmail.com"}],"homepage":"https://github.com/darrenjaworski/spotify-mcp#readme","bugs":{"url":"https://github.com/darrenjaworski/spotify-mcp/issues"},"bin":{"spotify-mcp":"build/bin.js"},"dist":{"shasum":"2594f5875e231ed54bdce6f8bee7f26e081d7b49","tarball":"https://registry.npmjs.org/@darrenjaws/spotify-mcp/-/spotify-mcp-1.0.0.tgz","fileCount":59,"integrity":"sha512-GfQbahzed+ZWmUXG3GsxiV+GF+afXwDEepqjbefH7aPPIuZazY/6XX0hwPanUmNIlBsA5jWOwDZL5sep84N5cA==","signatures":[{"sig":"MEYCIQC7ZaToleyoxfxSB6IEgTnBFhITLNoOZaGj3DFyXSje+QIhAOEyiLhTJAUyYWTIJogs3Va9NIL8nApI4iDMb59EtFCM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@darrenjaws%2fspotify-mcp@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":195294},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"f6dbece576f99a75d0f661375cfe97e460352dd7","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsc && chmod +x build/bin.js","clean":"rm -rf build","prepare":"npm run build","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","static-checks":"npm run lint && npm run build && npm test","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3ee32d08-b896-4170-8bca-ca327f482c9d"}},"repository":{"url":"git+https://github.com/darrenjaworski/spotify-mcp.git","type":"git"},"_npmVersion":"11.11.0","description":"Model Context Protocol server for Spotify integration","directories":{},"_nodeVersion":"22.22.0","dependencies":{"zod":"^3.24.1","dotenv":"^16.4.7","spotify-web-api-node":"^5.0.2","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.17.0","vitest":"^4.0.18","typescript":"^5.7.2","@types/node":"^22.10.5","typescript-eslint":"^8.55.0","@typescript-eslint/parser":"^8.19.1","@types/spotify-web-api-node":"^5.0.11","@typescript-eslint/eslint-plugin":"^8.19.1"},"_npmOperationalInternal":{"tmp":"tmp/spotify-mcp_1.0.0_1773196691076_0.754566512023082","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@darrenjaws/spotify-mcp","version":"1.0.1","keywords":["mcp","model-context-protocol","spotify","music","ai","claude"],"author":{"name":"Darren Jaworski","email":"darrenjaworski@gmail.com"},"license":"MIT","_id":"@darrenjaws/spotify-mcp@1.0.1","maintainers":[{"name":"darrenjaws","email":"darrenjaworski@gmail.com"}],"homepage":"https://github.com/darrenjaworski/spotify-mcp#readme","bugs":{"url":"https://github.com/darrenjaworski/spotify-mcp/issues"},"bin":{"spotify-mcp":"build/bin.js"},"dist":{"shasum":"ece2470b9448f99829b4f8c96df36ae2f195163b","tarball":"https://registry.npmjs.org/@darrenjaws/spotify-mcp/-/spotify-mcp-1.0.1.tgz","fileCount":59,"integrity":"sha512-yJYzKtnX7qSpRyiYRcvANVS40+tE29Tjw42GG8E3tpATp57ub23WXPXY8YjEfoyRy4SYgtVEVVZkvcN6MIdoVg==","signatures":[{"sig":"MEQCIGH7+CAIMKx+FCebHP0gSrKFUK9PH8+eNnuAt+SvwcH/AiBiecEw4LhkJ1tAOq67/b6z6Tnj4KQ3UeMPo2mvNPKzUQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@darrenjaws%2fspotify-mcp@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":195294},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"83237a1e4cbd6544cc4a0bec2dd9ca5facf32703","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsc && chmod +x build/bin.js","clean":"rm -rf build","prepare":"npm run build","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","static-checks":"npm run lint && npm run build && npm test","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3ee32d08-b896-4170-8bca-ca327f482c9d"}},"repository":{"url":"git+https://github.com/darrenjaworski/spotify-mcp.git","type":"git"},"_npmVersion":"11.11.0","description":"Model Context Protocol server for Spotify integration","directories":{},"_nodeVersion":"22.22.0","dependencies":{"zod":"^3.24.1","dotenv":"^16.4.7","spotify-web-api-node":"^5.0.2","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.17.0","vitest":"^4.0.18","typescript":"^5.7.2","@types/node":"^22.10.5","typescript-eslint":"^8.55.0","@typescript-eslint/parser":"^8.19.1","@types/spotify-web-api-node":"^5.0.11","@typescript-eslint/eslint-plugin":"^8.19.1"},"_npmOperationalInternal":{"tmp":"tmp/spotify-mcp_1.0.1_1773197744310_0.4358347683246273","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@darrenjaws/spotify-mcp","version":"1.1.0","keywords":["mcp","model-context-protocol","spotify","music","ai","claude"],"author":{"name":"Darren Jaworski","email":"darrenjaworski@gmail.com"},"license":"MIT","_id":"@darrenjaws/spotify-mcp@1.1.0","maintainers":[{"name":"darrenjaws","email":"darrenjaworski@gmail.com"}],"homepage":"https://github.com/darrenjaworski/spotify-mcp#readme","bugs":{"url":"https://github.com/darrenjaworski/spotify-mcp/issues"},"bin":{"spotify-mcp":"build/bin.js"},"dist":{"shasum":"128cc0348f42b3fd789ad23646732bb74bc0bed2","tarball":"https://registry.npmjs.org/@darrenjaws/spotify-mcp/-/spotify-mcp-1.1.0.tgz","fileCount":63,"integrity":"sha512-5H8aCa3iWC6KZLUObh5PvqX1FSueatmRpO1qi7oDnPHcRrAhP/CNHHOi8IUP0Sd2djtpok0FTKFqPTm/wJ7WbQ==","signatures":[{"sig":"MEUCIQCCa3L1XYmQRh1x57Rl2qt2MnhZ+SKlum1ZgrLqGuESeQIgUgMHamLpkP0VOtathSYpt+w9GG2zne78S89zQbRqge0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@darrenjaws%2fspotify-mcp@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":219293},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"b1fa51af8eab7ed6819334b1da4c6a798eda7c9b","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsc && chmod +x build/bin.js","clean":"rm -rf build","format":"prettier --write .","prepare":"npm run build","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","format:check":"prettier --check .","static-checks":"npm run lint && npm run format:check && npm run build && npm test","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3ee32d08-b896-4170-8bca-ca327f482c9d"}},"repository":{"url":"git+https://github.com/darrenjaworski/spotify-mcp.git","type":"git"},"_npmVersion":"11.11.1","description":"Model Context Protocol server for Spotify integration","directories":{},"_nodeVersion":"22.22.0","dependencies":{"zod":"^3.24.1","dotenv":"^16.4.7","spotify-web-api-node":"^5.0.2","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.17.0","vitest":"^4.0.18","prettier":"^3.8.1","typescript":"^5.7.2","@types/node":"^22.10.5","typescript-eslint":"^8.55.0","eslint-config-prettier":"^10.1.8","@typescript-eslint/parser":"^8.19.1","@types/spotify-web-api-node":"^5.0.11","@typescript-eslint/eslint-plugin":"^8.19.1"},"_npmOperationalInternal":{"tmp":"tmp/spotify-mcp_1.1.0_1773276012382_0.9752727947130224","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@darrenjaws/spotify-mcp","version":"1.2.0","keywords":["mcp","model-context-protocol","spotify","music","ai","claude"],"author":{"name":"Darren Jaworski","email":"darrenjaworski@gmail.com"},"license":"MIT","_id":"@darrenjaws/spotify-mcp@1.2.0","maintainers":[{"name":"darrenjaws","email":"darrenjaworski@gmail.com"}],"homepage":"https://github.com/darrenjaworski/spotify-mcp#readme","bugs":{"url":"https://github.com/darrenjaworski/spotify-mcp/issues"},"bin":{"spotify-mcp":"build/bin.js"},"dist":{"shasum":"0cdf0a5c18dbe5e50fb522fb26bf20d2b6fbf114","tarball":"https://registry.npmjs.org/@darrenjaws/spotify-mcp/-/spotify-mcp-1.2.0.tgz","fileCount":63,"integrity":"sha512-fGF//gEUmJo/9gJ7oElhlYSgJF9tRtjNeaV75UAqDcrd6UbQrEqVZYTBfrFx5xPM4Q/VL62pws/Vu+sDEJwmPQ==","signatures":[{"sig":"MEQCIE648gXaEauXV5WKZ1kAqF6g3MF35dltqc4w8oyhYNncAiB6tFHyf74Uof1GQlGEsVODAurhlImXlIIm2VumaHGE0A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@darrenjaws%2fspotify-mcp@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":225925},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"150bf9df3976d096703373f6053b26a141279632","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsc && chmod +x build/bin.js","clean":"rm -rf build","format":"prettier --write .","inspect":"npm run build && npx @modelcontextprotocol/inspector node build/bin.js","prepare":"npm run build","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","format:check":"prettier --check .","static-checks":"npm run lint && npm run format:check && npm run build && npm test","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3ee32d08-b896-4170-8bca-ca327f482c9d"}},"repository":{"url":"git+https://github.com/darrenjaworski/spotify-mcp.git","type":"git"},"_npmVersion":"11.11.1","description":"Model Context Protocol server for Spotify integration","directories":{},"_nodeVersion":"22.22.0","dependencies":{"zod":"^3.24.1","dotenv":"^16.4.7","spotify-web-api-node":"^5.0.2","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.17.0","vitest":"^4.0.18","prettier":"^3.8.1","typescript":"^5.7.2","@types/node":"^22.10.5","typescript-eslint":"^8.55.0","eslint-config-prettier":"^10.1.8","@typescript-eslint/parser":"^8.19.1","@types/spotify-web-api-node":"^5.0.11","@typescript-eslint/eslint-plugin":"^8.19.1"},"_npmOperationalInternal":{"tmp":"tmp/spotify-mcp_1.2.0_1773277072803_0.4646518027222135","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@darrenjaws/spotify-mcp","version":"1.2.1","keywords":["mcp","model-context-protocol","spotify","music","ai","claude"],"author":{"name":"Darren Jaworski","email":"darrenjaworski@gmail.com"},"license":"MIT","_id":"@darrenjaws/spotify-mcp@1.2.1","maintainers":[{"name":"darrenjaws","email":"darrenjaworski@gmail.com"}],"homepage":"https://github.com/darrenjaworski/spotify-mcp#readme","bugs":{"url":"https://github.com/darrenjaworski/spotify-mcp/issues"},"bin":{"spotify-mcp":"build/bin.js"},"dist":{"shasum":"6c64e33141a680e6017e0468090d40fd2a744b2d","tarball":"https://registry.npmjs.org/@darrenjaws/spotify-mcp/-/spotify-mcp-1.2.1.tgz","fileCount":63,"integrity":"sha512-oD3q7C9mh64rhX2SfuLxUj3I3xQcB3Agc8h1juV+tK95WwzJHjc2ZMMFUNwBsnmuXfvyXl/Cuv/rybjHr6alQg==","signatures":[{"sig":"MEYCIQDwasXV2uVpGjVUr9LcOcVeeWNClSDqNYO+gBpKTz1vZwIhAJycwoCu4c0IO5D8VkkRpD2cNPU/BpdRSZiGui3vN3MW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@darrenjaws%2fspotify-mcp@1.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":226014},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"02662446a1d817c2d2b34f898072068dc1d68073","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsc && chmod +x build/bin.js","clean":"rm -rf build","format":"prettier --write .","inspect":"npm run build && npx @modelcontextprotocol/inspector node build/bin.js","prepare":"npm run build","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","format:check":"prettier --check .","static-checks":"npm run lint && npm run format:check && npm run build && npm test","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3ee32d08-b896-4170-8bca-ca327f482c9d"}},"repository":{"url":"git+https://github.com/darrenjaworski/spotify-mcp.git","type":"git"},"_npmVersion":"11.11.1","description":"Model Context Protocol server for Spotify integration","directories":{},"_nodeVersion":"22.22.0","dependencies":{"zod":"^3.24.1","dotenv":"^16.4.7","spotify-web-api-node":"^5.0.2","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.17.0","vitest":"^4.0.18","prettier":"^3.8.1","typescript":"^5.7.2","@types/node":"^22.10.5","typescript-eslint":"^8.55.0","eslint-config-prettier":"^10.1.8","@typescript-eslint/parser":"^8.19.1","@types/spotify-web-api-node":"^5.0.11","@typescript-eslint/eslint-plugin":"^8.19.1"},"_npmOperationalInternal":{"tmp":"tmp/spotify-mcp_1.2.1_1773277712521_0.6626584460724967","host":"s3://npm-registry-packages-npm-production"}},"1.2.4":{"name":"@darrenjaws/spotify-mcp","version":"1.2.4","description":"Model Context Protocol server for Spotify integration","type":"module","bin":{"spotify-mcp":"build/bin.js"},"scripts":{"build":"tsc && chmod +x build/bin.js","dev":"tsc --watch","clean":"rm -rf build","prepare":"npm run build","prepublishOnly":"npm run build && npm test","test":"vitest run","test:watch":"vitest","lint":"eslint src --ext .ts","lint:fix":"eslint src --ext .ts --fix","format":"prettier --write .","format:check":"prettier --check .","inspect":"npm run build && npx @modelcontextprotocol/inspector node build/bin.js","static-checks":"npm run lint && npm run format:check && npm run build && npm test"},"keywords":["mcp","model-context-protocol","spotify","music","ai","claude","claude-desktop","cursor","windsurf","vscode","github-copilot","opencode"],"author":{"name":"Darren Jaworski","email":"darrenjaworski@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/darrenjaworski/spotify-mcp.git"},"bugs":{"url":"https://github.com/darrenjaworski/spotify-mcp/issues"},"homepage":"https://github.com/darrenjaworski/spotify-mcp#readme","dependencies":{"@modelcontextprotocol/sdk":"^1.26.0","dotenv":"^16.4.7","spotify-web-api-node":"^5.0.2","zod":"^3.24.1"},"devDependencies":{"@types/node":"^22.10.5","@types/spotify-web-api-node":"^5.0.11","@typescript-eslint/eslint-plugin":"^8.19.1","@typescript-eslint/parser":"^8.19.1","eslint":"^9.17.0","eslint-config-prettier":"^10.1.8","prettier":"^3.8.1","typescript":"^5.7.2","typescript-eslint":"^8.55.0","vitest":"^4.0.18"},"engines":{"node":">=18.0.0"},"gitHead":"f2ae2b59990e01475f225745ae9425f46ffdb7b4","_id":"@darrenjaws/spotify-mcp@1.2.4","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-xMaRM1kwniOktXg71oCF/1ZuxzxkRojv0YfoWzmyQmQsnp4U498S6bgDDRNDmQHElRr0/swh6ZXjampkSRrDkA==","shasum":"cbb5c4230e5620812987d89a9071859ba9d0c5b3","tarball":"https://registry.npmjs.org/@darrenjaws/spotify-mcp/-/spotify-mcp-1.2.4.tgz","fileCount":63,"unpackedSize":226118,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@darrenjaws%2fspotify-mcp@1.2.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGhvBVx3ITZVkJkEXZrTiL8N4iGj2nVQH37W3yzwTMGPAiAVPlygawAqTb4NCOabXPXrCNqBUT+MBVyLpeCKjf4zjg=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3ee32d08-b896-4170-8bca-ca327f482c9d"}},"directories":{},"maintainers":[{"name":"darrenjaws","email":"darrenjaworski@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/spotify-mcp_1.2.4_1776487367386_0.5334819154099433"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-14T19:11:44.818Z","modified":"2026-04-18T04:42:47.771Z","0.1.0":"2026-02-14T19:11:45.390Z","0.2.0":"2026-02-14T20:03:54.413Z","0.3.0":"2026-02-22T15:07:33.170Z","0.4.0":"2026-02-22T15:17:02.609Z","0.5.3":"2026-02-26T04:50:26.136Z","0.6.0":"2026-02-26T05:13:14.412Z","0.6.1":"2026-02-26T22:46:15.275Z","1.0.0":"2026-03-11T02:38:11.250Z","1.0.1":"2026-03-11T02:55:44.471Z","1.1.0":"2026-03-12T00:40:12.593Z","1.2.0":"2026-03-12T00:57:52.955Z","1.2.1":"2026-03-12T01:08:32.668Z","1.2.4":"2026-04-18T04:42:47.530Z"},"bugs":{"url":"https://github.com/darrenjaworski/spotify-mcp/issues"},"author":{"name":"Darren Jaworski","email":"darrenjaworski@gmail.com"},"license":"MIT","homepage":"https://github.com/darrenjaworski/spotify-mcp#readme","keywords":["mcp","model-context-protocol","spotify","music","ai","claude","claude-desktop","cursor","windsurf","vscode","github-copilot","opencode"],"repository":{"type":"git","url":"git+https://github.com/darrenjaworski/spotify-mcp.git"},"description":"Model Context Protocol server for Spotify integration","maintainers":[{"name":"darrenjaws","email":"darrenjaworski@gmail.com"}],"readme":"# Spotify MCP Server\n\n[![Static Checks](https://github.com/darrenjaworski/spotify-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/darrenjaworski/spotify-mcp/actions/workflows/ci.yml)\n[![npm version](https://img.shields.io/npm/v/@darrenjaws/spotify-mcp)](https://www.npmjs.com/package/@darrenjaws/spotify-mcp)\n[![npm downloads](https://img.shields.io/npm/dm/@darrenjaws/spotify-mcp)](https://www.npmjs.com/package/@darrenjaws/spotify-mcp)\n[![license](https://img.shields.io/npm/l/@darrenjaws/spotify-mcp)](https://github.com/darrenjaworski/spotify-mcp/blob/main/LICENSE)\n\nA Model Context Protocol (MCP) server that provides seamless integration with Spotify's API, enabling AI assistants to control and interact with Spotify playback, manage playlists, search for music, and retrieve user listening data.\n\n## Table of Contents\n\n- [Overview](#overview)\n- [Features](#features)\n  - [Current Features](#current-features)\n  - [Planned Features](#planned-features)\n- [Quick Start](#quick-start)\n- [Installation](#installation)\n- [Configuration](#configuration)\n  - [Automated Setup](#automated-setup-recommended)\n  - [Manual Setup](#manual-setup)\n  - [Environment Variables](#environment-variables)\n  - [MCP Configuration](#mcp-configuration)\n- [Usage](#usage)\n- [Available Tools (32 total)](#available-tools-32-total)\n  - [Playback & Device Control](#playback--device-control)\n  - [Search & Discovery](#search--discovery)\n  - [Playlist Management](#playlist-management)\n  - [Library Management](#library-management)\n  - [User Data](#user-data)\n- [Local Development](#local-development)\n  - [Prerequisites](#prerequisites)\n  - [Initial Setup](#initial-setup)\n  - [Development Workflow](#development-workflow)\n  - [Testing Your MCP Server](#testing-your-mcp-server)\n  - [Development Tips](#development-tips)\n  - [Testing](#testing)\n  - [Linting and Code Quality](#linting-and-code-quality)\n  - [Troubleshooting](#troubleshooting)\n- [Authentication Flow](#authentication-flow)\n- [Security](#security)\n- [Contributing](#contributing)\n- [License](#license)\n- [Acknowledgments](#acknowledgments)\n- [Support](#support)\n- [Related Projects](#related-projects)\n- [Resources](#resources)\n\n## Overview\n\nThe Spotify MCP Server bridges the gap between AI assistants and Spotify, allowing natural language interactions with your music library and playback. Whether you want to play specific songs, create playlists, discover new music, or analyze your listening habits, this server provides the tools to make it happen.\n\n## Features\n\n### Current Features\n\n- **Authentication & Authorization**: OAuth 2.0 Authorization Code flow for secure Spotify API access\n- **Playback Control**: Play, pause, skip, adjust volume, and control playback across devices\n- **Search**: Find tracks, albums, artists, and playlists\n- **Library Management**: Access and manage saved tracks, albums, and playlists\n- **User Data**: Retrieve user profile information and listening statistics\n\n### Planned Features\n\nSee [ROADMAP.md](ROADMAP.md) for detailed feature timeline and future enhancements.\n\n## Quick Start\n\nThe **fastest and easiest** way to get started is using the interactive setup wizard:\n\n```bash\n# Run the setup wizard (no installation required!)\nnpx @darrenjaws/spotify-mcp setup\n```\n\nThe wizard will:\n\n- ✅ Guide you through creating a Spotify Developer app\n- ✅ Open your browser to the right pages automatically\n- ✅ Validate your credentials as you enter them\n- ✅ Generate the correct configuration for your environment\n- ✅ Give you copy-paste ready configs for Claude Desktop, Claude Code, Cursor, Windsurf, VS Code, or OpenCode\n\n**That's it!** The whole setup takes about 2 minutes.\n\n## Installation\n\n### Option 1: NPM (Recommended)\n\n**Interactive Setup (Easiest):**\n\n```bash\n# No installation required - run the setup wizard\nnpx @darrenjaws/spotify-mcp setup\n```\n\n**Or install globally first:**\n\n```bash\nnpm install -g @darrenjaws/spotify-mcp\n\n# Then run setup\nspotify-mcp setup\n```\n\n**Using npx without setup wizard:**\n\n```bash\n# Skip to manual configuration (see Configuration section below)\nnpx -y @darrenjaws/spotify-mcp\n```\n\n### Option 2: From Source\n\nFor development or contributing:\n\n```bash\n# Clone the repository\ngit clone https://github.com/darrenjaworski/spotify-mcp.git\ncd spotify-mcp\n\n# Install dependencies\nnpm install\n\n# Build the project\nnpm run build\n\n# Run the setup wizard\nnpm run build && node build/bin.js setup\n```\n\n## Configuration\n\n### Automated Setup (Recommended)\n\nUse the interactive setup wizard for the easiest configuration experience:\n\n```bash\nnpx @darrenjaws/spotify-mcp setup\n```\n\nThe wizard walks you through:\n\n1. Creating a Spotify Developer app\n2. Getting your Client ID and Secret\n3. Choosing your AI tool (Claude Desktop, Claude Code, Cursor, Windsurf, VS Code, OpenCode)\n4. Generating the correct config file\n\n### Manual Setup\n\nIf you prefer to configure manually or need to update credentials:\n\n#### Spotify App Setup\n\n1. Go to the [Spotify Developer Dashboard](https://developer.spotify.com/dashboard)\n2. Create a new application\n3. Note your **Client ID** and **Client Secret**\n4. Add `http://127.0.0.1:3000/callback` to your app's Redirect URIs (note: use `127.0.0.1`, not `localhost`)\n\n### Environment Variables\n\n**For NPM/npx users**: Configure environment variables in your Claude Desktop config (see MCP Configuration above).\n\n**For development from source**: Create a `.env` file in the project root:\n\n```env\nSPOTIFY_CLIENT_ID=your_client_id_here\nSPOTIFY_CLIENT_SECRET=your_client_secret_here\nSPOTIFY_REDIRECT_URI=http://127.0.0.1:3000/callback\n```\n\n### MCP Configuration\n\n#### Claude Desktop\n\nAdd to your Claude Desktop config file:\n\n- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`\n- **Windows**: `%APPDATA%/Claude/claude_desktop_config.json`\n\n```json\n{\n  \"mcpServers\": {\n    \"spotify\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@darrenjaws/spotify-mcp\"],\n      \"env\": {\n        \"SPOTIFY_CLIENT_ID\": \"your_client_id_here\",\n        \"SPOTIFY_CLIENT_SECRET\": \"your_client_secret_here\",\n        \"SPOTIFY_REDIRECT_URI\": \"http://127.0.0.1:3000/callback\"\n      }\n    }\n  }\n}\n```\n\nRestart Claude Desktop after saving.\n\n#### Claude Code (CLI)\n\nThe easiest way is the `claude mcp add` command:\n\n```bash\nclaude mcp add spotify \\\n  -e SPOTIFY_CLIENT_ID=your_client_id_here \\\n  -e SPOTIFY_CLIENT_SECRET=your_client_secret_here \\\n  -e SPOTIFY_REDIRECT_URI=http://127.0.0.1:3000/callback \\\n  -- npx -y @darrenjaws/spotify-mcp\n```\n\nOr add it manually to `~/.claude.json` (global) or `.claude/settings.json` (project):\n\n```json\n{\n  \"mcpServers\": {\n    \"spotify\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@darrenjaws/spotify-mcp\"],\n      \"env\": {\n        \"SPOTIFY_CLIENT_ID\": \"your_client_id_here\",\n        \"SPOTIFY_CLIENT_SECRET\": \"your_client_secret_here\",\n        \"SPOTIFY_REDIRECT_URI\": \"http://127.0.0.1:3000/callback\"\n      }\n    }\n  }\n}\n```\n\nVerify with `claude mcp list` — you should see `spotify` in the list.\n\n#### Cursor\n\nAdd to `.cursor/mcp.json` in your project (or `~/.cursor/mcp.json` for global):\n\n```json\n{\n  \"mcpServers\": {\n    \"spotify\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@darrenjaws/spotify-mcp\"],\n      \"env\": {\n        \"SPOTIFY_CLIENT_ID\": \"your_client_id_here\",\n        \"SPOTIFY_CLIENT_SECRET\": \"your_client_secret_here\",\n        \"SPOTIFY_REDIRECT_URI\": \"http://127.0.0.1:3000/callback\"\n      }\n    }\n  }\n}\n```\n\n#### Windsurf\n\nAdd to `~/.codeium/windsurf/mcp_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"spotify\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@darrenjaws/spotify-mcp\"],\n      \"env\": {\n        \"SPOTIFY_CLIENT_ID\": \"your_client_id_here\",\n        \"SPOTIFY_CLIENT_SECRET\": \"your_client_secret_here\",\n        \"SPOTIFY_REDIRECT_URI\": \"http://127.0.0.1:3000/callback\"\n      }\n    }\n  }\n}\n```\n\n#### VS Code (GitHub Copilot)\n\nAdd to `.vscode/mcp.json` in your project (or VS Code User Settings for global):\n\n```json\n{\n  \"servers\": {\n    \"spotify\": {\n      \"type\": \"stdio\",\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@darrenjaws/spotify-mcp\"],\n      \"env\": {\n        \"SPOTIFY_CLIENT_ID\": \"your_client_id_here\",\n        \"SPOTIFY_CLIENT_SECRET\": \"your_client_secret_here\",\n        \"SPOTIFY_REDIRECT_URI\": \"http://127.0.0.1:3000/callback\"\n      }\n    }\n  }\n}\n```\n\n#### OpenCode\n\n```json\n{\n  \"$schema\": \"https://opencode.ai/config.json\",\n  \"spotify\": {\n    \"command\": [\"npx\", \"-y\", \"@darrenjaws/spotify-mcp@latest\"],\n    \"environment\": {\n      \"SPOTIFY_CLIENT_ID\": \"your_client_id_here\",\n      \"SPOTIFY_CLIENT_SECRET\": \"your_client_secret_here\",\n      \"SPOTIFY_REDIRECT_URI\": \"http://127.0.0.1:3000/callback\"\n    },\n    \"type\": \"local\"\n  }\n}\n```\n\n#### From Source (Development)\n\n```json\n{\n  \"mcpServers\": {\n    \"spotify\": {\n      \"command\": \"node\",\n      \"args\": [\"/absolute/path/to/spotify-mcp/build/bin.js\"],\n      \"env\": {\n        \"SPOTIFY_CLIENT_ID\": \"your_client_id_here\",\n        \"SPOTIFY_CLIENT_SECRET\": \"your_client_secret_here\",\n        \"SPOTIFY_REDIRECT_URI\": \"http://127.0.0.1:3000/callback\"\n      }\n    }\n  }\n}\n```\n\n**Note**: When using npx or global install, environment variables must be specified in the MCP config (not in a `.env` file).\n\n## Usage\n\nOnce configured, you can interact with Spotify through natural language:\n\n- \"Play my Discover Weekly playlist\"\n- \"Play the album Thriller by Michael Jackson\"\n- \"What song is currently playing?\"\n- \"Create a playlist called 'Workout Mix' with these songs...\"\n- \"Skip to the next track\"\n- \"Turn on shuffle\"\n- \"Set repeat to track\"\n- \"Show me my top artists from the last month\"\n- \"Search for songs by The Beatles\"\n- \"Add this song to my liked songs\"\n\n## Available Tools (32 total)\n\n### Playback & Device Control (10 tools)\n\n- `spotify_play` - Start or resume playback of tracks, albums, playlists, or artists\n- `spotify_pause` - Pause playback\n- `spotify_next` - Skip to next track\n- `spotify_previous` - Skip to previous track\n- `spotify_set_volume` - Adjust volume level (0-100)\n- `spotify_get_playback_state` - Get current playback information (includes shuffle/repeat status)\n- `spotify_get_devices` - List available Spotify Connect devices\n- `spotify_transfer_playback` - Transfer playback to a different device\n- `spotify_shuffle` - Enable or disable shuffle mode\n- `spotify_repeat` - Set repeat mode (track, context, or off)\n\n### Search & Discovery (1 tool)\n\n- `spotify_search` - Search for tracks, albums, artists, or playlists with optional field filters (artist, album, genre, year, tag)\n\n### Playlist Management (8 tools)\n\n- `spotify_get_playlists` - Get user's playlists\n- `spotify_get_playlist` - Get specific playlist details\n- `spotify_create_playlist` - Create a new playlist\n- `spotify_add_to_playlist` - Add tracks to a playlist\n- `spotify_remove_from_playlist` - Remove tracks from a playlist\n- `spotify_reorder_playlist_tracks` - Reorder tracks in a playlist\n- `spotify_delete_playlist` - Delete (unfollow) a playlist\n- `spotify_update_playlist` - Update playlist details (name, description, public/private, collaborative)\n\n### Library Management (9 tools)\n\n- `spotify_get_saved_tracks` - Get tracks saved in your library\n- `spotify_get_saved_albums` - Get albums saved in your library\n- `spotify_get_followed_artists` - Get artists you follow\n- `spotify_save_tracks` - Save tracks to your library\n- `spotify_remove_saved_tracks` - Remove tracks from your library\n- `spotify_save_albums` - Save albums to your library\n- `spotify_remove_saved_albums` - Remove albums from your library\n- `spotify_follow_artists` - Follow artists\n- `spotify_unfollow_artists` - Unfollow artists\n\n### User Data (3 tools)\n\n- `spotify_get_user_profile` - Get user profile information\n- `spotify_get_top_items` - Get user's top artists or tracks\n- `spotify_get_recently_played` - Get recently played tracks\n\n### System (1 tool)\n\n- `spotify_open` - Open the Spotify desktop app (supports macOS, Windows, Linux)\n\n## Local Development\n\n### Prerequisites\n\n- Node.js >= 18.0.0\n- npm or yarn\n- Spotify Developer account with app credentials\n\n### Initial Setup\n\n1. **Clone and install dependencies**\n\n```bash\ngit clone https://github.com/darrenjaworski/spotify-mcp.git\ncd spotify-mcp\nnpm install\n```\n\n2. **Configure environment variables**\n\n```bash\ncp .env.example .env\n# Edit .env with your Spotify credentials\n```\n\n3. **Build the project**\n\n```bash\nnpm run build\n```\n\n### Development Workflow\n\n#### Watch Mode (Recommended)\n\nRun TypeScript compiler in watch mode for automatic rebuilds:\n\n```bash\nnpm run dev\n```\n\nThis continuously watches for file changes and rebuilds automatically. Keep this running in one terminal while you develop.\n\n#### Manual Build\n\n```bash\nnpm run build       # Compile TypeScript to build/\nnpm run clean       # Remove build directory\n```\n\n### Testing Your MCP Server\n\n#### Option 1: MCP Inspector (Recommended)\n\nThe [MCP Inspector](https://modelcontextprotocol.io/docs/tools/inspector) is the official interactive testing tool for MCP servers. It provides a browser-based UI to test tools, see protocol messages, and debug your server.\n\n**Start the Inspector:**\n\n```bash\nnpx @modelcontextprotocol/inspector node build/bin.js\n```\n\nThis opens a browser at `http://localhost:6274` with:\n\n- **Server Connection Pane**: Configure transport and environment variables\n- **Tools Tab**: See all available tools and test them interactively\n- **Resources Tab**: View server resources\n- **Notifications Pane**: See real-time protocol messages\n\n**With Environment Variables:**\n\n```bash\nnpx @modelcontextprotocol/inspector node build/bin.js -- \\\n  SPOTIFY_CLIENT_ID=your_id \\\n  SPOTIFY_CLIENT_SECRET=your_secret \\\n  SPOTIFY_REDIRECT_URI=http://127.0.0.1:3000/callback\n```\n\n**Enable Debug Logging:**\n\n```bash\nDEBUG=true npx @modelcontextprotocol/inspector node build/bin.js\n```\n\n**Benefits:**\n\n- ✅ Interactive UI to test all 32 tools\n- ✅ See JSON-RPC messages in real-time\n- ✅ No need to configure Claude Desktop during development\n- ✅ Quickly iterate on tool implementations\n\n#### Option 2: Test with Claude Desktop\n\nAdd to your Claude Desktop config for real-world testing:\n\n**macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`\n\n```json\n{\n  \"mcpServers\": {\n    \"spotify-dev\": {\n      \"command\": \"node\",\n      \"args\": [\"/absolute/path/to/spotify-mcp/build/bin.js\"],\n      \"env\": {\n        \"SPOTIFY_CLIENT_ID\": \"your_client_id\",\n        \"SPOTIFY_CLIENT_SECRET\": \"your_client_secret\",\n        \"SPOTIFY_REDIRECT_URI\": \"http://127.0.0.1:3000/callback\",\n        \"LOG_LEVEL\": \"debug\"\n      }\n    }\n  }\n}\n```\n\nRestart Claude Desktop after config changes.\n\n#### Option 3: Manual stdio Testing\n\nFor low-level debugging, you can send JSON-RPC messages directly:\n\n```bash\n# Build first\nnpm run build\n\n# Test list tools\necho '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/list\"}' | node build/bin.js\n\n# Test a tool call\necho '{\"jsonrpc\":\"2.0\",\"id\":2,\"method\":\"tools/call\",\"params\":{\"name\":\"spotify_get_user_profile\",\"arguments\":{}}}' | node build/bin.js\n```\n\n### Development Tips\n\n**1. Use Watch Mode + Inspector Together**\n\nTerminal 1:\n\n```bash\nnpm run dev  # Watch mode - rebuilds on changes\n```\n\nTerminal 2:\n\n```bash\nnpx @modelcontextprotocol/inspector node build/bin.js\n```\n\nRefresh the Inspector after each rebuild to test changes.\n\n**2. Enable Debug Logging**\n\nSet `LOG_LEVEL=debug` in your `.env` file to see detailed logs:\n\n```bash\nLOG_LEVEL=debug node build/bin.js\n```\n\n**3. Test Individual Tools**\n\nUse the Inspector's Tools tab to test each tool with different inputs before integrating with Claude.\n\n**4. Check stderr for Logs**\n\nThe server logs to stderr (not stdout) to avoid interfering with stdio transport:\n\n```bash\nnode build/bin.js 2> server.log  # Capture logs to file\n```\n\n### Testing\n\nRun the test suite to verify tool registration and functionality:\n\n```bash\nnpm test              # Run all tests\nnpm run test:watch    # Run tests in watch mode\n```\n\n**Test Coverage:**\n\n- ✅ 310 tests across 16 test files\n- ✅ Tool-level unit tests for playback, search, playlists, library, user, and system\n- ✅ Auth tests (credentials, token management, file permissions, refresh, OAuth callback)\n- ✅ Logger tests (sensitive data redaction, log levels)\n- ✅ Error handling tests (all HTTP status codes, security)\n- ✅ Server registration and integration tests\n- ✅ Client tests (token orchestration, retry logic, rate limiting)\n- ✅ Validation tests (URI format, array size, numeric range)\n- ✅ Setup wizard and CLI argument tests\n\n### Linting and Code Quality\n\n```bash\nnpm run lint           # Check code style\nnpm run lint:fix       # Auto-fix linting issues\nnpm run static-checks  # Run lint, build, and test together\n```\n\n### Troubleshooting\n\n**Build Errors:**\n\n- Ensure TypeScript is installed: `npm install`\n- Check Node version: `node --version` (should be >= 18)\n\n**Inspector Not Loading:**\n\n- Check if port 6274 is available\n- Try clearing browser cache\n- Restart the inspector\n\n**OAuth Errors:**\n\n- Verify Spotify credentials in `.env`\n- Check redirect URI matches in Spotify Dashboard\n- Ensure scopes are correct in `src/spotify/auth.ts`\n\n**Server Not Responding:**\n\n- Check logs: `LOG_LEVEL=debug node build/bin.js`\n- Verify build succeeded: `ls -la build/`\n- Test with simple tool like `spotify_get_user_profile`\n\n## Authentication Flow\n\nThe server uses Spotify's OAuth 2.0 Authorization Code flow:\n\n1. First request triggers the auth flow\n2. User is redirected to Spotify login with secure state parameter for CSRF protection\n3. After authorization, tokens are exchanged using client_secret\n4. Tokens are stored securely in `~/.spotify-mcp/tokens.json` with 0600 permissions\n5. Tokens are automatically refreshed when expired\n\n## Security\n\n- OAuth tokens are stored securely with restricted file permissions (0600) and never logged\n- Cryptographically secure state parameter prevents CSRF attacks\n- Client secrets are kept in environment variables, never in source code\n- All API requests use HTTPS\n- Uses Authorization Code flow appropriate for confidential server applications\n\n## Contributing\n\nContributions are welcome! Please read our contributing guidelines before submitting PRs.\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/amazing-feature`)\n3. Commit your changes (`git commit -m 'Add amazing feature'`)\n4. Push to the branch (`git push origin feature/amazing-feature`)\n5. Open a Pull Request\n\n## License\n\nMIT License - see LICENSE file for details\n\n## Acknowledgments\n\n- Built on the [Model Context Protocol](https://modelcontextprotocol.io/)\n- Uses the [Spotify Web API](https://developer.spotify.com/documentation/web-api)\n\n## Support\n\n- Report bugs via [GitHub Issues](https://github.com/darrenjaworski/spotify-mcp/issues)\n- Join discussions in [GitHub Discussions](https://github.com/darrenjaworski/spotify-mcp/discussions)\n\n## Related Projects\n\n- [MCP Specification](https://spec.modelcontextprotocol.io/)\n- [Spotify Web API SDK](https://github.com/spotify/spotify-web-api-node)\n\n## Resources\n\n### MCP Development Tools\n\n- [MCP Inspector Documentation](https://modelcontextprotocol.io/docs/tools/inspector) - Official testing tool\n- [MCP Inspector GitHub](https://github.com/modelcontextprotocol/inspector) - Source code\n- [Testing MCP Servers Guide](https://www.stainless.com/mcp/how-to-test-mcp-servers) - Comprehensive testing strategies\n- [MCP Inspector Tutorial](https://hackteam.io/blog/build-test-mcp-server-typescript-mcp-inspector/) - Step-by-step guide\n\n### Spotify API\n\n- [Spotify Web API Documentation](https://developer.spotify.com/documentation/web-api)\n- [Spotify Developer Dashboard](https://developer.spotify.com/dashboard)\n","readmeFilename":"README.md"}