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
100.0% over the last 24 hours
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
cyanheads/musicbrainz-mcp-server
GitHub Stars
2
Server Listing
musicbrainz-mcp-server
ChatGPT
–
Claude
–

TDQS

A4.2/5.0

Scored across 10 tools

Disambiguation4/5

The six get_* tools each target a clearly distinct entity type, and search vs lookup_identifier are cleanly separated (name resolution vs deterministic ID resolution). The main friction is browse_entities, which overlaps with the get_* tools for linked entity sets; the descriptions explicitly delimit this (browse = complete linked sets, get = embedded single page), but the many cross-references suggest an agent could still hesitate between the two.

Naming Consistency5/5

Every tool follows a strict musicbrainz_verb_noun pattern with snake_case throughout: get_artist, get_release, browse_entities, search_entities, lookup_identifier. Verb choice is predictable and the entity suffix matches the resource returned.

Tool Count5/5

Ten tools is well within the ideal range and each earns its place: one get per core entity, one browse, one search, one identifier resolver, one cover-art tool. No redundant or filler tools.

Completeness4/5

The core discovery chain (search/identifier → artist → release-group → release → recording → work, plus label and cover art) is fully covered with browse for linked sets. Minor gaps: get_artist returns areaId to chain into browse link.area, yet there is no get_area to resolve area details, and entity types like event, place, series, and genre are absent from both get and search — periphery, but a few dead ends remain.

Available Tools

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

Paginate entities linked to one parent MBID. Accepted parents by target: artist → area, recording, release, release-group, work; label → area, release; release-group → artist, release; release → area, artist, label, recording, release-group, track_artist; recording → artist, release, work; work → artist. track_artist enumerates releases crediting an artist on tracks but not at release level. 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 exact filtered upstream entity total. Optional type/status filters apply only on supported parent pairs; preserve applied filters on continuation. Release rows carry status, other entity subtypes use type; release-groups include secondaryTypes and recordings include firstReleaseDate when available.

NameRequiredDescriptionDefault
linkYesExactly one parent MBID. The valid key depends on target_type (see the description).
typeNoPipe-separated release types: album, single, ep, broadcast, other, audio drama, audiobook, compilation, demo, dj-mix, field recording, interview, live, mixtape/street, remix, soundtrack, spokenword. Supported for release-group by artist and release by artist/label/recording/track_artist. Primary types union; primary and secondary categories intersect; release-group by artist requires all secondary types. Tokens are trimmed/lowercased; blank means absent.
limitNoPositive integer page size (default 25); values above 100 are clamped to 100 with a notice. With MUSICBRAINZ_CLAMP_OVERSIZED_LIMITS=off, maximum 100 is enforced.
offsetNoResult offset for deep pagination (0-based).
statusNoPipe-separated statuses for release by artist/label/recording/release-group/track_artist: official, promotion, bootleg, pseudo-release, withdrawn, cancelled. Tokens are trimmed/lowercased and unioned; blank means absent.
target_typeYesThe entity type to enumerate (the children).

Output Schema

