# SFomo: Bay Area events

> Read-only search of upcoming SF Bay Area events: AI/tech, dance, music, arts, food, fitness.

- name: ai.sfomo/events
- version: 0.1.0
- connection class: R0 (autonomous)
- trust: 82/100 flags: no-repository
- quality: 75/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/ai.sfomo%2Fevents
- tools: https://api.protogrid.dev/v1/servers/ai.sfomo%2Fevents/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "events": {
      "type": "http",
      "url": "https://sfomo.ai/mcp"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 98
- freshness: 100
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-96% +updated-12d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 75/100 (good)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 100 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 6 of 6 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 3,930 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 25 (weight 15)

- warn `stability.changes`: 19 tool changes in 30 days
- fail `stability.rug_pull`: 4 tools kept their name but changed most of their description in 30 days; review before trusting them

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 6, about 3,930 tokens to load them all
- tool set hash: 32be9649c874ab59e291fedabbe6edc1
- tools last changed: 2026-10-20T07:06:01.534Z
- badge: [![protogrid quality](https://protogrid.dev/badge/ai.sfomo/events.svg)](https://protogrid.dev/servers/ai.sfomo/events)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-20 `get_city` added
  - Get what SFomo covers in Bay Area: how many upcoming events it lists and for which dates, when the data was last published, how many sources feed it, and upcoming events per category, topic, neighborhood and town. Call it before searching to pick valid category, topic, neighborhood and town values, or to tell a user what this site covers; it returns counts only, no events (use search_events or list_upcoming for those). Takes no arguments. No sign-in; each client gets 30 calls a minute and 2,500 event rows an hour.
- 2026-10-20 `list_upcoming` changed (description, inputSchema, outputSchema) **meaning changed**
  - before: List the next N days of events, optionally for one category, topic or place. `by_day` counts every match per date; when there are more than `limit`, the rows shown are spread across the days (earliest first within each day), so narrow with category, topic or place, or page a single day with search_events from/to.
  - after: Browse the next N days of events day by day, with no search words. `by_day` counts every match per date, and when more events match than `limit` the rows are spread evenly across the days (earliest first within each day), so each day is represented. Use it for overviews like "what's happening this week"; for search words, free-only, a town or exact from/to dates use search_events, and for one event's details get_event. Optional filters: one category or topic, an audience, and a place: `neighborhood` keeps events inside a named area (radius_km widens it past the boundary), `near` ranks events by distance from a place or "lat,lon" within radius_km. No sign-in; each client gets 30 calls a minute and 2,500 event rows an hour.
- 2026-10-20 `get_event` changed (description, outputSchema) **meaning changed**
  - before: Look up one upcoming event by its stable `id` (as returned by search_events / list_upcoming), with its source link and first_seen / last_seen / last_fetched dates.
  - after: 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.
- 2026-10-20 `search_events` changed (description, inputSchema, outputSchema) **meaning changed**
  - before: Search upcoming Bay Area events (dance, AI, music, arts, food, sports, comedy, fun, exercise, volunteer, dating). All words in `query` must match title/location/performers/organizer/tags. Dates are local (America/Los_Angeles), YYYY-MM-DD.
  - after: Search every upcoming Bay Area event by words, dates, price, topic or place: dance, AI, music, arts, food, sports, comedy, exercise, volunteering, dating, business and professional networking. Use it whenever the question has search words, a date range ("this weekend": from/to), free-only, a town or an area; for a day-by-day overview of the next few days with no search words use list_upcoming, for one act by name find_performer. All words in `query` must appear in the title, venue, performers, organizer or tags; dates are local (America/Los_Angeles), YYYY-MM-DD. Results come earliest first, at most `limit`; `count` says how many matched in total, so narrow the search rather than paging. get_city lists valid neighborhood, town, category and topic values. No sign-in; each client gets 30 calls a minute and 2,500 event rows an hour.
- 2026-10-20 `create_custom_calendar` changed (description, inputSchema, outputSchema)
  - before: Build a subscribable calendar of upcoming Bay Area events from the user's interests. Returns a link that opens the calendar on SFomo (open_on_sfomo; give the user this first), subscribe links (Google Calendar, Apple/Outlook webcal, plain .ics) and a preview. The calendar refreshes itself every few hours, so new matching events keep appearing. An event is included if it matches ANY interest and no exclude term. Nothing is stored by SFomo: the interests are encoded in the link itself. Interview the user first (see the custom_calendar prompt), check matches with search_events, and call this again to adjust.
  - after: Build a subscribable calendar of upcoming Bay Area events from the user's interests. Returns a link that opens the calendar on SFomo (open_on_sfomo; give the user this first), subscribe links (Google Calendar, Apple/Outlook webcal, plain .ics) and a preview. The calendar refreshes itself every few hours, so new matching events keep appearing. An event is included if it matches ANY interest and no exclude term. Nothing is stored by SFomo: the interests are encoded in the link itself. Interview the user first (see the custom_calendar prompt), check matches with search_events, and call this again to adjust. For a one-off answer rather than a standing calendar, use search_events. No sign-in; each client gets 30 calls a minute and 2,500 event rows an hour.
- 2026-10-20 `find_performer` changed (description, outputSchema)
  - before: Find a performer, band, comedian or act in Bay Area by name (words in `query` must all match; case-insensitive) and get their upcoming events, top venues, genres or topics and the platforms that list them. Names come only from public event listings; there are no contact details. Use it for "when is <band> playing" or "who plays at <venue>". Use get_event with an id for one event's full listing.
  - after: Find a performer, band, comedian or act in Bay Area by name (words in `query` must all match; case-insensitive) and get their upcoming events, top venues, genres or topics and the platforms that list them. Names come only from public event listings; there are no contact details. Use it for "when is <band> playing" or "who plays at <venue>". For events by topic or venue rather than by name, use search_events; use get_event with an id for one event's full listing. No sign-in; each client gets 30 calls a minute and 2,500 event rows an hour.
- 2026-10-16 `list_upcoming` changed (title, description, inputSchema, annotations) **meaning changed**
  - before: List the next N days of events, optionally for one category.
  - after: List the next N days of events, optionally for one category, topic or place. `by_day` counts every match per date; when there are more than `limit`, the rows shown are spread across the days (earliest first within each day), so narrow with category, topic or place, or page a single day with search_events from/to.
- 2026-10-16 `get_event` changed (title, annotations)
- 2026-10-16 `search_events` changed (title, annotations)
- 2026-10-16 `create_custom_calendar` changed (title, annotations)

Full history: https://api.protogrid.dev/v1/servers/ai.sfomo%2Fevents/changes

## Remotes

- https://sfomo.ai/mcp (streamable-http, auth none, reachable true, uptime30d 0.95555556)

## Packages

_none_

## Tools (6)

- `create_custom_calendar`: Build a subscribable calendar of upcoming Bay Area events from the user's interests. Returns a link that opens the calendar on SFomo (open_on_sfomo; give the user this first), subscribe links (Google Calendar, Apple/Outlook webcal, plain .ics) and a preview. The calendar refreshes itself every few hours, so new matching events keep appearing. An event is included if it matches ANY interest and no exclude term. Nothing is stored by SFomo: the interests are encoded in the link itself. Interview the user first (see the custom_calendar prompt), check matches with search_events, and call this again to adjust. For a one-off answer rather than a standing calendar, use search_events. No sign-in; each client gets 30 calls a minute and 2,500 event rows an hour.
- `find_performer`: Find a performer, band, comedian or act in Bay Area by name (words in `query` must all match; case-insensitive) and get their upcoming events, top venues, genres or topics and the platforms that list them. Names come only from public event listings; there are no contact details. Use it for "when is <band> playing" or "who plays at <venue>". For events by topic or venue rather than by name, use search_events; use get_event with an id for one event's full listing. No sign-in; each client gets 30 calls a minute and 2,500 event rows an hour.
- `get_city`: Get what SFomo covers in Bay Area: how many upcoming events it lists and for which dates, when the data was last published, how many sources feed it, and upcoming events per category, topic, neighborhood and town. Call it before searching to pick valid category, topic, neighborhood and town values, or to tell a user what this site covers; it returns counts only, no events (use search_events or list_upcoming for those). Takes no arguments. No sign-in; each client gets 30 calls a minute and 2,500 event rows an hour.
- `get_event`: 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.
- `list_upcoming`: Browse the next N days of events day by day, with no search words. `by_day` counts every match per date, and when more events match than `limit` the rows are spread evenly across the days (earliest first within each day), so each day is represented. Use it for overviews like "what's happening this week"; for search words, free-only, a town or exact from/to dates use search_events, and for one event's details get_event. Optional filters: one category or topic, an audience, and a place: `neighborhood` keeps events inside a named area (radius_km widens it past the boundary), `near` ranks events by distance from a place or "lat,lon" within radius_km. No sign-in; each client gets 30 calls a minute and 2,500 event rows an hour.
- `search_events`: Search every upcoming Bay Area event by words, dates, price, topic or place: dance, AI, music, arts, food, sports, comedy, exercise, volunteering, dating, business and professional networking. Use it whenever the question has search words, a date range ("this weekend": from/to), free-only, a town or an area; for a day-by-day overview of the next few days with no search words use list_upcoming, for one act by name find_performer. All words in `query` must appear in the title, venue, performers, organizer or tags; dates are local (America/Los_Angeles), YYYY-MM-DD. Results come earliest first, at most `limit`; `count` says how many matched in total, so narrow the search rather than paging. get_city lists valid neighborhood, town, category and topic values. No sign-in; each client gets 30 calls a minute and 2,500 event rows an hour.
