The MusicBrainz MCP server provides 22 read-only tools with mostly consistent naming (verb_noun pattern: search_*, get_*, browse_*) and clear descriptions. However, there are critical gaps: (1) Output schemas are not visible in the source code, only input schemas are documented. (2) Many parameters lack type specifications or descriptions. (3) Error handling is minimal, with generic fallback messages rather than actionable recovery guidance. (4) No tool annotations beyond read-only hints. The tools are well-structured for pagination (limit/offset), but the lack of documented output schemas and incomplete parameter details prevent a higher score. The server demonstrates good naming hygiene and reasonable descriptions (100-150 chars on average), placing it in the 'fair' range.
Browse entities by linked ID (e.g., all releases by an artist, all recordings in a release).
Get the track listing for an album/release by MusicBrainz ID.
Get detailed information about an area by MusicBrainz ID.
Get detailed information about an artist by MusicBrainz ID.
Get detailed information about an event by MusicBrainz ID.
Get detailed information about a label by MusicBrainz ID.
Get detailed information about a place by MusicBrainz ID.
Output schemas not documented in source code. Only input schemas are visible; LLMs cannot know what fields to expect in responses, preventing efficient chaining and downstream tool selection.
Error handling is minimal. The cached_tool decorator catches MusicBrainzError and generic exceptions with generic fallback messages ('An unexpected error occurred. Check server logs for details.'). LLMs cannot determine if an error is retryable, user-fixable, or fatal, or what corrective action to take.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Get detailed information about a recording by MusicBrainz ID.
Get detailed information about a release by MusicBrainz ID, including tracklist.
Get detailed information about a release group by MusicBrainz ID, including all releases in the group.
Get detailed information about a work by MusicBrainz ID.
Search for areas by name or other criteria using a Lucene query.
Search for artists by name or other criteria using a Lucene query.
Search for events by name or other criteria using a Lucene query.
Search for instruments by name or other criteria using a Lucene query.
Search for labels by name or other criteria using a Lucene query.
Search for places by name or other criteria using a Lucene query.
Search for recordings by name or other criteria using a Lucene query.
Search for release groups by name or other criteria using a Lucene query.
Search for releases by name or other criteria using a Lucene query.
Search for series by name or other criteria using a Lucene query.
Search for works by name or other criteria using a Lucene query.
Tool annotation 'destructiveHint' is missing. While all tools are read-only (correctly marked 'readOnlyHint'), the annotation map also lacks 'idempotentHint' in the actual tool registration, even though the code declares TOOL_ANNOTATIONS includes idempotentHint.
Parameter 'includes' in get_artist_details is an array of strings with no enum or documented valid values. LLMs cannot know which includes are valid (e.g., 'releases', 'recordings', 'relationships') without trial and error.
STDIO-only transport. The server uses STDIO for MCP communication and offers Streamable HTTP via a separate http_server.py entry point, but the primary deployment is STDIO. This caps remoteness and testability.