NameRequiredDescription
capNoThe page size that was applied. Absent when not truncated.
typeNoCanonical applied pipe-separated type filter; preserve on continuation.
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.
statusNoCanonical applied pipe-separated status filter; preserve on continuation.
entitiesNoThis page of linked entities, in upstream order.
linkMbidNoThe parent MBID that was browsed.
linkTypeNoThe parent link type used (artist, track_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.8/5.0
Behavior5/5

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

Beyond the readOnly/idempotent/openWorld annotations, the description discloses deep-pagination behavior ('offset pages to any depth'), what totalCount actually counts, that type/status filters apply only on supported parent pairs, and that applied filters must be preserved on continuation. It also flags a semantic trap: recording browse returns identities, not performance dates or ordered tracks.

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?

The scoping rule and the sibling routing come first, and nearly every clause carries distinct information. It is, however, a single very dense paragraph with several run-on sentences that would read better as discrete bullets, which costs some clarity.

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 six-parameter tool with a nested union-style link object and an output schema, the description covers the operation, the valid parent pairs, filter applicability, pagination, and per-target return nuances. Nothing an agent needs in order to call it correctly appears to be 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 nevertheless adds real meaning by explaining that track_artist restricts to releases crediting an artist at track but not release level, and that type/status filtering is conditional on the parent pair. It does not add much on limit/offset beyond what the schema already documents.

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?

The opening sentence names a specific verb and resource ('Paginate entities linked to one parent MBID') and is followed by an explicit parent→target acceptance map, so an agent can tell exactly what this tool enumerates. It also distinguishes itself from the get_* siblings by explaining that get_* embeds only one upstream page.

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?

Explicit when-to-use and when-not-to-use guidance is present: 'use this tool for the complete entity set' versus the embedded single page in get_* lookups, plus concrete redirections to musicbrainz_get_recording for work relationships and musicbrainz_get_release for ordered tracks. The constraint 'Provide exactly one valid parent link' closes the remaining selection ambiguity.

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 with areaId, birth/formation and death/dissolution areas, IPI/ISNI identifiers, aliases, tags/genres, release-groups, band-membership / collaboration relationships, and external links. Chain areaId into musicbrainz_browse_entities link.area. 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.

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

NameRequiredDescription
capNoThe one-page cap that was applied. Absent when not truncated.
areaNoAssociated area name. Omitted when unknown.
ipisNoIPI identifiers as exact strings in upstream order (may be empty).
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.
isnisNoISNI identifiers as exact strings in upstream order (may be empty).
shownNoNumber of release-groups returned. Absent when not truncated.
areaIdNoArea MBID for musicbrainz_browse_entities link.area. Omitted when unknown.
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.
endAreaNoDeath or dissolution area. Omitted when unknown.
lifeSpanNoBirth/death or formation/dissolution span. Omitted when unknown.
sortNameNoSortable name form. Omitted when absent.
beginAreaNoBirth or formation area. Omitted when unknown.
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.6/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 usefully adds the non-obvious truncation behavior (release-groups capped at one upstream page of 25, relationships uncapped). It does not mention rate limiting or how invalid MBIDs are reported, which keeps it from 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?

Front-loaded with the identity of the tool and its payload, then the chaining guidance. The field enumeration is long but each item tells the agent what is retrievable; the one minor redundancy is restating the release-group cap that also appears in the parameter schema.

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 shape need not be described, yet the description still previews payload contents, discloses pagination limits, and tells the agent how to escape those limits. Nothing needed to call this correctly for a 3-parameter read tool 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 adds real meaning beyond the schema by stating the asymmetric caps between the two boolean includes — a consequence the schema text alone only hints at. The mbid format itself is left entirely to the schema, which 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?

Opens with a specific verb+resource+key ("Artist profile by MBID") and then enumerates exactly what the payload contains (type, country, life span, identifiers, aliases, tags, release-groups, relationships, external links). This clearly separates it from sibling single-entity lookups like musicbrainz_get_label or musicbrainz_get_recording.

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?

Gives explicit routing instructions: chain areaId into musicbrainz_browse_entities link.area, and when the embedded release-group page is insufficient, call browse with target_type=release-group and link.artist. It names the alternative tool and the precise condition that selects it.

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. limit defaults to 25 and clamps above 100; offset defaults to 0. Pages retain archive order, totalCount counts all images, and hasArt describes the full archive even on an empty page. Follow the notice for the next offset. No art is a successful empty result; an unknown MBID fails with entity_not_found after a bounded MusicBrainz check. A release-group resolves to a representative release's art. URLs are linked, never rehosted; image copyright stays with rights holders.

NameRequiredDescriptionDefault
mbidYesRelease or release-group MBID (hyphenated hexadecimal UUID; surrounding whitespace and uppercase accepted).
limitNoMaximum images returned (default 25; values above 100 clamp to 100 with a notice).
offsetNoZero-based image offset in archive order (default 0).
entity_typeNoWhether the MBID is a release (default) or a release-group.release

Output Schema

NameRequiredDescription
capNoApplied image limit when more remain.
mbidNoThe MBID that was queried.
errorNoPresent when the call failed. Absent on success.
shownNoImages returned when more remain.
hasArtNoWhether any cover art exists for this entity.
imagesNoSelected cover-art images in archive order (empty for no art or an exhausted page).
noticeNoCombined limit clamp, continuation, exhausted page, or no-art/existence-unconfirmed guidance.
offsetNoEffective zero-based image offset in archive order.
truncatedNoTrue when images remain after this nonempty page.
entityTypeNoWhether the MBID was treated as a release or release-group.
totalCountNoExact image total before the limit and offset window.
representativeReleaseNoFor a release-group query, the release MBID whose art was returned. Omitted for direct release queries.

TDQS

A4.1/5.0
Behavior5/5

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

Annotations only declare readOnly/openWorld/idempotent, yet the description adds substantial behavioral context: limit clamps above 100, archive order is preserved per page, totalCount and hasArt describe the full archive even on an empty page, unknown MBID fails only after a bounded MusicBrainz check, and URLs are linked rather than rehosted. This is exactly the extra context the lower annotation bar asks for.

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 what the tool returns, then paging semantics, then error behavior and licensing. Every sentence carries content, though the middle stretch is dense and slightly terse, which borders on overloading rather than waste.

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 and annotations cover the safety profile, the description completes the picture with paging loop instructions, empty-vs-error distinction, release-group resolution, and licensing. An agent has everything needed to call it and to interpret the response 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 coverage is 100%, so baseline is 3; the schema already documents mbid, limit (including the clamp), offset, and entity_type. The description restates limit/offset defaults and adds the useful semantic that a release-group resolves to a representative release's art, but most parameter meaning is already carried by the schema.

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

Purpose4/5

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

The description uses a specific verb+resource ('Cover Art Archive images for a release or release-group MBID') and enumerates what it returns (front/back flags, image types, full-res and thumbnail URLs). It is clearly a distinct resource from the sibling get_release/get_release_group lookups, though it never names a sibling explicitly to route the agent.

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 supplies concrete operating context: paging via offset/limit with clamping, 'follow the notice for the next offset,' empty results are successful, unknown MBID yields entity_not_found, and release-group resolves to a representative release. It does not state when to prefer this over get_release or browse_entities, so there is no explicit exclusion guidance.

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 and areaId, IPI/ISNI identifiers, aliases, tags, ownership/imprint/distribution relationships, and external links (url-rels — Wikidata, Discogs, official site). Chain areaId into musicbrainz_browse_entities link.area. 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).

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

Output Schema

NameRequiredDescription
areaNoAssociated area name. Omitted when unknown.
ipisNoIPI identifiers as exact strings in upstream order (may be empty).
mbidNoLabel MBID.
nameNoLabel name.
tagsNoCommunity tags/genres (may be empty).
typeNoLabel type. Omitted when unknown.
errorNoPresent when the call failed. Absent on success.
isnisNoISNI identifiers as exact strings in upstream order (may be empty).
areaIdNoArea MBID for musicbrainz_browse_entities link.area. Omitted when unknown.
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).
relationshipsNoLabel ownership, imprint and distribution relationships in upstream order, uncapped (may be empty).
disambiguationNoShort qualifier. Omitted when absent.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint and idempotentHint, so the safety profile is covered. The description adds real behavioral context beyond them: it discloses the notable exclusion of releases and explains why (a major label can have tens of thousands), preventing an agent from expecting them inline and pointing to the correct alternative. It does not discuss rate limiting or error behaviour 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 field inventory, then the two alternative routing hints are clearly appended. It is dense with parenthetical examples (e.g. 'the LC number', 'Wikidata, Discogs, official site') but each adds disambiguation value, so little is wasted.

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?

For a single-parameter lookup with an output schema and full annotation coverage, the description supplies what the structured fields cannot: field inventory and the critical caveat about releases not being embedded. Nothing needed to invoke 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 parameter with 100% schema description coverage, and the schema already spells out the hyphenated UUID format, whitespace tolerance and required status. The description's 'Label by MBID' adds only the mild clarification that the MBID is a label's rather than another entity's, so the schema does the heavy lifting — baseline 3.

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

Purpose4/5

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

