Skip to main content
Glama
chrischall

eventbrite-mcp

by chrischall
README.md
# 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.
- 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 |
| `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` | bridge | bridge diagnostics (stdio only; the bridge is a fallback route) |

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

A3.5/5.0

Scored across 31 tools

Disambiguation4/5

Most tools have a clear resource-and-scope target (venue, order, attendee, ticket class), and the descriptions are careful about organizer vs attendee vs public views. The main risk is eb_event vs eb_event_details and the multiple order/attendee list variants, which could cause misselection if an agent skims names.

Naming Consistency4/5

The eb_ prefix is used everywhere, and singular nouns (eb_event, eb_order) vs plural nouns (eb_event_attendees, eb_org_orders) reliably distinguish single-get from list operations. A few one-offs like eb_resolve_place, eb_search_events, eb_healthcheck, and eb_event_details break the pure resource-noun pattern but remain readable.

Tool Count2/5

At 31 tools this surface is heavy; it exceeds the 25-tool threshold and will consume meaningful agent context. The breadth is defensible for Eventbrite's read domain, but several list/get variants could likely be consolidated.

Completeness3/5

Read coverage is extensive: events, venues, organizers, orders, attendees, ticket classes, questions, discounts, webhooks, reports, and public search are all represented. However, there are no create/update/delete operations, no attendee check-in mutations, and no webhook registration, which are notable gaps for a full Eventbrite lifecycle.

Maintenance

ActivityActive
ResponsivenessUnresponsive