Skip to main content
Glama
chrischall

musicbrainz-mcp

by chrischall

musicbrainz-mcp

CI npm license

An MCP server for MusicBrainz, the open music encyclopedia. It gives Claude live access to MusicBrainz metadata — artists, releases, recordings, labels, works, and more — plus Cover Art Archive images, and (optionally) lets you submit your own tags, ratings, and collection edits.

Developed and maintained by AI (Claude Code). Use at your own discretion.

Tools

Read (no credentials required):

Tool

What it does

musicbrainz_search

Search any entity type with a Lucene query; returns ranked matches + MBIDs

musicbrainz_lookup

Look up an entity by MBID, with inc subqueries for linked data

musicbrainz_browse

List all entities linked to another (e.g. every release by an artist)

musicbrainz_cover_art

Cover Art Archive image URLs for a release / release-group

musicbrainz_resolve

Turn a pasted musicbrainz.org URL into its entity

musicbrainz_healthcheck

Verify connectivity and whether OAuth writes are configured

Write (OAuth, confirmed before sending):

Tool

What it does

musicbrainz_submit_tags

Apply user tags to an entity on your account

musicbrainz_submit_rating

Set your 0–100 rating for an entity

musicbrainz_modify_collection

Add/remove entities in one of your collections

Each write asks you to confirm before it makes any network call — see Confirmations.

Every read above takes a view, except musicbrainz_cover_art. It defaults to compact, which strips image and avatar URLs — a subtractive rule, so it cannot drop a field nobody knew was there; view: "full" returns MusicBrainz's payload untouched. musicbrainz_cover_art takes none on purpose: the image URLs are its answer, and stripping them would not shrink the response, it would empty it.

Related MCP server: musicbrainz-mcp-server

Install

This is a Node MCP server (stdio). Point your MCP host at it:

{
  "mcpServers": {
    "musicbrainz": {
      "command": "npx",
      "args": ["-y", "musicbrainz-mcp"]
    }
  }
}

Reads work immediately. MusicBrainz asks clients to make at most one request per second — the server throttles itself to stay within that limit, so large browses are paced automatically.

Enabling the write tools (optional)

  1. Register an application at musicbrainz.org/account/applications (redirect URI urn:ietf:wg:oauth:2.0:oob).

  2. Complete the OAuth flow with the tag, rating, and collection scopes to obtain a refresh token.

  3. Provide these via your MCP host's env (or a local .env):

MUSICBRAINZ_OAUTH_CLIENT_ID=...
MUSICBRAINZ_OAUTH_CLIENT_SECRET=...
MUSICBRAINZ_OAUTH_REFRESH_TOKEN=...

Confirmations

Every write asks you first. A client that can show a confirmation prompt (Claude Code) shows one, with the entity, tags / rating / collection change. A client that cannot (claude.ai, Claude Desktop) gets a two-step flow instead: the first call sends nothing and returns a confirmation-required preview — the exact XML for tags and ratings, the method and path for collections — plus a confirmToken; only a repeat of the same call with that token submits. A token acts once, and changing any argument between the two calls invalidates it.

variable

default

MCP_CONFIRM_MODE

ask-user

What a write does on a client that cannot show a confirmation prompt (claude.ai, Claude Desktop). ask-user: two steps — the first call does nothing and returns a preview plus a token, and the model must get your approval in chat before calling again with it. auto: the same two steps, but the model may use the token after reviewing the preview itself. refuse: writes are refused on such clients. A client that can show prompts (Claude Code) always gets the real prompt, unless MCP_CONFIRM_ELICITATION=off. An unrecognised value is treated as refuse.

MCP_CONFIRM_ELICITATION

on

off never shows a confirmation prompt, so every client gets the MCP_CONFIRM_MODE behaviour. Set it for a client that says it can show prompts but never does (the write hangs — opencode 2.0.x). Any other value is treated as on, with a warning on stderr.

