setlist-mcp
Summary: setlist-mcp is a mostly read-only MCP server for setlist.fm that lets you search and retrieve concert setlists, artists, venues, cities, countries, and users via natural language, plus mark your own "I was there" attendance.
Artists: search artists by name or MusicBrainz ID; get an artist's details and their setlists (most recent first).
Setlists: search by artist, venue, city, country, tour, date, or year; fetch a setlist's full song list and event details, or any historical wiki-edit version.
Venues: search venues by name/location; get a venue; list setlists performed there.
Cities & countries: search cities and get their geoId; get city details; list all setlist.fm-supported countries with ISO codes.
Users: get a public profile; list shows a user attended; list setlists a user created or edited.
Bulk resolve: resolve up to 24 concerts to their setlists in one paced call, including empty-stub flags and same-tour reference fallbacks.
Attendance (writes): mark or unmark "I was there" on your own setlist.fm account using your logged-in session (idempotent, reversible).
Utilities: extract a setlist ID from a setlist.fm URL locally; healthcheck to verify your API key and connectivity.
Attribution built in: every result carries a setlist.fm URL to cite as a followable source link.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@setlist-mcpWhat was the setlist for Nirvana's last show?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
setlist-mcp
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 |
|
Setlists |
|
Venues |
|
Cities & countries |
|
Users |
|
Resolve |
|
Attendance (authenticated writes) |
|
Utility |
|
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 (nonofollow) wherever the data is shown. The tool descriptions instruct the model to do this, and results pass theurlthrough 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(.envis gitignored) and never appears in tool output.
Development
npm install
npm run build # tsc + esbuild bundle → dist/
npm test # tsc typecheck + vitestFor 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 toolssetlist_get_artistARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| mbid | Yes | Artist's MusicBrainz ID (mbid) | |
| view | No | 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. |
TDQS
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.
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.
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.
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.
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.
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_setlistsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| p | No | Result page number (defaults to 1) | |
| mbid | Yes | Artist's MusicBrainz ID (mbid) | |
| view | No | 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. |
TDQS
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.
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.
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.
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.
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.
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_cityARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | 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. | |
| geoId | Yes | City's geoId |
TDQS
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.
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.
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.
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.
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.
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_setlistARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | 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. | |
| setlistId | Yes | Setlist ID (e.g. 63de4613) |
TDQS
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.
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.
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.
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.
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.
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_versionARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | 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. | |
| versionId | Yes | Setlist version ID |
TDQS
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.
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.
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.
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.
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.
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_userARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | 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. | |
| userId | Yes | setlist.fm userId (username) |
TDQS
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.
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.
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.
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.
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.
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_attendedARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| p | No | Result page number (defaults to 1) | |
| view | No | 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. | |
| userId | Yes | setlist.fm userId (username) |
TDQS
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.
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.
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.
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.
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.
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_editedARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| p | No | Result page number (defaults to 1) | |
| view | No | 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. | |
| userId | Yes | setlist.fm userId (username) |
TDQS
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.
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.
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.
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.
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.
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_venueARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | 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. | |
| venueId | Yes | Venue ID |
TDQS
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.
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.
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.
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.
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.
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_setlistsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| p | No | Result page number (defaults to 1) | |
| view | No | 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. | |
| venueId | Yes | Venue ID |
TDQS
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.
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.
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.
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.
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.
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 + connectivityARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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 URLARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | A setlist.fm setlist URL, e.g. https://www.setlist.fm/setlist/.../...-4ba8a766.html |
TDQS
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.
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.
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.
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.
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.
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_attendedAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| setlistId | Yes | Setlist ID (e.g. from setlist_search_setlists / resolve_concerts) |
TDQS
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.
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.
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.
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.
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.
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_concertsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| concerts | Yes | Concerts to resolve (1–24 per call) | |
| tourFallback | No | For empty stubs, also fetch a same-tour reference setlist (default true). Set false to skip the extra lookups. |
TDQS
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.
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.
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.
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.
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.
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_artistsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| p | No | Result page number (defaults to 1) | |
| sort | No | Sort order (sortName = default, or relevance) | |
| view | No | 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. | |
| artistMbid | No | Artist's MusicBrainz ID (mbid) | |
| artistName | No | Artist name to search for |
TDQS
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.
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.
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.
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.
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.
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_citiesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| p | No | Result page number (defaults to 1) | |
| name | No | City name | |
| view | No | 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. | |
| state | No | State the city lies in | |
| country | No | City's country | |
| stateCode | No | State code the city lies in |
TDQS
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.
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.
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.
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.
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.
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_countriesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | 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. |
TDQS
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.
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.
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.
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.
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.
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_setlistsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| p | No | Result page number (defaults to 1) | |
| date | No | Event date, ISO yyyy-MM-dd (e.g. 2025-08-28) | |
| view | No | 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. | |
| year | No | Event year | |
| state | No | State name | |
| cityId | No | City's geoId | |
| venueId | No | Venue ID | |
| cityName | No | City name | |
| tourName | No | Tour name | |
| stateCode | No | State code | |
| venueName | No | Venue name | |
| artistMbid | No | Artist's MusicBrainz ID (mbid) | |
| artistName | No | Artist name | |
| countryCode | No | Country code (ISO 3166-1 alpha-2) | |
| lastUpdated | No | Only setlists updated on/after this UTC time, ISO yyyy-MM-dd or yyyy-MM-ddTHH:mm:ss |
TDQS
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.
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.
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.
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.
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.
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_venuesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| p | No | Result page number (defaults to 1) | |
| name | No | Venue name | |
| view | No | 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. | |
| state | No | State name | |
| cityId | No | City's geoId | |
| country | No | Venue's country | |
| cityName | No | City the venue is in | |
| stateCode | No | State code |
TDQS
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.
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.
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.
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.
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.
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_attendedAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| setlistId | Yes | Setlist ID to remove from your attended shows |
TDQS
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.
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.
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.
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.
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.
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.
2 tool updates
v1.1.3- Changed
setlist_mark_attended1 field changed- removed
Input schema / properties / confirmRemoved value: -{ - "description": "Must be true to actually record attendance; omit for a dry-run preview.", - "type": "boolean" -}
- Changed
setlist_unmark_attended1 field changed- removed
Input schema / properties / confirmRemoved value: -{ - "description": "Must be true to actually remove attendance; omit for a dry-run preview.", - "type": "boolean" -}
1 tool update
v1.1.2- Changed
setlist_resolve_concerts1 field changed- added
Input schema / properties / concerts / items / properties / date / patternAdded value: +"^\\d{4}-\\d{2}-\\d{2}$"
20 tool updates
v1.0.0- Changed
setlist_get_artist1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
setlist_get_artist_setlists1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
setlist_get_city1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
setlist_get_setlist1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
setlist_get_setlist_version1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
setlist_get_user1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
setlist_get_user_attended1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
setlist_get_user_edited1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
setlist_get_venue1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
setlist_get_venue_setlists1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
setlist_healthcheck1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
setlist_id_from_url1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
setlist_mark_attended1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
setlist_resolve_concerts1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
setlist_search_artists1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
setlist_search_cities1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
setlist_search_countries1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
setlist_search_setlists1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
setlist_search_venues1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
setlist_unmark_attended1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
15 tool updates
v0.11.1- Changed
setlist_get_artist1 field changed- added
Input schema / properties / viewAdded 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" +}
- Changed
setlist_get_artist_setlists1 field changed- added
Input schema / properties / viewAdded 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" +}
- Changed
setlist_get_city1 field changed- added
Input schema / properties / viewAdded 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" +}
- Changed
setlist_get_setlist1 field changed- added
Input schema / properties / viewAdded 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" +}
- Changed
setlist_get_setlist_version1 field changed- added
Input schema / properties / viewAdded 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" +}
- Changed
setlist_get_user1 field changed- added
Input schema / properties / viewAdded 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" +}
- Changed
setlist_get_user_attended1 field changed- added
Input schema / properties / viewAdded 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" +}
- Changed
setlist_get_user_edited1 field changed- added
Input schema / properties / viewAdded 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" +}
- Changed
setlist_get_venue1 field changed- added
Input schema / properties / viewAdded 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" +}
- Changed
setlist_get_venue_setlists1 field changed- added
Input schema / properties / viewAdded 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" +}
- Changed
setlist_search_artists1 field changed- added
Input schema / properties / viewAdded 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" +}
- Changed
setlist_search_cities1 field changed- added
Input schema / properties / viewAdded 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" +}
- Changed
setlist_search_countries2 fields changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#" - added
Input schema / properties / viewAdded 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" +}
- Changed
setlist_search_setlists1 field changed- added
Input schema / properties / viewAdded 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" +}
- Changed
setlist_search_venues1 field changed- added
Input schema / properties / viewAdded 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" +}
4 tool updates
v0.7.0- Added
setlist_id_from_url - Added
setlist_mark_attended - Added
setlist_resolve_concerts - Added
setlist_unmark_attended
16 tool updates
v0.4.0- First observed
setlist_get_artist - First observed
setlist_get_artist_setlists - First observed
setlist_get_city - First observed
setlist_get_setlist - First observed
setlist_get_setlist_version - First observed
setlist_get_user - First observed
setlist_get_user_attended - First observed
setlist_get_user_edited - First observed
setlist_get_venue - First observed
setlist_get_venue_setlists - First observed
setlist_healthcheck - First observed
setlist_search_artists - First observed
setlist_search_cities - First observed
setlist_search_countries - First observed
setlist_search_setlists - First observed
setlist_search_venues
TDQS
Scored across 20 tools
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.
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.
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.
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
Related MCP Connectors
Live X/Twitter data: profiles, tweets, search, followers, lists and trends. 29 read-only tools.
Search and run data, text, code, PDF and web APIs. Requests not stored. Network tools need a key.
Specialist tools for any job — a lead, an image, a song, live data, and more.
Search, analyze, and discover commercially released music using sonic intelligence.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables 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.453 npm3MIT
- AlicenseNot gradedqualityAmaintenanceCombines phish.net and phish.in APIs into twelve tools for setlists, songs, jam-charts, reviews, and audio.1MIT
- AlicenseNot gradedqualityAmaintenanceEnables querying Umphrey's McGee setlist data including shows, songs, jam charts, and guest appearances through natural language.MIT
- AlicenseNot gradedqualityBmaintenanceEnables searching artists, venues, and setlists from setlist.fm through natural language.17 npmMIT