eventbrite-mcp
# eventbrite-mcp
> This project was developed and is maintained by AI (Claude Code). Use at your own discretion.
MCP server for [Eventbrite](https://www.eventbrite.com): your tickets and
orders, organizer data (events, attendees, orders), any public event by id,
and public event **search** — which Eventbrite removed from its documented
API in 2019 and now only exists on the consumer site.
Two data paths, matched to how Eventbrite is reachable:
- **Documented API** (`eventbriteapi.com/v3`) — plain server-side HTTPS with a
personal OAuth token (`EVENTBRITE_TOKEN`, free: [create one](https://www.eventbrite.com/platform/api-keys)).
Powers the account, organizer, event-by-id, and reference tools.
- **Consumer discovery API** (`www.eventbrite.com/api/v3/destination/…`) — the
site WAF-blocks server-side clients, so search routes through your own
signed-in eventbrite.com browser tab via the
[fetchproxy](https://github.com/chrischall/fetchproxy) bridge (ContextMint
Bridge extension), reusing your authenticated session. Powers `eb_search_events`,
`eb_resolve_place`, `eb_event_details`, `eb_healthcheck`.
All tools are read-only.
## Setup
```sh
npm install -g @chrischall/eventbrite-mcp
```
Claude Code (`.mcp.json`):
```json
{
"mcpServers": {
"eventbrite": {
"command": "eventbrite-mcp",
"env": { "EVENTBRITE_TOKEN": "your-private-token" }
}
}
}
```
- Without `EVENTBRITE_TOKEN` the server still boots; account tools error
helpfully on first use, and discovery tools work regardless.
- For discovery tools: install ContextMint Bridge from its
[releases](https://github.com/nullnet-app/contextmint-bridge/releases)
(unzip the chrome zip and load it unpacked; use Chrome for now — Safari
support will ship inside the ContextMint app, which has no public download
yet), keep an eventbrite.com tab open, and approve the
one-time pair prompt (the prompt covers the `csrftoken` cookie read the
search POST needs). Run
`eb_healthcheck` to verify the hop (with no token it checks the bridge; with
a token it checks the token).
- ContextMint Bridge is the fetchproxy browser extension under its new name,
from the same maintainer — fetchproxy's own
[README](https://github.com/chrischall/fetchproxy#extension) points to it.
Its source is public at
[nullnet-app/contextmint-bridge](https://github.com/nullnet-app/contextmint-bridge):
build it yourself, or check a release zip against the `.sha256` file
published beside it
(`shasum -a 256 -c contextmint-bridge-chrome-<version>.zip.sha256`).
## Tools
| Tool | Path | Notes |
| --- | --- | --- |
| `eb_me` | token | your profile |
| `eb_my_orders` | token | your tickets, event expanded; `view: "brief"` = one line per upcoming order |
| `eb_my_organizations` | token | organizer orgs |
| `eb_org_events` / `eb_org_attendees` / `eb_org_orders` | token | organizer data |
| `eb_org_venues` / `eb_org_discounts` / `eb_org_ticket_groups` / `eb_org_webhooks` | token | org-scoped collections |
| `eb_org_report` | token | sales / attendees analytics, date-windowed |
| `eb_event` / `eb_event_description` | token | any public event by id |
| `eb_ticket_classes` / `eb_ticket_class` | token | an event's ticket types |
| `eb_event_attendees` / `eb_event_attendee` | token | per-event attendees (`changed_since` polls incrementally) |
| `eb_event_orders` | token | per-event orders |
| `eb_event_questions` | token | registration questions (`canned: true` for the standard bank) |
| `eb_order` | token | a single order by id |
| `eb_venue` / `eb_venue_events` | token | venue detail and its events |
| `eb_organizer` / `eb_organizer_events` | token | organizer profile and everything they run |
| `eb_series_events` | token | occurrences of a recurring series |
| `eb_user` | token | a public user profile |
| `eb_reference` | token | categories / subcategories / formats / timezones / countries / regions |
| `eb_resolve_place` | token | location → place id (`Charlotte, NC` → `85981333`), plus browse shelves |
| `eb_search_events` | token | the consumer search; `compact: true` for slim results, `aggs` for facets |
| `eb_event_details` | token | batch event detail |
| `eb_healthcheck` | token, else bridge | with a token: probes `GET /users/me/` and reports `error.kind` (`credential_rejected`, `edge_blocked` for a CDN/WAF block page, `timeout`, `http`, `transport`); without one: diagnoses the bridge discovery falls back to and says the token is missing (`no_credential` when there is no bridge either) |
Search flow: `eb_resolve_place {location: "Charlotte, NC"}` →
`eb_search_events {q: "blues", place_id: "85981333", compact: true}`.
`eb_resolve_place` also accepts a raw slug (`nc--charlotte`). A bare city with
no state or country is rejected rather than guessed.
## Development
```sh
npm install
npm test # node suite
npm run build # tsc + esbuild bundle
```
API shape notes (captured + verified): `docs/EVENTBRITE-API.md`. A
shell-level access skill (curl + fpx, no server needed) ships in
`skills/eventbrite/`.
TDQS
Scored across 31 tools
Descriptions do a good job distinguishing organizer-side vs public vs consumer-side (eb_org_events vs eb_organizer_events vs eb_my_orders), but there are several near-parallel tools: three order listers (eb_my_orders, eb_org_orders, eb_event_orders), two attendee listers (eb_org_attendees, eb_event_attendees), and overlapping event fetchers (eb_event, eb_event_details, eb_search_events, eb_series_events). An agent must read carefully to pick correctly; boundaries exist but are not immediately obvious from names alone.
Almost everything follows a predictable eb_<scope>_<resource> snake_case pattern (eb_org_events, eb_event_attendees, eb_ticket_classes). A few tools deviate (eb_me, eb_healthcheck, eb_reference) but these are still readable and purposeful. Minor ordering variation (org_/event_ prefix placement) does not undermine consistency.
31 tools is above the heavy threshold and includes clear redundancy in the order- and attendee-listing families. The Eventbrite domain is broad, but the surface feels padded rather than tightly scoped for the read-only intent.
Read coverage is broad — profile, orgs, events, attendees, orders, tickets, venues, organizers, series, discounts, webhooks, reports, search, and a healthcheck. However, the surface is entirely read-only with no create/update/delete or check-in mutations, and webhooks/discounts are list-only, which is a notable gap for an Eventbrite management server.