The description opens with 'Label by MBID' and then enumerates the exact fields returned (type, country, life span, label code, area, IPI/ISNI, aliases, tags, relationships, url-rels), so an agent knows precisely what entity and detail level this returns. It also implicitly distinguishes itself from the browse sibling by stating what it does not include. Only the explicit verb is missing (it relies on the name/title).

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 concrete routing instructions: chain areaId into musicbrainz_browse_entities (link.area), and use musicbrainz_browse_entities with target_type=release and link.label to enumerate releases. It does not cover when to prefer this over musicbrainz_search_entities for finding a label in the first place, but the guidance present is specific and actionable.

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, one upstream page of release appearances with completeness metadata, work relationships, and performer/production credits with attributes and dates. Relationships are not capped. Enumerate releases with musicbrainz_browse_entities (target_type=release, link.recording, offset=0); embedded and browse order may differ. Browse recording by work enumerates recording entities; this tool supplies their work relationship details.

NameRequiredDescriptionDefault
mbidYesRecording MBID (hyphenated hexadecimal UUID; surrounding whitespace and uppercase accepted).
inc_relationshipsNoInclude performance/production, work and recording relationships (samples, mashups, music videos, DJ mixes), and external links.

Output 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.
releasesNoOne upstream page of release appearances (up to 25; may be empty). See releaseAppearanceSummary for completeness.
artistCreditNoCredited artists (may be empty).
externalLinksNoExternal resource links (url-rels) (may be empty).
relationshipsNoPerformance/production, work and recording relationships in upstream order, uncapped (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.
releaseAppearanceSummaryNoCompleteness evidence derived only from this recording lookup.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, open-world, so the description's job is to add context — and it does: relationships are uncapped, release appearances are limited to one upstream page with completeness metadata, and embedded vs browse ordering may differ. It stops short of explaining what the completeness metadata signifies or how large a 'page' is, so it earns a 4 rather than 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?

Three tightly packed sentences, front-loaded with the identity and payload, followed by the alternative route and the cross-tool clarification. Dense jargon ('one upstream page', 'completeness metadata') costs a little readability 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 an output schema present, the description need not explain return shapes, and it still names the main payload sections. It covers scope, alternatives, and pagination caveats; the remaining gaps (page size, what completeness metadata means) are minor for a read-only lookup.

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 both parameters are documented there, so the baseline of 3 applies. The description adds only a marginal gloss by noting that relationships (governed by inc_relationships) are not capped, and nothing about MBID formatting beyond what the pattern already says.

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 resource and verb ('Recording ... by MBID') and immediately disambiguates it from the abstract work, then enumerates exactly what the lookup returns (length, artist credits, ISRCs, release appearances, work relationships, credits). That is enough to tell it apart from sibling tools like musicbrainz_get_work without opening the 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?

Gives explicit routing: enumerate releases via musicbrainz_browse_entities with target_type=release and link.recording from offset=0, and clarifies the division of labour with browsing recordings by work ('browse ... enumerates recording entities; this tool supplies their work relationship details'). Both the alternative and the condition that selects it are named.

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 by MBID: ordered media with tracks, track-specific artist credits when supplied, lengths and recording MBIDs, label + catalog number, barcode, country, release date, packaging, text representation, external links, and a cover-art availability stub. media_offset (default 0) and media_limit (default 20, no maximum) select whole media after normalization; mediaTotal and trackTotal describe the full release. Follow the notice to retrieve remaining media. The release resource retains the complete raw tracklist. Track lengths are m:ss. For image URLs, call musicbrainz_get_cover_art.

NameRequiredDescriptionDefault
mbidYesRelease MBID (hyphenated hexadecimal UUID; surrounding whitespace and uppercase accepted).
media_limitNoMaximum whole media returned (default 20; no upper bound).
media_offsetNoZero-based medium offset in release order (default 0).

Output Schema

NameRequiredDescription
capNoRequested media limit when more remain.
dateNoRelease date. Omitted when absent.
mbidNoRelease MBID.
errorNoPresent when the call failed. Absent on success.
mediaNoSelected media in release order, with complete tracklists for each medium (may be empty).
shownNoNumber of media returned when more remain.
titleNoRelease title.
noticeNoNext media_offset, exhaustion, or no-media guidance.
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.
truncatedNoTrue when media remain after this nonempty page.
mediaTotalNoExact number of media in the whole normalized release.
trackTotalNoExact number of track occurrences in the whole normalized release, independent of upstream trackCount.
mediaOffsetNoEffective zero-based medium offset.
artistCreditNoCredited artists (may be empty).
externalLinksNoExternal links for this edition, such as Discogs release pages (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

A3.7/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 goes further by disclosing that media are paginated as whole units after normalization, that mediaTotal/trackTotal describe the full release, that truncation is signalled via a notice, and that cover art is only a stub. Those are the non-obvious traits an agent needs and they exceed annotation coverage.

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

Conciseness3/5

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

Front-loaded and information-dense, but the long field enumeration (packaging, barcode, country, text representation, external links) largely restates what the output schema already declares. That clause could be cut without losing anything an agent needs to decide or call correctly.

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?

Covers pagination, units, truncation recovery, and the cover-art hand-off, which is what matters for a paginated read tool. With an output schema present, the extra return-value catalogue is redundant rather than harmful, and no critical behavior 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 baseline is 3, but the description adds genuine meaning: offset/limit select whole media after normalization rather than individual tracks, and the counters describe the full release rather than the page. That normalization detail is not derivable from the schema alone.

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

Purpose4/5

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

States a specific verb/resource pair ("One edition by MBID") and enumerates the returned content, which distinguishes it from generic lookups. However, it never addresses the potentially confusing boundary with musicbrainz_get_release_group or musicbrainz_get_recording, so an agent must already know what a 'release edition' is.

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

Usage Guidelines3/5

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

Gives one explicit alternative ("For image URLs, call musicbrainz_get_cover_art") and operational guidance ("Follow the notice to retrieve remaining media"), which is real routing value. But there is no guidance on when to prefer this over search_entities or browse_entities to find a release, leaving the main selection decision implied.

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, external album links, 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.

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

Output 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).
externalLinksNoExternal album links, such as Wikidata and Discogs master pages (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 cover the safety profile (readOnly, idempotent, openWorld), and the description adds real behavior beyond them: the embedded releases list is capped at one page of 25, and cover-art data is scoped to the release-group's representative release rather than all editions. The only gap is any mention of error behavior for an unknown/malformed MBID, which the schema pattern partly mitigates.

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 identity and payload, then the constraints and sibling routing, in two tight sentences. It is dense (long parenthetical enumerations) but every clause carries routing or scoping information; only the nested parenthetical around cover art is slightly hard to parse.

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 single-parameter read tool with an output schema and full annotation coverage, nothing an agent needs to call it correctly is missing: inputs, pagination cap, the representative-release caveat, and the exact next tool for the three most likely follow-ups are all stated.

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 property already documents the hyphenated UUID format, whitespace tolerance, and uppercase acceptance. The description only adds the phrase 'by MBID', which the schema fully carries, so baseline 3 applies with no compensating detail needed.

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?

Delivers a specific verb+resource (fetch a release-group by MBID) and immediately disambiguates the resource from its sibling: 'the album' above specific pressings vs. a release edition. It then enumerates the payload (types, first-release date, artist credit, releases, tags, external links, cover-art flags), so an agent can distinguish it from musicbrainz_get_release without opening either 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?

Explicitly routes three common follow-on needs to the correct siblings: cover-art URLs to musicbrainz_get_cover_art, complete edition sets to musicbrainz_browse_entities with target_type=release and link.release-group, and tracklists to musicbrainz_get_release using an MBID from the returned list. That is when-to-use and when-to-use-something-else, 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, ordered work attributes (rights-society registrations, musical key and other metadata), writers/composers/lyricists, movements, arrangements, aliases, tags, and external links. Attributes remain available when relationships are disabled. Follow work target MBIDs with this tool; direction, orderingKey, and targetDisambiguation distinguish parts and arrangements without reordering relationships. 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.

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

Output 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.
attributesNoWork attributes in upstream order, including repeated types (may be empty).
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 read-only, idempotent, open-world, so the bar is lower, and the description still adds real behavior: attributes remain available when relationships are disabled, and the server returns only the first 25 recording relationships with the exact total and truncation disclosure while preserving other relationships. That truncation/pagination behavior is genuinely useful and not in the annotations, though the reference to direction/orderingKey/targetDisambiguation (not parameters of this tool) adds ambiguity.

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

Conciseness3/5

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

Front-loaded with the entity definition, which is good, but the middle sentences are dense and run together multiple ideas (attribute availability, MBID following, direction/orderingKey/targetDisambiguation) in a way that reads as a single long chain. The final browse/get_recording sentence is long and its referent is not immediately clear.

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

Completeness3/5

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

An output schema and clear annotations exist, so return values and safety need no explanation; the description correctly focuses on scope, truncation, and sibling routing. However, it introduces navigation concepts (direction, orderingKey, targetDisambiguation) that belong to other tools and are not parameters here, which risks confusing the agent about what this call accepts.

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 still adds meaning by clarifying that disabling relationships does not strip attributes, which explains the practical effect of inc_relationships=false. The mbid parameter is not elaborated beyond the schema, which already documents the UUID format and whitespace handling.

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 ('Work ... by MBID') and immediately disambiguates the entity from its nearest sibling: 'a composition, distinct from a recording.' It also enumerates the payload (type, languages, ISWCs, attributes, writers, movements, arrangements, aliases, tags, links), so an agent knows exactly what it gets versus musicbrainz_get_recording.

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 routing: 'Follow work target MBIDs with this tool,' then instructs browsing via musicbrainz_browse_entities (target_type=recording, link.work) and using musicbrainz_get_recording for relationship attributes and dates, with the caveat that 'browse alone does not return those details.' No explicit when-not-to-use exclusion, and the get_recording sentence is easy to misread as applying to work relationships rather than recording-side ones.

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.

NameRequiredDescriptionDefault
valueYesISRC: compact CCXXXYYNNNNN or grouped CC-XXX-YY-NNNNN (e.g. GBAYE9701274 or GB-AYE-97-01274), case-insensitive with surrounding whitespace. ISWC: T plus ten digits, optional hyphen after T, optional dots between three-digit groups, optional hyphen/dot before the check digit (e.g. T-010.140.236-1 or T0101402361); whitespace and case are ignored. Echoes canonical uppercase ISRC or T-DDD.DDD.DDD-C ISWC. Barcode: UPC/EAN digits, e.g. 075678164125; spaces and hyphens are ignored, other characters rejected.
id_typeYesWhich standard identifier: isrc (recording), iswc (work), or barcode (release).

Output Schema

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

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the readOnly/idempotent/openWorld annotations by disclosing that ISRC and ISWC use dedicated exact endpoints while barcode is a Lucene search filter whose results are ranked (exact match = 100). It also warns that an ISRC is a recording-level code often shared by several recordings, which is a cardinality behavior an agent must anticipate, and notes the output 'kind' field disambiguates the returned entity type.

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 purpose and the use condition, then the id_type mapping, then the behavioral caveats — a logical order with no filler sentences. It is dense enough to verge on terse, but 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?

With only two required parameters, full schema coverage, and an output schema, the description needs only to explain selection and behavior — which it does, including the exact-vs-ranked distinction and the output 'kind' field. 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.

Parameters4/5

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

Schema coverage is 100% and the schema already documents the normalization rules in detail, so the baseline would be 3. The description still adds value by mapping each id_type to its target entity type and by flagging the one-to-many nature of ISRC lookup, which the schema does not convey.

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 ('Resolve a standard identifier to MusicBrainz entities') and immediately distinguishes the tool from the sibling search path by calling it 'the deterministic path when you already hold an ID'. It then enumerates exactly which identifier type resolves to which entity type, so an agent knows the scope without opening the 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?

Explicitly frames use as 'without a name search — the deterministic path when you already hold an ID', which is a clear when-to-use condition and an implicit exclusion of name-based lookup. It does not name the alternative sibling (musicbrainz_search_entities) directly, so the routing guidance is strong but not fully explicit.

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, release-group secondary types, recording first-release dates, 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). Only the first 500 matches are accessible; narrow the query or use musicbrainz_browse_entities for complete linked sets.

NameRequiredDescriptionDefault
limitNoPositive integer page size (default 25); values above 100 are clamped to 100 with a notice. With MUSICBRAINZ_CLAMP_OVERSIZED_LIMITS=off, maximum 100 is enforced.
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, below 500). A page crossing the 500-match ceiling is reduced to the remaining window.
entityTypeYesWhich entity type to search.

