@chrischall/eventbrite-mcp 0.3.3 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/dist/bundle.js +64714 -42682
- package/dist/tools/account.js +19 -20
- package/dist/tools/discovery.js +14 -8
- package/dist/tools/events.js +23 -21
- package/dist/tools/lookup.js +18 -15
- package/dist/version.js +1 -1
- package/package.json +6 -5
- package/server.json +2 -2
package/dist/tools/account.js
CHANGED
|
@@ -10,9 +10,9 @@ export function registerAccountTools(server, deps) {
|
|
|
10
10
|
const { client } = deps;
|
|
11
11
|
server.registerTool('eb_me', {
|
|
12
12
|
description: "Get the authenticated Eventbrite user's profile (id, name, primary email).",
|
|
13
|
-
inputSchema: {
|
|
13
|
+
inputSchema: z.object({
|
|
14
14
|
view: viewArg(),
|
|
15
|
-
},
|
|
15
|
+
}),
|
|
16
16
|
annotations: { readOnlyHint: true },
|
|
17
17
|
}, async ({ view }) => {
|
|
18
18
|
const data = await client.request('GET', '/users/me/');
|
|
@@ -21,14 +21,14 @@ export function registerAccountTools(server, deps) {
|
|
|
21
21
|
server.registerTool('eb_my_orders', {
|
|
22
22
|
description: "List the authenticated user's ticket orders (attendee side), with the event expanded. time_filter narrows to upcoming or past events.",
|
|
23
23
|
annotations: { readOnlyHint: true },
|
|
24
|
-
inputSchema: {
|
|
24
|
+
inputSchema: z.object({
|
|
25
25
|
view: viewArg(),
|
|
26
26
|
time_filter: z
|
|
27
27
|
.enum(['all', 'current_future', 'past'])
|
|
28
28
|
.optional()
|
|
29
29
|
.describe('Filter orders by event time (default all)'),
|
|
30
30
|
continuation: schemaContinuation,
|
|
31
|
-
},
|
|
31
|
+
}),
|
|
32
32
|
}, async ({ time_filter, continuation, view }) => {
|
|
33
33
|
const params = new URLSearchParams({ expand: 'event' });
|
|
34
34
|
if (time_filter)
|
|
@@ -41,9 +41,10 @@ export function registerAccountTools(server, deps) {
|
|
|
41
41
|
server.registerTool('eb_my_organizations', {
|
|
42
42
|
description: 'List the organizations the authenticated user belongs to (organizer side). Use the returned org id with eb_org_events / eb_org_attendees / eb_org_orders.',
|
|
43
43
|
annotations: { readOnlyHint: true },
|
|
44
|
-
inputSchema: {
|
|
45
|
-
view: viewArg(),
|
|
46
|
-
|
|
44
|
+
inputSchema: z.object({
|
|
45
|
+
view: viewArg(),
|
|
46
|
+
continuation: schemaContinuation,
|
|
47
|
+
}),
|
|
47
48
|
}, async ({ continuation, view }) => {
|
|
48
49
|
const params = new URLSearchParams();
|
|
49
50
|
if (continuation)
|
|
@@ -54,18 +55,16 @@ export function registerAccountTools(server, deps) {
|
|
|
54
55
|
server.registerTool('eb_org_events', {
|
|
55
56
|
description: "List an organization's events (as organizer), optionally filtered by status.",
|
|
56
57
|
annotations: { readOnlyHint: true },
|
|
57
|
-
inputSchema: {
|
|
58
|
+
inputSchema: z.object({
|
|
58
59
|
view: viewArg(),
|
|
59
60
|
org_id: z.string().describe('Organization id (from eb_my_organizations)'),
|
|
60
61
|
status: z
|
|
61
62
|
.enum(['all', 'live', 'draft', 'started', 'ended', 'completed', 'canceled'])
|
|
62
63
|
.optional()
|
|
63
64
|
.describe('Event status filter (default all)'),
|
|
64
|
-
order_by: z
|
|
65
|
-
.enum(['start_asc', 'start_desc', 'created_asc', 'created_desc'])
|
|
66
|
-
.optional(),
|
|
65
|
+
order_by: z.enum(['start_asc', 'start_desc', 'created_asc', 'created_desc']).optional(),
|
|
67
66
|
continuation: schemaContinuation,
|
|
68
|
-
},
|
|
67
|
+
}),
|
|
69
68
|
}, async ({ org_id, status, order_by, continuation, view }) => {
|
|
70
69
|
const params = new URLSearchParams();
|
|
71
70
|
if (status)
|
|
@@ -80,7 +79,7 @@ export function registerAccountTools(server, deps) {
|
|
|
80
79
|
server.registerTool('eb_org_attendees', {
|
|
81
80
|
description: "List attendees across an organization's events (organizer side).",
|
|
82
81
|
annotations: { readOnlyHint: true },
|
|
83
|
-
inputSchema: {
|
|
82
|
+
inputSchema: z.object({
|
|
84
83
|
view: viewArg(),
|
|
85
84
|
org_id: z.string().describe('Organization id (from eb_my_organizations)'),
|
|
86
85
|
status: z
|
|
@@ -88,7 +87,7 @@ export function registerAccountTools(server, deps) {
|
|
|
88
87
|
.optional()
|
|
89
88
|
.describe('Attendee status filter'),
|
|
90
89
|
continuation: schemaContinuation,
|
|
91
|
-
},
|
|
90
|
+
}),
|
|
92
91
|
}, async ({ org_id, status, continuation, view }) => {
|
|
93
92
|
const params = new URLSearchParams();
|
|
94
93
|
if (status)
|
|
@@ -101,11 +100,11 @@ export function registerAccountTools(server, deps) {
|
|
|
101
100
|
server.registerTool('eb_org_orders', {
|
|
102
101
|
description: "List orders across an organization's events (organizer side).",
|
|
103
102
|
annotations: { readOnlyHint: true },
|
|
104
|
-
inputSchema: {
|
|
103
|
+
inputSchema: z.object({
|
|
105
104
|
view: viewArg(),
|
|
106
105
|
org_id: z.string().describe('Organization id (from eb_my_organizations)'),
|
|
107
106
|
continuation: schemaContinuation,
|
|
108
|
-
},
|
|
107
|
+
}),
|
|
109
108
|
}, async ({ org_id, continuation, view }) => {
|
|
110
109
|
const params = new URLSearchParams();
|
|
111
110
|
if (continuation)
|
|
@@ -136,11 +135,11 @@ export function registerAccountTools(server, deps) {
|
|
|
136
135
|
server.registerTool(name, {
|
|
137
136
|
description,
|
|
138
137
|
annotations: { readOnlyHint: true },
|
|
139
|
-
inputSchema: {
|
|
138
|
+
inputSchema: z.object({
|
|
140
139
|
org_id: z.string().describe('Organization id (from eb_my_organizations)'),
|
|
141
140
|
continuation: schemaContinuation,
|
|
142
141
|
view: viewArg(),
|
|
143
|
-
},
|
|
142
|
+
}),
|
|
144
143
|
}, async ({ org_id, continuation, view }) => {
|
|
145
144
|
const params = new URLSearchParams();
|
|
146
145
|
if (continuation)
|
|
@@ -151,7 +150,7 @@ export function registerAccountTools(server, deps) {
|
|
|
151
150
|
server.registerTool('eb_org_report', {
|
|
152
151
|
description: "Run an organization's sales or attendees report — the aggregated analytics behind its events, optionally windowed by date.",
|
|
153
152
|
annotations: { readOnlyHint: true },
|
|
154
|
-
inputSchema: {
|
|
153
|
+
inputSchema: z.object({
|
|
155
154
|
org_id: z.string().describe('Organization id (from eb_my_organizations)'),
|
|
156
155
|
kind: z.enum(['sales', 'attendees']).describe('Which report to run'),
|
|
157
156
|
start_date: z.string().optional().describe('ISO date lower bound (YYYY-MM-DD)'),
|
|
@@ -163,7 +162,7 @@ export function registerAccountTools(server, deps) {
|
|
|
163
162
|
.describe("Grouping dimension, e.g. 'event', 'day', 'ticket_class'"),
|
|
164
163
|
continuation: schemaContinuation,
|
|
165
164
|
view: viewArg(),
|
|
166
|
-
},
|
|
165
|
+
}),
|
|
167
166
|
}, async ({ org_id, kind, start_date, end_date, event_status, group_by, continuation, view }) => {
|
|
168
167
|
const params = new URLSearchParams();
|
|
169
168
|
if (start_date)
|
package/dist/tools/discovery.js
CHANGED
|
@@ -21,13 +21,13 @@ export async function registerDiscoveryTools(server, deps) {
|
|
|
21
21
|
server.registerTool('eb_resolve_place', {
|
|
22
22
|
description: "Resolve a location to Eventbrite's internal place id for eb_search_events. Accepts a plain location ('Charlotte, NC', 'Berlin, Germany') or a browse slug ('nc--charlotte'). A city on its own is rejected — include the state or country. Returns {placeId, name, slug, region, country} plus `shelves` — curated browse shelves (Popular, This Weekend, Online) harvested free from the same fetch.",
|
|
23
23
|
annotations: { readOnlyHint: true, openWorldHint: true },
|
|
24
|
-
inputSchema: {
|
|
24
|
+
inputSchema: z.object({
|
|
25
25
|
view: viewArg(),
|
|
26
26
|
location: z
|
|
27
27
|
.string()
|
|
28
28
|
.min(2)
|
|
29
29
|
.describe("Location, e.g. 'Charlotte, NC', 'Berlin, Germany', or the slug 'nc--charlotte'"),
|
|
30
|
-
},
|
|
30
|
+
}),
|
|
31
31
|
}, async ({ location, view }) => {
|
|
32
32
|
const place = await discovery.resolveLocation(location);
|
|
33
33
|
return viewResponse(view, place);
|
|
@@ -35,7 +35,7 @@ export async function registerDiscoveryTools(server, deps) {
|
|
|
35
35
|
server.registerTool('eb_search_events', {
|
|
36
36
|
description: 'Search public Eventbrite events (the consumer search absent from the documented API). Resolve the location to a place id first with eb_resolve_place. Filters: keyword, dates, category/subcategory/format ids (see eb_reference), free/paid, online-only. Answers with the slim per-event projection by default; pass view:"full" for Eventbrite\'s whole search envelope.',
|
|
37
37
|
annotations: { readOnlyHint: true, openWorldHint: true },
|
|
38
|
-
inputSchema: {
|
|
38
|
+
inputSchema: z.object({
|
|
39
39
|
q: z.string().optional().describe('Keyword query'),
|
|
40
40
|
place_id: z
|
|
41
41
|
.string()
|
|
@@ -53,13 +53,19 @@ export async function registerDiscoveryTools(server, deps) {
|
|
|
53
53
|
price: z.enum(['free', 'paid']).optional(),
|
|
54
54
|
online_events_only: z.boolean().optional(),
|
|
55
55
|
page: z.number().int().positive().optional().describe('Page number (default 1)'),
|
|
56
|
-
page_size: z
|
|
56
|
+
page_size: z
|
|
57
|
+
.number()
|
|
58
|
+
.int()
|
|
59
|
+
.positive()
|
|
60
|
+
.max(50)
|
|
61
|
+
.optional()
|
|
62
|
+
.describe('Results per page (default 20)'),
|
|
57
63
|
aggs: z
|
|
58
64
|
.array(z.enum(['places_borough', 'places_neighborhood']))
|
|
59
65
|
.optional()
|
|
60
66
|
.describe('Facet buckets to aggregate alongside results'),
|
|
61
67
|
view: viewArg(SEARCH_NOTE),
|
|
62
|
-
},
|
|
68
|
+
}),
|
|
63
69
|
}, async (args) => {
|
|
64
70
|
const data = await discovery.search({
|
|
65
71
|
q: args.q,
|
|
@@ -93,16 +99,16 @@ export async function registerDiscoveryTools(server, deps) {
|
|
|
93
99
|
});
|
|
94
100
|
});
|
|
95
101
|
server.registerTool('eb_event_details', {
|
|
96
|
-
description:
|
|
102
|
+
description: 'Batch-fetch public event details by id. Uses your bearer token by default, falling back to the browser bridge when no token is configured. For ticket-class detail prefer eb_ticket_classes.',
|
|
97
103
|
annotations: { readOnlyHint: true, openWorldHint: true },
|
|
98
|
-
inputSchema: {
|
|
104
|
+
inputSchema: z.object({
|
|
99
105
|
view: viewArg(),
|
|
100
106
|
event_ids: z.array(z.string()).min(1).max(20).describe('Numeric event ids'),
|
|
101
107
|
expand: z
|
|
102
108
|
.string()
|
|
103
109
|
.optional()
|
|
104
110
|
.describe('Comma-separated expansions (default primary_venue,image,ticket_availability,event_sales_status,primary_organizer)'),
|
|
105
|
-
},
|
|
111
|
+
}),
|
|
106
112
|
}, async ({ event_ids, expand, view }) => {
|
|
107
113
|
const data = await discovery.eventsByIds(event_ids, expand ? expand.split(',').map((s) => s.trim()) : undefined);
|
|
108
114
|
return viewResponse(view, data);
|
package/dist/tools/events.js
CHANGED
|
@@ -13,14 +13,14 @@ export function registerEventTools(server, deps) {
|
|
|
13
13
|
server.registerTool('eb_event', {
|
|
14
14
|
description: 'Get an Eventbrite event by id (works for any public event, not just yours). Event ids are the trailing digits in an event URL (…-tickets-<id>).',
|
|
15
15
|
annotations: { readOnlyHint: true },
|
|
16
|
-
inputSchema: {
|
|
16
|
+
inputSchema: z.object({
|
|
17
17
|
view: viewArg(),
|
|
18
18
|
event_id: z.string().describe('Numeric event id'),
|
|
19
19
|
expand: z
|
|
20
20
|
.string()
|
|
21
21
|
.optional()
|
|
22
22
|
.describe('Comma-separated expansions (default venue,organizer,ticket_availability)'),
|
|
23
|
-
},
|
|
23
|
+
}),
|
|
24
24
|
}, async ({ event_id, expand, view }) => {
|
|
25
25
|
const exp = expand ?? 'venue,organizer,ticket_availability';
|
|
26
26
|
const data = await client.request('GET', `/events/${encodeURIComponent(event_id)}/?expand=${encodeURIComponent(exp)}`);
|
|
@@ -29,9 +29,10 @@ export function registerEventTools(server, deps) {
|
|
|
29
29
|
server.registerTool('eb_ticket_classes', {
|
|
30
30
|
description: "List an event's ticket classes (name, cost, free/paid, on-sale status).",
|
|
31
31
|
annotations: { readOnlyHint: true },
|
|
32
|
-
inputSchema: {
|
|
33
|
-
view: viewArg(),
|
|
34
|
-
|
|
32
|
+
inputSchema: z.object({
|
|
33
|
+
view: viewArg(),
|
|
34
|
+
event_id: z.string().describe('Numeric event id'),
|
|
35
|
+
}),
|
|
35
36
|
}, async ({ event_id, view }) => {
|
|
36
37
|
const data = await client.request('GET', `/events/${encodeURIComponent(event_id)}/ticket_classes/`);
|
|
37
38
|
return viewResponse(view, data);
|
|
@@ -39,9 +40,10 @@ export function registerEventTools(server, deps) {
|
|
|
39
40
|
server.registerTool('eb_event_description', {
|
|
40
41
|
description: "Get an event's full HTML description.",
|
|
41
42
|
annotations: { readOnlyHint: true },
|
|
42
|
-
inputSchema: {
|
|
43
|
-
view: viewArg(),
|
|
44
|
-
|
|
43
|
+
inputSchema: z.object({
|
|
44
|
+
view: viewArg(),
|
|
45
|
+
event_id: z.string().describe('Numeric event id'),
|
|
46
|
+
}),
|
|
45
47
|
}, async ({ event_id, view }) => {
|
|
46
48
|
const data = await client.request('GET', `/events/${encodeURIComponent(event_id)}/description/`);
|
|
47
49
|
return viewResponse(view, data);
|
|
@@ -49,12 +51,12 @@ export function registerEventTools(server, deps) {
|
|
|
49
51
|
server.registerTool('eb_reference', {
|
|
50
52
|
description: 'List Eventbrite reference data: categories (103=Music, 101=Business, 110=Food & Drink, …), subcategories, formats, timezones, countries or regions. Category/subcategory/format ids feed eb_search_events filters.',
|
|
51
53
|
annotations: { readOnlyHint: true },
|
|
52
|
-
inputSchema: {
|
|
54
|
+
inputSchema: z.object({
|
|
53
55
|
view: viewArg(),
|
|
54
56
|
kind: z
|
|
55
57
|
.enum(['categories', 'subcategories', 'formats', 'timezones', 'countries', 'regions'])
|
|
56
58
|
.describe('Which list to fetch'),
|
|
57
|
-
},
|
|
59
|
+
}),
|
|
58
60
|
}, async ({ kind, view }) => {
|
|
59
61
|
// timezones/countries/regions hang off /system/; the bare /countries/ and
|
|
60
62
|
// /regions/ paths 404 (verified live 2026-07-30). The taxonomy lists
|
|
@@ -66,7 +68,7 @@ export function registerEventTools(server, deps) {
|
|
|
66
68
|
server.registerTool('eb_event_attendees', {
|
|
67
69
|
description: "List a single event's attendees (organizer-side; requires access to that event). Use changed_since to poll incrementally instead of re-reading the whole list.",
|
|
68
70
|
annotations: { readOnlyHint: true },
|
|
69
|
-
inputSchema: {
|
|
71
|
+
inputSchema: z.object({
|
|
70
72
|
event_id: z.string().describe('Numeric event id'),
|
|
71
73
|
status: z.enum(['attending', 'not_attending', 'unpaid']).optional(),
|
|
72
74
|
changed_since: z
|
|
@@ -75,7 +77,7 @@ export function registerEventTools(server, deps) {
|
|
|
75
77
|
.describe('ISO 8601 UTC timestamp — only attendees changed since then'),
|
|
76
78
|
continuation: schemaContinuation,
|
|
77
79
|
view: viewArg(),
|
|
78
|
-
},
|
|
80
|
+
}),
|
|
79
81
|
}, async ({ event_id, status, changed_since, continuation, view }) => {
|
|
80
82
|
const params = new URLSearchParams();
|
|
81
83
|
if (status)
|
|
@@ -87,18 +89,18 @@ export function registerEventTools(server, deps) {
|
|
|
87
89
|
return viewResponse(view, await client.request('GET', `/events/${enc(event_id)}/attendees/${qs(params)}`));
|
|
88
90
|
});
|
|
89
91
|
server.registerTool('eb_event_attendee', {
|
|
90
|
-
description:
|
|
92
|
+
description: 'Get one attendee of an event by id (barcode, profile answers, check-in state).',
|
|
91
93
|
annotations: { readOnlyHint: true },
|
|
92
|
-
inputSchema: {
|
|
94
|
+
inputSchema: z.object({
|
|
93
95
|
event_id: z.string().describe('Numeric event id'),
|
|
94
96
|
attendee_id: z.string().describe('Numeric attendee id'),
|
|
95
97
|
view: viewArg(),
|
|
96
|
-
},
|
|
98
|
+
}),
|
|
97
99
|
}, async ({ event_id, attendee_id, view }) => viewResponse(view, await client.request('GET', `/events/${enc(event_id)}/attendees/${enc(attendee_id)}/`)));
|
|
98
100
|
server.registerTool('eb_event_orders', {
|
|
99
101
|
description: "List a single event's orders (organizer-side; requires access to that event).",
|
|
100
102
|
annotations: { readOnlyHint: true },
|
|
101
|
-
inputSchema: {
|
|
103
|
+
inputSchema: z.object({
|
|
102
104
|
event_id: z.string().describe('Numeric event id'),
|
|
103
105
|
status: z.enum(['all', 'placed', 'refunded']).optional(),
|
|
104
106
|
changed_since: z
|
|
@@ -107,7 +109,7 @@ export function registerEventTools(server, deps) {
|
|
|
107
109
|
.describe('ISO 8601 UTC timestamp — only orders changed since then'),
|
|
108
110
|
continuation: schemaContinuation,
|
|
109
111
|
view: viewArg(),
|
|
110
|
-
},
|
|
112
|
+
}),
|
|
111
113
|
}, async ({ event_id, status, changed_since, continuation, view }) => {
|
|
112
114
|
const params = new URLSearchParams();
|
|
113
115
|
if (status)
|
|
@@ -121,22 +123,22 @@ export function registerEventTools(server, deps) {
|
|
|
121
123
|
server.registerTool('eb_ticket_class', {
|
|
122
124
|
description: 'Get one ticket class of an event by id. Use eb_ticket_classes to list them first.',
|
|
123
125
|
annotations: { readOnlyHint: true },
|
|
124
|
-
inputSchema: {
|
|
126
|
+
inputSchema: z.object({
|
|
125
127
|
event_id: z.string().describe('Numeric event id'),
|
|
126
128
|
ticket_class_id: z.string().describe('Numeric ticket class id'),
|
|
127
129
|
view: viewArg(),
|
|
128
|
-
},
|
|
130
|
+
}),
|
|
129
131
|
}, async ({ event_id, ticket_class_id, view }) => viewResponse(view, await client.request('GET', `/events/${enc(event_id)}/ticket_classes/${enc(ticket_class_id)}/`)));
|
|
130
132
|
server.registerTool('eb_event_questions', {
|
|
131
133
|
description: "List the registration questions an event asks its buyers. Set canned=true for Eventbrite's standard question bank instead of the event's custom ones.",
|
|
132
134
|
annotations: { readOnlyHint: true },
|
|
133
|
-
inputSchema: {
|
|
135
|
+
inputSchema: z.object({
|
|
134
136
|
event_id: z.string().describe('Numeric event id'),
|
|
135
137
|
canned: z
|
|
136
138
|
.boolean()
|
|
137
139
|
.optional()
|
|
138
140
|
.describe("Fetch the standard question bank instead of the event's custom questions"),
|
|
139
141
|
view: viewArg(),
|
|
140
|
-
},
|
|
142
|
+
}),
|
|
141
143
|
}, async ({ event_id, canned, view }) => viewResponse(view, await client.request('GET', `/events/${enc(event_id)}/${canned ? 'canned_questions' : 'questions'}/`)));
|
|
142
144
|
}
|
package/dist/tools/lookup.js
CHANGED
|
@@ -14,14 +14,14 @@ export function registerLookupTools(server, deps) {
|
|
|
14
14
|
server.registerTool('eb_order', {
|
|
15
15
|
description: 'Get a single order by id (the buyer-side record behind a ticket). Order ids appear in eb_my_orders / eb_event_orders results.',
|
|
16
16
|
annotations: { readOnlyHint: true },
|
|
17
|
-
inputSchema: {
|
|
17
|
+
inputSchema: z.object({
|
|
18
18
|
order_id: z.string().describe('Numeric order id'),
|
|
19
19
|
expand: z
|
|
20
20
|
.string()
|
|
21
21
|
.optional()
|
|
22
22
|
.describe("Comma-separated expansions, e.g. 'attendees,event'"),
|
|
23
23
|
view: viewArg(),
|
|
24
|
-
},
|
|
24
|
+
}),
|
|
25
25
|
}, async ({ order_id, expand, view }) => {
|
|
26
26
|
const params = new URLSearchParams();
|
|
27
27
|
if (expand)
|
|
@@ -31,19 +31,20 @@ export function registerLookupTools(server, deps) {
|
|
|
31
31
|
server.registerTool('eb_venue', {
|
|
32
32
|
description: 'Get a venue by id (name, address, geo). Venue ids appear on expanded events and in eb_org_venues.',
|
|
33
33
|
annotations: { readOnlyHint: true },
|
|
34
|
-
inputSchema:
|
|
34
|
+
inputSchema: z.object({
|
|
35
|
+
venue_id: z.string().describe('Numeric venue id'),
|
|
35
36
|
view: viewArg(),
|
|
36
|
-
},
|
|
37
|
+
}),
|
|
37
38
|
}, async ({ venue_id, view }) => viewResponse(view, await client.request('GET', `/venues/${enc(venue_id)}/`)));
|
|
38
39
|
server.registerTool('eb_venue_events', {
|
|
39
40
|
description: 'List the events held at a venue.',
|
|
40
41
|
annotations: { readOnlyHint: true },
|
|
41
|
-
inputSchema: {
|
|
42
|
+
inputSchema: z.object({
|
|
42
43
|
venue_id: z.string().describe('Numeric venue id'),
|
|
43
44
|
status: schemaEventStatus,
|
|
44
45
|
continuation: schemaContinuation,
|
|
45
46
|
view: viewArg(),
|
|
46
|
-
},
|
|
47
|
+
}),
|
|
47
48
|
}, async ({ venue_id, status, continuation, view }) => {
|
|
48
49
|
const params = new URLSearchParams();
|
|
49
50
|
if (status)
|
|
@@ -55,20 +56,21 @@ export function registerLookupTools(server, deps) {
|
|
|
55
56
|
server.registerTool('eb_organizer', {
|
|
56
57
|
description: "Get an organizer's public profile by id (name, description, logo, social links).",
|
|
57
58
|
annotations: { readOnlyHint: true },
|
|
58
|
-
inputSchema:
|
|
59
|
+
inputSchema: z.object({
|
|
60
|
+
organizer_id: z.string().describe('Numeric organizer id'),
|
|
59
61
|
view: viewArg(),
|
|
60
|
-
},
|
|
62
|
+
}),
|
|
61
63
|
}, async ({ organizer_id, view }) => viewResponse(view, await client.request('GET', `/organizers/${enc(organizer_id)}/`)));
|
|
62
64
|
server.registerTool('eb_organizer_events', {
|
|
63
65
|
description: "List an organizer's events — the public way to see everything one organizer is running.",
|
|
64
66
|
annotations: { readOnlyHint: true },
|
|
65
|
-
inputSchema: {
|
|
67
|
+
inputSchema: z.object({
|
|
66
68
|
organizer_id: z.string().describe('Numeric organizer id'),
|
|
67
69
|
status: schemaEventStatus,
|
|
68
70
|
order_by: z.enum(['start_asc', 'start_desc', 'created_asc', 'created_desc']).optional(),
|
|
69
71
|
continuation: schemaContinuation,
|
|
70
72
|
view: viewArg(),
|
|
71
|
-
},
|
|
73
|
+
}),
|
|
72
74
|
}, async ({ organizer_id, status, order_by, continuation, view }) => {
|
|
73
75
|
const params = new URLSearchParams();
|
|
74
76
|
if (status)
|
|
@@ -82,12 +84,12 @@ export function registerLookupTools(server, deps) {
|
|
|
82
84
|
server.registerTool('eb_series_events', {
|
|
83
85
|
description: 'List the occurrences of a recurring event series. Search results and events carry a series_id when they belong to one.',
|
|
84
86
|
annotations: { readOnlyHint: true },
|
|
85
|
-
inputSchema: {
|
|
87
|
+
inputSchema: z.object({
|
|
86
88
|
series_id: z.string().describe('Numeric series id (from an event/search result)'),
|
|
87
89
|
status: schemaEventStatus,
|
|
88
90
|
continuation: schemaContinuation,
|
|
89
91
|
view: viewArg(),
|
|
90
|
-
},
|
|
92
|
+
}),
|
|
91
93
|
}, async ({ series_id, status, continuation, view }) => {
|
|
92
94
|
const params = new URLSearchParams();
|
|
93
95
|
if (status)
|
|
@@ -97,10 +99,11 @@ export function registerLookupTools(server, deps) {
|
|
|
97
99
|
return viewResponse(view, await client.request('GET', `/series/${enc(series_id)}/events/${qs(params)}`));
|
|
98
100
|
});
|
|
99
101
|
server.registerTool('eb_user', {
|
|
100
|
-
description:
|
|
102
|
+
description: 'Get a public user profile by id. Use eb_me for the authenticated user (that call also returns private fields like emails).',
|
|
101
103
|
annotations: { readOnlyHint: true },
|
|
102
|
-
inputSchema:
|
|
104
|
+
inputSchema: z.object({
|
|
105
|
+
user_id: z.string().describe('Numeric user id'),
|
|
103
106
|
view: viewArg(),
|
|
104
|
-
},
|
|
107
|
+
}),
|
|
105
108
|
}, async ({ user_id, view }) => viewResponse(view, await client.request('GET', `/users/${enc(user_id)}/`)));
|
|
106
109
|
}
|
package/dist/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const VERSION = '0.
|
|
1
|
+
export const VERSION = '1.0.0'; // x-release-please-version
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chrischall/eventbrite-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"mcpName": "io.github.chrischall/eventbrite-mcp",
|
|
5
5
|
"description": "Eventbrite MCP server for Claude — developed and maintained by AI (Claude Code)",
|
|
6
6
|
"author": "Claude Code (AI) <https://www.anthropic.com/claude>",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
],
|
|
38
38
|
"scripts": {
|
|
39
39
|
"build": "tsc && npm run bundle",
|
|
40
|
-
"bundle": "esbuild src/index.ts --bundle --platform=node --format=esm --external:dotenv --banner:js='import { createRequire as __createRequire } from \"module\"; const require = __createRequire(import.meta.url);' --outfile=dist/bundle.js",
|
|
40
|
+
"bundle": "esbuild src/index.ts --bundle --platform=node --format=esm --alias:zod/v4=./node_modules/zod/v4/index.cjs --external:dotenv --banner:js='import { createRequire as __createRequire } from \"module\"; const require = __createRequire(import.meta.url);' --outfile=dist/bundle.js",
|
|
41
41
|
"dev": "node dist/index.js",
|
|
42
42
|
"test": "npm run typecheck && vitest run",
|
|
43
43
|
"test:watch": "vitest",
|
|
@@ -45,13 +45,14 @@
|
|
|
45
45
|
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@chrischall/mcp-utils": "^0.
|
|
48
|
+
"@chrischall/mcp-utils": "^0.28.0",
|
|
49
49
|
"@fetchproxy/server": "^3.0.1",
|
|
50
|
-
"@modelcontextprotocol/
|
|
50
|
+
"@modelcontextprotocol/server": "^2.0.0",
|
|
51
51
|
"dotenv": "^17.4.0",
|
|
52
|
-
"zod": "^4.
|
|
52
|
+
"zod": "^4.6.2"
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
55
|
+
"@modelcontextprotocol/client": "^2.0.0",
|
|
55
56
|
"@types/node": "^26.0.0",
|
|
56
57
|
"@vitest/coverage-v8": "^5.0.0",
|
|
57
58
|
"esbuild": "^0.28.0",
|
package/server.json
CHANGED
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
"url": "https://github.com/chrischall/eventbrite-mcp",
|
|
7
7
|
"source": "github"
|
|
8
8
|
},
|
|
9
|
-
"version": "0.
|
|
9
|
+
"version": "1.0.0",
|
|
10
10
|
"packages": [
|
|
11
11
|
{
|
|
12
12
|
"registryType": "npm",
|
|
13
13
|
"identifier": "@chrischall/eventbrite-mcp",
|
|
14
|
-
"version": "0.
|
|
14
|
+
"version": "1.0.0",
|
|
15
15
|
"transport": {
|
|
16
16
|
"type": "stdio"
|
|
17
17
|
},
|