SFomo: Bay Area events
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
Read-only search of upcoming SF Bay Area events: AI/tech, dance, music, arts, food, fitness.
| Author | ai.sfomo |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 2361 ms |
| Last measured | 2026-10-26 |
Measured statistics
| Tools measured | 6 |
|---|---|
| Latency, 30-day median (L1) | 2361 ms |
| Latency, latest (L1) | 2361 ms |
| Safe-call success | 1/1 (100%) |
| 30-day success rate (L2) | 100% |
| Last checked | 2026-10-26 |
| Total checks | 4 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"SFomo: Bay Area events": {
"url": "https://sfomo.ai/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (6)
find_performerread-onlyFind 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.
Parameters:
query(required) — string — Part of a name, e.g. 'khruangbin'limit— integer — Max matches (default 10, max 25)
Hints: read-only yes · destructive no · idempotent yes · open-world no
create_custom_calendarread-onlyBuild a subscribable calendar of upcoming Bay Area events from the user's interests. Returns a link that opens the calendar on SF Events (open_on_sf_events; 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 SF Events: 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.
Parameters:
interests(required) — array — 1-12 interests; each needs a query, category or topicname— string — Calendar name shown in their calendar app, e.g. 'Salsa + AI nights'exclude— array — Words; any event containing one is left outinclude_kids— boolean — Include kids'/teens'-only events (default false)include_seniors— boolean — Include events only for older adults (senior-center programs, 55+ groups; default false)
Hints: read-only yes · destructive no · idempotent yes · open-world no
search_eventsread-onlySearch 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. Words in `query` match the title, venue, performers, organizer or tags at the start of a word, singular or plural, with common synonyms (standup = stand-up, kids = children); by default all of them must match, with match "any" (or | / commas between them) any one does. A word that matches nothing is read as the closest word the events use, and `search` in the result says how the query was read. 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.
Parameters:
to— string — Latest date (default: none)city— string — City, e.g. 'San Francisco' or another town in the Bay Area (case-insensitive)free— boolean — Only free events (a listed free price, or an unpriced listing from a source whose events are free)from— string — Earliest date (default: today)near— string — Events within radius_km of a place: a neighborhood, a town, a venue name, or "lat,lon". Results get distance_km, nearest first within each day. Use this for "near X"; use neighborhood for "in X". Unmapped venues are left out (counted in place.unplaced_events).limit— integer — Max results (default 25, max 100)match— string — all (default): every word in query must match; any: at least one word or |-separated phrase does (results with more matches are no different in order: earliest first); semantic: by meaning ("something romantic", "chill music outdoors"), from an embedding of queryquery— string — Free text, e.g. 'salsa', 'hackathon', 'street fair'. Separate alternatives with | or commas ('salsa | bachata', 'comedy, improv'); keep a phrase together with quotes. A neighborhood or town after 'in'/'near' ('art openings in SoMa') becomes the place filter.scope— string — Geography: one region (sf = SF, peninsula = Peninsula, south_bay = South Bay, east_bay = East Bay, north_bay = North Bay, santa_cruz = Santa Cruz, beyond = Farther), bay_area (sf, peninsula, south_bay, east_bay, north_bay), or any (default)topic— string — Topic (the site's Arts, Food, Learn, Sports tabs: e.g. comedy, film, food_drink, sports, talks, classes, markets, outdoors; business = chamber mixers, referral groups, small-business workshops, trade shows, career fairs; ai = AI events (the site's AI button); tech = developer, data, security, crypto, UX and tech-community events (the Tech button also includes ai and category ai))season— string — Seasonal series tag, e.g. 'techweek27' (only when the site lists one)sector— string — Industry a work event is for (only events with a work topic carry one; general networking has none): e.g. senior_care, healthcare, real_estate, finance_insurance, legal, techaudience— string — Who the event is only for: kids, teens, seniors (older adults: senior-center programs, 55+ groups), or general (none of those). Default: no filter. Caregiver/aging talks for families and professionals are general.category— string — Scored category (the site's AI, Dance, Fun, Gym, Music, Singles, Volunteer tabs)radius_km— number — Distance for near (default 1.5, max 50), or how far neighborhood reaches past its boundary (default 0)biz_format— string — Kind of work event: referral_group (BNI etc.), chamber, mixer, breakfast_lunch, workshop_training, conference_expo, career_fair, ce_credits, pitch_demo, committee_meetingneighborhood— string — Only events in this San Francisco neighborhood (or town): Bayview, Bernal Heights, Castro, Chinatown, Excelsior, FiDi / South Beach, Glen Park, Golden Gate Park, Haight, Hayes Valley, Ingleside / Oceanview, Inner Richmond, Inner Sunset, Japantown, Lakeshore, Lincoln Park, Lone Mountain / USF, Marina, McLaren Park, Mission, Mission Bay, Nob Hill, Noe Valley, North Beach, Outer Mission, Outer Richmond, Pacific Heights, Portola, Potrero Hill, Presidio, Presidio Heights, Russian Hill, Seacliff, SoMa, Sunset / Parkside, Tenderloin, Treasure Island, Twin Peaks, Visitacion Valley, West of Twin Peaks, Western Addition. Sub-neighborhood and common names work too. Add radius_km to also take events within that distance of its centre. Events whose venue isn't mapped can't be placed and are left out; the response's place.unplaced_events counts them.changed_since— string — Only events added or changed (title, date or time, venue, link, price, sold out, status) at or after this moment: YYYY-MM-DD (local) or an ISO date-time. To follow up later, pass the previous result's changes.synced_at; changes.removed then lists events taken down since.
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_eventread-onlyGet 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.
Parameters:
id(required) — string — 12-character event id
Hints: read-only yes · destructive no · idempotent yes · open-world no
list_upcomingread-onlyBrowse 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.
Parameters:
days— integer — Window in days (default 7, max 60)near— string — Events within radius_km of a place: a neighborhood, a town, a venue name, or "lat,lon". Results get distance_km, nearest first within each day. Use this for "near X"; use neighborhood for "in X". Unmapped venues are left out (counted in place.unplaced_events).limit— integer — Max rows (default 50, max 100)topic— stringsector— string — Industry a work event is for (only events with a work topic carry one; general networking has none): e.g. senior_care, healthcare, real_estate, finance_insurance, legal, techaudience— string — Who the event is only for: kids, teens, seniors (older adults: senior-center programs, 55+ groups), or general (none of those). Default: no filter. Caregiver/aging talks for families and professionals are general.category— stringradius_km— number — Distance for near (default 1.5, max 50), or how far neighborhood reaches past its boundary (default 0)biz_format— string — Kind of work event: referral_group (BNI etc.), chamber, mixer, breakfast_lunch, workshop_training, conference_expo, career_fair, ce_credits, pitch_demo, committee_meetingneighborhood— string — Only events in this San Francisco neighborhood (or town): Bayview, Bernal Heights, Castro, Chinatown, Excelsior, FiDi / South Beach, Glen Park, Golden Gate Park, Haight, Hayes Valley, Ingleside / Oceanview, Inner Richmond, Inner Sunset, Japantown, Lakeshore, Lincoln Park, Lone Mountain / USF, Marina, McLaren Park, Mission, Mission Bay, Nob Hill, Noe Valley, North Beach, Outer Mission, Outer Richmond, Pacific Heights, Portola, Potrero Hill, Presidio, Presidio Heights, Russian Hill, Seacliff, SoMa, Sunset / Parkside, Tenderloin, Treasure Island, Twin Peaks, Visitacion Valley, West of Twin Peaks, Western Addition. Sub-neighborhood and common names work too. Add radius_km to also take events within that distance of its centre. Events whose venue isn't mapped can't be placed and are left out; the response's place.unplaced_events counts them.changed_since— string — Only events added or changed (title, date or time, venue, link, price, sold out, status) at or after this moment: YYYY-MM-DD (local) or an ISO date-time. To follow up later, pass the previous result's changes.synced_at; changes.removed then lists events taken down since.
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_cityread-onlyGet what SF Events 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.
Hints: read-only yes · destructive no · idempotent yes · open-world no
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.