MCP_CONFIRM_TTL_SECONDS

600

How long a token stays valid.

MCP_CONFIRM_SECRET

random per process

Signing key; set it only if tokens must survive a server restart.

Development

npm install
npm run build
npm test

See CLAUDE.md for architecture and docs/MUSICBRAINZ-API.md for the pinned API shapes.

License

MIT. Data from MusicBrainz, licensed under CC0 / CC BY-NC-SA.

Available Tools

9 tools
musicbrainz_browseBrowse MusicBrainz entities linked to anotherA
Read-onlyIdempotent

List all entities of one type directly linked to a given entity — e.g. every release by an artist (entity: "release", linkedBy: "artist", mbid: ), recordings on a release, releases in a collection, or events at a place. This is the complete, paged set for a relationship (unlike search, which ranks fuzzy matches). Use inc for extra detail and limit/offset to page (max 100/page). Read-only. Data from MusicBrainz (https://musicbrainz.org), the open music encyclopedia.

ParametersJSON Schema
NameRequiredDescriptionDefault
incNoSubqueries to include, e.g. ["labels","recordings"]
mbidYesMBID of the linking entity
viewNoResponse shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact strips image/avatar URLs from the response; "full" returns MusicBrainz's payload untouched. No field projection: this server has no verified record of which MusicBrainz fields matter, and inventing one would risk dropping a field a caller needs.
limitNoMax results (1–100, default 25)
entityYesResult entity type to list
offsetNoResult offset for paging (default 0)
linkedByYesThe relationship to browse by (the linking entity type)

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, open-world behavior, so the description only needs to add context. It adds that browse returns the complete paged set rather than a ranked subset, highlights paging limits, and notes the data source. It doesn't cover rate limits or error behavior, but the key behavioral trait—deterministic complete relationships—is disclosed.

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?

The description is a compact two-sentence definition with no fluff. The core action and examples are front-loaded, followed by the search distinction, paging usage, and data provenance. Every sentence contributes to selection or invocation.

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

Completeness4/5

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

For a 7-parameter read-only tool with full schema coverage and no output schema, the description provides enough context for an agent to select and call it: purpose, examples, paging, read-only nature, and data source. It doesn't describe response shape in detail, but the absence of an output schema makes that less critical for invocation.

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

Parameters4/5

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

Schema covers 100% of parameters, so baseline is 3. The description goes beyond the schema by providing a concrete parameter mapping example (entity: 'release', linkedBy: 'artist', mbid: <artist>) and explaining that inc adds detail and limit/offset page. This clarifies how the three required parameters interrelate.

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

Purpose5/5

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

The description opens with specific verb and resource: 'List all entities of one type directly linked to a given entity', including concrete examples like 'every release by an artist' and 'recordings on a release'. It clearly distinguishes this from musicbrainz_search, which 'ranks fuzzy matches', making the tool's unique role unambiguous.

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

Usage Guidelines5/5

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

It explicitly says this is the 'complete, paged set for a relationship' and contrasts with 'search, which ranks fuzzy matches', telling the agent when to prefer browse over search. It also gives direct operational guidance: 'Use inc for extra detail and limit/offset to page (max 100/page).'

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

musicbrainz_cover_artGet Cover Art Archive images for a releaseA
Read-onlyIdempotent

Fetch Cover Art Archive image metadata for a release or release-group MBID — front/back cover URLs, thumbnails, and image types. Returns the image URLs (you can open or download them); it does not embed the bytes. Errors clearly when no art exists for the MBID. Read-only. Data from MusicBrainz (https://musicbrainz.org), the open music encyclopedia.

ParametersJSON Schema
NameRequiredDescriptionDefault
mbidYesRelease or release-group MBID
entityYesWhich MBID type the cover art is keyed on

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint. The description adds meaningful behavior beyond those: it returns URLs, does not embed image bytes, and errors clearly when no art exists. This gives the agent expectations about side effects, return content, and failure mode without contradicting any annotation.

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?

Three tight sentences put the core purpose first, then the return behavior, error condition, and read-only nature. The source attribution at the end is brief and unobtrusive. Nothing is redundant or padded.

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

Completeness5/5

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

With only two parameters, rich annotations, and no output schema, the description covers what the agent needs: what the tool fetches, what it returns, what it does not return, error behavior, and data provenance. This is sufficient for correct selection and invocation.

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 the schema already documents mbid and entity with types, enums, patterns, and descriptions. The description reinforces that the entity can be release or release-group and that the MBID keys the cover art, but it does not add significant meaning beyond what the input schema provides. Baseline 3 is appropriate.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Fetch Cover Art Archive image metadata for a release or release-group MBID.' It enumerates the concrete outputs (front/back URLs, thumbnails, image types), which clearly differentiates it from the lookup/search/browse siblings.

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 makes the intended use clear: you need a release or release-group MBID and you will get cover art metadata. It also warns that an error occurs when no art exists, which is a useful boundary condition. It does not explicitly name alternative tools or state when not to use it, but the resource is distinct enough that this is a minor gap.

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

musicbrainz_healthcheckVerify MusicBrainz connectivityA
Read-onlyIdempotent

Confirm the MusicBrainz API is reachable (and our User-Agent accepted) by looking up a stable entity, and report whether the OAuth write path is configured. Reports {ok, reachable, oauth_configured} with a plain-English hint. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, and openWorld hints. The description adds behavioral detail beyond this: it performs a lookup on a stable entity, verifies User-Agent acceptance, and reports on the OAuth write path. It also explicitly includes 'Read-only', reinforcing the annotations without contradicting them.

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?

The description is two sentences with no wasted words. The primary purpose is front-loaded, and the return shape and read-only nature are stated efficiently. Every clause adds meaningful information.

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

Completeness5/5

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

For a zero-parameter, no-output-schema health check, the description is complete. It explains what the tool verifies, what it returns, and its safety profile. An agent can invoke it without any inputs and interpret the result correctly from the described fields and hint.

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?

The tool has zero parameters, and the input schema is empty, so there is no parameter semantics burden. The description usefully explains what the tool reports (ok, reachable, oauth_configured) and that a plain-English hint is included, which is sufficient for a no-argument health check.

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 clearly states the tool's function: confirm MusicBrainz API reachability and User-Agent acceptance, and report whether the OAuth write path is configured. This is a specific verb+resource combination that distinguishes it from sibling tools that perform lookups, searches, or submissions.

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 gives clear context for when to use it: to verify connectivity and OAuth configuration before or alongside other MusicBrainz operations. It does not explicitly name alternatives or exclusions, but the health-check purpose is self-evident and distinct from all listed siblings, so no further disambiguation is needed.

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

musicbrainz_lookupLook up a MusicBrainz entity by MBIDA
Read-onlyIdempotent

Fetch a single MusicBrainz entity (artist, release, recording, release-group, label, work, area, place, event, instrument, series, genre, url) by its MBID. Use inc to pull linked sub-entities and relationships, e.g. inc: ["releases","release-groups"] on an artist, or ["recordings","labels"] on a release, or ["artist-credits","url-rels"] on most entities. Read-only. Data from MusicBrainz (https://musicbrainz.org), the open music encyclopedia.

ParametersJSON Schema
NameRequiredDescriptionDefault
incNoSubqueries/relationships to include, e.g. ["releases","url-rels","tags"]
mbidYesThe entity MBID (UUID)
viewNoResponse shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact strips image/avatar URLs from the response; "full" returns MusicBrainz's payload untouched. No field projection: this server has no verified record of which MusicBrainz fields matter, and inventing one would risk dropping a field a caller needs.
entityYesEntity type to look up

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds useful behavioral context beyond that, such as how `inc` affects the response and that data originates from MusicBrainz. It does not contradict the annotations and provides enough added detail for a safe read-only operation.

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?

The description is compact: two sentences, one focused purpose statement and one guidance sentence on `inc`. It front-loads the primary action. The MusicBrainz source URL is useful attribution and does not add clutter.

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

Completeness4/5

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

For a read-only lookup with a rich schema covering all parameters, the description is mostly complete. It explains the core behavior, supported entity types, and `inc` usage. It does not describe the response shape in detail, but the absence of an output schema and the simplicity of a single-entity lookup make this a minor gap.

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 adds genuine value by giving concrete `inc` examples tied to entity types, such as ['releases','release-groups'] on an artist and ['recordings','labels'] on a release. This helps an agent construct meaningful requests beyond the schema's bare parameter names.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Fetch a single MusicBrainz entity ... by its MBID.' It enumerates the full set of entity types, making the scope unmistakable. It also distinguishes this tool from siblings like musicbrainz_search and musicbrainz_browse by emphasizing lookup by MBID.

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 conveys the usage context: use this when you already have an MBID and need one entity. It also gives practical guidance on when to add `inc` to pull linked sub-entities. It does not explicitly mention when not to use it or point to a specific alternative, so it stops short of a 5.

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

musicbrainz_modify_collectionAdd or remove entities in a MusicBrainz collectionA
Idempotent

Add or remove entities (releases, artists, recordings, release-groups, works, labels, places, areas, events) in one of YOUR MusicBrainz collections (needs OAuth: MUSICBRAINZ_OAUTH_* with the collection scope). Get the collection MBID from its URL (musicbrainz.org/collection/). Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE). Nothing is changed before confirmation. Data from MusicBrainz (https://musicbrainz.org), the open music encyclopedia.

ParametersJSON Schema
NameRequiredDescriptionDefault
mbidsYesMBIDs of the entities to add/remove
actionYesWhether to add to or remove from the collection
collectionYesMBID of the target collection
entityTypeYesPlural entity type the collection holds (e.g. "releases")
confirmTokenNoONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.

TDQS

A4.3/5.0
Behavior5/5

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

Beyond the annotations, the description discloses crucial behavioral traits: a side-effect-free pre-confirmation phase, a preview + confirmToken fallback for clients without elicitation, that 'nothing is changed before confirmation', and the OAuth scope needed. This gives an agent a clear model of the mutation's safety and sequencing, well above what readOnlyHint/destructiveHint alone provide.

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

Conciseness4/5

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

The description is three dense sentences, with the core purpose front-loaded and supporting details (OAuth, confirmation, data source) following. Each sentence carries useful information, though the closing 'Data from MusicBrainz' attribution is not strictly needed for tool invocation, keeping it just short of a perfect 5.

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?

Given the tool's complexity (mutating action, OAuth, confirmation flow, multiple entity types) and the absence of an output schema, the description covers prerequisites, MBID sourcing, and the confirmation protocol thoroughly. It does not describe what a successful commit returns, but the confirmation flow and annotation hints (idempotent, non-destructive) make the behavior predictable enough for an agent to call it 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 the baseline is 3. The tool description adds minimal parameter-specific meaning beyond what the schema already provides; the mention of deriving the collection MBID from a URL is helpful context, but the schema's per-parameter descriptions already explain action, entityType, mbids, collection, and confirmToken adequately. The description doesn't need to compensate for any coverage gap.

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 first clause 'Add or remove entities ... in one of YOUR MusicBrainz collections' pairs a specific verb (add/remove) with a precise resource (collection membership). It lists the entity types explicitly, and the resource is clearly distinct from the sibling tools (search, lookup, browse, submit_tags, submit_rating), so an agent can tell what it does without opening the schema.

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

Usage Guidelines4/5

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

The description gives clear operational context: OAuth requirements (`MUSICBRAINZ_OAUTH_*` with `collection` scope), how to obtain the collection MBID from its URL, and the two-step confirmation flow. It does not explicitly name alternatives or state when not to use this tool, but the prerequisites and owned-collection framing make the intended usage obvious.

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

musicbrainz_resolveResolve a MusicBrainz URL to its entityA
Read-onlyIdempotent

Turn a musicbrainz.org URL (e.g. https://musicbrainz.org/artist/ or /release-group/) into the underlying entity by extracting its type + MBID and looking it up. Handy when a user pastes a MusicBrainz link. Pass inc to include linked sub-entities. Read-only. Data from MusicBrainz (https://musicbrainz.org), the open music encyclopedia.

ParametersJSON Schema
NameRequiredDescriptionDefault
incNoSubqueries to include on the resolved entity
urlYesA musicbrainz.org entity URL or an "entity/mbid" path
viewNoResponse shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact strips image/avatar URLs from the response; "full" returns MusicBrainz's payload untouched. No field projection: this server has no verified record of which MusicBrainz fields matter, and inventing one would risk dropping a field a caller needs.

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already convey readOnlyHint, idempotentHint, and openWorldHint; the description adds the extraction-and-lookup mechanism and notes that inc includes linked sub-entities. It does not disclose response shape, error behavior, or rate-limit implications, but with safety annotations present this is acceptable.

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?

Three sentences, no wasted words: the main action is front-loaded, the use case follows, and the inc hint plus read-only note round it out. The source attribution is brief and not distracting.

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

Completeness4/5

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

For a read-only URL resolver, the description covers the input format, the lookup behavior, and the inc option. With no output schema, a little more detail about exactly what the returned entity contains would help, but the view parameter's schema description already explains response shape, so the definition is largely complete.

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

Parameters4/5

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

Schema coverage is 100% and the schema already documents url, inc, and view well. The description adds value by clarifying inc as linked sub-entities and giving concrete URL path examples, while leaving the lengthy view semantics to the schema where they already live.

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 and resource: it turns a MusicBrainz URL into its underlying entity by extracting the type and MBID. It gives concrete URL examples and clarifies how this differs from a plain MBID lookup, so an agent can distinguish it from musicbrainz_lookup and musicbrainz_search.

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

Usage Guidelines4/5

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

It gives a clear usage context: "Handy when a user pastes a MusicBrainz link." However, it does not explicitly say when not to use it or name alternatives such as musicbrainz_lookup for direct MBID queries, so the guidance is clear but not exhaustive.

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

musicbrainz_submit_ratingSubmit a user rating to MusicBrainzA
Idempotent

Set YOUR rating for a MusicBrainz entity (needs OAuth: MUSICBRAINZ_OAUTH_* with the rating scope). Rating is 0–100 (MusicBrainz shows it as 1–5 stars in steps of 20; 0 removes your rating). Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE). Nothing is sent before confirmation. Data from MusicBrainz (https://musicbrainz.org), the open music encyclopedia.

ParametersJSON Schema
NameRequiredDescriptionDefault
mbidYesMBID of the entity to rate
entityYesEntity type to rate
ratingYesRating 0–100 (0 removes; 20/40/60/80/100 = 1–5 stars)
confirmTokenNoONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the annotations (idempotentHint, readOnlyHint=false), the description reveals critical behavior: OAuth requirement, the 0–100 scale mapping to 1–5 stars, the two confirmation modes (native prompt vs confirmToken fallback), and the guarantee that 'Nothing is sent before confirmation.' This adds substantial value over 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.

Conciseness5/5

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

The description is compact yet information-dense. It front-loads the core purpose, then moves to auth, scale, confirmation mechanics, and data source. Every sentence contributes; there is no filler or redundancy.

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?

The description covers the essentials for correct invocation: auth scope, rating semantics, confirmation behavior, and the two-step fallback. It does not specify the success response format or error cases, but given no output schema and the tool's moderate complexity, the provided information is sufficient for reliable selection and invocation.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds useful semantics beyond the schema: it explains the star/point mapping, that 0 removes the rating, and the full behavior of confirmToken (never on first call, never invented, never reused). This enriches the schema's parameter meanings.

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

Purpose5/5

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

The description opens with a specific verb+resource: 'Set YOUR rating for a MusicBrainz entity.' It clearly states the action (set rating), the target (MusicBrainz entity), and the scope (your own rating). This distinguishes it from sibling tools like musicbrainz_submit_tags and musicbrainz_modify_collection without ambiguity.

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?

Clear context is provided: the tool is for setting a user rating, requires OAuth with the 'rating' scope, and involves a confirmation flow. It does not explicitly name alternative tools or state when not to use it, but the purpose is distinct enough among siblings that an agent can infer correct usage.

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

musicbrainz_submit_tagsSubmit user tags to MusicBrainzA
Idempotent

Apply user tags to a MusicBrainz entity on YOUR account (needs OAuth: MUSICBRAINZ_OAUTH_* with the tag scope). Default vote: upvote adds the tags; downvote opposes them; withdraw removes your vote. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE). The preview shows the exact XML; nothing is sent before confirmation. Data from MusicBrainz (https://musicbrainz.org), the open music encyclopedia.

ParametersJSON Schema
NameRequiredDescriptionDefault
mbidYesMBID of the entity to tag
tagsYesTag names to apply
voteNoVote direction (default upvote)
entityYesEntity type to tag
confirmTokenNoONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the annotations, the description richly discloses behavior: the OAuth requirement and scope, vote semantics, the confirmation prompt vs. two-step fallback with confirmToken, the exact-XML preview, and the guarantee that nothing is sent before confirmation. This substantially exceeds the annotation data and gives an agent a precise behavioral model.

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

Conciseness4/5

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

The description is longer than average but front-loaded with the core purpose before moving to auth, vote semantics, and confirmation behavior. Each section serves a real need, though the attribution sentence and some confirmToken redundancy could be trimmed without loss.

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

Completeness5/5

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

Given the tool's high complexity — OAuth, vote behavior, confirmation modes, and repeat-call fallback — the description covers everything needed to invoke it correctly. It explains the fallback flow, what the preview contains, and what must never be done with confirmToken, so an agent has enough context even without an output schema.

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?

Input schema coverage is 100%, so the baseline is 3, but the description adds real semantic value beyond the schema: it explains what each vote value does, and it gives a detailed protocol for confirmToken (phase-1 response, repeat call, never first/invented/reused). This is useful meaning not encoded in the schema alone.

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

Purpose5/5

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

The description opens with a specific action ('Apply user tags to a MusicBrainz entity') and clearly scopes it to the user's own account, which distinguishes it from read-only lookup/browse/search siblings. It also names the three vote modes and their effects, making the tool's purpose unambiguous.

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

Usage Guidelines3/5

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

The description provides clear context for when tagging is appropriate — authenticated, account-specific action with OAuth and the 'tag' scope — but it never explicitly tells the agent when not to use this tool or how to choose between it and musicbrainz_submit_rating or modify_collection. Usage is implied rather than explicitly routed.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 3 tool updatesv1.2.1
    • Changedmusicbrainz_modify_collection2 fields changed
      • removedInput schema / properties / confirm
        Removed value: -{
        -  "description": "Must be true to proceed. Without this, the tool returns a preview.",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / confirmToken
        Added value: +{
        +  "description": "ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 \"confirmation-required\" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.",
        +  "type": "string"
        +}
    • Changedmusicbrainz_submit_rating2 fields changed
      • removedInput schema / properties / confirm
        Removed value: -{
        -  "description": "Must be true to proceed. Without this, the tool returns a preview.",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / confirmToken
        Added value: +{
        +  "description": "ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 \"confirmation-required\" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.",
        +  "type": "string"
        +}
    • Changedmusicbrainz_submit_tags2 fields changed
      • removedInput schema / properties / confirm
        Removed value: -{
        -  "description": "Must be true to proceed. Without this, the tool returns a preview.",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / confirmToken
        Added value: +{
        +  "description": "ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 \"confirmation-required\" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.",
        +  "type": "string"
        +}
  2. 9 tool updatesv1.0.0
    • Changedmusicbrainz_browse1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedmusicbrainz_cover_art1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedmusicbrainz_healthcheck1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedmusicbrainz_lookup1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedmusicbrainz_modify_collection1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedmusicbrainz_resolve1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedmusicbrainz_search1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedmusicbrainz_submit_rating1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedmusicbrainz_submit_tags1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
  3. 4 tool updatesv0.3.1
    • Changedmusicbrainz_browse1 field changed
      • addedInput schema / properties / view
        Added value: +{
        +  "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact strips image/avatar URLs from the response; \"full\" returns MusicBrainz's payload untouched. No field projection: this server has no verified record of which MusicBrainz fields matter, and inventing one would risk dropping a field a caller needs.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedmusicbrainz_lookup1 field changed
      • addedInput schema / properties / view
        Added value: +{
        +  "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact strips image/avatar URLs from the response; \"full\" returns MusicBrainz's payload untouched. No field projection: this server has no verified record of which MusicBrainz fields matter, and inventing one would risk dropping a field a caller needs.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedmusicbrainz_resolve1 field changed
      • addedInput schema / properties / view
        Added value: +{
        +  "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact strips image/avatar URLs from the response; \"full\" returns MusicBrainz's payload untouched. No field projection: this server has no verified record of which MusicBrainz fields matter, and inventing one would risk dropping a field a caller needs.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedmusicbrainz_search1 field changed
      • addedInput schema / properties / view
        Added value: +{
        +  "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact strips image/avatar URLs from the response; \"full\" returns MusicBrainz's payload untouched. No field projection: this server has no verified record of which MusicBrainz fields matter, and inventing one would risk dropping a field a caller needs.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
  4. 9 tool updatesv0.2.2
    • First observedmusicbrainz_browse
    • First observedmusicbrainz_cover_art
    • First observedmusicbrainz_healthcheck
    • First observedmusicbrainz_lookup
    • First observedmusicbrainz_modify_collection
    • First observedmusicbrainz_resolve
    • First observedmusicbrainz_search
    • First observedmusicbrainz_submit_rating
    • First observedmusicbrainz_submit_tags

TDQS

A4.4/5.0

Scored across 9 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: search, lookup by MBID, browse relationships, resolve URLs, cover art, health check, and three separate write operations (tags, rating, collections). No two tools overlap in function.

Naming Consistency4/5

All tools share the 'musicbrainz_' prefix and snake_case, and most are verb-led (browse, lookup, search, resolve, submit_tags, submit_rating, modify_collection). 'cover_art' and 'healthcheck' are nouns, creating a minor deviation from the verb-first pattern.

Tool Count5/5

Nine tools is well-scoped for a MusicBrainz client, covering read operations (search, lookup, browse, resolve, cover art, health check) and user-modifying operations (tags, ratings, collections) without unnecessary bloat.

Completeness4/5

The core read workflows and common user write actions are covered. Minor gaps include no way to list a user's own collections and no entity creation/editing, but these are edge use cases for a typical music lookup agent.

Maintenance

ActivityActive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Search artists, releases, recordings, works, and labels; traverse relationships; resolve ISRC/ISWC/barcode; fetch cover art via MCP. STDIO or Streamable HTTP.
    292 npm
    1
    Apache 2.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    An MCP server that enables searching books and authors, fetching editions, browsing subjects, and resolving cover images from Open Library.
    283 npm
    4
    Apache 2.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    An MCP server for the Last.fm API, exposing artist, album, track, chart, and user data as read-only tools. Supports optional writes, auth, and experimental methods over stdio or HTTP.
    MIT