Things To Do API
Server Details
Search local events in plain words: shows, pop-ups, markets, classes, with times, venues, prices.
- Status
- Healthy
- Uptime
- 100.0% over 21 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 3 tools
Each tool has a clearly distinct role: search_events finds events by query, get_event retrieves full detail by id, and list_coverage checks supported geographies/categories. The descriptions explicitly cross-reference each other (get_event takes an id 'from search_events'), leaving no overlap or confusion.
All three tools follow a clean verb_noun snake_case pattern: get_event, list_coverage, search_events. The verbs are distinct and predict the operation type consistently.
Three tools is a tight, well-scoped surface for a read-only local events API: search, detail lookup, and coverage check. Nothing appears redundant or missing at the count level.
The read-only lifecycle is well covered: discovery via search_events, detail via get_event, and scope validation via list_coverage, with pagination handled through offset/next_offset. Minor gaps exist (e.g., no direct venue or organizer lookup), but agents can work around them through search.
Available Tools
3 toolsget_eventOne event in fullARead-onlyIdempotentInspect
Everything known about one event by its id (from search_events): all its tags, venue, links and times.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world behavior, so the safety profile is covered. The description adds useful context beyond them by enumerating the breadth of the returned record (tags, venue, links, times), signalling 'complete, unfiltered fetch' rather than a summary view.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, zero padding, with the scope ('one event', 'in full') and the id source front-loaded. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description usefully enumerates the returned fields, which is what an agent needs to know to call it correctly. It could say more about error behavior when an id is unknown, but for a single-parameter lookup it is close to complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the schema itself is just a bare 'id' string, but the description supplies the provenance that makes the parameter usable — the id originates from search_events. That is meaningful guidance not present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Everything known about one event by its id') and scopes it to a full single-record fetch. The parenthetical '(from search_events)' distinguishes it from the sibling that produces the ids, so an agent can route between them 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'by its id (from search_events)' makes the intended workflow clear: obtain an id from search_events, then call this. It does not state when NOT to use it or name alternatives for other lookups, so it falls short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_coverageWhere events are coveredARead-onlyIdempotentInspect
The metros and cities covered, and the categories. Call it when unsure whether a city is covered.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds only that the content is a coverage catalog (metros, cities, categories) and says nothing about size, pagination, or freshness of the list. With annotations carrying the burden, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler: the first states what is returned, the second states when to call it. Front-loaded and appropriately sized for a no-argument lookup tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters, no output schema, and full annotation coverage, the description only needs to say what data comes back and when to call it — both of which it does. It could be slightly stronger by noting the granularity (e.g., whether results are grouped by metro or flat), but nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4; there is no parameter syntax for the description to clarify. No misleading parameter hints are present.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the exact resource returned (metros, cities, and categories), so an agent knows this is a static coverage catalog rather than an event lookup. It lacks an explicit verb like 'list' and does not contrast itself with get_event or search_events, but the resource is specific enough to be distinguishable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Call it when unsure whether a city is covered' gives a concrete triggering condition, which is exactly the right guidance for a reference-lookup tool. It does not name alternatives or exclusions, but the sibling tools (get_event, search_events) are clearly different operations, so no routing ambiguity remains.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_eventsSearch local eventsARead-onlyIdempotentInspect
Find events happening in a city: concerts, DJ and club nights, comedy and theater, pop-ups and supper clubs, night markets and flea markets, festivals and street fairs, parties, classes, exhibitions. Pass what the user asked for in plain words as query ("techno this weekend in Oakland", "spooky things to do friday", "farmers market sunday morning"); time and place in the words are understood. Say who it is for in the same words ("comedy this weekend for my parents, they hate crowds", "things to do with my kids saturday"): what suits them comes first. Use from/to, place or near when you already know them exactly. Returns events with start times in the local timezone, the venue, a summary, tags, ticket and source links, and why each matched. Covers the San Francisco Bay Area today; a place outside it comes back as not covered, with no events. For more, call again with the offset a search returns as next_offset.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ISO 8601 end of the window. | |
| from | No | ISO 8601 start of the window. Overrides any time in the query. | |
| near | No | A point to search around. | |
| sort | No | ||
| limit | No | How many events, 1 to 50, default 10. | |
| place | No | A city or neighborhood by name, e.g. "Oakland", "the Mission". | |
| query | No | What to find, in plain words. May include when, where, and who it is for. | |
| offset | No | Skip this many, for the next page: pass the next_offset a search returned. | |
| categories | No | Only these categories. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (which only cover read-only/idempotent/safety): it discloses the return shape (start times in local timezone, venue, summary, tags, ticket and source links, match reasons), the geographic coverage boundary and what happens outside it, and the pagination contract via next_offset. No annotation contradiction — openWorldHint=false is consistent with the explicit Bay Area-only coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then progressively narrower guidance on query phrasing, structured params, returns, coverage, and pagination — a logical order. It is a dense block of text and the three quoted query examples are repetitive in form, but each sentence carries actionable content for a free-text search tool, so waste is limited.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter, zero-required, free-text search tool with no output schema, the description supplies everything an agent needs: what to put in `query`, when to use the structured filters instead, what a result contains, the coverage boundary, and how to page. Nothing material is left to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 89%, so the baseline is 3, but the description adds real meaning the schema does not: `query` may itself contain when, where, and who the search is for, with worked examples, and the 'who it is for' phrasing ('comedy this weekend for my parents, they hate crowds') is nowhere in the schema. It also restates the precedence of `from`/`to` over time in the query and the meaning of `near`/`place` as exact-knowledge alternatives.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Find events happening in a city') and immediately enumerates the domain (concerts, club nights, comedy, markets, festivals, classes, exhibitions), which separates it from the single-event `get_event` and the coverage-listing `list_coverage` without the agent needing either schema. The scope statement ('Covers the San Francisco Bay Area today') further pins down exactly what this tool does and does not return.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear routing rules for the free-text vs structured parameters: pass plain words in `query`, use `from`/`to`, `place` or `near` 'when you already know them exactly', and continue with `offset` for more results. It also flags the failure mode (place outside the Bay Area returns not covered). It stops short of naming sibling tools or stating when-not to call this one, so it is clear context rather than full when/when-not/alternatives guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
- First observed
get_event - First observed
list_coverage - First observed
search_events
Related MCP Connectors
Read-only search of upcoming local events worldwide: music, comedy, AI/tech, arts, food, sports.
Free US local event search. No signup or API key; 90-day lookahead. Paid commercial and bulk access.
Search local events, follow artists and interests, get weekend recommendations and change alerts
Hyper-local events and venues (trivia, open mics, readings, gigs) for US metros and London.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables users to search US concerts, comedy, theater, trivia, festivals, community events, and family activities by location, date, interests, and budget, returning event details and source links without requiring an account or API key for basic search.MIT
- FlicenseNot gradedqualityBmaintenanceEnables natural-language event searches through Google Events, returning structured JSON with dates, venues, ticket links, and map details, plus support for localization, filters, and pagination.2-
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to browse public event listings from explore pages and fetch full detail for a single event — titles, descriptions, times, locations, host display names, and aggregate RSVP counts — across eight supported city regions. Keyless and read-only, with no guest lists, contact info, or authentication required.268 npmMIT
- AlicenseNot gradedqualityBmaintenanceLets AI agents discover and filter upcoming civic events and programming across San Francisco parks, plazas, and recreation centers by date range and keyword.178 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.