{"_id":"@cynosure-mcp/music-tagger","_rev":"5-451d4073e7465a235796ee16ad827b5c","name":"@cynosure-mcp/music-tagger","dist-tags":{"latest":"1.0.6"},"versions":{"1.0.2":{"name":"@cynosure-mcp/music-tagger","version":"1.0.2","keywords":["mcp","model-context-protocol","music","tags","id3","acoustid","musicbrainz","fingerprint"],"license":"MIT","_id":"@cynosure-mcp/music-tagger@1.0.2","maintainers":[{"name":"andjhagen","email":"voidvalkon@gmail.com"}],"bin":{"music-tagger":"dist/index.js"},"dist":{"shasum":"ebfd93fab8cb770f124bec8e102e20880ae51ead","tarball":"https://registry.npmjs.org/@cynosure-mcp/music-tagger/-/music-tagger-1.0.2.tgz","fileCount":6,"integrity":"sha512-2+OOpsHeZGa3aUV2WUa7I8/N8HZGhM3rOasNNTcCOwKbnWGfY+6PgIyViV2iMr8gifI61p1o32FzIj1Xzl4gmQ==","signatures":[{"sig":"MEYCIQC5V/C9n5kABvN/oj7RfhL+QTsnXrd6IiSqvAeTP1lnAwIhAL+//FXoWDAjw3PYZi0jC14tEYTT/D2LBrjepWH8LoXR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35414},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"1fa6d22aebed0dd59156dd236490fca6cdae41ae","mcpName":"io.github.andreasjhagen/music-tagger","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"andjhagen","email":"voidvalkon@gmail.com"},"_npmVersion":"11.9.0","description":"MCP server for identifying and tagging music files via AcoustID fingerprinting and MusicBrainz metadata","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^3.24.0","ffmpeg-static":"^5.3.0","ffprobe-static":"^3.1.0","node-taglib-sharp":"^3.3.0","rusty-chromaprint-wasm":"^0.1.5","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/music-tagger_1.0.2_1776884436735_0.9096891660539186","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@cynosure-mcp/music-tagger","version":"1.0.3","keywords":["mcp","model-context-protocol","music","tags","id3","acoustid","musicbrainz","fingerprint"],"license":"MIT","_id":"@cynosure-mcp/music-tagger@1.0.3","maintainers":[{"name":"andjhagen","email":"voidvalkon@gmail.com"}],"bin":{"music-tagger":"dist/index.js"},"dist":{"shasum":"12155fa2fbb2072582a236c3ccf5d506bf4b8b4b","tarball":"https://registry.npmjs.org/@cynosure-mcp/music-tagger/-/music-tagger-1.0.3.tgz","fileCount":6,"integrity":"sha512-fnIWPAD6mvZA0GPcJYgZST3wGbn6h2tcIPjSlwmRrhuT+gdr/3PTcuh+jhJgBHr+LoysMBGt2sMsSQO7Zc5pLQ==","signatures":[{"sig":"MEYCIQCdF0bUVNr897jWUQT1pw8nuo2Cw1Jyw6SdpNp7galT8QIhALHoCzy+d1zaGGKvSbVtZGKOJURNOHkVrR3timBU+eix","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35881},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"800e76c3991ff7ef5a7177c8225d844e14c06865","mcpName":"io.github.andreasjhagen/music-tagger","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"andjhagen","email":"voidvalkon@gmail.com"},"_npmVersion":"11.9.0","description":"MCP server for identifying and tagging music files via AcoustID fingerprinting and MusicBrainz metadata","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^3.24.0","ffmpeg-static":"^5.3.0","ffprobe-static":"^3.1.0","node-taglib-sharp":"^3.3.0","rusty-chromaprint-wasm":"^0.1.5","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/music-tagger_1.0.3_1778604777852_0.006049850057003647","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@cynosure-mcp/music-tagger","version":"1.0.4","keywords":["mcp","model-context-protocol","music","tags","id3","acoustid","musicbrainz","fingerprint"],"license":"MIT","_id":"@cynosure-mcp/music-tagger@1.0.4","maintainers":[{"name":"andjhagen","email":"voidvalkon@gmail.com"}],"bin":{"music-tagger":"dist/index.js"},"dist":{"shasum":"a3bb049afd224e6a2a38e6ffcb0899d8af74058d","tarball":"https://registry.npmjs.org/@cynosure-mcp/music-tagger/-/music-tagger-1.0.4.tgz","fileCount":7,"integrity":"sha512-jogosi5VlBb8l+xle+kOOQhwCYh20Ls2FS7y1E/nYAxfLWDE3lENkfe9VvsCbFPo23DEeSu3jQCtUptMxsWVfA==","signatures":[{"sig":"MEUCIQCNlBOrw9bsrgEZ5373fp6KX3S6k/WdtejrKCai8KQrygIgSUVNSseN43L0VhbVTo1x2lOeKnVIHDTbvVvsuvWRc/M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":135465},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"a114eae53425d9d6ffe88b883a04b2ccabac7e7d","mcpName":"io.github.andreasjhagen/music-tagger","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"andjhagen","email":"voidvalkon@gmail.com"},"_npmVersion":"10.9.2","description":"MCP server for identifying and tagging music files via AcoustID fingerprinting and MusicBrainz metadata","directories":{},"_nodeVersion":"22.17.1","dependencies":{"zod":"^3.24.0","ffmpeg-static":"^5.3.0","ffprobe-static":"^3.1.0","node-taglib-sharp":"^3.3.0","rusty-chromaprint-wasm":"^0.1.5","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/music-tagger_1.0.4_1786486092705_0.716766675305595","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@cynosure-mcp/music-tagger","version":"1.0.5","keywords":["mcp","model-context-protocol","music","tags","id3","acoustid","musicbrainz","fingerprint"],"license":"MIT","_id":"@cynosure-mcp/music-tagger@1.0.5","maintainers":[{"name":"andjhagen","email":"voidvalkon@gmail.com"}],"homepage":"https://github.com/Cynosure-MCP-Collection/mcp-music-tagger#readme","bugs":{"url":"https://github.com/Cynosure-MCP-Collection/mcp-music-tagger/issues"},"bin":{"music-tagger":"dist/index.js"},"dist":{"shasum":"95b3f73fa01819bcd2ec3129196270609a8a4630","tarball":"https://registry.npmjs.org/@cynosure-mcp/music-tagger/-/music-tagger-1.0.5.tgz","fileCount":10,"integrity":"sha512-LmCZ/5Z5cYwjL5c6sAX5EJ5h3ZbJkBFQnI0jVb2oCQ0oNB0DqmnZC8inisR9+gTMLQLseYjeZW558RYvL3pQ7Q==","signatures":[{"sig":"MEYCIQCp5ezaYiQi+HQoY0RNIEYi4C/wb8UTS3teTToHa9k5IAIhAPkxNXLTk26YZpi2IdS6XxfzPGmf6oRPfExIvWztZqTp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":138835},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"5131227f49d5d543a924919fd196cb5842e197a1","mcpName":"io.github.andreasjhagen/music-tagger","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","version":"node scripts/sync-version.mjs && git add server.json","release:check":"node scripts/sync-version.mjs --check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e648d9b8-3288-47e3-b97b-8c6eb68a1c59"}},"repository":{"url":"git+https://github.com/Cynosure-MCP-Collection/mcp-music-tagger.git","type":"git"},"_npmVersion":"11.17.0","description":"MCP server for identifying and tagging music files via AcoustID fingerprinting and MusicBrainz metadata","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^3.24.0","ffmpeg-static":"^5.3.0","ffprobe-static":"^3.1.0","node-taglib-sharp":"^3.3.0","rusty-chromaprint-wasm":"^0.1.5","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/music-tagger_1.0.5_1786868990045_0.22772677048186107","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"_id":"@cynosure-mcp/music-tagger@1.0.6","bin":{"music-tagger":"dist/index.js"},"bugs":{"url":"https://github.com/Cynosure-MCP-Collection/mcp-music-tagger/issues"},"dist":{"shasum":"85d7862dbed5a95ca8a8eb061425fa98808fa450","tarball":"https://registry.npmjs.org/@cynosure-mcp/music-tagger/-/music-tagger-1.0.6.tgz","fileCount":10,"integrity":"sha512-rg5jG+fQPXgCQ4Cw5rg+bbnlgEW4/ed3xMs5jfgegzvbptqMH1jMZN27HVzUOahav8hUrYkFediv0v5slZ4H3A==","signatures":[{"sig":"MEQCIA8efUXG3jHgBCsIkgipLGAGEgYjUU/hkygjiOfQRwQkAiAEcRUAegFuBF6KyMn1OEOy4ITfeoQWvWnLgIkmdswlWA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQC5HcwFxv3Fyi1606g4QeWdcqC4BGMVhEQcVwcjgwj65gIge5Ne1Ce6mmK/Fdv8K9j0qFctt0Jt9WjZhrEwdbG7n7A="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cynosure-mcp%2fmusic-tagger@1.0.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":287014},"main":"dist/index.js","name":"@cynosure-mcp/music-tagger","type":"module","types":"./dist/index.d.ts","gitHead":"4cc3b9d1bf57acb06bd40d1424459b41769f8479","license":"MIT","mcpName":"io.github.andreasjhagen/music-tagger","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","version":"node scripts/sync-version.mjs && git add server.json","release:check":"node scripts/sync-version.mjs --check"},"version":"1.0.6","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"e648d9b8-3288-47e3-b97b-8c6eb68a1c59"}},"homepage":"https://github.com/Cynosure-MCP-Collection/mcp-music-tagger#readme","keywords":["mcp","model-context-protocol","music","tags","id3","acoustid","musicbrainz","fingerprint"],"repository":{"url":"git+https://github.com/Cynosure-MCP-Collection/mcp-music-tagger.git","type":"git"},"_npmVersion":"11.19.0","description":"MCP server for identifying and tagging music files via AcoustID fingerprinting and MusicBrainz metadata","directories":{},"maintainers":[{"name":"andjhagen","email":"voidvalkon@gmail.com"}],"_nodeVersion":"24.21.0","dependencies":{"zod":"^3.24.0","ffmpeg-static":"^5.3.0","ffprobe-static":"^3.1.0","node-taglib-sharp":"^3.3.0","rusty-chromaprint-wasm":"^0.1.5","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/music-tagger_1.0.6_1791041509839_0.5411846457276419"}}},"time":{"created":"2026-04-22T19:00:36.642Z","modified":"2026-10-03T15:31:50.273Z","1.0.2":"2026-04-22T19:00:36.894Z","1.0.3":"2026-05-12T16:52:57.981Z","1.0.4":"2026-08-11T22:08:12.948Z","1.0.5":"2026-08-16T08:29:50.189Z","1.0.6":"2026-10-03T15:31:49.934Z"},"bugs":{"url":"https://github.com/Cynosure-MCP-Collection/mcp-music-tagger/issues"},"license":"MIT","homepage":"https://github.com/Cynosure-MCP-Collection/mcp-music-tagger#readme","keywords":["mcp","model-context-protocol","music","tags","id3","acoustid","musicbrainz","fingerprint"],"repository":{"url":"git+https://github.com/Cynosure-MCP-Collection/mcp-music-tagger.git","type":"git"},"description":"MCP server for identifying and tagging music files via AcoustID fingerprinting and MusicBrainz metadata","maintainers":[{"name":"andjhagen","email":"voidvalkon@gmail.com"}],"readme":"# @cynosure-mcp/music-tagger\n\nMCP server for automatically identifying and tagging music files using audio fingerprinting (AcoustID + Chromaprint) and metadata from MusicBrainz.\n\n## Tools\n\n| Tool        | Description                                                            |\n| ----------- | ---------------------------------------------------------------------- |\n| `read_tags` | Read current embedded tags from a file or all music files in a folder  |\n| `tag_music` | Fingerprint and write accurate tags (+ cover art) to one or more files |\n\n## Requirements\n\n### API Key\n\nRegister for a **free** AcoustID API key at <https://acoustid.org/api-key> and pass it as `ACOUSTID_API_KEY`.\n\n### fpcalc (optional)\n\nThe MCP is **fully self-contained** — audio is decoded using the bundled `ffmpeg-static` binary and fingerprinted via `rusty-chromaprint-wasm` (a WASM build of Chromaprint; no native system libraries needed).\n\nIf `fpcalc` (Chromaprint CLI) is already installed on the system it will be used automatically as a faster alternative.\n\n| Platform | Install command                                  |\n| -------- | ------------------------------------------------ |\n| Linux    | `sudo apt install libchromaprint-tools`          |\n| macOS    | `brew install chromaprint`                       |\n| Windows  | Download from <https://acoustid.org/chromaprint> |\n\n## Configuration\n\n| Variable           | Required | Description                                      |\n| ------------------ | -------- | ------------------------------------------------ |\n| `ACOUSTID_API_KEY` | Yes      | Free API key from <https://acoustid.org/api-key> |\n\n## Supported Formats\n\nMP3, FLAC, OGG Vorbis, M4A/AAC, WAV, WMA, Opus, APE, Musepack\n\n## Tags Written\n\n- **Title**, **Artist**, **Album Artist**, **Album**\n- **Year**, **Track number / total**, **Disc number / total**\n- **Genres** (up to 3, from MusicBrainz community votes)\n- **Cover art** (250×250 JPEG from Cover Art Archive, embedded)\n\n## MCP Config\n\n```json\n{\n  \"mcpServers\": {\n    \"music-tagger\": {\n      \"command\": \"npx\",\n      \"args\": [\"@cynosure-mcp/music-tagger\"],\n      \"env\": {\n        \"ACOUSTID_API_KEY\": \"your_key_here\"\n      }\n    }\n  }\n}\n```\n\n## How It Works\n\n1. **Decode** — The first 120 s of the audio file is decoded to raw PCM using the bundled `ffmpeg-static` binary\n2. **Fingerprint** — `rusty-chromaprint-wasm` (WASM, no system deps) generates an AcoustID-compatible fingerprint; `fpcalc` is used instead when available\n3. **Identify** — The fingerprint is submitted to the AcoustID API, which returns a MusicBrainz Recording ID\n4. **Fetch metadata** — Full recording metadata (title, artists, releases, genres) is fetched from MusicBrainz\n5. **Cover art** — Album artwork is fetched from the Cover Art Archive (250×250)\n6. **Write** — All tags are embedded into the file using TagLib (via `node-taglib-sharp`)\n\nMusicBrainz requests are rate-limited to ≤1 req/s as required by their API policy.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}