Skip to main content
Glama

Server Details

Search MusicBrainz artists, releases, works, labels; resolve ISRC/ISWC/barcode; fetch cover art.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
99.9% over 64 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
cyanheads/musicbrainz-mcp-server
GitHub Stars
1
Server Listing
musicbrainz-mcp-server

TDQS

A4.4/5.0

Scored across 10 tools

Disambiguation5/5

Each tool targets a clearly distinct operation: per-entity get_* lookups, browse_entities for paginated linked sets, search_entities for name resolution, and lookup_identifier for exact ID resolution. The descriptions explicitly delineate boundaries (e.g. browse vs. get for release-groups, get_recording vs. get_work for relationship details), leaving little room for misselection.

Naming Consistency5/5

All tools share the musicbrainz_ prefix and a consistent verb_noun pattern (get_artist, get_release_group, browse_entities, search_entities, lookup_identifier). Entity names are singular and stem-consistent across get_* variants.

Tool Count5/5

Ten tools is well-scoped for a read-only reference-data server, with each tool covering a distinct entity type or retrieval strategy. No tool appears redundant or padded.

Completeness4/5

Core music entities (artist, label, release, release-group, recording, work) plus cover art, search, browse, and identifier lookup cover the main workflows thoroughly. Minor gaps exist for secondary entity types like area, event, place, and series that lack dedicated get_* lookups, though these are less central to the apparent scope.

Available Tools

10 tools
musicbrainz_browse_entitiesmusicbrainz-mcp-server: browse entitiesA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
linkYesExactly one parent MBID. The valid key depends on target_type (see the description).
limitNoPage size (1–100).
offsetNoResult offset for deep pagination (0-based).
target_typeYesThe entity type to enumerate (the children).

Output Schema

ParametersJSON Schema
NameRequiredDescription
capNoThe page size that was applied. Absent when not truncated.
errorNoPresent when the call failed. Absent on success.
shownNoNumber of entities returned in this page. Absent when not truncated.
noticeNoHow to page further when results remain, or guidance when empty.
offsetNoThe offset used for this page.
entitiesNoThis page of linked entities, in upstream order.
linkMbidNoThe parent MBID that was browsed.
linkTypeNoThe parent link type used (artist, label, release-group, release, recording, work, or area).
truncatedNoTrue when more entities remain beyond this page (offset + shown < totalCount). Absent when the page is complete.
targetTypeNoThe entity type that was enumerated.
totalCountNoTrue total number of linked entities upstream (the {type}-count field).

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, openWorld), so the description earns credit for adding what they don't: pagination semantics ('offset pages to any depth'), the meaning of totalCount, and the shape of returned rows ('release rows carry status, other entity subtypes use type'). It does not discuss error behavior or what happens with an invalid/extra link key, which keeps it short of a 5.

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

Conciseness4/5

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

Purpose is front-loaded in the first clause, and the dense middle sentences each carry distinct routing or semantic content. It is information-packed rather than padded, though the target-type/link enumeration is a long comma chain that slightly taxes readability.

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

Completeness5/5

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

Given an output schema exists, the description needn't explain return values, yet it still clarifies totalCount, row status/type fields, and the identity-not-performance distinction for recordings. Combined with annotations and a fully documented schema, an agent has everything needed to call this 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?

Schema coverage is 100%, so the baseline is 3, but the description adds cross-parameter semantics the per-property schema cannot: the mapping from target_type to which link key is valid, plus the warning that recording browse returns identities rather than performance attributes. The schema's own link description merely defers to the description, so this mapping is genuinely load-bearing.

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

Purpose5/5

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

It states a specific verb and resource ('Paginate entities linked to one parent MBID') and then enumerates the exact parent→child combinations supported (release-groups by artist, releases by artist/label/release-group/recording, etc.). This lets an agent distinguish it from the get_* and search_entities siblings without opening any schema.

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

Usage Guidelines5/5

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

It explicitly routes the agent: use this tool for the complete entity set rather than the single upstream page embedded in get_* lookups, and names alternatives with their conditions ('use musicbrainz_get_recording for work relationships and musicbrainz_get_release for tracks'). It also states the input constraint ('Provide exactly one valid parent link'), leaving nothing to inference.

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

musicbrainz_get_artistmusicbrainz-mcp-server: get artistA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
mbidYesArtist MBID (hyphenated hexadecimal UUID; surrounding whitespace and uppercase accepted).
inc_relationshipsNoInclude band-membership / collaboration relationships and external links (url-rels).
inc_release_groupsNoInclude the discography (release-groups). Capped at one page; use browse for the full set.

Output Schema

ParametersJSON Schema
NameRequiredDescription
capNoThe one-page cap that was applied. Absent when not truncated.
areaNoAssociated area name. Omitted when unknown.
mbidNoArtist MBID.
nameNoArtist name.
tagsNoCommunity tags/genres with vote counts (may be empty).
typeNoArtist type (Person, Group, Orchestra, …). Omitted when unknown.
errorNoPresent when the call failed. Absent on success.
shownNoNumber of release-groups returned. Absent when not truncated.
genderNoGender, for person-type artists. Omitted when unknown/inapplicable.
noticeNoHow to fetch the complete discography when truncated.
aliasesNoAlternate names (may be empty).
countryNoISO country code. Omitted when unknown.
lifeSpanNoBirth/death or formation/dissolution span. Omitted when unknown.
sortNameNoSortable name form. Omitted when absent.
truncatedNoTrue when the discography hit the one-page cap and more release-groups exist. Absent when the full set fit in one page.
externalLinksNoExternal resource links (url-rels) — Wikidata, Discogs, official site (may be empty).
relationshipsNoBand membership and collaboration relationships (may be empty).
releaseGroupsNoDiscography — release-groups (one page; may be empty or capped).
disambiguationNoShort qualifier distinguishing same-named artists. Omitted when absent.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already establish readOnly/idempotent/openWorld, so the safety profile is covered. The description adds real behavioral context beyond that: release-groups are capped at one upstream page of 25 while relationships are uncapped, which tells the agent when results will be truncated and what the inc_* flags actually gate.

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

Conciseness4/5

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

Three sentences, front-loaded with the core identity and payload, then the cap caveat, then the routing instruction. The enumerated field list is long but each entry maps to a returned section, so it earns its space; minor trimming would not hurt.

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

Completeness5/5

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

An output schema exists, so return values need not be described. The description covers the remaining gaps an agent needs: what is included, the release-group page cap, the uncapped relationships, and where to go for the complete discography.

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?

Schema coverage is 100%, so the schema already documents all three parameters and the baseline is 3. The description still earns extra credit by tying the two boolean flags to observable behavior (the 25-item page cap vs. uncapped relationships), which the schema does not state.

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

Purpose5/5

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

States a specific verb+resource ('Artist profile by MBID') and then enumerates the exact payload an agent gets back: type, country, life span, gender, area, aliases, tags/genres, release-groups, relationships, external links. It also distinguishes itself from a sibling by naming musicbrainz_browse_entities as the route for the full release-group set.

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

Usage Guidelines4/5

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

Gives an explicit alternative and the condition that selects it: 'For the complete release-group list, call musicbrainz_browse_entities with target_type=release-group and link.artist.' No when-not guidance is offered against the other get_* siblings (get_label, get_release_group, etc.), so it falls short of a full 5.

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

musicbrainz_get_cover_artmusicbrainz-mcp-server: get cover artA
Read-onlyIdempotent
Inspect

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
mbidYesRelease or release-group MBID (hyphenated hexadecimal UUID; surrounding whitespace and uppercase accepted).
entity_typeNoWhether the MBID is a release (default) or a release-group.release

Output Schema

