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