Koskamo

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.

Zovo Setlist Maker MCP logo, by ZovoCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-08Published by Zovo
MCP endpoint (Streamable HTTP)
https://setlist-maker.zovo.one/mcp
Vendor documentation

What its tools do

1 tool, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

Read-only (1)

1 of 1 have a description · 1 of 1 declare behavior hints · 1 of 1 with parameters document them all

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

Community listingRegistry 1.0.0

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
Server-advertised capabilities
{
  "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.

Zovo Setlist Maker turns a song list into a printable setlist PDF and a CSV. Call generate_setlist with songs[] (title, key, bpm, capo, duration, notes, segue, transpose) when you can read the list, sets[] when the sets are decided, or pass the pasted list as text. Do not invent durations, keys or tempos; leave them out when the user did not give them. Totals count only songs with a duration and the result says which are missing.

Tools

1 advertised

generate_setlist — Generate a printable setlist
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

generate_setlist input schema
{
  "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"
    }
  }
}
generate_setlist output schema
{
  "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
}
generate_setlist annotations
{
  "title": "Generate a printable setlist",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

1 advertised

setlist-maker-widget — Zovo Setlist Maker view

Advertised by the server during the last successful anonymous check.

Interactive view for Zovo Setlist Maker.

setlist-maker-widget URI
ui://widget/setlist-maker-v1-1.0.0-99639b6e74c0733ba3f2d9b6efa7bc8e7e7e6b57c6ed9bae474c119267889765.html

MIME type: text/html;profile=mcp-app

setlist-maker-widget-legacy — Zovo Setlist Maker view (previous versions)

Advertised by the server during the last successful anonymous check.

setlist-maker-widget-legacy URI template
ui://widget/setlist-maker-{version}.html

MIME type: text/html;profile=mcp-app

30-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.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http zovo-setlist-maker-mcp https://setlist-maker.zovo.one/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add zovo-setlist-maker-mcp --url https://setlist-maker.zovo.one/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable zovo-setlist-maker-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "zovo-setlist-maker-mcp": {
      "url": "https://setlist-maker.zovo.one/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "zovo-setlist-maker-mcp": {
      "type": "streamableHttp",
      "url": "https://setlist-maker.zovo.one/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start zovo-setlist-maker-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "zovo-setlist-maker-mcp": {
      "type": "http",
      "url": "https://setlist-maker.zovo.one/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http zovo-setlist-maker-mcp https://setlist-maker.zovo.one/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://setlist-maker.zovo.one/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "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.