musicbrainz-mcp-server
Server Details
Search MusicBrainz artists, releases, works, labels; resolve ISRC/ISWC/barcode; fetch cover art.
- 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
Scored across 10 tools
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.
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.
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.
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 toolsmusicbrainz_browse_entitiesmusicbrainz-mcp-server: browse entitiesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| link | Yes | Exactly one parent MBID. The valid key depends on target_type (see the description). | |
| type | No | 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. | |
| limit | No | 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. | |
| offset | No | Result offset for deep pagination (0-based). | |
| status | No | 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. | |
| target_type | Yes | The entity type to enumerate (the children). |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | The page size that was applied. Absent when not truncated. |
| type | No | Canonical applied pipe-separated type filter; preserve on continuation. |
| error | No | Present when the call failed. Absent on success. |
| shown | No | Number of entities returned in this page. Absent when not truncated. |
| notice | No | How to page further when results remain, or guidance when empty. |
| offset | No | The offset used for this page. |
| status | No | Canonical applied pipe-separated status filter; preserve on continuation. |
| entities | No | This page of linked entities, in upstream order. |
| linkMbid | No | The parent MBID that was browsed. |
| linkType | No | The parent link type used (artist, track_artist, label, release-group, release, recording, work, or area). |
| truncated | No | True when more entities remain beyond this page (offset + shown < totalCount). Absent when the page is complete. |
| targetType | No | The entity type that was enumerated. |
| totalCount | No | True total number of linked entities upstream (the {type}-count field). |
TDQS
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.
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.
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.
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.
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.
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 artistARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mbid | Yes | Artist MBID (hyphenated hexadecimal UUID; surrounding whitespace and uppercase accepted). | |
| inc_relationships | No | Include band-membership / collaboration relationships and external links (url-rels). | |
| inc_release_groups | No | Include the discography (release-groups). Capped at one page; use browse for the full set. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | The one-page cap that was applied. Absent when not truncated. |
| area | No | Associated area name. Omitted when unknown. |
| ipis | No | IPI identifiers as exact strings in upstream order (may be empty). |
| mbid | No | Artist MBID. |
| name | No | Artist name. |
| tags | No | Community tags/genres with vote counts (may be empty). |
| type | No | Artist type (Person, Group, Orchestra, …). Omitted when unknown. |
| error | No | Present when the call failed. Absent on success. |
| isnis | No | ISNI identifiers as exact strings in upstream order (may be empty). |
| shown | No | Number of release-groups returned. Absent when not truncated. |
| areaId | No | Area MBID for musicbrainz_browse_entities link.area. Omitted when unknown. |
| gender | No | Gender, for person-type artists. Omitted when unknown/inapplicable. |
| notice | No | How to fetch the complete discography when truncated. |
| aliases | No | Alternate names (may be empty). |
| country | No | ISO country code. Omitted when unknown. |
| endArea | No | Death or dissolution area. Omitted when unknown. |
| lifeSpan | No | Birth/death or formation/dissolution span. Omitted when unknown. |
| sortName | No | Sortable name form. Omitted when absent. |
| beginArea | No | Birth or formation area. Omitted when unknown. |
| truncated | No | True when the discography hit the one-page cap and more release-groups exist. Absent when the full set fit in one page. |
| externalLinks | No | External resource links (url-rels) — Wikidata, Discogs, official site (may be empty). |
| relationships | No | Band membership and collaboration relationships (may be empty). |
| releaseGroups | No | Discography — release-groups (one page; may be empty or capped). |
| disambiguation | No | Short qualifier distinguishing same-named artists. Omitted when absent. |
TDQS
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.
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.
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.
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.
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.
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 artARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mbid | Yes | Release or release-group MBID (hyphenated hexadecimal UUID; surrounding whitespace and uppercase accepted). | |
| limit | No | Maximum images returned (default 25; values above 100 clamp to 100 with a notice). | |
| offset | No | Zero-based image offset in archive order (default 0). | |
| entity_type | No | Whether the MBID is a release (default) or a release-group. | release |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | Applied image limit when more remain. |
| mbid | No | The MBID that was queried. |
| error | No | Present when the call failed. Absent on success. |
| shown | No | Images returned when more remain. |
| hasArt | No | Whether any cover art exists for this entity. |
| images | No | Selected cover-art images in archive order (empty for no art or an exhausted page). |
| notice | No | Combined limit clamp, continuation, exhausted page, or no-art/existence-unconfirmed guidance. |
| offset | No | Effective zero-based image offset in archive order. |
| truncated | No | True when images remain after this nonempty page. |
| entityType | No | Whether the MBID was treated as a release or release-group. |
| totalCount | No | Exact image total before the limit and offset window. |
| representativeRelease | No | For a release-group query, the release MBID whose art was returned. Omitted for direct release queries. |
TDQS
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.
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.
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.
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.
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.
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 labelARead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| mbid | Yes | Label MBID (hyphenated hexadecimal UUID; surrounding whitespace and uppercase accepted). |
Output Schema
| Name | Required | Description |
|---|---|---|
| area | No | Associated area name. Omitted when unknown. |
| ipis | No | IPI identifiers as exact strings in upstream order (may be empty). |
| mbid | No | Label MBID. |
| name | No | Label name. |
| tags | No | Community tags/genres (may be empty). |
| type | No | Label type. Omitted when unknown. |
| error | No | Present when the call failed. Absent on success. |
| isnis | No | ISNI identifiers as exact strings in upstream order (may be empty). |
| areaId | No | Area MBID for musicbrainz_browse_entities link.area. Omitted when unknown. |
| aliases | No | Alternate names (may be empty). |
| country | No | ISO country code. Omitted when unknown. |
| lifeSpan | No | Founding/dissolution span. Omitted when unknown. |
| sortName | No | Sortable name form. Omitted when absent. |
| labelCode | No | Label code (LC number), without the "LC" prefix. Omitted when absent. |
| externalLinks | No | External resource links (url-rels) (may be empty). |
| relationships | No | Label ownership, imprint and distribution relationships in upstream order, uncapped (may be empty). |
| disambiguation | No | Short qualifier. Omitted when absent. |
TDQS
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.
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.
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.
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.
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.
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 recordingARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mbid | Yes | Recording MBID (hyphenated hexadecimal UUID; surrounding whitespace and uppercase accepted). | |
| inc_relationships | No | Include performance/production, work and recording relationships (samples, mashups, music videos, DJ mixes), and external links. |
Output Schema
| Name | Required | Description |
|---|---|---|
| mbid | No | Recording MBID. |
| error | No | Present when the call failed. Absent on success. |
| isrcs | No | ISRCs assigned to this recording (may be empty). |
| title | No | Recording title. |
| length | No | Recording length as m:ss. Omitted when unknown. |
| releases | No | One upstream page of release appearances (up to 25; may be empty). See releaseAppearanceSummary for completeness. |
| artistCredit | No | Credited artists (may be empty). |
| externalLinks | No | External resource links (url-rels) (may be empty). |
| relationships | No | Performance/production, work and recording relationships in upstream order, uncapped (may be empty). |
| disambiguation | No | Short qualifier. Omitted when absent. |
| firstReleaseDate | No | Earliest release date for this recording. Omitted when absent. |
| artistCreditString | No | Display string of the artist credit with join phrases. |
| releaseAppearanceSummary | No | Completeness evidence derived only from this recording lookup. |
TDQS
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.
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.
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.
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.
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.
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 releaseARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mbid | Yes | Release MBID (hyphenated hexadecimal UUID; surrounding whitespace and uppercase accepted). | |
| media_limit | No | Maximum whole media returned (default 20; no upper bound). | |
| media_offset | No | Zero-based medium offset in release order (default 0). |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | Requested media limit when more remain. |
| date | No | Release date. Omitted when absent. |
| mbid | No | Release MBID. |
| error | No | Present when the call failed. Absent on success. |
| media | No | Selected media in release order, with complete tracklists for each medium (may be empty). |
| shown | No | Number of media returned when more remain. |
| title | No | Release title. |
| notice | No | Next media_offset, exhaustion, or no-media guidance. |
| script | No | Text-representation script code. Omitted when absent. |
| status | No | Release status (Official, Promotion, Bootleg, …). Omitted when absent. |
| barcode | No | Barcode (UPC/EAN). Omitted when absent; empty string upstream means "known to have none". |
| country | No | Release country code. Omitted when absent. |
| coverArt | No | Whether cover art exists (availability stub from WS/2). |
| language | No | Text-representation language code. Omitted when absent. |
| labelInfo | No | Label / catalog-number pairings (may be empty). |
| packaging | No | Packaging type (Jewel Case, Digipak, …). Omitted when absent. |
| truncated | No | True when media remain after this nonempty page. |
| mediaTotal | No | Exact number of media in the whole normalized release. |
| trackTotal | No | Exact number of track occurrences in the whole normalized release, independent of upstream trackCount. |
| mediaOffset | No | Effective zero-based medium offset. |
| artistCredit | No | Credited artists (may be empty). |
| externalLinks | No | External links for this edition, such as Discogs release pages (may be empty). |
| disambiguation | No | Short qualifier. Omitted when absent. |
| releaseGroupId | No | Parent release-group MBID — chain to musicbrainz_get_release_group. Omitted when absent. |
| artistCreditString | No | Display string of the artist credit with join phrases. |
TDQS
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.
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.
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.
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.
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.
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 groupARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mbid | Yes | Release-group MBID (hyphenated hexadecimal UUID; surrounding whitespace and uppercase accepted). |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | The one-page cap that was applied. Absent when not truncated. |
| mbid | No | Release-group MBID. |
| tags | No | Community tags/genres (may be empty). |
| error | No | Present when the call failed. Absent on success. |
| shown | No | Number of releases returned. Absent when not truncated. |
| title | No | Release-group title. |
| notice | No | 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). |
| coverArt | No | 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. |
| releases | No | Releases (editions) in this group (one page; may be empty or capped — use browse for all). |
| truncated | No | True when the releases list hit the one-page cap and more editions exist. Absent when the full set fit in one page. |
| primaryType | No | Primary type (Album, Single, EP, Broadcast, Other). Omitted when absent. |
| artistCredit | No | Credited artists (may be empty). |
| externalLinks | No | External album links, such as Wikidata and Discogs master pages (may be empty). |
| disambiguation | No | Short qualifier. Omitted when absent. |
| secondaryTypes | No | Secondary types (Live, Compilation, Soundtrack, …). Omitted when none. |
| firstReleaseDate | No | Earliest release date across all editions. Omitted when absent. |
| artistCreditString | No | Display string of the artist credit with join phrases. |
TDQS
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.
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.
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.
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.
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.
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 workARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mbid | Yes | Work MBID (hyphenated hexadecimal UUID; surrounding whitespace and uppercase accepted). | |
| inc_relationships | No | Include writer/composer, movement/arrangement and recording relationships, and external links. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | Server-side recording relationship cap, when truncated. |
| mbid | No | Work MBID. |
| tags | No | Community tags/genres (may be empty). |
| type | No | Work type (Song, Symphony, …). Omitted when unknown. |
| error | No | Present when the call failed. Absent on success. |
| iswcs | No | ISWCs assigned to this work (may be empty). |
| shown | No | Number of recording relationships returned when truncated. |
| title | No | Work title. |
| notice | No | Recording enumeration and relationship-detail retrieval guidance when truncated. |
| aliases | No | Alternate titles (may be empty). |
| languages | No | Lyrics languages (ISO codes; may be empty). |
| truncated | No | True only when recording relationships were omitted beyond 25. |
| attributes | No | Work attributes in upstream order, including repeated types (may be empty). |
| totalCount | No | Exact number of recording relationships before the server-side slice. Absent when relationships are disabled. |
| externalLinks | No | External resource links (url-rels) (may be empty). |
| relationships | No | All non-recording relationships and the first 25 recording relationships in upstream order (may be empty). |
| disambiguation | No | Short qualifier. Omitted when absent. |
TDQS
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.
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.
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.
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.
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.
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 identifierARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| value | Yes | 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. | |
| id_type | Yes | Which standard identifier: isrc (recording), iswc (work), or barcode (release). |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| result | No | The resolved entities, discriminated by `kind` (recordings | works | releases). |
TDQS
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.
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.
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.
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.
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.
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 entitiesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 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. | |
| query | Yes | 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. | |
| offset | No | Result offset for pagination (0-based, below 500). A page crossing the 500-match ceiling is reduced to the remaining window. | |
| entityType | Yes | Which entity type to search. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| notice | No | Limit clamp and pagination guidance, including zero matches, exhausted pages, and empty-page discrepancies. |
| offset | No | The effective zero-based result offset used for this page. |
| results | No | Ranked matches, in MusicBrainz score-descending order. |
| entityType | No | The entity type that was searched. |
| totalCount | No | Total matches upstream before the limit/offset window. |
| effectiveQuery | No | The query string as sent to MusicBrainz. |
TDQS
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.
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.
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.
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.
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.
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.
8 tool updates
- Changed
musicbrainz_browse_entities10 fields changed- added
Input schema / properties / link / properties / track_artistAdded 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" +} - added
Input schema / properties / statusAdded 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" +} - added
Input schema / properties / typeAdded 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" +} - added
Output schema / properties / entities / items / properties / firstReleaseDateAdded value: +{ + "description": "Recording first-release date, possibly partial. Omitted when absent.", + "type": "string" +} - added
Output schema / properties / entities / items / properties / secondaryTypesAdded value: +{ + "description": "Release-group secondary classifications in upstream order. Omitted when empty; absence does not establish a studio album.", + "items": { + "type": "string" + }, + "type": "array" +} - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious 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." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "invalid_link", - "entity_not_found" -]New value: +[ + "invalid_filter", + "invalid_link", + "entity_not_found" +] - changed
Output schema / properties / linkType / descriptionPrevious 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)." - added
Output schema / properties / statusAdded value: +{ + "description": "Canonical applied pipe-separated status filter; preserve on continuation.", + "type": "string" +} - added
Output schema / properties / typeAdded value: +{ + "description": "Canonical applied pipe-separated type filter; preserve on continuation.", + "type": "string" +}
- Changed
musicbrainz_get_artist6 fields changed- changed
Output schema / anyOfPrevious 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" + ] + } +] - added
Output schema / properties / areaIdAdded value: +{ + "description": "Area MBID for musicbrainz_browse_entities link.area. Omitted when unknown.", + "type": "string" +} - added
Output schema / properties / beginAreaAdded 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" +} - added
Output schema / properties / endAreaAdded 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" +} - added
Output schema / properties / ipisAdded value: +{ + "description": "IPI identifiers as exact strings in upstream order (may be empty).", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / isnisAdded value: +{ + "description": "ISNI identifiers as exact strings in upstream order (may be empty).", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
musicbrainz_get_label5 fields changed- changed
Output schema / anyOfPrevious 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" + ] + } +] - added
Output schema / properties / areaIdAdded value: +{ + "description": "Area MBID for musicbrainz_browse_entities link.area. Omitted when unknown.", + "type": "string" +} - added
Output schema / properties / ipisAdded value: +{ + "description": "IPI identifiers as exact strings in upstream order (may be empty).", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / isnisAdded value: +{ + "description": "ISNI identifiers as exact strings in upstream order (may be empty).", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / relationshipsAdded 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" +}
- Changed
musicbrainz_get_recording2 fields changed- changed
Input schema / properties / inc_relationships / descriptionPrevious 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." - changed
Output schema / properties / relationships / descriptionPrevious 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)."
- Changed
musicbrainz_get_release4 fields changed- changed
Output schema / anyOfPrevious 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" + ] + } +] - added
Output schema / properties / externalLinksAdded 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" +} - added
Output schema / properties / media / items / properties / tracks / items / properties / artistCreditAdded 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" +} - added
Output schema / properties / media / items / properties / tracks / items / properties / artistCreditStringAdded value: +{ + "description": "Track-specific display credit with verbatim join phrases. Omitted without credited artists.", + "type": "string" +}
- Changed
musicbrainz_get_release_group2 fields changed- changed
Output schema / anyOfPrevious 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" + ] + } +] - added
Output schema / properties / externalLinksAdded 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" +}
- Changed
musicbrainz_get_work2 fields changed- changed
Output schema / anyOfPrevious 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" + ] + } +] - added
Output schema / properties / attributesAdded 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" +}
- Changed
musicbrainz_search_entities5 fields changed- changed
Input schema / properties / offset / descriptionPrevious 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." - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious 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." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "blank_query" -]New value: +[ + "search_window_exceeded", + "blank_query" +] - added
Output schema / properties / results / items / properties / firstReleaseDateAdded value: +{ + "description": "Recording first-release date, possibly partial. Omitted when absent.", + "type": "string" +} - added
Output schema / properties / results / items / properties / secondaryTypesAdded value: +{ + "description": "Release-group secondary classifications, in upstream order. Omitted when empty; absence does not establish a studio album.", + "items": { + "type": "string" + }, + "type": "array" +}
8 tool updates
- Changed
musicbrainz_browse_entities6 fields changed- changed
Input schema / properties / limit / descriptionPrevious 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." - changed
Input schema / properties / limit / maximumPrevious value: -100New value: +9007199254740991 - changed
Input schema / properties / link / properties / area / descriptionPrevious value: -"Parent area MBID (artists/labels in this area)."New value: +"Parent area MBID (artists, labels, or releases in this area)." - changed
Input schema / properties / link / properties / recording / descriptionPrevious value: -"Parent recording MBID (releases containing this recording)."New value: +"Parent recording MBID (artists or releases linked to this recording)." - changed
Input schema / properties / link / properties / release / descriptionPrevious 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)." - changed
Input schema / properties / link / properties / work / descriptionPrevious value: -"Parent work MBID (recordings of this work)."New value: +"Parent work MBID (artists or recordings linked to this work)."
- Changed
musicbrainz_get_artist2 fields changed- added
Output schema / properties / relationships / items / properties / orderingKeyAdded value: +{ + "description": "Upstream relationship sequence key, including zero. Omitted when unknown; array order is preserved.", + "type": "number" +} - added
Output schema / properties / relationships / items / properties / targetDisambiguationAdded value: +{ + "description": "Qualifier distinguishing the related entity from namesakes. Omitted when absent.", + "type": "string" +}
- Changed
musicbrainz_get_cover_art10 fields changed- added
Input schema / properties / limitAdded value: +{ + "default": 25, + "description": "Maximum images returned (default 25; values above 100 clamp to 100 with a notice).", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / offsetAdded value: +{ + "default": 0, + "description": "Zero-based image offset in archive order (default 0).", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - changed
Output schema / anyOfPrevious 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" + ] + } +] - added
Output schema / properties / capAdded value: +{ + "description": "Applied image limit when more remain.", + "type": "number" +} - changed
Output schema / properties / images / descriptionPrevious 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)." - changed
Output schema / properties / notice / descriptionPrevious 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." - added
Output schema / properties / offsetAdded value: +{ + "description": "Effective zero-based image offset in archive order.", + "type": "number" +} - added
Output schema / properties / shownAdded value: +{ + "description": "Images returned when more remain.", + "type": "number" +} - added
Output schema / properties / totalCountAdded value: +{ + "description": "Exact image total before the limit and offset window.", + "type": "number" +} - added
Output schema / properties / truncatedAdded value: +{ + "description": "True when images remain after this nonempty page.", + "type": "boolean" +}
- Changed
musicbrainz_get_recording5 fields changed- changed
Output schema / anyOfPrevious 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" + ] + } +] - added
Output schema / properties / relationships / items / properties / orderingKeyAdded value: +{ + "description": "Upstream relationship sequence key, including zero. Omitted when unknown; array order is preserved.", + "type": "number" +} - added
Output schema / properties / relationships / items / properties / targetDisambiguationAdded value: +{ + "description": "Qualifier distinguishing the related entity from namesakes. Omitted when absent.", + "type": "string" +} - added
Output schema / properties / releaseAppearanceSummaryAdded 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" +} - changed
Output schema / properties / releases / descriptionPrevious 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."
- Changed
musicbrainz_get_release11 fields changed- added
Input schema / properties / media_limitAdded value: +{ + "default": 20, + "description": "Maximum whole media returned (default 20; no upper bound).", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / media_offsetAdded value: +{ + "default": 0, + "description": "Zero-based medium offset in release order (default 0).", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - changed
Output schema / anyOfPrevious 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" + ] + } +] - added
Output schema / properties / capAdded value: +{ + "description": "Requested media limit when more remain.", + "type": "number" +} - changed
Output schema / properties / media / descriptionPrevious 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)." - added
Output schema / properties / mediaOffsetAdded value: +{ + "description": "Effective zero-based medium offset.", + "type": "number" +} - added
Output schema / properties / mediaTotalAdded value: +{ + "description": "Exact number of media in the whole normalized release.", + "type": "number" +} - added
Output schema / properties / noticeAdded value: +{ + "description": "Next media_offset, exhaustion, or no-media guidance.", + "type": "string" +} - added
Output schema / properties / shownAdded value: +{ + "description": "Number of media returned when more remain.", + "type": "number" +} - added
Output schema / properties / trackTotalAdded value: +{ + "description": "Exact number of track occurrences in the whole normalized release, independent of upstream trackCount.", + "type": "number" +} - added
Output schema / properties / truncatedAdded value: +{ + "description": "True when media remain after this nonempty page.", + "type": "boolean" +}
- Changed
musicbrainz_get_work3 fields changed- changed
Input schema / properties / inc_relationships / descriptionPrevious value: -"Include writer/composer relationships, recording relationships, and external links."New value: +"Include writer/composer, movement/arrangement and recording relationships, and external links." - added
Output schema / properties / relationships / items / properties / orderingKeyAdded value: +{ + "description": "Upstream relationship sequence key, including zero. Omitted when unknown; array order is preserved.", + "type": "number" +} - added
Output schema / properties / relationships / items / properties / targetDisambiguationAdded value: +{ + "description": "Qualifier distinguishing the related entity from namesakes. Omitted when absent.", + "type": "string" +}
- Changed
musicbrainz_lookup_identifier3 fields changed- changed
Input schema / properties / value / descriptionPrevious 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." - added
Input schema / properties / value / examplesAdded value: +[ + "GBAYE9701274", + "GB-AYE-97-01274", + "T-010.140.236-1", + "T0101402361", + "075678164125" +] - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious 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."
- Changed
musicbrainz_search_entities5 fields changed- changed
Input schema / properties / limit / descriptionPrevious 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." - changed
Input schema / properties / limit / maximumPrevious value: -100New value: +9007199254740991 - changed
Output schema / anyOfPrevious value: -[ - { - "not": { - "required": [ - "error" - ] - }, - "required": [ - "entityType", - "results", - "effectiveQuery", - "totalCount" - ] - }, - { - "required": [ - "error" - ] - } -]New value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "entityType", + "offset", + "results", + "effectiveQuery", + "totalCount" + ] + }, + { + "required": [ + "error" + ] + } +] - changed
Output schema / properties / notice / descriptionPrevious 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." - added
Output schema / properties / offsetAdded value: +{ + "description": "The effective zero-based result offset used for this page.", + "type": "number" +}
9 tool updates
- Changed
musicbrainz_browse_entities13 fields changed- added
Input schema / properties / link / additionalPropertiesAdded value: +{} - added
Input schema / properties / link / properties / area / patternAdded 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*$" - added
Input schema / properties / link / properties / artist / patternAdded 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*$" - added
Input schema / properties / link / properties / label / patternAdded 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*$" - added
Input schema / properties / link / properties / recording / patternAdded 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*$" - added
Input schema / properties / link / properties / releaseAdded 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" +} - added
Input schema / properties / link / properties / release-group / patternAdded 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*$" - added
Input schema / properties / link / properties / releaseGroupAdded 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" +} - added
Input schema / properties / link / properties / release_groupAdded 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" +} - added
Input schema / properties / link / properties / work / patternAdded 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*$" - added
Output schema / properties / entities / items / properties / statusAdded value: +{ + "description": "Release status (e.g. Official or Bootleg). Omitted for other entity types or when absent.", + "type": "string" +} - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious 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." - changed
Output schema / properties / linkType / descriptionPrevious 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)."
- Changed
musicbrainz_get_artist3 fields changed- changed
Input schema / properties / mbid / descriptionPrevious value: -"Artist MBID (36-character UUID)."New value: +"Artist MBID (hyphenated hexadecimal UUID; surrounding whitespace and uppercase accepted)." - added
Input schema / properties / mbid / patternAdded 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*$" - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious 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."
- Changed
musicbrainz_get_cover_art3 fields changed- changed
Input schema / properties / mbid / descriptionPrevious value: -"Release or release-group MBID (36-character UUID)."New value: +"Release or release-group MBID (hyphenated hexadecimal UUID; surrounding whitespace and uppercase accepted)." - added
Input schema / properties / mbid / patternAdded 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*$" - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious 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."
- Changed
musicbrainz_get_label3 fields changed- changed
Input schema / properties / mbid / descriptionPrevious value: -"Label MBID (36-character UUID)."New value: +"Label MBID (hyphenated hexadecimal UUID; surrounding whitespace and uppercase accepted)." - added
Input schema / properties / mbid / patternAdded 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*$" - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious 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."
- Changed
musicbrainz_get_recording3 fields changed- changed
Input schema / properties / mbid / descriptionPrevious value: -"Recording MBID (36-character UUID)."New value: +"Recording MBID (hyphenated hexadecimal UUID; surrounding whitespace and uppercase accepted)." - added
Input schema / properties / mbid / patternAdded 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*$" - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious 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."
- Changed
musicbrainz_get_release3 fields changed- changed
Input schema / properties / mbid / descriptionPrevious value: -"Release MBID (36-character UUID)."New value: +"Release MBID (hyphenated hexadecimal UUID; surrounding whitespace and uppercase accepted)." - added
Input schema / properties / mbid / patternAdded 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*$" - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious 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."
- Changed
musicbrainz_get_release_group3 fields changed- changed
Input schema / properties / mbid / descriptionPrevious value: -"Release-group MBID (36-character UUID)."New value: +"Release-group MBID (hyphenated hexadecimal UUID; surrounding whitespace and uppercase accepted)." - added
Input schema / properties / mbid / patternAdded 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*$" - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious 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."
- Changed
musicbrainz_get_work9 fields changed- changed
Input schema / properties / mbid / descriptionPrevious value: -"Work MBID (36-character UUID)."New value: +"Work MBID (hyphenated hexadecimal UUID; surrounding whitespace and uppercase accepted)." - added
Input schema / properties / mbid / patternAdded 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*$" - added
Output schema / properties / capAdded value: +{ + "description": "Server-side recording relationship cap, when truncated.", + "type": "number" +} - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious 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." - added
Output schema / properties / noticeAdded value: +{ + "description": "Recording enumeration and relationship-detail retrieval guidance when truncated.", + "type": "string" +} - changed
Output schema / properties / relationships / descriptionPrevious 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)." - added
Output schema / properties / shownAdded value: +{ + "description": "Number of recording relationships returned when truncated.", + "type": "number" +} - added
Output schema / properties / totalCountAdded value: +{ + "description": "Exact number of recording relationships before the server-side slice. Absent when relationships are disabled.", + "type": "number" +} - added
Output schema / properties / truncatedAdded value: +{ + "description": "True only when recording relationships were omitted beyond 25.", + "type": "boolean" +}
- Changed
musicbrainz_search_entities1 field changed- added
Output schema / properties / results / items / properties / statusAdded value: +{ + "description": "Release status (e.g. Official or Bootleg). Omitted for other entity types or when absent.", + "type": "string" +}
4 tool updates
- Changed
musicbrainz_get_cover_art3 fields changed- changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious 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." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "invalid_mbid" -]New value: +[ + "invalid_mbid", + "entity_not_found" +] - changed
Output schema / properties / notice / descriptionPrevious 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."
- Changed
musicbrainz_get_release_group3 fields changed- changed
Output schema / anyOfPrevious 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" + ] + } +] - changed
Output schema / properties / coverArt / descriptionPrevious 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." - changed
Output schema / properties / notice / descriptionPrevious 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)."
- Changed
musicbrainz_lookup_identifier3 fields changed- changed
Input schema / properties / value / descriptionPrevious 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)." - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious 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." - changed
Output schema / properties / result / oneOfPrevious 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" + } +]
- Changed
musicbrainz_search_entities3 fields changed- changed
Input schema / properties / query / descriptionPrevious 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." - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious 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." - added
Output schema / properties / error / properties / data / properties / reason / examplesAdded value: +[ + "blank_query" +]
10 tool updates
- Changed
musicbrainz_browse_entities6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "targetType", + "linkType", + "linkMbid", + "entities", + "offset", + "totalCount" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded 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" +} - removed
Output schema / requiredRemoved value: -[ - "targetType", - "linkType", - "linkMbid", - "entities", - "offset", - "totalCount" -]
- Changed
musicbrainz_get_artist6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "mbid", + "name", + "aliases", + "tags", + "releaseGroups", + "relationships", + "externalLinks" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded 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" +} - removed
Output schema / requiredRemoved value: -[ - "mbid", - "name", - "aliases", - "tags", - "releaseGroups", - "relationships", - "externalLinks" -]
- Changed
musicbrainz_get_cover_art6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "mbid", + "entityType", + "images", + "hasArt" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded 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" +} - removed
Output schema / requiredRemoved value: -[ - "mbid", - "entityType", - "images", - "hasArt" -]
- Changed
musicbrainz_get_label6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "mbid", + "name", + "aliases", + "tags", + "externalLinks" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded 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" +} - removed
Output schema / requiredRemoved value: -[ - "mbid", - "name", - "aliases", - "tags", - "externalLinks" -]
- Changed
musicbrainz_get_recording6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "mbid", + "title", + "artistCredit", + "artistCreditString", + "isrcs", + "releases", + "relationships", + "externalLinks" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded 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" +} - removed
Output schema / requiredRemoved value: -[ - "mbid", - "title", - "artistCredit", - "artistCreditString", - "isrcs", - "releases", - "relationships", - "externalLinks" -]
- Changed
musicbrainz_get_release6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "mbid", + "title", + "artistCredit", + "artistCreditString", + "labelInfo", + "media", + "coverArt" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded 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" +} - removed
Output schema / requiredRemoved value: -[ - "mbid", - "title", - "artistCredit", - "artistCreditString", - "labelInfo", - "media", - "coverArt" -]
- Changed
musicbrainz_get_release_group6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "mbid", + "title", + "artistCredit", + "artistCreditString", + "releases", + "tags", + "coverArt" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded 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" +} - removed
Output schema / requiredRemoved value: -[ - "mbid", - "title", - "artistCredit", - "artistCreditString", - "releases", - "tags", - "coverArt" -]
- Changed
musicbrainz_get_work6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "mbid", + "title", + "languages", + "iswcs", + "aliases", + "tags", + "relationships", + "externalLinks" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded 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" +} - removed
Output schema / requiredRemoved value: -[ - "mbid", - "title", - "languages", - "iswcs", - "aliases", - "tags", - "relationships", - "externalLinks" -]
- Changed
musicbrainz_lookup_identifier6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "result" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded 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" +} - removed
Output schema / requiredRemoved value: -[ - "result" -]
- Changed
musicbrainz_search_entities6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "entityType", + "results", + "effectiveQuery", + "totalCount" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded 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" +} - removed
Output schema / requiredRemoved value: -[ - "entityType", - "results", - "effectiveQuery", - "totalCount" -]
3 tool updates
- Changed
musicbrainz_get_release_group5 fields changed- added
Output schema / properties / capAdded value: +{ + "description": "The one-page cap that was applied. Absent when not truncated.", + "type": "number" +} - added
Output schema / properties / noticeAdded value: +{ + "description": "How to fetch the complete list of editions when truncated.", + "type": "string" +} - changed
Output schema / properties / releases / descriptionPrevious 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)." - added
Output schema / properties / shownAdded value: +{ + "description": "Number of releases returned. Absent when not truncated.", + "type": "number" +} - added
Output schema / properties / truncatedAdded 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" +}
- Changed
musicbrainz_get_work5 fields changed- removed
Output schema / properties / capRemoved value: -{ - "description": "The one-page cap that was applied. Absent when not truncated.", - "type": "number" -} - removed
Output schema / properties / noticeRemoved value: -{ - "description": "How to fetch the complete list of recordings of this work when truncated.", - "type": "string" -} - changed
Output schema / properties / relationships / descriptionPrevious 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)." - removed
Output schema / properties / shownRemoved value: -{ - "description": "Number of recording relationships returned. Absent when not truncated.", - "type": "number" -} - removed
Output schema / properties / truncatedRemoved value: -{ - "description": "True when the recording relationships hit the one-page cap. Absent when the full set fit in one page.", - "type": "boolean" -}
- Changed
musicbrainz_lookup_identifier2 fields changed- changed
Input schema / properties / value / descriptionPrevious 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\"." - changed
Output schema / properties / result / oneOfPrevious 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" + } +]
10 tool updates
- First observed
musicbrainz_browse_entities - First observed
musicbrainz_get_artist - First observed
musicbrainz_get_cover_art - First observed
musicbrainz_get_label - First observed
musicbrainz_get_recording - First observed
musicbrainz_get_release - First observed
musicbrainz_get_release_group - First observed
musicbrainz_get_work - First observed
musicbrainz_lookup_identifier - First observed
musicbrainz_search_entities
Related MCP Connectors
MusicBrainz MCP — wraps MusicBrainz Web Service v2 (free, no auth)
Search books and authors, fetch editions, browse subjects, and resolve cover images.
Search and fetch Wikidata entities, execute SPARQL queries, and resolve external identifiers.
Search, analyze, and discover commercially released music using sonic intelligence.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables searching music artists and releases, and retrieving artist biographies, discographies, release track listings, credits, and metadata through the MusicBrainz API.469 npmMIT
- AlicenseAqualityDmaintenanceEnables 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.1713GPL 3.0
- AlicenseAqualityAmaintenanceAn 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.9243 npmMIT
- FlicenseNot gradedqualityDmaintenanceEnables 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.-
Glama MCP Gateway
Add one secure layer between your agents and this server.