ParametersJSON Schema
NameRequiredDescription
mbidNoThe MBID that was queried.
errorNoPresent when the call failed. Absent on success.
hasArtNoWhether any cover art exists for this entity.
imagesNoCover-art images (empty when the entity has no art).
noticeNoPresent when the entity has no art: states that no images exist, or — when the MBID could not be checked against MusicBrainz — that its existence is unconfirmed.
entityTypeNoWhether the MBID was treated as a release or release-group.
representativeReleaseNoFor a release-group query, the release MBID whose art was returned. Omitted for direct release queries.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only cover the read-only/idempotent/open-world profile, yet the description adds the critical non-obvious behaviors: no art yields an empty set rather than an error, a non-matching MBID yields entity_not_found, release-group art is proxied from a representative release, and images are linked not rehosted with licensing implications.

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

Conciseness4/5

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

Purpose is front-loaded in the first clause, followed by return contents, error semantics, resolution behavior, and licensing. It is dense rather than padded, though the closing copyright/CC0 sentence is more informational than operationally required.

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

Completeness5/5

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

With an output schema present, return-value detail is unnecessary; the description nonetheless supplies the two failure-mode distinctions and the release-group resolution rule that the schema cannot express. Nothing needed to call this tool correctly is missing.

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?

Schema coverage is 100%, so the baseline is 3, but the description goes further by explaining what entity_type actually changes — that a release-group MBID is transparently resolved to a representative release's art, which is exactly the semantic an agent needs to pick the enum value.

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

Purpose5/5

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

States a specific verb+resource ('Cover Art Archive images for a release or release-group MBID') and enumerates what comes back (front/back flags, image types, full-res and thumbnail URLs). An agent can immediately separate this from metadata siblings like get_release or get_release_group.

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

Usage Guidelines4/5

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

Clearly frames the decision space between empty-set and entity_not_found, and tells the agent that release-group MBIDs are auto-resolved to a representative release. It does not, however, explicitly route an agent away from or toward a sibling tool for the metadata-only case.

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

musicbrainz_get_labelmusicbrainz-mcp-server: get labelA
Read-onlyIdempotent
Inspect

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
mbidYesLabel MBID (hyphenated hexadecimal UUID; surrounding whitespace and uppercase accepted).

Output Schema

ParametersJSON Schema
NameRequiredDescription
areaNoAssociated area name. Omitted when unknown.
mbidNoLabel MBID.
nameNoLabel name.
tagsNoCommunity tags/genres (may be empty).
typeNoLabel type. Omitted when unknown.
errorNoPresent when the call failed. Absent on success.
aliasesNoAlternate names (may be empty).
countryNoISO country code. Omitted when unknown.
lifeSpanNoFounding/dissolution span. Omitted when unknown.
sortNameNoSortable name form. Omitted when absent.
labelCodeNoLabel code (LC number), without the "LC" prefix. Omitted when absent.
externalLinksNoExternal resource links (url-rels) (may be empty).
disambiguationNoShort qualifier. Omitted when absent.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, openWorld), so the description is not obliged to restate them. It does add genuine behavioral context beyond the structured fields: the release set is deliberately excluded because it can reach tens of thousands of items. It says nothing about rate limits, caching, or auth, so it is helpful rather than complete.

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?

Two sentences, both front-loaded: the payload fields come first, then the caveat plus the redirect. Nothing is repeated from the title, schema, or annotations, and every clause carries information.

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

Completeness5/5

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

An output schema exists, so return values need no explanation; the description's field inventory and the explicit exclusion of the release set cover the only non-obvious behavior. For a single-MBID lookup with full annotation and schema coverage, nothing needed to call it correctly is missing.

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?

There is a single required MBID parameter and schema description coverage is 100%, including the UUID pattern and whitespace/case tolerance, so the schema already carries the meaning. The description adds nothing about the identifier format, which is the correct baseline for a one-parameter tool whose schema is fully documented.

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

Purpose5/5

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

"Label by MBID" gives a specific verb+resource, and the description enumerates what the label record contains (type, country, life span, label code, area, aliases, tags, url-rels). It also distinguishes itself from siblings by naming the exact alternative for the release set, so an agent can route without reading any other schema.

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

Usage Guidelines4/5

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

It gives an explicit when-not and an alternative: releases are a potentially huge linked set, so they are not embedded here and should be enumerated with musicbrainz_browse_entities (target_type=release, link.label). That is strong routing guidance, but it does not address the upstream step of obtaining the MBID (e.g. via musicbrainz_search_entities), so it stops short of full when-to-use coverage.

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

musicbrainz_get_recordingmusicbrainz-mcp-server: get recordingA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
mbidYesRecording MBID (hyphenated hexadecimal UUID; surrounding whitespace and uppercase accepted).
inc_relationshipsNoInclude performance/production relationships (performers, producers, engineers) and work-rels.

Output Schema

ParametersJSON Schema
NameRequiredDescription
mbidNoRecording MBID.
errorNoPresent when the call failed. Absent on success.
isrcsNoISRCs assigned to this recording (may be empty).
titleNoRecording title.
lengthNoRecording length as m:ss. Omitted when unknown.
releasesNoReleases this recording appears on (may be empty).
artistCreditNoCredited artists (may be empty).
externalLinksNoExternal resource links (url-rels) (may be empty).
relationshipsNoPerformance/production relationships and work-rels (may be empty).
disambiguationNoShort qualifier. Omitted when absent.
firstReleaseDateNoEarliest release date for this recording. Omitted when absent.
artistCreditStringNoDisplay string of the artist credit with join phrases.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered. The description adds a genuinely non-obvious behavioral trait: 'Relationships are not capped,' warning that the response payload can grow unbounded when inc_relationships is on. It still omits any mention of MusicBrainz rate limits or what happens on an unknown MBID.

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

Conciseness4/5

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

Front-loaded with the entity definition and disambiguation, then field list, then routing guidance - a sensible priority order with no filler. The sentences are long and clause-heavy, but each carries distinct information.

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

Completeness4/5

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

With an output schema present, the description need not explain return values, and it correctly focuses on scope, entity disambiguation and routing to siblings. Remaining gaps are minor: no error behavior for invalid MBIDs and no note on request rate constraints for this open-world API.

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%: the mbid format/whitespace behavior and what inc_relationships includes are already fully documented in the schema. The description's echo of 'performer/production credits' and its 'not capped' note are the only additions, so the baseline 3 for a schema-driven parameter set is appropriate.

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

Purpose5/5

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

Names a specific verb and resource (get a recording by MBID) and immediately disambiguates it from the abstract work entity, which is the most likely confusion among siblings like musicbrainz_get_work. It then enumerates the payload (length, artist credits, ISRCs, release appearances, work relationships, credits), so an agent knows exactly what it gets back.

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

Usage Guidelines4/5

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

Explicitly routes two related needs to the right tools: release appearances to musicbrainz_browse_entities (with target_type=release, link.recording) and work-enumeration to the browse-recording-by-work path, positioning this tool as the source of work-relationship detail. It never states when NOT to call this tool (e.g. when only a search hit is needed), so it falls short of the full when/when-not/alternatives rubric.

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

