Zovo Setlist Maker MCP
Generates printable band setlists from pasted song lists, including stage pages with keys and tempos, a band copy table with transposition and cues, and CSV downloads for spreadsheets.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://setlist-maker.zovo.one/mcpWhat its tools do
1 tool, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (1)
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Make a setlist from a pasted song list with durations
- Split songs into sets of similar length and print stage setlist
- Transpose all songs for a new singer
- Download setlist as PDF and CSV
Source and maintenance
Protocol and capabilities
- Server
- setlist-maker 1.0.0
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 1 advertised
- Resources
- 1 advertised
- Resource templates
- 1 advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": true
},
"resources": {
"listChanged": true
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
1 advertised
generate_setlist — Generate a printable setlist
Use this when the user wants a printable setlist for a gig or band (set list, stage setlist, setlist template, "print our set list", "how long is our set") as a PDF and CSV. Pass songs[] in play order with title and, when given, key, bpm, capo, duration ("3:45"), notes, segue and transpose; use sets[] when the sets are decided, or pass the pasted list as text (numbered lists, "Song - Key - BPM - Time", CSV or tab rows, "->" segues, SET 2 / Encore / --- breaks). Options: split_sets or break_after_minutes to split one list, changeover_seconds, transpose_all, band, venue, date, layout (both, stage, band) and paper (letter, a4). Returns set totals and the show total in m:ss; songs without a duration are listed and not estimated. Does not look up keys, tempos or song lengths, and does not make chord charts or lyrics.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"band": {
"anyOf": [
{
"type": "string",
"maxLength": 100
},
{
"type": "null"
}
],
"description": "Band or act name printed at the top. Example: The Late Shift"
},
"date": {
"anyOf": [
{
"type": "string",
"maxLength": 60
},
{
"type": "null"
}
],
"description": "Gig date as it should print. Example: Sat 14 Nov 2026"
},
"sets": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"songs"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string",
"maxLength": 60
},
{
"type": "null"
}
],
"description": "Set name. Example: Set 1"
},
"songs": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"bpm": {
"type": [
"number",
"string",
"null"
],
"description": "Tempo in beats per minute. Example: 150"
},
"key": {
"anyOf": [
{
"type": "string",
"maxLength": 30
},
{
"type": "null"
}
],
"description": "Key the band plays it in (sounding key). Example: G, Bb, F#m"
},
"set": {
"type": [
"number",
"string",
"null"
],
"description": "Optional set name or number for this song; a change starts a new set. Example: \"Set 2\""
},
"capo": {
"type": [
"number",
"string",
"null"
],
"description": "Capo fret for the guitarist (0 = none). Example: 2"
},
"notes": {
"anyOf": [
{
"type": "string",
"maxLength": 300
},
{
"type": "null"
}
],
"description": "Short cue for the band. Example: count in 4, horns on chorus"
},
"segue": {
"type": [
"boolean",
"string",
"number",
"null"
],
"description": "True when this song runs straight into the next one (no changeover). Example: true"
},
"title": {
"anyOf": [
{
"type": "string",
"maxLength": 200
},
{
"type": "null"
}
],
"description": "Song title. Example: Brown Eyed Girl"
},
"duration": {
"type": [
"number",
"string",
"null"
],
"description": "Length as m:ss, seconds or minutes: \"3:45\", 225, \"3m45s\", \"3.5 min\". Example: \"3:05\""
},
"transpose": {
"type": [
"number",
"string",
"null"
],
"description": "Change the key for this song: semitones (+2, -1) or a target key (\"to A\"). Example: \"+2\""
}
},
"additionalProperties": {}
},
{
"type": "string",
"maxLength": 300
}
]
},
"maxItems": 120,
"description": "Songs of this set in order."
}
},
"additionalProperties": {}
},
"maxItems": 12
},
{
"type": "null"
}
],
"description": "Use instead of songs when the sets are already decided, e.g. [{\"name\":\"Set 1\",\"songs\":[...]},{\"name\":\"Encore\",\"songs\":[...]}]."
},
"text": {
"anyOf": [
{
"type": "string",
"maxLength": 40000
},
{
"type": "null"
}
],
"description": "Fallback: the setlist as the user pasted it, one song per line, e.g. \"1. Brown Eyed Girl (G) 150 bpm 3:05 capo 2\\nSET 2\\nValerie - Eb - 3:40 ->\". Reads numbered lists, CSV or tab rows with a header, \"->\" segues and SET 2 / Encore / --- breaks."
},
"paper": {
"anyOf": [
{
"type": "string",
"maxLength": 30
},
{
"type": "null"
}
],
"description": "letter (default) or a4. Example: a4"
},
"songs": {
"anyOf": [
{
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"bpm": {
"type": [
"number",
"string",
"null"
],
"description": "Tempo in beats per minute. Example: 150"
},
"key": {
"anyOf": [
{
"type": "string",
"maxLength": 30
},
{
"type": "null"
}
],
"description": "Key the band plays it in (sounding key). Example: G, Bb, F#m"
},
"set": {
"type": [
"number",
"string",
"null"
],
"description": "Optional set name or number for this song; a change starts a new set. Example: \"Set 2\""
},
"capo": {
"type": [
"number",
"string",
"null"
],
"description": "Capo fret for the guitarist (0 = none). Example: 2"
},
"notes": {
"anyOf": [
{
"type": "string",
"maxLength": 300
},
{
"type": "null"
}
],
"description": "Short cue for the band. Example: count in 4, horns on chorus"
},
"segue": {
"type": [
"boolean",
"string",
"number",
"null"
],
"description": "True when this song runs straight into the next one (no changeover). Example: true"
},
"title": {
"anyOf": [
{
"type": "string",
"maxLength": 200
},
{
"type": "null"
}
],
"description": "Song title. Example: Brown Eyed Girl"
},
"duration": {
"type": [
"number",
"string",
"null"
],
"description": "Length as m:ss, seconds or minutes: \"3:45\", 225, \"3m45s\", \"3.5 min\". Example: \"3:05\""
},
"transpose": {
"type": [
"number",
"string",
"null"
],
"description": "Change the key for this song: semitones (+2, -1) or a target key (\"to A\"). Example: \"+2\""
}
},
"additionalProperties": {}
},
{
"type": "string",
"maxLength": 300
}
]
},
"maxItems": 120
},
{
"type": "null"
}
],
"description": "Songs in play order, one object per song, e.g. [{\"title\":\"Valerie\",\"key\":\"Eb\",\"bpm\":116,\"duration\":\"3:40\"}]. A plain string such as \"SET 2\" or \"Encore\" starts a new set. Up to 80 songs."
},
"venue": {
"anyOf": [
{
"type": "string",
"maxLength": 100
},
{
"type": "null"
}
],
"description": "Venue printed at the top. Example: Blue Door Pub"
},
"layout": {
"anyOf": [
{
"type": "string",
"maxLength": 30
},
{
"type": "null"
}
],
"description": "both (default: big-type stage pages plus a band copy table), stage, or band. Example: stage"
},
"split_sets": {
"type": [
"number",
"string",
"null"
],
"description": "Split a single list into this many sets of similar length, keeping the order (2 to 6). Example: 2"
},
"transpose_all": {
"type": [
"number",
"string",
"null"
],
"description": "Shift every song with a known key by these semitones or to a key name. Example: -2"
},
"changeover_seconds": {
"type": [
"number",
"string",
"null"
],
"description": "Seconds between songs counted in the set times (none after a segue). Default 0. Example: 20"
},
"break_after_minutes": {
"type": [
"number",
"string",
"null"
],
"description": "Start a new set when a set would run past this many minutes. Example: 45"
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"band",
"venue",
"date",
"song_count",
"set_count",
"total",
"total_seconds",
"songs_without_duration",
"changeover_seconds",
"sets",
"songs",
"layout",
"paper",
"pdf_pages",
"notes",
"downloads",
"links_expire_hours"
],
"properties": {
"band": {
"type": "string"
},
"date": {
"type": "string"
},
"sets": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"songs",
"total",
"total_seconds",
"without_duration"
],
"properties": {
"name": {
"type": "string"
},
"songs": {
"type": "number"
},
"total": {
"type": "string"
},
"total_seconds": {
"type": "number"
},
"without_duration": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
},
"paper": {
"type": "string"
},
"songs": {
"type": "array",
"items": {
"type": "object",
"required": [
"n",
"set",
"title",
"key",
"play_key",
"capo",
"capo_shapes",
"bpm",
"time",
"segue",
"notes"
],
"properties": {
"n": {
"type": "number"
},
"bpm": {
"type": [
"number",
"null"
]
},
"key": {
"type": "string"
},
"set": {
"type": "string"
},
"capo": {
"type": [
"number",
"null"
]
},
"time": {
"type": [
"string",
"null"
]
},
"notes": {
"type": "string"
},
"segue": {
"type": "boolean"
},
"title": {
"type": "string"
},
"play_key": {
"type": [
"string",
"null"
]
},
"capo_shapes": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
}
},
"total": {
"type": "string"
},
"venue": {
"type": "string"
},
"layout": {
"type": "string"
},
"downloads": {
"type": "object",
"required": [
"pdf",
"csv"
],
"properties": {
"csv": {
"type": "string"
},
"pdf": {
"type": "string"
}
},
"additionalProperties": false
},
"pdf_pages": {
"type": "number"
},
"set_count": {
"type": "number"
},
"song_count": {
"type": "number"
},
"songs_shown": {
"type": "object",
"required": [
"shown",
"total"
],
"properties": {
"shown": {
"type": "number"
},
"total": {
"type": "number"
}
},
"additionalProperties": false
},
"total_seconds": {
"type": "number"
},
"changeover_seconds": {
"type": "number"
},
"links_expire_hours": {
"type": [
"number",
"null"
]
},
"songs_without_duration": {
"type": "number"
}
},
"additionalProperties": false
}{
"title": "Generate a printable setlist",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
Not advertised
Resources
1 advertised
setlist-maker-widget — Zovo Setlist Maker view
Interactive view for Zovo Setlist Maker.
ui://widget/setlist-maker-v1-1.0.0-99639b6e74c0733ba3f2d9b6efa7bc8e7e7e6b57c6ed9bae474c119267889765.htmlsetlist-maker-widget-legacy — Zovo Setlist Maker view (previous versions)
ui://widget/setlist-maker-{version}.html30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 461 ms
- 95th percentile latency
- 461 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 461 ms · metadata changed · 1 tool(s), 1 resource(s), 1 resource template(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http zovo-setlist-maker-mcp https://setlist-maker.zovo.one/mcpCodex
codex mcp add zovo-setlist-maker-mcp --url https://setlist-maker.zovo.one/mcpCursor
{
"mcpServers": {
"zovo-setlist-maker-mcp": {
"url": "https://setlist-maker.zovo.one/mcp"
}
}
}Cline
{
"mcpServers": {
"zovo-setlist-maker-mcp": {
"type": "streamableHttp",
"url": "https://setlist-maker.zovo.one/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"zovo-setlist-maker-mcp": {
"type": "http",
"url": "https://setlist-maker.zovo.one/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http zovo-setlist-maker-mcp https://setlist-maker.zovo.one/mcpClaude Desktop
https://setlist-maker.zovo.one/mcpWindsurf
{
"mcpServers": {
"zovo-setlist-maker-mcp": {
"serverUrl": "https://setlist-maker.zovo.one/mcp"
}
}
}Let your agent find its tools
Find servers like Zovo Setlist Maker MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.