Skip to main content
303Happenings303Happenings303Happenings
Back to Developers
Model Context Protocol
Read-only
No auth required

303Happenings MCP Server

A public, read-only Model Context Protocol server that lets Claude, ChatGPT and any other MCP client query Denver events straight from 303Happenings' data — with our canonical event URLs and ticket links in every result.

Overview

Endpointhttps://303happenings.com/api/mcp
TransportStreamable HTTP, stateless (POST JSON-RPC, JSON responses, no sessions)
AuthOptional Authorization: Bearer <key> or X-API-Key — same keys as /api/v1
RuntimeVercel Node.js runtime, 30s max duration

Everything is read-only: there are no tools that create, update or delete anything, and no personal data is exposed. Tools are annotated readOnlyHint: true, destructiveHint: false, idempotentHint: true (only transit_arrivals sets openWorldHint: true because it reads RTD's live feed).

Tools

All list-style tools return { count, events: [...], license, ...context }. Every event carries the same compact shape: id, slug, title, startsAt/endsAt with the Denver offset, venue, category, priceRange, url and, when available, ticketUrl.

ToolArgumentsReturns
search_eventsquery?, from?, to?, category?, neighborhood?, freeOnly?, maxPrice?, limitUpcoming events matching the filters, soonest first.
get_eventid or slugFull detail: description, venue address, artists, ticketSources[], format, flags.
get_venueid or slugVenue detail: address, neighborhood, coordinates, capacity tier, rating, next 5 events.
venue_eventsvenue (id or slug), limitUpcoming events at the venue.
events_nearlat, lng, radiusKm (≤25), when, limitEvents at venues inside the radius, nearest first, each with distanceKm.
tonightlimitEvents between now and the end of the Denver day, ranked by discovery score.
this_weekendlimitUpcoming Saturday–Sunday in Denver, ranked by discovery score.
neighborhoodsAll covered neighborhoods with vibe, bestFor, and live venue/event counts.
trendinglimitNext 7 days ranked by discovery score, imminence, free status and exclusivity.
transit_arrivalsstopId or lat+lng, radiusMeters, limitLive RTD light-rail/bus arrivals near a stop or location.
denver_data_toolsnoneEvery Denver open-data tool (crime, crashes, 311, noise, transit, parking, bars, inspections, licences, parks, rent) with the question it answers, a one-paragraph answer, its page and its public JSON endpoint. Use it to route a Denver question to the right data.
neighborhood_snapshotslugOne neighborhood across the city datasets: 90-day crime by category, crash ranking and noise complaints — raw and per km², sources cited — plus a quotable summary and caveats. Answers 'is X safe', 'what is X like'.

Errors inside a tool (database failure, not found, invalid arguments) come back as { isError: true, content: [...] }, never as a transport failure.

Resources and prompt

https://303happenings.com/mcp/abouttext/plain — what the data is, coverage, time zone, attribution and license.
https://303happenings.com/mcp/categoriesapplication/json — the valid category values with subcategories.

The prompt plan-my-night (arguments budget?, vibe?, neighborhood?, transit?) walks the model through tonight / search_events get_event events_near and asks for a short, sourced itinerary for Denver tonight.

Connecting

No signup, OAuth or API key is required for anonymous access.

Claude Code

claude mcp add --transport http 303happenings https://303happenings.com/api/mcp
# with a key for higher rate limits:
claude mcp add --transport http 303happenings https://303happenings.com/api/mcp \
  --header "Authorization: Bearer dk_live_…"

Claude.ai and Claude Desktop (custom connector)

Settings → ConnectorsAdd custom connector → name 303Happenings, URL https://303happenings.com/api/mcp → Add. Leave the auth fields empty for anonymous access. Enable the connector from the tools menu in a chat.

Claude Messages API

curl https://api.anthropic.com/v1/messages \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "anthropic-beta: mcp-client-2025-11-20" \
  -H "content-type: application/json" \
  -d '{
    "model": "claude-opus-5",
    "max_tokens": 16000,
    "messages": [{ "role": "user", "content": "Best free events in Denver this weekend?" }],
    "mcp_servers": [{
      "type": "url",
      "url": "https://303happenings.com/api/mcp",
      "name": "303happenings"
    }],
    "tools": [{ "type": "mcp_toolset", "mcp_server_name": "303happenings" }]
  }'

MCP Inspector / raw JSON-RPC

npx @modelcontextprotocol/inspector --cli https://303happenings.com/api/mcp --method tools/list

curl -s https://303happenings.com/api/mcp \
  -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"tonight","arguments":{"limit":3}}}'

Rate limits and API keys

CallerLimitKeyed by
Anonymous30 requests / minuteClient IP
starter key60 / min, 1,000 / dayKey id
growth key300 / min, 10,000 / dayKey id
enterprise key1,000 / min, 100,000 / dayKey id

Every response carries X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset and X-MCP-Tier. Over the limit returns 429 with Retry-After; an invalid key returns 401. Get an API key from the developer dashboard for higher limits.

Attribution, license and privacy

Attribution and license

Every payload carries a license field. Clients may display event data with a credit to 303Happenings and a link to the event's canonical URL. ticketUrl values are affiliate links; prices are indicative and set by the provider. No personal data is exposed — the server only reads events, venues, pricing, sources, genres and artists.

Logging and privacy

Requests to this endpoint are logged the same way as our public REST API: requesting IP addresses for rate limiting and abuse prevention, and — for callers using an API key — usage tied to that key's account. See our Privacy Policy for details.

Building something with MCP?

Anonymous access works out of the box. Need higher limits? Grab a free API key from the developer dashboard — the same keys work for the REST API and the MCP server.

Get Denver's Best Events in Your Inbox

Every Monday, we send a curated list of the best things happening in Denver. Concerts, sports, comedy, hidden gems, and more.

Join 1,000+ Denverites. Unsubscribe anytime. Privacy Policy