musicbrainz_get_releasemusicbrainz-mcp-server: get releaseA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
mbidYesRelease MBID (hyphenated hexadecimal UUID; surrounding whitespace and uppercase accepted).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dateNoRelease date. Omitted when absent.
mbidNoRelease MBID.
errorNoPresent when the call failed. Absent on success.
mediaNoMedia (discs) with their tracklists (may be empty).
titleNoRelease title.
scriptNoText-representation script code. Omitted when absent.
statusNoRelease status (Official, Promotion, Bootleg, …). Omitted when absent.
barcodeNoBarcode (UPC/EAN). Omitted when absent; empty string upstream means "known to have none".
countryNoRelease country code. Omitted when absent.
coverArtNoWhether cover art exists (availability stub from WS/2).
languageNoText-representation language code. Omitted when absent.
labelInfoNoLabel / catalog-number pairings (may be empty).
packagingNoPackaging type (Jewel Case, Digipak, …). Omitted when absent.
artistCreditNoCredited artists (may be empty).
disambiguationNoShort qualifier. Omitted when absent.
releaseGroupIdNoParent release-group MBID — chain to musicbrainz_get_release_group. Omitted when absent.
artistCreditStringNoDisplay string of the artist credit with join phrases.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations cover safety (readOnly, idempotent, openWorld), so the bar is lower. The description adds real behavioral context: track lengths are rendered m:ss though stored as milliseconds upstream, and it returns a cover-art availability stub rather than images. It does not mention pagination or error behavior, but for a read-only lookup this is solid.

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

Conciseness4/5

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

Two dense sentences, front-loaded with what the tool returns, and the sibling call-out lands last where it belongs. It is on the long side for a single-parameter lookup, but each clause maps to a distinct returned field rather than padding.

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

Completeness5/5

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

An output schema exists, so return values need no explanation, yet the description still summarizes the payload shape and flags the m:ss rendering quirk and the cover-art stub. Nothing needed to call this correctly is missing.

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% and the single mbid parameter is fully documented in-schema including the UUID pattern and whitespace tolerance. The description adds only 'by MBID', so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('get release' / 'One edition's full detail by MBID') and enumerates what the detail contains (tracklist, label, barcode, country, date, format, packaging). The agent can immediately distinguish it from get_release_group, get_recording, and get_cover_art.

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

Usage Guidelines4/5

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

Explicitly routes the agent to a sibling: 'For the actual cover image URLs, call musicbrainz_get_cover_art with this release MBID.' This is a clear when-to-use-next rule. It lacks guidance on release vs release_group selection, so it stops short of a 5.

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

musicbrainz_get_release_groupmusicbrainz-mcp-server: get release groupA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
mbidYesRelease-group MBID (hyphenated hexadecimal UUID; surrounding whitespace and uppercase accepted).

Output Schema

ParametersJSON Schema
NameRequiredDescription
capNoThe one-page cap that was applied. Absent when not truncated.
mbidNoRelease-group MBID.
tagsNoCommunity tags/genres (may be empty).
errorNoPresent when the call failed. Absent on success.
shownNoNumber of releases returned. Absent when not truncated.
titleNoRelease-group title.
noticeNoPresent when the releases list was capped (how to fetch the complete set of editions) and/or when cover-art availability could not be checked (why coverArt is omitted).
coverArtNoCover-art availability from the Cover Art Archive: the images of the release-group's representative release, the same art musicbrainz_get_cover_art returns (exists: false with count 0 when the archive has none). Omitted when the archive lookup could not complete — the notice says so.
releasesNoReleases (editions) in this group (one page; may be empty or capped — use browse for all).
truncatedNoTrue when the releases list hit the one-page cap and more editions exist. Absent when the full set fit in one page.
primaryTypeNoPrimary type (Album, Single, EP, Broadcast, Other). Omitted when absent.
artistCreditNoCredited artists (may be empty).
disambiguationNoShort qualifier. Omitted when absent.
secondaryTypesNoSecondary types (Live, Compilation, Soundtrack, …). Omitted when none.
firstReleaseDateNoEarliest release date across all editions. Omitted when absent.
artistCreditStringNoDisplay string of the artist credit with join phrases.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/openWorld safety, so the description is not burdened with that. It adds genuinely useful behavioral detail: the embedded releases list is capped at one page (25), which warns the agent about truncation. It omits rate limits and auth, so not a full 5.

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

Conciseness4/5

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

Front-loads the tool's purpose and return contents before the routing sentences, and every sentence carries information. The opening sentence is dense with enumerated fields, which slightly hurts scannability but nothing is wasted.

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

Completeness5/5

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

An output schema exists so return values need not be documented, yet the description still summarizes payload contents and explicitly handles the truncation/routing gap. For a single-param lookup tool, nothing an agent needs to call it correctly is missing.

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?

Only one parameter and schema coverage is 100%, so the schema already documents the MBID format and whitespace tolerance. The description implies identification by MBID but adds no format or edge-case detail beyond the schema; baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Release-group ... by MBID') and immediately disambiguates the domain concept ('the album' above specific pressings). It also clearly sets itself apart from siblings get_release and browse_entities by scope.

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

Usage Guidelines5/5

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

Explicitly routes the agent: browse_entities with target_type=release and link.release-group for the full edition set, get_release for a specific edition's tracklist, and get_cover_art for image URLs. Both when-to-use and alternatives are named with concrete parameters.

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

musicbrainz_get_workmusicbrainz-mcp-server: get workA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
mbidYesWork MBID (hyphenated hexadecimal UUID; surrounding whitespace and uppercase accepted).
inc_relationshipsNoInclude writer/composer relationships, recording relationships, and external links.

Output Schema

ParametersJSON Schema
NameRequiredDescription
capNoServer-side recording relationship cap, when truncated.
mbidNoWork MBID.
tagsNoCommunity tags/genres (may be empty).
typeNoWork type (Song, Symphony, …). Omitted when unknown.
errorNoPresent when the call failed. Absent on success.
iswcsNoISWCs assigned to this work (may be empty).
shownNoNumber of recording relationships returned when truncated.
titleNoWork title.
noticeNoRecording enumeration and relationship-detail retrieval guidance when truncated.
aliasesNoAlternate titles (may be empty).
languagesNoLyrics languages (ISO codes; may be empty).
truncatedNoTrue only when recording relationships were omitted beyond 25.
totalCountNoExact number of recording relationships before the server-side slice. Absent when relationships are disabled.
externalLinksNoExternal resource links (url-rels) (may be empty).
relationshipsNoAll non-recording relationships and the first 25 recording relationships in upstream order (may be empty).
disambiguationNoShort qualifier. Omitted when absent.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, openWorld), so the bar is lower. The description adds genuinely useful behavior: it returns the first 25 recording relationships with exact total and explicit truncation disclosure while preserving other relationships — a real disclosure detail beyond the annotations.

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

Conciseness4/5

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

Front-loads the resource and its facets before the cross-tool routing, which is the right ordering. It is somewhat dense and the 'then use ...; browse alone does not return those details' clause is slightly winding, but every sentence carries information.

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

Completeness4/5

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

With a 100%-documented schema and an output schema present, the description needn't explain return format. It adds relationship-truncation behavior and sibling routing, leaving little for an agent to infer before calling correctly.

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%, so both parameters (mbid, inc_relationships) are fully documented in the schema; baseline 3 applies. The description implies what relationships may be included but adds no syntax or default-value detail beyond what the schema already provides.

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

Purpose5/5

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

States a specific verb+resource (get a Work by MBID) and immediately disambiguates the resource from the sibling concept 'recording'. It also enumerates the returned facets (type, languages, ISWCs, writers, aliases, tags, external links), so an agent knows exactly what this tool is for.

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

Usage Guidelines4/5

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

Explicitly routes the agent to siblings: browse_entities (target_type=recording, link.work) for browsing, and get_recording for work-related attributes/dates, noting that browse alone does not return those details. It gives clear context and alternatives but stops short of stating when not to call this tool.

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

musicbrainz_lookup_identifiermusicbrainz-mcp-server: lookup identifierA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
valueYesThe identifier value. ISRC e.g. "USRC17607839"; ISWC e.g. "T-010.140.236-1"; barcode = the UPC/EAN digits, e.g. "075678164125" (spaces and hyphens are ignored; any other character, including a wildcard, is rejected).
id_typeYesWhich standard identifier: isrc (recording), iswc (work), or barcode (release).

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
resultNoThe resolved entities, discriminated by `kind` (recordings | works | releases).

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already mark it read-only and idempotent, and the description adds key behavioral context: ISRC/ISWC hit dedicated exact endpoints, while barcode is a Lucene search filter with ranked results and exact matches scoring 100. It also tells agents to expect a kind field identifying the returned entity type. No contradictions.

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?

