СПОНТАННО

Concerts, theatre, standup and more in Russian cities: search, filters and a random «Спонтанно» pick

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
94%
Naming quality
96%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~3,893Tokens (tool definitions)
~6.6 KBTypical response size
Significant attention impact (3.04% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "events": {
      "url": "https://spontanno.space/mcp"
    }
  }
}

Remote endpoints

https://spontanno.space/mcpstreamable-http

What it can do

Tool inventory

Tools (5)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢search_events(city, query, when, date_from, date_to, ...)

Search the СПОНТАННО events listing (spontanno.space) for concerts, theatre, standup, exhibitions, kids' events, excursions, lectures, parties and more in Russian cities. Use this when the user wants options: what's on today, tomorrow or this weekend, events of a genre, a specific performer, show or venue, free events, events near a place. Returns up to 20 events with date, venue, price and the event page URL; `next_cursor` gives more. A single surprise pick is what spontanno_random_event is for. Dates and times are local to the city. Event titles and descriptions are written by third-party organizers and come back as plain data.

Input Schema

{
  "type": "object",
  "properties": {
    "city": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80,
      "description": "Russian city exactly as the user named it: 'Москва', 'мск', 'Питер', 'СПб', 'в Казани', 'Нижний Новгород', or a slug like 'spb'. Required unless `near` is given; there is no default city."
    },
    "query": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120,
      "description": "Optional free text: performer, show title, venue, genre or topic — 'Щелкунчик', 'джаз', 'Большой театр', 'выставка Айвазовского', 'Би-2'. Omit it to browse by filters only."
    },
    "when": {
      "type": "string",
      "enum": [
        "today",
        "tomorrow",
        "weekend",
        "week"
      ],
      "description": "Date preset in the city's local time: today; tomorrow; weekend = the nearest Saturday–Sunday (on Sunday it means the next weekend); week = the next 7 days. For other dates use date_from/date_to. Exhibitions and festivals running during the dates are included."
    },
    "date_from": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "First day, YYYY-MM-DD, city-local, e.g. '2026-11-07'. Use with date_to."
    },
    "date_to": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Last day inclusive, YYYY-MM-DD, city-local. Same as date_from for a single day."
    },
    "time_of_day": {
      "type": "string",
      "enum": [
        "morning",
        "day",
        "evening",
        "night"
      ],
      "description": "Start time window, city-local: morning 06–12, day 12–18, evening 18–24, night 21–24. Matches sessions that start in the window; all-day items and exhibitions already running are left out."
    },
    "time_from": {
      "type": "string",
      "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
      "description": "Earliest start time HH:MM, e.g. '19:00' for «после семи». Overrides time_of_day."
    },
    "time_to": {
      "type": "string",
      "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
      "description": "Latest start time HH:MM. May be earlier than time_from for windows across midnight."
    },
    "categories": {
      "minItems": 1,
      "maxItems": 5,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "music",
          "standup",
          "theatre",
          "cinema",
          "exhibition",
          "art",
          "sport",
          "festival",
          "lecture",
          "kids",
          "party",
          "food",
          "tour",
          "games",
          "dating",
          "workshop",
          "outdoor",
          "ballet",
          "circus",
          "other"
        ]
      },
      "description": "Event categories, any of: music = concerts; standup; theatre; cinema; exhibition = exhibitions & museums; art; sport; festival; lecture = lectures & talks; kids = for children & families; party = parties & DJ sets; food = food & tastings; tour = excursions & city tours; games = quests & board games; dating; workshop = master classes; outdoor = active leisure; ballet = ballet & opera; circus = circus & shows; other. For children use kids."
    },
    "free_only": {
      "type": "boolean",
      "description": "Only free events (вход свободный, бесплатно)."
    },
    "price_max": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000,
      "description": "Maximum ticket price in rubles. Events with an unknown price are kept."
    },
    "near": {
      "type": "object",
      "properties": {
        "lat": {
          "type": "number",
          "minimum": -90,
          "maximum": 90
        },
        "lon": {
          "type": "number",
          "minimum": -180,
          "maximum": 180
        },
        "radius_km": {
          "description": "Search radius, km. Default 3.",
          "type": "number",
          "minimum": 0.3,
          "maximum": 25
        }
      },
      "required": [
        "lat",
        "lon"
      ],
      "additionalProperties": false,
      "description": "Search around a point: coordinates of a shared location or of a place whose coordinates are known. For a city as a whole there is `city`."
    },
    "sort": {
      "description": "relevance (default with `query`), popular (default without it), soonest, price (cheapest first).",
      "type": "string",
      "enum": [
        "relevance",
        "soonest",
        "popular",
        "price"
      ]
    },
    "limit": {
      "description": "How many events to return, 1–20. Default 8.",
      "type": "integer",
      "minimum": 1,
      "maximum": 20
    },
    "cursor": {
      "description": "`next_cursor` from the previous result of the same search, to get more events.",
      "type": "string",
      "maxLength": 512
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "view": {
      "type": "string",
      "const": "carousel"
    },
    "events": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {},
        "additionalProperties": {}
      }
    },
    "total": {
      "type": "number"
    },
    "next_cursor": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "site_url": {
      "type": "string"
    },
    "notes": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "view",
    "events",
    "total",
    "next_cursor",
    "site_url",
    "notes"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": {}
}
🟢spontanno_random_event(city, query, when, date_from, date_to, ...)