Output Schema

NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
noticeNoLimit clamp and pagination guidance, including zero matches, exhausted pages, and empty-page discrepancies.
offsetNoThe effective zero-based result offset used for this page.
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.8/5.0
Behavior5/5

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

Annotations already declare readOnly/openWorld/idempotent, and the description adds real behavior beyond them: score-descending result ordering, a 100 = exact relevance scale, and a hard 500-match accessibility ceiling that affects how the tool must be used. It also discloses which fields come back per entity subtype, such as status for releases versus type for other subtypes.

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 purpose, then usage, then syntax, then limits — a sensible ordering with no filler sentences. The return-field enumeration is dense but each clause maps to a distinct entity type, so it mostly earns its space.

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?

Covers purpose, when to use, the alternative tool, query syntax, ordering, and the 500-result window. Since an output schema exists, the description need not explain return values further, and the additional constraint disclosure makes it fully sufficient for correct invocation.

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 earns an extra point by supplying a concrete field-scoped Lucene example (`artist:radiohead AND country:GB`) and by tying the 500-match cap to the offset parameter's practical limit. It stops short of adding anything on limit clamping beyond what the schema already documents.

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?

The description opens with a specific verb and resource: "Full-text search across a MusicBrainz entity type," and enumerates the supported entity types. It clearly separates this tool from the musicbrainz_get_* siblings by framing itself as the name-to-MBID resolution step.

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 states when to use it ("Starting point when resolving a name to an MBID — chain the returned MBID into the matching musicbrainz_get_* tool") and names an alternative with its condition ("use musicbrainz_browse_entities for complete linked sets"). Both the positive case and the fallback are covered.

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. 8 tool updates
    • Changedmusicbrainz_browse_entities10 fields changed
      • addedInput schema / properties / link / properties / track_artist
        Added value: +{
        +  "description": "Artist MBID for release-only browse: releases crediting the artist on tracks but not at release level.",
        +  "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 / status
        Added value: +{
        +  "description": "Pipe-separated statuses for release by artist/label/recording/release-group/track_artist: official, promotion, bootleg, pseudo-release, withdrawn, cancelled. Tokens are trimmed/lowercased and unioned; blank means absent.",
        +  "type": "string"
        +}
      • addedInput schema / properties / type
        Added value: +{
        +  "description": "Pipe-separated release types: album, single, ep, broadcast, other, audio drama, audiobook, compilation, demo, dj-mix, field recording, interview, live, mixtape/street, remix, soundtrack, spokenword. Supported for release-group by artist and release by artist/label/recording/track_artist. Primary types union; primary and secondary categories intersect; release-group by artist requires all secondary types. Tokens are trimmed/lowercased; blank means absent.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / entities / items / properties / firstReleaseDate
        Added value: +{
        +  "description": "Recording first-release date, possibly partial. Omitted when absent.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / entities / items / properties / secondaryTypes
        Added value: +{
        +  "description": "Release-group secondary classifications in upstream order. Omitted when empty; absence does not establish a studio album.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous 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."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_filter`: A nonempty type/status filter has an unknown token, an empty pipe-list member, or is unsupported for the target and parent. `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 / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "invalid_link",
        -  "entity_not_found"
        -]New value: +[
        +  "invalid_filter",
        +  "invalid_link",
        +  "entity_not_found"
        +]
      • changedOutput schema / properties / linkType / description
        Previous value: -"The parent link type used (artist, label, release-group, release, recording, work, or area)."New value: +"The parent link type used (artist, track_artist, label, release-group, release, recording, work, or area)."
      • addedOutput schema / properties / status
        Added value: +{
        +  "description": "Canonical applied pipe-separated status filter; preserve on continuation.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / type
        Added value: +{
        +  "description": "Canonical applied pipe-separated type filter; preserve on continuation.",
        +  "type": "string"
        +}
    • Changedmusicbrainz_get_artist6 fields changed
      • changedOutput schema / anyOf
        Previous value: -[
        -  {
        -    "not": {
        -      "required": [
        -        "error"
        -      ]
        -    },
        -    "required": [
        -      "mbid",
        -      "name",
        -      "aliases",
        -      "tags",
        -      "releaseGroups",
        -      "relationships",
        -      "externalLinks"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "error"
        -    ]
        -  }
        -]New value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "mbid",
        +      "name",
        +      "ipis",
        +      "isnis",
        +      "aliases",
        +      "tags",
        +      "releaseGroups",
        +      "relationships",
        +      "externalLinks"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / areaId
        Added value: +{
        +  "description": "Area MBID for musicbrainz_browse_entities link.area. Omitted when unknown.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / beginArea
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Birth or formation area. Omitted when unknown.",
        +  "properties": {
        +    "mbid": {
        +      "description": "Area MBID. Omitted when unknown.",
        +      "type": "string"
        +    },
        +    "name": {
        +      "description": "Area name. Omitted when unknown.",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedOutput schema / properties / endArea
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Death or dissolution area. Omitted when unknown.",
        +  "properties": {
        +    "mbid": {
        +      "description": "Area MBID. Omitted when unknown.",
        +      "type": "string"
        +    },
        +    "name": {
        +      "description": "Area name. Omitted when unknown.",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedOutput schema / properties / ipis
        Added value: +{
        +  "description": "IPI identifiers as exact strings in upstream order (may be empty).",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / isnis
        Added value: +{
        +  "description": "ISNI identifiers as exact strings in upstream order (may be empty).",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedmusicbrainz_get_label5 fields changed
      • changedOutput schema / anyOf
        Previous value: -[
        -  {
        -    "not": {
        -      "required": [
        -        "error"
        -      ]
        -    },
        -    "required": [
        -      "mbid",
        -      "name",
        -      "aliases",
        -      "tags",
        -      "externalLinks"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "error"
        -    ]
        -  }
        -]New value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "mbid",
        +      "name",
        +      "ipis",
        +      "isnis",
        +      "aliases",
        +      "tags",
        +      "externalLinks",
        +      "relationships"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / areaId
        Added value: +{
        +  "description": "Area MBID for musicbrainz_browse_entities link.area. Omitted when unknown.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / ipis
        Added value: +{
        +  "description": "IPI identifiers as exact strings in upstream order (may be empty).",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / isnis
        Added value: +{
        +  "description": "ISNI identifiers as exact strings in upstream order (may be empty).",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / relationships
        Added value: +{
        +  "description": "Label ownership, imprint and distribution relationships in upstream order, uncapped (may be empty).",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "A typed relationship to another entity (band membership, performer, writer, etc.).",
        +    "properties": {
        +      "attributes": {
        +        "description": "Role modifiers (e.g. \"lead vocals\", \"assistant\", \"co\"). Omitted when none.",
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "begin": {
        +        "description": "Relationship start date. Omitted when absent.",
        +        "type": "string"
        +      },
        +      "direction": {
        +        "description": "Relationship direction (\"forward\" | \"backward\"). Omitted when absent.",
        +        "type": "string"
        +      },
        +      "end": {
        +        "description": "Relationship end date. Omitted when absent.",
        +        "type": "string"
        +      },
        +      "orderingKey": {
        +        "description": "Upstream relationship sequence key, including zero. Omitted when unknown; array order is preserved.",
        +        "type": "number"
        +      },
        +      "targetDisambiguation": {
        +        "description": "Qualifier distinguishing the related entity from namesakes. Omitted when absent.",
        +        "type": "string"
        +      },
        +      "targetId": {
        +        "description": "MBID of the related entity — chain to the matching get_* tool. Omitted for url targets.",
        +        "type": "string"
        +      },
        +      "targetName": {
        +        "description": "Name/title of the related entity. Omitted when absent.",
        +        "type": "string"
        +      },
        +      "targetType": {
        +        "description": "Type of the related entity (\"artist\" | \"work\" | \"recording\" | \"label\" | \"url\").",
        +        "type": "string"
        +      },
        +      "type": {
        +        "description": "Relationship role (e.g. \"member of band\", \"producer\", \"writer\", \"performance\").",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "type",
        +      "targetType"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changedmusicbrainz_get_recording2 fields changed
      • changedInput schema / properties / inc_relationships / description
        Previous value: -"Include performance/production relationships (performers, producers, engineers) and work-rels."New value: +"Include performance/production, work and recording relationships (samples, mashups, music videos, DJ mixes), and external links."
      • changedOutput schema / properties / relationships / description
        Previous value: -"Performance/production relationships and work-rels (may be empty)."New value: +"Performance/production, work and recording relationships in upstream order, uncapped (may be empty)."
    • Changedmusicbrainz_get_release4 fields changed
      • changedOutput schema / anyOf
        Previous value: -[
        -  {
        -    "not": {
        -      "required": [
        -        "error"
        -      ]
        -    },
        -    "required": [
        -      "mbid",
        -      "title",
        -      "artistCredit",
        -      "artistCreditString",
        -      "labelInfo",
        -      "mediaOffset",
        -      "mediaTotal",
        -      "trackTotal",
        -      "media",
        -      "coverArt"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "error"
        -    ]
        -  }
        -]New value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "mbid",
        +      "title",
        +      "artistCredit",
        +      "artistCreditString",
        +      "labelInfo",
        +      "externalLinks",
        +      "mediaOffset",
        +      "mediaTotal",
        +      "trackTotal",
        +      "media",
        +      "coverArt"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / externalLinks
        Added value: +{
        +  "description": "External links for this edition, such as Discogs release pages (may be empty).",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "An external resource link (url-rel). Where cross-service IDs like Wikidata QID are surfaced.",
        +    "properties": {
        +      "resource": {
        +        "description": "The external URL. Wikidata/Discogs IDs live in the URL path — chain to those servers.",
        +        "type": "string"
        +      },
        +      "type": {
        +        "description": "Link type (e.g. \"wikidata\", \"discogs\", \"official homepage\", \"streaming\").",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "type",
        +      "resource"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / media / items / properties / tracks / items / properties / artistCredit
        Added value: +{
        +  "description": "Track-specific artist credit. Omitted when not supplied; may be empty.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "One credited artist within an artist credit.",
        +    "properties": {
        +      "artistId": {
        +        "description": "MBID of the credited artist — chain to musicbrainz_get_artist.",
        +        "type": "string"
        +      },
        +      "artistName": {
        +        "description": "Canonical artist name.",
        +        "type": "string"
        +      },
        +      "joinPhrase": {
        +        "description": "Text that joins this credit to the next (e.g. \" feat. \", \" & \"). Omitted when empty.",
        +        "type": "string"
        +      },
        +      "name": {
        +        "description": "Credited name as it appears on the release (may be an alias).",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "name",
        +      "artistId",
        +      "artistName"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / media / items / properties / tracks / items / properties / artistCreditString
        Added value: +{
        +  "description": "Track-specific display credit with verbatim join phrases. Omitted without credited artists.",
        +  "type": "string"
        +}
    • Changedmusicbrainz_get_release_group2 fields changed
      • changedOutput schema / anyOf
        Previous value: -[
        -  {
        -    "not": {
        -      "required": [
        -        "error"
        -      ]
        -    },
        -    "required": [
        -      "mbid",
        -      "title",
        -      "artistCredit",
        -      "artistCreditString",
        -      "releases",
        -      "tags"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "error"
        -    ]
        -  }
        -]New value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "mbid",
        +      "title",
        +      "artistCredit",
        +      "artistCreditString",
        +      "releases",
        +      "tags",
        +      "externalLinks"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / externalLinks
        Added value: +{
        +  "description": "External album links, such as Wikidata and Discogs master pages (may be empty).",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "An external resource link (url-rel). Where cross-service IDs like Wikidata QID are surfaced.",
        +    "properties": {
        +      "resource": {
        +        "description": "The external URL. Wikidata/Discogs IDs live in the URL path — chain to those servers.",
        +        "type": "string"
        +      },
        +      "type": {
        +        "description": "Link type (e.g. \"wikidata\", \"discogs\", \"official homepage\", \"streaming\").",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "type",
        +      "resource"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changedmusicbrainz_get_work2 fields changed
      • changedOutput schema / anyOf
        Previous value: -[
        -  {
        -    "not": {
        -      "required": [
        -        "error"
        -      ]
        -    },
        -    "required": [
        -      "mbid",
        -      "title",
        -      "languages",
        -      "iswcs",
        -      "aliases",
        -      "tags",
        -      "relationships",
        -      "externalLinks"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "error"
        -    ]
        -  }
        -]New value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "mbid",
        +      "title",
        +      "languages",
        +      "iswcs",
        +      "attributes",
        +      "aliases",
        +      "tags",
        +      "relationships",
        +      "externalLinks"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / attributes
        Added value: +{
        +  "description": "Work attributes in upstream order, including repeated types (may be empty).",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "One work attribute; known members of sparse rows are preserved.",
        +    "properties": {
        +      "type": {
        +        "description": "Attribute type, such as a rights society or musical key. Omitted when unknown.",
        +        "type": "string"
        +      },
        +      "value": {
        +        "description": "Exact attribute value, preserving spaces and leading zeros. Omitted when unknown.",
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changedmusicbrainz_search_entities5 fields changed
      • changedInput schema / properties / offset / description
        Previous value: -"Result offset for pagination (0-based)."New value: +"Result offset for pagination (0-based, below 500). A page crossing the 500-match ceiling is reduced to the remaining window."
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous 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."New value: +"Machine-readable failure mode. Declared by this tool: `search_window_exceeded`: The offset is at or beyond the 500-match search window. `blank_query`: The query contains only whitespace (it is blank after trimming). Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "blank_query"
        -]New value: +[
        +  "search_window_exceeded",
        +  "blank_query"
        +]
      • addedOutput schema / properties / results / items / properties / firstReleaseDate
        Added value: +{
        +  "description": "Recording first-release date, possibly partial. Omitted when absent.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / results / items / properties / secondaryTypes
        Added value: +{
        +  "description": "Release-group secondary classifications, in upstream order. Omitted when empty; absence does not establish a studio album.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
  2. 8 tool updates
    • Changedmusicbrainz_browse_entities6 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Page size (1–100)."New value: +"Positive integer page size (default 25); values above 100 are clamped to 100 with a notice. With MUSICBRAINZ_CLAMP_OVERSIZED_LIMITS=off, maximum 100 is enforced."
      • changedInput schema / properties / limit / maximum
        Previous value: -100New value: +9007199254740991
      • changedInput schema / properties / link / properties / area / description
        Previous value: -"Parent area MBID (artists/labels in this area)."New value: +"Parent area MBID (artists, labels, or releases in this area)."
      • changedInput schema / properties / link / properties / recording / description
        Previous value: -"Parent recording MBID (releases containing this recording)."New value: +"Parent recording MBID (artists or releases linked to this recording)."
      • changedInput schema / properties / link / properties / release / description
        Previous value: -"Parent release MBID (recording entities in this edition, not ordered tracks)."New value: +"Parent release MBID (artists, labels, release-groups, or recording entities in this edition; recordings are not ordered tracks)."
      • changedInput schema / properties / link / properties / work / description
        Previous value: -"Parent work MBID (recordings of this work)."New value: +"Parent work MBID (artists or recordings linked to this work)."
    • Changedmusicbrainz_get_artist2 fields changed
      • addedOutput schema / properties / relationships / items / properties / orderingKey
        Added value: +{
        +  "description": "Upstream relationship sequence key, including zero. Omitted when unknown; array order is preserved.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / relationships / items / properties / targetDisambiguation
        Added value: +{
        +  "description": "Qualifier distinguishing the related entity from namesakes. Omitted when absent.",
        +  "type": "string"
        +}
    • Changedmusicbrainz_get_cover_art10 fields changed
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 25,
        +  "description": "Maximum images returned (default 25; values above 100 clamp to 100 with a notice).",
        +  "maximum": 9007199254740991,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "default": 0,
        +  "description": "Zero-based image offset in archive order (default 0).",
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • changedOutput schema / anyOf
        Previous value: -[
        -  {
        -    "not": {
        -      "required": [
        -        "error"
        -      ]
        -    },
        -    "required": [
        -      "mbid",
        -      "entityType",
        -      "images",
        -      "hasArt"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "error"
        -    ]
        -  }
        -]New value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "mbid",
        +      "entityType",
        +      "offset",
        +      "images",
        +      "hasArt",
        +      "totalCount"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / cap
        Added value: +{
        +  "description": "Applied image limit when more remain.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / images / description
        Previous value: -"Cover-art images (empty when the entity has no art)."New value: +"Selected cover-art images in archive order (empty for no art or an exhausted page)."
      • changedOutput schema / properties / notice / description
        Previous 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."New value: +"Combined limit clamp, continuation, exhausted page, or no-art/existence-unconfirmed guidance."
      • addedOutput schema / properties / offset
        Added value: +{
        +  "description": "Effective zero-based image offset in archive order.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / shown
        Added value: +{
        +  "description": "Images returned when more remain.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / totalCount
        Added value: +{
        +  "description": "Exact image total before the limit and offset window.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "True when images remain after this nonempty page.",
        +  "type": "boolean"
        +}
    • Changedmusicbrainz_get_recording5 fields changed
      • changedOutput schema / anyOf
        Previous value: -[
        -  {
        -    "not": {
        -      "required": [
        -        "error"
        -      ]
        -    },
        -    "required": [
        -      "mbid",
        -      "title",
        -      "artistCredit",
        -      "artistCreditString",
        -      "isrcs",
        -      "releases",
        -      "relationships",
        -      "externalLinks"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "error"
        -    ]
        -  }
        -]New value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "mbid",
        +      "title",
        +      "artistCredit",
        +      "artistCreditString",
        +      "isrcs",
        +      "releases",
        +      "releaseAppearanceSummary",
        +      "relationships",
        +      "externalLinks"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / relationships / items / properties / orderingKey
        Added value: +{
        +  "description": "Upstream relationship sequence key, including zero. Omitted when unknown; array order is preserved.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / relationships / items / properties / targetDisambiguation
        Added value: +{
        +  "description": "Qualifier distinguishing the related entity from namesakes. Omitted when absent.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / releaseAppearanceSummary
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Completeness evidence derived only from this recording lookup.",
        +  "properties": {
        +    "cap": {
        +      "description": "Upstream embedded page size (25).",
        +      "type": "number"
        +    },
        +    "completeness": {
        +      "description": "Complete for a short present page or exact total; unknown without proof; truncated only when the exact total exceeds shown.",
        +      "enum": [
        +        "complete",
        +        "unknown",
        +        "truncated"
        +      ],
        +      "type": "string"
        +    },
        +    "notice": {
        +      "description": "Browse guidance starting at offset 0, independent of embedded order.",
        +      "type": "string"
        +    },
        +    "shown": {
        +      "description": "Release appearances returned in the embedded page.",
        +      "type": "number"
        +    },
        +    "totalCount": {
        +      "description": "Exact release total from upstream or a short present page. Omitted when unknown.",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "shown",
        +    "cap",
        +    "completeness",
        +    "notice"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / properties / releases / description
        Previous value: -"Releases this recording appears on (may be empty)."New value: +"One upstream page of release appearances (up to 25; may be empty). See releaseAppearanceSummary for completeness."
    • Changedmusicbrainz_get_release11 fields changed
      • addedInput schema / properties / media_limit
        Added value: +{
        +  "default": 20,
        +  "description": "Maximum whole media returned (default 20; no upper bound).",
        +  "maximum": 9007199254740991,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / media_offset
        Added value: +{
        +  "default": 0,
        +  "description": "Zero-based medium offset in release order (default 0).",
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • changedOutput schema / anyOf
        Previous value: -[
        -  {
        -    "not": {
        -      "required": [
        -        "error"
        -      ]
        -    },
        -    "required": [
        -      "mbid",
        -      "title",
        -      "artistCredit",
        -      "artistCreditString",
        -      "labelInfo",
        -      "media",
        -      "coverArt"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "error"
        -    ]
        -  }
        -]New value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "mbid",
        +      "title",
        +      "artistCredit",
        +      "artistCreditString",
        +      "labelInfo",
        +      "mediaOffset",
        +      "mediaTotal",
        +      "trackTotal",
        +      "media",
        +      "coverArt"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / cap
        Added value: +{
        +  "description": "Requested media limit when more remain.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / media / description
        Previous value: -"Media (discs) with their tracklists (may be empty)."New value: +"Selected media in release order, with complete tracklists for each medium (may be empty)."
      • addedOutput schema / properties / mediaOffset
        Added value: +{
        +  "description": "Effective zero-based medium offset.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / mediaTotal
        Added value: +{
        +  "description": "Exact number of media in the whole normalized release.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Next media_offset, exhaustion, or no-media guidance.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / shown
        Added value: +{
        +  "description": "Number of media returned when more remain.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / trackTotal
        Added value: +{
        +  "description": "Exact number of track occurrences in the whole normalized release, independent of upstream trackCount.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "True when media remain after this nonempty page.",
        +  "type": "boolean"
        +}
    • Changedmusicbrainz_get_work3 fields changed
      • changedInput schema / properties / inc_relationships / description
        Previous value: -"Include writer/composer relationships, recording relationships, and external links."New value: +"Include writer/composer, movement/arrangement and recording relationships, and external links."
      • addedOutput schema / properties / relationships / items / properties / orderingKey
        Added value: +{
        +  "description": "Upstream relationship sequence key, including zero. Omitted when unknown; array order is preserved.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / relationships / items / properties / targetDisambiguation
        Added value: +{
        +  "description": "Qualifier distinguishing the related entity from namesakes. Omitted when absent.",
        +  "type": "string"
        +}
    • 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 = the UPC/EAN digits, e.g. \"075678164125\" (spaces and hyphens are ignored; any other character, including a wildcard, is rejected)."New value: +"ISRC: compact CCXXXYYNNNNN or grouped CC-XXX-YY-NNNNN (e.g. GBAYE9701274 or GB-AYE-97-01274), case-insensitive with surrounding whitespace. ISWC: T plus ten digits, optional hyphen after T, optional dots between three-digit groups, optional hyphen/dot before the check digit (e.g. T-010.140.236-1 or T0101402361); whitespace and case are ignored. Echoes canonical uppercase ISRC or T-DDD.DDD.DDD-C ISWC. Barcode: UPC/EAN digits, e.g. 075678164125; spaces and hyphens are ignored, other characters rejected."
      • addedInput schema / properties / value / examples
        Added value: +[
        +  "GBAYE9701274",
        +  "GB-AYE-97-01274",
        +  "T-010.140.236-1",
        +  "T0101402361",
        +  "075678164125"
        +]
      • 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), 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."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 fails its accepted grammar locally or the dedicated endpoint rejects it with 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."
    • Changedmusicbrainz_search_entities5 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum results to return (1–100)."New value: +"Positive integer page size (default 25); values above 100 are clamped to 100 with a notice. With MUSICBRAINZ_CLAMP_OVERSIZED_LIMITS=off, maximum 100 is enforced."
      • changedInput schema / properties / limit / maximum
        Previous value: -100New value: +9007199254740991
      • changedOutput schema / anyOf
        Previous value: -[
        -  {
        -    "not": {
        -      "required": [
        -        "error"
        -      ]
        -    },
        -    "required": [
        -      "entityType",
        -      "results",
        -      "effectiveQuery",
        -      "totalCount"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "error"
        -    ]
        -  }
        -]New value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "entityType",
        +      "offset",
        +      "results",
        +      "effectiveQuery",
        +      "totalCount"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • changedOutput schema / properties / notice / description
        Previous value: -"Guidance when zero results matched — how to broaden or correct the query."New value: +"Limit clamp and pagination guidance, including zero matches, exhausted pages, and empty-page discrepancies."
      • addedOutput schema / properties / offset
        Added value: +{
        +  "description": "The effective zero-based result offset used for this page.",
        +  "type": "number"
        +}
  3. 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"
        +}
  4. 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"
        +]
  5. 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"
        -]
  6. 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"
        +  }
        +]
  7. 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
    C
    maintenance
    Enables searching music artists and releases, and retrieving artist biographies, discographies, release track listings, credits, and metadata through the MusicBrainz API.
    469 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
    243 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.