Eventbrite MCP server for AI agents

Live

OAUTH 2.0

EVENTS

Marketing

Eventbrite gives your agent event operations in your Eventbrite organization: create, publish, and update events, set up ticket classes and discounts, and read attendees, orders, and sales reports.

  • Per-user credentials: each call uses the actual user's token, never a shared bot.
  • Encrypted per-tenant vault: AES-256, resolved at request time, never in LLM context.
  • Scoped before every call: pre-call scope check, 90-day SIEM-exportable audit chain.
Eventbrite
agent · Acme Q3
Run
How many tickets have we sold for the Product Summit so far?
S
eventbrite_sales_report_get
141ms
Events agent
The Product Summit has sold 412 tickets for $38,640 in gross sales. 96 of those sold in the last 7 days.
Sources: Eventbrite sales report, 1 event
eventbrite
1 report
18:29
Message Claude...

Tools your events agent reaches for on Eventbrite, scoped per user.

CALL ANY TOOL
85 tools for events in Eventbrite: create, copy, publish, and update events, manage ticket classes, capacity, discounts, and checkout questions, and read attendees, orders, and sales reports.
eventbrite_attendee_get
Get attendee
Get one attendee of an Eventbrite event by ID. Returns the attendee: profile (name, email, contact details), ticket class, costs, barcodes, answers, checked_in and status. Use eventbrite_attendee_get for one attendee's details. Use eventbrite_event_attendees_list to find attendees.
Parameters
Name
Type
Required
Description
attendee_id
string
Required
ID of the attendee. Get it from eventbrite_event_attendees_list.
event_id
string
Required
ID of the Eventbrite event. Get it from eventbrite_organization_events_list.
expand
string
Optional
Comma-separated list of related objects to include in the response. Supported expansions: event, order, promotional_code, assigned_number, answers, survey, survey_responses, assigned_unit, contact_list_preferences. Example: order,answers.
eventbrite_categories_list
List categories
eventbrite_current_user_get
Get current user
eventbrite_discount_create
Create discount
eventbrite_discount_delete
Delete discount
eventbrite_discount_update
Update discount
eventbrite_event_cancel
Cancel event
eventbrite_event_copy
Copy event
eventbrite_event_custom_question_create
Create event custom question
eventbrite_event_custom_question_get
Get event custom question
eventbrite_event_default_question_update
Update event default question
eventbrite_event_default_questions_list
List event default questions
eventbrite_event_delete
Delete event
eventbrite_event_display_settings_get
Get event display settings
eventbrite_event_publish
Publish event
eventbrite_event_schedule_create
Create event schedule
eventbrite_event_structured_content_set
Set event structured content
eventbrite_event_structured_content_working_get
Get event structured content working
eventbrite_event_ticket_buyer_settings_update
Update event ticket buyer settings
eventbrite_event_ticket_classes_for_sale_list
List event ticket classes for sale
eventbrite_media_get
Get media
eventbrite_organization_attendees_list
List organization attendees
eventbrite_organization_members_list
List organization members
eventbrite_organization_seatmaps_list
List organization seatmaps
eventbrite_organizations_list
List organizations
eventbrite_sales_report_get
Get sales report
eventbrite_subcategories_list
List subcategories
eventbrite_ticket_class_create
Create ticket class
eventbrite_ticket_class_get
Get ticket class
eventbrite_ticket_class_update
Update ticket class

For more tools, view docs.

Build your Agent
Same auth pattern across LangChain, OpenAI, Anthropic, and Google ADK.
Python · LlamaIndex
import { ScalekitClient } from "@scalekit-sdk/node";
import { createReactAgent } from "@langchain/langgraph/prebuilt";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

// Eventbrite tools scoped to this user
const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["eventbrite"], toolNames: [
    "eventbrite_event_create",
    "eventbrite_ticket_class_create",
    "eventbrite_event_publish"] },
  pageSize: 100,
});

const agent = createReactAgent({ llm, tools });
await agent.invoke({ messages: [{ role: "user", content: "Create the Product Summit event with a VIP ticket class and publish it" }] });
import OpenAI from "openai";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const openai = new OpenAI();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["eventbrite"] }, pageSize: 100,
});

const res = await openai.chat.completions.create({
  model: "gpt-5",
  messages: [{ role: "user", content: "Create the Product Summit event with a VIP ticket class and publish it" }],
  tools,
});

// Execute the tool call with the user's vaulted Eventbrite OAuth token
await sk.tools.executeTool(res.choices[0].message.tool_calls[0], "user_123");
import Anthropic from "@anthropic-ai/sdk";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const anthropic = new Anthropic();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["eventbrite"] }, pageSize: 100,
});

const msg = await anthropic.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Create the Product Summit event with a VIP ticket class and publish it" }],
  tools,
});

// Tool call runs with the user's vaulted Eventbrite OAuth token
await sk.tools.executeTool(msg.content, "user_123");
import { Agent } from "@google/adk/agents";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["eventbrite"] }, pageSize: 100,
});

const agent = new Agent({
  name: "events_agent",
  model: "gemini-2.5-pro",
  instruction: "Eventbrite tools scoped to this user",
  tools,
});

