Skip to main content
Glama

list_events

Read-onlyIdempotent

Find upcoming events — the tool for planning an outing. Compose filters freely: a date range (from/to), free text (q, accent-insensitive: "musica" finds "Música"), category, a price ceiling (price_max), and a point plus radius (near_lat/near_lng/radius_km — e.g. the coordinates of a place from get_place, or of the user). All filters are applied to the WHOLE calendar before paging, never to a first slice. Results are chronological by next occurrence; page with offset while hasMore is true. Each event carries numeric price ({min, max, currency, isFree, known} — known: false means the source publishes no price, not that it is free), lat/lng, and purchase ({mode, tool, url, platform}) telling you HOW to attend: reserve → reserve_event_tickets; rsvp → rsvp_event; external → only a human can buy, at url; free → just go. Events within the next 7 days include a weatherForecast. On a city-wide agenda, the first page lists availableCategories. Use get_event for the full description, line-up and ticket types of one event. Omit from/to to see every upcoming event — don't guess date windows to find one event. When filters match nothing, the response carries a hint with the closest events outside them.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "list_events"
  }
}

Input Schema

NameRequiredDescriptionDefault
qNoFree text — every word must appear in the title, venue or description. Accent-insensitive.
toNoLast day, inclusive, YYYY-MM-DD. Defaults to `from` (a single day). Max range 62 days. Multi-day runs that overlap the range are included.
fromNoFirst day, YYYY-MM-DD, in the site's local time zone (returned as `timeZone`). Defaults to today; past days are clamped to today.
sortNo"date" (default) = chronological by next occurrence; "distance" = nearest first (needs near_lat/near_lng).
limitNoMax events per page (default 20, max 50).
filterNoShortcut presets: "agora" = on stage at this exact moment (season runs and day-granular sources are excluded, because their stored window says nothing about whether a session is on right now); "hoje"/"amanha"/"fim-de-semana" = running on those days, including multi-day runs; "gratis" = free to attend, including externally-ticketed events priced at 0. Date presets cannot be combined with from/to; "gratis" can.
offsetNoSkip this many matches — pass the previous response's `nextOffset`. Max 500.
categoryNoEvent category, by label or slug (case- and accent-insensitive). On a city-wide agenda an unknown category returns the valid list.
near_latNoLatitude of the point to search around. Requires near_lng. Events without coordinates and online events are excluded.
near_lngNoLongitude of the point to search around. Requires near_lat.
price_maxNoMax price of the cheapest ticket, in the event's currency. Free events always pass; events with no published price are excluded unless include_unknown_price is true.
radius_kmNoRadius around near_lat/near_lng in km (default 3, max 50). Each result then carries `distanceKm`.
upcoming_onlyNoOnly return upcoming or in-progress events (default true).
include_unknown_priceNoWith price_max: also return events whose price is not published (check them at `purchase.url`). Default false.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed13 schema fields changed
    • addedInput schema / properties / category
      Added value: +{
      +  "description": "Event category, by label or slug (case- and accent-insensitive). On a city-wide agenda an unknown category returns the valid list.",
      +  "examples": [
      +    "Música",
      +    "teatro"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / filter / description
      Previous value: -"Narrow the list: \"agora\" = on stage at this exact moment (season runs and day-granular sources are excluded, because their stored window says nothing about whether a session is on right now); \"hoje\"/\"amanha\"/\"fim-de-semana\" = running on those days, including multi-day runs; \"gratis\" = free to attend, including externally-ticketed events priced at 0."New value: +"Shortcut presets: \"agora\" = on stage at this exact moment (season runs and day-granular sources are excluded, because their stored window says nothing about whether a session is on right now); \"hoje\"/\"amanha\"/\"fim-de-semana\" = running on those days, including multi-day runs; \"gratis\" = free to attend, including externally-ticketed events priced at 0. Date presets cannot be combined with from/to; \"gratis\" can."
    • addedInput schema / properties / from
      Added value: +{
      +  "description": "First day, YYYY-MM-DD, in the site's local time zone (returned as `timeZone`). Defaults to today; past days are clamped to today.",
      +  "examples": [
      +    "2026-11-14"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / include_unknown_price
      Added value: +{
      +  "description": "With price_max: also return events whose price is not published (check them at `purchase.url`). Default false.",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / limit / description
      Previous value: -"Max events to return (default 20, max 50)."New value: +"Max events per page (default 20, max 50)."
    • addedInput schema / properties / near_lat
      Added value: +{
      +  "description": "Latitude of the point to search around. Requires near_lng. Events without coordinates and online events are excluded.",
      +  "type": "number"
      +}
    • addedInput schema / properties / near_lng
      Added value: +{
      +  "description": "Longitude of the point to search around. Requires near_lat.",
      +  "type": "number"
      +}
    • addedInput schema / properties / offset
      Added value: +{
      +  "description": "Skip this many matches — pass the previous response's `nextOffset`. Max 500.",
      +  "type": "number"
      +}
    • addedInput schema / properties / price_max
      Added value: +{
      +  "description": "Max price of the cheapest ticket, in the event's currency. Free events always pass; events with no published price are excluded unless include_unknown_price is true.",
      +  "type": "number"
      +}
    • addedInput schema / properties / q
      Added value: +{
      +  "description": "Free text — every word must appear in the title, venue or description. Accent-insensitive.",
      +  "examples": [
      +    "jazz",
      +    "teatro infantil"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / radius_km
      Added value: +{
      +  "description": "Radius around near_lat/near_lng in km (default 3, max 50). Each result then carries `distanceKm`.",
      +  "type": "number"
      +}
    • addedInput schema / properties / sort
      Added value: +{
      +  "description": "\"date\" (default) = chronological by next occurrence; \"distance\" = nearest first (needs near_lat/near_lng).",
      +  "enum": [
      +    "date",
      +    "distance"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / to
      Added value: +{
      +  "description": "Last day, inclusive, YYYY-MM-DD. Defaults to `from` (a single day). Max range 62 days. Multi-day runs that overlap the range are included.",
      +  "type": "string"
      +}
  2. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), yet the description adds substantial behavior the annotations cannot convey: filters apply to the WHOLE calendar before paging, results are chronological by next occurrence, paging uses offset/nextOffset while hasMore is true, price.known=false means unpublished rather than free, weatherForecast appears only within 7 days, availableCategories appears on the first page of a city-wide agenda, and empty matches return a hint. That is unusually rich disclosure beyond the structured fields.

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?

It is front-loaded with purpose, then filters, then result shape and routing, which is the right order for an agent. It is long, and the sentence enumerating q/category/price_max/near_lat/radius_km partly restates parameters already described in the schema, so a small amount of text does not fully earn its place. Still dense and free of filler.

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 14-parameter, zero-required tool with no output schema, the description covers what an agent would otherwise have to discover empirically: the return envelope (hasMore/nextOffset/hint/availableCategories), the per-event price and purchase structures, and how to act on each purchase mode. Nothing essential for correct invocation is 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 documents every parameter and the baseline would be 3. The description still adds cross-parameter meaning: it ties near_lat/near_lng to real sources of coordinates (a place from get_place, or the user's location), explains that offset should be fed from the previous response's nextOffset, and states the accent-insensitive matching behavior with a concrete example. The gain is real but incremental over an already complete schema.

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 upcoming events") plus a framing clause ("the tool for planning an outing"), and it explicitly separates this tool from get_event ("Use get_event for the full description, line-up and ticket types of one event"). An agent can pick between listing and fetching a single event without opening either schema.

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 positive guidance (compose filters freely, omit from/to to see everything), explicit exclusions ("don't guess date windows to find one event"), and named alternatives with conditions (get_event for one event's detail; get_place for coordinates; reserve_event_tickets/rsvp_event chosen by the event's purchase.mode). Routing is fully specified rather than implied.

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