concert-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| CONCERT_MCP_TZ | No | IANA zone for every start/end. | America/Los_Angeles |
| CONCERT_MCP_SEND | No | 0 disables reply delivery and topic renames everywhere. | 1 |
| CONCERT_MCP_DRY_RUN | No | 1 makes every tool change nothing and return the reply it would have sent, marked NOT SENT: dry run; for rehearsing the bot end to end. | 0 |
| CONCERT_MCP_FIX_LOG | No | The retry-loop breaker's memory. | <state_dir>/fix-log.json |
| CONCERT_MCP_GWS_BIN | No | The Google Workspace CLI. | which gws, else /opt/homebrew/bin, /usr/local/bin, ~/.local/bin, else gws |
| CONCERT_MCP_OCR_LAST | No | The last OCR output. | <openclaw_home>/media/ocr-last.txt |
| CONCERT_MCP_OP_VAULT | No | 1Password vault, auth commands only. | Private |
| CONCERT_MCP_SENT_LOG | No | Reply dedupe memory. | <state_dir>/last-sent.json |
| CONCERT_MCP_CACHE_DIR | No | liked.json. | ~/.cache/concert-mcp |
| CONCERT_MCP_LOG_LEVEL | No | debug logs every subprocess argv (never tokens); stderr only. | info |
| CONCERT_MCP_STATE_DIR | No | setlist-queue.json, delete-candidates.json, last-sent.json, fix-log.json. | ~/.local/state/concert-mcp |
| CONCERT_MCP_CONFIG_DIR | No | Credentials files and config.toml. | ~/.config/concert-mcp |
| CONCERT_MCP_SESSION_DB | No | Opened read-only. | <openclaw_home>/agents/main/agent/openclaw-agent.sqlite |
| CONCERT_MCP_LIKED_CACHE | No | Legacy fallback ~/.cache/ari-spotify/liked.json. | <cache_dir>/liked.json |
| CONCERT_MCP_GWS_KEY_FILE | No | Exists -> GOOGLE_WORKSPACE_CLI_KEYRING_BACKEND=file on every gws call. | ~/.config/gws/.encryption_key |
| CONCERT_MCP_OPENCLAW_BIN | No | The OpenClaw CLI. | which openclaw, else /opt/homebrew/bin, /usr/local/bin, ~/.local/bin, else openclaw |
| CONCERT_MCP_PAST_GRACE_H | No | A start this far in the past is still accepted. | 12 |
| CONCERT_MCP_GWS_TIMEOUT_S | No | Wall-clock cap per gws call. | 60 |
| CONCERT_MCP_OPENCLAW_HOME | No | Base for openclaw_config, session_db and ocr_last. | ~/.openclaw |
| CONCERT_MCP_OPERATOR_NAME | No | The name in 'Admin: check `gws auth` on the host.' | Admin |
| CONCERT_MCP_RENAME_TOPICS | No | 0 keeps Telegram topic names as they are. | 1 |
| CONCERT_MCP_SETLIST_QUEUE | No | Legacy fallback ~/.local/state/ari-spotify/setlist-queue.json; the weekly poller reads this file. | <state_dir>/setlist-queue.json |
| CONCERT_MCP_HTTP_TIMEOUT_S | No | Per HTTP request. | 30 |
| CONCERT_MCP_SPOTIFY_SCOPES | No | OAuth scopes. | user-library-read playlist-read-private playlist-modify-private playlist-modify-public |
| CONCERT_MCP_CANDIDATES_FILE | No | No legacy fallback; a list older than CONCERT_MCP_CONTEXT_WINDOW_S is discarded. | <state_dir>/delete-candidates.json |
| CONCERT_MCP_DEDUPE_WINDOW_S | No | An identical reply is not sent twice within this window. | 600 |
| CONCERT_MCP_MAX_FUTURE_DAYS | No | A start further out is refused. | 730 |
| CONCERT_MCP_OPENCLAW_CONFIG | No | Read for channels.telegram.botToken only. | <openclaw_home>/openclaw.json |
| CONCERT_MCP_OP_SPOTIFY_ITEM | No | Fields username (client id), credential (secret), refresh token. | Spotify - concert-mcp |
| CONCERT_MCP_CONTEXT_WINDOW_S | No | Live chat / OCR / transcript recency. | 900 |
| CONCERT_MCP_DEFAULT_CALENDAR | No | ID used for plain events and the second delete search. | primary |
| CONCERT_MCP_TEASER_TIMEOUT_S | No | Cap on the Spotify teaser step. | 150 |
| CONCERT_MCP_CONCERTS_CALENDAR | No | Calendar name, resolved through gws calendar calendarList list. | Concerts |
| CONCERT_MCP_LIKED_CACHE_TTL_S | No | Liked Songs cache lifetime. | 21600 |
| CONCERT_MCP_OP_SETLISTFM_ITEM | No | Field credential. | setlist.fm - API key |
| CONCERT_MCP_DEFAULT_DURATION_H | No | End = start + this when no end is given. | 2 |
| CONCERT_MCP_SETLIST_QUEUE_DAYS | No | How long after the show the weekly setlist check keeps looking. | 61 |
| CONCERT_MCP_SPOTIFY_CREDENTIALS | No | Legacy fallback ~/.config/ari-spotify/credentials.json. | <config_dir>/spotify.json |
| CONCERT_MCP_SPOTIFY_REDIRECT_URI | No | The Spotify app's redirect URI. | http://127.0.0.1:8888/callback |
| CONCERT_MCP_DEFAULT_CALENDAR_NAME | No | How replies name it. | Personal |
| CONCERT_MCP_SETLISTFM_CREDENTIALS | No | Legacy fallback ~/.config/ari-spotify/setlistfm.json. | <config_dir>/setlistfm.json |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| concert_addA | Add a concert to the calendar and do everything that goes with it: teaser playlist, setlist.fm lookup, the chat reply. Call once per ticket with artist, start and venue as read from the ticket; paste the ticket text into source_text. If the result starts with NO_REPLY, answer exactly NO_REPLY. |
| calendar_addA | Add a plain (non-concert) event to the personal calendar, keeping the title as the user wrote it. For a concert ticket use concert_add instead. If the result starts with NO_REPLY, answer exactly NO_REPLY. |
| event_deleteA | Delete one calendar event by artist or title. When several match, the tool lists them with numbers and asks the user; when the user answers with a number, call this again with pick set to that number. If the result starts with NO_REPLY, answer exactly NO_REPLY. |
| teaser_playlistA | Make or top up the Spotify teaser playlist for one concert: every song the user liked by the artist, oldest first, named "YYYY-MM-DD | Artist". concert_add already does this; call only when asked for the playlist alone. NO_REPLY means answer exactly NO_REPLY. |
| setlist_findA | Look up one show on setlist.fm by artist and date. concert_add already does this; call only when asked about a setlist alone. NO_REPLY means answer exactly NO_REPLY. |
| queue_statusA | List the concerts waiting for the weekly setlist.fm check. Takes no parameters. NO_REPLY means answer exactly NO_REPLY. |
| healthcheckA | Report which credentials and tools are present for Google Calendar, Spotify, setlist.fm and OpenClaw, and what fixes each missing one. Takes no parameters. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 7 tools
concert_add is a hub tool that explicitly absorbs the work of teaser_playlist and setlist_find, so three tools perform the same underlying operations. The descriptions do rescue this with explicit routing cues ('concert_add already does this; call only when asked for X alone'), but an agent still has to reason about user intent rather than resource+action to choose correctly.
Most names follow a noun_verb or noun_action shape (concert_add, calendar_add, event_delete, setlist_find, queue_status), but the verb position flips between prefix-style and suffix-style, and 'healthcheck' is an unseparated single word that breaks the pattern entirely. Readable, but not a predictable convention an agent can extrapolate from.
Seven tools for a concert-tracking domain (build playlist, look up setlist, queue status, diagnostics, add concert, add plain event, delete event) is well scoped with no filler. Each tool maps to a recognizable user request.
The surface covers creation and deletion of events plus the concert enrichment pipeline, but there is no read/list tool for existing calendar entries beyond queue_status's pending-concert view, and no update/reschedule operation. An agent asked 'what's on my calendar next month?' or 'move this concert' hits a dead end.