await agent.run("Create the Product Summit event with a VIP ticket class and publish it");
Try these prompts
Copy any prompt into your agent. Each maps directly to a Eventbrite tool. Click to copy, paste into your agent, done.
Events
Copy the prompt
Copied
Create a draft event called Product Summit on June 12 at our SF venue.
Copy the prompt
Copied
Copy last year's Product Summit into a new event for next June.
Copy the prompt
Copied
Publish the Product Summit event.
Tickets
Copy the prompt
Copied
Add a paid VIP ticket class at $250 to the Product Summit.
Copy the prompt
Copied
Create a SUMMIT20 discount for 20% off, limited to 50 uses.
Copy the prompt
Copied
Raise the Product Summit's total capacity to 600.
Attendees and sales
Copy the prompt
Copied
List attendees of the Product Summit.
Copy the prompt
Copied
Show ticket sales for the Product Summit by week.
Copy the prompt
Copied
List orders placed for the Product Summit in the last 24 hours.
SEE HOW AUTH WORKS
Each user signs in to Eventbrite once, and Scalekit stores and refreshes their tokens. Credentials stay vaulted, every call is scope checked, and every action is logged.
1
Authorize
Your user connects
Eventbrite
once. We tie it to their identity and the meetings they approved — no shared bot account, no org-wide access
Who:
user ‘A’
when:
Once per user
access:
Limited to user
2
Store
Their
Eventbrite
token lives in a vault scoped to them. User A's meetings are never reachable by an agent acting for user B, even on the same connection
vault:
encrypted
scope:
per-user
tokens:
auto-refreshed
3
Resolve
When your agent calls a
Eventbrite
tool, we fetch the right token server-side. It never touches your agent, never appears in the LLM context, never shows up in your logs
speed:
~40ms
check:
before every call
seen by:
nobody
4
Audit
Every
Eventbrite
tool call is logged — who triggered it, which meeting was fetched, what came back. 90 days of history, tied to the user who authorized it
history:
90 days
export:
SIEM-ready
logged:
every call
Test other agents
See the same per-user auth pattern across other events and calendar connectors.
Support and Ops Teams
Email-to-calendar agent
Reads scheduling intent out of Gmail threads, resolves the times everyone actually has free, and creates the event on the user's own Google Calendar. No shared service account.
Support and Ops Teams
Meeting prep
Pulls agenda, participant context, and open action items before every meeting.
Test other agents
See the same per-user auth pattern across other events and calendar connectors.
OPS
Email-to-calendar scheduling agent
Read scheduling intent out of Gmail threads, resolve mutual free time, and create the Google Calendar event.
OPS
Meeting prep agent
Assemble the agenda, HubSpot attendee history, and open action items from Gmail before every meeting on the calendar.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
01.
Shared tokens break per-user analytics
A shared Eventbrite token looks fine in a demo. In production every event change looks like one service account, and you cannot tell which user triggered it. Scalekit resolves the credential of the actual user who triggered the agent, never a shared bot.
// shared token
audit → bot_service_account

// scalekit
audit → user_abc ✓
02.
Authentication is not authorization
03.
Multi-tenancy is architectural
04.
Eventbrite today. Ten connectors tomorrow.
“Our agents act across Salesforce, Gong, Google Drive, and more, on behalf of every customer. Scalekit behind the scenes meant we can keep adding tools without ever rebuilding how credentials or tool calling work.”
Venu Madhav Kattagoni
Head of Engineering / Von
FAQs
Frequently Asked Questions
Does the agent access Eventbrite as the user or through a shared service account?
As the user. Each user signs in to Eventbrite once, and Scalekit stores and refreshes their tokens. Event, ticket, and discount changes are attributed to that user in your audit trail, not a shared service account.
Where is the Eventbrite OAuth token stored?
In Scalekit's managed AES-256 token vault, namespaced per tenant. Refresh is automatic. Revocation is a single dashboard action. Credentials never appear in prompts, logs, or LLM context.
Can I limit what the agent does in Eventbrite?
Yes. Filter by tool name in listScopedTools to expose only what you want, for example the event and attendee tools without eventbrite_event_delete or eventbrite_event_cancel. Scalekit also enforces scope checks before every API call.
What happens when a user revokes Eventbrite access?
The connection is invalidated on the next tool call. Subsequent requests for that user fail closed with a clear error. Other users in the tenant remain unaffected. The event is logged for audit.
Which Eventbrite organization does the agent work in?
The organizations the signed-in user is a member of. eventbrite_organizations_list returns them, and organization tools such as eventbrite_organization_events_list and eventbrite_organization_orders_list work across every event that organization owns.
Start in your coding agent
Up and running in one command
Install the Scalekit skill in your editor of choice. Connector, auth, tools, prompt, all wired up
Claude Code REPL
/plugin marketplace add scalekit-inc/claude-code-authstack
/plugin install agentkit@scalekit-auth-stack
Cursor Code REPL
# ~/.cursor/mcp.json
{
""mcpServers"": {
""eventbrite"": {
""url"": ""https://mcp.scalekit.com/eventbrite"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.eventbrite]
url = ""https://mcp.scalekit.com/eventbrite""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""eventbrite"": {
""url"": ""https://mcp.scalekit.com/eventbrite"",
""type"": ""http""
}
}
}