Four dense sentences, all load-bearing, with the core decision first and mode-specific nuances following. It avoids repeating the schema and contains no filler.

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

Completeness5/5

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

For a read-only lookup with a full input schema and an output schema, the description covers the workflow decision, endpoint behavior differences, and output shape signal. Nothing an agent needs to correctly invoke or interpret the tool is missing.

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

Parameters5/5

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

The schema already documents both parameters completely, and the description enriches them by explaining what each identifier type represents, that ISRC can map to multiple recordings, and that barcode results are ranked with exact matches at 100. This is genuine added meaning beyond the schema.

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

Purpose5/5

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

Opens with a specific verb-resource pair ('Resolve a standard identifier to MusicBrainz entities') and immediately contrasts it with name search, establishing this as the deterministic ID-based lookup. It maps each id_type to its entity class, which clearly distinguishes it from the musicbrainz_search_entities and musicbrainz_get_* siblings.

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

Usage Guidelines4/5

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

Explicitly frames the tool as the deterministic path when an ID is already held, and says 'without a name search', which sets a clear boundary against search_entities. The id_type mapping also tells agents which entity type each mode returns. It does not name sibling tools directly, but the guidance is sufficient.

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

musicbrainz_search_entitiesmusicbrainz-mcp-server: search entitiesA
Read-onlyIdempotent
Inspect

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum results to return (1–100).
queryYesLucene query string; must contain non-whitespace text. Plain text matches names/titles; field scoping (e.g. `artist:`, `country:`, `tag:`) is supported. Sent to MusicBrainz exactly as given.
offsetNoResult offset for pagination (0-based).
entityTypeYesWhich entity type to search.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
noticeNoGuidance when zero results matched — how to broaden or correct the query.
resultsNoRanked matches, in MusicBrainz score-descending order.
entityTypeNoThe entity type that was searched.
totalCountNoTotal matches upstream before the limit/offset window.
effectiveQueryNoThe query string as sent to MusicBrainz.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, openWorld, so the safety profile is covered. The description adds real behavioral context beyond them: results are ordered by MusicBrainz score-descending, scores are 0–100 with 100 = exact, and the query is passed through verbatim to Lucene. It stops short of documenting rate limits or pagination caps.

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

Conciseness4/5

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

Front-loaded with the core action and the scope, then moves to output shape and the chaining guidance. Dense but almost all sentences carry distinct information; the relevance-score sentence is the only one that borders on restating return detail.

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

Completeness5/5

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

For a 4-parameter, 2-required search tool with full schema coverage and an output schema, the description covers purpose, query syntax, result ordering, score semantics, and the follow-up tool. Nothing an agent needs to select and invoke it correctly is missing.

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?

Schema coverage is 100%, so the baseline is 3. The description goes further by specifying the accepted Lucene field-scoping syntax with a worked example (`artist:radiohead AND country:GB`), which helps an agent construct a valid query string even though the schema only asserts field scoping is supported.

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

Purpose5/5

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

Names a specific verb (full-text search) plus the resource (MusicBrainz entity type) and enumerates the entity types searched. The 'Starting point when resolving a name to an MBID' framing cleanly separates it from the musicbrainz_get_* siblings and from browse_entities.

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

Usage Guidelines4/5

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

