Skip to main content
Glama
chrischall

setlist-mcp

by chrischall

setlist-mcp

CI npm license

MCP server for setlist.fm — search concert setlists, artists, venues, tours, and cities from Claude via natural language. Mostly read-only (the setlist.fm REST API exposes no write endpoints), plus authenticated "I was there" attendance actions via your logged-in session.

This project was developed and is maintained by AI (Claude). Use at your own discretion.

What it does

Exposes 20 tools — 18 read-only over the setlist.fm REST API, plus 2 authenticated "I was there" attendance actions:

Area

Tools

Artists

setlist_search_artists, setlist_get_artist, setlist_get_artist_setlists

Setlists

setlist_search_setlists, setlist_get_setlist, setlist_get_setlist_version

Venues

setlist_search_venues, setlist_get_venue, setlist_get_venue_setlists

Cities & countries

setlist_search_cities, setlist_get_city, setlist_search_countries

Users

setlist_get_user, setlist_get_user_attended, setlist_get_user_edited

Resolve

setlist_resolve_concerts

Attendance (authenticated writes)

setlist_mark_attended, setlist_unmark_attended

Utility

setlist_healthcheck, setlist_id_from_url

Related MCP server: mcp-phish

Setup

Get a free API key (non-commercial use) at setlist.fm/settings/api, then add the server to your .mcp.json:

{
  "mcpServers": {
    "setlist": {
      "command": "npx",
      "args": ["-y", "setlist-mcp"],
      "env": {
        "SETLIST_API_KEY": "your-api-key-here"
      }
    }
  }
}

Optional: SETLIST_ACCEPT_LANGUAGE (one of en, es, fr, de, pt, tr, it, pl) localizes city/country names.

