@burdenoff/mcp-libs 2026.626.1 → 2026.627.2
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/dist/modules/assethandler/index.cjs +1601 -0
- package/dist/modules/assethandler/index.cjs.map +1 -0
- package/dist/modules/assethandler/index.d.cts +8 -0
- package/dist/modules/assethandler/index.d.ts +8 -0
- package/dist/modules/assethandler/index.js +1540 -0
- package/dist/modules/assethandler/index.js.map +1 -0
- package/dist/modules/crewfoundry/index.cjs +1598 -0
- package/dist/modules/crewfoundry/index.cjs.map +1 -0
- package/dist/modules/crewfoundry/index.d.cts +8 -0
- package/dist/modules/crewfoundry/index.d.ts +8 -0
- package/dist/modules/crewfoundry/index.js +1537 -0
- package/dist/modules/crewfoundry/index.js.map +1 -0
- package/dist/modules/eventfullymanaged/index.cjs +3364 -0
- package/dist/modules/eventfullymanaged/index.cjs.map +1 -0
- package/dist/modules/eventfullymanaged/index.d.cts +8 -0
- package/dist/modules/eventfullymanaged/index.d.ts +8 -0
- package/dist/modules/eventfullymanaged/index.js +3303 -0
- package/dist/modules/eventfullymanaged/index.js.map +1 -0
- package/dist/modules/ggnomad/index.cjs +1068 -0
- package/dist/modules/ggnomad/index.cjs.map +1 -0
- package/dist/modules/ggnomad/index.d.cts +8 -0
- package/dist/modules/ggnomad/index.d.ts +8 -0
- package/dist/modules/ggnomad/index.js +1007 -0
- package/dist/modules/ggnomad/index.js.map +1 -0
- package/dist/modules/headshotmarketing/index.cjs +5031 -0
- package/dist/modules/headshotmarketing/index.cjs.map +1 -0
- package/dist/modules/headshotmarketing/index.d.cts +8 -0
- package/dist/modules/headshotmarketing/index.d.ts +8 -0
- package/dist/modules/headshotmarketing/index.js +4970 -0
- package/dist/modules/headshotmarketing/index.js.map +1 -0
- package/dist/modules/housingvista/index.cjs +1092 -0
- package/dist/modules/housingvista/index.cjs.map +1 -0
- package/dist/modules/housingvista/index.d.cts +8 -0
- package/dist/modules/housingvista/index.d.ts +8 -0
- package/dist/modules/housingvista/index.js +1031 -0
- package/dist/modules/housingvista/index.js.map +1 -0
- package/dist/modules/movethewheels/index.cjs +3915 -0
- package/dist/modules/movethewheels/index.cjs.map +1 -0
- package/dist/modules/movethewheels/index.d.cts +8 -0
- package/dist/modules/movethewheels/index.d.ts +8 -0
- package/dist/modules/movethewheels/index.js +3854 -0
- package/dist/modules/movethewheels/index.js.map +1 -0
- package/dist/modules/planmagnet/index.cjs +6171 -0
- package/dist/modules/planmagnet/index.cjs.map +1 -0
- package/dist/modules/planmagnet/index.d.cts +8 -0
- package/dist/modules/planmagnet/index.d.ts +8 -0
- package/dist/modules/planmagnet/index.js +6110 -0
- package/dist/modules/planmagnet/index.js.map +1 -0
- package/dist/modules/proserviceworld/index.cjs +1404 -0
- package/dist/modules/proserviceworld/index.cjs.map +1 -0
- package/dist/modules/proserviceworld/index.d.cts +8 -0
- package/dist/modules/proserviceworld/index.d.ts +8 -0
- package/dist/modules/proserviceworld/index.js +1343 -0
- package/dist/modules/proserviceworld/index.js.map +1 -0
- package/dist/modules/timecampus/index.cjs +6482 -0
- package/dist/modules/timecampus/index.cjs.map +1 -0
- package/dist/modules/timecampus/index.d.cts +8 -0
- package/dist/modules/timecampus/index.d.ts +8 -0
- package/dist/modules/timecampus/index.js +6421 -0
- package/dist/modules/timecampus/index.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,3303 @@
|
|
|
1
|
+
import { mcpToolName, jsonResult, errorResult, mcpResourceUri, mcpPromptName } from '../../chunk-H2OYWLOA.js';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
|
|
4
|
+
// src/modules/eventfullymanaged/operations.ts
|
|
5
|
+
var EVENT_FIELDS = `
|
|
6
|
+
id name description type status visibility timezone startAt endAt capacity
|
|
7
|
+
metadata workspaceId createdAt updatedAt
|
|
8
|
+
`;
|
|
9
|
+
var VENUE_FIELDS = `
|
|
10
|
+
id name description addressLine1 city state country postalCode capacity
|
|
11
|
+
amenities status openingHours pricing metadata workspaceId createdAt updatedAt
|
|
12
|
+
`;
|
|
13
|
+
var FLOOR_PLAN_FIELDS = `
|
|
14
|
+
id name venueId imageUrl dimensions interactiveAreas workspaceId
|
|
15
|
+
createdAt updatedAt
|
|
16
|
+
`;
|
|
17
|
+
var EVENT_SESSION_FIELDS = `
|
|
18
|
+
id eventId title description sessionType track status startsAt endsAt capacity
|
|
19
|
+
venueId metadata workspaceId createdAt updatedAt
|
|
20
|
+
`;
|
|
21
|
+
var SPEAKER_FIELDS = `
|
|
22
|
+
id fullName title organization bio email phone avatarUrl socialLinks
|
|
23
|
+
workspaceId createdAt updatedAt
|
|
24
|
+
`;
|
|
25
|
+
var ATTENDEE_FIELDS = `
|
|
26
|
+
id eventId fullName email phone company role tags profile metadata
|
|
27
|
+
workspaceId createdAt updatedAt
|
|
28
|
+
`;
|
|
29
|
+
var REGISTRATION_FIELDS = `
|
|
30
|
+
id eventId attendeeId ticketTypeId status quantity totalAmount currency
|
|
31
|
+
registeredAt checkedInAt metadata workspaceId createdAt updatedAt
|
|
32
|
+
`;
|
|
33
|
+
var TICKET_TYPE_FIELDS = `
|
|
34
|
+
id eventId name description price currency capacity soldCount isActive
|
|
35
|
+
salesStartAt salesEndAt metadata workspaceId createdAt updatedAt
|
|
36
|
+
`;
|
|
37
|
+
var PROMO_CODE_FIELDS = `
|
|
38
|
+
id eventId code description discountType discountValue maxUses usedCount
|
|
39
|
+
isActive startsAt endsAt metadata workspaceId createdAt updatedAt
|
|
40
|
+
`;
|
|
41
|
+
var SPONSOR_FIELDS = `
|
|
42
|
+
id eventId name level logoUrl website contactName contactEmail contactPhone
|
|
43
|
+
metrics metadata workspaceId createdAt updatedAt
|
|
44
|
+
`;
|
|
45
|
+
var EXHIBITOR_FIELDS = `
|
|
46
|
+
id eventId name category boothCode contactName contactEmail status metadata
|
|
47
|
+
workspaceId createdAt updatedAt
|
|
48
|
+
`;
|
|
49
|
+
var LEAD_FIELDS = `
|
|
50
|
+
id eventId exhibitorId sponsorId attendeeName attendeeEmail score status notes
|
|
51
|
+
capturedAt metadata workspaceId createdAt updatedAt
|
|
52
|
+
`;
|
|
53
|
+
var CHECK_IN_STATION_FIELDS = `
|
|
54
|
+
id eventId name code location isActive kioskConfig metadata workspaceId
|
|
55
|
+
createdAt updatedAt
|
|
56
|
+
`;
|
|
57
|
+
var CHECK_IN_RECORD_FIELDS = `
|
|
58
|
+
id eventId registrationId attendeeId stationId direction method status
|
|
59
|
+
recordedAt metadata workspaceId createdAt updatedAt
|
|
60
|
+
`;
|
|
61
|
+
var NETWORKING_PROFILE_FIELDS = `
|
|
62
|
+
id eventId attendeeId industry role interests lookingFor visibility metadata
|
|
63
|
+
workspaceId createdAt updatedAt
|
|
64
|
+
`;
|
|
65
|
+
var NETWORKING_MATCH_FIELDS = `
|
|
66
|
+
id eventId sourceProfileId targetProfileId score reason status metadata
|
|
67
|
+
workspaceId createdAt updatedAt
|
|
68
|
+
`;
|
|
69
|
+
var MEETING_FIELDS = `
|
|
70
|
+
id eventId sourceProfileId targetProfileId title status location notes
|
|
71
|
+
startsAt endsAt metadata workspaceId createdAt updatedAt
|
|
72
|
+
`;
|
|
73
|
+
var SIMPLE_ENTITY_FIELDS = `
|
|
74
|
+
id name title status eventId metadata workspaceId createdAt updatedAt
|
|
75
|
+
`;
|
|
76
|
+
var DASHBOARD_SUMMARY_FIELDS = `
|
|
77
|
+
totalEvents activeEvents totalVenues totalRegistrations totalAttendees
|
|
78
|
+
totalSponsors upcomingSessions
|
|
79
|
+
latestEvents { id name status startAt endAt }
|
|
80
|
+
`;
|
|
81
|
+
var GET_EVENT = `
|
|
82
|
+
query EventfullymanagedGetEvent($id: ID!) {
|
|
83
|
+
eventfullyManagedEvent(id: $id) {
|
|
84
|
+
${EVENT_FIELDS}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
`;
|
|
88
|
+
var LIST_EVENTS = `
|
|
89
|
+
query EventfullymanagedListEvents(
|
|
90
|
+
$workspaceId: ID
|
|
91
|
+
$search: String
|
|
92
|
+
$limit: Int
|
|
93
|
+
$offset: Int
|
|
94
|
+
) {
|
|
95
|
+
eventfullyManagedEvents(
|
|
96
|
+
workspaceId: $workspaceId
|
|
97
|
+
search: $search
|
|
98
|
+
limit: $limit
|
|
99
|
+
offset: $offset
|
|
100
|
+
) {
|
|
101
|
+
items { ${EVENT_FIELDS} }
|
|
102
|
+
total
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
`;
|
|
106
|
+
var CREATE_EVENT = `
|
|
107
|
+
mutation EventfullymanagedCreateEvent($input: EventfullyManagedEventInput!) {
|
|
108
|
+
eventfullyManagedCreateEvent(input: $input) {
|
|
109
|
+
${EVENT_FIELDS}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
`;
|
|
113
|
+
var UPDATE_EVENT = `
|
|
114
|
+
mutation EventfullymanagedUpdateEvent($id: ID!, $input: EventfullyManagedEventInput!) {
|
|
115
|
+
eventfullyManagedUpdateEvent(id: $id, input: $input) {
|
|
116
|
+
${EVENT_FIELDS}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
`;
|
|
120
|
+
var DELETE_EVENT = `
|
|
121
|
+
mutation EventfullymanagedDeleteEvent($id: ID!) {
|
|
122
|
+
eventfullyManagedDeleteEvent(id: $id)
|
|
123
|
+
}
|
|
124
|
+
`;
|
|
125
|
+
var GET_VENUE = `
|
|
126
|
+
query EventfullymanagedGetVenue($id: ID!) {
|
|
127
|
+
eventfullyManagedVenue(id: $id) {
|
|
128
|
+
${VENUE_FIELDS}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
`;
|
|
132
|
+
var LIST_VENUES = `
|
|
133
|
+
query EventfullymanagedListVenues(
|
|
134
|
+
$workspaceId: ID
|
|
135
|
+
$search: String
|
|
136
|
+
$limit: Int
|
|
137
|
+
$offset: Int
|
|
138
|
+
) {
|
|
139
|
+
eventfullyManagedVenues(
|
|
140
|
+
workspaceId: $workspaceId
|
|
141
|
+
search: $search
|
|
142
|
+
limit: $limit
|
|
143
|
+
offset: $offset
|
|
144
|
+
) {
|
|
145
|
+
items { ${VENUE_FIELDS} }
|
|
146
|
+
total
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
`;
|
|
150
|
+
var CREATE_VENUE = `
|
|
151
|
+
mutation EventfullymanagedCreateVenue($input: EventfullyManagedVenueInput!) {
|
|
152
|
+
eventfullyManagedCreateVenue(input: $input) {
|
|
153
|
+
${VENUE_FIELDS}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
`;
|
|
157
|
+
var UPDATE_VENUE = `
|
|
158
|
+
mutation EventfullymanagedUpdateVenue($id: ID!, $input: EventfullyManagedVenueInput!) {
|
|
159
|
+
eventfullyManagedUpdateVenue(id: $id, input: $input) {
|
|
160
|
+
${VENUE_FIELDS}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
`;
|
|
164
|
+
var DELETE_VENUE = `
|
|
165
|
+
mutation EventfullymanagedDeleteVenue($id: ID!) {
|
|
166
|
+
eventfullyManagedDeleteVenue(id: $id)
|
|
167
|
+
}
|
|
168
|
+
`;
|
|
169
|
+
var LIST_FLOOR_PLANS = `
|
|
170
|
+
query EventfullymanagedListFloorPlans(
|
|
171
|
+
$venueId: ID
|
|
172
|
+
$workspaceId: ID
|
|
173
|
+
$limit: Int
|
|
174
|
+
$offset: Int
|
|
175
|
+
) {
|
|
176
|
+
eventfullyManagedFloorPlans(
|
|
177
|
+
venueId: $venueId
|
|
178
|
+
workspaceId: $workspaceId
|
|
179
|
+
limit: $limit
|
|
180
|
+
offset: $offset
|
|
181
|
+
) {
|
|
182
|
+
items { ${FLOOR_PLAN_FIELDS} }
|
|
183
|
+
total
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
`;
|
|
187
|
+
var CREATE_FLOOR_PLAN = `
|
|
188
|
+
mutation EventfullymanagedCreateFloorPlan($input: EventfullyManagedFloorPlanInput!) {
|
|
189
|
+
eventfullyManagedCreateFloorPlan(input: $input) {
|
|
190
|
+
${FLOOR_PLAN_FIELDS}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
`;
|
|
194
|
+
var UPDATE_FLOOR_PLAN = `
|
|
195
|
+
mutation EventfullymanagedUpdateFloorPlan(
|
|
196
|
+
$id: ID!
|
|
197
|
+
$input: EventfullyManagedFloorPlanInput!
|
|
198
|
+
) {
|
|
199
|
+
eventfullyManagedUpdateFloorPlan(id: $id, input: $input) {
|
|
200
|
+
${FLOOR_PLAN_FIELDS}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
`;
|
|
204
|
+
var LIST_EVENT_SESSIONS = `
|
|
205
|
+
query EventfullymanagedListEventSessions(
|
|
206
|
+
$eventId: ID
|
|
207
|
+
$workspaceId: ID
|
|
208
|
+
$limit: Int
|
|
209
|
+
$offset: Int
|
|
210
|
+
) {
|
|
211
|
+
eventfullyManagedEventSessions(
|
|
212
|
+
eventId: $eventId
|
|
213
|
+
workspaceId: $workspaceId
|
|
214
|
+
limit: $limit
|
|
215
|
+
offset: $offset
|
|
216
|
+
) {
|
|
217
|
+
items { ${EVENT_SESSION_FIELDS} }
|
|
218
|
+
total
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
`;
|
|
222
|
+
var CREATE_EVENT_SESSION = `
|
|
223
|
+
mutation EventfullymanagedCreateEventSession(
|
|
224
|
+
$input: EventfullyManagedEventSessionInput!
|
|
225
|
+
) {
|
|
226
|
+
eventfullyManagedCreateEventSession(input: $input) {
|
|
227
|
+
${EVENT_SESSION_FIELDS}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
`;
|
|
231
|
+
var UPDATE_EVENT_SESSION = `
|
|
232
|
+
mutation EventfullymanagedUpdateEventSession(
|
|
233
|
+
$id: ID!
|
|
234
|
+
$input: EventfullyManagedEventSessionInput!
|
|
235
|
+
) {
|
|
236
|
+
eventfullyManagedUpdateEventSession(id: $id, input: $input) {
|
|
237
|
+
${EVENT_SESSION_FIELDS}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
`;
|
|
241
|
+
var LIST_SPEAKERS = `
|
|
242
|
+
query EventfullymanagedListSpeakers($workspaceId: ID, $limit: Int, $offset: Int) {
|
|
243
|
+
eventfullyManagedSpeakers(workspaceId: $workspaceId, limit: $limit, offset: $offset) {
|
|
244
|
+
items { ${SPEAKER_FIELDS} }
|
|
245
|
+
total
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
`;
|
|
249
|
+
var CREATE_SPEAKER = `
|
|
250
|
+
mutation EventfullymanagedCreateSpeaker($input: EventfullyManagedSpeakerInput!) {
|
|
251
|
+
eventfullyManagedCreateSpeaker(input: $input) {
|
|
252
|
+
${SPEAKER_FIELDS}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
`;
|
|
256
|
+
var UPDATE_SPEAKER = `
|
|
257
|
+
mutation EventfullymanagedUpdateSpeaker($id: ID!, $input: EventfullyManagedSpeakerInput!) {
|
|
258
|
+
eventfullyManagedUpdateSpeaker(id: $id, input: $input) {
|
|
259
|
+
${SPEAKER_FIELDS}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
`;
|
|
263
|
+
var LIST_ATTENDEES = `
|
|
264
|
+
query EventfullymanagedListAttendees(
|
|
265
|
+
$eventId: ID
|
|
266
|
+
$workspaceId: ID
|
|
267
|
+
$limit: Int
|
|
268
|
+
$offset: Int
|
|
269
|
+
) {
|
|
270
|
+
eventfullyManagedAttendees(
|
|
271
|
+
eventId: $eventId
|
|
272
|
+
workspaceId: $workspaceId
|
|
273
|
+
limit: $limit
|
|
274
|
+
offset: $offset
|
|
275
|
+
) {
|
|
276
|
+
items { ${ATTENDEE_FIELDS} }
|
|
277
|
+
total
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
`;
|
|
281
|
+
var CREATE_ATTENDEE = `
|
|
282
|
+
mutation EventfullymanagedCreateAttendee($input: EventfullyManagedAttendeeInput!) {
|
|
283
|
+
eventfullyManagedCreateAttendee(input: $input) {
|
|
284
|
+
${ATTENDEE_FIELDS}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
`;
|
|
288
|
+
var UPDATE_ATTENDEE = `
|
|
289
|
+
mutation EventfullymanagedUpdateAttendee(
|
|
290
|
+
$id: ID!
|
|
291
|
+
$input: EventfullyManagedAttendeeInput!
|
|
292
|
+
) {
|
|
293
|
+
eventfullyManagedUpdateAttendee(id: $id, input: $input) {
|
|
294
|
+
${ATTENDEE_FIELDS}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
`;
|
|
298
|
+
var LIST_REGISTRATIONS = `
|
|
299
|
+
query EventfullymanagedListRegistrations(
|
|
300
|
+
$eventId: ID
|
|
301
|
+
$workspaceId: ID
|
|
302
|
+
$limit: Int
|
|
303
|
+
$offset: Int
|
|
304
|
+
) {
|
|
305
|
+
eventfullyManagedRegistrations(
|
|
306
|
+
eventId: $eventId
|
|
307
|
+
workspaceId: $workspaceId
|
|
308
|
+
limit: $limit
|
|
309
|
+
offset: $offset
|
|
310
|
+
) {
|
|
311
|
+
items { ${REGISTRATION_FIELDS} }
|
|
312
|
+
total
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
`;
|
|
316
|
+
var CREATE_REGISTRATION = `
|
|
317
|
+
mutation EventfullymanagedCreateRegistration(
|
|
318
|
+
$input: EventfullyManagedRegistrationInput!
|
|
319
|
+
) {
|
|
320
|
+
eventfullyManagedCreateRegistration(input: $input) {
|
|
321
|
+
${REGISTRATION_FIELDS}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
`;
|
|
325
|
+
var UPDATE_REGISTRATION = `
|
|
326
|
+
mutation EventfullymanagedUpdateRegistration(
|
|
327
|
+
$id: ID!
|
|
328
|
+
$input: EventfullyManagedRegistrationInput!
|
|
329
|
+
) {
|
|
330
|
+
eventfullyManagedUpdateRegistration(id: $id, input: $input) {
|
|
331
|
+
${REGISTRATION_FIELDS}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
`;
|
|
335
|
+
var LIST_TICKET_TYPES = `
|
|
336
|
+
query EventfullymanagedListTicketTypes(
|
|
337
|
+
$eventId: ID
|
|
338
|
+
$workspaceId: ID
|
|
339
|
+
$search: String
|
|
340
|
+
$limit: Int
|
|
341
|
+
$offset: Int
|
|
342
|
+
) {
|
|
343
|
+
eventfullyManagedTicketTypes(
|
|
344
|
+
eventId: $eventId
|
|
345
|
+
workspaceId: $workspaceId
|
|
346
|
+
search: $search
|
|
347
|
+
limit: $limit
|
|
348
|
+
offset: $offset
|
|
349
|
+
) {
|
|
350
|
+
items { ${TICKET_TYPE_FIELDS} }
|
|
351
|
+
total
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
`;
|
|
355
|
+
var CREATE_TICKET_TYPE = `
|
|
356
|
+
mutation EventfullymanagedCreateTicketType(
|
|
357
|
+
$input: EventfullyManagedTicketTypeInput!
|
|
358
|
+
) {
|
|
359
|
+
eventfullyManagedCreateTicketType(input: $input) {
|
|
360
|
+
${TICKET_TYPE_FIELDS}
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
`;
|
|
364
|
+
var UPDATE_TICKET_TYPE = `
|
|
365
|
+
mutation EventfullymanagedUpdateTicketType(
|
|
366
|
+
$id: ID!
|
|
367
|
+
$input: EventfullyManagedTicketTypeInput!
|
|
368
|
+
) {
|
|
369
|
+
eventfullyManagedUpdateTicketType(id: $id, input: $input) {
|
|
370
|
+
${TICKET_TYPE_FIELDS}
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
`;
|
|
374
|
+
var DELETE_TICKET_TYPE = `
|
|
375
|
+
mutation EventfullymanagedDeleteTicketType($id: ID!) {
|
|
376
|
+
eventfullyManagedDeleteTicketType(id: $id)
|
|
377
|
+
}
|
|
378
|
+
`;
|
|
379
|
+
var LIST_PROMO_CODES = `
|
|
380
|
+
query EventfullymanagedListPromoCodes(
|
|
381
|
+
$eventId: ID
|
|
382
|
+
$workspaceId: ID
|
|
383
|
+
$search: String
|
|
384
|
+
$limit: Int
|
|
385
|
+
$offset: Int
|
|
386
|
+
) {
|
|
387
|
+
eventfullyManagedPromoCodes(
|
|
388
|
+
eventId: $eventId
|
|
389
|
+
workspaceId: $workspaceId
|
|
390
|
+
search: $search
|
|
391
|
+
limit: $limit
|
|
392
|
+
offset: $offset
|
|
393
|
+
) {
|
|
394
|
+
items { ${PROMO_CODE_FIELDS} }
|
|
395
|
+
total
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
`;
|
|
399
|
+
var CREATE_PROMO_CODE = `
|
|
400
|
+
mutation EventfullymanagedCreatePromoCode($input: EventfullyManagedPromoCodeInput!) {
|
|
401
|
+
eventfullyManagedCreatePromoCode(input: $input) {
|
|
402
|
+
${PROMO_CODE_FIELDS}
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
`;
|
|
406
|
+
var UPDATE_PROMO_CODE = `
|
|
407
|
+
mutation EventfullymanagedUpdatePromoCode(
|
|
408
|
+
$id: ID!
|
|
409
|
+
$input: EventfullyManagedPromoCodeInput!
|
|
410
|
+
) {
|
|
411
|
+
eventfullyManagedUpdatePromoCode(id: $id, input: $input) {
|
|
412
|
+
${PROMO_CODE_FIELDS}
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
`;
|
|
416
|
+
var DELETE_PROMO_CODE = `
|
|
417
|
+
mutation EventfullymanagedDeletePromoCode($id: ID!) {
|
|
418
|
+
eventfullyManagedDeletePromoCode(id: $id)
|
|
419
|
+
}
|
|
420
|
+
`;
|
|
421
|
+
var GET_SPONSOR = `
|
|
422
|
+
query EventfullymanagedGetSponsor($id: ID!) {
|
|
423
|
+
eventfullyManagedSponsor(id: $id) {
|
|
424
|
+
${SPONSOR_FIELDS}
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
`;
|
|
428
|
+
var LIST_SPONSORS = `
|
|
429
|
+
query EventfullymanagedListSponsors(
|
|
430
|
+
$eventId: ID
|
|
431
|
+
$workspaceId: ID
|
|
432
|
+
$search: String
|
|
433
|
+
$limit: Int
|
|
434
|
+
$offset: Int
|
|
435
|
+
) {
|
|
436
|
+
eventfullyManagedSponsors(
|
|
437
|
+
eventId: $eventId
|
|
438
|
+
workspaceId: $workspaceId
|
|
439
|
+
search: $search
|
|
440
|
+
limit: $limit
|
|
441
|
+
offset: $offset
|
|
442
|
+
) {
|
|
443
|
+
items { ${SPONSOR_FIELDS} }
|
|
444
|
+
total
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
`;
|
|
448
|
+
var CREATE_SPONSOR = `
|
|
449
|
+
mutation EventfullymanagedCreateSponsor($input: EventfullyManagedSponsorInput!) {
|
|
450
|
+
eventfullyManagedCreateSponsor(input: $input) {
|
|
451
|
+
${SPONSOR_FIELDS}
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
`;
|
|
455
|
+
var UPDATE_SPONSOR = `
|
|
456
|
+
mutation EventfullymanagedUpdateSponsor($id: ID!, $input: EventfullyManagedSponsorInput!) {
|
|
457
|
+
eventfullyManagedUpdateSponsor(id: $id, input: $input) {
|
|
458
|
+
${SPONSOR_FIELDS}
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
`;
|
|
462
|
+
var DELETE_SPONSOR = `
|
|
463
|
+
mutation EventfullymanagedDeleteSponsor($id: ID!) {
|
|
464
|
+
eventfullyManagedDeleteSponsor(id: $id)
|
|
465
|
+
}
|
|
466
|
+
`;
|
|
467
|
+
var LIST_EXHIBITORS = `
|
|
468
|
+
query EventfullymanagedListExhibitors(
|
|
469
|
+
$eventId: ID
|
|
470
|
+
$workspaceId: ID
|
|
471
|
+
$search: String
|
|
472
|
+
$limit: Int
|
|
473
|
+
$offset: Int
|
|
474
|
+
) {
|
|
475
|
+
eventfullyManagedExhibitors(
|
|
476
|
+
eventId: $eventId
|
|
477
|
+
workspaceId: $workspaceId
|
|
478
|
+
search: $search
|
|
479
|
+
limit: $limit
|
|
480
|
+
offset: $offset
|
|
481
|
+
) {
|
|
482
|
+
items { ${EXHIBITOR_FIELDS} }
|
|
483
|
+
total
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
`;
|
|
487
|
+
var CREATE_EXHIBITOR = `
|
|
488
|
+
mutation EventfullymanagedCreateExhibitor($input: EventfullyManagedExhibitorInput!) {
|
|
489
|
+
eventfullyManagedCreateExhibitor(input: $input) {
|
|
490
|
+
${EXHIBITOR_FIELDS}
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
`;
|
|
494
|
+
var UPDATE_EXHIBITOR = `
|
|
495
|
+
mutation EventfullymanagedUpdateExhibitor(
|
|
496
|
+
$id: ID!
|
|
497
|
+
$input: EventfullyManagedExhibitorInput!
|
|
498
|
+
) {
|
|
499
|
+
eventfullyManagedUpdateExhibitor(id: $id, input: $input) {
|
|
500
|
+
${EXHIBITOR_FIELDS}
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
`;
|
|
504
|
+
var DELETE_EXHIBITOR = `
|
|
505
|
+
mutation EventfullymanagedDeleteExhibitor($id: ID!) {
|
|
506
|
+
eventfullyManagedDeleteExhibitor(id: $id)
|
|
507
|
+
}
|
|
508
|
+
`;
|
|
509
|
+
var LIST_LEADS = `
|
|
510
|
+
query EventfullymanagedListLeads(
|
|
511
|
+
$eventId: ID
|
|
512
|
+
$workspaceId: ID
|
|
513
|
+
$search: String
|
|
514
|
+
$limit: Int
|
|
515
|
+
$offset: Int
|
|
516
|
+
) {
|
|
517
|
+
eventfullyManagedLeads(
|
|
518
|
+
eventId: $eventId
|
|
519
|
+
workspaceId: $workspaceId
|
|
520
|
+
search: $search
|
|
521
|
+
limit: $limit
|
|
522
|
+
offset: $offset
|
|
523
|
+
) {
|
|
524
|
+
items { ${LEAD_FIELDS} }
|
|
525
|
+
total
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
`;
|
|
529
|
+
var CREATE_LEAD = `
|
|
530
|
+
mutation EventfullymanagedCreateLead($input: EventfullyManagedLeadInput!) {
|
|
531
|
+
eventfullyManagedCreateLead(input: $input) {
|
|
532
|
+
${LEAD_FIELDS}
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
`;
|
|
536
|
+
var UPDATE_LEAD = `
|
|
537
|
+
mutation EventfullymanagedUpdateLead($id: ID!, $input: EventfullyManagedLeadInput!) {
|
|
538
|
+
eventfullyManagedUpdateLead(id: $id, input: $input) {
|
|
539
|
+
${LEAD_FIELDS}
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
`;
|
|
543
|
+
var DELETE_LEAD = `
|
|
544
|
+
mutation EventfullymanagedDeleteLead($id: ID!) {
|
|
545
|
+
eventfullyManagedDeleteLead(id: $id)
|
|
546
|
+
}
|
|
547
|
+
`;
|
|
548
|
+
var LIST_CHECK_IN_STATIONS = `
|
|
549
|
+
query EventfullymanagedListCheckInStations(
|
|
550
|
+
$eventId: ID
|
|
551
|
+
$workspaceId: ID
|
|
552
|
+
$limit: Int
|
|
553
|
+
$offset: Int
|
|
554
|
+
) {
|
|
555
|
+
eventfullyManagedCheckInStations(
|
|
556
|
+
eventId: $eventId
|
|
557
|
+
workspaceId: $workspaceId
|
|
558
|
+
limit: $limit
|
|
559
|
+
offset: $offset
|
|
560
|
+
) {
|
|
561
|
+
items { ${SIMPLE_ENTITY_FIELDS} }
|
|
562
|
+
total
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
`;
|
|
566
|
+
var CREATE_CHECK_IN_STATION = `
|
|
567
|
+
mutation EventfullymanagedCreateCheckInStation(
|
|
568
|
+
$input: EventfullyManagedCheckInStationInput!
|
|
569
|
+
) {
|
|
570
|
+
eventfullyManagedCreateCheckInStation(input: $input) {
|
|
571
|
+
${CHECK_IN_STATION_FIELDS}
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
`;
|
|
575
|
+
var UPDATE_CHECK_IN_STATION = `
|
|
576
|
+
mutation EventfullymanagedUpdateCheckInStation(
|
|
577
|
+
$id: ID!
|
|
578
|
+
$input: EventfullyManagedCheckInStationInput!
|
|
579
|
+
) {
|
|
580
|
+
eventfullyManagedUpdateCheckInStation(id: $id, input: $input) {
|
|
581
|
+
${CHECK_IN_STATION_FIELDS}
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
`;
|
|
585
|
+
var DELETE_CHECK_IN_STATION = `
|
|
586
|
+
mutation EventfullymanagedDeleteCheckInStation($id: ID!) {
|
|
587
|
+
eventfullyManagedDeleteCheckInStation(id: $id)
|
|
588
|
+
}
|
|
589
|
+
`;
|
|
590
|
+
var LIST_CHECK_IN_RECORDS = `
|
|
591
|
+
query EventfullymanagedListCheckInRecords(
|
|
592
|
+
$eventId: ID
|
|
593
|
+
$workspaceId: ID
|
|
594
|
+
$limit: Int
|
|
595
|
+
$offset: Int
|
|
596
|
+
) {
|
|
597
|
+
eventfullyManagedCheckInRecords(
|
|
598
|
+
eventId: $eventId
|
|
599
|
+
workspaceId: $workspaceId
|
|
600
|
+
limit: $limit
|
|
601
|
+
offset: $offset
|
|
602
|
+
) {
|
|
603
|
+
items { ${CHECK_IN_RECORD_FIELDS} }
|
|
604
|
+
total
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
`;
|
|
608
|
+
var CREATE_CHECK_IN_RECORD = `
|
|
609
|
+
mutation EventfullymanagedCreateCheckInRecord(
|
|
610
|
+
$input: EventfullyManagedCheckInRecordInput!
|
|
611
|
+
) {
|
|
612
|
+
eventfullyManagedCreateCheckInRecord(input: $input) {
|
|
613
|
+
${CHECK_IN_RECORD_FIELDS}
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
`;
|
|
617
|
+
var UPDATE_CHECK_IN_RECORD = `
|
|
618
|
+
mutation EventfullymanagedUpdateCheckInRecord(
|
|
619
|
+
$id: ID!
|
|
620
|
+
$input: EventfullyManagedCheckInRecordInput!
|
|
621
|
+
) {
|
|
622
|
+
eventfullyManagedUpdateCheckInRecord(id: $id, input: $input) {
|
|
623
|
+
${CHECK_IN_RECORD_FIELDS}
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
`;
|
|
627
|
+
var DELETE_CHECK_IN_RECORD = `
|
|
628
|
+
mutation EventfullymanagedDeleteCheckInRecord($id: ID!) {
|
|
629
|
+
eventfullyManagedDeleteCheckInRecord(id: $id)
|
|
630
|
+
}
|
|
631
|
+
`;
|
|
632
|
+
var LIST_NETWORKING_PROFILES = `
|
|
633
|
+
query EventfullymanagedListNetworkingProfiles(
|
|
634
|
+
$eventId: ID
|
|
635
|
+
$workspaceId: ID
|
|
636
|
+
$limit: Int
|
|
637
|
+
$offset: Int
|
|
638
|
+
) {
|
|
639
|
+
eventfullyManagedNetworkingProfiles(
|
|
640
|
+
eventId: $eventId
|
|
641
|
+
workspaceId: $workspaceId
|
|
642
|
+
limit: $limit
|
|
643
|
+
offset: $offset
|
|
644
|
+
) {
|
|
645
|
+
items { ${NETWORKING_PROFILE_FIELDS} }
|
|
646
|
+
total
|
|
647
|
+
}
|
|
648
|
+
}
|
|
649
|
+
`;
|
|
650
|
+
var CREATE_NETWORKING_PROFILE = `
|
|
651
|
+
mutation EventfullymanagedCreateNetworkingProfile(
|
|
652
|
+
$input: EventfullyManagedNetworkingProfileInput!
|
|
653
|
+
) {
|
|
654
|
+
eventfullyManagedCreateNetworkingProfile(input: $input) {
|
|
655
|
+
${NETWORKING_PROFILE_FIELDS}
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
`;
|
|
659
|
+
var UPDATE_NETWORKING_PROFILE = `
|
|
660
|
+
mutation EventfullymanagedUpdateNetworkingProfile(
|
|
661
|
+
$id: ID!
|
|
662
|
+
$input: EventfullyManagedNetworkingProfileInput!
|
|
663
|
+
) {
|
|
664
|
+
eventfullyManagedUpdateNetworkingProfile(id: $id, input: $input) {
|
|
665
|
+
${NETWORKING_PROFILE_FIELDS}
|
|
666
|
+
}
|
|
667
|
+
}
|
|
668
|
+
`;
|
|
669
|
+
var DELETE_NETWORKING_PROFILE = `
|
|
670
|
+
mutation EventfullymanagedDeleteNetworkingProfile($id: ID!) {
|
|
671
|
+
eventfullyManagedDeleteNetworkingProfile(id: $id)
|
|
672
|
+
}
|
|
673
|
+
`;
|
|
674
|
+
var LIST_NETWORKING_MATCHES = `
|
|
675
|
+
query EventfullymanagedListNetworkingMatches(
|
|
676
|
+
$eventId: ID
|
|
677
|
+
$workspaceId: ID
|
|
678
|
+
$limit: Int
|
|
679
|
+
$offset: Int
|
|
680
|
+
) {
|
|
681
|
+
eventfullyManagedNetworkingMatches(
|
|
682
|
+
eventId: $eventId
|
|
683
|
+
workspaceId: $workspaceId
|
|
684
|
+
limit: $limit
|
|
685
|
+
offset: $offset
|
|
686
|
+
) {
|
|
687
|
+
items { ${SIMPLE_ENTITY_FIELDS} }
|
|
688
|
+
total
|
|
689
|
+
}
|
|
690
|
+
}
|
|
691
|
+
`;
|
|
692
|
+
var CREATE_NETWORKING_MATCH = `
|
|
693
|
+
mutation EventfullymanagedCreateNetworkingMatch(
|
|
694
|
+
$input: EventfullyManagedNetworkingMatchInput!
|
|
695
|
+
) {
|
|
696
|
+
eventfullyManagedCreateNetworkingMatch(input: $input) {
|
|
697
|
+
${NETWORKING_MATCH_FIELDS}
|
|
698
|
+
}
|
|
699
|
+
}
|
|
700
|
+
`;
|
|
701
|
+
var UPDATE_NETWORKING_MATCH = `
|
|
702
|
+
mutation EventfullymanagedUpdateNetworkingMatch(
|
|
703
|
+
$id: ID!
|
|
704
|
+
$input: EventfullyManagedNetworkingMatchInput!
|
|
705
|
+
) {
|
|
706
|
+
eventfullyManagedUpdateNetworkingMatch(id: $id, input: $input) {
|
|
707
|
+
${NETWORKING_MATCH_FIELDS}
|
|
708
|
+
}
|
|
709
|
+
}
|
|
710
|
+
`;
|
|
711
|
+
var DELETE_NETWORKING_MATCH = `
|
|
712
|
+
mutation EventfullymanagedDeleteNetworkingMatch($id: ID!) {
|
|
713
|
+
eventfullyManagedDeleteNetworkingMatch(id: $id)
|
|
714
|
+
}
|
|
715
|
+
`;
|
|
716
|
+
var LIST_MEETINGS = `
|
|
717
|
+
query EventfullymanagedListMeetings(
|
|
718
|
+
$eventId: ID
|
|
719
|
+
$workspaceId: ID
|
|
720
|
+
$limit: Int
|
|
721
|
+
$offset: Int
|
|
722
|
+
) {
|
|
723
|
+
eventfullyManagedMeetings(
|
|
724
|
+
eventId: $eventId
|
|
725
|
+
workspaceId: $workspaceId
|
|
726
|
+
limit: $limit
|
|
727
|
+
offset: $offset
|
|
728
|
+
) {
|
|
729
|
+
items { ${SIMPLE_ENTITY_FIELDS} }
|
|
730
|
+
total
|
|
731
|
+
}
|
|
732
|
+
}
|
|
733
|
+
`;
|
|
734
|
+
var CREATE_MEETING = `
|
|
735
|
+
mutation EventfullymanagedCreateMeeting($input: EventfullyManagedMeetingInput!) {
|
|
736
|
+
eventfullyManagedCreateMeeting(input: $input) {
|
|
737
|
+
${MEETING_FIELDS}
|
|
738
|
+
}
|
|
739
|
+
}
|
|
740
|
+
`;
|
|
741
|
+
var UPDATE_MEETING = `
|
|
742
|
+
mutation EventfullymanagedUpdateMeeting($id: ID!, $input: EventfullyManagedMeetingInput!) {
|
|
743
|
+
eventfullyManagedUpdateMeeting(id: $id, input: $input) {
|
|
744
|
+
${MEETING_FIELDS}
|
|
745
|
+
}
|
|
746
|
+
}
|
|
747
|
+
`;
|
|
748
|
+
var DELETE_MEETING = `
|
|
749
|
+
mutation EventfullymanagedDeleteMeeting($id: ID!) {
|
|
750
|
+
eventfullyManagedDeleteMeeting(id: $id)
|
|
751
|
+
}
|
|
752
|
+
`;
|
|
753
|
+
var LIST_ANNOUNCEMENTS = `
|
|
754
|
+
query EventfullymanagedListAnnouncements(
|
|
755
|
+
$eventId: ID
|
|
756
|
+
$workspaceId: ID
|
|
757
|
+
$limit: Int
|
|
758
|
+
$offset: Int
|
|
759
|
+
) {
|
|
760
|
+
eventfullyManagedAnnouncements(
|
|
761
|
+
eventId: $eventId
|
|
762
|
+
workspaceId: $workspaceId
|
|
763
|
+
limit: $limit
|
|
764
|
+
offset: $offset
|
|
765
|
+
) {
|
|
766
|
+
items { ${SIMPLE_ENTITY_FIELDS} }
|
|
767
|
+
total
|
|
768
|
+
}
|
|
769
|
+
}
|
|
770
|
+
`;
|
|
771
|
+
var UPSERT_ANNOUNCEMENT = `
|
|
772
|
+
mutation EventfullymanagedUpsertAnnouncement(
|
|
773
|
+
$id: ID
|
|
774
|
+
$input: EventfullyManagedSimpleEntityInput!
|
|
775
|
+
) {
|
|
776
|
+
eventfullyManagedUpsertAnnouncement(id: $id, input: $input) {
|
|
777
|
+
${SIMPLE_ENTITY_FIELDS}
|
|
778
|
+
}
|
|
779
|
+
}
|
|
780
|
+
`;
|
|
781
|
+
var LIST_AUTOMATION_RULES = `
|
|
782
|
+
query EventfullymanagedListAutomationRules(
|
|
783
|
+
$eventId: ID
|
|
784
|
+
$workspaceId: ID
|
|
785
|
+
$limit: Int
|
|
786
|
+
$offset: Int
|
|
787
|
+
) {
|
|
788
|
+
eventfullyManagedAutomationRules(
|
|
789
|
+
eventId: $eventId
|
|
790
|
+
workspaceId: $workspaceId
|
|
791
|
+
limit: $limit
|
|
792
|
+
offset: $offset
|
|
793
|
+
) {
|
|
794
|
+
items { ${SIMPLE_ENTITY_FIELDS} }
|
|
795
|
+
total
|
|
796
|
+
}
|
|
797
|
+
}
|
|
798
|
+
`;
|
|
799
|
+
var UPSERT_AUTOMATION_RULE = `
|
|
800
|
+
mutation EventfullymanagedUpsertAutomationRule(
|
|
801
|
+
$id: ID
|
|
802
|
+
$input: EventfullyManagedSimpleEntityInput!
|
|
803
|
+
) {
|
|
804
|
+
eventfullyManagedUpsertAutomationRule(id: $id, input: $input) {
|
|
805
|
+
${SIMPLE_ENTITY_FIELDS}
|
|
806
|
+
}
|
|
807
|
+
}
|
|
808
|
+
`;
|
|
809
|
+
var LIST_COMMUNICATION_CAMPAIGNS = `
|
|
810
|
+
query EventfullymanagedListCommunicationCampaigns(
|
|
811
|
+
$eventId: ID
|
|
812
|
+
$workspaceId: ID
|
|
813
|
+
$limit: Int
|
|
814
|
+
$offset: Int
|
|
815
|
+
) {
|
|
816
|
+
eventfullyManagedCommunicationCampaigns(
|
|
817
|
+
eventId: $eventId
|
|
818
|
+
workspaceId: $workspaceId
|
|
819
|
+
limit: $limit
|
|
820
|
+
offset: $offset
|
|
821
|
+
) {
|
|
822
|
+
items { ${SIMPLE_ENTITY_FIELDS} }
|
|
823
|
+
total
|
|
824
|
+
}
|
|
825
|
+
}
|
|
826
|
+
`;
|
|
827
|
+
var UPSERT_COMMUNICATION_CAMPAIGN = `
|
|
828
|
+
mutation EventfullymanagedUpsertCommunicationCampaign(
|
|
829
|
+
$id: ID
|
|
830
|
+
$input: EventfullyManagedSimpleEntityInput!
|
|
831
|
+
) {
|
|
832
|
+
eventfullyManagedUpsertCommunicationCampaign(id: $id, input: $input) {
|
|
833
|
+
${SIMPLE_ENTITY_FIELDS}
|
|
834
|
+
}
|
|
835
|
+
}
|
|
836
|
+
`;
|
|
837
|
+
var LIST_WORKFLOW_TEMPLATES = `
|
|
838
|
+
query EventfullymanagedListWorkflowTemplates(
|
|
839
|
+
$eventId: ID
|
|
840
|
+
$workspaceId: ID
|
|
841
|
+
$limit: Int
|
|
842
|
+
$offset: Int
|
|
843
|
+
) {
|
|
844
|
+
eventfullyManagedWorkflowTemplates(
|
|
845
|
+
eventId: $eventId
|
|
846
|
+
workspaceId: $workspaceId
|
|
847
|
+
limit: $limit
|
|
848
|
+
offset: $offset
|
|
849
|
+
) {
|
|
850
|
+
items { ${SIMPLE_ENTITY_FIELDS} }
|
|
851
|
+
total
|
|
852
|
+
}
|
|
853
|
+
}
|
|
854
|
+
`;
|
|
855
|
+
var UPSERT_WORKFLOW_TEMPLATE = `
|
|
856
|
+
mutation EventfullymanagedUpsertWorkflowTemplate(
|
|
857
|
+
$id: ID
|
|
858
|
+
$input: EventfullyManagedSimpleEntityInput!
|
|
859
|
+
) {
|
|
860
|
+
eventfullyManagedUpsertWorkflowTemplate(id: $id, input: $input) {
|
|
861
|
+
${SIMPLE_ENTITY_FIELDS}
|
|
862
|
+
}
|
|
863
|
+
}
|
|
864
|
+
`;
|
|
865
|
+
var LIST_ANALYTICS_SNAPSHOTS = `
|
|
866
|
+
query EventfullymanagedListAnalyticsSnapshots(
|
|
867
|
+
$eventId: ID
|
|
868
|
+
$workspaceId: ID
|
|
869
|
+
$limit: Int
|
|
870
|
+
$offset: Int
|
|
871
|
+
) {
|
|
872
|
+
eventfullyManagedAnalyticsSnapshots(
|
|
873
|
+
eventId: $eventId
|
|
874
|
+
workspaceId: $workspaceId
|
|
875
|
+
limit: $limit
|
|
876
|
+
offset: $offset
|
|
877
|
+
) {
|
|
878
|
+
items { ${SIMPLE_ENTITY_FIELDS} }
|
|
879
|
+
total
|
|
880
|
+
}
|
|
881
|
+
}
|
|
882
|
+
`;
|
|
883
|
+
var UPSERT_ANALYTICS_SNAPSHOT = `
|
|
884
|
+
mutation EventfullymanagedUpsertAnalyticsSnapshot(
|
|
885
|
+
$id: ID
|
|
886
|
+
$input: EventfullyManagedSimpleEntityInput!
|
|
887
|
+
) {
|
|
888
|
+
eventfullyManagedUpsertAnalyticsSnapshot(id: $id, input: $input) {
|
|
889
|
+
${SIMPLE_ENTITY_FIELDS}
|
|
890
|
+
}
|
|
891
|
+
}
|
|
892
|
+
`;
|
|
893
|
+
var DASHBOARD_SUMMARY = `
|
|
894
|
+
query EventfullymanagedDashboardSummary($workspaceId: ID) {
|
|
895
|
+
eventfullyManagedDashboardSummary(workspaceId: $workspaceId) {
|
|
896
|
+
${DASHBOARD_SUMMARY_FIELDS}
|
|
897
|
+
}
|
|
898
|
+
}
|
|
899
|
+
`;
|
|
900
|
+
var JsonObject = z.record(z.string(), z.unknown());
|
|
901
|
+
var PaginationShape = {
|
|
902
|
+
workspaceId: z.string().optional().describe("Optional workspace ID filter (defaults to the gateway-bound workspace)"),
|
|
903
|
+
limit: z.number().int().optional().describe("Page size"),
|
|
904
|
+
offset: z.number().int().optional().describe("Pagination offset (default 0)")
|
|
905
|
+
};
|
|
906
|
+
function listVars(args, keys) {
|
|
907
|
+
const out = {};
|
|
908
|
+
for (const k of keys) {
|
|
909
|
+
if (args[k] !== void 0) out[k] = args[k];
|
|
910
|
+
}
|
|
911
|
+
return out;
|
|
912
|
+
}
|
|
913
|
+
function buildInput(args, keys) {
|
|
914
|
+
const input = {};
|
|
915
|
+
for (const k of keys) {
|
|
916
|
+
if (args[k] !== void 0) input[k] = args[k];
|
|
917
|
+
}
|
|
918
|
+
return input;
|
|
919
|
+
}
|
|
920
|
+
|
|
921
|
+
// src/modules/eventfullymanaged/tools/events.ts
|
|
922
|
+
var EVENT_INPUT_KEYS = [
|
|
923
|
+
"name",
|
|
924
|
+
"description",
|
|
925
|
+
"type",
|
|
926
|
+
"status",
|
|
927
|
+
"visibility",
|
|
928
|
+
"timezone",
|
|
929
|
+
"startAt",
|
|
930
|
+
"endAt",
|
|
931
|
+
"capacity",
|
|
932
|
+
"metadata"
|
|
933
|
+
];
|
|
934
|
+
function registerEventTools(server, ctx, track) {
|
|
935
|
+
server.registerTool(
|
|
936
|
+
track(mcpToolName(ctx.productName, "events_list")),
|
|
937
|
+
{
|
|
938
|
+
title: "List Events",
|
|
939
|
+
description: "List events in the bound workspace, optionally filtered by free-text search, with pagination. Returns items + total.",
|
|
940
|
+
inputSchema: {
|
|
941
|
+
search: z.string().optional().describe("Free-text search across event name/description"),
|
|
942
|
+
...PaginationShape
|
|
943
|
+
}
|
|
944
|
+
},
|
|
945
|
+
async (args) => {
|
|
946
|
+
try {
|
|
947
|
+
const data = await ctx.gql.workspace.request(LIST_EVENTS, listVars(args, ["search", "workspaceId", "limit", "offset"]));
|
|
948
|
+
return jsonResult(data.eventfullyManagedEvents);
|
|
949
|
+
} catch (error) {
|
|
950
|
+
ctx.logger.error("eventfullymanaged events_list failed", { error: String(error) });
|
|
951
|
+
return errorResult(
|
|
952
|
+
`Failed to list events: ${error instanceof Error ? error.message : String(error)}`
|
|
953
|
+
);
|
|
954
|
+
}
|
|
955
|
+
}
|
|
956
|
+
);
|
|
957
|
+
server.registerTool(
|
|
958
|
+
track(mcpToolName(ctx.productName, "events_get")),
|
|
959
|
+
{
|
|
960
|
+
title: "Get Event",
|
|
961
|
+
description: "Fetch a single event by ID.",
|
|
962
|
+
inputSchema: { id: z.string().describe("Event ID") }
|
|
963
|
+
},
|
|
964
|
+
async ({ id }) => {
|
|
965
|
+
try {
|
|
966
|
+
const data = await ctx.gql.workspace.request(GET_EVENT, { id });
|
|
967
|
+
if (!data.eventfullyManagedEvent) return errorResult(`Event ${id} not found`);
|
|
968
|
+
return jsonResult(data.eventfullyManagedEvent);
|
|
969
|
+
} catch (error) {
|
|
970
|
+
ctx.logger.error("eventfullymanaged events_get failed", { error: String(error) });
|
|
971
|
+
return errorResult(
|
|
972
|
+
`Failed to get event: ${error instanceof Error ? error.message : String(error)}`
|
|
973
|
+
);
|
|
974
|
+
}
|
|
975
|
+
}
|
|
976
|
+
);
|
|
977
|
+
server.registerTool(
|
|
978
|
+
track(mcpToolName(ctx.productName, "events_create")),
|
|
979
|
+
{
|
|
980
|
+
title: "Create Event",
|
|
981
|
+
description: 'Create an event. `startAt`/`endAt` are ISO-8601 timestamps; `timezone` is an IANA tz (e.g. "Asia/Kolkata"); `type` is e.g. "conference"/"workshop"/"webinar".',
|
|
982
|
+
inputSchema: {
|
|
983
|
+
name: z.string().min(1).describe("Event name"),
|
|
984
|
+
type: z.string().min(1).describe('Event type, e.g. "conference", "workshop", "webinar"'),
|
|
985
|
+
timezone: z.string().min(1).describe('IANA timezone, e.g. "Asia/Kolkata"'),
|
|
986
|
+
startAt: z.string().min(1).describe("Start timestamp (ISO-8601 DateTime)"),
|
|
987
|
+
endAt: z.string().min(1).describe("End timestamp (ISO-8601 DateTime)"),
|
|
988
|
+
description: z.string().optional().describe("Event description"),
|
|
989
|
+
status: z.string().optional().describe('Lifecycle status, e.g. "draft", "published"'),
|
|
990
|
+
visibility: z.string().optional().describe('Visibility, e.g. "public", "private"'),
|
|
991
|
+
capacity: z.number().int().optional().describe("Maximum capacity"),
|
|
992
|
+
metadata: JsonObject.optional().describe("Arbitrary metadata JSON")
|
|
993
|
+
}
|
|
994
|
+
},
|
|
995
|
+
async (args) => {
|
|
996
|
+
try {
|
|
997
|
+
const input = buildInput(args, EVENT_INPUT_KEYS);
|
|
998
|
+
const data = await ctx.gql.workspace.request(CREATE_EVENT, { input });
|
|
999
|
+
return jsonResult(data.eventfullyManagedCreateEvent);
|
|
1000
|
+
} catch (error) {
|
|
1001
|
+
ctx.logger.error("eventfullymanaged events_create failed", { error: String(error) });
|
|
1002
|
+
return errorResult(
|
|
1003
|
+
`Failed to create event: ${error instanceof Error ? error.message : String(error)}`
|
|
1004
|
+
);
|
|
1005
|
+
}
|
|
1006
|
+
}
|
|
1007
|
+
);
|
|
1008
|
+
server.registerTool(
|
|
1009
|
+
track(mcpToolName(ctx.productName, "events_update")),
|
|
1010
|
+
{
|
|
1011
|
+
title: "Update Event",
|
|
1012
|
+
description: "Update an event. The backend reuses the full event input, so the required fields (name, type, timezone, startAt, endAt) must be re-supplied.",
|
|
1013
|
+
inputSchema: {
|
|
1014
|
+
id: z.string().describe("Event ID"),
|
|
1015
|
+
name: z.string().min(1).describe("Event name"),
|
|
1016
|
+
type: z.string().min(1).describe("Event type"),
|
|
1017
|
+
timezone: z.string().min(1).describe("IANA timezone"),
|
|
1018
|
+
startAt: z.string().min(1).describe("Start timestamp (ISO-8601 DateTime)"),
|
|
1019
|
+
endAt: z.string().min(1).describe("End timestamp (ISO-8601 DateTime)"),
|
|
1020
|
+
description: z.string().optional().describe("Event description"),
|
|
1021
|
+
status: z.string().optional().describe("Lifecycle status"),
|
|
1022
|
+
visibility: z.string().optional().describe("Visibility"),
|
|
1023
|
+
capacity: z.number().int().optional().describe("Maximum capacity"),
|
|
1024
|
+
metadata: JsonObject.optional().describe("Arbitrary metadata JSON")
|
|
1025
|
+
}
|
|
1026
|
+
},
|
|
1027
|
+
async ({ id, ...rest }) => {
|
|
1028
|
+
try {
|
|
1029
|
+
const input = buildInput(rest, EVENT_INPUT_KEYS);
|
|
1030
|
+
const data = await ctx.gql.workspace.request(UPDATE_EVENT, { id, input });
|
|
1031
|
+
return jsonResult(data.eventfullyManagedUpdateEvent);
|
|
1032
|
+
} catch (error) {
|
|
1033
|
+
ctx.logger.error("eventfullymanaged events_update failed", { error: String(error) });
|
|
1034
|
+
return errorResult(
|
|
1035
|
+
`Failed to update event: ${error instanceof Error ? error.message : String(error)}`
|
|
1036
|
+
);
|
|
1037
|
+
}
|
|
1038
|
+
}
|
|
1039
|
+
);
|
|
1040
|
+
server.registerTool(
|
|
1041
|
+
track(mcpToolName(ctx.productName, "events_delete")),
|
|
1042
|
+
{
|
|
1043
|
+
title: "Delete Event",
|
|
1044
|
+
description: "Delete an event by ID. Returns true on success.",
|
|
1045
|
+
inputSchema: { id: z.string().describe("Event ID") }
|
|
1046
|
+
},
|
|
1047
|
+
async ({ id }) => {
|
|
1048
|
+
try {
|
|
1049
|
+
const data = await ctx.gql.workspace.request(
|
|
1050
|
+
DELETE_EVENT,
|
|
1051
|
+
{ id }
|
|
1052
|
+
);
|
|
1053
|
+
return jsonResult({ deleted: data.eventfullyManagedDeleteEvent, id });
|
|
1054
|
+
} catch (error) {
|
|
1055
|
+
ctx.logger.error("eventfullymanaged events_delete failed", { error: String(error) });
|
|
1056
|
+
return errorResult(
|
|
1057
|
+
`Failed to delete event: ${error instanceof Error ? error.message : String(error)}`
|
|
1058
|
+
);
|
|
1059
|
+
}
|
|
1060
|
+
}
|
|
1061
|
+
);
|
|
1062
|
+
}
|
|
1063
|
+
var VENUE_INPUT_KEYS = [
|
|
1064
|
+
"name",
|
|
1065
|
+
"description",
|
|
1066
|
+
"addressLine1",
|
|
1067
|
+
"city",
|
|
1068
|
+
"state",
|
|
1069
|
+
"country",
|
|
1070
|
+
"postalCode",
|
|
1071
|
+
"capacity",
|
|
1072
|
+
"amenities",
|
|
1073
|
+
"status",
|
|
1074
|
+
"openingHours",
|
|
1075
|
+
"pricing",
|
|
1076
|
+
"metadata"
|
|
1077
|
+
];
|
|
1078
|
+
var FLOOR_PLAN_INPUT_KEYS = [
|
|
1079
|
+
"name",
|
|
1080
|
+
"venueId",
|
|
1081
|
+
"imageUrl",
|
|
1082
|
+
"dimensions",
|
|
1083
|
+
"interactiveAreas"
|
|
1084
|
+
];
|
|
1085
|
+
function registerVenueTools(server, ctx, track) {
|
|
1086
|
+
server.registerTool(
|
|
1087
|
+
track(mcpToolName(ctx.productName, "venues_list")),
|
|
1088
|
+
{
|
|
1089
|
+
title: "List Venues",
|
|
1090
|
+
description: "List venues, optionally filtered by free-text search, with pagination.",
|
|
1091
|
+
inputSchema: {
|
|
1092
|
+
search: z.string().optional().describe("Free-text search across venue name/address"),
|
|
1093
|
+
...PaginationShape
|
|
1094
|
+
}
|
|
1095
|
+
},
|
|
1096
|
+
async (args) => {
|
|
1097
|
+
try {
|
|
1098
|
+
const data = await ctx.gql.workspace.request(LIST_VENUES, listVars(args, ["search", "workspaceId", "limit", "offset"]));
|
|
1099
|
+
return jsonResult(data.eventfullyManagedVenues);
|
|
1100
|
+
} catch (error) {
|
|
1101
|
+
ctx.logger.error("eventfullymanaged venues_list failed", { error: String(error) });
|
|
1102
|
+
return errorResult(
|
|
1103
|
+
`Failed to list venues: ${error instanceof Error ? error.message : String(error)}`
|
|
1104
|
+
);
|
|
1105
|
+
}
|
|
1106
|
+
}
|
|
1107
|
+
);
|
|
1108
|
+
server.registerTool(
|
|
1109
|
+
track(mcpToolName(ctx.productName, "venues_get")),
|
|
1110
|
+
{
|
|
1111
|
+
title: "Get Venue",
|
|
1112
|
+
description: "Fetch a single venue by ID.",
|
|
1113
|
+
inputSchema: { id: z.string().describe("Venue ID") }
|
|
1114
|
+
},
|
|
1115
|
+
async ({ id }) => {
|
|
1116
|
+
try {
|
|
1117
|
+
const data = await ctx.gql.workspace.request(GET_VENUE, { id });
|
|
1118
|
+
if (!data.eventfullyManagedVenue) return errorResult(`Venue ${id} not found`);
|
|
1119
|
+
return jsonResult(data.eventfullyManagedVenue);
|
|
1120
|
+
} catch (error) {
|
|
1121
|
+
ctx.logger.error("eventfullymanaged venues_get failed", { error: String(error) });
|
|
1122
|
+
return errorResult(
|
|
1123
|
+
`Failed to get venue: ${error instanceof Error ? error.message : String(error)}`
|
|
1124
|
+
);
|
|
1125
|
+
}
|
|
1126
|
+
}
|
|
1127
|
+
);
|
|
1128
|
+
server.registerTool(
|
|
1129
|
+
track(mcpToolName(ctx.productName, "venues_create")),
|
|
1130
|
+
{
|
|
1131
|
+
title: "Create Venue",
|
|
1132
|
+
description: "Create a venue. Only `name` is required; address/capacity/JSON fields are optional.",
|
|
1133
|
+
inputSchema: {
|
|
1134
|
+
name: z.string().min(1).describe("Venue name"),
|
|
1135
|
+
description: z.string().optional().describe("Venue description"),
|
|
1136
|
+
addressLine1: z.string().optional().describe("Street address"),
|
|
1137
|
+
city: z.string().optional().describe("City"),
|
|
1138
|
+
state: z.string().optional().describe("State/region"),
|
|
1139
|
+
country: z.string().optional().describe("Country"),
|
|
1140
|
+
postalCode: z.string().optional().describe("Postal code"),
|
|
1141
|
+
capacity: z.number().int().optional().describe("Maximum capacity"),
|
|
1142
|
+
amenities: z.array(z.string()).optional().describe("Amenity tags"),
|
|
1143
|
+
status: z.string().optional().describe('Status, e.g. "active", "inactive"'),
|
|
1144
|
+
openingHours: JsonObject.optional().describe("Opening-hours JSON"),
|
|
1145
|
+
pricing: JsonObject.optional().describe("Pricing JSON"),
|
|
1146
|
+
metadata: JsonObject.optional().describe("Arbitrary metadata JSON")
|
|
1147
|
+
}
|
|
1148
|
+
},
|
|
1149
|
+
async (args) => {
|
|
1150
|
+
try {
|
|
1151
|
+
const input = buildInput(args, VENUE_INPUT_KEYS);
|
|
1152
|
+
const data = await ctx.gql.workspace.request(CREATE_VENUE, { input });
|
|
1153
|
+
return jsonResult(data.eventfullyManagedCreateVenue);
|
|
1154
|
+
} catch (error) {
|
|
1155
|
+
ctx.logger.error("eventfullymanaged venues_create failed", { error: String(error) });
|
|
1156
|
+
return errorResult(
|
|
1157
|
+
`Failed to create venue: ${error instanceof Error ? error.message : String(error)}`
|
|
1158
|
+
);
|
|
1159
|
+
}
|
|
1160
|
+
}
|
|
1161
|
+
);
|
|
1162
|
+
server.registerTool(
|
|
1163
|
+
track(mcpToolName(ctx.productName, "venues_update")),
|
|
1164
|
+
{
|
|
1165
|
+
title: "Update Venue",
|
|
1166
|
+
description: "Update a venue. `name` is required by the backend input; other fields are optional.",
|
|
1167
|
+
inputSchema: {
|
|
1168
|
+
id: z.string().describe("Venue ID"),
|
|
1169
|
+
name: z.string().min(1).describe("Venue name"),
|
|
1170
|
+
description: z.string().optional().describe("Venue description"),
|
|
1171
|
+
addressLine1: z.string().optional().describe("Street address"),
|
|
1172
|
+
city: z.string().optional().describe("City"),
|
|
1173
|
+
state: z.string().optional().describe("State/region"),
|
|
1174
|
+
country: z.string().optional().describe("Country"),
|
|
1175
|
+
postalCode: z.string().optional().describe("Postal code"),
|
|
1176
|
+
capacity: z.number().int().optional().describe("Maximum capacity"),
|
|
1177
|
+
amenities: z.array(z.string()).optional().describe("Amenity tags"),
|
|
1178
|
+
status: z.string().optional().describe("Status"),
|
|
1179
|
+
openingHours: JsonObject.optional().describe("Opening-hours JSON"),
|
|
1180
|
+
pricing: JsonObject.optional().describe("Pricing JSON"),
|
|
1181
|
+
metadata: JsonObject.optional().describe("Arbitrary metadata JSON")
|
|
1182
|
+
}
|
|
1183
|
+
},
|
|
1184
|
+
async ({ id, ...rest }) => {
|
|
1185
|
+
try {
|
|
1186
|
+
const input = buildInput(rest, VENUE_INPUT_KEYS);
|
|
1187
|
+
const data = await ctx.gql.workspace.request(UPDATE_VENUE, { id, input });
|
|
1188
|
+
return jsonResult(data.eventfullyManagedUpdateVenue);
|
|
1189
|
+
} catch (error) {
|
|
1190
|
+
ctx.logger.error("eventfullymanaged venues_update failed", { error: String(error) });
|
|
1191
|
+
return errorResult(
|
|
1192
|
+
`Failed to update venue: ${error instanceof Error ? error.message : String(error)}`
|
|
1193
|
+
);
|
|
1194
|
+
}
|
|
1195
|
+
}
|
|
1196
|
+
);
|
|
1197
|
+
server.registerTool(
|
|
1198
|
+
track(mcpToolName(ctx.productName, "venues_delete")),
|
|
1199
|
+
{
|
|
1200
|
+
title: "Delete Venue",
|
|
1201
|
+
description: "Delete a venue by ID. Returns true on success.",
|
|
1202
|
+
inputSchema: { id: z.string().describe("Venue ID") }
|
|
1203
|
+
},
|
|
1204
|
+
async ({ id }) => {
|
|
1205
|
+
try {
|
|
1206
|
+
const data = await ctx.gql.workspace.request(
|
|
1207
|
+
DELETE_VENUE,
|
|
1208
|
+
{ id }
|
|
1209
|
+
);
|
|
1210
|
+
return jsonResult({ deleted: data.eventfullyManagedDeleteVenue, id });
|
|
1211
|
+
} catch (error) {
|
|
1212
|
+
ctx.logger.error("eventfullymanaged venues_delete failed", { error: String(error) });
|
|
1213
|
+
return errorResult(
|
|
1214
|
+
`Failed to delete venue: ${error instanceof Error ? error.message : String(error)}`
|
|
1215
|
+
);
|
|
1216
|
+
}
|
|
1217
|
+
}
|
|
1218
|
+
);
|
|
1219
|
+
server.registerTool(
|
|
1220
|
+
track(mcpToolName(ctx.productName, "floor_plans_list")),
|
|
1221
|
+
{
|
|
1222
|
+
title: "List Floor Plans",
|
|
1223
|
+
description: "List floor plans, optionally filtered by venue, with pagination.",
|
|
1224
|
+
inputSchema: {
|
|
1225
|
+
venueId: z.string().optional().describe("Filter by venue ID"),
|
|
1226
|
+
...PaginationShape
|
|
1227
|
+
}
|
|
1228
|
+
},
|
|
1229
|
+
async (args) => {
|
|
1230
|
+
try {
|
|
1231
|
+
const data = await ctx.gql.workspace.request(LIST_FLOOR_PLANS, listVars(args, ["venueId", "workspaceId", "limit", "offset"]));
|
|
1232
|
+
return jsonResult(data.eventfullyManagedFloorPlans);
|
|
1233
|
+
} catch (error) {
|
|
1234
|
+
ctx.logger.error("eventfullymanaged floor_plans_list failed", { error: String(error) });
|
|
1235
|
+
return errorResult(
|
|
1236
|
+
`Failed to list floor plans: ${error instanceof Error ? error.message : String(error)}`
|
|
1237
|
+
);
|
|
1238
|
+
}
|
|
1239
|
+
}
|
|
1240
|
+
);
|
|
1241
|
+
server.registerTool(
|
|
1242
|
+
track(mcpToolName(ctx.productName, "floor_plans_create")),
|
|
1243
|
+
{
|
|
1244
|
+
title: "Create Floor Plan",
|
|
1245
|
+
description: "Create a floor plan for a venue. `dimensions` and `interactiveAreas` are JSON describing the layout.",
|
|
1246
|
+
inputSchema: {
|
|
1247
|
+
name: z.string().min(1).describe("Floor-plan name"),
|
|
1248
|
+
venueId: z.string().min(1).describe("Owning venue ID"),
|
|
1249
|
+
imageUrl: z.string().optional().describe("Background image URL"),
|
|
1250
|
+
dimensions: JsonObject.optional().describe("Dimensions JSON ({ width, height, ... })"),
|
|
1251
|
+
interactiveAreas: z.union([JsonObject, z.array(z.unknown())]).optional().describe("Interactive-areas JSON (clickable booths/zones)")
|
|
1252
|
+
}
|
|
1253
|
+
},
|
|
1254
|
+
async (args) => {
|
|
1255
|
+
try {
|
|
1256
|
+
const input = buildInput(args, FLOOR_PLAN_INPUT_KEYS);
|
|
1257
|
+
const data = await ctx.gql.workspace.request(CREATE_FLOOR_PLAN, { input });
|
|
1258
|
+
return jsonResult(data.eventfullyManagedCreateFloorPlan);
|
|
1259
|
+
} catch (error) {
|
|
1260
|
+
ctx.logger.error("eventfullymanaged floor_plans_create failed", { error: String(error) });
|
|
1261
|
+
return errorResult(
|
|
1262
|
+
`Failed to create floor plan: ${error instanceof Error ? error.message : String(error)}`
|
|
1263
|
+
);
|
|
1264
|
+
}
|
|
1265
|
+
}
|
|
1266
|
+
);
|
|
1267
|
+
server.registerTool(
|
|
1268
|
+
track(mcpToolName(ctx.productName, "floor_plans_update")),
|
|
1269
|
+
{
|
|
1270
|
+
title: "Update Floor Plan",
|
|
1271
|
+
description: "Update a floor plan. `name` and `venueId` are required by the backend input.",
|
|
1272
|
+
inputSchema: {
|
|
1273
|
+
id: z.string().describe("Floor-plan ID"),
|
|
1274
|
+
name: z.string().min(1).describe("Floor-plan name"),
|
|
1275
|
+
venueId: z.string().min(1).describe("Owning venue ID"),
|
|
1276
|
+
imageUrl: z.string().optional().describe("Background image URL"),
|
|
1277
|
+
dimensions: JsonObject.optional().describe("Dimensions JSON"),
|
|
1278
|
+
interactiveAreas: z.union([JsonObject, z.array(z.unknown())]).optional().describe("Interactive-areas JSON")
|
|
1279
|
+
}
|
|
1280
|
+
},
|
|
1281
|
+
async ({ id, ...rest }) => {
|
|
1282
|
+
try {
|
|
1283
|
+
const input = buildInput(rest, FLOOR_PLAN_INPUT_KEYS);
|
|
1284
|
+
const data = await ctx.gql.workspace.request(UPDATE_FLOOR_PLAN, { id, input });
|
|
1285
|
+
return jsonResult(data.eventfullyManagedUpdateFloorPlan);
|
|
1286
|
+
} catch (error) {
|
|
1287
|
+
ctx.logger.error("eventfullymanaged floor_plans_update failed", { error: String(error) });
|
|
1288
|
+
return errorResult(
|
|
1289
|
+
`Failed to update floor plan: ${error instanceof Error ? error.message : String(error)}`
|
|
1290
|
+
);
|
|
1291
|
+
}
|
|
1292
|
+
}
|
|
1293
|
+
);
|
|
1294
|
+
}
|
|
1295
|
+
var SESSION_INPUT_KEYS = [
|
|
1296
|
+
"eventId",
|
|
1297
|
+
"title",
|
|
1298
|
+
"description",
|
|
1299
|
+
"sessionType",
|
|
1300
|
+
"track",
|
|
1301
|
+
"status",
|
|
1302
|
+
"startsAt",
|
|
1303
|
+
"endsAt",
|
|
1304
|
+
"capacity",
|
|
1305
|
+
"venueId",
|
|
1306
|
+
"metadata"
|
|
1307
|
+
];
|
|
1308
|
+
var SPEAKER_INPUT_KEYS = [
|
|
1309
|
+
"fullName",
|
|
1310
|
+
"title",
|
|
1311
|
+
"organization",
|
|
1312
|
+
"bio",
|
|
1313
|
+
"email",
|
|
1314
|
+
"phone",
|
|
1315
|
+
"avatarUrl",
|
|
1316
|
+
"socialLinks"
|
|
1317
|
+
];
|
|
1318
|
+
function registerAgendaTools(server, ctx, track) {
|
|
1319
|
+
server.registerTool(
|
|
1320
|
+
track(mcpToolName(ctx.productName, "sessions_list")),
|
|
1321
|
+
{
|
|
1322
|
+
title: "List Agenda Sessions",
|
|
1323
|
+
description: "List agenda/program sessions, optionally filtered by event, with pagination. Returns items + total.",
|
|
1324
|
+
inputSchema: {
|
|
1325
|
+
eventId: z.string().optional().describe("Filter by event ID"),
|
|
1326
|
+
...PaginationShape
|
|
1327
|
+
}
|
|
1328
|
+
},
|
|
1329
|
+
async (args) => {
|
|
1330
|
+
try {
|
|
1331
|
+
const data = await ctx.gql.workspace.request(LIST_EVENT_SESSIONS, listVars(args, ["eventId", "workspaceId", "limit", "offset"]));
|
|
1332
|
+
return jsonResult(data.eventfullyManagedEventSessions);
|
|
1333
|
+
} catch (error) {
|
|
1334
|
+
ctx.logger.error("eventfullymanaged sessions_list failed", { error: String(error) });
|
|
1335
|
+
return errorResult(
|
|
1336
|
+
`Failed to list agenda sessions: ${error instanceof Error ? error.message : String(error)}`
|
|
1337
|
+
);
|
|
1338
|
+
}
|
|
1339
|
+
}
|
|
1340
|
+
);
|
|
1341
|
+
server.registerTool(
|
|
1342
|
+
track(mcpToolName(ctx.productName, "sessions_create")),
|
|
1343
|
+
{
|
|
1344
|
+
title: "Create Agenda Session",
|
|
1345
|
+
description: 'Create an agenda session for an event. `sessionType` is e.g. "keynote"/"talk"/"panel"/"break".',
|
|
1346
|
+
inputSchema: {
|
|
1347
|
+
eventId: z.string().min(1).describe("Owning event ID"),
|
|
1348
|
+
title: z.string().min(1).describe("Session title"),
|
|
1349
|
+
sessionType: z.string().min(1).describe('Session type, e.g. "keynote", "talk", "panel"'),
|
|
1350
|
+
startsAt: z.string().min(1).describe("Start timestamp (ISO-8601 DateTime)"),
|
|
1351
|
+
endsAt: z.string().min(1).describe("End timestamp (ISO-8601 DateTime)"),
|
|
1352
|
+
description: z.string().optional().describe("Session description"),
|
|
1353
|
+
track: z.string().optional().describe("Agenda track/room"),
|
|
1354
|
+
status: z.string().optional().describe('Status, e.g. "scheduled", "cancelled"'),
|
|
1355
|
+
capacity: z.number().int().optional().describe("Session capacity"),
|
|
1356
|
+
venueId: z.string().optional().describe("Venue/room ID"),
|
|
1357
|
+
metadata: JsonObject.optional().describe("Arbitrary metadata JSON")
|
|
1358
|
+
}
|
|
1359
|
+
},
|
|
1360
|
+
async (args) => {
|
|
1361
|
+
try {
|
|
1362
|
+
const input = buildInput(args, SESSION_INPUT_KEYS);
|
|
1363
|
+
const data = await ctx.gql.workspace.request(CREATE_EVENT_SESSION, { input });
|
|
1364
|
+
return jsonResult(data.eventfullyManagedCreateEventSession);
|
|
1365
|
+
} catch (error) {
|
|
1366
|
+
ctx.logger.error("eventfullymanaged sessions_create failed", { error: String(error) });
|
|
1367
|
+
return errorResult(
|
|
1368
|
+
`Failed to create agenda session: ${error instanceof Error ? error.message : String(error)}`
|
|
1369
|
+
);
|
|
1370
|
+
}
|
|
1371
|
+
}
|
|
1372
|
+
);
|
|
1373
|
+
server.registerTool(
|
|
1374
|
+
track(mcpToolName(ctx.productName, "sessions_update")),
|
|
1375
|
+
{
|
|
1376
|
+
title: "Update Agenda Session",
|
|
1377
|
+
description: "Update an agenda session. The backend reuses the full session input, so `eventId`, `title`, `sessionType`, `startsAt`, `endsAt` must be re-supplied.",
|
|
1378
|
+
inputSchema: {
|
|
1379
|
+
id: z.string().describe("Agenda session ID"),
|
|
1380
|
+
eventId: z.string().min(1).describe("Owning event ID"),
|
|
1381
|
+
title: z.string().min(1).describe("Session title"),
|
|
1382
|
+
sessionType: z.string().min(1).describe("Session type"),
|
|
1383
|
+
startsAt: z.string().min(1).describe("Start timestamp (ISO-8601 DateTime)"),
|
|
1384
|
+
endsAt: z.string().min(1).describe("End timestamp (ISO-8601 DateTime)"),
|
|
1385
|
+
description: z.string().optional().describe("Session description"),
|
|
1386
|
+
track: z.string().optional().describe("Agenda track/room"),
|
|
1387
|
+
status: z.string().optional().describe("Status"),
|
|
1388
|
+
capacity: z.number().int().optional().describe("Session capacity"),
|
|
1389
|
+
venueId: z.string().optional().describe("Venue/room ID"),
|
|
1390
|
+
metadata: JsonObject.optional().describe("Arbitrary metadata JSON")
|
|
1391
|
+
}
|
|
1392
|
+
},
|
|
1393
|
+
async ({ id, ...rest }) => {
|
|
1394
|
+
try {
|
|
1395
|
+
const input = buildInput(rest, SESSION_INPUT_KEYS);
|
|
1396
|
+
const data = await ctx.gql.workspace.request(UPDATE_EVENT_SESSION, { id, input });
|
|
1397
|
+
return jsonResult(data.eventfullyManagedUpdateEventSession);
|
|
1398
|
+
} catch (error) {
|
|
1399
|
+
ctx.logger.error("eventfullymanaged sessions_update failed", { error: String(error) });
|
|
1400
|
+
return errorResult(
|
|
1401
|
+
`Failed to update agenda session: ${error instanceof Error ? error.message : String(error)}`
|
|
1402
|
+
);
|
|
1403
|
+
}
|
|
1404
|
+
}
|
|
1405
|
+
);
|
|
1406
|
+
server.registerTool(
|
|
1407
|
+
track(mcpToolName(ctx.productName, "speakers_list")),
|
|
1408
|
+
{
|
|
1409
|
+
title: "List Speakers",
|
|
1410
|
+
description: "List speakers in the workspace, with pagination. Returns items + total.",
|
|
1411
|
+
inputSchema: { ...PaginationShape }
|
|
1412
|
+
},
|
|
1413
|
+
async (args) => {
|
|
1414
|
+
try {
|
|
1415
|
+
const data = await ctx.gql.workspace.request(LIST_SPEAKERS, listVars(args, ["workspaceId", "limit", "offset"]));
|
|
1416
|
+
return jsonResult(data.eventfullyManagedSpeakers);
|
|
1417
|
+
} catch (error) {
|
|
1418
|
+
ctx.logger.error("eventfullymanaged speakers_list failed", { error: String(error) });
|
|
1419
|
+
return errorResult(
|
|
1420
|
+
`Failed to list speakers: ${error instanceof Error ? error.message : String(error)}`
|
|
1421
|
+
);
|
|
1422
|
+
}
|
|
1423
|
+
}
|
|
1424
|
+
);
|
|
1425
|
+
server.registerTool(
|
|
1426
|
+
track(mcpToolName(ctx.productName, "speakers_create")),
|
|
1427
|
+
{
|
|
1428
|
+
title: "Create Speaker",
|
|
1429
|
+
description: "Create a speaker profile. Only `fullName` is required.",
|
|
1430
|
+
inputSchema: {
|
|
1431
|
+
fullName: z.string().min(1).describe("Speaker full name"),
|
|
1432
|
+
title: z.string().optional().describe("Job title"),
|
|
1433
|
+
organization: z.string().optional().describe("Organization/company"),
|
|
1434
|
+
bio: z.string().optional().describe("Speaker bio"),
|
|
1435
|
+
email: z.string().optional().describe("Contact email"),
|
|
1436
|
+
phone: z.string().optional().describe("Contact phone"),
|
|
1437
|
+
avatarUrl: z.string().optional().describe("Avatar image URL"),
|
|
1438
|
+
socialLinks: JsonObject.optional().describe(
|
|
1439
|
+
"Social links JSON ({ twitter, linkedin, ... })"
|
|
1440
|
+
)
|
|
1441
|
+
}
|
|
1442
|
+
},
|
|
1443
|
+
async (args) => {
|
|
1444
|
+
try {
|
|
1445
|
+
const input = buildInput(args, SPEAKER_INPUT_KEYS);
|
|
1446
|
+
const data = await ctx.gql.workspace.request(CREATE_SPEAKER, { input });
|
|
1447
|
+
return jsonResult(data.eventfullyManagedCreateSpeaker);
|
|
1448
|
+
} catch (error) {
|
|
1449
|
+
ctx.logger.error("eventfullymanaged speakers_create failed", { error: String(error) });
|
|
1450
|
+
return errorResult(
|
|
1451
|
+
`Failed to create speaker: ${error instanceof Error ? error.message : String(error)}`
|
|
1452
|
+
);
|
|
1453
|
+
}
|
|
1454
|
+
}
|
|
1455
|
+
);
|
|
1456
|
+
server.registerTool(
|
|
1457
|
+
track(mcpToolName(ctx.productName, "speakers_update")),
|
|
1458
|
+
{
|
|
1459
|
+
title: "Update Speaker",
|
|
1460
|
+
description: "Update a speaker profile. `fullName` is required by the backend input.",
|
|
1461
|
+
inputSchema: {
|
|
1462
|
+
id: z.string().describe("Speaker ID"),
|
|
1463
|
+
fullName: z.string().min(1).describe("Speaker full name"),
|
|
1464
|
+
title: z.string().optional().describe("Job title"),
|
|
1465
|
+
organization: z.string().optional().describe("Organization/company"),
|
|
1466
|
+
bio: z.string().optional().describe("Speaker bio"),
|
|
1467
|
+
email: z.string().optional().describe("Contact email"),
|
|
1468
|
+
phone: z.string().optional().describe("Contact phone"),
|
|
1469
|
+
avatarUrl: z.string().optional().describe("Avatar image URL"),
|
|
1470
|
+
socialLinks: JsonObject.optional().describe("Social links JSON")
|
|
1471
|
+
}
|
|
1472
|
+
},
|
|
1473
|
+
async ({ id, ...rest }) => {
|
|
1474
|
+
try {
|
|
1475
|
+
const input = buildInput(rest, SPEAKER_INPUT_KEYS);
|
|
1476
|
+
const data = await ctx.gql.workspace.request(UPDATE_SPEAKER, { id, input });
|
|
1477
|
+
return jsonResult(data.eventfullyManagedUpdateSpeaker);
|
|
1478
|
+
} catch (error) {
|
|
1479
|
+
ctx.logger.error("eventfullymanaged speakers_update failed", { error: String(error) });
|
|
1480
|
+
return errorResult(
|
|
1481
|
+
`Failed to update speaker: ${error instanceof Error ? error.message : String(error)}`
|
|
1482
|
+
);
|
|
1483
|
+
}
|
|
1484
|
+
}
|
|
1485
|
+
);
|
|
1486
|
+
}
|
|
1487
|
+
var ATTENDEE_INPUT_KEYS = [
|
|
1488
|
+
"eventId",
|
|
1489
|
+
"fullName",
|
|
1490
|
+
"email",
|
|
1491
|
+
"phone",
|
|
1492
|
+
"company",
|
|
1493
|
+
"role",
|
|
1494
|
+
"tags",
|
|
1495
|
+
"profile",
|
|
1496
|
+
"metadata"
|
|
1497
|
+
];
|
|
1498
|
+
var REGISTRATION_INPUT_KEYS = [
|
|
1499
|
+
"eventId",
|
|
1500
|
+
"attendeeId",
|
|
1501
|
+
"ticketTypeId",
|
|
1502
|
+
"status",
|
|
1503
|
+
"quantity",
|
|
1504
|
+
"totalAmount",
|
|
1505
|
+
"currency",
|
|
1506
|
+
"metadata"
|
|
1507
|
+
];
|
|
1508
|
+
function registerAttendeeTools(server, ctx, track) {
|
|
1509
|
+
server.registerTool(
|
|
1510
|
+
track(mcpToolName(ctx.productName, "attendees_list")),
|
|
1511
|
+
{
|
|
1512
|
+
title: "List Attendees",
|
|
1513
|
+
description: "List attendees, optionally filtered by event, with pagination. Returns items + total.",
|
|
1514
|
+
inputSchema: {
|
|
1515
|
+
eventId: z.string().optional().describe("Filter by event ID"),
|
|
1516
|
+
...PaginationShape
|
|
1517
|
+
}
|
|
1518
|
+
},
|
|
1519
|
+
async (args) => {
|
|
1520
|
+
try {
|
|
1521
|
+
const data = await ctx.gql.workspace.request(LIST_ATTENDEES, listVars(args, ["eventId", "workspaceId", "limit", "offset"]));
|
|
1522
|
+
return jsonResult(data.eventfullyManagedAttendees);
|
|
1523
|
+
} catch (error) {
|
|
1524
|
+
ctx.logger.error("eventfullymanaged attendees_list failed", { error: String(error) });
|
|
1525
|
+
return errorResult(
|
|
1526
|
+
`Failed to list attendees: ${error instanceof Error ? error.message : String(error)}`
|
|
1527
|
+
);
|
|
1528
|
+
}
|
|
1529
|
+
}
|
|
1530
|
+
);
|
|
1531
|
+
server.registerTool(
|
|
1532
|
+
track(mcpToolName(ctx.productName, "attendees_create")),
|
|
1533
|
+
{
|
|
1534
|
+
title: "Create Attendee",
|
|
1535
|
+
description: "Register an attendee record for an event. `eventId`, `fullName`, `email` are required.",
|
|
1536
|
+
inputSchema: {
|
|
1537
|
+
eventId: z.string().min(1).describe("Owning event ID"),
|
|
1538
|
+
fullName: z.string().min(1).describe("Attendee full name"),
|
|
1539
|
+
email: z.string().min(1).describe("Attendee email"),
|
|
1540
|
+
phone: z.string().optional().describe("Contact phone"),
|
|
1541
|
+
company: z.string().optional().describe("Company/organization"),
|
|
1542
|
+
role: z.string().optional().describe("Role/job title"),
|
|
1543
|
+
tags: z.array(z.string()).optional().describe("Attendee tags"),
|
|
1544
|
+
profile: JsonObject.optional().describe("Extended profile JSON"),
|
|
1545
|
+
metadata: JsonObject.optional().describe("Arbitrary metadata JSON")
|
|
1546
|
+
}
|
|
1547
|
+
},
|
|
1548
|
+
async (args) => {
|
|
1549
|
+
try {
|
|
1550
|
+
const input = buildInput(args, ATTENDEE_INPUT_KEYS);
|
|
1551
|
+
const data = await ctx.gql.workspace.request(CREATE_ATTENDEE, { input });
|
|
1552
|
+
return jsonResult(data.eventfullyManagedCreateAttendee);
|
|
1553
|
+
} catch (error) {
|
|
1554
|
+
ctx.logger.error("eventfullymanaged attendees_create failed", { error: String(error) });
|
|
1555
|
+
return errorResult(
|
|
1556
|
+
`Failed to create attendee: ${error instanceof Error ? error.message : String(error)}`
|
|
1557
|
+
);
|
|
1558
|
+
}
|
|
1559
|
+
}
|
|
1560
|
+
);
|
|
1561
|
+
server.registerTool(
|
|
1562
|
+
track(mcpToolName(ctx.productName, "attendees_update")),
|
|
1563
|
+
{
|
|
1564
|
+
title: "Update Attendee",
|
|
1565
|
+
description: "Update an attendee. `eventId`, `fullName`, `email` are required by the backend input.",
|
|
1566
|
+
inputSchema: {
|
|
1567
|
+
id: z.string().describe("Attendee ID"),
|
|
1568
|
+
eventId: z.string().min(1).describe("Owning event ID"),
|
|
1569
|
+
fullName: z.string().min(1).describe("Attendee full name"),
|
|
1570
|
+
email: z.string().min(1).describe("Attendee email"),
|
|
1571
|
+
phone: z.string().optional().describe("Contact phone"),
|
|
1572
|
+
company: z.string().optional().describe("Company/organization"),
|
|
1573
|
+
role: z.string().optional().describe("Role/job title"),
|
|
1574
|
+
tags: z.array(z.string()).optional().describe("Attendee tags"),
|
|
1575
|
+
profile: JsonObject.optional().describe("Extended profile JSON"),
|
|
1576
|
+
metadata: JsonObject.optional().describe("Arbitrary metadata JSON")
|
|
1577
|
+
}
|
|
1578
|
+
},
|
|
1579
|
+
async ({ id, ...rest }) => {
|
|
1580
|
+
try {
|
|
1581
|
+
const input = buildInput(rest, ATTENDEE_INPUT_KEYS);
|
|
1582
|
+
const data = await ctx.gql.workspace.request(UPDATE_ATTENDEE, { id, input });
|
|
1583
|
+
return jsonResult(data.eventfullyManagedUpdateAttendee);
|
|
1584
|
+
} catch (error) {
|
|
1585
|
+
ctx.logger.error("eventfullymanaged attendees_update failed", { error: String(error) });
|
|
1586
|
+
return errorResult(
|
|
1587
|
+
`Failed to update attendee: ${error instanceof Error ? error.message : String(error)}`
|
|
1588
|
+
);
|
|
1589
|
+
}
|
|
1590
|
+
}
|
|
1591
|
+
);
|
|
1592
|
+
server.registerTool(
|
|
1593
|
+
track(mcpToolName(ctx.productName, "registrations_list")),
|
|
1594
|
+
{
|
|
1595
|
+
title: "List Registrations",
|
|
1596
|
+
description: "List ticket registrations, optionally filtered by event, with pagination. Returns items + total.",
|
|
1597
|
+
inputSchema: {
|
|
1598
|
+
eventId: z.string().optional().describe("Filter by event ID"),
|
|
1599
|
+
...PaginationShape
|
|
1600
|
+
}
|
|
1601
|
+
},
|
|
1602
|
+
async (args) => {
|
|
1603
|
+
try {
|
|
1604
|
+
const data = await ctx.gql.workspace.request(LIST_REGISTRATIONS, listVars(args, ["eventId", "workspaceId", "limit", "offset"]));
|
|
1605
|
+
return jsonResult(data.eventfullyManagedRegistrations);
|
|
1606
|
+
} catch (error) {
|
|
1607
|
+
ctx.logger.error("eventfullymanaged registrations_list failed", { error: String(error) });
|
|
1608
|
+
return errorResult(
|
|
1609
|
+
`Failed to list registrations: ${error instanceof Error ? error.message : String(error)}`
|
|
1610
|
+
);
|
|
1611
|
+
}
|
|
1612
|
+
}
|
|
1613
|
+
);
|
|
1614
|
+
server.registerTool(
|
|
1615
|
+
track(mcpToolName(ctx.productName, "registrations_create")),
|
|
1616
|
+
{
|
|
1617
|
+
title: "Create Registration",
|
|
1618
|
+
description: "Create a registration tying an attendee to an event/ticket type. Only `eventId` is required; `totalAmount` is a decimal string.",
|
|
1619
|
+
inputSchema: {
|
|
1620
|
+
eventId: z.string().min(1).describe("Owning event ID"),
|
|
1621
|
+
attendeeId: z.string().optional().describe("Attendee ID"),
|
|
1622
|
+
ticketTypeId: z.string().optional().describe("Ticket type ID"),
|
|
1623
|
+
status: z.string().optional().describe('Status, e.g. "pending", "confirmed", "cancelled"'),
|
|
1624
|
+
quantity: z.number().int().optional().describe("Number of tickets"),
|
|
1625
|
+
totalAmount: z.string().optional().describe("Total amount as a decimal string"),
|
|
1626
|
+
currency: z.string().optional().describe('ISO currency code, e.g. "INR", "USD"'),
|
|
1627
|
+
metadata: JsonObject.optional().describe("Arbitrary metadata JSON")
|
|
1628
|
+
}
|
|
1629
|
+
},
|
|
1630
|
+
async (args) => {
|
|
1631
|
+
try {
|
|
1632
|
+
const input = buildInput(args, REGISTRATION_INPUT_KEYS);
|
|
1633
|
+
const data = await ctx.gql.workspace.request(CREATE_REGISTRATION, { input });
|
|
1634
|
+
return jsonResult(data.eventfullyManagedCreateRegistration);
|
|
1635
|
+
} catch (error) {
|
|
1636
|
+
ctx.logger.error("eventfullymanaged registrations_create failed", { error: String(error) });
|
|
1637
|
+
return errorResult(
|
|
1638
|
+
`Failed to create registration: ${error instanceof Error ? error.message : String(error)}`
|
|
1639
|
+
);
|
|
1640
|
+
}
|
|
1641
|
+
}
|
|
1642
|
+
);
|
|
1643
|
+
server.registerTool(
|
|
1644
|
+
track(mcpToolName(ctx.productName, "registrations_update")),
|
|
1645
|
+
{
|
|
1646
|
+
title: "Update Registration",
|
|
1647
|
+
description: "Update a registration. `eventId` is required by the backend input.",
|
|
1648
|
+
inputSchema: {
|
|
1649
|
+
id: z.string().describe("Registration ID"),
|
|
1650
|
+
eventId: z.string().min(1).describe("Owning event ID"),
|
|
1651
|
+
attendeeId: z.string().optional().describe("Attendee ID"),
|
|
1652
|
+
ticketTypeId: z.string().optional().describe("Ticket type ID"),
|
|
1653
|
+
status: z.string().optional().describe("Status"),
|
|
1654
|
+
quantity: z.number().int().optional().describe("Number of tickets"),
|
|
1655
|
+
totalAmount: z.string().optional().describe("Total amount as a decimal string"),
|
|
1656
|
+
currency: z.string().optional().describe("ISO currency code"),
|
|
1657
|
+
metadata: JsonObject.optional().describe("Arbitrary metadata JSON")
|
|
1658
|
+
}
|
|
1659
|
+
},
|
|
1660
|
+
async ({ id, ...rest }) => {
|
|
1661
|
+
try {
|
|
1662
|
+
const input = buildInput(rest, REGISTRATION_INPUT_KEYS);
|
|
1663
|
+
const data = await ctx.gql.workspace.request(UPDATE_REGISTRATION, { id, input });
|
|
1664
|
+
return jsonResult(data.eventfullyManagedUpdateRegistration);
|
|
1665
|
+
} catch (error) {
|
|
1666
|
+
ctx.logger.error("eventfullymanaged registrations_update failed", { error: String(error) });
|
|
1667
|
+
return errorResult(
|
|
1668
|
+
`Failed to update registration: ${error instanceof Error ? error.message : String(error)}`
|
|
1669
|
+
);
|
|
1670
|
+
}
|
|
1671
|
+
}
|
|
1672
|
+
);
|
|
1673
|
+
}
|
|
1674
|
+
var TICKET_TYPE_INPUT_KEYS = [
|
|
1675
|
+
"eventId",
|
|
1676
|
+
"name",
|
|
1677
|
+
"description",
|
|
1678
|
+
"price",
|
|
1679
|
+
"currency",
|
|
1680
|
+
"capacity",
|
|
1681
|
+
"isActive",
|
|
1682
|
+
"salesStartAt",
|
|
1683
|
+
"salesEndAt",
|
|
1684
|
+
"metadata"
|
|
1685
|
+
];
|
|
1686
|
+
var PROMO_CODE_INPUT_KEYS = [
|
|
1687
|
+
"eventId",
|
|
1688
|
+
"code",
|
|
1689
|
+
"description",
|
|
1690
|
+
"discountType",
|
|
1691
|
+
"discountValue",
|
|
1692
|
+
"maxUses",
|
|
1693
|
+
"isActive",
|
|
1694
|
+
"startsAt",
|
|
1695
|
+
"endsAt",
|
|
1696
|
+
"metadata"
|
|
1697
|
+
];
|
|
1698
|
+
function registerTicketingTools(server, ctx, track) {
|
|
1699
|
+
server.registerTool(
|
|
1700
|
+
track(mcpToolName(ctx.productName, "tickets_list")),
|
|
1701
|
+
{
|
|
1702
|
+
title: "List Ticket Types",
|
|
1703
|
+
description: "List ticket types, optionally filtered by event and free-text search, with pagination. Returns items + total.",
|
|
1704
|
+
inputSchema: {
|
|
1705
|
+
eventId: z.string().optional().describe("Filter by event ID"),
|
|
1706
|
+
search: z.string().optional().describe("Free-text search across ticket name"),
|
|
1707
|
+
...PaginationShape
|
|
1708
|
+
}
|
|
1709
|
+
},
|
|
1710
|
+
async (args) => {
|
|
1711
|
+
try {
|
|
1712
|
+
const data = await ctx.gql.workspace.request(
|
|
1713
|
+
LIST_TICKET_TYPES,
|
|
1714
|
+
listVars(args, ["eventId", "search", "workspaceId", "limit", "offset"])
|
|
1715
|
+
);
|
|
1716
|
+
return jsonResult(data.eventfullyManagedTicketTypes);
|
|
1717
|
+
} catch (error) {
|
|
1718
|
+
ctx.logger.error("eventfullymanaged tickets_list failed", { error: String(error) });
|
|
1719
|
+
return errorResult(
|
|
1720
|
+
`Failed to list ticket types: ${error instanceof Error ? error.message : String(error)}`
|
|
1721
|
+
);
|
|
1722
|
+
}
|
|
1723
|
+
}
|
|
1724
|
+
);
|
|
1725
|
+
server.registerTool(
|
|
1726
|
+
track(mcpToolName(ctx.productName, "tickets_create")),
|
|
1727
|
+
{
|
|
1728
|
+
title: "Create Ticket Type",
|
|
1729
|
+
description: 'Create a ticket type for an event. `eventId`, `name`, `price` are required; `price` is a decimal string (e.g. "499.00").',
|
|
1730
|
+
inputSchema: {
|
|
1731
|
+
eventId: z.string().min(1).describe("Owning event ID"),
|
|
1732
|
+
name: z.string().min(1).describe("Ticket type name"),
|
|
1733
|
+
price: z.string().min(1).describe('Price as a decimal string, e.g. "499.00"'),
|
|
1734
|
+
description: z.string().optional().describe("Ticket description"),
|
|
1735
|
+
currency: z.string().optional().describe('ISO currency code, e.g. "INR"'),
|
|
1736
|
+
capacity: z.number().int().optional().describe("Number available"),
|
|
1737
|
+
isActive: z.boolean().optional().describe("Whether the ticket is on sale"),
|
|
1738
|
+
salesStartAt: z.string().optional().describe("Sales-start timestamp (ISO-8601)"),
|
|
1739
|
+
salesEndAt: z.string().optional().describe("Sales-end timestamp (ISO-8601)"),
|
|
1740
|
+
metadata: JsonObject.optional().describe("Arbitrary metadata JSON")
|
|
1741
|
+
}
|
|
1742
|
+
},
|
|
1743
|
+
async (args) => {
|
|
1744
|
+
try {
|
|
1745
|
+
const input = buildInput(args, TICKET_TYPE_INPUT_KEYS);
|
|
1746
|
+
const data = await ctx.gql.workspace.request(CREATE_TICKET_TYPE, { input });
|
|
1747
|
+
return jsonResult(data.eventfullyManagedCreateTicketType);
|
|
1748
|
+
} catch (error) {
|
|
1749
|
+
ctx.logger.error("eventfullymanaged tickets_create failed", { error: String(error) });
|
|
1750
|
+
return errorResult(
|
|
1751
|
+
`Failed to create ticket type: ${error instanceof Error ? error.message : String(error)}`
|
|
1752
|
+
);
|
|
1753
|
+
}
|
|
1754
|
+
}
|
|
1755
|
+
);
|
|
1756
|
+
server.registerTool(
|
|
1757
|
+
track(mcpToolName(ctx.productName, "tickets_update")),
|
|
1758
|
+
{
|
|
1759
|
+
title: "Update Ticket Type",
|
|
1760
|
+
description: "Update a ticket type. `eventId`, `name`, `price` are required by the backend input. Use `isActive` to open/close sales.",
|
|
1761
|
+
inputSchema: {
|
|
1762
|
+
id: z.string().describe("Ticket type ID"),
|
|
1763
|
+
eventId: z.string().min(1).describe("Owning event ID"),
|
|
1764
|
+
name: z.string().min(1).describe("Ticket type name"),
|
|
1765
|
+
price: z.string().min(1).describe("Price as a decimal string"),
|
|
1766
|
+
description: z.string().optional().describe("Ticket description"),
|
|
1767
|
+
currency: z.string().optional().describe("ISO currency code"),
|
|
1768
|
+
capacity: z.number().int().optional().describe("Number available"),
|
|
1769
|
+
isActive: z.boolean().optional().describe("Whether the ticket is on sale"),
|
|
1770
|
+
salesStartAt: z.string().optional().describe("Sales-start timestamp (ISO-8601)"),
|
|
1771
|
+
salesEndAt: z.string().optional().describe("Sales-end timestamp (ISO-8601)"),
|
|
1772
|
+
metadata: JsonObject.optional().describe("Arbitrary metadata JSON")
|
|
1773
|
+
}
|
|
1774
|
+
},
|
|
1775
|
+
async ({ id, ...rest }) => {
|
|
1776
|
+
try {
|
|
1777
|
+
const input = buildInput(rest, TICKET_TYPE_INPUT_KEYS);
|
|
1778
|
+
const data = await ctx.gql.workspace.request(UPDATE_TICKET_TYPE, { id, input });
|
|
1779
|
+
return jsonResult(data.eventfullyManagedUpdateTicketType);
|
|
1780
|
+
} catch (error) {
|
|
1781
|
+
ctx.logger.error("eventfullymanaged tickets_update failed", { error: String(error) });
|
|
1782
|
+
return errorResult(
|
|
1783
|
+
`Failed to update ticket type: ${error instanceof Error ? error.message : String(error)}`
|
|
1784
|
+
);
|
|
1785
|
+
}
|
|
1786
|
+
}
|
|
1787
|
+
);
|
|
1788
|
+
server.registerTool(
|
|
1789
|
+
track(mcpToolName(ctx.productName, "tickets_delete")),
|
|
1790
|
+
{
|
|
1791
|
+
title: "Delete Ticket Type",
|
|
1792
|
+
description: "Delete a ticket type by ID. Returns true on success.",
|
|
1793
|
+
inputSchema: { id: z.string().describe("Ticket type ID") }
|
|
1794
|
+
},
|
|
1795
|
+
async ({ id }) => {
|
|
1796
|
+
try {
|
|
1797
|
+
const data = await ctx.gql.workspace.request(DELETE_TICKET_TYPE, { id });
|
|
1798
|
+
return jsonResult({ deleted: data.eventfullyManagedDeleteTicketType, id });
|
|
1799
|
+
} catch (error) {
|
|
1800
|
+
ctx.logger.error("eventfullymanaged tickets_delete failed", { error: String(error) });
|
|
1801
|
+
return errorResult(
|
|
1802
|
+
`Failed to delete ticket type: ${error instanceof Error ? error.message : String(error)}`
|
|
1803
|
+
);
|
|
1804
|
+
}
|
|
1805
|
+
}
|
|
1806
|
+
);
|
|
1807
|
+
server.registerTool(
|
|
1808
|
+
track(mcpToolName(ctx.productName, "promo_codes_list")),
|
|
1809
|
+
{
|
|
1810
|
+
title: "List Promo Codes",
|
|
1811
|
+
description: "List promo codes, optionally filtered by event and free-text search, with pagination. Returns items + total.",
|
|
1812
|
+
inputSchema: {
|
|
1813
|
+
eventId: z.string().optional().describe("Filter by event ID"),
|
|
1814
|
+
search: z.string().optional().describe("Free-text search across code"),
|
|
1815
|
+
...PaginationShape
|
|
1816
|
+
}
|
|
1817
|
+
},
|
|
1818
|
+
async (args) => {
|
|
1819
|
+
try {
|
|
1820
|
+
const data = await ctx.gql.workspace.request(
|
|
1821
|
+
LIST_PROMO_CODES,
|
|
1822
|
+
listVars(args, ["eventId", "search", "workspaceId", "limit", "offset"])
|
|
1823
|
+
);
|
|
1824
|
+
return jsonResult(data.eventfullyManagedPromoCodes);
|
|
1825
|
+
} catch (error) {
|
|
1826
|
+
ctx.logger.error("eventfullymanaged promo_codes_list failed", { error: String(error) });
|
|
1827
|
+
return errorResult(
|
|
1828
|
+
`Failed to list promo codes: ${error instanceof Error ? error.message : String(error)}`
|
|
1829
|
+
);
|
|
1830
|
+
}
|
|
1831
|
+
}
|
|
1832
|
+
);
|
|
1833
|
+
server.registerTool(
|
|
1834
|
+
track(mcpToolName(ctx.productName, "promo_codes_create")),
|
|
1835
|
+
{
|
|
1836
|
+
title: "Create Promo Code",
|
|
1837
|
+
description: 'Create a promo code. `eventId`, `code`, `discountType`, `discountValue` are required. `discountType` is e.g. "percentage"/"fixed"; `discountValue` is a decimal string.',
|
|
1838
|
+
inputSchema: {
|
|
1839
|
+
eventId: z.string().min(1).describe("Owning event ID"),
|
|
1840
|
+
code: z.string().min(1).describe("Promo code string (unique per event)"),
|
|
1841
|
+
discountType: z.string().min(1).describe('Discount type, e.g. "percentage", "fixed"'),
|
|
1842
|
+
discountValue: z.string().min(1).describe("Discount value as a decimal string"),
|
|
1843
|
+
description: z.string().optional().describe("Promo description"),
|
|
1844
|
+
maxUses: z.number().int().optional().describe("Maximum redemptions"),
|
|
1845
|
+
isActive: z.boolean().optional().describe("Whether the code is active"),
|
|
1846
|
+
startsAt: z.string().optional().describe("Valid-from timestamp (ISO-8601)"),
|
|
1847
|
+
endsAt: z.string().optional().describe("Valid-until timestamp (ISO-8601)"),
|
|
1848
|
+
metadata: JsonObject.optional().describe("Arbitrary metadata JSON")
|
|
1849
|
+
}
|
|
1850
|
+
},
|
|
1851
|
+
async (args) => {
|
|
1852
|
+
try {
|
|
1853
|
+
const input = buildInput(args, PROMO_CODE_INPUT_KEYS);
|
|
1854
|
+
const data = await ctx.gql.workspace.request(CREATE_PROMO_CODE, { input });
|
|
1855
|
+
return jsonResult(data.eventfullyManagedCreatePromoCode);
|
|
1856
|
+
} catch (error) {
|
|
1857
|
+
ctx.logger.error("eventfullymanaged promo_codes_create failed", { error: String(error) });
|
|
1858
|
+
return errorResult(
|
|
1859
|
+
`Failed to create promo code: ${error instanceof Error ? error.message : String(error)}`
|
|
1860
|
+
);
|
|
1861
|
+
}
|
|
1862
|
+
}
|
|
1863
|
+
);
|
|
1864
|
+
server.registerTool(
|
|
1865
|
+
track(mcpToolName(ctx.productName, "promo_codes_update")),
|
|
1866
|
+
{
|
|
1867
|
+
title: "Update Promo Code",
|
|
1868
|
+
description: "Update a promo code. `eventId`, `code`, `discountType`, `discountValue` are required by the backend input.",
|
|
1869
|
+
inputSchema: {
|
|
1870
|
+
id: z.string().describe("Promo code ID"),
|
|
1871
|
+
eventId: z.string().min(1).describe("Owning event ID"),
|
|
1872
|
+
code: z.string().min(1).describe("Promo code string"),
|
|
1873
|
+
discountType: z.string().min(1).describe("Discount type"),
|
|
1874
|
+
discountValue: z.string().min(1).describe("Discount value as a decimal string"),
|
|
1875
|
+
description: z.string().optional().describe("Promo description"),
|
|
1876
|
+
maxUses: z.number().int().optional().describe("Maximum redemptions"),
|
|
1877
|
+
isActive: z.boolean().optional().describe("Whether the code is active"),
|
|
1878
|
+
startsAt: z.string().optional().describe("Valid-from timestamp (ISO-8601)"),
|
|
1879
|
+
endsAt: z.string().optional().describe("Valid-until timestamp (ISO-8601)"),
|
|
1880
|
+
metadata: JsonObject.optional().describe("Arbitrary metadata JSON")
|
|
1881
|
+
}
|
|
1882
|
+
},
|
|
1883
|
+
async ({ id, ...rest }) => {
|
|
1884
|
+
try {
|
|
1885
|
+
const input = buildInput(rest, PROMO_CODE_INPUT_KEYS);
|
|
1886
|
+
const data = await ctx.gql.workspace.request(UPDATE_PROMO_CODE, { id, input });
|
|
1887
|
+
return jsonResult(data.eventfullyManagedUpdatePromoCode);
|
|
1888
|
+
} catch (error) {
|
|
1889
|
+
ctx.logger.error("eventfullymanaged promo_codes_update failed", { error: String(error) });
|
|
1890
|
+
return errorResult(
|
|
1891
|
+
`Failed to update promo code: ${error instanceof Error ? error.message : String(error)}`
|
|
1892
|
+
);
|
|
1893
|
+
}
|
|
1894
|
+
}
|
|
1895
|
+
);
|
|
1896
|
+
server.registerTool(
|
|
1897
|
+
track(mcpToolName(ctx.productName, "promo_codes_delete")),
|
|
1898
|
+
{
|
|
1899
|
+
title: "Delete Promo Code",
|
|
1900
|
+
description: "Delete a promo code by ID. Returns true on success.",
|
|
1901
|
+
inputSchema: { id: z.string().describe("Promo code ID") }
|
|
1902
|
+
},
|
|
1903
|
+
async ({ id }) => {
|
|
1904
|
+
try {
|
|
1905
|
+
const data = await ctx.gql.workspace.request(DELETE_PROMO_CODE, { id });
|
|
1906
|
+
return jsonResult({ deleted: data.eventfullyManagedDeletePromoCode, id });
|
|
1907
|
+
} catch (error) {
|
|
1908
|
+
ctx.logger.error("eventfullymanaged promo_codes_delete failed", { error: String(error) });
|
|
1909
|
+
return errorResult(
|
|
1910
|
+
`Failed to delete promo code: ${error instanceof Error ? error.message : String(error)}`
|
|
1911
|
+
);
|
|
1912
|
+
}
|
|
1913
|
+
}
|
|
1914
|
+
);
|
|
1915
|
+
}
|
|
1916
|
+
var SPONSOR_INPUT_KEYS = [
|
|
1917
|
+
"eventId",
|
|
1918
|
+
"name",
|
|
1919
|
+
"level",
|
|
1920
|
+
"logoUrl",
|
|
1921
|
+
"website",
|
|
1922
|
+
"contactName",
|
|
1923
|
+
"contactEmail",
|
|
1924
|
+
"contactPhone",
|
|
1925
|
+
"metrics",
|
|
1926
|
+
"metadata"
|
|
1927
|
+
];
|
|
1928
|
+
var EXHIBITOR_INPUT_KEYS = [
|
|
1929
|
+
"eventId",
|
|
1930
|
+
"name",
|
|
1931
|
+
"category",
|
|
1932
|
+
"boothCode",
|
|
1933
|
+
"contactName",
|
|
1934
|
+
"contactEmail",
|
|
1935
|
+
"status",
|
|
1936
|
+
"metadata"
|
|
1937
|
+
];
|
|
1938
|
+
var LEAD_INPUT_KEYS = [
|
|
1939
|
+
"eventId",
|
|
1940
|
+
"attendeeName",
|
|
1941
|
+
"attendeeEmail",
|
|
1942
|
+
"exhibitorId",
|
|
1943
|
+
"sponsorId",
|
|
1944
|
+
"score",
|
|
1945
|
+
"status",
|
|
1946
|
+
"notes",
|
|
1947
|
+
"capturedAt",
|
|
1948
|
+
"metadata"
|
|
1949
|
+
];
|
|
1950
|
+
function registerSponsorshipTools(server, ctx, track) {
|
|
1951
|
+
server.registerTool(
|
|
1952
|
+
track(mcpToolName(ctx.productName, "sponsors_list")),
|
|
1953
|
+
{
|
|
1954
|
+
title: "List Sponsors",
|
|
1955
|
+
description: "List sponsors, optionally filtered by event and free-text search, with pagination. Returns items + total.",
|
|
1956
|
+
inputSchema: {
|
|
1957
|
+
eventId: z.string().optional().describe("Filter by event ID"),
|
|
1958
|
+
search: z.string().optional().describe("Free-text search across sponsor name"),
|
|
1959
|
+
...PaginationShape
|
|
1960
|
+
}
|
|
1961
|
+
},
|
|
1962
|
+
async (args) => {
|
|
1963
|
+
try {
|
|
1964
|
+
const data = await ctx.gql.workspace.request(
|
|
1965
|
+
LIST_SPONSORS,
|
|
1966
|
+
listVars(args, ["eventId", "search", "workspaceId", "limit", "offset"])
|
|
1967
|
+
);
|
|
1968
|
+
return jsonResult(data.eventfullyManagedSponsors);
|
|
1969
|
+
} catch (error) {
|
|
1970
|
+
ctx.logger.error("eventfullymanaged sponsors_list failed", { error: String(error) });
|
|
1971
|
+
return errorResult(
|
|
1972
|
+
`Failed to list sponsors: ${error instanceof Error ? error.message : String(error)}`
|
|
1973
|
+
);
|
|
1974
|
+
}
|
|
1975
|
+
}
|
|
1976
|
+
);
|
|
1977
|
+
server.registerTool(
|
|
1978
|
+
track(mcpToolName(ctx.productName, "sponsors_get")),
|
|
1979
|
+
{
|
|
1980
|
+
title: "Get Sponsor",
|
|
1981
|
+
description: "Fetch a single sponsor by ID.",
|
|
1982
|
+
inputSchema: { id: z.string().describe("Sponsor ID") }
|
|
1983
|
+
},
|
|
1984
|
+
async ({ id }) => {
|
|
1985
|
+
try {
|
|
1986
|
+
const data = await ctx.gql.workspace.request(GET_SPONSOR, { id });
|
|
1987
|
+
if (!data.eventfullyManagedSponsor) return errorResult(`Sponsor ${id} not found`);
|
|
1988
|
+
return jsonResult(data.eventfullyManagedSponsor);
|
|
1989
|
+
} catch (error) {
|
|
1990
|
+
ctx.logger.error("eventfullymanaged sponsors_get failed", { error: String(error) });
|
|
1991
|
+
return errorResult(
|
|
1992
|
+
`Failed to get sponsor: ${error instanceof Error ? error.message : String(error)}`
|
|
1993
|
+
);
|
|
1994
|
+
}
|
|
1995
|
+
}
|
|
1996
|
+
);
|
|
1997
|
+
server.registerTool(
|
|
1998
|
+
track(mcpToolName(ctx.productName, "sponsors_create")),
|
|
1999
|
+
{
|
|
2000
|
+
title: "Create Sponsor",
|
|
2001
|
+
description: 'Create a sponsor for an event. `eventId`, `name`, `level` are required (`level` is e.g. "platinum"/"gold"/"silver").',
|
|
2002
|
+
inputSchema: {
|
|
2003
|
+
eventId: z.string().min(1).describe("Owning event ID"),
|
|
2004
|
+
name: z.string().min(1).describe("Sponsor name"),
|
|
2005
|
+
level: z.string().min(1).describe('Sponsorship level, e.g. "platinum", "gold"'),
|
|
2006
|
+
logoUrl: z.string().optional().describe("Logo image URL"),
|
|
2007
|
+
website: z.string().optional().describe("Sponsor website"),
|
|
2008
|
+
contactName: z.string().optional().describe("Primary contact name"),
|
|
2009
|
+
contactEmail: z.string().optional().describe("Primary contact email"),
|
|
2010
|
+
contactPhone: z.string().optional().describe("Primary contact phone"),
|
|
2011
|
+
metrics: JsonObject.optional().describe("Sponsorship metrics JSON"),
|
|
2012
|
+
metadata: JsonObject.optional().describe("Arbitrary metadata JSON")
|
|
2013
|
+
}
|
|
2014
|
+
},
|
|
2015
|
+
async (args) => {
|
|
2016
|
+
try {
|
|
2017
|
+
const input = buildInput(args, SPONSOR_INPUT_KEYS);
|
|
2018
|
+
const data = await ctx.gql.workspace.request(CREATE_SPONSOR, { input });
|
|
2019
|
+
return jsonResult(data.eventfullyManagedCreateSponsor);
|
|
2020
|
+
} catch (error) {
|
|
2021
|
+
ctx.logger.error("eventfullymanaged sponsors_create failed", { error: String(error) });
|
|
2022
|
+
return errorResult(
|
|
2023
|
+
`Failed to create sponsor: ${error instanceof Error ? error.message : String(error)}`
|
|
2024
|
+
);
|
|
2025
|
+
}
|
|
2026
|
+
}
|
|
2027
|
+
);
|
|
2028
|
+
server.registerTool(
|
|
2029
|
+
track(mcpToolName(ctx.productName, "sponsors_update")),
|
|
2030
|
+
{
|
|
2031
|
+
title: "Update Sponsor",
|
|
2032
|
+
description: "Update a sponsor. `eventId`, `name`, `level` are required by the backend input.",
|
|
2033
|
+
inputSchema: {
|
|
2034
|
+
id: z.string().describe("Sponsor ID"),
|
|
2035
|
+
eventId: z.string().min(1).describe("Owning event ID"),
|
|
2036
|
+
name: z.string().min(1).describe("Sponsor name"),
|
|
2037
|
+
level: z.string().min(1).describe("Sponsorship level"),
|
|
2038
|
+
logoUrl: z.string().optional().describe("Logo image URL"),
|
|
2039
|
+
website: z.string().optional().describe("Sponsor website"),
|
|
2040
|
+
contactName: z.string().optional().describe("Primary contact name"),
|
|
2041
|
+
contactEmail: z.string().optional().describe("Primary contact email"),
|
|
2042
|
+
contactPhone: z.string().optional().describe("Primary contact phone"),
|
|
2043
|
+
metrics: JsonObject.optional().describe("Sponsorship metrics JSON"),
|
|
2044
|
+
metadata: JsonObject.optional().describe("Arbitrary metadata JSON")
|
|
2045
|
+
}
|
|
2046
|
+
},
|
|
2047
|
+
async ({ id, ...rest }) => {
|
|
2048
|
+
try {
|
|
2049
|
+
const input = buildInput(rest, SPONSOR_INPUT_KEYS);
|
|
2050
|
+
const data = await ctx.gql.workspace.request(UPDATE_SPONSOR, { id, input });
|
|
2051
|
+
return jsonResult(data.eventfullyManagedUpdateSponsor);
|
|
2052
|
+
} catch (error) {
|
|
2053
|
+
ctx.logger.error("eventfullymanaged sponsors_update failed", { error: String(error) });
|
|
2054
|
+
return errorResult(
|
|
2055
|
+
`Failed to update sponsor: ${error instanceof Error ? error.message : String(error)}`
|
|
2056
|
+
);
|
|
2057
|
+
}
|
|
2058
|
+
}
|
|
2059
|
+
);
|
|
2060
|
+
server.registerTool(
|
|
2061
|
+
track(mcpToolName(ctx.productName, "sponsors_delete")),
|
|
2062
|
+
{
|
|
2063
|
+
title: "Delete Sponsor",
|
|
2064
|
+
description: "Delete a sponsor by ID. Returns true on success.",
|
|
2065
|
+
inputSchema: { id: z.string().describe("Sponsor ID") }
|
|
2066
|
+
},
|
|
2067
|
+
async ({ id }) => {
|
|
2068
|
+
try {
|
|
2069
|
+
const data = await ctx.gql.workspace.request(
|
|
2070
|
+
DELETE_SPONSOR,
|
|
2071
|
+
{ id }
|
|
2072
|
+
);
|
|
2073
|
+
return jsonResult({ deleted: data.eventfullyManagedDeleteSponsor, id });
|
|
2074
|
+
} catch (error) {
|
|
2075
|
+
ctx.logger.error("eventfullymanaged sponsors_delete failed", { error: String(error) });
|
|
2076
|
+
return errorResult(
|
|
2077
|
+
`Failed to delete sponsor: ${error instanceof Error ? error.message : String(error)}`
|
|
2078
|
+
);
|
|
2079
|
+
}
|
|
2080
|
+
}
|
|
2081
|
+
);
|
|
2082
|
+
server.registerTool(
|
|
2083
|
+
track(mcpToolName(ctx.productName, "exhibitors_list")),
|
|
2084
|
+
{
|
|
2085
|
+
title: "List Exhibitors",
|
|
2086
|
+
description: "List exhibitors, optionally filtered by event and free-text search, with pagination. Returns items + total.",
|
|
2087
|
+
inputSchema: {
|
|
2088
|
+
eventId: z.string().optional().describe("Filter by event ID"),
|
|
2089
|
+
search: z.string().optional().describe("Free-text search across exhibitor name"),
|
|
2090
|
+
...PaginationShape
|
|
2091
|
+
}
|
|
2092
|
+
},
|
|
2093
|
+
async (args) => {
|
|
2094
|
+
try {
|
|
2095
|
+
const data = await ctx.gql.workspace.request(
|
|
2096
|
+
LIST_EXHIBITORS,
|
|
2097
|
+
listVars(args, ["eventId", "search", "workspaceId", "limit", "offset"])
|
|
2098
|
+
);
|
|
2099
|
+
return jsonResult(data.eventfullyManagedExhibitors);
|
|
2100
|
+
} catch (error) {
|
|
2101
|
+
ctx.logger.error("eventfullymanaged exhibitors_list failed", { error: String(error) });
|
|
2102
|
+
return errorResult(
|
|
2103
|
+
`Failed to list exhibitors: ${error instanceof Error ? error.message : String(error)}`
|
|
2104
|
+
);
|
|
2105
|
+
}
|
|
2106
|
+
}
|
|
2107
|
+
);
|
|
2108
|
+
server.registerTool(
|
|
2109
|
+
track(mcpToolName(ctx.productName, "exhibitors_create")),
|
|
2110
|
+
{
|
|
2111
|
+
title: "Create Exhibitor",
|
|
2112
|
+
description: "Create an exhibitor for an event. `eventId`, `name` are required.",
|
|
2113
|
+
inputSchema: {
|
|
2114
|
+
eventId: z.string().min(1).describe("Owning event ID"),
|
|
2115
|
+
name: z.string().min(1).describe("Exhibitor name"),
|
|
2116
|
+
category: z.string().optional().describe("Exhibitor category"),
|
|
2117
|
+
boothCode: z.string().optional().describe("Assigned booth code"),
|
|
2118
|
+
contactName: z.string().optional().describe("Primary contact name"),
|
|
2119
|
+
contactEmail: z.string().optional().describe("Primary contact email"),
|
|
2120
|
+
status: z.string().optional().describe('Status, e.g. "confirmed", "pending"'),
|
|
2121
|
+
metadata: JsonObject.optional().describe("Arbitrary metadata JSON")
|
|
2122
|
+
}
|
|
2123
|
+
},
|
|
2124
|
+
async (args) => {
|
|
2125
|
+
try {
|
|
2126
|
+
const input = buildInput(args, EXHIBITOR_INPUT_KEYS);
|
|
2127
|
+
const data = await ctx.gql.workspace.request(CREATE_EXHIBITOR, { input });
|
|
2128
|
+
return jsonResult(data.eventfullyManagedCreateExhibitor);
|
|
2129
|
+
} catch (error) {
|
|
2130
|
+
ctx.logger.error("eventfullymanaged exhibitors_create failed", { error: String(error) });
|
|
2131
|
+
return errorResult(
|
|
2132
|
+
`Failed to create exhibitor: ${error instanceof Error ? error.message : String(error)}`
|
|
2133
|
+
);
|
|
2134
|
+
}
|
|
2135
|
+
}
|
|
2136
|
+
);
|
|
2137
|
+
server.registerTool(
|
|
2138
|
+
track(mcpToolName(ctx.productName, "exhibitors_update")),
|
|
2139
|
+
{
|
|
2140
|
+
title: "Update Exhibitor",
|
|
2141
|
+
description: "Update an exhibitor. `eventId`, `name` are required by the backend input.",
|
|
2142
|
+
inputSchema: {
|
|
2143
|
+
id: z.string().describe("Exhibitor ID"),
|
|
2144
|
+
eventId: z.string().min(1).describe("Owning event ID"),
|
|
2145
|
+
name: z.string().min(1).describe("Exhibitor name"),
|
|
2146
|
+
category: z.string().optional().describe("Exhibitor category"),
|
|
2147
|
+
boothCode: z.string().optional().describe("Assigned booth code"),
|
|
2148
|
+
contactName: z.string().optional().describe("Primary contact name"),
|
|
2149
|
+
contactEmail: z.string().optional().describe("Primary contact email"),
|
|
2150
|
+
status: z.string().optional().describe("Status"),
|
|
2151
|
+
metadata: JsonObject.optional().describe("Arbitrary metadata JSON")
|
|
2152
|
+
}
|
|
2153
|
+
},
|
|
2154
|
+
async ({ id, ...rest }) => {
|
|
2155
|
+
try {
|
|
2156
|
+
const input = buildInput(rest, EXHIBITOR_INPUT_KEYS);
|
|
2157
|
+
const data = await ctx.gql.workspace.request(UPDATE_EXHIBITOR, { id, input });
|
|
2158
|
+
return jsonResult(data.eventfullyManagedUpdateExhibitor);
|
|
2159
|
+
} catch (error) {
|
|
2160
|
+
ctx.logger.error("eventfullymanaged exhibitors_update failed", { error: String(error) });
|
|
2161
|
+
return errorResult(
|
|
2162
|
+
`Failed to update exhibitor: ${error instanceof Error ? error.message : String(error)}`
|
|
2163
|
+
);
|
|
2164
|
+
}
|
|
2165
|
+
}
|
|
2166
|
+
);
|
|
2167
|
+
server.registerTool(
|
|
2168
|
+
track(mcpToolName(ctx.productName, "exhibitors_delete")),
|
|
2169
|
+
{
|
|
2170
|
+
title: "Delete Exhibitor",
|
|
2171
|
+
description: "Delete an exhibitor by ID. Returns true on success.",
|
|
2172
|
+
inputSchema: { id: z.string().describe("Exhibitor ID") }
|
|
2173
|
+
},
|
|
2174
|
+
async ({ id }) => {
|
|
2175
|
+
try {
|
|
2176
|
+
const data = await ctx.gql.workspace.request(DELETE_EXHIBITOR, { id });
|
|
2177
|
+
return jsonResult({ deleted: data.eventfullyManagedDeleteExhibitor, id });
|
|
2178
|
+
} catch (error) {
|
|
2179
|
+
ctx.logger.error("eventfullymanaged exhibitors_delete failed", { error: String(error) });
|
|
2180
|
+
return errorResult(
|
|
2181
|
+
`Failed to delete exhibitor: ${error instanceof Error ? error.message : String(error)}`
|
|
2182
|
+
);
|
|
2183
|
+
}
|
|
2184
|
+
}
|
|
2185
|
+
);
|
|
2186
|
+
server.registerTool(
|
|
2187
|
+
track(mcpToolName(ctx.productName, "leads_list")),
|
|
2188
|
+
{
|
|
2189
|
+
title: "List Leads",
|
|
2190
|
+
description: "List captured leads (booth/sponsor lead-capture), optionally filtered by event and free-text search, with pagination. Returns items + total.",
|
|
2191
|
+
inputSchema: {
|
|
2192
|
+
eventId: z.string().optional().describe("Filter by event ID"),
|
|
2193
|
+
search: z.string().optional().describe("Free-text search across lead name/email"),
|
|
2194
|
+
...PaginationShape
|
|
2195
|
+
}
|
|
2196
|
+
},
|
|
2197
|
+
async (args) => {
|
|
2198
|
+
try {
|
|
2199
|
+
const data = await ctx.gql.workspace.request(LIST_LEADS, listVars(args, ["eventId", "search", "workspaceId", "limit", "offset"]));
|
|
2200
|
+
return jsonResult(data.eventfullyManagedLeads);
|
|
2201
|
+
} catch (error) {
|
|
2202
|
+
ctx.logger.error("eventfullymanaged leads_list failed", { error: String(error) });
|
|
2203
|
+
return errorResult(
|
|
2204
|
+
`Failed to list leads: ${error instanceof Error ? error.message : String(error)}`
|
|
2205
|
+
);
|
|
2206
|
+
}
|
|
2207
|
+
}
|
|
2208
|
+
);
|
|
2209
|
+
server.registerTool(
|
|
2210
|
+
track(mcpToolName(ctx.productName, "leads_create")),
|
|
2211
|
+
{
|
|
2212
|
+
title: "Create Lead",
|
|
2213
|
+
description: "Capture a lead at an event (tied to an exhibitor or sponsor). `eventId`, `attendeeName`, `attendeeEmail` are required.",
|
|
2214
|
+
inputSchema: {
|
|
2215
|
+
eventId: z.string().min(1).describe("Owning event ID"),
|
|
2216
|
+
attendeeName: z.string().min(1).describe("Lead/attendee name"),
|
|
2217
|
+
attendeeEmail: z.string().min(1).describe("Lead/attendee email"),
|
|
2218
|
+
exhibitorId: z.string().optional().describe("Capturing exhibitor ID"),
|
|
2219
|
+
sponsorId: z.string().optional().describe("Capturing sponsor ID"),
|
|
2220
|
+
score: z.number().int().optional().describe("Lead score"),
|
|
2221
|
+
status: z.string().optional().describe('Status, e.g. "new", "qualified", "contacted"'),
|
|
2222
|
+
notes: z.string().optional().describe("Free-text notes"),
|
|
2223
|
+
capturedAt: z.string().optional().describe("Capture timestamp (ISO-8601)"),
|
|
2224
|
+
metadata: JsonObject.optional().describe("Arbitrary metadata JSON")
|
|
2225
|
+
}
|
|
2226
|
+
},
|
|
2227
|
+
async (args) => {
|
|
2228
|
+
try {
|
|
2229
|
+
const input = buildInput(args, LEAD_INPUT_KEYS);
|
|
2230
|
+
const data = await ctx.gql.workspace.request(CREATE_LEAD, { input });
|
|
2231
|
+
return jsonResult(data.eventfullyManagedCreateLead);
|
|
2232
|
+
} catch (error) {
|
|
2233
|
+
ctx.logger.error("eventfullymanaged leads_create failed", { error: String(error) });
|
|
2234
|
+
return errorResult(
|
|
2235
|
+
`Failed to create lead: ${error instanceof Error ? error.message : String(error)}`
|
|
2236
|
+
);
|
|
2237
|
+
}
|
|
2238
|
+
}
|
|
2239
|
+
);
|
|
2240
|
+
server.registerTool(
|
|
2241
|
+
track(mcpToolName(ctx.productName, "leads_update")),
|
|
2242
|
+
{
|
|
2243
|
+
title: "Update Lead",
|
|
2244
|
+
description: "Update a lead. `eventId`, `attendeeName`, `attendeeEmail` are required by the backend input. Use `status`/`score` to progress the lead.",
|
|
2245
|
+
inputSchema: {
|
|
2246
|
+
id: z.string().describe("Lead ID"),
|
|
2247
|
+
eventId: z.string().min(1).describe("Owning event ID"),
|
|
2248
|
+
attendeeName: z.string().min(1).describe("Lead/attendee name"),
|
|
2249
|
+
attendeeEmail: z.string().min(1).describe("Lead/attendee email"),
|
|
2250
|
+
exhibitorId: z.string().optional().describe("Capturing exhibitor ID"),
|
|
2251
|
+
sponsorId: z.string().optional().describe("Capturing sponsor ID"),
|
|
2252
|
+
score: z.number().int().optional().describe("Lead score"),
|
|
2253
|
+
status: z.string().optional().describe("Status"),
|
|
2254
|
+
notes: z.string().optional().describe("Free-text notes"),
|
|
2255
|
+
capturedAt: z.string().optional().describe("Capture timestamp (ISO-8601)"),
|
|
2256
|
+
metadata: JsonObject.optional().describe("Arbitrary metadata JSON")
|
|
2257
|
+
}
|
|
2258
|
+
},
|
|
2259
|
+
async ({ id, ...rest }) => {
|
|
2260
|
+
try {
|
|
2261
|
+
const input = buildInput(rest, LEAD_INPUT_KEYS);
|
|
2262
|
+
const data = await ctx.gql.workspace.request(UPDATE_LEAD, { id, input });
|
|
2263
|
+
return jsonResult(data.eventfullyManagedUpdateLead);
|
|
2264
|
+
} catch (error) {
|
|
2265
|
+
ctx.logger.error("eventfullymanaged leads_update failed", { error: String(error) });
|
|
2266
|
+
return errorResult(
|
|
2267
|
+
`Failed to update lead: ${error instanceof Error ? error.message : String(error)}`
|
|
2268
|
+
);
|
|
2269
|
+
}
|
|
2270
|
+
}
|
|
2271
|
+
);
|
|
2272
|
+
server.registerTool(
|
|
2273
|
+
track(mcpToolName(ctx.productName, "leads_delete")),
|
|
2274
|
+
{
|
|
2275
|
+
title: "Delete Lead",
|
|
2276
|
+
description: "Delete a lead by ID. Returns true on success.",
|
|
2277
|
+
inputSchema: { id: z.string().describe("Lead ID") }
|
|
2278
|
+
},
|
|
2279
|
+
async ({ id }) => {
|
|
2280
|
+
try {
|
|
2281
|
+
const data = await ctx.gql.workspace.request(
|
|
2282
|
+
DELETE_LEAD,
|
|
2283
|
+
{ id }
|
|
2284
|
+
);
|
|
2285
|
+
return jsonResult({ deleted: data.eventfullyManagedDeleteLead, id });
|
|
2286
|
+
} catch (error) {
|
|
2287
|
+
ctx.logger.error("eventfullymanaged leads_delete failed", { error: String(error) });
|
|
2288
|
+
return errorResult(
|
|
2289
|
+
`Failed to delete lead: ${error instanceof Error ? error.message : String(error)}`
|
|
2290
|
+
);
|
|
2291
|
+
}
|
|
2292
|
+
}
|
|
2293
|
+
);
|
|
2294
|
+
}
|
|
2295
|
+
var STATION_INPUT_KEYS = [
|
|
2296
|
+
"eventId",
|
|
2297
|
+
"name",
|
|
2298
|
+
"code",
|
|
2299
|
+
"location",
|
|
2300
|
+
"isActive",
|
|
2301
|
+
"kioskConfig",
|
|
2302
|
+
"metadata"
|
|
2303
|
+
];
|
|
2304
|
+
var RECORD_INPUT_KEYS = [
|
|
2305
|
+
"eventId",
|
|
2306
|
+
"registrationId",
|
|
2307
|
+
"attendeeId",
|
|
2308
|
+
"stationId",
|
|
2309
|
+
"direction",
|
|
2310
|
+
"method",
|
|
2311
|
+
"status",
|
|
2312
|
+
"recordedAt",
|
|
2313
|
+
"metadata"
|
|
2314
|
+
];
|
|
2315
|
+
function registerCheckinTools(server, ctx, track) {
|
|
2316
|
+
server.registerTool(
|
|
2317
|
+
track(mcpToolName(ctx.productName, "checkin_stations_list")),
|
|
2318
|
+
{
|
|
2319
|
+
title: "List Check-in Stations",
|
|
2320
|
+
description: "List check-in stations/kiosks, optionally filtered by event, with pagination. Returns items + total.",
|
|
2321
|
+
inputSchema: {
|
|
2322
|
+
eventId: z.string().optional().describe("Filter by event ID"),
|
|
2323
|
+
...PaginationShape
|
|
2324
|
+
}
|
|
2325
|
+
},
|
|
2326
|
+
async (args) => {
|
|
2327
|
+
try {
|
|
2328
|
+
const data = await ctx.gql.workspace.request(
|
|
2329
|
+
LIST_CHECK_IN_STATIONS,
|
|
2330
|
+
listVars(args, ["eventId", "workspaceId", "limit", "offset"])
|
|
2331
|
+
);
|
|
2332
|
+
return jsonResult(data.eventfullyManagedCheckInStations);
|
|
2333
|
+
} catch (error) {
|
|
2334
|
+
ctx.logger.error("eventfullymanaged checkin_stations_list failed", {
|
|
2335
|
+
error: String(error)
|
|
2336
|
+
});
|
|
2337
|
+
return errorResult(
|
|
2338
|
+
`Failed to list check-in stations: ${error instanceof Error ? error.message : String(error)}`
|
|
2339
|
+
);
|
|
2340
|
+
}
|
|
2341
|
+
}
|
|
2342
|
+
);
|
|
2343
|
+
server.registerTool(
|
|
2344
|
+
track(mcpToolName(ctx.productName, "checkin_stations_create")),
|
|
2345
|
+
{
|
|
2346
|
+
title: "Create Check-in Station",
|
|
2347
|
+
description: "Create a check-in station/kiosk. `eventId`, `name`, `code` are required.",
|
|
2348
|
+
inputSchema: {
|
|
2349
|
+
eventId: z.string().min(1).describe("Owning event ID"),
|
|
2350
|
+
name: z.string().min(1).describe("Station name"),
|
|
2351
|
+
code: z.string().min(1).describe("Station code (unique per event)"),
|
|
2352
|
+
location: z.string().optional().describe("Physical location/description"),
|
|
2353
|
+
isActive: z.boolean().optional().describe("Whether the station is active"),
|
|
2354
|
+
kioskConfig: JsonObject.optional().describe("Kiosk configuration JSON"),
|
|
2355
|
+
metadata: JsonObject.optional().describe("Arbitrary metadata JSON")
|
|
2356
|
+
}
|
|
2357
|
+
},
|
|
2358
|
+
async (args) => {
|
|
2359
|
+
try {
|
|
2360
|
+
const input = buildInput(args, STATION_INPUT_KEYS);
|
|
2361
|
+
const data = await ctx.gql.workspace.request(CREATE_CHECK_IN_STATION, { input });
|
|
2362
|
+
return jsonResult(data.eventfullyManagedCreateCheckInStation);
|
|
2363
|
+
} catch (error) {
|
|
2364
|
+
ctx.logger.error("eventfullymanaged checkin_stations_create failed", {
|
|
2365
|
+
error: String(error)
|
|
2366
|
+
});
|
|
2367
|
+
return errorResult(
|
|
2368
|
+
`Failed to create check-in station: ${error instanceof Error ? error.message : String(error)}`
|
|
2369
|
+
);
|
|
2370
|
+
}
|
|
2371
|
+
}
|
|
2372
|
+
);
|
|
2373
|
+
server.registerTool(
|
|
2374
|
+
track(mcpToolName(ctx.productName, "checkin_stations_update")),
|
|
2375
|
+
{
|
|
2376
|
+
title: "Update Check-in Station",
|
|
2377
|
+
description: "Update a check-in station. `eventId`, `name`, `code` are required by the backend input.",
|
|
2378
|
+
inputSchema: {
|
|
2379
|
+
id: z.string().describe("Check-in station ID"),
|
|
2380
|
+
eventId: z.string().min(1).describe("Owning event ID"),
|
|
2381
|
+
name: z.string().min(1).describe("Station name"),
|
|
2382
|
+
code: z.string().min(1).describe("Station code"),
|
|
2383
|
+
location: z.string().optional().describe("Physical location/description"),
|
|
2384
|
+
isActive: z.boolean().optional().describe("Whether the station is active"),
|
|
2385
|
+
kioskConfig: JsonObject.optional().describe("Kiosk configuration JSON"),
|
|
2386
|
+
metadata: JsonObject.optional().describe("Arbitrary metadata JSON")
|
|
2387
|
+
}
|
|
2388
|
+
},
|
|
2389
|
+
async ({ id, ...rest }) => {
|
|
2390
|
+
try {
|
|
2391
|
+
const input = buildInput(rest, STATION_INPUT_KEYS);
|
|
2392
|
+
const data = await ctx.gql.workspace.request(UPDATE_CHECK_IN_STATION, { id, input });
|
|
2393
|
+
return jsonResult(data.eventfullyManagedUpdateCheckInStation);
|
|
2394
|
+
} catch (error) {
|
|
2395
|
+
ctx.logger.error("eventfullymanaged checkin_stations_update failed", {
|
|
2396
|
+
error: String(error)
|
|
2397
|
+
});
|
|
2398
|
+
return errorResult(
|
|
2399
|
+
`Failed to update check-in station: ${error instanceof Error ? error.message : String(error)}`
|
|
2400
|
+
);
|
|
2401
|
+
}
|
|
2402
|
+
}
|
|
2403
|
+
);
|
|
2404
|
+
server.registerTool(
|
|
2405
|
+
track(mcpToolName(ctx.productName, "checkin_stations_delete")),
|
|
2406
|
+
{
|
|
2407
|
+
title: "Delete Check-in Station",
|
|
2408
|
+
description: "Delete a check-in station by ID. Returns true on success.",
|
|
2409
|
+
inputSchema: { id: z.string().describe("Check-in station ID") }
|
|
2410
|
+
},
|
|
2411
|
+
async ({ id }) => {
|
|
2412
|
+
try {
|
|
2413
|
+
const data = await ctx.gql.workspace.request(DELETE_CHECK_IN_STATION, { id });
|
|
2414
|
+
return jsonResult({ deleted: data.eventfullyManagedDeleteCheckInStation, id });
|
|
2415
|
+
} catch (error) {
|
|
2416
|
+
ctx.logger.error("eventfullymanaged checkin_stations_delete failed", {
|
|
2417
|
+
error: String(error)
|
|
2418
|
+
});
|
|
2419
|
+
return errorResult(
|
|
2420
|
+
`Failed to delete check-in station: ${error instanceof Error ? error.message : String(error)}`
|
|
2421
|
+
);
|
|
2422
|
+
}
|
|
2423
|
+
}
|
|
2424
|
+
);
|
|
2425
|
+
server.registerTool(
|
|
2426
|
+
track(mcpToolName(ctx.productName, "checkin_records_list")),
|
|
2427
|
+
{
|
|
2428
|
+
title: "List Check-in Records",
|
|
2429
|
+
description: "List check-in/check-out records, optionally filtered by event, with pagination. Returns items + total.",
|
|
2430
|
+
inputSchema: {
|
|
2431
|
+
eventId: z.string().optional().describe("Filter by event ID"),
|
|
2432
|
+
...PaginationShape
|
|
2433
|
+
}
|
|
2434
|
+
},
|
|
2435
|
+
async (args) => {
|
|
2436
|
+
try {
|
|
2437
|
+
const data = await ctx.gql.workspace.request(
|
|
2438
|
+
LIST_CHECK_IN_RECORDS,
|
|
2439
|
+
listVars(args, ["eventId", "workspaceId", "limit", "offset"])
|
|
2440
|
+
);
|
|
2441
|
+
return jsonResult(data.eventfullyManagedCheckInRecords);
|
|
2442
|
+
} catch (error) {
|
|
2443
|
+
ctx.logger.error("eventfullymanaged checkin_records_list failed", { error: String(error) });
|
|
2444
|
+
return errorResult(
|
|
2445
|
+
`Failed to list check-in records: ${error instanceof Error ? error.message : String(error)}`
|
|
2446
|
+
);
|
|
2447
|
+
}
|
|
2448
|
+
}
|
|
2449
|
+
);
|
|
2450
|
+
server.registerTool(
|
|
2451
|
+
track(mcpToolName(ctx.productName, "checkin_records_create")),
|
|
2452
|
+
{
|
|
2453
|
+
title: "Create Check-in Record",
|
|
2454
|
+
description: 'Record a check-in/check-out scan. `eventId` is required; `direction` is e.g. "in"/"out", `method` is e.g. "qr"/"manual".',
|
|
2455
|
+
inputSchema: {
|
|
2456
|
+
eventId: z.string().min(1).describe("Owning event ID"),
|
|
2457
|
+
registrationId: z.string().optional().describe("Related registration ID"),
|
|
2458
|
+
attendeeId: z.string().optional().describe("Attendee ID"),
|
|
2459
|
+
stationId: z.string().optional().describe("Capturing station ID"),
|
|
2460
|
+
direction: z.string().optional().describe('Direction, e.g. "in", "out"'),
|
|
2461
|
+
method: z.string().optional().describe('Method, e.g. "qr", "nfc", "manual"'),
|
|
2462
|
+
status: z.string().optional().describe('Status, e.g. "success", "denied"'),
|
|
2463
|
+
recordedAt: z.string().optional().describe("Recorded timestamp (ISO-8601)"),
|
|
2464
|
+
metadata: JsonObject.optional().describe("Arbitrary metadata JSON")
|
|
2465
|
+
}
|
|
2466
|
+
},
|
|
2467
|
+
async (args) => {
|
|
2468
|
+
try {
|
|
2469
|
+
const input = buildInput(args, RECORD_INPUT_KEYS);
|
|
2470
|
+
const data = await ctx.gql.workspace.request(CREATE_CHECK_IN_RECORD, { input });
|
|
2471
|
+
return jsonResult(data.eventfullyManagedCreateCheckInRecord);
|
|
2472
|
+
} catch (error) {
|
|
2473
|
+
ctx.logger.error("eventfullymanaged checkin_records_create failed", {
|
|
2474
|
+
error: String(error)
|
|
2475
|
+
});
|
|
2476
|
+
return errorResult(
|
|
2477
|
+
`Failed to create check-in record: ${error instanceof Error ? error.message : String(error)}`
|
|
2478
|
+
);
|
|
2479
|
+
}
|
|
2480
|
+
}
|
|
2481
|
+
);
|
|
2482
|
+
server.registerTool(
|
|
2483
|
+
track(mcpToolName(ctx.productName, "checkin_records_update")),
|
|
2484
|
+
{
|
|
2485
|
+
title: "Update Check-in Record",
|
|
2486
|
+
description: "Update a check-in record. `eventId` is required by the backend input.",
|
|
2487
|
+
inputSchema: {
|
|
2488
|
+
id: z.string().describe("Check-in record ID"),
|
|
2489
|
+
eventId: z.string().min(1).describe("Owning event ID"),
|
|
2490
|
+
registrationId: z.string().optional().describe("Related registration ID"),
|
|
2491
|
+
attendeeId: z.string().optional().describe("Attendee ID"),
|
|
2492
|
+
stationId: z.string().optional().describe("Capturing station ID"),
|
|
2493
|
+
direction: z.string().optional().describe('Direction, e.g. "in", "out"'),
|
|
2494
|
+
method: z.string().optional().describe('Method, e.g. "qr", "nfc", "manual"'),
|
|
2495
|
+
status: z.string().optional().describe("Status"),
|
|
2496
|
+
recordedAt: z.string().optional().describe("Recorded timestamp (ISO-8601)"),
|
|
2497
|
+
metadata: JsonObject.optional().describe("Arbitrary metadata JSON")
|
|
2498
|
+
}
|
|
2499
|
+
},
|
|
2500
|
+
async ({ id, ...rest }) => {
|
|
2501
|
+
try {
|
|
2502
|
+
const input = buildInput(rest, RECORD_INPUT_KEYS);
|
|
2503
|
+
const data = await ctx.gql.workspace.request(UPDATE_CHECK_IN_RECORD, { id, input });
|
|
2504
|
+
return jsonResult(data.eventfullyManagedUpdateCheckInRecord);
|
|
2505
|
+
} catch (error) {
|
|
2506
|
+
ctx.logger.error("eventfullymanaged checkin_records_update failed", {
|
|
2507
|
+
error: String(error)
|
|
2508
|
+
});
|
|
2509
|
+
return errorResult(
|
|
2510
|
+
`Failed to update check-in record: ${error instanceof Error ? error.message : String(error)}`
|
|
2511
|
+
);
|
|
2512
|
+
}
|
|
2513
|
+
}
|
|
2514
|
+
);
|
|
2515
|
+
server.registerTool(
|
|
2516
|
+
track(mcpToolName(ctx.productName, "checkin_records_delete")),
|
|
2517
|
+
{
|
|
2518
|
+
title: "Delete Check-in Record",
|
|
2519
|
+
description: "Delete a check-in record by ID. Returns true on success.",
|
|
2520
|
+
inputSchema: { id: z.string().describe("Check-in record ID") }
|
|
2521
|
+
},
|
|
2522
|
+
async ({ id }) => {
|
|
2523
|
+
try {
|
|
2524
|
+
const data = await ctx.gql.workspace.request(DELETE_CHECK_IN_RECORD, { id });
|
|
2525
|
+
return jsonResult({ deleted: data.eventfullyManagedDeleteCheckInRecord, id });
|
|
2526
|
+
} catch (error) {
|
|
2527
|
+
ctx.logger.error("eventfullymanaged checkin_records_delete failed", {
|
|
2528
|
+
error: String(error)
|
|
2529
|
+
});
|
|
2530
|
+
return errorResult(
|
|
2531
|
+
`Failed to delete check-in record: ${error instanceof Error ? error.message : String(error)}`
|
|
2532
|
+
);
|
|
2533
|
+
}
|
|
2534
|
+
}
|
|
2535
|
+
);
|
|
2536
|
+
}
|
|
2537
|
+
var PROFILE_INPUT_KEYS = [
|
|
2538
|
+
"eventId",
|
|
2539
|
+
"attendeeId",
|
|
2540
|
+
"industry",
|
|
2541
|
+
"role",
|
|
2542
|
+
"interests",
|
|
2543
|
+
"lookingFor",
|
|
2544
|
+
"visibility",
|
|
2545
|
+
"metadata"
|
|
2546
|
+
];
|
|
2547
|
+
var MATCH_INPUT_KEYS = [
|
|
2548
|
+
"eventId",
|
|
2549
|
+
"sourceProfileId",
|
|
2550
|
+
"targetProfileId",
|
|
2551
|
+
"score",
|
|
2552
|
+
"reason",
|
|
2553
|
+
"status",
|
|
2554
|
+
"metadata"
|
|
2555
|
+
];
|
|
2556
|
+
var MEETING_INPUT_KEYS = [
|
|
2557
|
+
"eventId",
|
|
2558
|
+
"title",
|
|
2559
|
+
"sourceProfileId",
|
|
2560
|
+
"targetProfileId",
|
|
2561
|
+
"status",
|
|
2562
|
+
"location",
|
|
2563
|
+
"notes",
|
|
2564
|
+
"startsAt",
|
|
2565
|
+
"endsAt",
|
|
2566
|
+
"metadata"
|
|
2567
|
+
];
|
|
2568
|
+
function registerNetworkingTools(server, ctx, track) {
|
|
2569
|
+
server.registerTool(
|
|
2570
|
+
track(mcpToolName(ctx.productName, "profiles_list")),
|
|
2571
|
+
{
|
|
2572
|
+
title: "List Networking Profiles",
|
|
2573
|
+
description: "List networking profiles, optionally filtered by event, with pagination. Returns items + total.",
|
|
2574
|
+
inputSchema: {
|
|
2575
|
+
eventId: z.string().optional().describe("Filter by event ID"),
|
|
2576
|
+
...PaginationShape
|
|
2577
|
+
}
|
|
2578
|
+
},
|
|
2579
|
+
async (args) => {
|
|
2580
|
+
try {
|
|
2581
|
+
const data = await ctx.gql.workspace.request(
|
|
2582
|
+
LIST_NETWORKING_PROFILES,
|
|
2583
|
+
listVars(args, ["eventId", "workspaceId", "limit", "offset"])
|
|
2584
|
+
);
|
|
2585
|
+
return jsonResult(data.eventfullyManagedNetworkingProfiles);
|
|
2586
|
+
} catch (error) {
|
|
2587
|
+
ctx.logger.error("eventfullymanaged profiles_list failed", { error: String(error) });
|
|
2588
|
+
return errorResult(
|
|
2589
|
+
`Failed to list networking profiles: ${error instanceof Error ? error.message : String(error)}`
|
|
2590
|
+
);
|
|
2591
|
+
}
|
|
2592
|
+
}
|
|
2593
|
+
);
|
|
2594
|
+
server.registerTool(
|
|
2595
|
+
track(mcpToolName(ctx.productName, "profiles_create")),
|
|
2596
|
+
{
|
|
2597
|
+
title: "Create Networking Profile",
|
|
2598
|
+
description: "Create a networking profile for an attendee. `eventId`, `attendeeId` are required. `interests`/`lookingFor` are string arrays.",
|
|
2599
|
+
inputSchema: {
|
|
2600
|
+
eventId: z.string().min(1).describe("Owning event ID"),
|
|
2601
|
+
attendeeId: z.string().min(1).describe("Attendee ID this profile belongs to"),
|
|
2602
|
+
industry: z.string().optional().describe("Industry"),
|
|
2603
|
+
role: z.string().optional().describe("Professional role"),
|
|
2604
|
+
interests: z.array(z.string()).optional().describe("Topics of interest"),
|
|
2605
|
+
lookingFor: z.array(z.string()).optional().describe("What the attendee is looking for"),
|
|
2606
|
+
visibility: z.string().optional().describe('Visibility, e.g. "public", "private"'),
|
|
2607
|
+
metadata: JsonObject.optional().describe("Arbitrary metadata JSON")
|
|
2608
|
+
}
|
|
2609
|
+
},
|
|
2610
|
+
async (args) => {
|
|
2611
|
+
try {
|
|
2612
|
+
const input = buildInput(args, PROFILE_INPUT_KEYS);
|
|
2613
|
+
const data = await ctx.gql.workspace.request(CREATE_NETWORKING_PROFILE, { input });
|
|
2614
|
+
return jsonResult(data.eventfullyManagedCreateNetworkingProfile);
|
|
2615
|
+
} catch (error) {
|
|
2616
|
+
ctx.logger.error("eventfullymanaged profiles_create failed", { error: String(error) });
|
|
2617
|
+
return errorResult(
|
|
2618
|
+
`Failed to create networking profile: ${error instanceof Error ? error.message : String(error)}`
|
|
2619
|
+
);
|
|
2620
|
+
}
|
|
2621
|
+
}
|
|
2622
|
+
);
|
|
2623
|
+
server.registerTool(
|
|
2624
|
+
track(mcpToolName(ctx.productName, "profiles_update")),
|
|
2625
|
+
{
|
|
2626
|
+
title: "Update Networking Profile",
|
|
2627
|
+
description: "Update a networking profile. `eventId`, `attendeeId` are required by the backend input.",
|
|
2628
|
+
inputSchema: {
|
|
2629
|
+
id: z.string().describe("Networking profile ID"),
|
|
2630
|
+
eventId: z.string().min(1).describe("Owning event ID"),
|
|
2631
|
+
attendeeId: z.string().min(1).describe("Attendee ID this profile belongs to"),
|
|
2632
|
+
industry: z.string().optional().describe("Industry"),
|
|
2633
|
+
role: z.string().optional().describe("Professional role"),
|
|
2634
|
+
interests: z.array(z.string()).optional().describe("Topics of interest"),
|
|
2635
|
+
lookingFor: z.array(z.string()).optional().describe("What the attendee is looking for"),
|
|
2636
|
+
visibility: z.string().optional().describe("Visibility"),
|
|
2637
|
+
metadata: JsonObject.optional().describe("Arbitrary metadata JSON")
|
|
2638
|
+
}
|
|
2639
|
+
},
|
|
2640
|
+
async ({ id, ...rest }) => {
|
|
2641
|
+
try {
|
|
2642
|
+
const input = buildInput(rest, PROFILE_INPUT_KEYS);
|
|
2643
|
+
const data = await ctx.gql.workspace.request(UPDATE_NETWORKING_PROFILE, { id, input });
|
|
2644
|
+
return jsonResult(data.eventfullyManagedUpdateNetworkingProfile);
|
|
2645
|
+
} catch (error) {
|
|
2646
|
+
ctx.logger.error("eventfullymanaged profiles_update failed", { error: String(error) });
|
|
2647
|
+
return errorResult(
|
|
2648
|
+
`Failed to update networking profile: ${error instanceof Error ? error.message : String(error)}`
|
|
2649
|
+
);
|
|
2650
|
+
}
|
|
2651
|
+
}
|
|
2652
|
+
);
|
|
2653
|
+
server.registerTool(
|
|
2654
|
+
track(mcpToolName(ctx.productName, "profiles_delete")),
|
|
2655
|
+
{
|
|
2656
|
+
title: "Delete Networking Profile",
|
|
2657
|
+
description: "Delete a networking profile by ID. Returns true on success.",
|
|
2658
|
+
inputSchema: { id: z.string().describe("Networking profile ID") }
|
|
2659
|
+
},
|
|
2660
|
+
async ({ id }) => {
|
|
2661
|
+
try {
|
|
2662
|
+
const data = await ctx.gql.workspace.request(DELETE_NETWORKING_PROFILE, { id });
|
|
2663
|
+
return jsonResult({ deleted: data.eventfullyManagedDeleteNetworkingProfile, id });
|
|
2664
|
+
} catch (error) {
|
|
2665
|
+
ctx.logger.error("eventfullymanaged profiles_delete failed", { error: String(error) });
|
|
2666
|
+
return errorResult(
|
|
2667
|
+
`Failed to delete networking profile: ${error instanceof Error ? error.message : String(error)}`
|
|
2668
|
+
);
|
|
2669
|
+
}
|
|
2670
|
+
}
|
|
2671
|
+
);
|
|
2672
|
+
server.registerTool(
|
|
2673
|
+
track(mcpToolName(ctx.productName, "matches_list")),
|
|
2674
|
+
{
|
|
2675
|
+
title: "List Networking Matches",
|
|
2676
|
+
description: "List suggested networking matches, optionally filtered by event, with pagination. Returns items + total.",
|
|
2677
|
+
inputSchema: {
|
|
2678
|
+
eventId: z.string().optional().describe("Filter by event ID"),
|
|
2679
|
+
...PaginationShape
|
|
2680
|
+
}
|
|
2681
|
+
},
|
|
2682
|
+
async (args) => {
|
|
2683
|
+
try {
|
|
2684
|
+
const data = await ctx.gql.workspace.request(
|
|
2685
|
+
LIST_NETWORKING_MATCHES,
|
|
2686
|
+
listVars(args, ["eventId", "workspaceId", "limit", "offset"])
|
|
2687
|
+
);
|
|
2688
|
+
return jsonResult(data.eventfullyManagedNetworkingMatches);
|
|
2689
|
+
} catch (error) {
|
|
2690
|
+
ctx.logger.error("eventfullymanaged matches_list failed", { error: String(error) });
|
|
2691
|
+
return errorResult(
|
|
2692
|
+
`Failed to list networking matches: ${error instanceof Error ? error.message : String(error)}`
|
|
2693
|
+
);
|
|
2694
|
+
}
|
|
2695
|
+
}
|
|
2696
|
+
);
|
|
2697
|
+
server.registerTool(
|
|
2698
|
+
track(mcpToolName(ctx.productName, "matches_create")),
|
|
2699
|
+
{
|
|
2700
|
+
title: "Create Networking Match",
|
|
2701
|
+
description: "Create a networking match between two profiles. `eventId`, `sourceProfileId`, `targetProfileId`, `score` are required.",
|
|
2702
|
+
inputSchema: {
|
|
2703
|
+
eventId: z.string().min(1).describe("Owning event ID"),
|
|
2704
|
+
sourceProfileId: z.string().min(1).describe("Source networking profile ID"),
|
|
2705
|
+
targetProfileId: z.string().min(1).describe("Target networking profile ID"),
|
|
2706
|
+
score: z.number().int().describe("Match score"),
|
|
2707
|
+
reason: z.string().optional().describe("Why the match was suggested"),
|
|
2708
|
+
status: z.string().optional().describe('Status, e.g. "suggested", "accepted", "declined"'),
|
|
2709
|
+
metadata: JsonObject.optional().describe("Arbitrary metadata JSON")
|
|
2710
|
+
}
|
|
2711
|
+
},
|
|
2712
|
+
async (args) => {
|
|
2713
|
+
try {
|
|
2714
|
+
const input = buildInput(args, MATCH_INPUT_KEYS);
|
|
2715
|
+
const data = await ctx.gql.workspace.request(CREATE_NETWORKING_MATCH, { input });
|
|
2716
|
+
return jsonResult(data.eventfullyManagedCreateNetworkingMatch);
|
|
2717
|
+
} catch (error) {
|
|
2718
|
+
ctx.logger.error("eventfullymanaged matches_create failed", { error: String(error) });
|
|
2719
|
+
return errorResult(
|
|
2720
|
+
`Failed to create networking match: ${error instanceof Error ? error.message : String(error)}`
|
|
2721
|
+
);
|
|
2722
|
+
}
|
|
2723
|
+
}
|
|
2724
|
+
);
|
|
2725
|
+
server.registerTool(
|
|
2726
|
+
track(mcpToolName(ctx.productName, "matches_update")),
|
|
2727
|
+
{
|
|
2728
|
+
title: "Update Networking Match",
|
|
2729
|
+
description: "Update a networking match. `eventId`, `sourceProfileId`, `targetProfileId`, `score` are required by the backend input.",
|
|
2730
|
+
inputSchema: {
|
|
2731
|
+
id: z.string().describe("Networking match ID"),
|
|
2732
|
+
eventId: z.string().min(1).describe("Owning event ID"),
|
|
2733
|
+
sourceProfileId: z.string().min(1).describe("Source networking profile ID"),
|
|
2734
|
+
targetProfileId: z.string().min(1).describe("Target networking profile ID"),
|
|
2735
|
+
score: z.number().int().describe("Match score"),
|
|
2736
|
+
reason: z.string().optional().describe("Why the match was suggested"),
|
|
2737
|
+
status: z.string().optional().describe("Status"),
|
|
2738
|
+
metadata: JsonObject.optional().describe("Arbitrary metadata JSON")
|
|
2739
|
+
}
|
|
2740
|
+
},
|
|
2741
|
+
async ({ id, ...rest }) => {
|
|
2742
|
+
try {
|
|
2743
|
+
const input = buildInput(rest, MATCH_INPUT_KEYS);
|
|
2744
|
+
const data = await ctx.gql.workspace.request(UPDATE_NETWORKING_MATCH, { id, input });
|
|
2745
|
+
return jsonResult(data.eventfullyManagedUpdateNetworkingMatch);
|
|
2746
|
+
} catch (error) {
|
|
2747
|
+
ctx.logger.error("eventfullymanaged matches_update failed", { error: String(error) });
|
|
2748
|
+
return errorResult(
|
|
2749
|
+
`Failed to update networking match: ${error instanceof Error ? error.message : String(error)}`
|
|
2750
|
+
);
|
|
2751
|
+
}
|
|
2752
|
+
}
|
|
2753
|
+
);
|
|
2754
|
+
server.registerTool(
|
|
2755
|
+
track(mcpToolName(ctx.productName, "matches_delete")),
|
|
2756
|
+
{
|
|
2757
|
+
title: "Delete Networking Match",
|
|
2758
|
+
description: "Delete a networking match by ID. Returns true on success.",
|
|
2759
|
+
inputSchema: { id: z.string().describe("Networking match ID") }
|
|
2760
|
+
},
|
|
2761
|
+
async ({ id }) => {
|
|
2762
|
+
try {
|
|
2763
|
+
const data = await ctx.gql.workspace.request(DELETE_NETWORKING_MATCH, { id });
|
|
2764
|
+
return jsonResult({ deleted: data.eventfullyManagedDeleteNetworkingMatch, id });
|
|
2765
|
+
} catch (error) {
|
|
2766
|
+
ctx.logger.error("eventfullymanaged matches_delete failed", { error: String(error) });
|
|
2767
|
+
return errorResult(
|
|
2768
|
+
`Failed to delete networking match: ${error instanceof Error ? error.message : String(error)}`
|
|
2769
|
+
);
|
|
2770
|
+
}
|
|
2771
|
+
}
|
|
2772
|
+
);
|
|
2773
|
+
server.registerTool(
|
|
2774
|
+
track(mcpToolName(ctx.productName, "meetings_list")),
|
|
2775
|
+
{
|
|
2776
|
+
title: "List Meetings",
|
|
2777
|
+
description: "List scheduled 1:1 networking meetings, optionally filtered by event, with pagination. Returns items + total.",
|
|
2778
|
+
inputSchema: {
|
|
2779
|
+
eventId: z.string().optional().describe("Filter by event ID"),
|
|
2780
|
+
...PaginationShape
|
|
2781
|
+
}
|
|
2782
|
+
},
|
|
2783
|
+
async (args) => {
|
|
2784
|
+
try {
|
|
2785
|
+
const data = await ctx.gql.workspace.request(LIST_MEETINGS, listVars(args, ["eventId", "workspaceId", "limit", "offset"]));
|
|
2786
|
+
return jsonResult(data.eventfullyManagedMeetings);
|
|
2787
|
+
} catch (error) {
|
|
2788
|
+
ctx.logger.error("eventfullymanaged meetings_list failed", { error: String(error) });
|
|
2789
|
+
return errorResult(
|
|
2790
|
+
`Failed to list meetings: ${error instanceof Error ? error.message : String(error)}`
|
|
2791
|
+
);
|
|
2792
|
+
}
|
|
2793
|
+
}
|
|
2794
|
+
);
|
|
2795
|
+
server.registerTool(
|
|
2796
|
+
track(mcpToolName(ctx.productName, "meetings_create")),
|
|
2797
|
+
{
|
|
2798
|
+
title: "Create Meeting",
|
|
2799
|
+
description: "Schedule a 1:1 networking meeting. `eventId`, `title`, `startsAt`, `endsAt` are required.",
|
|
2800
|
+
inputSchema: {
|
|
2801
|
+
eventId: z.string().min(1).describe("Owning event ID"),
|
|
2802
|
+
title: z.string().min(1).describe("Meeting title"),
|
|
2803
|
+
startsAt: z.string().min(1).describe("Start timestamp (ISO-8601 DateTime)"),
|
|
2804
|
+
endsAt: z.string().min(1).describe("End timestamp (ISO-8601 DateTime)"),
|
|
2805
|
+
sourceProfileId: z.string().optional().describe("Requesting profile ID"),
|
|
2806
|
+
targetProfileId: z.string().optional().describe("Invited profile ID"),
|
|
2807
|
+
status: z.string().optional().describe('Status, e.g. "requested", "confirmed", "declined"'),
|
|
2808
|
+
location: z.string().optional().describe("Meeting location"),
|
|
2809
|
+
notes: z.string().optional().describe("Free-text notes"),
|
|
2810
|
+
metadata: JsonObject.optional().describe("Arbitrary metadata JSON")
|
|
2811
|
+
}
|
|
2812
|
+
},
|
|
2813
|
+
async (args) => {
|
|
2814
|
+
try {
|
|
2815
|
+
const input = buildInput(args, MEETING_INPUT_KEYS);
|
|
2816
|
+
const data = await ctx.gql.workspace.request(CREATE_MEETING, { input });
|
|
2817
|
+
return jsonResult(data.eventfullyManagedCreateMeeting);
|
|
2818
|
+
} catch (error) {
|
|
2819
|
+
ctx.logger.error("eventfullymanaged meetings_create failed", { error: String(error) });
|
|
2820
|
+
return errorResult(
|
|
2821
|
+
`Failed to create meeting: ${error instanceof Error ? error.message : String(error)}`
|
|
2822
|
+
);
|
|
2823
|
+
}
|
|
2824
|
+
}
|
|
2825
|
+
);
|
|
2826
|
+
server.registerTool(
|
|
2827
|
+
track(mcpToolName(ctx.productName, "meetings_update")),
|
|
2828
|
+
{
|
|
2829
|
+
title: "Update Meeting",
|
|
2830
|
+
description: "Update a networking meeting. `eventId`, `title`, `startsAt`, `endsAt` are required by the backend input.",
|
|
2831
|
+
inputSchema: {
|
|
2832
|
+
id: z.string().describe("Meeting ID"),
|
|
2833
|
+
eventId: z.string().min(1).describe("Owning event ID"),
|
|
2834
|
+
title: z.string().min(1).describe("Meeting title"),
|
|
2835
|
+
startsAt: z.string().min(1).describe("Start timestamp (ISO-8601 DateTime)"),
|
|
2836
|
+
endsAt: z.string().min(1).describe("End timestamp (ISO-8601 DateTime)"),
|
|
2837
|
+
sourceProfileId: z.string().optional().describe("Requesting profile ID"),
|
|
2838
|
+
targetProfileId: z.string().optional().describe("Invited profile ID"),
|
|
2839
|
+
status: z.string().optional().describe("Status"),
|
|
2840
|
+
location: z.string().optional().describe("Meeting location"),
|
|
2841
|
+
notes: z.string().optional().describe("Free-text notes"),
|
|
2842
|
+
metadata: JsonObject.optional().describe("Arbitrary metadata JSON")
|
|
2843
|
+
}
|
|
2844
|
+
},
|
|
2845
|
+
async ({ id, ...rest }) => {
|
|
2846
|
+
try {
|
|
2847
|
+
const input = buildInput(rest, MEETING_INPUT_KEYS);
|
|
2848
|
+
const data = await ctx.gql.workspace.request(UPDATE_MEETING, { id, input });
|
|
2849
|
+
return jsonResult(data.eventfullyManagedUpdateMeeting);
|
|
2850
|
+
} catch (error) {
|
|
2851
|
+
ctx.logger.error("eventfullymanaged meetings_update failed", { error: String(error) });
|
|
2852
|
+
return errorResult(
|
|
2853
|
+
`Failed to update meeting: ${error instanceof Error ? error.message : String(error)}`
|
|
2854
|
+
);
|
|
2855
|
+
}
|
|
2856
|
+
}
|
|
2857
|
+
);
|
|
2858
|
+
server.registerTool(
|
|
2859
|
+
track(mcpToolName(ctx.productName, "meetings_delete")),
|
|
2860
|
+
{
|
|
2861
|
+
title: "Delete Meeting",
|
|
2862
|
+
description: "Delete a networking meeting by ID. Returns true on success.",
|
|
2863
|
+
inputSchema: { id: z.string().describe("Meeting ID") }
|
|
2864
|
+
},
|
|
2865
|
+
async ({ id }) => {
|
|
2866
|
+
try {
|
|
2867
|
+
const data = await ctx.gql.workspace.request(
|
|
2868
|
+
DELETE_MEETING,
|
|
2869
|
+
{ id }
|
|
2870
|
+
);
|
|
2871
|
+
return jsonResult({ deleted: data.eventfullyManagedDeleteMeeting, id });
|
|
2872
|
+
} catch (error) {
|
|
2873
|
+
ctx.logger.error("eventfullymanaged meetings_delete failed", { error: String(error) });
|
|
2874
|
+
return errorResult(
|
|
2875
|
+
`Failed to delete meeting: ${error instanceof Error ? error.message : String(error)}`
|
|
2876
|
+
);
|
|
2877
|
+
}
|
|
2878
|
+
}
|
|
2879
|
+
);
|
|
2880
|
+
}
|
|
2881
|
+
var SIMPLE_ENTITY_INPUT_KEYS = ["name", "title", "status", "eventId", "metadata"];
|
|
2882
|
+
var SURFACES = [
|
|
2883
|
+
{
|
|
2884
|
+
listSuffix: "announcements_list",
|
|
2885
|
+
upsertSuffix: "announcements_upsert",
|
|
2886
|
+
label: "announcements",
|
|
2887
|
+
listRoot: "eventfullyManagedAnnouncements",
|
|
2888
|
+
upsertRoot: "eventfullyManagedUpsertAnnouncement",
|
|
2889
|
+
listOp: LIST_ANNOUNCEMENTS,
|
|
2890
|
+
upsertOp: UPSERT_ANNOUNCEMENT
|
|
2891
|
+
},
|
|
2892
|
+
{
|
|
2893
|
+
listSuffix: "automation_rules_list",
|
|
2894
|
+
upsertSuffix: "automation_rules_upsert",
|
|
2895
|
+
label: "automation rules",
|
|
2896
|
+
listRoot: "eventfullyManagedAutomationRules",
|
|
2897
|
+
upsertRoot: "eventfullyManagedUpsertAutomationRule",
|
|
2898
|
+
listOp: LIST_AUTOMATION_RULES,
|
|
2899
|
+
upsertOp: UPSERT_AUTOMATION_RULE
|
|
2900
|
+
},
|
|
2901
|
+
{
|
|
2902
|
+
listSuffix: "communication_campaigns_list",
|
|
2903
|
+
upsertSuffix: "communication_campaigns_upsert",
|
|
2904
|
+
label: "communication campaigns",
|
|
2905
|
+
listRoot: "eventfullyManagedCommunicationCampaigns",
|
|
2906
|
+
upsertRoot: "eventfullyManagedUpsertCommunicationCampaign",
|
|
2907
|
+
listOp: LIST_COMMUNICATION_CAMPAIGNS,
|
|
2908
|
+
upsertOp: UPSERT_COMMUNICATION_CAMPAIGN
|
|
2909
|
+
},
|
|
2910
|
+
{
|
|
2911
|
+
listSuffix: "workflow_templates_list",
|
|
2912
|
+
upsertSuffix: "workflow_templates_upsert",
|
|
2913
|
+
label: "workflow templates",
|
|
2914
|
+
listRoot: "eventfullyManagedWorkflowTemplates",
|
|
2915
|
+
upsertRoot: "eventfullyManagedUpsertWorkflowTemplate",
|
|
2916
|
+
listOp: LIST_WORKFLOW_TEMPLATES,
|
|
2917
|
+
upsertOp: UPSERT_WORKFLOW_TEMPLATE
|
|
2918
|
+
},
|
|
2919
|
+
{
|
|
2920
|
+
listSuffix: "analytics_snapshots_list",
|
|
2921
|
+
upsertSuffix: "analytics_snapshots_upsert",
|
|
2922
|
+
label: "analytics snapshots",
|
|
2923
|
+
listRoot: "eventfullyManagedAnalyticsSnapshots",
|
|
2924
|
+
upsertRoot: "eventfullyManagedUpsertAnalyticsSnapshot",
|
|
2925
|
+
listOp: LIST_ANALYTICS_SNAPSHOTS,
|
|
2926
|
+
upsertOp: UPSERT_ANALYTICS_SNAPSHOT
|
|
2927
|
+
}
|
|
2928
|
+
];
|
|
2929
|
+
function registerContentTools(server, ctx, track) {
|
|
2930
|
+
for (const s of SURFACES) {
|
|
2931
|
+
server.registerTool(
|
|
2932
|
+
track(mcpToolName(ctx.productName, s.listSuffix)),
|
|
2933
|
+
{
|
|
2934
|
+
title: `List ${s.label}`,
|
|
2935
|
+
description: `List ${s.label}, optionally filtered by event, with pagination. Returns items + total.`,
|
|
2936
|
+
inputSchema: {
|
|
2937
|
+
eventId: z.string().optional().describe("Filter by event ID"),
|
|
2938
|
+
...PaginationShape
|
|
2939
|
+
}
|
|
2940
|
+
},
|
|
2941
|
+
async (args) => {
|
|
2942
|
+
try {
|
|
2943
|
+
const data = await ctx.gql.workspace.request(
|
|
2944
|
+
s.listOp,
|
|
2945
|
+
listVars(args, ["eventId", "workspaceId", "limit", "offset"])
|
|
2946
|
+
);
|
|
2947
|
+
return jsonResult(data[s.listRoot]);
|
|
2948
|
+
} catch (error) {
|
|
2949
|
+
ctx.logger.error(`eventfullymanaged ${s.listSuffix} failed`, { error: String(error) });
|
|
2950
|
+
return errorResult(
|
|
2951
|
+
`Failed to list ${s.label}: ${error instanceof Error ? error.message : String(error)}`
|
|
2952
|
+
);
|
|
2953
|
+
}
|
|
2954
|
+
}
|
|
2955
|
+
);
|
|
2956
|
+
server.registerTool(
|
|
2957
|
+
track(mcpToolName(ctx.productName, s.upsertSuffix)),
|
|
2958
|
+
{
|
|
2959
|
+
title: `Upsert ${s.label.replace(/s$/, "")}`,
|
|
2960
|
+
description: `Create or update a ${s.label.replace(/s$/, "")} record. Omit \`id\` to create; pass \`id\` to update. All content fields are optional.`,
|
|
2961
|
+
inputSchema: {
|
|
2962
|
+
id: z.string().optional().describe("Record ID \u2014 omit to create, pass to update"),
|
|
2963
|
+
name: z.string().optional().describe("Record name"),
|
|
2964
|
+
title: z.string().optional().describe("Record title"),
|
|
2965
|
+
status: z.string().optional().describe("Record status"),
|
|
2966
|
+
eventId: z.string().optional().describe("Associated event ID"),
|
|
2967
|
+
metadata: JsonObject.optional().describe(
|
|
2968
|
+
"Arbitrary payload JSON (the real config lives here)"
|
|
2969
|
+
)
|
|
2970
|
+
}
|
|
2971
|
+
},
|
|
2972
|
+
async ({ id, ...rest }) => {
|
|
2973
|
+
try {
|
|
2974
|
+
const input = buildInput(rest, SIMPLE_ENTITY_INPUT_KEYS);
|
|
2975
|
+
const vars = { input };
|
|
2976
|
+
if (id !== void 0) vars.id = id;
|
|
2977
|
+
const data = await ctx.gql.workspace.request(s.upsertOp, vars);
|
|
2978
|
+
return jsonResult(data[s.upsertRoot]);
|
|
2979
|
+
} catch (error) {
|
|
2980
|
+
ctx.logger.error(`eventfullymanaged ${s.upsertSuffix} failed`, { error: String(error) });
|
|
2981
|
+
return errorResult(
|
|
2982
|
+
`Failed to upsert ${s.label.replace(/s$/, "")}: ${error instanceof Error ? error.message : String(error)}`
|
|
2983
|
+
);
|
|
2984
|
+
}
|
|
2985
|
+
}
|
|
2986
|
+
);
|
|
2987
|
+
}
|
|
2988
|
+
server.registerTool(
|
|
2989
|
+
track(mcpToolName(ctx.productName, "dashboard_summary")),
|
|
2990
|
+
{
|
|
2991
|
+
title: "Dashboard Summary",
|
|
2992
|
+
description: "Headline event-management KPIs: total/active events, venues, registrations, attendees, sponsors, upcoming sessions, and the latest events.",
|
|
2993
|
+
inputSchema: {
|
|
2994
|
+
workspaceId: z.string().optional().describe("Optional workspace ID (defaults to the gateway-bound workspace)")
|
|
2995
|
+
}
|
|
2996
|
+
},
|
|
2997
|
+
async (args) => {
|
|
2998
|
+
try {
|
|
2999
|
+
const data = await ctx.gql.workspace.request(DASHBOARD_SUMMARY, listVars(args, ["workspaceId"]));
|
|
3000
|
+
return jsonResult(data.eventfullyManagedDashboardSummary);
|
|
3001
|
+
} catch (error) {
|
|
3002
|
+
ctx.logger.error("eventfullymanaged dashboard_summary failed", { error: String(error) });
|
|
3003
|
+
return errorResult(
|
|
3004
|
+
`Failed to get dashboard summary: ${error instanceof Error ? error.message : String(error)}`
|
|
3005
|
+
);
|
|
3006
|
+
}
|
|
3007
|
+
}
|
|
3008
|
+
);
|
|
3009
|
+
}
|
|
3010
|
+
|
|
3011
|
+
// src/modules/eventfullymanaged/resources.ts
|
|
3012
|
+
function registerEventfullymanagedResources(server, ctx, track) {
|
|
3013
|
+
const schemaUri = track(mcpResourceUri(ctx.productName, "schema"));
|
|
3014
|
+
const dashboardUri = track(mcpResourceUri(ctx.productName, "dashboard"));
|
|
3015
|
+
const eventsUri = track(mcpResourceUri(ctx.productName, "events"));
|
|
3016
|
+
const venuesUri = track(mcpResourceUri(ctx.productName, "venues"));
|
|
3017
|
+
server.registerResource(
|
|
3018
|
+
"eventfullymanaged-schema",
|
|
3019
|
+
schemaUri,
|
|
3020
|
+
{
|
|
3021
|
+
title: "Eventfullymanaged Domain Schema",
|
|
3022
|
+
description: "Overview of the Eventfullymanaged event-management domain \u2014 entities, free-form status conventions, and the per-entity tool surface.",
|
|
3023
|
+
mimeType: "text/plain"
|
|
3024
|
+
},
|
|
3025
|
+
async () => {
|
|
3026
|
+
ctx.logger.debug(`Resource ${schemaUri} requested`);
|
|
3027
|
+
const schema = `# Eventfullymanaged Domain (Overview)
|
|
3028
|
+
|
|
3029
|
+
End-to-end event-management platform: plan events, sell tickets, run check-in,
|
|
3030
|
+
power networking, and operate the show.
|
|
3031
|
+
|
|
3032
|
+
## Entities
|
|
3033
|
+
- EventfullyManagedEvent \u2014 the top-level event
|
|
3034
|
+
- EventfullyManagedVenue (+ EventfullyManagedFloorPlan) \u2014 physical venues + floor plans
|
|
3035
|
+
- EventfullyManagedEventSession \u2014 agenda/program sessions
|
|
3036
|
+
- EventfullyManagedSpeaker \u2014 speaker profiles
|
|
3037
|
+
- EventfullyManagedAttendee \u2014 attendee records
|
|
3038
|
+
- EventfullyManagedRegistration \u2014 ticket registrations
|
|
3039
|
+
- EventfullyManagedTicketType \u2014 ticket types (price as decimal string)
|
|
3040
|
+
- EventfullyManagedPromoCode \u2014 discount codes
|
|
3041
|
+
- EventfullyManagedSponsor \u2014 event sponsors
|
|
3042
|
+
- EventfullyManagedExhibitor \u2014 expo exhibitors
|
|
3043
|
+
- EventfullyManagedLead \u2014 captured booth/sponsor leads
|
|
3044
|
+
- EventfullyManagedCheckInStation / EventfullyManagedCheckInRecord \u2014 check-in kiosks + scans
|
|
3045
|
+
- EventfullyManagedNetworkingProfile / NetworkingMatch / Meeting \u2014 attendee networking
|
|
3046
|
+
- "Simple entity" surfaces (upsertable): announcements, automation rules,
|
|
3047
|
+
communication campaigns, workflow templates, analytics snapshots
|
|
3048
|
+
|
|
3049
|
+
## Conventions
|
|
3050
|
+
- status / type / visibility / level / direction / method / discountType are
|
|
3051
|
+
FREE-FORM strings (no GraphQL enums) \u2014 use the values your event app expects.
|
|
3052
|
+
- Monetary fields (ticket price, promo discountValue, registration totalAmount)
|
|
3053
|
+
are DECIMAL STRINGS, not numbers.
|
|
3054
|
+
- The create and update mutations share one input type per entity, so update
|
|
3055
|
+
requires the same required fields as create (plus the id).
|
|
3056
|
+
- All operations run against the WORKSPACE gateway and are workspace-scoped via
|
|
3057
|
+
gateway headers; list queries also accept an OPTIONAL workspaceId filter.
|
|
3058
|
+
|
|
3059
|
+
## Tool groups
|
|
3060
|
+
events; venues + floor_plans; sessions + speakers (agenda); attendees +
|
|
3061
|
+
registrations; tickets + promo_codes; sponsors + exhibitors + leads; checkin
|
|
3062
|
+
(stations + records); networking (profiles + matches + meetings); content
|
|
3063
|
+
(announcements / automation_rules / communication_campaigns / workflow_templates
|
|
3064
|
+
/ analytics_snapshots) + dashboard_summary.
|
|
3065
|
+
`;
|
|
3066
|
+
return {
|
|
3067
|
+
contents: [{ uri: schemaUri, text: schema, mimeType: "text/plain" }]
|
|
3068
|
+
};
|
|
3069
|
+
}
|
|
3070
|
+
);
|
|
3071
|
+
server.registerResource(
|
|
3072
|
+
"eventfullymanaged-dashboard",
|
|
3073
|
+
dashboardUri,
|
|
3074
|
+
{
|
|
3075
|
+
title: "Eventfullymanaged Dashboard Summary",
|
|
3076
|
+
description: "Live headline KPIs (events, venues, registrations, attendees, sponsors, upcoming sessions, latest events).",
|
|
3077
|
+
mimeType: "application/json"
|
|
3078
|
+
},
|
|
3079
|
+
async () => {
|
|
3080
|
+
ctx.logger.debug(`Resource ${dashboardUri} requested`);
|
|
3081
|
+
try {
|
|
3082
|
+
const data = await ctx.gql.workspace.request(DASHBOARD_SUMMARY, {});
|
|
3083
|
+
return {
|
|
3084
|
+
contents: [
|
|
3085
|
+
{
|
|
3086
|
+
uri: dashboardUri,
|
|
3087
|
+
text: JSON.stringify(data.eventfullyManagedDashboardSummary, null, 2),
|
|
3088
|
+
mimeType: "application/json"
|
|
3089
|
+
}
|
|
3090
|
+
]
|
|
3091
|
+
};
|
|
3092
|
+
} catch (error) {
|
|
3093
|
+
return {
|
|
3094
|
+
contents: [
|
|
3095
|
+
{
|
|
3096
|
+
uri: dashboardUri,
|
|
3097
|
+
text: JSON.stringify({
|
|
3098
|
+
error: error instanceof Error ? error.message : String(error)
|
|
3099
|
+
}),
|
|
3100
|
+
mimeType: "application/json"
|
|
3101
|
+
}
|
|
3102
|
+
]
|
|
3103
|
+
};
|
|
3104
|
+
}
|
|
3105
|
+
}
|
|
3106
|
+
);
|
|
3107
|
+
server.registerResource(
|
|
3108
|
+
"eventfullymanaged-events",
|
|
3109
|
+
eventsUri,
|
|
3110
|
+
{
|
|
3111
|
+
title: "Eventfullymanaged Event Directory",
|
|
3112
|
+
description: "The first 50 events in the bound workspace.",
|
|
3113
|
+
mimeType: "application/json"
|
|
3114
|
+
},
|
|
3115
|
+
async () => {
|
|
3116
|
+
ctx.logger.debug(`Resource ${eventsUri} requested`);
|
|
3117
|
+
try {
|
|
3118
|
+
const data = await ctx.gql.workspace.request(
|
|
3119
|
+
LIST_EVENTS,
|
|
3120
|
+
{ limit: 50, offset: 0 }
|
|
3121
|
+
);
|
|
3122
|
+
return {
|
|
3123
|
+
contents: [
|
|
3124
|
+
{
|
|
3125
|
+
uri: eventsUri,
|
|
3126
|
+
text: JSON.stringify(data.eventfullyManagedEvents, null, 2),
|
|
3127
|
+
mimeType: "application/json"
|
|
3128
|
+
}
|
|
3129
|
+
]
|
|
3130
|
+
};
|
|
3131
|
+
} catch (error) {
|
|
3132
|
+
return {
|
|
3133
|
+
contents: [
|
|
3134
|
+
{
|
|
3135
|
+
uri: eventsUri,
|
|
3136
|
+
text: JSON.stringify({
|
|
3137
|
+
error: error instanceof Error ? error.message : String(error)
|
|
3138
|
+
}),
|
|
3139
|
+
mimeType: "application/json"
|
|
3140
|
+
}
|
|
3141
|
+
]
|
|
3142
|
+
};
|
|
3143
|
+
}
|
|
3144
|
+
}
|
|
3145
|
+
);
|
|
3146
|
+
server.registerResource(
|
|
3147
|
+
"eventfullymanaged-venues",
|
|
3148
|
+
venuesUri,
|
|
3149
|
+
{
|
|
3150
|
+
title: "Eventfullymanaged Venue Directory",
|
|
3151
|
+
description: "The first 50 venues in the bound workspace.",
|
|
3152
|
+
mimeType: "application/json"
|
|
3153
|
+
},
|
|
3154
|
+
async () => {
|
|
3155
|
+
ctx.logger.debug(`Resource ${venuesUri} requested`);
|
|
3156
|
+
try {
|
|
3157
|
+
const data = await ctx.gql.workspace.request(
|
|
3158
|
+
LIST_VENUES,
|
|
3159
|
+
{ limit: 50, offset: 0 }
|
|
3160
|
+
);
|
|
3161
|
+
return {
|
|
3162
|
+
contents: [
|
|
3163
|
+
{
|
|
3164
|
+
uri: venuesUri,
|
|
3165
|
+
text: JSON.stringify(data.eventfullyManagedVenues, null, 2),
|
|
3166
|
+
mimeType: "application/json"
|
|
3167
|
+
}
|
|
3168
|
+
]
|
|
3169
|
+
};
|
|
3170
|
+
} catch (error) {
|
|
3171
|
+
return {
|
|
3172
|
+
contents: [
|
|
3173
|
+
{
|
|
3174
|
+
uri: venuesUri,
|
|
3175
|
+
text: JSON.stringify({
|
|
3176
|
+
error: error instanceof Error ? error.message : String(error)
|
|
3177
|
+
}),
|
|
3178
|
+
mimeType: "application/json"
|
|
3179
|
+
}
|
|
3180
|
+
]
|
|
3181
|
+
};
|
|
3182
|
+
}
|
|
3183
|
+
}
|
|
3184
|
+
);
|
|
3185
|
+
}
|
|
3186
|
+
function registerEventfullymanagedPrompts(server, ctx, track) {
|
|
3187
|
+
const p = ctx.productName;
|
|
3188
|
+
const setupName = track(mcpPromptName(p, "event-setup"));
|
|
3189
|
+
const opsName = track(mcpPromptName(p, "event-ops"));
|
|
3190
|
+
server.registerPrompt(
|
|
3191
|
+
setupName,
|
|
3192
|
+
{
|
|
3193
|
+
title: "Event Setup",
|
|
3194
|
+
description: "Guide for standing up a new event end to end: create the event, pick/create a venue, build the agenda, define ticket types, and open registration.",
|
|
3195
|
+
argsSchema: {
|
|
3196
|
+
name: z.string().optional().describe("Event name"),
|
|
3197
|
+
type: z.string().optional().describe("Event type (conference, workshop, webinar, ...)")
|
|
3198
|
+
}
|
|
3199
|
+
},
|
|
3200
|
+
({ name, type }) => {
|
|
3201
|
+
ctx.logger.debug(`Prompt ${setupName} called`, { name, type });
|
|
3202
|
+
const nameNote = name ? `Use the event name "${name}".` : "Ask the user for the event name.";
|
|
3203
|
+
const typeNote = type ? `Use type ${type}.` : "Help the user pick an event type.";
|
|
3204
|
+
return {
|
|
3205
|
+
messages: [
|
|
3206
|
+
{
|
|
3207
|
+
role: "user",
|
|
3208
|
+
content: {
|
|
3209
|
+
type: "text",
|
|
3210
|
+
text: `Help me set up a new Eventfullymanaged event.
|
|
3211
|
+
|
|
3212
|
+
1. **Create Event**: Use ${p}_events_create. ${nameNote} ${typeNote} Provide a timezone (IANA, e.g. "Asia/Kolkata") and startAt/endAt ISO-8601 timestamps.
|
|
3213
|
+
2. **Venue**: Use ${p}_venues_list to reuse an existing venue, or ${p}_venues_create for a new one. Optionally add a layout with ${p}_floor_plans_create.
|
|
3214
|
+
3. **Agenda**: Add program sessions with ${p}_sessions_create (eventId, title, sessionType, startsAt/endsAt) and speakers with ${p}_speakers_create.
|
|
3215
|
+
4. **Tickets**: Define ticket types with ${p}_tickets_create (price is a decimal string). Optionally add discounts with ${p}_promo_codes_create.
|
|
3216
|
+
5. **Sponsors / Exhibitors**: Use ${p}_sponsors_create and ${p}_exhibitors_create as needed.
|
|
3217
|
+
6. **Open Registration**: Confirm ticket types are isActive, then publish the event via ${p}_events_update with status="published".
|
|
3218
|
+
|
|
3219
|
+
Show results at each step and confirm before publishing.`
|
|
3220
|
+
}
|
|
3221
|
+
}
|
|
3222
|
+
]
|
|
3223
|
+
};
|
|
3224
|
+
}
|
|
3225
|
+
);
|
|
3226
|
+
server.registerPrompt(
|
|
3227
|
+
opsName,
|
|
3228
|
+
{
|
|
3229
|
+
title: "Event Operations",
|
|
3230
|
+
description: "Live event-day operations: review KPIs, manage registrations + check-in, drive sponsor/exhibitor lead capture, and power attendee networking.",
|
|
3231
|
+
argsSchema: {
|
|
3232
|
+
eventId: z.string().optional().describe("Event ID to operate")
|
|
3233
|
+
}
|
|
3234
|
+
},
|
|
3235
|
+
({ eventId }) => {
|
|
3236
|
+
ctx.logger.debug(`Prompt ${opsName} called`, { eventId });
|
|
3237
|
+
const eventNote = eventId ? `Operate event "${eventId}".` : `First list events with ${p}_events_list and pick one.`;
|
|
3238
|
+
return {
|
|
3239
|
+
messages: [
|
|
3240
|
+
{
|
|
3241
|
+
role: "user",
|
|
3242
|
+
content: {
|
|
3243
|
+
type: "text",
|
|
3244
|
+
text: `Run live Eventfullymanaged operations. ${eventNote}
|
|
3245
|
+
|
|
3246
|
+
1. **KPIs**: Use ${p}_dashboard_summary for headline numbers.
|
|
3247
|
+
2. **Registrations**: Use ${p}_registrations_list (filter by eventId) to track sign-ups; create walk-ins with ${p}_attendees_create + ${p}_registrations_create.
|
|
3248
|
+
3. **Check-in**: Ensure stations are live with ${p}_checkin_stations_list; log scans with ${p}_checkin_records_create (direction "in"/"out").
|
|
3249
|
+
4. **Sponsors & Leads**: Capture booth leads with ${p}_leads_create and progress them with ${p}_leads_update (status/score).
|
|
3250
|
+
5. **Networking**: Review ${p}_matches_list and confirm 1:1s with ${p}_meetings_update.
|
|
3251
|
+
6. **Comms**: Push updates by upserting an announcement with ${p}_announcements_upsert.
|
|
3252
|
+
|
|
3253
|
+
Summarize what needs attention after each step.`
|
|
3254
|
+
}
|
|
3255
|
+
}
|
|
3256
|
+
]
|
|
3257
|
+
};
|
|
3258
|
+
}
|
|
3259
|
+
);
|
|
3260
|
+
}
|
|
3261
|
+
|
|
3262
|
+
// src/modules/eventfullymanaged/index.ts
|
|
3263
|
+
var eventfullymanagedModule = {
|
|
3264
|
+
id: "eventfullymanaged",
|
|
3265
|
+
version: "0.0.1",
|
|
3266
|
+
displayName: "Eventfullymanaged",
|
|
3267
|
+
dependsOn: ["auth"],
|
|
3268
|
+
capabilities: { tools: {}, resources: {}, prompts: {} },
|
|
3269
|
+
register(server, ctx) {
|
|
3270
|
+
const tools = [];
|
|
3271
|
+
const resources = [];
|
|
3272
|
+
const prompts = [];
|
|
3273
|
+
const trackTool = (n) => {
|
|
3274
|
+
tools.push(n);
|
|
3275
|
+
return n;
|
|
3276
|
+
};
|
|
3277
|
+
const trackResource = (uri) => {
|
|
3278
|
+
resources.push(uri);
|
|
3279
|
+
return uri;
|
|
3280
|
+
};
|
|
3281
|
+
const trackPrompt = (n) => {
|
|
3282
|
+
prompts.push(n);
|
|
3283
|
+
return n;
|
|
3284
|
+
};
|
|
3285
|
+
registerEventTools(server, ctx, trackTool);
|
|
3286
|
+
registerVenueTools(server, ctx, trackTool);
|
|
3287
|
+
registerAgendaTools(server, ctx, trackTool);
|
|
3288
|
+
registerAttendeeTools(server, ctx, trackTool);
|
|
3289
|
+
registerTicketingTools(server, ctx, trackTool);
|
|
3290
|
+
registerSponsorshipTools(server, ctx, trackTool);
|
|
3291
|
+
registerCheckinTools(server, ctx, trackTool);
|
|
3292
|
+
registerNetworkingTools(server, ctx, trackTool);
|
|
3293
|
+
registerContentTools(server, ctx, trackTool);
|
|
3294
|
+
registerEventfullymanagedResources(server, ctx, trackResource);
|
|
3295
|
+
registerEventfullymanagedPrompts(server, ctx, trackPrompt);
|
|
3296
|
+
return { tools, resources, prompts };
|
|
3297
|
+
}
|
|
3298
|
+
};
|
|
3299
|
+
var eventfullymanaged_default = eventfullymanagedModule;
|
|
3300
|
+
|
|
3301
|
+
export { eventfullymanaged_default as default };
|
|
3302
|
+
//# sourceMappingURL=index.js.map
|
|
3303
|
+
//# sourceMappingURL=index.js.map
|