Skip to main content
Glama

musicbrainz-mcp-server: get work

musicbrainz_get_work
Read-onlyIdempotent

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.

Input Schema

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

Output Schema

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

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "not": {
      -      "required": [
      -        "error"
      -      ]
      -    },
      -    "required": [
      -      "mbid",
      -      "title",
      -      "languages",
      -      "iswcs",
      -      "aliases",
      -      "tags",
      -      "relationships",
      -      "externalLinks"
      -    ]
      -  },
      -  {
      -    "required": [
      -      "error"
      -    ]
      -  }
      -]New value: +[
      +  {
      +    "not": {
      +      "required": [
      +        "error"
      +      ]
      +    },
      +    "required": [
      +      "mbid",
      +      "title",
      +      "languages",
      +      "iswcs",
      +      "attributes",
      +      "aliases",
      +      "tags",
      +      "relationships",
      +      "externalLinks"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "error"
      +    ]
      +  }
      +]
    • addedOutput schema / properties / attributes
      Added value: +{
      +  "description": "Work attributes in upstream order, including repeated types (may be empty).",
      +  "items": {
      +    "additionalProperties": false,
      +    "description": "One work attribute; known members of sparse rows are preserved.",
      +    "properties": {
      +      "type": {
      +        "description": "Attribute type, such as a rights society or musical key. Omitted when unknown.",
      +        "type": "string"
      +      },
      +      "value": {
      +        "description": "Exact attribute value, preserving spaces and leading zeros. Omitted when unknown.",
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  2. Changed3 schema fields changed
    • changedInput schema / properties / inc_relationships / description
      Previous value: -"Include writer/composer relationships, recording relationships, and external links."New value: +"Include writer/composer, movement/arrangement and recording relationships, and external links."
    • addedOutput schema / properties / relationships / items / properties / orderingKey
      Added value: +{
      +  "description": "Upstream relationship sequence key, including zero. Omitted when unknown; array order is preserved.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / relationships / items / properties / targetDisambiguation
      Added value: +{
      +  "description": "Qualifier distinguishing the related entity from namesakes. Omitted when absent.",
      +  "type": "string"
      +}
  3. Changed9 schema fields changed
    • changedInput schema / properties / mbid / description
      Previous value: -"Work MBID (36-character UUID)."New value: +"Work MBID (hyphenated hexadecimal UUID; surrounding whitespace and uppercase accepted)."
    • addedInput schema / properties / mbid / pattern
      Added value: +"^\\s*[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}\\s*$"
    • addedOutput schema / properties / cap
      Added value: +{
      +  "description": "Server-side recording relationship cap, when truncated.",
      +  "type": "number"
      +}
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_mbid`: The MBID is malformed or the all-zeros sentinel (MusicBrainz returns HTTP 400). `entity_not_found`: The MBID is well-formed but no work exists with it (MusicBrainz returns HTTP 404). Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_mbid`: The MBID is malformed or the all-zeros sentinel (rejected before fetch), or MusicBrainz rejects it with HTTP 400. `entity_not_found`: The MBID is well-formed but no work exists with it (MusicBrainz returns HTTP 404). Other values are possible when a failure originates below the handler."
    • addedOutput schema / properties / notice
      Added value: +{
      +  "description": "Recording enumeration and relationship-detail retrieval guidance when truncated.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / relationships / description
      Previous value: -"Writer/composer/lyricist relationships and recording-rels — the complete set (may be empty)."New value: +"All non-recording relationships and the first 25 recording relationships in upstream order (may be empty)."
    • addedOutput schema / properties / shown
      Added value: +{
      +  "description": "Number of recording relationships returned when truncated.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / totalCount
      Added value: +{
      +  "description": "Exact number of recording relationships before the server-side slice. Absent when relationships are disabled.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / truncated
      Added value: +{
      +  "description": "True only when recording relationships were omitted beyond 25.",
      +  "type": "boolean"
      +}
  4. 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",
      +      "title",
      +      "languages",
      +      "iswcs",
      +      "aliases",
      +      "tags",
      +      "relationships",
      +      "externalLinks"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "error"
      +    ]
      +  }
      +]
    • addedOutput schema / properties / error
      Added value: +{
      +  "additionalProperties": {},
      +  "description": "Present when the call failed. Absent on success.",
      +  "properties": {
      +    "code": {
      +      "description": "JSON-RPC error code for this failure.",
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    "data": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "reason": {
      +          "description": "Machine-readable failure mode. Declared by this tool: `invalid_mbid`: The MBID is malformed or the all-zeros sentinel (MusicBrainz returns HTTP 400). `entity_not_found`: The MBID is well-formed but no work exists with it (MusicBrainz returns HTTP 404). Other values are possible when a failure originates below the handler.",
      +          "examples": [
      +            "invalid_mbid",
      +            "entity_not_found"
      +          ],
      +          "type": "string"
      +        },
      +        "recovery": {
      +          "additionalProperties": {},
      +          "description": "Actionable next step for the caller.",
      +          "properties": {
      +            "hint": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "hint"
      +          ],
      +          "type": "object"
      +        },
      +        "retryable": {
      +          "description": "Whether retrying may succeed.",
      +          "type": "boolean"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "message": {
      +      "description": "Human-readable description of what went wrong.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "code",
      +    "message"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / required
      Removed value: -[
      -  "mbid",
      -  "title",
      -  "languages",
      -  "iswcs",
      -  "aliases",
      -  "tags",
      -  "relationships",
      -  "externalLinks"
      -]
  5. Changed5 schema fields changed
    • removedOutput schema / properties / cap
      Removed value: -{
      -  "description": "The one-page cap that was applied. Absent when not truncated.",
      -  "type": "number"
      -}
    • removedOutput schema / properties / notice
      Removed value: -{
      -  "description": "How to fetch the complete list of recordings of this work when truncated.",
      -  "type": "string"
      -}
    • changedOutput schema / properties / relationships / description
      Previous value: -"Writer/composer/lyricist relationships and recording-rels (may be empty; recording-rels capped at one page)."New value: +"Writer/composer/lyricist relationships and recording-rels — the complete set (may be empty)."
    • removedOutput schema / properties / shown
      Removed value: -{
      -  "description": "Number of recording relationships returned. Absent when not truncated.",
      -  "type": "number"
      -}
    • removedOutput schema / properties / truncated
      Removed value: -{
      -  "description": "True when the recording relationships hit the one-page cap. Absent when the full set fit in one page.",
      -  "type": "boolean"
      -}
  6. First observed

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, open-world, so the bar is lower, and the description still adds real behavior: attributes remain available when relationships are disabled, and the server returns only the first 25 recording relationships with the exact total and truncation disclosure while preserving other relationships. That truncation/pagination behavior is genuinely useful and not in the annotations, though the reference to direction/orderingKey/targetDisambiguation (not parameters of this tool) adds ambiguity.

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

Conciseness3/5

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

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

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

Completeness3/5

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

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

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description still adds meaning by clarifying that disabling relationships does not strip attributes, which explains the practical effect of inc_relationships=false. The mbid parameter is not elaborated beyond the schema, which already documents the UUID format and whitespace handling.

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

Purpose5/5

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

States a specific verb+resource ('Work ... by MBID') and immediately disambiguates the entity from its nearest sibling: 'a composition, distinct from a recording.' It also enumerates the payload (type, languages, ISWCs, attributes, writers, movements, arrangements, aliases, tags, links), so an agent knows exactly what it gets versus musicbrainz_get_recording.

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

Usage Guidelines4/5

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

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

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.