360 Secure SkillHub
360 安全技能中心

musicbrainz-mcp

通过 MCP 工具封装 MusicBrainz /ws/2 API 与 Cover Art Archive:可按名称搜索艺术家、发行、录音等实体并获得 MBID,用 MBID 查询详情或浏览关联数据,获取封面图 URL、解析 musicbrainz.org 链接、健康检查;配置 OAuth 并可经用户确认后提交标签、评分和收藏修改。

chrischall
chrischall
热度 65.05
最近更新 2026-10-10 07:28:00
分类:搜索依赖:MCP 服务 / 第三方 API应用场景:研究 / 推荐 / API 集成

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add musicbrainz-mcp
Metadata
name
musicbrainz-mcp
description
Search and browse the MusicBrainz music encyclopedia (artists, releases, recordings, labels, works), fetch Cover Art Archive images, resolve musicbrainz.org URLs, and — with OAuth configured — submit your own tags, ratings, and collection edits. Use when the user asks about music metadata, discographies, album/artist/recording details, MBIDs, cover art, or wants to tag/rate music on MusicBrainz.

MusicBrainz

This server exposes the MusicBrainz /ws/2 API and the Cover Art Archive as MCP tools. Reads need no credentials; writes need OAuth (see the repo README).

Picking the right tool

  • Find something by name → musicbrainz_search with entity + a Lucene query (+ view?). Plain text matches the name; fielded queries work too (artist:"Miles Davis" AND country:US). Returns MBIDs.
  • Get full detail for a known MBID → musicbrainz_lookup with entity + mbid (+ view?). Add inc for linked data, e.g. ["releases","release-groups"] on an artist, ["recordings","labels"] on a release, ["url-rels","tags"] on most entities.
  • Enumerate a relationship → musicbrainz_browse: every release by an artist (entity:"release", linkedBy:"artist", mbid:<artist>), recordings on a release, releases in a collection, etc. Takes view? too. This is the complete paged set (max 100/page), unlike search's fuzzy ranking.
  • Cover art → musicbrainz_cover_art with a release or release-group MBID. Returns image URLs (front/back/thumbnails); errors clearly when none exist.
  • A pasted musicbrainz.org link → musicbrainz_resolve with the url (+ view?).
  • Check it's working → musicbrainz_healthcheck.

view? is optional everywhere it appears and defaults to compact — see Response shape.

Typical flow

Search to get an MBID, then lookup/browse for detail:

  1. musicbrainz_search { entity: "artist", query: "Radiohead" } → MBID
  2. musicbrainz_browse { entity: "release-group", linkedBy: "artist", mbid: <MBID>, limit: 100 } → discography
  3. musicbrainz_cover_art { entity: "release-group", mbid: <RG-MBID> } → album art

Writes (OAuth, confirmation-gated)

musicbrainz_submit_tags, musicbrainz_submit_rating, and musicbrainz_modify_collection modify the user's own MusicBrainz account. Each asks the user to confirm first: a confirmation prompt where the client supports one (unless the server sets MCP_CONFIRM_ELICITATION=off); otherwise the first call sends nothing and returns status: "confirmation-required" with a preview and a confirmToken — show the preview to the user and only repeat the same call with that confirmToken after they approve. A token works once, and changing any argument invalidates it (DRAFT_CHANGED: re-confirm the fresh preview). They require MUSICBRAINZ_OAUTH_* to be configured.

Response shape (view)

musicbrainz_lookup, musicbrainz_search, musicbrainz_browse and musicbrainz_resolve take view: "compact" | "full", and compact is the default — you get the slim shape without asking, and an unrecognised value falls back to it rather than erroring.

Compact here is media stripping, not a field projection. It removes keys named like a picture — image, images, thumbnail/thumbnails, logo, icon, banner, avatar, and their …Url/…Link/…Uri/…Src spellings — plus any string value that is a URL ending in an image extension. Nothing else is touched. This server keeps no hand-written field list, deliberately: there is no captured fixture of a MusicBrainz payload here, so nothing could honestly say which of its fields are noise, and an invented list would hand you a record with holes in it that reads like a verified answer. Do not expect compact to name the fields it kept — it kept all of them.

The consequence that will surprise you: on most calls compact and full come back identical. MusicBrainz's /ws/2 JSON carries almost no pictures — they live in the Cover Art Archive, behind musicbrainz_cover_art, which has no view at all. A release's cover-art-archive block survives compact whole (artwork, count, front, back): those are facts about the art, not the art, and none of those keys is a picture name.

The one place compact does bite is inc: ["url-rels"]. The bare-image-URL rule matches on the value, not the key, so a relation whose target ends in .jpg/.png comes back as url: { id } with its resource gone, while the wikidata relation beside it keeps its resource untouched. If you are chasing image relations, ask for view: "full".

view: "full" returns MusicBrainz's payload untouched. One shape note: musicbrainz_resolve wraps it as {entity, mbid, data} — data is the lookup payload verbatim — because resolve is musicbrainz_lookup with the MBID parsed out of a URL, and answering it in a different shape would make the response depend on which of two identical routes you took.

There is deliberately no raw rung. Nothing is rewritten on the way out here, so full already is the unprojected upstream payload; a third value would silently alias it. view is also never forwarded to MusicBrainz — it is consumed by this server, not added to the query string.

The other five tools take no view, for three different reasons:

  • musicbrainz_cover_art — its product IS the image URLs. Compact strips images/thumbnails, which on this tool would not shrink the response, it would empty it.
  • musicbrainz_healthcheck — {ok, reachable, oauth_configured, hint} is already narrower than any projection.
  • musicbrainz_submit_tags / musicbrainz_submit_rating / musicbrainz_modify_collection — a write's response is a receipt (the confirmation preview, or {submitted, …}): nothing to strip and everything to keep.

Notes

  • MusicBrainz limits clients to ~1 request/second; the server paces itself, so a big browse may take a few seconds — that's expected, not an error.
  • Entity types: area artist event genre instrument label place recording release release-group series work url.