Gives explicit usage context: it is the starting point for name→MBID resolution and the returned MBID should be chained into the matching musicbrainz_get_* tool. It does not explicitly contrast with musicbrainz_browse_entities, the nearest alternative, so it falls short of a full when/when-not statement.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 9 tool updates
    • Changedmusicbrainz_browse_entities13 fields changed
      • addedInput schema / properties / link / additionalProperties
        Added value: +{}
      • addedInput schema / properties / link / properties / area / pattern
        Added value: +"^\\s*[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}\\s*$"
      • addedInput schema / properties / link / properties / artist / pattern
        Added value: +"^\\s*[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}\\s*$"
      • addedInput schema / properties / link / properties / label / pattern
        Added value: +"^\\s*[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}\\s*$"
      • addedInput schema / properties / link / properties / recording / pattern
        Added value: +"^\\s*[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}\\s*$"
      • addedInput schema / properties / link / properties / release
        Added value: +{
        +  "description": "Parent release MBID (recording entities in this edition, not ordered tracks).",
        +  "pattern": "^\\s*[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}\\s*$",
        +  "type": "string"
        +}
      • addedInput schema / properties / link / properties / release-group / pattern
        Added value: +"^\\s*[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}\\s*$"
      • addedInput schema / properties / link / properties / releaseGroup
        Added value: +{
        +  "description": "Alias for release-group; use only one spelling.",
        +  "pattern": "^\\s*[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}\\s*$",
        +  "type": "string"
        +}
      • addedInput schema / properties / link / properties / release_group
        Added value: +{
        +  "description": "Alias for release-group; use only one spelling.",
        +  "pattern": "^\\s*[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}\\s*$",
        +  "type": "string"
        +}
      • addedInput schema / properties / link / properties / work / pattern
        Added value: +"^\\s*[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}\\s*$"
      • addedOutput schema / properties / entities / items / properties / status
        Added value: +{
        +  "description": "Release status (e.g. Official or Bootleg). Omitted for other entity types or when absent.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_link`: No link MBID was provided, more than one was provided, or the link MBID is malformed (HTTP 400). `entity_not_found`: The link MBID is well-formed but no such parent entity exists (HTTP 404). Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_link`: A parent key is unknown, aliases collide, not exactly one nonempty parent is supplied, or the MBID/parent combination is invalid. `entity_not_found`: The link MBID is well-formed but no such parent entity exists (HTTP 404). Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / linkType / description
        Previous value: -"The parent link type used (artist, label, release-group, recording, work, or area)."New value: +"The parent link type used (artist, label, release-group, release, recording, work, or area)."
    • Changedmusicbrainz_get_artist3 fields changed
      • changedInput schema / properties / mbid / description
        Previous value: -"Artist MBID (36-character UUID)."New value: +"Artist MBID (hyphenated hexadecimal UUID; surrounding whitespace and uppercase accepted)."
      • addedInput schema / properties / mbid / pattern
        Added value: +"^\\s*[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}\\s*$"
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_mbid`: The MBID is malformed or the all-zeros sentinel (MusicBrainz returns HTTP 400). `entity_not_found`: The MBID is well-formed but no artist exists with it (MusicBrainz returns HTTP 404). Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_mbid`: The MBID is malformed or the all-zeros sentinel (rejected before fetch), or MusicBrainz rejects it with HTTP 400. `entity_not_found`: The MBID is well-formed but no artist exists with it (MusicBrainz returns HTTP 404). Other values are possible when a failure originates below the handler."
    • Changedmusicbrainz_get_cover_art3 fields changed
      • changedInput schema / properties / mbid / description
        Previous value: -"Release or release-group MBID (36-character UUID)."New value: +"Release or release-group MBID (hyphenated hexadecimal UUID; surrounding whitespace and uppercase accepted)."
      • addedInput schema / properties / mbid / pattern
        Added value: +"^\\s*[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}\\s*$"
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_mbid`: The MBID is malformed or the all-zeros sentinel — a value MusicBrainz rejects outright (HTTP 400). `entity_not_found`: The MBID is well-formed but no entity of the given entity_type exists with it (the archive returns 404 and the MusicBrainz check of the MBID returns 404). Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_mbid`: The MBID is malformed or the all-zeros sentinel (rejected before fetch), or an upstream rejects it with HTTP 400. `entity_not_found`: The MBID is well-formed but no entity of the given entity_type exists with it (the archive returns 404 and the MusicBrainz check of the MBID returns 404). Other values are possible when a failure originates below the handler."
    • Changedmusicbrainz_get_label3 fields changed
      • changedInput schema / properties / mbid / description
        Previous value: -"Label MBID (36-character UUID)."New value: +"Label MBID (hyphenated hexadecimal UUID; surrounding whitespace and uppercase accepted)."
      • addedInput schema / properties / mbid / pattern
        Added value: +"^\\s*[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}\\s*$"
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_mbid`: The MBID is malformed or the all-zeros sentinel (MusicBrainz returns HTTP 400). `entity_not_found`: The MBID is well-formed but no label exists with it (MusicBrainz returns HTTP 404). Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_mbid`: The MBID is malformed or the all-zeros sentinel (rejected before fetch), or MusicBrainz rejects it with HTTP 400. `entity_not_found`: The MBID is well-formed but no label exists with it (MusicBrainz returns HTTP 404). Other values are possible when a failure originates below the handler."
    • Changedmusicbrainz_get_recording3 fields changed
      • changedInput schema / properties / mbid / description
        Previous value: -"Recording MBID (36-character UUID)."New value: +"Recording MBID (hyphenated hexadecimal UUID; surrounding whitespace and uppercase accepted)."
      • addedInput schema / properties / mbid / pattern
        Added value: +"^\\s*[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}\\s*$"
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_mbid`: The MBID is malformed or the all-zeros sentinel (MusicBrainz returns HTTP 400). `entity_not_found`: The MBID is well-formed but no recording exists with it (MusicBrainz returns HTTP 404). Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_mbid`: The MBID is malformed or the all-zeros sentinel (rejected before fetch), or MusicBrainz rejects it with HTTP 400. `entity_not_found`: The MBID is well-formed but no recording exists with it (MusicBrainz returns HTTP 404). Other values are possible when a failure originates below the handler."
    • Changedmusicbrainz_get_release3 fields changed
      • changedInput schema / properties / mbid / description
        Previous value: -"Release MBID (36-character UUID)."New value: +"Release MBID (hyphenated hexadecimal UUID; surrounding whitespace and uppercase accepted)."
      • addedInput schema / properties / mbid / pattern
        Added value: +"^\\s*[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}\\s*$"
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_mbid`: The MBID is malformed or the all-zeros sentinel (MusicBrainz returns HTTP 400). `entity_not_found`: The MBID is well-formed but no release exists with it (MusicBrainz returns HTTP 404). Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_mbid`: The MBID is malformed or the all-zeros sentinel (rejected before fetch), or MusicBrainz rejects it with HTTP 400. `entity_not_found`: The MBID is well-formed but no release exists with it (MusicBrainz returns HTTP 404). Other values are possible when a failure originates below the handler."
    • Changedmusicbrainz_get_release_group3 fields changed
      • changedInput schema / properties / mbid / description
        Previous value: -"Release-group MBID (36-character UUID)."New value: +"Release-group MBID (hyphenated hexadecimal UUID; surrounding whitespace and uppercase accepted)."
      • addedInput schema / properties / mbid / pattern
        Added value: +"^\\s*[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}\\s*$"
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_mbid`: The MBID is malformed or the all-zeros sentinel (MusicBrainz returns HTTP 400). `entity_not_found`: The MBID is well-formed but no release-group exists with it (MusicBrainz returns HTTP 404). Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_mbid`: The MBID is malformed or the all-zeros sentinel (rejected before fetch), or MusicBrainz rejects it with HTTP 400. `entity_not_found`: The MBID is well-formed but no release-group exists with it (MusicBrainz returns HTTP 404). Other values are possible when a failure originates below the handler."
    • Changedmusicbrainz_get_work9 fields changed
      • changedInput schema / properties / mbid / description
        Previous value: -"Work MBID (36-character UUID)."New value: +"Work MBID (hyphenated hexadecimal UUID; surrounding whitespace and uppercase accepted)."
      • addedInput schema / properties / mbid / pattern
        Added value: +"^\\s*[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}\\s*$"
      • addedOutput schema / properties / cap
        Added value: +{
        +  "description": "Server-side recording relationship cap, when truncated.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_mbid`: The MBID is malformed or the all-zeros sentinel (MusicBrainz returns HTTP 400). `entity_not_found`: The MBID is well-formed but no work exists with it (MusicBrainz returns HTTP 404). Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_mbid`: The MBID is malformed or the all-zeros sentinel (rejected before fetch), or MusicBrainz rejects it with HTTP 400. `entity_not_found`: The MBID is well-formed but no work exists with it (MusicBrainz returns HTTP 404). Other values are possible when a failure originates below the handler."
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Recording enumeration and relationship-detail retrieval guidance when truncated.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / relationships / description
        Previous value: -"Writer/composer/lyricist relationships and recording-rels — the complete set (may be empty)."New value: +"All non-recording relationships and the first 25 recording relationships in upstream order (may be empty)."
      • addedOutput schema / properties / shown
        Added value: +{
        +  "description": "Number of recording relationships returned when truncated.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / totalCount
        Added value: +{
        +  "description": "Exact number of recording relationships before the server-side slice. Absent when relationships are disabled.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "True only when recording relationships were omitted beyond 25.",
        +  "type": "boolean"
        +}
    • Changedmusicbrainz_search_entities1 field changed
      • addedOutput schema / properties / results / items / properties / status
        Added value: +{
        +  "description": "Release status (e.g. Official or Bootleg). Omitted for other entity types or when absent.",
        +  "type": "string"
        +}
  2. 4 tool updates
    • Changedmusicbrainz_get_cover_art3 fields changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_mbid`: The MBID is malformed or the all-zeros sentinel (the upstream returns HTTP 400). Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_mbid`: The MBID is malformed or the all-zeros sentinel — a value MusicBrainz rejects outright (HTTP 400). `entity_not_found`: The MBID is well-formed but no entity of the given entity_type exists with it (the archive returns 404 and the MusicBrainz check of the MBID returns 404). Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "invalid_mbid"
        -]New value: +[
        +  "invalid_mbid",
        +  "entity_not_found"
        +]
      • changedOutput schema / properties / notice / description
        Previous value: -"Notice when no art exists for the entity."New value: +"Present when the entity has no art: states that no images exist, or — when the MBID could not be checked against MusicBrainz — that its existence is unconfirmed."
    • Changedmusicbrainz_get_release_group3 fields changed
      • changedOutput schema / anyOf
        Previous value: -[
        -  {
        -    "not": {
        -      "required": [
        -        "error"
        -      ]
        -    },
        -    "required": [
        -      "mbid",
        -      "title",
        -      "artistCredit",
        -      "artistCreditString",
        -      "releases",
        -      "tags",
        -      "coverArt"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "error"
        -    ]
        -  }
        -]New value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "mbid",
        +      "title",
        +      "artistCredit",
        +      "artistCreditString",
        +      "releases",
        +      "tags"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • changedOutput schema / properties / coverArt / description
        Previous value: -"Whether cover art exists (availability stub from WS/2)."New value: +"Cover-art availability from the Cover Art Archive: the images of the release-group's representative release, the same art musicbrainz_get_cover_art returns (exists: false with count 0 when the archive has none). Omitted when the archive lookup could not complete — the notice says so."
      • changedOutput schema / properties / notice / description
        Previous value: -"How to fetch the complete list of editions when truncated."New value: +"Present when the releases list was capped (how to fetch the complete set of editions) and/or when cover-art availability could not be checked (why coverArt is omitted)."
    • Changedmusicbrainz_lookup_identifier3 fields changed
      • changedInput schema / properties / value / description
        Previous value: -"The identifier value. ISRC e.g. \"USRC17607839\"; ISWC e.g. \"T-010.140.236-1\"; barcode e.g. \"075678164125\"."New value: +"The identifier value. ISRC e.g. \"USRC17607839\"; ISWC e.g. \"T-010.140.236-1\"; barcode = the UPC/EAN digits, e.g. \"075678164125\" (spaces and hyphens are ignored; any other character, including a wildcard, is rejected)."
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `identifier_not_found`: The identifier is well-formed but resolves to zero entities. `invalid_identifier`: The ISRC/ISWC is malformed (the dedicated endpoint returns HTTP 400). Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `identifier_not_found`: The identifier is well-formed but resolves to zero entities. `invalid_identifier`: The ISRC/ISWC is malformed (the dedicated endpoint returns HTTP 400), or the barcode contains anything other than digits once spaces and hyphens are removed. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / result / oneOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "description": "ISRC result arm: recordings carrying the ISRC.",
        -    "properties": {
        -      "identifier": {
        -        "description": "The looked-up identifier value.",
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "recordings",
        -        "description": "ISRC resolved to recordings.",
        -        "type": "string"
        -      },
        -      "recordings": {
        -        "description": "Recordings carrying this ISRC.",
        -        "items": {
        -          "additionalProperties": false,
        -          "description": "A recording carrying the looked-up ISRC.",
        -          "properties": {
        -            "artistCredit": {
        -              "description": "Credited artist string; falls back to \"Unknown artist\" when none is recorded.",
        -              "type": "string"
        -            },
        -            "length": {
        -              "description": "Recording length as m:ss. Omitted when unknown.",
        -              "type": "string"
        -            },
        -            "mbid": {
        -              "description": "Recording MBID — chain to musicbrainz_get_recording.",
        -              "type": "string"
        -            },
        -            "title": {
        -              "description": "Recording title.",
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "mbid",
        -            "title",
        -            "artistCredit"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identifier",
        -      "recordings"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "description": "ISWC result arm: works carrying the ISWC.",
        -    "properties": {
        -      "identifier": {
        -        "description": "The looked-up identifier value.",
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "works",
        -        "description": "ISWC resolved to works.",
        -        "type": "string"
        -      },
        -      "works": {
        -        "description": "Works carrying this ISWC.",
        -        "items": {
        -          "additionalProperties": false,
        -          "description": "A work carrying the looked-up ISWC.",
        -          "properties": {
        -            "mbid": {
        -              "description": "Work MBID — chain to musicbrainz_get_work.",
        -              "type": "string"
        -            },
        -            "title": {
        -              "description": "Work title.",
        -              "type": "string"
        -            },
        -            "type": {
        -              "description": "Work type. Omitted when absent.",
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "mbid",
        -            "title"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identifier",
        -      "works"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "description": "Barcode result arm: releases carrying the barcode.",
        -    "properties": {
        -      "identifier": {
        -        "description": "The looked-up identifier value.",
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "releases",
        -        "description": "Barcode resolved to releases.",
        -        "type": "string"
        -      },
        -      "releases": {
        -        "description": "Releases carrying this barcode (ranked).",
        -        "items": {
        -          "additionalProperties": false,
        -          "description": "A release carrying the looked-up barcode.",
        -          "properties": {
        -            "artistCredit": {
        -              "description": "Credited artist string.",
        -              "type": "string"
        -            },
        -            "country": {
        -              "description": "Release country code. Omitted when absent.",
        -              "type": "string"
        -            },
        -            "date": {
        -              "description": "Release date. Omitted when absent.",
        -              "type": "string"
        -            },
        -            "mbid": {
        -              "description": "Release MBID — chain to musicbrainz_get_release.",
        -              "type": "string"
        -            },
        -            "score": {
        -              "description": "Lucene relevance score, 0–100 (barcode is a search filter; exact = 100).",
        -              "type": "number"
        -            },
        -            "title": {
        -              "description": "Release title.",
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "mbid",
        -            "title",
        -            "artistCredit",
        -            "score"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identifier",
        -      "releases"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "description": "ISRC result arm: recordings carrying the ISRC.",
        +    "properties": {
        +      "identifier": {
        +        "description": "The looked-up identifier value.",
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "recordings",
        +        "description": "ISRC resolved to recordings.",
        +        "type": "string"
        +      },
        +      "recordings": {
        +        "description": "Recordings carrying this ISRC.",
        +        "items": {
        +          "additionalProperties": false,
        +          "description": "A recording carrying the looked-up ISRC.",
        +          "properties": {
        +            "artistCredit": {
        +              "description": "Credited artist string; falls back to \"Unknown artist\" when none is recorded.",
        +              "type": "string"
        +            },
        +            "length": {
        +              "description": "Recording length as m:ss. Omitted when unknown.",
        +              "type": "string"
        +            },
        +            "mbid": {
        +              "description": "Recording MBID — chain to musicbrainz_get_recording.",
        +              "type": "string"
        +            },
        +            "title": {
        +              "description": "Recording title.",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "mbid",
        +            "title",
        +            "artistCredit"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "identifier",
        +      "recordings"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "description": "ISWC result arm: works carrying the ISWC.",
        +    "properties": {
        +      "identifier": {
        +        "description": "The looked-up identifier value.",
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "works",
        +        "description": "ISWC resolved to works.",
        +        "type": "string"
        +      },
        +      "works": {
        +        "description": "Works carrying this ISWC.",
        +        "items": {
        +          "additionalProperties": false,
        +          "description": "A work carrying the looked-up ISWC.",
        +          "properties": {
        +            "mbid": {
        +              "description": "Work MBID — chain to musicbrainz_get_work.",
        +              "type": "string"
        +            },
        +            "title": {
        +              "description": "Work title.",
        +              "type": "string"
        +            },
        +            "type": {
        +              "description": "Work type. Omitted when absent.",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "mbid",
        +            "title"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "identifier",
        +      "works"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "description": "Barcode result arm: releases carrying the barcode.",
        +    "properties": {
        +      "identifier": {
        +        "description": "The barcode digits that were searched (spaces and hyphens removed).",
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "releases",
        +        "description": "Barcode resolved to releases.",
        +        "type": "string"
        +      },
        +      "releases": {
        +        "description": "Releases carrying this barcode (ranked).",
        +        "items": {
        +          "additionalProperties": false,
        +          "description": "A release carrying the looked-up barcode.",
        +          "properties": {
        +            "artistCredit": {
        +              "description": "Credited artist string.",
        +              "type": "string"
        +            },
        +            "country": {
        +              "description": "Release country code. Omitted when absent.",
        +              "type": "string"
        +            },
        +            "date": {
        +              "description": "Release date. Omitted when absent.",
        +              "type": "string"
        +            },
        +            "mbid": {
        +              "description": "Release MBID — chain to musicbrainz_get_release.",
        +              "type": "string"
        +            },
        +            "score": {
        +              "description": "Lucene relevance score, 0–100 (barcode is a search filter; exact = 100).",
        +              "type": "number"
        +            },
        +            "title": {
        +              "description": "Release title.",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "mbid",
        +            "title",
        +            "artistCredit",
        +            "score"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "identifier",
        +      "releases"
        +    ],
        +    "type": "object"
        +  }
        +]
    • Changedmusicbrainz_search_entities3 fields changed
      • changedInput schema / properties / query / description
        Previous value: -"Lucene query string. Plain text matches names/titles; field scoping (e.g. `artist:`, `country:`, `tag:`) is supported."New value: +"Lucene query string; must contain non-whitespace text. Plain text matches names/titles; field scoping (e.g. `artist:`, `country:`, `tag:`) is supported. Sent to MusicBrainz exactly as given."
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode."New value: +"Machine-readable failure mode. Declared by this tool: `blank_query`: The query contains only whitespace (it is blank after trimming). Other values are possible when a failure originates below the handler."
      • addedOutput schema / properties / error / properties / data / properties / reason / examples
        Added value: +[
        +  "blank_query"
        +]
  3. 10 tool updates
    • Changedmusicbrainz_browse_entities6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "targetType",
        +      "linkType",
        +      "linkMbid",
        +      "entities",
        +      "offset",
        +      "totalCount"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `invalid_link`: No link MBID was provided, more than one was provided, or the link MBID is malformed (HTTP 400). `entity_not_found`: The link MBID is well-formed but no such parent entity exists (HTTP 404). Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "invalid_link",
        +            "entity_not_found"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "targetType",
        -  "linkType",
        -  "linkMbid",
        -  "entities",
        -  "offset",
        -  "totalCount"
        -]
    • Changedmusicbrainz_get_artist6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "mbid",
        +      "name",
        +      "aliases",
        +      "tags",
        +      "releaseGroups",
        +      "relationships",
        +      "externalLinks"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `invalid_mbid`: The MBID is malformed or the all-zeros sentinel (MusicBrainz returns HTTP 400). `entity_not_found`: The MBID is well-formed but no artist exists with it (MusicBrainz returns HTTP 404). Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "invalid_mbid",
        +            "entity_not_found"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "mbid",
        -  "name",
        -  "aliases",
        -  "tags",
        -  "releaseGroups",
        -  "relationships",
        -  "externalLinks"
        -]
    • Changedmusicbrainz_get_cover_art6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "mbid",
        +      "entityType",
        +      "images",
        +      "hasArt"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `invalid_mbid`: The MBID is malformed or the all-zeros sentinel (the upstream returns HTTP 400). Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "invalid_mbid"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "mbid",
        -  "entityType",
        -  "images",
        -  "hasArt"
        -]
    • Changedmusicbrainz_get_label6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "mbid",
        +      "name",
        +      "aliases",
        +      "tags",
        +      "externalLinks"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `invalid_mbid`: The MBID is malformed or the all-zeros sentinel (MusicBrainz returns HTTP 400). `entity_not_found`: The MBID is well-formed but no label exists with it (MusicBrainz returns HTTP 404). Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "invalid_mbid",
        +            "entity_not_found"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "mbid",
        -  "name",
        -  "aliases",
        -  "tags",
        -  "externalLinks"
        -]
    • Changedmusicbrainz_get_recording6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "mbid",
        +      "title",
        +      "artistCredit",
        +      "artistCreditString",
        +      "isrcs",
        +      "releases",
        +      "relationships",
        +      "externalLinks"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `invalid_mbid`: The MBID is malformed or the all-zeros sentinel (MusicBrainz returns HTTP 400). `entity_not_found`: The MBID is well-formed but no recording exists with it (MusicBrainz returns HTTP 404). Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "invalid_mbid",
        +            "entity_not_found"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "mbid",
        -  "title",
        -  "artistCredit",
        -  "artistCreditString",
        -  "isrcs",
        -  "releases",
        -  "relationships",
        -  "externalLinks"
        -]
    • Changedmusicbrainz_get_release6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "mbid",
        +      "title",
        +      "artistCredit",
        +      "artistCreditString",
        +      "labelInfo",
        +      "media",
        +      "coverArt"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `invalid_mbid`: The MBID is malformed or the all-zeros sentinel (MusicBrainz returns HTTP 400). `entity_not_found`: The MBID is well-formed but no release exists with it (MusicBrainz returns HTTP 404). Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "invalid_mbid",
        +            "entity_not_found"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "mbid",
        -  "title",
        -  "artistCredit",
        -  "artistCreditString",
        -  "labelInfo",
        -  "media",
        -  "coverArt"
        -]
    • Changedmusicbrainz_get_release_group6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "mbid",
        +      "title",
        +      "artistCredit",
        +      "artistCreditString",
        +      "releases",
        +      "tags",
        +      "coverArt"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `invalid_mbid`: The MBID is malformed or the all-zeros sentinel (MusicBrainz returns HTTP 400). `entity_not_found`: The MBID is well-formed but no release-group exists with it (MusicBrainz returns HTTP 404). Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "invalid_mbid",
        +            "entity_not_found"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "mbid",
        -  "title",
        -  "artistCredit",
        -  "artistCreditString",
        -  "releases",
        -  "tags",
        -  "coverArt"
        -]
    • Changedmusicbrainz_get_work6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "mbid",
        +      "title",
        +      "languages",
        +      "iswcs",
        +      "aliases",
        +      "tags",
        +      "relationships",
        +      "externalLinks"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `invalid_mbid`: The MBID is malformed or the all-zeros sentinel (MusicBrainz returns HTTP 400). `entity_not_found`: The MBID is well-formed but no work exists with it (MusicBrainz returns HTTP 404). Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "invalid_mbid",
        +            "entity_not_found"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "mbid",
        -  "title",
        -  "languages",
        -  "iswcs",
        -  "aliases",
        -  "tags",
        -  "relationships",
        -  "externalLinks"
        -]
    • Changedmusicbrainz_lookup_identifier6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "result"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `identifier_not_found`: The identifier is well-formed but resolves to zero entities. `invalid_identifier`: The ISRC/ISWC is malformed (the dedicated endpoint returns HTTP 400). Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "identifier_not_found",
        +            "invalid_identifier"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
    • Changedmusicbrainz_search_entities6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "entityType",
        +      "results",
        +      "effectiveQuery",
        +      "totalCount"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode.",
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "entityType",
        -  "results",
        -  "effectiveQuery",
        -  "totalCount"
        -]
  4. 3 tool updates
    • Changedmusicbrainz_get_release_group5 fields changed
      • addedOutput schema / properties / cap
        Added value: +{
        +  "description": "The one-page cap that was applied. Absent when not truncated.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "How to fetch the complete list of editions when truncated.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / releases / description
        Previous value: -"Releases (editions) in this group (may be empty)."New value: +"Releases (editions) in this group (one page; may be empty or capped — use browse for all)."
      • addedOutput schema / properties / shown
        Added value: +{
        +  "description": "Number of releases returned. Absent when not truncated.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "True when the releases list hit the one-page cap and more editions exist. Absent when the full set fit in one page.",
        +  "type": "boolean"
        +}
    • Changedmusicbrainz_get_work5 fields changed
      • removedOutput schema / properties / cap
        Removed value: -{
        -  "description": "The one-page cap that was applied. Absent when not truncated.",
        -  "type": "number"
        -}
      • removedOutput schema / properties / notice
        Removed value: -{
        -  "description": "How to fetch the complete list of recordings of this work when truncated.",
        -  "type": "string"
        -}
      • changedOutput schema / properties / relationships / description
        Previous value: -"Writer/composer/lyricist relationships and recording-rels (may be empty; recording-rels capped at one page)."New value: +"Writer/composer/lyricist relationships and recording-rels — the complete set (may be empty)."
      • removedOutput schema / properties / shown
        Removed value: -{
        -  "description": "Number of recording relationships returned. Absent when not truncated.",
        -  "type": "number"
        -}
      • removedOutput schema / properties / truncated
        Removed value: -{
        -  "description": "True when the recording relationships hit the one-page cap. Absent when the full set fit in one page.",
        -  "type": "boolean"
        -}
    • Changedmusicbrainz_lookup_identifier2 fields changed
      • changedInput schema / properties / value / description
        Previous value: -"The identifier value. ISRC e.g. \"USRC17607839\"; ISWC e.g. \"T-345246800-1\"; barcode e.g. \"075678164125\"."New value: +"The identifier value. ISRC e.g. \"USRC17607839\"; ISWC e.g. \"T-010.140.236-1\"; barcode e.g. \"075678164125\"."
      • changedOutput schema / properties / result / oneOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "description": "ISRC result arm: recordings carrying the ISRC.",
        -    "properties": {
        -      "identifier": {
        -        "description": "The looked-up identifier value.",
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "recordings",
        -        "description": "ISRC resolved to recordings.",
        -        "type": "string"
        -      },
        -      "recordings": {
        -        "description": "Recordings carrying this ISRC.",
        -        "items": {
        -          "additionalProperties": false,
        -          "description": "A recording carrying the looked-up ISRC.",
        -          "properties": {
        -            "artistCredit": {
        -              "description": "Credited artist string.",
        -              "type": "string"
        -            },
        -            "length": {
        -              "description": "Recording length as m:ss. Omitted when unknown.",
        -              "type": "string"
        -            },
        -            "mbid": {
        -              "description": "Recording MBID — chain to musicbrainz_get_recording.",
        -              "type": "string"
        -            },
        -            "title": {
        -              "description": "Recording title.",
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "mbid",
        -            "title",
        -            "artistCredit"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identifier",
        -      "recordings"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "description": "ISWC result arm: works carrying the ISWC.",
        -    "properties": {
        -      "identifier": {
        -        "description": "The looked-up identifier value.",
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "works",
        -        "description": "ISWC resolved to works.",
        -        "type": "string"
        -      },
        -      "works": {
        -        "description": "Works carrying this ISWC.",
        -        "items": {
        -          "additionalProperties": false,
        -          "description": "A work carrying the looked-up ISWC.",
        -          "properties": {
        -            "mbid": {
        -              "description": "Work MBID — chain to musicbrainz_get_work.",
        -              "type": "string"
        -            },
        -            "title": {
        -              "description": "Work title.",
        -              "type": "string"
        -            },
        -            "type": {
        -              "description": "Work type. Omitted when absent.",
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "mbid",
        -            "title"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identifier",
        -      "works"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "description": "Barcode result arm: releases carrying the barcode.",
        -    "properties": {
        -      "identifier": {
        -        "description": "The looked-up identifier value.",
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "releases",
        -        "description": "Barcode resolved to releases.",
        -        "type": "string"
        -      },
        -      "releases": {
        -        "description": "Releases carrying this barcode (ranked).",
        -        "items": {
        -          "additionalProperties": false,
        -          "description": "A release carrying the looked-up barcode.",
        -          "properties": {
        -            "artistCredit": {
        -              "description": "Credited artist string.",
        -              "type": "string"
        -            },
        -            "country": {
        -              "description": "Release country code. Omitted when absent.",
        -              "type": "string"
        -            },
        -            "date": {
        -              "description": "Release date. Omitted when absent.",
        -              "type": "string"
        -            },
        -            "mbid": {
        -              "description": "Release MBID — chain to musicbrainz_get_release.",
        -              "type": "string"
        -            },
        -            "score": {
        -              "description": "Lucene relevance score, 0–100 (barcode is a search filter; exact = 100).",
        -              "type": "number"
        -            },
        -            "title": {
        -              "description": "Release title.",
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "mbid",
        -            "title",
        -            "artistCredit",
        -            "score"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identifier",
        -      "releases"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "description": "ISRC result arm: recordings carrying the ISRC.",
        +    "properties": {
        +      "identifier": {
        +        "description": "The looked-up identifier value.",
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "recordings",
        +        "description": "ISRC resolved to recordings.",
        +        "type": "string"
        +      },
        +      "recordings": {
        +        "description": "Recordings carrying this ISRC.",
        +        "items": {
        +          "additionalProperties": false,
        +          "description": "A recording carrying the looked-up ISRC.",
        +          "properties": {
        +            "artistCredit": {
        +              "description": "Credited artist string; falls back to \"Unknown artist\" when none is recorded.",
        +              "type": "string"
        +            },
        +            "length": {
        +              "description": "Recording length as m:ss. Omitted when unknown.",
        +              "type": "string"
        +            },
        +            "mbid": {
        +              "description": "Recording MBID — chain to musicbrainz_get_recording.",
        +              "type": "string"
        +            },
        +            "title": {
        +              "description": "Recording title.",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "mbid",
        +            "title",
        +            "artistCredit"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "identifier",
        +      "recordings"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "description": "ISWC result arm: works carrying the ISWC.",
        +    "properties": {
        +      "identifier": {
        +        "description": "The looked-up identifier value.",
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "works",
        +        "description": "ISWC resolved to works.",
        +        "type": "string"
        +      },
        +      "works": {
        +        "description": "Works carrying this ISWC.",
        +        "items": {
        +          "additionalProperties": false,
        +          "description": "A work carrying the looked-up ISWC.",
        +          "properties": {
        +            "mbid": {
        +              "description": "Work MBID — chain to musicbrainz_get_work.",
        +              "type": "string"
        +            },
        +            "title": {
        +              "description": "Work title.",
        +              "type": "string"
        +            },
        +            "type": {
        +              "description": "Work type. Omitted when absent.",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "mbid",
        +            "title"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "identifier",
        +      "works"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "description": "Barcode result arm: releases carrying the barcode.",
        +    "properties": {
        +      "identifier": {
        +        "description": "The looked-up identifier value.",
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "releases",
        +        "description": "Barcode resolved to releases.",
        +        "type": "string"
        +      },
        +      "releases": {
        +        "description": "Releases carrying this barcode (ranked).",
        +        "items": {
        +          "additionalProperties": false,
        +          "description": "A release carrying the looked-up barcode.",
        +          "properties": {
        +            "artistCredit": {
        +              "description": "Credited artist string.",
        +              "type": "string"
        +            },
        +            "country": {
        +              "description": "Release country code. Omitted when absent.",
        +              "type": "string"
        +            },
        +            "date": {
        +              "description": "Release date. Omitted when absent.",
        +              "type": "string"
        +            },
        +            "mbid": {
        +              "description": "Release MBID — chain to musicbrainz_get_release.",
        +              "type": "string"
        +            },
        +            "score": {
        +              "description": "Lucene relevance score, 0–100 (barcode is a search filter; exact = 100).",
        +              "type": "number"
        +            },
        +            "title": {
        +              "description": "Release title.",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "mbid",
        +            "title",
        +            "artistCredit",
        +            "score"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "identifier",
        +      "releases"
        +    ],
        +    "type": "object"
        +  }
        +]
  5. 10 tool updates
    • First observedmusicbrainz_browse_entities
    • First observedmusicbrainz_get_artist
    • First observedmusicbrainz_get_cover_art
    • First observedmusicbrainz_get_label
    • First observedmusicbrainz_get_recording
    • First observedmusicbrainz_get_release
    • First observedmusicbrainz_get_release_group
    • First observedmusicbrainz_get_work
    • First observedmusicbrainz_lookup_identifier
    • First observedmusicbrainz_search_entities

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables searching music artists and releases, and retrieving artist biographies, discographies, release track listings, credits, and metadata through the MusicBrainz API.
    14 npm
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI assistants to query the MusicBrainz music database for artists, albums, recordings, and labels. It provides tools for advanced searches, detailed metadata retrieval, and accessing cover art information.
    17
    13
    GPL 3.0
  • A
    license
    A
    quality
    A
    maintenance
    An MCP server that provides live access to MusicBrainz metadata and Cover Art Archive images, with optional OAuth-based submission of tags, ratings, and collection edits.
    9
    638 npm
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables music search, metadata retrieval, local audio analysis (tempo, key, energy), recommendations, song recognition, and classical work resolution via Spotify, Last.fm, AudD, MusicBrainz, and Songkick APIs.
    -
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.