onthecheap-mcp
A read-only MCP server for exploring free and cheap events, deals, guides, categories, and locations across the On the Cheap network of 14 US cities.
List all supported city
sitekeys and aliases withotc_list_sites.Search articles/deals/guides by text, category, location, and publication date with
otc_search_posts; expired deals are excluded unlessinclude_expiredis true.Fetch a full article by id, slug, or URL as plain text, Markdown, or raw HTML with
otc_get_post.List a city’s events for a specific day, including time, price, and venue, with optional
free_onlyfiltering viaotc_list_events.Get a day-by-day month overview with true counts and previews via
otc_events_month_overview.List per-site category ids and post counts with
otc_list_categories, and location ids and post counts withotc_list_locations.Check whether a city site is reachable and diagnose connectivity failures with
otc_healthcheck.Use
nationalfor country-wide deals in search/get/category/location tools, but not for local event calendar tools.
Provides tools to access and search event listings, articles, and categories from the On the Cheap network of WordPress-based local guides across 14 US cities.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@onthecheap-mcp What's free in Charlotte this weekend?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
onthecheap-mcp
MCP server for the On the Cheap network — local guides to free and cheap things to do across 14 US cities. Daily event listings with times, prices and venues, plus a searchable archive of deals and guides.
Developed and maintained by AI (Claude Code). Use at your own discretion.
No credentials required. Every site is public, so the server reads them server-side over plain HTTPS. There is nothing to configure beyond which city you want, and no browser extension involved.
Install
npx onthecheap-mcpOr as a Claude Code plugin:
/plugin marketplace add chrischall/onthecheap-mcp
/plugin install onthecheap-mcpRelated MCP server: valet-parking-directory
Choosing a city
One server reads the whole network. Every tool takes a site argument
naming the city to read — there is no default and no configuration step:
Key | Site | Area |
| Charlotte On The Cheap | Charlotte, NC |
| Mile High on the Cheap | Denver, CO |
| Atlanta on the Cheap | Atlanta, GA |
| Chicago on the Cheap | Chicago, IL |
| Columbus on the Cheap | Columbus, OH |
| Greater Seattle on the Cheap | Seattle–Tacoma |
| Kansas City on the Cheap | Kansas City |
| South Florida on the Cheap | Miami / Broward / Palm Beach |
| Orlando on the Cheap | Orlando, FL |
| Portland Living on the Cheap | Portland, OR |
| RVA on the Cheap | Richmond, VA |
| Southern Maine on the Cheap | Southern Maine |
| Triangle on the Cheap | Raleigh / Durham / Chapel Hill |
| Living On The Cheap | US-wide deals (no local events calendar) |
Common aliases work too — milehigh, raleigh, rva, kc, southflorida.
otc_list_sites reports the same list.
site is required rather than defaulted on purpose: a server that quietly fell
back to one city would answer a question about Denver with Charlotte's data and
give no sign anything was wrong. An unknown key is refused with the valid ones
listed.
Tools
All tools are read-only. Every tool except otc_list_sites takes a required
site argument. The two event tools reject national, which has no local
events calendar — it is still searchable via the other tools.
Tool | What it does |
| Everything on a given day — time, price, venue. |
| Day-by-day counts for a month, to find the busiest days. Each day's list is a preview; |
| Search articles by text, category, location and date range. Returns slim summaries by default. |
| One article in full, as readable text, Markdown ( |
| Category ids and post counts, for filtering searches by topic. |
| Local area ids and post counts, for filtering geographically. |
| The cities in the network and their |
| Confirm one site is reachable; on failure |
Examples
What's free in Charlotte this Saturday?
Find kids' events in Lake Norman in August
Compare free things to do in Denver and Portland next weekend
Two things worth knowing
Retired deals are excluded by default. Each site parks expired offers in an
expired category, so searches skip them and you don't get deals that no
longer exist. Pass include_expired: true to search the archive. The category's
id differs on every site, so it's resolved by slug at request time — a
hardcoded id silently disables the filter elsewhere.
Category and location ids are per-site. Each site is a separate WordPress
install, so id 13 is a different category on every one of them. Resolve ids
against the same site you then search — an id borrowed from another city will
filter to something unrelated rather than error.
Month overviews are previews, with honest counts. The calendar shows at
most four listings per day. otc_events_month_overview reports each day's
true total alongside the preview — call otc_list_events with a date for the
complete schedule.
Configuration
None. The city is a per-call site argument, not an environment variable, so
there is nothing to set up before use.
Development
npm install
npm test
npm run buildSee docs/OTC-API.md for the verified data surface,
including the events calendar's US M-D-YYYY date routing (an ISO date is
silently parsed as 1970), the month-view truncation, and why term ids are never
hardcoded.
License
MIT
Available Tools
8 toolsotc_events_month_overviewOverview of a city’s events across a monthARead-onlyIdempotent
Day-by-day overview of a whole month from an "on the Cheap" city’s events calendar: for each day, the true number of listings and a short preview of them. Pass the site key for the city (see otc_list_sites). The calendar shows at most four listings per day, so events is a preview while total is the real count — call otc_list_events for a specific date to get that day's complete schedule. The national hub has no local calendar and is not a valid site here. Use this to find the busiest days or scan a month at a glance. Read-only.
Inputs: site (required), month.
otc_get_postGet an On the Cheap articleARead-onlyIdempotent
Fetch one "on the Cheap" article in full by numeric id, slug, or full URL. Pass the site key for the city the article belongs to — an id or slug from one site will not resolve on another, and a full URL must match the site you name. Returns the article text as readable plain text by default; set format to "markdown" to keep its links, headings and lists, or "html" for the original markup. Read-only.
Inputs: post (required), site (required), format.
otc_healthcheckCheck an On the Cheap site’s connectivityARead-onlyIdempotent
Verify one "on the Cheap" site is reachable and its public API is responding. Pass the site key for the city (see otc_list_sites). The sites need no credentials, so this checks connectivity only. On failure error.kind names what broke: edge_blocked (a CDN/WAF refused the request before it reached the site), http, timeout or transport. Read-only.
Inputs: site (required).
otc_list_categoriesList a city’s article categoriesARead-onlyIdempotent
List one "on the Cheap" site's article categories with their ids and post counts (kids, music, food, festivals, art, museums, and so on). Pass the site key for the city (see otc_list_sites). Use an id to filter otc_search_posts by topic — ids are per-site, so use them only against the site they came from. Read-only.
Inputs: site (required).
otc_list_eventsList a city’s events for a dayARead-onlyIdempotent
List everything happening in an "on the Cheap" city on a given date, from that site’s events calendar — each with its time, price (most are free) and venue. Pass the site key for the city (see otc_list_sites) and an ISO date (YYYY-MM-DD); the date defaults to today in that city. Set free_only to keep just the no-cost listings. The national hub has no local calendar and is not a valid site here. Use otc_get_post on a listing's url for the full write-up. Read-only.
Inputs: site (required), date, free_only.
otc_list_locationsList a city’s locationsARead-onlyIdempotent
List one "on the Cheap" site's location taxonomy with ids and post counts — the neighbourhoods and surrounding areas it covers. Pass the site key for the city (see otc_list_sites). Use an id to filter otc_search_posts geographically — ids are per-site, so use them only against the site they came from. Read-only.
Inputs: site (required).
otc_list_sitesList the On the Cheap sitesARead-onlyIdempotent
List every city in the "on the Cheap" network with the site key used to select it. This server reads them all — every other tool takes a site argument, and there is no default, so start here when you do not already know which key covers the city the user means. Read-only.
Inputs: no named parameters.
otc_search_postsSearch a city’s On the Cheap articlesARead-onlyIdempotent
Search and filter one "on the Cheap" site's articles — free and cheap things to do in that city, plus deals, festivals, kids activities and local guides. Pass the site key for the city (see otc_list_sites); the national hub is valid here and carries country-wide deals. Filter by full-text query, category or location id (see otc_list_categories / otc_list_locations), and publication date range. Category and location ids are per-site — resolve them against the SAME site you are searching. Retired deals live in an "expired" category and are excluded by default; set include_expired to search them too. Returns slim summaries by default — use otc_get_post for an article's full text. Read-only.
Inputs: site (required), tag, page, view, +7 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 8 tools
Each tool targets a distinct resource and action: sites, categories, locations, posts, events, month overview, healthcheck, and post retrieval. The only apparent overlap — month overview versus list events — is explicitly clarified as preview/count versus complete single-date schedule. An agent can confidently select the right tool from the descriptions.
All tools share the `otc_` prefix and snake_case, with most following a clear verb_noun pattern such as `otc_search_posts`, `otc_get_post`, and `otc_list_sites`. Minor deviations like `otc_healthcheck` and `otc_events_month_overview` are readable but less pattern-consistent.
Eight read-only tools is well scoped for a city deals/events content server. Each tool covers a distinct part of the workflow — discovery, taxonomy, search, retrieval, events, and connectivity — without redundant endpoints.
The surface covers the core read-only lifecycle: list sites, inspect categories and locations, search and fetch articles, view event calendars by month or day, and healthcheck. Minor gaps exist, such as no keyword/category event search or multi-site search, but most workflows can be completed through the provided tools.
Maintenance
Related MCP Connectors
Google Events listings with dates, venues, and ticket links via a hosted MCP server.
Hyper-local events and venues (trivia, open mics, readings, gigs) for US metros and London.
Eventbrite MCP.
One MCP server for 180+ live web-data APIs returning clean JSON from sites that block scrapers.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenancePreference-aware events discovery MCP server that aggregates events, restaurants, and cultural activities across multiple sources and re-ranks them against your personal taste profile to surface things you'd actually want to do.1MIT
- AlicenseNot gradedqualityCmaintenancePublic read-only MCP server backed by GetValetParking.com directory of 789 US valet parking operators across 31,186 cities. Discover valet operators by coordinates or city slug, filter by 9 service types, and fetch full operator profiles. No auth required.MIT
- AlicenseBqualityAmaintenanceRead-only MCP server for accessing Eventbrite tickets, orders, organizer data, and public event search (including undocumented consumer search via browser bridge).31336 npmMIT
- FlicenseNot gradedqualityBmaintenanceMCP server for NYC Restaurant Week, enabling search and lookup of participating restaurants, date checks, and filter options.-