The attendance tools (setlist_mark_attended / setlist_unmark_attended) need your logged-in www.setlist.fm session. Either set SETLIST_SESSION_COOKIE to the Cookie header of a logged-in request, or install ContextMint Bridge (Chrome: load the chrome zip unpacked; Safari isn't available yet — it will ship inside the ContextMint app, which has no public download — so use Chrome for now) and stay signed in to www.setlist.fm — the server lifts the session cookie from your browser on first use. Set SETLIST_DISABLE_FETCHPROXY=1 to turn the browser fallback off.

ContextMint Bridge is the fetchproxy browser extension under its new name, from the same maintainer — fetchproxy's own README points to it. Its source is public at nullnet-app/contextmint-bridge: build it yourself, or check a release zip against the .sha256 file published beside it (shasum -a 256 -c contextmint-bridge-chrome-<version>.zip.sha256).

See skills/setlist/SKILL.md for from-source setup, the full tool reference, and example flows.

Attribution & terms

Use is governed by the setlist.fm API terms. In short:

  • Attribute setlist.fm. Every result carries a url; surface it as a followable source link (no nofollow) wherever the data is shown. The tool descriptions instruct the model to do this, and results pass the url through verbatim.

  • Non-commercial only under a free key — commercial use requires setlist.fm's permission.

  • No persistent caching — this server makes a live API call per tool invocation and keeps no datastore. Please don't add one.

  • Keep your API key private — it lives in SETLIST_API_KEY (.env is gitignored) and never appears in tool output.

Development

npm install
npm run build   # tsc + esbuild bundle → dist/
npm test        # tsc typecheck + vitest

For local runs, put SETLIST_API_KEY=<key> in a .env file (gitignored) next to the project root.

See CLAUDE.md for architecture, conventions, and gotchas.

License

MIT

Available Tools

20 tools
setlist_get_artistA
Read-onlyIdempotent

Get a setlist.fm artist by their MusicBrainz ID (mbid). Results include a setlist.fm url; when you present this data, cite it as a clickable source link to setlist.fm (their API terms require followable attribution — no nofollow). If a result has no url, link to https://www.setlist.fm instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
mbidYesArtist's MusicBrainz ID (mbid)
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 Setlist.fm's payload untouched. No field projection: this server has no verified record of which Setlist.fm fields matter, and inventing one would risk dropping a field a caller needs.

TDQS

A3.9/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 safety. The description adds non-obvious behavioral guidance on output: cite the returned url as a followable link, and fall back to the setlist.fm homepage when url is absent. This is genuinely useful, non-annotation context for how to render the result.

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-loaded with the core action and identifier, then pivots to attribution instructions that are relevant but slightly tangential to the lookup itself. Overall tight, no fluff.

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?

A read-only lookup with full schema coverage and no output schema. The definition covers the essential call and adds attribution behavior. It doesn't describe what fields a result contains, but with the full/compact enum documented in the schema and no output schema required, this is close to complete.

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 coverage is 100%, so both the mbid and the compact/full `view` enum are already documented in the schema. The description adds no further parameter semantics. Baseline 3 is correct when the schema does the heavy lifting.

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?

Specific verb 'Get' plus a precise resource: a setlist.fm artist, identified by the MusicBrainz ID (mbid). This distinguishes it cleanly from setlist_search_artists (search vs. direct lookup) and setlist_get_artist_setlists (artist vs. their setlists).

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 implies a direct-lookup use case by requiring an mbid but gives no explicit when-to-use guidance versus setlist_search_artists or setlist_id_from_url. A caller has to infer the alternative routes from sibling names alone.

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

setlist_get_artist_setlistsA
Read-onlyIdempotent

Get an artist's setlists (most recent first) by their MusicBrainz ID (mbid). Paginated via p. Results include a setlist.fm url; when you present this data, cite it as a clickable source link to setlist.fm (their API terms require followable attribution — no nofollow). If a result has no url, link to https://www.setlist.fm instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
pNoResult page number (defaults to 1)
mbidYesArtist's MusicBrainz ID (mbid)
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 Setlist.fm's payload untouched. No field projection: this server has no verified record of which Setlist.fm fields matter, and inventing one would risk dropping a field a caller needs.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/openWorld, so the bar is lower. The description still adds real behavior: results are sorted most recent first, pagination via `p`, and an attribution constraint driven by Setlist.fm API terms (followable link, no nofollow) that appears nowhere in structured fields.

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 core action in the first sentence, then handles pagination and attribution compactly. The attribution sentence is somewhat long but carries an externally mandated requirement, so it earns its space.

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 no output schema, the description covers the return shape (a url field), ordering, and pagination, and instructs on presentation. It omits error behavior for an unknown mbid and rate-limit expectations, but is otherwise adequate for a read-only getter.

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 coverage is 100%, so the schema already documents mbid, p, and the compact/full `view` enum in full detail. The description only echoes pagination and the mbid, adding no semantics beyond the schema — baseline 3.

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

Purpose4/5

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

States a specific verb and resource ('Get an artist's setlists') plus the identifier type (MusicBrainz ID) and the ordering ('most recent first'). It is distinguishable from setlist_get_artist (artist metadata) and setlist_search_setlists, though it never explicitly names those alternatives.

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?

Implies usage by requiring an mbid and gives conditional presentation instructions (cite the url as a followable link), but says nothing about when to choose this tool over setlist_get_artist or setlist_search_setlists. The guidance present is about output handling, not tool selection.

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

setlist_get_cityA
Read-onlyIdempotent

Get a city by its geoId. Results include a setlist.fm url; when you present this data, cite it as a clickable source link to setlist.fm (their API terms require followable attribution — no nofollow). If a result has no url, link to https://www.setlist.fm instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
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 Setlist.fm's payload untouched. No field projection: this server has no verified record of which Setlist.fm fields matter, and inventing one would risk dropping a field a caller needs.
geoIdYesCity's geoId

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint, idempotentHint, openWorldHint), so the bar is lower. The description adds genuinely non-obvious behavioral context: results carry a `url` that must be cited as a followable link per setlist.fm API terms, plus the fallback to the site root when `url` is absent.

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?

Two sentences, front-loaded with the operation and identifier, then the attribution obligation. Nothing is padded; every clause carries a requirement the caller must honor.

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?

No output schema exists, and the description partially compensates by disclosing that results contain a `url` and what to do when it is missing. For a simple 2-parameter read that is close to sufficient, though return shape beyond `url` remains unspecified.

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% and the `view` parameter already carries a detailed enum explanation in the schema, so the baseline is 3. The description only reinforces that `geoId` is the lookup key; it adds no syntax or format detail beyond the schema.

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

Purpose4/5

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

States a specific verb and resource ("Get a city by its geoId") and the lookup-by-identifier framing implicitly separates it from setlist_search_cities. It does not name that sibling explicitly, so an agent must infer the lookup-vs-search distinction.

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 phrase "by its geoId" implies this is the direct-lookup path versus a search tool, but no alternative is named and no when-not-to-use condition is given. Usage is implied rather than stated.

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

setlist_get_setlistA
Read-onlyIdempotent

Get a setlist.fm setlist by its ID, including the full song list and event details. A setlist's songs live in sets.set[]; each set may have an encore number (1 = first encore) and a name (e.g. an acoustic set or a full album). Each song may carry: tape: true (pre-recorded intro/outro/interlude — not actually performed), cover (the original artist when it is a cover), with (a guest performer), and info (a note like "acoustic" or "first time live"). Results include a setlist.fm url; when you present this data, cite it as a clickable source link to setlist.fm (their API terms require followable attribution — no nofollow). If a result has no url, link to https://www.setlist.fm instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
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 Setlist.fm's payload untouched. No field projection: this server has no verified record of which Setlist.fm fields matter, and inventing one would risk dropping a field a caller needs.
setlistIdYesSetlist ID (e.g. 63de4613)

TDQS

A4.1/5.0
Behavior5/5

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

With annotations covering the safety profile, the description still adds a great deal: it explains the sets/songs data model (encore numbering, set names, tape/cover/with/info semantics) so the agent can interpret results, and it states a hard external constraint — setlist.fm's attribution/url linking requirement — that appears nowhere in structured fields.

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 purpose is front-loaded in the first clause, and the remaining sentences each carry distinct information (data model, field flags, attribution requirement). It is dense but only mildly over-extended by the enumerated song flags, which read more like reference documentation than call-time guidance.

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 no output schema, the description does real work explaining the response shape (sets.set[], encore, per-song fields, url). It stops short of enumerating top-level setlist fields, but combined with the annotations and complete schema coverage, an agent has enough to call and use the tool 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% and the view enum is fully documented in the schema, so the description correctly does not restate it. The description adds no syntax or format detail beyond what the schema already provides, so the baseline 3 applies.

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 and resource — 'Get a setlist.fm setlist by its ID' — and immediately scopes the return to 'the full song list and event details.' The 'by its ID' phrasing cleanly separates it from setlist_search_setlists and setlist_get_setlist_version.

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?

There is an implicit precondition (you must already have a setlist ID), but no explicit when-to-use guidance and no named alternative such as setlist_search_setlists or setlist_get_setlist_version. Usage is inferred rather than stated.

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

setlist_get_setlist_versionA
Read-onlyIdempotent

Get a specific historical version of a setlist by its version ID. Setlists are wiki-edited; each edit has a version ID returned in a setlist's versionId field. A setlist's songs live in sets.set[]; each set may have an encore number (1 = first encore) and a name (e.g. an acoustic set or a full album). Each song may carry: tape: true (pre-recorded intro/outro/interlude — not actually performed), cover (the original artist when it is a cover), with (a guest performer), and info (a note like "acoustic" or "first time live"). Results include a setlist.fm url; when you present this data, cite it as a clickable source link to setlist.fm (their API terms require followable attribution — no nofollow). If a result has no url, link to https://www.setlist.fm instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
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 Setlist.fm's payload untouched. No field projection: this server has no verified record of which Setlist.fm fields matter, and inventing one would risk dropping a field a caller needs.
versionIdYesSetlist version ID

TDQS

A4.2/5.0
Behavior5/5

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

With no output schema, the description carries the burden of disclosing what comes back: sets.set[] structure, encore numbering, set names, and per-song flags (tape, cover, with, info). It also adds a non-obvious contractual obligation (attribution must be a followable link, no nofollow) that no annotation conveys.

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?

Purpose is front-loaded in one sentence, followed by domain field semantics that each earn their place. The attribution paragraph is slightly long but is a compliance requirement rather than filler.

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 read-only lookup with no output schema, the description covers purpose, how to obtain the ID, the shape and meaning of returned fields, and the required citation behavior — nothing an agent needs to call or present this correctly is missing.

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%, including a detailed enum explanation for view, so the schema already documents both parameters. The description adds only the provenance of versionId, not syntax, format, or ID-shape guidance beyond what the schema states.

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 (Get), resource (setlist version) and narrowing qualifier (a specific historical version, by version ID). The word 'historical' implicitly separates it from sibling setlist_get_setlist, which returns the current version.

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?

Explains where the required versionId comes from ('each edit has a version ID returned in a setlist's versionId` field'), which is real usage guidance for obtaining the parameter. However it never states when to prefer this over setlist_get_setlist, nor any exclusions or prerequisites.

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

setlist_get_userA
Read-onlyIdempotent

Get a setlist.fm user's public profile by their userId (their setlist.fm username). Results include a setlist.fm url; when you present this data, cite it as a clickable source link to setlist.fm (their API terms require followable attribution — no nofollow). If a result has no url, link to https://www.setlist.fm instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
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 Setlist.fm's payload untouched. No field projection: this server has no verified record of which Setlist.fm fields matter, and inventing one would risk dropping a field a caller needs.
userIdYessetlist.fm userId (username)

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so safety is covered. The description adds genuinely non-derivable context: setlist.fm API terms mandate followable attribution, and it specifies a concrete fallback link when the returned `url` is absent.

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?

Purpose is front-loaded in the first clause, and the remaining sentences carry a real contractual requirement rather than filler. It is slightly citation-heavy for a profile-lookup tool, but nothing is redundant enough to cut.

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 no output schema, the description partially compensates by naming a key return field (`url`) and stating the fallback when it is missing. Combined with annotations covering safety and the 100%-covered input schema, an agent has enough 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% and the schema already states 'setlist.fm userId (username)', so the description's parenthetical restatement adds nothing new. No additional syntax or format detail is supplied beyond the schema.

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

Purpose4/5

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

Names a specific verb and resource ('Get a setlist.fm user's public profile') and maps the identifier ('by their userId'). It is clearly distinct from the user-activity siblings (setlist_get_user_attended / setlist_get_user_edited), though it does not name those alternatives explicitly.

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

Usage Guidelines2/5

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

Reads as a single-purpose fetch with no when-to-use guidance, no prerequisites, and no pointer to alternatives for user-related data. The only imperative guidance given is about citation formatting, not about when this tool is the right choice.

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

setlist_get_user_attendedA
Read-onlyIdempotent

Get the concerts a setlist.fm user has marked as attended. Paginated via p. Results include a setlist.fm url; when you present this data, cite it as a clickable source link to setlist.fm (their API terms require followable attribution — no nofollow). If a result has no url, link to https://www.setlist.fm instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
pNoResult page number (defaults to 1)
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 Setlist.fm's payload untouched. No field projection: this server has no verified record of which Setlist.fm fields matter, and inventing one would risk dropping a field a caller needs.
userIdYessetlist.fm userId (username)

TDQS

A3.9/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnlyHint, idempotentHint, openWorldHint), and the description adds genuinely non-obvious context: pagination is controlled by `p`, and results must be presented with followable link attribution per setlist.fm API terms, with a fallback URL when `url` is missing. That legal/presentation constraint is not derivable from structured fields and is the strongest part of the definition.

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?

Purpose is front-loaded in the first sentence, followed by pagination mechanics and then the attribution requirement. The attribution guidance is somewhat verbose but each clause carries a concrete instruction, so little is wasted.

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, single-required-param tool with no output schema, the description covers scope, pagination, and how to handle the returned `url` (including the no-url case). It omits result ordering and the practical effect of `view` on output, but those are largely covered by the schema and are minor gaps.

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 `p`, `view`, and `userId` in detail, including the compact/full distinction. The description only restates pagination-via-`p`, adding no syntax or format detail beyond the schema, so baseline 3 applies.

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 (get) and resource (concerts a setlist.fm user has marked as attended), which cleanly separates it from siblings such as setlist_get_user_edited and setlist_get_user. An agent can identify exactly what it returns 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 Guidelines3/5

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

The description implies usage context (fetching a user's attended concerts, paginated with `p`) and gives attribution handling rules, but never states when to prefer it over alternatives like setlist_get_user_edited, setlist_resolve_concerts, or setlist_mark_attended. Usage is inferred rather than explicit.

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

setlist_get_user_editedA
Read-onlyIdempotent

Get the setlists a setlist.fm user has created or edited. Paginated via p. Results include a setlist.fm url; when you present this data, cite it as a clickable source link to setlist.fm (their API terms require followable attribution — no nofollow). If a result has no url, link to https://www.setlist.fm instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
pNoResult page number (defaults to 1)
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 Setlist.fm's payload untouched. No field projection: this server has no verified record of which Setlist.fm fields matter, and inventing one would risk dropping a field a caller needs.
userIdYessetlist.fm userId (username)

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds the attribution requirement and pagination behavior, but does not mention rate limits or response shape beyond the `view` parameter, which the schema handles.

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?

Three tight sentences front-loaded with the core operation, then pagination, then attribution. No wasted words. The attribution instruction is a necessary interface policy rather than filler.

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 retrieval tool with no output schema, the description covers the operation, pagination, and output-link attribution well. It could note authentication requirements (if any) and the default return shape, but the annotations and schema cover most operational details.

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 all three parameters (userId, p, view) are already documented in the schema. The description adds only the meaning of `p` and re-states the same information, providing no additional parameter semantics. 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?

States a specific verb and resource ('Get the setlists a user has created or edited'), scoping it clearly to the user-edited subset of setlists. This distinguishes it from setlist_get_user (user profile) and setlist_get_user_attended (attendance history) without needing 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 Guidelines3/5

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

Mentions pagination via `p` and how to cite results, implying when to page through data, but never states when to use this over setlist_get_user_attended or other siblings. Usage context is implied rather than explicit.

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

setlist_get_venueA
Read-onlyIdempotent

Get a setlist.fm venue by its ID. Results include a setlist.fm url; when you present this data, cite it as a clickable source link to setlist.fm (their API terms require followable attribution — no nofollow). If a result has no url, link to https://www.setlist.fm instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
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 Setlist.fm's payload untouched. No field projection: this server has no verified record of which Setlist.fm fields matter, and inventing one would risk dropping a field a caller needs.
venueIdYesVenue ID

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so safety/idempotency are covered. The description adds genuinely non-obvious behavioral context the annotations cannot express: the API's attribution terms, that the result carries a `url`, and the nofollow requirement — a real licensing obligation an agent must honor.

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 purpose is front-loaded in the first sentence, and the attribution caveats follow. It is appropriately sized for a single-resource lookup, with only mild redundancy in the attribution sentence, which nonetheless earns its place by encoding a required behavior.

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 read-only lookup tool with full annotation coverage, complete schema descriptions, and no output schema, nothing an agent needs to call it correctly is missing. The description even pre-empts the attribution requirement on the `url` field that the absent output schema cannot convey.

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 are fully documented in the schema (including the detailed `view` enum semantics and the no-projection rationale). The description adds nothing about `venueId` or `view`, so the baseline 3 is correct.

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

Purpose4/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 ("Get a setlist.fm venue by its ID"), which cleanly distinguishes it from lookup-by-other-key siblings like setlist_get_city and from setlist_search_venues. It is clear and unambiguous, though it does not explicitly name the sibling it complements.

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?

Usage is implied by "by its ID" (a direct-lookup tool, contrasting with the search_* siblings), but there is no explicit when-to-use/when-not guidance or a pointer to setlist_search_venues when the ID is unknown. The attribution instructions govern output presentation, not tool selection, so the selection context remains inferred.

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

setlist_get_venue_setlistsA
Read-onlyIdempotent

Get setlists performed at a venue, by venue ID (most recent first). Paginated via p. Results include a setlist.fm url; when you present this data, cite it as a clickable source link to setlist.fm (their API terms require followable attribution — no nofollow). If a result has no url, link to https://www.setlist.fm instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
pNoResult page number (defaults to 1)
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 Setlist.fm's payload untouched. No field projection: this server has no verified record of which Setlist.fm fields matter, and inventing one would risk dropping a field a caller needs.
venueIdYesVenue ID

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover readOnly/openWorld/idempotent, and the description adds real behavior beyond them: pagination via `p`, most-recent-first ordering, and the setlist.fm attribution obligation (followable link, no nofollow, fallback URL when `url` is absent). That licensing/attribution constraint is operational context an agent would otherwise miss.

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 purpose and ordering, then the attribution rule, with no filler. The attribution sentence is long but carries a concrete requirement, so it earns its space.

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 no output schema, the description usefully names a key return field (`url`) and the ordering, and the schema covers the `view` shape. It leaves the fuller response structure unexplained, but that gap is small for a paginated read tool.

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 `venueId`, `p`, and the compact/full `view` semantics in detail. The description only echoes pagination, adding no format or meaning beyond what the schema provides; baseline 3 applies.

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 and resource ('Get setlists performed at a venue, by venue ID') plus the ordering guarantee (most recent first). An agent can distinguish this from setlist_get_artist_setlists and setlist_get_city simply from the scoping key.

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 by-venue-ID framing implies when this tool applies, but no sibling is named as an alternative and no exclusions or prerequisites (e.g. 'use setlist_search_venues first to resolve the ID') are given. Usage is inferable rather than stated.

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

setlist_healthcheckVerify setlist.fm API key + connectivityA
Read-onlyIdempotent

Confirm the API key is configured and works by calling the setlist.fm countries endpoint. Reports {ok, authenticated, country_count} with a plain-English hint distinguishing "no key" vs "bad key" vs "API error". Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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 genuine value beyond these: the specific endpoint called, the return shape {ok, authenticated, country_count}, and the plain-English hint distinguishing 'no key' vs 'bad key' vs 'API error'. The trailing 'Read-only.' repeats the annotation and adds no new information, but the rest is substantive.

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?

Two tight sentences that front-load the verb and resource, with the return format and failure modes in the second sentence. The only waste is the trailing 'Read-only.', which duplicates the readOnlyHint annotation and could be dropped.

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 tool with no output schema and strong annotations, this description is complete: it covers purpose, the exact mechanism, the return values, failure-mode disambiguation, and safety. Nothing an agent needs to invoke it correctly is missing.

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, so the baseline is 4 and the description has no parameter burden to carry. It appropriately explains the internal mechanism (calling the countries endpoint) without needing to document any inputs.

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 ('Confirm'), a specific resource ('setlist.fm countries endpoint'), and the outcome being verified ('API key is configured and works'). The purpose is unambiguous and clearly distinct from all 21 sibling tools, none of which perform health checks.

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 title 'Verify setlist.fm API key + connectivity' provides clear context for when to use this tool, and the description reinforces that it is a diagnostic/verification tool rather than a data-query tool. However, it never explicitly names alternatives or states exclusion conditions (e.g., 'use before other setlist calls'), leaving the when-to-use guidance implicit rather than stated.

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

setlist_id_from_urlExtract a setlist ID from a setlist.fm URLA
Read-onlyIdempotent

Parse the setlist ID out of a setlist.fm setlist URL so you can paste a link instead of hunting for the ID. Returns {setlistId} (the trailing hex token before .html), ready to feed into setlist_get_setlist / setlist_mark_attended. Scoped to /setlist/ pages — artist (/setlists/) and venue (/venue/) URLs are rejected. Tolerates http/https, with/without www, trailing slash, query/fragment, and a missing .html. Pure local parsing — no network call. Errors if no ID can be parsed.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesA setlist.fm setlist URL, e.g. https://www.setlist.fm/setlist/.../...-4ba8a766.html

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, and the description adds valuable context: 'Pure local parsing — no network call' and 'Errors if no ID can be parsed'. It also details input tolerance (http/https, www, trailing slash, etc.) and scoping constraints, enriching the behavioral profile beyond the structured fields.

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 five sentences, each serving a purpose: purpose, output, scope, tolerances, and error handling. It is front-loaded with the primary function and contains no fluff or redundant phrases.

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 simple parsing tool with one parameter, the description fully covers what it does, when to use it, what it returns, input constraints, and failure modes. It names downstream tools and explicitly states it's a local operation, leaving no critical gaps 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.

Parameters4/5

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

With 100% schema coverage, the schema already describes the url parameter well, but the description adds semantics about accepted URL forms, rejected page types, and error behavior. This goes beyond the schema example, giving the agent a richer understanding of the parameter's constraints.

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 verb 'Parse' and the resource 'setlist ID out of a setlist.fm setlist URL', and explicitly distinguishes this utility from sibling tools by focusing on URL-to-ID extraction. It also mentions the output format and downstream use, making the tool's 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 Guidelines4/5

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

The description explains when to use this tool ('paste a link instead of hunting for the ID') and names the downstream tools it feeds into. It also explicitly states exclusions (artist and venue URLs are rejected), which clarifies when not to use it, though it doesn't explicitly list alternative tools for those cases.

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

setlist_mark_attendedA
Idempotent

Record on YOUR setlist.fm account that you attended a show — the site's "I was there" marker — by setlist ID. Authenticated via your setlist.fm session — SETLIST_SESSION_COOKIE, or a signed-in browser tab via the fetchproxy bridge. Idempotent: a no-op if already marked. Reversible with setlist_unmark_attended. Toggles attendance and verifies by re-reading the setlist page. Returns attended, changed and verified. verified: true means the page shows the requested state. If verified is false, the toggle could not be checked: attended holds the state the re-read saw, or null if the page was unreadable, and changed is false — check the show on setlist.fm before reporting success. Results include a setlist.fm url; when you present this data, cite it as a clickable source link to setlist.fm (their API terms require followable attribution — no nofollow). If a result has no url, link to https://www.setlist.fm instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
setlistIdYesSetlist ID (e.g. from setlist_search_setlists / resolve_concerts)

TDQS

A4.4/5.0
Behavior5/5

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

Goes well beyond the annotations (which only declare idempotent, non-destructive, open-world). It discloses the auth mechanism (SETLIST_SESSION_COOKIE or fetchproxy bridge), the idempotent no-op semantics, the verify-by-re-read behavior, the meaning of verified/attended/changed, the unreadable-page failure mode, and an attribution obligation. This is exactly the behavioral context an agent needs.

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-loaded with the core action, then layers auth, idempotency, verification semantics and attribution. Every sentence earns its place, though the return-value and attribution clauses make it longer than strictly minimal.

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 no output schema, the description fully compensates by documenting the returned fields (attended, changed, verified), their semantics, the failure mode, and the citation requirement. Nothing an agent needs to call and correctly report this tool is missing.

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?

Only one parameter (setlistId) at 100% schema coverage, so the schema already documents it fully, and the description's 'by setlist ID' adds no new syntax or format detail. Baseline 3 is appropriate when the schema carries the parameter burden.

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 (record attendance on your setlist.fm account) and immediately disambiguates from the sibling setlist_unmark_attended by naming it as the reversal path. An agent can distinguish it from other setlist_* tools without opening a 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?

Clearly establishes the context (mark attendance for a show) and names the alternative for the opposite action (setlist_unmark_attended). It also notes idempotent no-op behavior, which informs the call. It stops short of explicit when-not guidance, but the routing is clear.

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

setlist_resolve_concertsA
Read-onlyIdempotent

Resolve many concerts to their setlists in ONE call (instead of 2+ per show). Given up to 24 {artist, date, city?, venue?}, returns the best-match setlist for each — {setlistId, url, eventDate, artist, venue, city, tour, songCount, hasSongs} — plus a {matched, stubs, tourReferenced, unmatched, pending, errored} summary. For each: searches artist + date (narrowed by your city/venue), and on a miss falls back to a relevance artist lookup (by mbid) and a punctuation-normalized name so format variants still resolve. hasSongs: false flags an empty stub page (no songs logged on setlist.fm). When a show is a stub, if the act toured a repeating set the result also includes a tourReference — a populated setlist from the SAME tour on a different date (with songs + its own url), clearly labeled as a reference, NOT this exact show (set tourFallback: false to skip these extra lookups). Calls are paced to setlist.fm's ~2 req/sec limit; if a big batch can't finish within the time budget the rest come back pending: true (re-call with just those) rather than timing out. A concert whose lookup fails upstream comes back with match: null and an error message (counted in errored) while the rest of the batch still resolves — re-call with just those. A missing or rejected API key (401/403) fails the whole call at once instead, since no concert could resolve. Keep batches ≤24. Results include a setlist.fm url; when you present this data, cite it as a clickable source link to setlist.fm (their API terms require followable attribution — no nofollow). If a result has no url, link to https://www.setlist.fm instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
concertsYesConcerts to resolve (1–24 per call)
tourFallbackNoFor empty stubs, also fetch a same-tour reference setlist (default true). Set false to skip the extra lookups.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations cover only safety (readOnly/openWorld/idempotent), but the description goes far beyond: ~2 req/sec pacing against setlist.fm, time-budget exhaustion returning `pending: true` instead of timing out, per-item `match: null` errors that don't sink the batch, whole-call 401/403 failure on bad API key, and the `tourReference` semantics (a same-tour setlist from a different date, explicitly NOT this show). This is exactly the behavioral context annotations cannot carry.

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-loaded with purpose and return shape, then layered failure/edge-case detail in a logical order. Dense but nearly every clause carries operational value. Minor waste: 'Keep batches ≤24' restates the schema's maxItems: 24, and some sentences are overloaded with em-dashes.

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?

No output schema exists, so the description carries the full burden of describing returns — and it does, enumerating per-concert fields (`setlistId, url, eventDate, artist, venue, city, tour, songCount, hasSongs`), the batch summary counters, and the `tourReference` payload. Edge cases (stubs, pending, errored, auth failure) and the attribution/linking requirement are all covered.

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, but the description adds real meaning: it explains the resolution strategy (search artist + date narrowed by city/venue, then relevance artist lookup by mbid, then punctuation-normalized name), which tells the agent why city/venue matter. It also clarifies `tourFallback` semantics beyond the schema's one-liner.

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 and resource with explicit scope: 'Resolve many concerts to their setlists in ONE call' with a hard limit of up to 24. The batching framing ('instead of 2+ per show') plus the enumerated return shape makes it clearly distinguishable from single-lookup siblings like setlist_get_setlist or setlist_search_setlists.

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 clear context for use (batch resolution instead of repeated per-show calls), a hard batch cap ('Keep batches ≤24'), and an opt-out condition ('set tourFallback: false to skip these extra lookups'). It also routes the agent on failure modes (re-call with pending/errored items). It does not name a specific sibling 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.

setlist_search_artistsA
Read-onlyIdempotent

Search setlist.fm for artists by name or MusicBrainz ID. Returns matching artists with their MusicBrainz ID (mbid) — use that mbid with setlist_get_artist or setlist_get_artist_setlists. Results include a setlist.fm url; when you present this data, cite it as a clickable source link to setlist.fm (their API terms require followable attribution — no nofollow). If a result has no url, link to https://www.setlist.fm instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
pNoResult page number (defaults to 1)
sortNoSort order (sortName = default, or relevance)
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 Setlist.fm's payload untouched. No field projection: this server has no verified record of which Setlist.fm fields matter, and inventing one would risk dropping a field a caller needs.
artistMbidNoArtist's MusicBrainz ID (mbid)
artistNameNoArtist name to search for

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover safety (readOnly, idempotent, openWorld), and the description adds genuinely non-structured behavior: the API-terms attribution obligation, the clickable-link requirement, and the fallback link when a result lacks a url. It stops short of noting pagination behavior or result limits, which the p/sort params imply but don't explain.

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-loaded with purpose and downstream usage in the first two sentences; the attribution paragraph is mandatory output-handling instruction rather than filler, though it is slightly longer than needed to convey the rule.

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?

No output schema exists, but the description compensates by describing returned fields (mbid, url) and how to present them, which is the key thing an agent needs. Pagination semantics and result-shape expectations for the compact/full view are left entirely to the schema, but nothing critical is missing for correct 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 fully documents p, sort, view, artistMbid and artistName. The description only restates the name/MusicBrainz-ID duality already in the schema and adds no syntax, format, or interaction guidance, so baseline 3 applies.

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 (search) and resource (artists) plus the two lookup modes (name or MusicBrainz ID). It is clearly distinguishable from setlist_get_artist and setlist_get_artist_setlists, which it names as downstream consumers of the returned 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?

Explicitly tells the agent what to do with results (pass mbid to setlist_get_artist or setlist_get_artist_setlists), which routes it across siblings. It does not, however, say when to prefer artistMbid over artistName or when searching is needed versus a direct get, so the guidance is clear but not complete.

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

setlist_search_citiesA
Read-onlyIdempotent

Search setlist.fm for cities by name and/or location. Returns cities with their geoId — use it as cityId in setlist_search_setlists / setlist_search_venues, or with setlist_get_city. Results include a setlist.fm url; when you present this data, cite it as a clickable source link to setlist.fm (their API terms require followable attribution — no nofollow). If a result has no url, link to https://www.setlist.fm instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
pNoResult page number (defaults to 1)
nameNoCity name
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 Setlist.fm's payload untouched. No field projection: this server has no verified record of which Setlist.fm fields matter, and inventing one would risk dropping a field a caller needs.
stateNoState the city lies in
countryNoCity's country
stateCodeNoState code the city lies in

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds genuinely new behavioral context: results carry a setlist.fm url requiring followable attribution, and a fallback link when url is absent. It stops short of covering pagination behavior or result-size limits.

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-loaded with purpose and the geoId workflow, with attribution requirements last. Three sentences, all doing work, though the clickable-link/no-nofollow instruction is wordier than needed for tool selection purposes.

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?

There is no output schema, so the description carries the return-shape burden and does so by naming geoId and url and how to use each. Pagination and empty-result handling are left to the schema, which is acceptable for a read-only search tool.

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 description coverage is 100%, so the baseline is 3. The description adds one non-schema semantic: the filters combine as 'name and/or location', signalling that name, state, stateCode, and country can be mixed rather than being mutually exclusive. That is real added meaning, though it does not explain the compact/full view tradeoff.

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 and resource ('Search setlist.fm for cities') plus the filter dimensions, and distinguishes itself from siblings by naming setlist_search_venues, setlist_search_setlists, and setlist_get_city as downstream consumers. An agent can tell this is the city lookup entry point 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 Guidelines5/5

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

Explicitly routes the agent: the returned geoId is the cityId to pass into setlist_search_setlists / setlist_search_venues, or to setlist_get_city. It also covers the name-and/or-location search mode, so both the trigger and the follow-up call are spelled out rather than inferred.

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

setlist_search_countriesA
Read-onlyIdempotent

List all countries supported by setlist.fm, with their ISO country codes. Use a code as countryCode in setlist_search_setlists. Results include a setlist.fm url; when you present this data, cite it as a clickable source link to setlist.fm (their API terms require followable attribution — no nofollow). If a result has no url, link to https://www.setlist.fm instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
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 Setlist.fm's payload untouched. No field projection: this server has no verified record of which Setlist.fm fields matter, and inventing one would risk dropping a field a caller needs.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/openWorldHint/idempotentHint, so the safety profile is covered; the description adds genuine non-obvious context, namely the setlist.fm attribution obligation ('no nofollow') and the fallback link when a result lacks a `url`. It does not discuss pagination or failure behavior, so it is strong but not exhaustive.

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-loaded with the purpose, followed by downstream usage and the attribution caveat, all in three sentences with no filler. The attribution sentence is longer than strictly necessary but carries legally relevant instruction, so it earns its place.

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?

No output schema exists, so the description must characterize returns, and it does: countries plus ISO codes, plus `url` fields and what to do when `url` is absent. It is complete for a zero-parameter reference listing; only the `view` shape choices are left entirely to the schema.

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% and the single `view` enum is documented in detail in the schema, including what compact strips. The description says nothing about `view`, but with full schema coverage the baseline of 3 applies since no additional interpretation is needed.

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 and resource ('List all countries supported by setlist.fm, with their ISO country codes') and is unambiguous against every sibling, none of which list countries. An agent can distinguish it immediately, and there is no country-listing alternative to be confused with.

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 explicitly tells the agent where the output is consumed: 'Use a code as countryCode in setlist_search_setlists,' which is real routing guidance to a sibling tool. It stops short of stating when *not* to call it or naming any alternative, so it does not reach a 5.

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

setlist_search_setlistsA
Read-onlyIdempotent

Search setlist.fm for concert setlists. Filter by any combination of artist, venue, city, country, tour, date, or year (provide at least one). Combine filters to disambiguate — artistName + date can span multiple cities, so add cityName/cityId or venueName/venueId to pin the exact show. Omit the artist and pass venueName/venueId + date to list EVERY performer at a venue or festival that day. Every result includes songCount, setCount, and hasSongs, so you can skip empty 'stub' setlists (hasSongs: false) without a second fetch. Results include a setlist.fm url; when you present this data, cite it as a clickable source link to setlist.fm (their API terms require followable attribution — no nofollow). If a result has no url, link to https://www.setlist.fm instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
pNoResult page number (defaults to 1)
dateNoEvent date, ISO yyyy-MM-dd (e.g. 2025-08-28)
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 Setlist.fm's payload untouched. No field projection: this server has no verified record of which Setlist.fm fields matter, and inventing one would risk dropping a field a caller needs.
yearNoEvent year
stateNoState name
cityIdNoCity's geoId
venueIdNoVenue ID
cityNameNoCity name
tourNameNoTour name
stateCodeNoState code
venueNameNoVenue name
artistMbidNoArtist's MusicBrainz ID (mbid)
artistNameNoArtist name
countryCodeNoCountry code (ISO 3166-1 alpha-2)
lastUpdatedNoOnly setlists updated on/after this UTC time, ISO yyyy-MM-dd or yyyy-MM-ddTHH:mm:ss

TDQS

A4.5/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 usefully layers on non-structural traits: the minimum-one-filter constraint, the presence of songCount/setCount/hasSongs for skipping stub setlists without a second fetch, and the setlist.fm attribution/link requirement. It does not disclose pagination volume or result caps tied to the `p` parameter, which is the remaining gap.

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?

Purpose is front-loaded in the first sentence, followed by filtering guidance, the disambiguation rule, and the attribution rule — a logical order. It is dense but every sentence carries information; slight repetition around filter combinations keeps it from a top mark.

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 15-parameter search with no output schema, the description covers the required-input constraint, result fields (songCount, setCount, hasSongs), stub-setlist handling, and downstream citation obligations. Pagination limits and expected result volume remain unaddressed, but nothing needed to select or call the tool correctly is missing.

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, but the description adds real semantic value beyond field definitions — how artistName/date can span multiple cities and how cityName/cityId or venueName/venueId pin the exact show, plus the artist-omitted venue+date pattern. It stops short of explaining `view` or the geo-id vs name parameters, which the schema already covers.

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 and resource ("Search setlist.fm for concert setlists") and immediately scopes it by the filterable dimensions, which separates it from siblings like setlist_get_setlist or setlist_get_artist_setlists. An agent can identify the tool's role 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 Guidelines5/5

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

Explicitly states the when-to-use conditions: at least one filter required, combine filters to disambiguate, and the non-obvious pattern of omitting artistName with venueName+date to enumerate every performer at a venue/festival. That last case is exactly the guidance an agent would otherwise have to guess at.

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

setlist_search_venuesA
Read-onlyIdempotent

Search setlist.fm for venues by name and/or location. Returns matching venues with their venue ID — use it with setlist_get_venue or setlist_get_venue_setlists. Results include a setlist.fm url; when you present this data, cite it as a clickable source link to setlist.fm (their API terms require followable attribution — no nofollow). If a result has no url, link to https://www.setlist.fm instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
pNoResult page number (defaults to 1)
nameNoVenue name
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 Setlist.fm's payload untouched. No field projection: this server has no verified record of which Setlist.fm fields matter, and inventing one would risk dropping a field a caller needs.
stateNoState name
cityIdNoCity's geoId
countryNoVenue's country
cityNameNoCity the venue is in
stateCodeNoState code

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover the read-only/idempotent/open-world profile, and the description adds non-obvious context the annotations cannot: the setlist.fm API terms requiring followable attribution (no nofollow) and the fallback link to https://www.setlist.fm when a result lacks a url. It does not discuss pagination limits or result caps.

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 purpose and return value, then the routing hint, then the attribution caveat. The attribution paragraph is longer than typical but is a genuine requirement, so it mostly earns its place; wording could be tightened.

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 no-output-schema search tool with eight optional, fully documented params, the description covers purpose, return contents, and downstream usage. The main gap is not stating whether at least one filter (name/location) is expected or what happens with no arguments.

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 coverage is 100% and the schema itself carries detailed descriptions, including the rich 'view' enum explanation. The description adds nothing about the eight parameters (e.g., that they are freely combinable filters or that none is required), so the baseline 3 applies.

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

Purpose4/5

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

Names a specific verb and resource ('Search setlist.fm for venues') and states scope ('by name and/or location'), plus what is returned (venues with venue ID). It is clearly distinguishable from siblings like setlist_search_cities and setlist_search_artists by the resource, though it never explicitly contrasts with them.

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 concrete downstream routing: the returned venue ID should be fed to setlist_get_venue or setlist_get_venue_setlists. It also states the attribution obligation when presenting results. It does not say when to prefer this over setlist_search_cities for location-based lookup, so it stops short of full alternative guidance.

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

setlist_unmark_attendedA
Idempotent

Remove a show from YOUR attended list on setlist.fm, by setlist ID (reverses setlist_mark_attended). Authenticated via your setlist.fm session — SETLIST_SESSION_COOKIE, or a signed-in browser tab via the fetchproxy bridge. Idempotent: a no-op if not currently attended. Reversible with setlist_mark_attended. Removes the attendance and verifies by re-reading the setlist page. Returns attended, changed and verified. verified: true means the page shows the requested state. If verified is false, the toggle could not be checked: attended holds the state the re-read saw, or null if the page was unreadable, and changed is false — check the show on setlist.fm before reporting success. Results include a setlist.fm url; when you present this data, cite it as a clickable source link to setlist.fm (their API terms require followable attribution — no nofollow). If a result has no url, link to https://www.setlist.fm instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
setlistIdYesSetlist ID to remove from your attended shows

TDQS

A4.4/5.0
Behavior5/5

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

Far exceeds the annotation baseline: annotations only declare idempotentHint/destructiveHint/openWorldHint, while the description details the auth mechanism (SETLIST_SESSION_COOKIE or fetchproxy bridge), the no-op behavior, page re-read verification, and full semantics of the returned attended/changed/verified fields including the failure case. This is exactly the behavioral context an agent needs before calling a mutation.

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-loaded with the core action and the sibling it reverses, then layers on auth, idempotency, and return semantics. It is longer than typical but most sentences carry load-bearing information given the absence of an output schema; the attribution/url guidance is slightly tangential but tied to the tool's results.

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 no output schema, the description compensates fully by naming the return fields (attended, changed, verified, url) and explaining the verified=true/false cases. Auth requirements, idempotency, and reversibility are all covered, so an agent can call and interpret this tool 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% and there is a single parameter, so the schema already documents setlistId. The description only restates that it is the setlist ID to remove, adding no syntax or format detail beyond the schema. Baseline 3 applies.

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 (Remove) and resource (a show from YOUR attended list on setlist.fm), scoped by setlist ID. It explicitly names the sibling it reverses (setlist_mark_attended), so an agent can distinguish it from the other attendance tools without opening a 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?

Makes clear the condition that selects this tool: it reverses setlist_mark_attended and is idempotent (a no-op if not currently attended). It also documents the required auth path and the reversibility. It does not, however, state explicit exclusions or contrast against a broader set of alternatives beyond the single sibling.

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. 2 tool updatesv1.1.3
    • Changedsetlist_mark_attended1 field changed
      • removedInput schema / properties / confirm
        Removed value: -{
        -  "description": "Must be true to actually record attendance; omit for a dry-run preview.",
        -  "type": "boolean"
        -}
    • Changedsetlist_unmark_attended1 field changed
      • removedInput schema / properties / confirm
        Removed value: -{
        -  "description": "Must be true to actually remove attendance; omit for a dry-run preview.",
        -  "type": "boolean"
        -}
  2. 1 tool updatev1.1.2
    • Changedsetlist_resolve_concerts1 field changed
      • addedInput schema / properties / concerts / items / properties / date / pattern
        Added value: +"^\\d{4}-\\d{2}-\\d{2}$"
  3. 20 tool updatesv1.0.0
    • Changedsetlist_get_artist1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedsetlist_get_artist_setlists1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedsetlist_get_city1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedsetlist_get_setlist1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedsetlist_get_setlist_version1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedsetlist_get_user1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedsetlist_get_user_attended1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedsetlist_get_user_edited1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedsetlist_get_venue1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedsetlist_get_venue_setlists1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedsetlist_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"
    • Changedsetlist_id_from_url1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedsetlist_mark_attended1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedsetlist_resolve_concerts1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedsetlist_search_artists1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedsetlist_search_cities1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedsetlist_search_countries1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedsetlist_search_setlists1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedsetlist_search_venues1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedsetlist_unmark_attended1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
  4. 15 tool updatesv0.11.1
    • Changedsetlist_get_artist1 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 Setlist.fm's payload untouched. No field projection: this server has no verified record of which Setlist.fm fields matter, and inventing one would risk dropping a field a caller needs.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedsetlist_get_artist_setlists1 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 Setlist.fm's payload untouched. No field projection: this server has no verified record of which Setlist.fm fields matter, and inventing one would risk dropping a field a caller needs.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedsetlist_get_city1 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 Setlist.fm's payload untouched. No field projection: this server has no verified record of which Setlist.fm fields matter, and inventing one would risk dropping a field a caller needs.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedsetlist_get_setlist1 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 Setlist.fm's payload untouched. No field projection: this server has no verified record of which Setlist.fm fields matter, and inventing one would risk dropping a field a caller needs.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedsetlist_get_setlist_version1 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 Setlist.fm's payload untouched. No field projection: this server has no verified record of which Setlist.fm fields matter, and inventing one would risk dropping a field a caller needs.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedsetlist_get_user1 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 Setlist.fm's payload untouched. No field projection: this server has no verified record of which Setlist.fm fields matter, and inventing one would risk dropping a field a caller needs.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedsetlist_get_user_attended1 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 Setlist.fm's payload untouched. No field projection: this server has no verified record of which Setlist.fm fields matter, and inventing one would risk dropping a field a caller needs.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedsetlist_get_user_edited1 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 Setlist.fm's payload untouched. No field projection: this server has no verified record of which Setlist.fm fields matter, and inventing one would risk dropping a field a caller needs.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedsetlist_get_venue1 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 Setlist.fm's payload untouched. No field projection: this server has no verified record of which Setlist.fm fields matter, and inventing one would risk dropping a field a caller needs.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedsetlist_get_venue_setlists1 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 Setlist.fm's payload untouched. No field projection: this server has no verified record of which Setlist.fm fields matter, and inventing one would risk dropping a field a caller needs.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedsetlist_search_artists1 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 Setlist.fm's payload untouched. No field projection: this server has no verified record of which Setlist.fm fields matter, and inventing one would risk dropping a field a caller needs.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedsetlist_search_cities1 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 Setlist.fm's payload untouched. No field projection: this server has no verified record of which Setlist.fm fields matter, and inventing one would risk dropping a field a caller needs.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedsetlist_search_countries2 fields changed
      • addedInput schema / $schema
        Added value: +"http://json-schema.org/draft-07/schema#"
      • 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 Setlist.fm's payload untouched. No field projection: this server has no verified record of which Setlist.fm fields matter, and inventing one would risk dropping a field a caller needs.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedsetlist_search_setlists1 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 Setlist.fm's payload untouched. No field projection: this server has no verified record of which Setlist.fm fields matter, and inventing one would risk dropping a field a caller needs.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedsetlist_search_venues1 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 Setlist.fm's payload untouched. No field projection: this server has no verified record of which Setlist.fm fields matter, and inventing one would risk dropping a field a caller needs.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
  5. 4 tool updatesv0.7.0
    • Addedsetlist_id_from_url
    • Addedsetlist_mark_attended
    • Addedsetlist_resolve_concerts
    • Addedsetlist_unmark_attended
  6. 16 tool updatesv0.4.0
    • First observedsetlist_get_artist
    • First observedsetlist_get_artist_setlists
    • First observedsetlist_get_city
    • First observedsetlist_get_setlist
    • First observedsetlist_get_setlist_version
    • First observedsetlist_get_user
    • First observedsetlist_get_user_attended
    • First observedsetlist_get_user_edited
    • First observedsetlist_get_venue
    • First observedsetlist_get_venue_setlists
    • First observedsetlist_healthcheck
    • First observedsetlist_search_artists
    • First observedsetlist_search_cities
    • First observedsetlist_search_countries
    • First observedsetlist_search_setlists
    • First observedsetlist_search_venues

TDQS

A4/5.0

Scored across 20 tools

Disambiguation4/5

Each tool maps to a clear entity+action pair (artist, venue, city, country, user, setlist with get/search/batch-resolve/toggle variants), and the write pair mark_attended/unmark_attended is unambiguous. The only mild overlap is between setlist_search_setlists and setlist_resolve_concerts, both of which locate setlists, but their descriptions clearly separate single-search from bulk-batch resolution.

Naming Consistency5/5

Every tool follows the identical setlist_{verb}_{noun} snake_case pattern (setlist_get_artist, setlist_search_venues, setlist_mark_attended). Verb choice is consistent (get/search/resolve/mark/unmark), making the surface highly predictable.

Tool Count4/5

20 tools is on the heavier side, but the domain legitimately spans six entity types each warranting get/search plus setlist-specific helpers. Each tool earns its place with little redundancy, so it sits just over the comfortable range rather than bloating it.

Completeness4/5

Coverage is broad: artists, venues, cities, countries, users, and setlists all have retrieval paths, plus write (attended), bulk resolve, URL parsing, and a healthcheck. Minor gaps exist (e.g. no user search endpoint, no direct song-level lookup), but core lifecycle workflows are fully served.

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables users to search for events, performers, and venues through the SeatGeek API. Provides event recommendations, detailed venue seating information, and performer discovery capabilities for ticketed entertainment events.
    4
    53 npm
    3
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Combines phish.net and phish.in APIs into twelve tools for setlists, songs, jam-charts, reviews, and audio.
    1
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables querying Umphrey's McGee setlist data including shows, songs, jam charts, and guest appearances through natural language.
    MIT