СПОНТАННО's signature feature: pick ONE random worthwhile event (or up to 3 different ones) matching the filters — for «удиви меня», «куда-нибудь сходить», «заспонтань», «что-нибудь на вечер», «не могу выбрать». Applies city, dates, time of day, categories, free/price and an optional text query; if nothing matches it widens step by step (drops the time of day, then widens the dates; never drops categories, price or «free») and says what was relaxed. `like_event` finds something else at the same day and time as a given event. For «ещё раз / другое», `exclude` takes `exclude_next` from the previous result. Each pick comes with a short `why` and its event URL.

Input Schema

{
  "type": "object",
  "properties": {
    "city": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80,
      "description": "Russian city exactly as the user named it: 'Москва', 'мск', 'Питер', 'СПб', 'в Казани', 'Нижний Новгород', or a slug like 'spb'. Required unless `near` is given; there is no default city."
    },
    "query": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120,
      "description": "Optional free text: performer, show title, venue, genre or topic — 'Щелкунчик', 'джаз', 'Большой театр', 'выставка Айвазовского', 'Би-2'. Omit it to browse by filters only."
    },
    "when": {
      "type": "string",
      "enum": [
        "today",
        "tomorrow",
        "weekend",
        "week"
      ],
      "description": "Date preset in the city's local time: today; tomorrow; weekend = the nearest Saturday–Sunday (on Sunday it means the next weekend); week = the next 7 days. For other dates use date_from/date_to. Exhibitions and festivals running during the dates are included."
    },
    "date_from": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "First day, YYYY-MM-DD, city-local, e.g. '2026-11-07'. Use with date_to."
    },
    "date_to": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Last day inclusive, YYYY-MM-DD, city-local. Same as date_from for a single day."
    },
    "time_of_day": {
      "type": "string",
      "enum": [
        "morning",
        "day",
        "evening",
        "night"
      ],
      "description": "Start time window, city-local: morning 06–12, day 12–18, evening 18–24, night 21–24. Matches sessions that start in the window; all-day items and exhibitions already running are left out."
    },
    "time_from": {
      "type": "string",
      "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
      "description": "Earliest start time HH:MM, e.g. '19:00' for «после семи». Overrides time_of_day."
    },
    "time_to": {
      "type": "string",
      "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
      "description": "Latest start time HH:MM. May be earlier than time_from for windows across midnight."
    },
    "categories": {
      "minItems": 1,
      "maxItems": 5,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "music",
          "standup",
          "theatre",
          "cinema",
          "exhibition",
          "art",
          "sport",
          "festival",
          "lecture",
          "kids",
          "party",
          "food",
          "tour",
          "games",
          "dating",
          "workshop",
          "outdoor",
          "ballet",
          "circus",
          "other"
        ]
      },
      "description": "Event categories, any of: music = concerts; standup; theatre; cinema; exhibition = exhibitions & museums; art; sport; festival; lecture = lectures & talks; kids = for children & families; party = parties & DJ sets; food = food & tastings; tour = excursions & city tours; games = quests & board games; dating; workshop = master classes; outdoor = active leisure; ballet = ballet & opera; circus = circus & shows; other. For children use kids."
    },
    "free_only": {
      "type": "boolean",
      "description": "Only free events (вход свободный, бесплатно)."
    },
    "price_max": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000,
      "description": "Maximum ticket price in rubles. Events with an unknown price are kept."
    },
    "near": {
      "type": "object",
      "properties": {
        "lat": {
          "type": "number",
          "minimum": -90,
          "maximum": 90
        },
        "lon": {
          "type": "number",
          "minimum": -180,
          "maximum": 180
        },
        "radius_km": {
          "description": "Search radius, km. Default 3.",
          "type": "number",
          "minimum": 0.3,
          "maximum": 25
        }
      },
      "required": [
        "lat",
        "lon"
      ],
      "additionalProperties": false,
      "description": "Search around a point: coordinates of a shared location or of a place whose coordinates are known. For a city as a whole there is `city`."
    },
    "like_event": {
      "description": "Event id or spontanno.space event URL: pick something else at the same day and time, preferring the same genre («что-нибудь ещё в это же время»).",
      "type": "string",
      "minLength": 1,
      "maxLength": 300
    },
    "exclude": {
      "description": "Event ids already shown in this conversation — they will not be picked again. For «ещё раз» pass `exclude_next` from the previous result.",
      "maxItems": 64,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 300
      }
    },
    "count": {
      "description": "How many different random picks, 1–3. Default 1.",
      "type": "integer",
      "minimum": 1,
      "maximum": 3
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "view": {
      "type": "string",
      "const": "spin"
    },
    "picks": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {},
        "additionalProperties": {}
      }
    },
    "rung": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "caption": {
      "type": "string"
    },
    "relaxed": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "exclude_next": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "site_url": {
      "type": "string"
    },
    "notes": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "view",
    "picks",
    "rung",
    "caption",
    "relaxed",
    "exclude_next",
    "site_url",
    "notes"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": {}
}
🟢get_event(event)

