Skip to main content
Glama

SFomo: Bay Area events

Get one event

get_event
Read-onlyIdempotent

Get the full listing for one upcoming event by the id that search_events, list_upcoming or find_performer returned: title, dates, venue, price (all-in, or "See tickets"), the original listing (link), every source that lists it and first_seen / last_seen / last_fetched dates. Ids stay the same while an event is listed; a past or removed event returns an error, so search again. No sign-in; each client gets 30 calls a minute and 2,500 event rows an hour.

Input Schema

NameRequiredDescriptionDefault
idYes12-character event id

Output Schema

NameRequiredDescriptionDefault
eventYes
coverageNoCoverage and accuracy page
attributionNo
data_generatedNoWhen this city's data was last published

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedOutput schema / properties / event / properties / venue_status
      Added value: +{
      +  "description": "Present only when location is empty, and says why (we never guess a venue): rsvp = the address is shared after RSVP/registration; tba = the venue isn't decided; hidden = the source shows the venue to its members only (Meetup stubs; /mcp leaves these out, so you won't see it here); title = the title names the place; text = the description names a place; unset = the host left it blank. Open the link for the venue",
      +  "enum": [
      +    "rsvp",
      +    "tba",
      +    "hidden",
      +    "title",
      +    "text",
      +    "unset"
      +  ],
      +  "type": "string"
      +}
  2. Changed3 schema fields changed
    • addedOutput schema / properties / event / properties / changed
      Added value: +{
      +  "description": "When we last saw the title, date or time, venue, link, price or status change (local ISO time); the first-seen day for older events",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / event / properties / event_status
      Added value: +{
      +  "description": "What a source says: postponed (no new date yet; listed on its original date), rescheduled (this is the new date), moved (to another venue; location is the new one), sold_out. Absent = scheduled as listed; cancelled events are left out",
      +  "enum": [
      +    "sold_out",
      +    "postponed",
      +    "rescheduled",
      +    "moved"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / event / properties / status_note
      Added value: +{
      +  "description": "The source's own wording of event_status, e.g. \"Moved to The Warfield\"",
      +  "type": "string"
      +}
  3. Changed1 schema field changed
    • addedOutput schema / properties / event / properties / checked_live
      Added value: +{
      +  "description": "When we last opened the original listing and found it still matches (time, venue, not cancelled); local ISO time. Absent = not checked in the last two days",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  4. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "attribution": {
      +      "type": "string"
      +    },
      +    "coverage": {
      +      "description": "Coverage and accuracy page",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "data_generated": {
      +      "description": "When this city's data was last published",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "event": {
      +      "properties": {
      +        "audience": {
      +          "description": "kids, teens or seniors when the event is only for them",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "biz_formats": {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "categories": {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "city": {
      +          "description": "Town or city within the metro",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "date": {
      +          "description": "Local start date, YYYY-MM-DD",
      +          "type": "string"
      +        },
      +        "distance_km": {
      +          "description": "With near: distance from the place",
      +          "type": "number"
      +        },
      +        "end": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "first_seen": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "free": {
      +          "type": "boolean"
      +        },
      +        "id": {
      +          "description": "Stable 12-character id; pass it to get_event",
      +          "type": "string"
      +        },
      +        "last_fetched": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "last_seen": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "link": {
      +          "description": "The original listing; keep it and credit What's Up In",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "location": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "neighborhood": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "performers": {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "possibly_free": {
      +          "type": "boolean"
      +        },
      +        "posted_by_sources": {
      +          "type": "number"
      +        },
      +        "price": {
      +          "description": "All-in price as the source states it, \"Free\", or \"See tickets\" when the source doesn't state the all-in total",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "recurring": {
      +          "description": "weekly, biweekly or monthly when the event is one date of a series",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "region": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "rv": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "sectors": {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "sold_out": {
      +          "type": "boolean"
      +        },
      +        "sources": {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "start": {
      +          "description": "Local start, ISO 8601, when the source gives a time",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "title": {
      +          "type": "string"
      +        },
      +        "topics": {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        }
      +      },
      +      "required": [
      +        "id",
      +        "title",
      +        "date"
      +      ],
      +      "type": "object"
      +    }
      +  },
      +  "required": [
      +    "event"
      +  ],
      +  "type": "object"
      +}
  5. Added

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, but the description adds real context beyond them: id stability while listed, error behavior for past/removed events, no sign-in required, and explicit rate limits (30 calls/minute, 2,500 event rows/hour). It also enumerates what the response contains, which is material for a read tool.

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 purpose and id source are front-loaded, and the rate limits land at the end where an agent will look before bulk-calling. The middle field enumeration is long but each item is a distinct piece of return information, so nearly every clause earns its place.

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?

Despite an output schema existing, the description covers the full operational picture for a one-parameter read tool: id provenance, id lifetime, error semantics, auth, and throttling. Nothing an agent needs to invoke it correctly 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 coverage is 100% and documents the single `id` parameter as a 12-character string, so the baseline is 3. The description adds genuine meaning: the id must come from one of three named search tools and remains stable while the event is listed.

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?

States a specific verb and resource ('Get the full listing for one upcoming event') and scopes it by the `id` parameter. It also names the three sibling tools that produce ids (search_events, list_upcoming, find_performer), so the agent can place it precisely in the workflow.

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?

Explicitly tells the agent where a valid id comes from, and covers the failure path: a past or removed event returns an error, so search again. That is concrete when-to-use and what-to-do-on-failure guidance rather than implied usage.

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