Skip to main content
Glama

mygn & rundown.city – Events Hamburg, München, Oldenburg, San Francisco

Search events

search_events
Read-onlyIdempotent

Find things to do in Hamburg, München, Oldenburg or San Francisco for a date range: date ideas, tonight, this weekend, free events, family outings, concerts, parties, exhibitions, markets. Use this when a user asks 'what can I do...', 'was ist los...', 'wohin heute Abend'. For best picks use sort='curation'. query is a literal keyword match (e.g. 'jazz', 'Flohmarkt'); never put moods like 'romantic' or 'date' in query. Instead of dates pass when (today, tonight, this_weekend ...). Items: occurrence_id (for get_event), title, category, starts_at (hub local time), all_day, time_unknown (true: no showtime known, never show 00:00), venue, price_text, price_known (false: price not known, do not assume free), age_min, audience, tags, share_url (the event's own page on our site or, without one, our hub page, the source to cite) from mygn.de or rundown.city.

Input Schema

NameRequiredDescriptionDefault
hubYesHub (city): one of hamburg, muenchen, oldenburg, san-francisco; names and abbreviations work too ('Munich', 'MUC', 'HH', 'OL', 'SF', 'SFO', 'Bay Area'), any case.
sortNo'time' lists chronologically (default), events without a known start time at the end of their day; 'curation' lists the editorially ranked best first (equal ranks in time order). 'start' and 'date' are accepted as 'time'.time
whenNotoday, tonight (today from 18:00 unless time_from is given), tomorrow, this_weekend (the coming Saturday and Sunday; on a weekend day the current one, on a Sunday that day alone), next_weekend (the one after), in the hub's local calendar; echoed as resolved. Replaces date_from and date_to (naming both is an error).
limitNoPage size, 1 to 50 (clamped); default 25. total counts items.
queryNoLiteral keywords for title and summary, every word must match (compounds such as Halloweenparty are split, plural endings of whole words are read). Never a mood like 'romantic'. Filler, pronoun and time words (date, night, heute, wochenende, ideas, things to do, was ist los, ich, my, ...) are ignored; use when for dates; a query of only those has query_dropped true. Kinder, Kids, Familie and family list family events first instead of filtering. If nothing matches, unrelated curated picks of the same filters answer, with query_fallback true: tell the user nothing matched (not with group_by 'event'). A hint alone is advice, not a miss.
venueNoVenue name or town; matches the venue name as shown in results, so a town name keeps every venue in that town.
cursorNoThe next_cursor of the previous page, to read on.
date_toNoLast day, inclusive, in the hub's own calendar, YYYY-MM-DD; not before date_from. Required unless when is given.
time_toNoKeep events that start at or before this time of day, HH:MM in the hub's local time (24 hours).
verboseNotrue adds the internal fields (curation score and flags, signals, series_kind, kind, long_running) that are left out by default.
group_byNo'occurrence': an event once per day, its time slots in slots (occurrence_id, starts_at, ends_at; the item itself is the first slot). 'event': each event once for the whole range, with first_starts_at, last_starts_at, occurrences_count of its matching dates (filters apply first; with sort 'curation' placed by its best match) and its season_first_starts_at, season_last_starts_at, season_occurrences_count (all its upcoming dates up to 31 days ahead, ignoring the filters; the real end may lie beyond) with starts_before_range and continues_after_range. Default: 'event' when sort is 'curation' and the range spans more than one day, else 'occurrence'. Use 'event' for 'when does X open'.
date_fromNoFirst day, inclusive, in the hub's own calendar, YYYY-MM-DD; not earlier than yesterday. At most 31 days to date_to, which is at most 31 days from today. Required unless when is given.
free_onlyNotrue keeps only events known to be free.
time_fromNoKeep events that start at or after this time of day, HH:MM in the hub's local time (24 hours), for 'tonight'. Events without a known start time (all_day, time_unknown) are dropped. With a time_to before time_from the range wraps past midnight.
categoriesNoKeep only events of these category slugs (see list_categories); use ['family'] for children's and family events. An unknown slug is an error.
max_age_minNoKeep events with no stated minimum age or one of at most this age; 0 means no age restriction stated.
family_friendlyNotrue keeps events suitable for parents with children (audience.family true; without an audience rating: category family without a minimum age of 16 or more); false keeps the rest.

Output Schema

NameRequiredDescriptionDefault
hubYes
hintNo
itemsYes
totalYes
resolvedNo
truncatedYes
next_cursorYes
query_droppedNo
query_fallbackNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedInput schema / properties / query / description
      Previous value: -"Literal keywords for title and summary, each matched on its own (all words, else any word; compounds such as Halloweenparty are split). Never a mood like 'romantic'. Filler words (date, night, tonight, heute, abend, ideas, events, things to do, was ist los, what's on) are ignored. Kinder, Kids, Familie and family list family events first instead of filtering. If nothing matches, unrelated curated picks of the same filters answer, with query_fallback true and a hint: tell the user nothing matched (not with group_by 'event')."New value: +"Literal keywords for title and summary, every word must match (compounds such as Halloweenparty are split, plural endings of whole words are read). Never a mood like 'romantic'. Filler, pronoun and time words (date, night, heute, wochenende, ideas, things to do, was ist los, ich, my, ...) are ignored; use when for dates; a query of only those has query_dropped true. Kinder, Kids, Familie and family list family events first instead of filtering. If nothing matches, unrelated curated picks of the same filters answer, with query_fallback true: tell the user nothing matched (not with group_by 'event'). A hint alone is advice, not a miss."
    • addedOutput schema / $defs / SearchItem / properties / venue_note
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / query_dropped
      Added value: +{
      +  "type": "boolean"
      +}
  2. Changed145 schema fields changed
    • changedInput schema / properties / categories / examples
      Previous value: -[
      -  [
      -    "family"
      -  ],
      -  [
      -    "concert",
      -    "show"
      -  ]
      -]New value: +[
      +  [
      +    "family"
      +  ]
      +]
    • removedInput schema / properties / categories / title
      Removed value: -"Categories"
    • removedInput schema / properties / cursor / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / cursor / default
      Removed value: -null
    • removedInput schema / properties / cursor / title
      Removed value: -"Cursor"
    • addedInput schema / properties / cursor / type
      Added value: +"string"
    • changedInput schema / properties / date_from / description
      Previous value: -"First day, inclusive, in the hub's own calendar, YYYY-MM-DD. Not earlier than yesterday; the window to date_to is at most 31 days and ends at most 31 days from today."New value: +"First day, inclusive, in the hub's own calendar, YYYY-MM-DD; not earlier than yesterday. At most 31 days to date_to, which is at most 31 days from today. Required unless when is given."
    • removedInput schema / properties / date_from / title
      Removed value: -"Date From"
    • changedInput schema / properties / date_to / description
      Previous value: -"Last day, inclusive, in the hub's own calendar, YYYY-MM-DD; not before date_from."New value: +"Last day, inclusive, in the hub's own calendar, YYYY-MM-DD; not before date_from. Required unless when is given."
    • removedInput schema / properties / date_to / title
      Removed value: -"Date To"
    • removedInput schema / properties / family_friendly / anyOf
      Removed value: -[
      -  {
      -    "type": "boolean"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / family_friendly / default
      Removed value: -null
    • removedInput schema / properties / family_friendly / title
      Removed value: -"Family Friendly"
    • addedInput schema / properties / family_friendly / type
      Added value: +"boolean"
    • removedInput schema / properties / free_only / title
      Removed value: -"Free Only"
    • removedInput schema / properties / group_by / default
      Removed value: -"occurrence"
    • changedInput schema / properties / group_by / description
      Previous value: -"'occurrence' (default) lists an event once per day, with its time slots; 'event' lists each event once for the whole date range, with first_starts_at, last_starts_at and occurrences_count of its matching dates (all filters apply first; with sort 'curation' it is placed by its best-ranked match but shows its earliest) and its season season_first_starts_at, season_last_starts_at, season_occurrences_count (all its upcoming dates in our hub calendar, up to 31 days ahead, not narrowed by the filters; the real end may lie beyond) with starts_before_range and continues_after_range. Use 'event' for 'when does X open' or 'when is X on'."New value: +"'occurrence': an event once per day, its time slots in slots (occurrence_id, starts_at, ends_at; the item itself is the first slot). 'event': each event once for the whole range, with first_starts_at, last_starts_at, occurrences_count of its matching dates (filters apply first; with sort 'curation' placed by its best match) and its season_first_starts_at, season_last_starts_at, season_occurrences_count (all its upcoming dates up to 31 days ahead, ignoring the filters; the real end may lie beyond) with starts_before_range and continues_after_range. Default: 'event' when sort is 'curation' and the range spans more than one day, else 'occurrence'. Use 'event' for 'when does X open'."
    • removedInput schema / properties / group_by / examples
      Removed value: -[
      -  "event"
      -]
    • removedInput schema / properties / group_by / title
      Removed value: -"Group By"
    • changedInput schema / properties / hub / description
      Previous value: -"Hub (city): one of hamburg, muenchen, oldenburg, san-francisco. Case-insensitive; names and abbreviations are accepted too, for example 'Hamburg', 'HH', 'München', 'Munich', 'Muenchen', 'MUC', 'Oldenburg', 'OL', 'Oldenburg (Oldb)', 'SF', 'SFO', 'San Fran' or 'San Francisco'. Results report the slug."New value: +"Hub (city): one of hamburg, muenchen, oldenburg, san-francisco; names and abbreviations work too ('Munich', 'MUC', 'HH', 'OL', 'SF', 'SFO', 'Bay Area'), any case."
    • removedInput schema / properties / hub / examples
      Removed value: -[
      -  "hamburg",
      -  "muenchen",
      -  "san-francisco"
      -]
    • removedInput schema / properties / hub / title
      Removed value: -"Hub"
    • removedInput schema / properties / limit / anyOf
      Removed value: -[
      -  {
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / limit / default
      Removed value: -null
    • changedInput schema / properties / limit / description
      Previous value: -"Page size, 1 to 50 (clamped); default 25."New value: +"Page size, 1 to 50 (clamped); default 25. total counts items."
    • removedInput schema / properties / limit / examples
      Removed value: -[
      -  25
      -]
    • removedInput schema / properties / limit / title
      Removed value: -"Limit"
    • addedInput schema / properties / limit / type
      Added value: +"integer"
    • removedInput schema / properties / max_age_min / anyOf
      Removed value: -[
      -  {
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / max_age_min / default
      Removed value: -null
    • removedInput schema / properties / max_age_min / examples
      Removed value: -[
      -  12
      -]
    • removedInput schema / properties / max_age_min / title
      Removed value: -"Max Age Min"
    • addedInput schema / properties / max_age_min / type
      Added value: +"integer"
    • removedInput schema / properties / query / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / query / default
      Removed value: -null
    • changedInput schema / properties / query / description
      Previous value: -"Words to look for in title and summary, each matched on its own (case-insensitive; all words, else any word). Kinder, Kids, Familie and family list family events first (then the rest, each group in the requested sort) instead of filtering."New value: +"Literal keywords for title and summary, each matched on its own (all words, else any word; compounds such as Halloweenparty are split). Never a mood like 'romantic'. Filler words (date, night, tonight, heute, abend, ideas, events, things to do, was ist los, what's on) are ignored. Kinder, Kids, Familie and family list family events first instead of filtering. If nothing matches, unrelated curated picks of the same filters answer, with query_fallback true and a hint: tell the user nothing matched (not with group_by 'event')."
    • removedInput schema / properties / query / title
      Removed value: -"Query"
    • addedInput schema / properties / query / type
      Added value: +"string"
    • removedInput schema / properties / sort / examples
      Removed value: -[
      -  "time"
      -]
    • removedInput schema / properties / sort / title
      Removed value: -"Sort"
    • removedInput schema / properties / time_from / anyOf
      Removed value: -[
      -  {
      -    "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]$",
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / time_from / default
      Removed value: -null
    • changedInput schema / properties / time_from / description
      Previous value: -"Keep events that start at or after this time of day, HH:MM in the hub's local time (24 hours). Events without a known start time (all_day, time_unknown) are dropped when a time is given. With a time_to before time_from the range wraps past midnight."New value: +"Keep events that start at or after this time of day, HH:MM in the hub's local time (24 hours), for 'tonight'. Events without a known start time (all_day, time_unknown) are dropped. With a time_to before time_from the range wraps past midnight."
    • removedInput schema / properties / time_from / examples
      Removed value: -[
      -  "18:00"
      -]
    • addedInput schema / properties / time_from / pattern
      Added value: +"^([01][0-9]|2[0-3]):[0-5][0-9]$"
    • removedInput schema / properties / time_from / title
      Removed value: -"Time From"
    • addedInput schema / properties / time_from / type
      Added value: +"string"
    • removedInput schema / properties / time_to / anyOf
      Removed value: -[
      -  {
      -    "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]$",
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / time_to / default
      Removed value: -null
    • changedInput schema / properties / time_to / description
      Previous value: -"Keep events that start at or before this time of day, HH:MM in the hub's local time (24 hours). See time_from. A range that wraps past midnight (time_from after time_to) applies to the start time of each day of the window."New value: +"Keep events that start at or before this time of day, HH:MM in the hub's local time (24 hours)."
    • removedInput schema / properties / time_to / examples
      Removed value: -[
      -  "23:59"
      -]
    • addedInput schema / properties / time_to / pattern
      Added value: +"^([01][0-9]|2[0-3]):[0-5][0-9]$"
    • removedInput schema / properties / time_to / title
      Removed value: -"Time To"
    • addedInput schema / properties / time_to / type
      Added value: +"string"
    • removedInput schema / properties / venue / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / venue / default
      Removed value: -null
    • removedInput schema / properties / venue / examples
      Removed value: -[
      -  "Elbphilharmonie"
      -]
    • removedInput schema / properties / venue / title
      Removed value: -"Venue"
    • addedInput schema / properties / venue / type
      Added value: +"string"
    • removedInput schema / properties / verbose / title
      Removed value: -"Verbose"
    • addedInput schema / properties / when
      Added value: +{
      +  "description": "today, tonight (today from 18:00 unless time_from is given), tomorrow, this_weekend (the coming Saturday and Sunday; on a weekend day the current one, on a Sunday that day alone), next_weekend (the one after), in the hub's local calendar; echoed as resolved. Replaces date_from and date_to (naming both is an error).",
      +  "enum": [
      +    "today",
      +    "tonight",
      +    "tomorrow",
      +    "this_weekend",
      +    "next_weekend"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "hub",
      -  "date_from",
      -  "date_to"
      -]New value: +[
      +  "hub"
      +]
    • removedInput schema / title
      Removed value: -"search_eventsArguments"
    • changedOutput schema / $defs / Audience / description
      Previous value: -"The pre-computed audience verdict of one event (docs/specs/mcp-public.md).\n\n``family`` and ``adults_only`` are the routed booleans (null when neither\nthe model nor a rule decides); ``family_p`` is the raw family-friendly\nprobability so a caller can set its own threshold; ``visitor_pick`` is a\n0..1 ranking hint, not a filter."New value: +"Audience verdict of one event: ``family`` and ``adults_only`` are true, false or\nnull (unsure), ``visitor_pick`` (0 to 1) how much a first-time visitor would be glad\nto find it (a ranking hint, not a filter), ``family_p`` (0 to 1) the raw family\nprobability behind ``family``."
    • removedOutput schema / $defs / Audience / properties / adults_only / anyOf
      Removed value: -[
      -  {
      -    "type": "boolean"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / $defs / Audience / properties / adults_only / title
      Removed value: -"Adults Only"
    • addedOutput schema / $defs / Audience / properties / adults_only / type
      Added value: +[
      +  "boolean",
      +  "null"
      +]
    • removedOutput schema / $defs / Audience / properties / family / anyOf
      Removed value: -[
      -  {
      -    "type": "boolean"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / $defs / Audience / properties / family / title
      Removed value: -"Family"
    • addedOutput schema / $defs / Audience / properties / family / type
      Added value: +[
      +  "boolean",
      +  "null"
      +]
    • removedOutput schema / $defs / Audience / properties / family_p / title
      Removed value: -"Family P"
    • removedOutput schema / $defs / Audience / properties / visitor_pick / title
      Removed value: -"Visitor Pick"
    • removedOutput schema / $defs / Audience / title
      Removed value: -"Audience"
    • removedOutput schema / $defs / Curation / description
      Removed value: -"The compact curation verdict of one event (docs/specs/event-curation.md)."
    • removedOutput schema / $defs / Curation / properties / flags / title
      Removed value: -"Flags"
    • removedOutput schema / $defs / Curation / properties / one_off / title
      Removed value: -"One Off"
    • removedOutput schema / $defs / Curation / properties / score / title
      Removed value: -"Score"
    • removedOutput schema / $defs / Curation / title
      Removed value: -"Curation"
    • addedOutput schema / $defs / Resolved
      Added value: +{
      +  "properties": {
      +    "date_from": {
      +      "type": "string"
      +    },
      +    "date_to": {
      +      "type": "string"
      +    },
      +    "time_from": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "when": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "when",
      +    "date_from",
      +    "date_to",
      +    "time_from"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / $defs / SearchItem / description
      Removed value: -"One compact record of ``search_events``: an event on one day, or with\n``group_by=\"event\"`` an event over the whole window. The item's own\n``occurrence_id`` and ``starts_at`` are those of its first slot (first match)."
    • removedOutput schema / $defs / SearchItem / properties / age_min / anyOf
      Removed value: -[
      -  {
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / $defs / SearchItem / properties / age_min / title
      Removed value: -"Age Min"
    • addedOutput schema / $defs / SearchItem / properties / age_min / type
      Added value: +[
      +  "integer",
      +  "null"
      +]
    • removedOutput schema / $defs / SearchItem / properties / all_day / title
      Removed value: -"All Day"
    • removedOutput schema / $defs / SearchItem / properties / attend_mode / title
      Removed value: -"Attend Mode"
    • removedOutput schema / $defs / SearchItem / properties / category / title
      Removed value: -"Category"
    • removedOutput schema / $defs / SearchItem / properties / continues_after_range / title
      Removed value: -"Continues After Range"
    • removedOutput schema / $defs / SearchItem / properties / display_title / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / $defs / SearchItem / properties / display_title / title
      Removed value: -"Display Title"
    • addedOutput schema / $defs / SearchItem / properties / display_title / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / $defs / SearchItem / properties / event_id / title
      Removed value: -"Event Id"
    • removedOutput schema / $defs / SearchItem / properties / first_starts_at / title
      Removed value: -"First Starts At"
    • removedOutput schema / $defs / SearchItem / properties / is_free / anyOf
      Removed value: -[
      -  {
      -    "type": "boolean"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / $defs / SearchItem / properties / is_free / title
      Removed value: -"Is Free"
    • addedOutput schema / $defs / SearchItem / properties / is_free / type
      Added value: +[
      +  "boolean",
      +  "null"
      +]
    • removedOutput schema / $defs / SearchItem / properties / kind / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / $defs / SearchItem / properties / kind / title
      Removed value: -"Kind"
    • addedOutput schema / $defs / SearchItem / properties / kind / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / $defs / SearchItem / properties / last_starts_at / title
      Removed value: -"Last Starts At"
    • removedOutput schema / $defs / SearchItem / properties / long_running / title
      Removed value: -"Long Running"
    • removedOutput schema / $defs / SearchItem / properties / long_running_dates / title
      Removed value: -"Long Running Dates"
    • removedOutput schema / $defs / SearchItem / properties / occurrence_id / title
      Removed value: -"Occurrence Id"
    • removedOutput schema / $defs / SearchItem / properties / occurrences_count / title
      Removed value: -"Occurrences Count"
    • addedOutput schema / $defs / SearchItem / properties / price_known
      Added value: +{
      +  "type": "boolean"
      +}
    • removedOutput schema / $defs / SearchItem / properties / price_text / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / $defs / SearchItem / properties / price_text / title
      Removed value: -"Price Text"
    • addedOutput schema / $defs / SearchItem / properties / price_text / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / $defs / SearchItem / properties / season_first_starts_at / title
      Removed value: -"Season First Starts At"
    • removedOutput schema / $defs / SearchItem / properties / season_last_starts_at / title
      Removed value: -"Season Last Starts At"
    • removedOutput schema / $defs / SearchItem / properties / season_occurrences_count / title
      Removed value: -"Season Occurrences Count"
    • removedOutput schema / $defs / SearchItem / properties / series_kind / title
      Removed value: -"Series Kind"
    • removedOutput schema / $defs / SearchItem / properties / share_url / title
      Removed value: -"Share Url"
    • removedOutput schema / $defs / SearchItem / properties / slots / title
      Removed value: -"Slots"
    • removedOutput schema / $defs / SearchItem / properties / starts_at / title
      Removed value: -"Starts At"
    • removedOutput schema / $defs / SearchItem / properties / starts_before_range / title
      Removed value: -"Starts Before Range"
    • removedOutput schema / $defs / SearchItem / properties / tags / title
      Removed value: -"Tags"
    • removedOutput schema / $defs / SearchItem / properties / time_unknown / title
      Removed value: -"Time Unknown"
    • removedOutput schema / $defs / SearchItem / properties / title / title
      Removed value: -"Title"
    • removedOutput schema / $defs / SearchItem / properties / venue / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / $defs / SearchItem / properties / venue / title
      Removed value: -"Venue"
    • addedOutput schema / $defs / SearchItem / properties / venue / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / $defs / SearchItem / required
      Previous value: -[
      -  "occurrence_id",
      -  "event_id",
      -  "title",
      -  "display_title",
      -  "category",
      -  "starts_at",
      -  "all_day",
      -  "time_unknown",
      -  "attend_mode",
      -  "age_min",
      -  "audience",
      -  "is_free",
      -  "tags",
      -  "price_text",
      -  "venue",
      -  "share_url"
      -]New value: +[
      +  "occurrence_id",
      +  "event_id",
      +  "title",
      +  "display_title",
      +  "category",
      +  "starts_at",
      +  "all_day",
      +  "time_unknown",
      +  "attend_mode",
      +  "age_min",
      +  "audience",
      +  "is_free",
      +  "tags",
      +  "price_text",
      +  "price_known",
      +  "venue",
      +  "share_url"
      +]
    • removedOutput schema / $defs / SearchItem / title
      Removed value: -"SearchItem"
    • removedOutput schema / $defs / SlimSignals / description
      Removed value: -"The one signal a search item carries."
    • removedOutput schema / $defs / SlimSignals / properties / city_verified / title
      Removed value: -"City Verified"
    • removedOutput schema / $defs / SlimSignals / title
      Removed value: -"SlimSignals"
    • removedOutput schema / $defs / Slot / description
      Removed value: -"One time slot of an event on one day."
    • removedOutput schema / $defs / Slot / properties / ends_at / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / $defs / Slot / properties / ends_at / title
      Removed value: -"Ends At"
    • addedOutput schema / $defs / Slot / properties / ends_at / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / $defs / Slot / properties / occurrence_id / title
      Removed value: -"Occurrence Id"
    • removedOutput schema / $defs / Slot / properties / starts_at / title
      Removed value: -"Starts At"
    • removedOutput schema / $defs / Slot / title
      Removed value: -"Slot"
    • removedOutput schema / description
      Removed value: -"The page ``search_events`` returns."
    • addedOutput schema / properties / hint
      Added value: +{
      +  "type": "string"
      +}
    • removedOutput schema / properties / hub / title
      Removed value: -"Hub"
    • removedOutput schema / properties / items / title
      Removed value: -"Items"
    • removedOutput schema / properties / next_cursor / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / properties / next_cursor / title
      Removed value: -"Next Cursor"
    • addedOutput schema / properties / next_cursor / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • addedOutput schema / properties / query_fallback
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / resolved
      Added value: +{
      +  "$ref": "#/$defs/Resolved"
      +}
    • removedOutput schema / properties / total / title
      Removed value: -"Total"
    • removedOutput schema / properties / truncated / title
      Removed value: -"Truncated"
    • removedOutput schema / title
      Removed value: -"SearchResult"
  3. Changed6 schema fields changed
    • changedInput schema / properties / group_by / description
      Previous value: -"'occurrence' (default) lists an event once per day, with its time slots; 'event' lists each event once for the whole date range, with first_starts_at, last_starts_at and occurrences_count of its matching dates (all filters apply first). Use 'event' for 'when does X open' or 'when is X on'."New value: +"'occurrence' (default) lists an event once per day, with its time slots; 'event' lists each event once for the whole date range, with first_starts_at, last_starts_at and occurrences_count of its matching dates (all filters apply first; with sort 'curation' it is placed by its best-ranked match but shows its earliest) and its season season_first_starts_at, season_last_starts_at, season_occurrences_count (all its upcoming dates in our hub calendar, up to 31 days ahead, not narrowed by the filters; the real end may lie beyond) with starts_before_range and continues_after_range. Use 'event' for 'when does X open' or 'when is X on'."
    • addedOutput schema / $defs / SearchItem / properties / continues_after_range
      Added value: +{
      +  "title": "Continues After Range",
      +  "type": "boolean"
      +}
    • addedOutput schema / $defs / SearchItem / properties / season_first_starts_at
      Added value: +{
      +  "title": "Season First Starts At",
      +  "type": "string"
      +}
    • addedOutput schema / $defs / SearchItem / properties / season_last_starts_at
      Added value: +{
      +  "title": "Season Last Starts At",
      +  "type": "string"
      +}
    • addedOutput schema / $defs / SearchItem / properties / season_occurrences_count
      Added value: +{
      +  "title": "Season Occurrences Count",
      +  "type": "integer"
      +}
    • addedOutput schema / $defs / SearchItem / properties / starts_before_range
      Added value: +{
      +  "title": "Starts Before Range",
      +  "type": "boolean"
      +}
  4. Changed6 schema fields changed
    • addedInput schema / properties / group_by
      Added value: +{
      +  "default": "occurrence",
      +  "description": "'occurrence' (default) lists an event once per day, with its time slots; 'event' lists each event once for the whole date range, with first_starts_at, last_starts_at and occurrences_count of its matching dates (all filters apply first). Use 'event' for 'when does X open' or 'when is X on'.",
      +  "enum": [
      +    "occurrence",
      +    "event"
      +  ],
      +  "examples": [
      +    "event"
      +  ],
      +  "title": "Group By",
      +  "type": "string"
      +}
    • changedInput schema / properties / sort / description
      Previous value: -"'time' lists chronologically (default); 'curation' lists the editorially ranked best first."New value: +"'time' lists chronologically (default), events without a known start time at the end of their day; 'curation' lists the editorially ranked best first (equal ranks in time order). 'start' and 'date' are accepted as 'time'."
    • changedOutput schema / $defs / SearchItem / description
      Previous value: -"One compact record of ``search_events``: an event on one day. The item's own\n``occurrence_id`` and ``starts_at`` are those of its first slot."New value: +"One compact record of ``search_events``: an event on one day, or with\n``group_by=\"event\"`` an event over the whole window. The item's own\n``occurrence_id`` and ``starts_at`` are those of its first slot (first match)."
    • addedOutput schema / $defs / SearchItem / properties / first_starts_at
      Added value: +{
      +  "title": "First Starts At",
      +  "type": "string"
      +}
    • addedOutput schema / $defs / SearchItem / properties / last_starts_at
      Added value: +{
      +  "title": "Last Starts At",
      +  "type": "string"
      +}
    • addedOutput schema / $defs / SearchItem / properties / occurrences_count
      Added value: +{
      +  "title": "Occurrences Count",
      +  "type": "integer"
      +}
  5. First observed

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint and idempotentHint annotations, the description discloses important behavior: fallback curated picks with query_fallback true when nothing matches, query_dropped for filler-only queries, time_unknown meaning no showtime should be inferred as 00:00, and price_known false meaning price must not be assumed free. It also explains that share_url is the citation source and that group_by changes whether results are per occurrence or per event. This is substantial behavioral context not supplied by the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose and usage guidance, and most sentences earn their place by clarifying query behavior, date handling, sorting, grouping, and result interpretation. It is somewhat dense and includes a long enumeration of result item fields even though an output schema exists. That output-field list is not purely redundant because it carries warnings like never show 00:00 and do not assume free, but it still makes the description longer than strictly necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 17-parameter search tool with an output schema and read-only annotations, the description covers the critical decision points and gotchas: user-intent triggers, query constraints, when versus explicit dates, sorting for curation, grouping for event-level questions, and fallback semantics. Remaining details such as pagination, limit, venue matching, and most filters are fully documented in the schema. Nothing essential for correct invocation appears to be missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already carries the baseline parameter definitions. The description still adds valuable semantics beyond the schema, especially that query is a literal keyword match and must not contain moods, that when replaces date_from/date_to and naming both is an error, and that group_by 'event' answers 'when does X open'. It does not add equivalent guidance for every filter, but it meaningfully enriches the most error-prone parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: find events across named hubs and date ranges, with concrete examples like concerts, parties, and markets. It distinguishes itself from get_event by saying occurrence_id is for get_event, and from list_categories by pointing to category slugs. An agent can tell this is the broad search tool rather than a detail, taxonomy, or hub-listing tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit user-intent triggers such as "what can I do...", "was ist los...", and "wohin heute Abend", and recommends sort='curation' for best picks. It also states clear exclusions: query must be literal keywords, never moods like 'romantic' or 'date'; dates should go in when rather than query; and group_by 'event' is the right choice for 'when does X open'. These are concrete when-to-use and when-not-to-use rules.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources