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, writers/composers/lyricists, aliases, tags, and external links. This server returns the first 25 recording relationships with their exact total and actual truncation disclosure, preserving all other relationships. Browse recording entities with musicbrainz_browse_entities (target_type=recording, link.work), then use musicbrainz_get_recording for work relationship attributes and dates; browse alone does not return those details.

Input Schema

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

Output Schema

TableJSON 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.
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. 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"
      +}
  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",
      +      "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"
      -]
  3. 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"
      -}
  4. 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 the safety profile (readOnly, idempotent, openWorld), so the bar is lower. The description adds genuinely useful behavior: it returns the first 25 recording relationships with exact total and explicit truncation disclosure while preserving other relationships — a real disclosure detail beyond the annotations.

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

Conciseness4/5

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

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

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

Completeness4/5

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

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

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters (mbid, inc_relationships) are fully documented in the schema; baseline 3 applies. The description implies what relationships may be included but adds no syntax or default-value detail beyond what the schema already provides.

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

Purpose5/5

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

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

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

Usage Guidelines4/5

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

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

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.