Skip to content

SFomo: Bay Area events

by sfomo.ai · remote · no sign-in to list tools · v0.1.0 · published by ai.sfomo

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

Changes · 1

6 tools: 1 change things and 5 only read.

Scanned Oct 21, 2026

1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http events https://sfomo.ai/mcp

Findings

Matches of fixed checks, with the text they matched.

1 warn
  • The server marks "create_custom_calendar" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "create_custom_calendar" says "create": a word for a change.

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

6 tools

Changes things 1Claude Code: ask
  • create_custom_calendarBuild a subscribable calendar of upcoming Bay Area events from the user's interests.1 finding

    Why it is in this group

    • The name "create_custom_calendar" says "create": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "create_custom_calendar" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "create_custom_calendar" says "create": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Build 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.

    Annotations the server declares

    • title: Create a custom calendar
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
Only reads 5Claude Code: allow
  • find_performerFind 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 …No findings

    Why it is in this group

    • The name "find_performer" says "find": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Find a performer
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_cityGet 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 ca…No findings

    Why it is in this group

    • The name "get_city" says "get": a word for reading.
    Description, as the server wrote it
    Get 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.

    Annotations the server declares

    • title: Get city coverage
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_eventGet 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 ori…No findings

    Why it is in this group

    • The name "get_event" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Get one event
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_upcomingBrowse the next N days of events day by day, with no search words.No findings

    Why it is in this group

    • The name "list_upcoming" says "list": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: List upcoming events
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • search_eventsSearch 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…No findings

    Why it is in this group

    • The name "search_events" says "search": a word for reading.
    Description, as the server wrote it
    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. 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.

    Annotations the server declares

    • title: Search events
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 0.1.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http events https://sfomo.ai/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__events__find_performer",
      "mcp__events__search_events",
      "mcp__events__get_event",
      "mcp__events__list_upcoming",
      "mcp__events__get_city"
    ],
    "ask": [
      "mcp__events__create_custom_calendar"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as events. Review it before you use it.