io. github. cyanheads/ musicbrainz-mcp-server
by cyanheads · remote · local (npm) · no sign-in to list tools · v0.2.0 · published by GitHub user cyanheads
Search MusicBrainz artists, releases, works, labels; resolve ISRC/ISWC/barcode; fetch cover art.
10 tools: 1 change things and 9 only read.
Scanned Oct 21, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone0Claude Code: ask
- Changes things1Claude Code: ask: see these tools
- Only reads9Claude Code: allow: see these tools
1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http musicbrainz https://musicbrainz.caseyjhand.com/mcpFindings
Matches of fixed checks, with the text they matched.
The server marks "musicbrainz_get_label" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true}; The name "musicbrainz_get_label" says "get": a word for reading.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
10 tools
Changes things 1Claude Code: ask
musicbrainz_get_labelLabel by MBID: type (Original Production, Reissue, Imprint, …), country, life span, label code (the LC number), area, aliases, tags, and external links (url-rels — Wikidata, Discog…1 finding
Why it is in this group
- The name "musicbrainz_get_label" says "get": a word for reading.
- The description's first verb is "label": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "musicbrainz_get_label" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true}; The name "musicbrainz_get_label" says "get": a word for reading.
Description, as the server wrote it Label by MBID: type (Original Production, Reissue, Imprint, …), country, life span, label code (the LC number), area, aliases, tags, and external links (url-rels — Wikidata, Discogs, official site). A label's releases are a potentially huge linked set (a major label can have tens of thousands), so they are NOT embedded here — enumerate them with musicbrainz_browse_entities (target_type=release, link.label).
Annotations the server declares
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
Only reads 9Claude Code: allow
musicbrainz_browse_entitiesPaginate entities linked to one parent MBID: release-groups by artist; releases by artist, label, release-group, or recording; recordings by artist, work, or release; works by arti…No findings
Why it is in this group
- The name "musicbrainz_browse_entities" says "browse": a word for reading.
Description, as the server wrote it Paginate entities linked to one parent MBID: release-groups by artist; releases by artist, label, release-group, or recording; recordings by artist, work, or release; works by artist; artists/labels by area. Artist release-groups and release-group editions embed one upstream page in get_* lookups; use this tool for the complete entity set. Recording browse returns identities, not performance attributes/dates or ordered release tracks: use musicbrainz_get_recording for work relationships and musicbrainz_get_release for tracks. Provide exactly one valid parent link. offset pages to any depth; totalCount is the upstream entity total. Release rows carry status, other entity subtypes use type.
Annotations the server declares
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
musicbrainz_get_artistArtist profile by MBID: type, country, life span, gender, area, aliases, tags/genres, release-groups, band-membership / collaboration relationships, and external links.No findings
Why it is in this group
- The name "musicbrainz_get_artist" says "get": a word for reading.
Description, as the server wrote it Artist profile by MBID: type, country, life span, gender, area, aliases, tags/genres, release-groups, band-membership / collaboration relationships, and external links. Release-groups embed one upstream page (25); relationships are not capped. For the complete release-group list, call musicbrainz_browse_entities with target_type=release-group and link.artist.
Annotations the server declares
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
musicbrainz_get_cover_artCover Art Archive images for a release or release-group MBID: front/back flags, image types, full-resolution URLs, and 250/500/1200px thumbnail URLs.No findings
Why it is in this group
- The name "musicbrainz_get_cover_art" says "get": a word for reading.
Description, as the server wrote it Cover Art Archive images for a release or release-group MBID: front/back flags, image types, full-resolution URLs, and 250/500/1200px thumbnail URLs. Returns an empty image set (NOT an error) when the entity has no art — absence of art is information. An MBID that matches no release or release-group of the given entity_type fails with entity_not_found instead of an empty set. Art is served at the release level; a release-group MBID resolves to a representative release's art automatically. URLs are linked, never rehosted — image copyright stays with the rights holders (only MusicBrainz core metadata is CC0).
Annotations the server declares
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
musicbrainz_get_recordingRecording (a specific performance, distinct from the abstract work) by MBID: length, artist credits, ISRCs, release appearances, work relationships, and performer/production credit…No findings
Why it is in this group
- The name "musicbrainz_get_recording" says "get": a word for reading.
Description, as the server wrote it Recording (a specific performance, distinct from the abstract work) by MBID: length, artist credits, ISRCs, release appearances, work relationships, and performer/production credits with attributes and dates. Relationships are not capped. Browse release appearances with musicbrainz_browse_entities (target_type=release, link.recording). Browse recording by work enumerates recording entities; this tool supplies their work relationship details.
Annotations the server declares
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
musicbrainz_get_releaseOne edition's full detail by MBID: the tracklist (media → tracks → recordings with lengths and recording MBIDs), label + catalog number, barcode, country, release date, format, pac…No findings
Why it is in this group
- The name "musicbrainz_get_release" says "get": a word for reading.
Description, as the server wrote it One edition's full detail by MBID: the tracklist (media → tracks → recordings with lengths and recording MBIDs), label + catalog number, barcode, country, release date, format, packaging, text representation (language/script), and a cover-art availability stub. Track lengths are rendered m:ss (stored as milliseconds upstream). For the actual cover image URLs, call musicbrainz_get_cover_art with this release MBID.
Annotations the server declares
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
musicbrainz_get_release_groupRelease-group ("the album" above specific pressings) by MBID: primary type (Album/Single/EP) and secondary types (Live/Compilation), first-release date, artist credit, the list of …No findings
Why it is in this group
- The name "musicbrainz_get_release_group" says "get": a word for reading.
Description, as the server wrote it Release-group ("the album" above specific pressings) by MBID: primary type (Album/Single/EP) and secondary types (Live/Compilation), first-release date, artist credit, the list of releases (editions), tags/genres, and cover-art availability from the Cover Art Archive (image count and front/back flags for the release-group's representative release — the art musicbrainz_get_cover_art returns; use that tool for the image URLs). The embedded releases list is capped at one page (25); for the complete set of editions, call musicbrainz_browse_entities with target_type=release and link.release-group. For a specific edition's tracklist, take a release MBID from the releases list and call musicbrainz_get_release.
Annotations the server declares
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
musicbrainz_get_workWork (a composition, distinct from a recording) by MBID: type, languages, ISWCs, writers/composers/lyricists, aliases, tags, and external links.No findings
Why it is in this group
- The name "musicbrainz_get_work" says "get": a word for reading.
Description, as the server wrote it Work (a composition, distinct from a recording) by MBID: type, languages, ISWCs, writers/composers/lyricists, aliases, tags, and external links. This server returns the first 25 recording relationships with their exact total and actual truncation disclosure, preserving all other relationships. Browse recording entities with musicbrainz_browse_entities (target_type=recording, link.work), then use musicbrainz_get_recording for work relationship attributes and dates; browse alone does not return those details.
Annotations the server declares
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
musicbrainz_lookup_identifierResolve a standard identifier to MusicBrainz entities without a name search — the deterministic path when you already hold an ID.No findings
Why it is in this group
- The name "musicbrainz_lookup_identifier" says "lookup": a word for reading.
Description, as the server wrote it Resolve a standard identifier to MusicBrainz entities without a name search — the deterministic path when you already hold an ID. id_type=isrc → recordings (a recording-level code, often shared by several recordings); id_type=iswc → works (a composition-level code); id_type=barcode → releases (UPC/EAN digits; spaces and hyphens are ignored). ISRC and ISWC hit dedicated exact endpoints; barcode is a Lucene search filter so results are ranked (exact match scores 100). The output kind field tells you which entity type came back.
Annotations the server declares
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
musicbrainz_search_entitiesFull-text search across a MusicBrainz entity type (artist, release-group, release, recording, work, label) using a Lucene query string.No findings
Why it is in this group
- The name "musicbrainz_search_entities" says "search": a word for reading.
Description, as the server wrote it Full-text search across a MusicBrainz entity type (artist, release-group, release, recording, work, label) using a Lucene query string. Returns ranked matches with MBID, name/title, disambiguation, subtype where applicable, release status, and a 0–100 relevance score (100 = exact). Release rows use status; other entity subtypes use type. Starting point when resolving a name to an MBID — chain the returned MBID into the matching musicbrainz_get_* tool. Results are in MusicBrainz score-descending order. Supports field-scoped Lucene syntax (e.g. `artist:radiohead AND country:GB`).
Annotations the server declares
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 0.2.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http musicbrainz https://musicbrainz.caseyjhand.com/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__musicbrainz__musicbrainz_search_entities",
"mcp__musicbrainz__musicbrainz_get_artist",
"mcp__musicbrainz__musicbrainz_get_release_group",
"mcp__musicbrainz__musicbrainz_get_release",
"mcp__musicbrainz__musicbrainz_get_recording",
"mcp__musicbrainz__musicbrainz_get_work",
"mcp__musicbrainz__musicbrainz_lookup_identifier",
"mcp__musicbrainz__musicbrainz_browse_entities",
"mcp__musicbrainz__musicbrainz_get_cover_art"
],
"ask": [
"mcp__musicbrainz__musicbrainz_get_label"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as musicbrainz. Review it before you use it.
