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
| Endpoint | https://303happenings.com/api/mcp |
| Transport | Streamable HTTP, stateless (POST JSON-RPC, JSON responses, no sessions) |
| Auth | Optional Authorization: Bearer <key> or X-API-Key — same keys as /api/v1 |
| Runtime | Vercel 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.
| Tool | Arguments | Returns |
|---|---|---|
search_events | query?, from?, to?, category?, neighborhood?, freeOnly?, maxPrice?, limit | Upcoming events matching the filters, soonest first. |
get_event | id or slug | Full detail: description, venue address, artists, ticketSources[], format, flags. |
get_venue | id or slug | Venue detail: address, neighborhood, coordinates, capacity tier, rating, next 5 events. |
venue_events | venue (id or slug), limit | Upcoming events at the venue. |
events_near | lat, lng, radiusKm (≤25), when, limit | Events at venues inside the radius, nearest first, each with distanceKm. |
tonight | limit | Events between now and the end of the Denver day, ranked by discovery score. |
this_weekend | limit | Upcoming Saturday–Sunday in Denver, ranked by discovery score. |
neighborhoods | — | All covered neighborhoods with vibe, bestFor, and live venue/event counts. |
trending | limit | Next 7 days ranked by discovery score, imminence, free status and exclusivity. |
transit_arrivals | stopId or lat+lng, radiusMeters, limit | Live RTD light-rail/bus arrivals near a stop or location. |
denver_data_tools | none | Every 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_snapshot | slug | One 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/about | text/plain — what the data is, coverage, time zone, attribution and license. |
| https://303happenings.com/mcp/categories | application/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 → Connectors → Add 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
| Caller | Limit | Keyed by |
|---|---|---|
| Anonymous | 30 requests / minute | Client IP |
| starter key | 60 / min, 1,000 / day | Key id |
| growth key | 300 / min, 10,000 / day | Key id |
| enterprise key | 1,000 / min, 100,000 / day | Key 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.
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