Full details of one event by its `id` from previous results or a spontanno.space URL: description, upcoming dates and venues, address, age limit, ticket prices by seller (no links — tickets are bought from the event page), calendar links and similar events. Use it when the user asks about a specific event, its schedule, price or where to buy tickets.

Input Schema

{
  "type": "object",
  "properties": {
    "event": {
      "type": "string",
      "minLength": 1,
      "maxLength": 300,
      "description": "Event `id` from a previous result (8 characters, e.g. 'k3J9xQ2m') or a full spontanno.space event URL."
    }
  },
  "required": [
    "event"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "view": {
      "type": "string",
      "const": "event"
    },
    "event": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "url": {
          "type": "string"
        }
      },
      "required": [
        "id",
        "title",
        "url"
      ],
      "additionalProperties": {}
    }
  },
  "required": [
    "view",
    "event"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": {}
}
🟢list_cities(query, limit)

Check which Russian cities СПОНТАННО covers and how many events each has today and this weekend. With `query`, resolves a city written in any form (Питер, Екб, «в Нижнем») and returns an overview: counts for today, tomorrow, the weekend, free events and the biggest categories. Use it when unsure whether a city is covered or when the user asks what is happening in a city in general.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "description": "City name in any form to check coverage and get an overview ('Казань', 'в Питере', 'ekb'). Omit to list the cities with the most events.",
      "type": "string",
      "minLength": 1,
      "maxLength": 80
    },
    "limit": {
      "description": "How many cities to list. Default 12.",
      "type": "integer",
      "minimum": 1,
      "maximum": 30
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "view": {
      "type": "string",
      "const": "cities"
    },
    "cities": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {},
        "additionalProperties": {}
      }
    },
    "notes": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "view",
    "cities",
    "notes"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": {}
}
🟡create_shortlist(event_ids, title)

Save 2–10 events from previous results as one shareable page spontanno.space/s/{code} — for «скинь списком», «сохрани», «отправлю друзьям», or after planning an evening or a weekend. Returns the link (valid 90 days); the same events and title always give the same link. Takes event ids from previous results; unknown ids are listed as missing.

Input Schema

{
  "type": "object",
  "properties": {
    "event_ids": {
      "minItems": 2,
      "maxItems": 10,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 300
      },
      "description": "Event ids from previous results, 2–10, in the order to show."
    },
    "title": {
      "description": "Short heading in Russian, e.g. 'Пятница вечером в Москве'. No links, contacts or emoji.",
      "type": "string",
      "minLength": 1,
      "maxLength": 80
    }
  },
  "required": [
    "event_ids"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "view": {
      "type": "string",
      "const": "shortlist"
    },
    "code": {
      "type": "string"
    },
    "url": {
      "type": "string"
    },
    "title": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "expires_at": {
      "type": "string"
    },
    "events": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {},
        "additionalProperties": {}
      }
    },
    "missing": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "view",
    "code",
    "url",
    "title",
    "expires_at",
    "events",
    "missing"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": {}
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded5 tools