Skip to main content
Glama

musicbrainz-mcp-server: get cover art

musicbrainz_get_cover_art
Read-onlyIdempotent

Cover Art Archive images for a release or release-group MBID: front/back flags, image types, full-resolution URLs, and 250/500/1200px thumbnail URLs. Returns an empty image set (NOT an error) when the entity has no art — absence of art is information. An MBID that matches no release or release-group of the given entity_type fails with entity_not_found instead of an empty set. Art is served at the release level; a release-group MBID resolves to a representative release's art automatically. URLs are linked, never rehosted — image copyright stays with the rights holders (only MusicBrainz core metadata is CC0).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
mbidYesRelease or release-group MBID (36-character UUID).
entity_typeNoWhether the MBID is a release (default) or a release-group.release

Output Schema

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

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_mbid`: The MBID is malformed or the all-zeros sentinel (the upstream returns HTTP 400). Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_mbid`: The MBID is malformed or the all-zeros sentinel — a value MusicBrainz rejects outright (HTTP 400). `entity_not_found`: The MBID is well-formed but no entity of the given entity_type exists with it (the archive returns 404 and the MusicBrainz check of the MBID returns 404). Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / error / properties / data / properties / reason / examples
      Previous value: -[
      -  "invalid_mbid"
      -]New value: +[
      +  "invalid_mbid",
      +  "entity_not_found"
      +]
    • changedOutput schema / properties / notice / description
      Previous value: -"Notice when no art exists for the entity."New value: +"Present when the entity has no art: states that no images exist, or — when the MBID could not be checked against MusicBrainz — that its existence is unconfirmed."
  2. Changed6 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedInput schema / additionalProperties
      Added value: +false
    • changedOutput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedOutput schema / anyOf
      Added value: +[
      +  {
      +    "not": {
      +      "required": [
      +        "error"
      +      ]
      +    },
      +    "required": [
      +      "mbid",
      +      "entityType",
      +      "images",
      +      "hasArt"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "error"
      +    ]
      +  }
      +]
    • addedOutput schema / properties / error
      Added value: +{
      +  "additionalProperties": {},
      +  "description": "Present when the call failed. Absent on success.",
      +  "properties": {
      +    "code": {
      +      "description": "JSON-RPC error code for this failure.",
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    "data": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "reason": {
      +          "description": "Machine-readable failure mode. Declared by this tool: `invalid_mbid`: The MBID is malformed or the all-zeros sentinel (the upstream returns HTTP 400). Other values are possible when a failure originates below the handler.",
      +          "examples": [
      +            "invalid_mbid"
      +          ],
      +          "type": "string"
      +        },
      +        "recovery": {
      +          "additionalProperties": {},
      +          "description": "Actionable next step for the caller.",
      +          "properties": {
      +            "hint": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "hint"
      +          ],
      +          "type": "object"
      +        },
      +        "retryable": {
      +          "description": "Whether retrying may succeed.",
      +          "type": "boolean"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "message": {
      +      "description": "Human-readable description of what went wrong.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "code",
      +    "message"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / required
      Removed value: -[
      -  "mbid",
      -  "entityType",
      -  "images",
      -  "hasArt"
      -]
  3. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description goes well beyond these by disclosing critical edge-case behavior: empty image set on absence of art (not an error), entity_not_found on mismatched MBID, automatic resolution from release-group to a representative release, and the linking (never rehosting) policy with copyright implications. This is rich, non-obvious behavior that an agent must know to interpret results correctly.

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

Conciseness5/5

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

Four sentences, each dense with information and no fluff. The core purpose and outputs are front-loaded, followed by edge-case behavior (empty set, invalid MBID, release-group resolution) and finally the linking/copyright note. Every sentence earns its place; the structure is logical and scannable for an agent.

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

Completeness5/5

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

For a tool with only 2 parameters and a provided output schema, the description is exceptionally complete. It covers expected outputs, edge cases (no art, invalid MBID), resolution semantics, and a licensing caveat. Nothing an agent needs to correctly call this tool and interpret its results is missing. The output schema handles return structure, so the description need not repeat it.

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

Parameters4/5

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

Schema coverage is 100%: both 'mbid' and 'entity_type' have descriptions including the default and enum. The description adds meaningful above-schema context—how entity_type influences resolution (release-group resolves to a representative release's art) and the consequence of a mismatched MBID (entity_not_found). It also clarifies that art is served at release level, which directly informs parameter choice. This goes beyond mere restatement of schema.

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

Purpose5/5

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

The description states a specific verb ('get'), a precise resource ('Cover Art Archive images'), and the target entities ('release or release-group MBID'). It enumerates concrete outputs (front/back flags, image types, full-resolution URLs, thumbnail URLs), making it unmistakably distinct from sibling tools that fetch artist, label, recording, release, or work metadata.

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

Usage Guidelines4/5

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

The description clearly infers when to use this tool (whenever cover art is needed for a release or release-group) and includes a behavioral nuance about release-group resolution. However, it does not explicitly state when NOT to use it or name alternatives; the clear separation from sibling tools is implicit rather than spelled out, which is adequate but not maximally explicit.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.