Funcheap (SF Bay Area) MCP. Free & cheap things-to-do in the San Francisco Bay Area, sourced from sf.funcheap.com's public WordPress REST API.
Four well-named tools with clear, actionable descriptions (avg 180 chars). All tools have complete input schemas with typed properties and parameter descriptions. Naming follows verb_noun pattern (search_events, get_event, list_tags, list_categories). Descriptions explain WHAT, WHEN, and HOW to use each tool. However, output schemas are not documented, LLMs cannot predict response structure. Error handling is minimal (only 'Unknown tool' and 'No event found' cases visible). No pagination metadata guidance in descriptions. Missing tool annotations (readOnlyHint, idempotentHint). Parameter descriptions are good but lack explicit constraints (e.g., date format examples in 'after'/'before' are helpful but not formalized as patterns).
List Funcheap categories (slug, name, count) — broader groupings like neighborhoods, "fairs-festivals", "kids-families". Sorted by usage.
Get a single Funcheap event by numeric post id or slug, with full cleaned body text (date/venue/price details live in the text).
Search SF Bay Area free & cheap events/deals from Funcheap. Filter by keyword, facet tags (e.g. "free", "live-music", "comedy", "art", "family-friendly", "food"), and a published-date window. Returns newest first by default. Use the `tags`/`categories` tools to discover facet slugs.
List Funcheap event facet tags (slug, name, count). These are the filterable facets like "free", "live-music", "comedy", neighborhoods. Sorted by usage.
Output schemas not documented. LLMs cannot predict response structure (fields, types, pagination metadata). search_events returns {region, source, total_matching, page, count, events[]} but this is invisible to the agent.
Tool annotations missing. No readOnlyHint, idempotentHint, or destructiveHint declared. All four tools are read-only and idempotent, but LLMs cannot infer this without explicit annotations.
Error handling minimal. Only 'Unknown tool' and 'No event found' cases handled. No guidance for invalid date formats, out-of-range page numbers, or API failures. LLMs cannot self-correct.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | 2026-07-28+ | v2 |
Pagination guidance incomplete. search_events accepts page/per_page but description does not explain total_matching or how to detect end of results. tags/categories lack pagination parameters entirely despite potentially large result sets.
Parameter constraints not formalized. 'after'/'before' accept ISO dates but no regex pattern or format constraint declared. 'per_page' range (1-50) documented in description but not in schema minItems/maxItems. LLMs may pass invalid values.