@coldbirds/mcp-server 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,3018 @@
1
+ {
2
+ "name": "coldbirds-sequence",
3
+ "version": "1.0.0",
4
+ "description": "Control your cold email campaigns, contacts, and mailboxes from AI assistants like Claude Desktop, Cursor, and Windsurf.",
5
+ "command": "npx",
6
+ "args": [
7
+ "-y",
8
+ "@coldbirds/mcp-server"
9
+ ],
10
+ "capabilities": {
11
+ "tools": {
12
+ "listChanged": false
13
+ }
14
+ },
15
+ "env": {
16
+ "COLDBIRDS_API_KEY": {
17
+ "description": "Your API key from Settings → API Keys (format: sk_live_...)",
18
+ "required": true
19
+ },
20
+ "COLDBIRDS_API_URL": {
21
+ "description": "API base URL (defaults to https://sequencer.coldbirds.com)",
22
+ "required": false,
23
+ "default": "https://sequencer.coldbirds.com"
24
+ }
25
+ },
26
+ "tools": [
27
+ {
28
+ "name": "get_account",
29
+ "title": "Get Account",
30
+ "description": "Returns the authenticated account (name, email, ID) for the current API key.",
31
+ "inputSchema": {
32
+ "type": "object",
33
+ "additionalProperties": false
34
+ },
35
+ "outputSchema": {
36
+ "type": "object",
37
+ "properties": {
38
+ "id": {
39
+ "type": "string",
40
+ "description": "Account ID."
41
+ },
42
+ "name": {
43
+ "type": [
44
+ "string",
45
+ "null"
46
+ ],
47
+ "description": "Display name."
48
+ },
49
+ "email": {
50
+ "type": "string",
51
+ "format": "email",
52
+ "description": "Account email."
53
+ }
54
+ },
55
+ "required": [
56
+ "id",
57
+ "email"
58
+ ]
59
+ },
60
+ "annotations": {
61
+ "readOnlyHint": true,
62
+ "destructiveHint": false,
63
+ "idempotentHint": true,
64
+ "openWorldHint": false
65
+ },
66
+ "_http": {
67
+ "method": "GET",
68
+ "path": "/api/v1/me"
69
+ }
70
+ },
71
+ {
72
+ "name": "list_campaigns",
73
+ "title": "List Campaigns",
74
+ "description": "Lists email campaigns for the account. Supports filtering by status and cursor-based pagination. Pass the returned nextCursor to fetch the next page.",
75
+ "inputSchema": {
76
+ "type": "object",
77
+ "properties": {
78
+ "status": {
79
+ "type": "string",
80
+ "enum": [
81
+ "DRAFT",
82
+ "ACTIVE",
83
+ "PAUSED",
84
+ "COMPLETED",
85
+ "ARCHIVED"
86
+ ],
87
+ "description": "Filter campaigns by status."
88
+ },
89
+ "cursor": {
90
+ "type": "string",
91
+ "description": "Pagination cursor from the previous response's nextCursor."
92
+ },
93
+ "limit": {
94
+ "type": "integer",
95
+ "minimum": 1,
96
+ "maximum": 100,
97
+ "default": 25,
98
+ "description": "Number of campaigns to return per page."
99
+ }
100
+ },
101
+ "additionalProperties": false
102
+ },
103
+ "outputSchema": {
104
+ "type": "object",
105
+ "properties": {
106
+ "data": {
107
+ "type": "array",
108
+ "items": {
109
+ "type": "object",
110
+ "properties": {
111
+ "id": {
112
+ "type": "string"
113
+ },
114
+ "name": {
115
+ "type": "string"
116
+ },
117
+ "status": {
118
+ "type": "string",
119
+ "enum": [
120
+ "DRAFT",
121
+ "ACTIVE",
122
+ "PAUSED",
123
+ "COMPLETED",
124
+ "ARCHIVED"
125
+ ]
126
+ },
127
+ "createdAt": {
128
+ "type": "string",
129
+ "format": "date-time"
130
+ },
131
+ "updatedAt": {
132
+ "type": "string",
133
+ "format": "date-time"
134
+ }
135
+ },
136
+ "required": [
137
+ "id",
138
+ "name",
139
+ "status",
140
+ "createdAt",
141
+ "updatedAt"
142
+ ]
143
+ }
144
+ },
145
+ "pagination": {
146
+ "type": "object",
147
+ "properties": {
148
+ "nextCursor": {
149
+ "type": [
150
+ "string",
151
+ "null"
152
+ ],
153
+ "description": "Pass this value as the cursor parameter to fetch the next page. Null when no more pages."
154
+ },
155
+ "hasMore": {
156
+ "type": "boolean"
157
+ }
158
+ },
159
+ "required": [
160
+ "nextCursor",
161
+ "hasMore"
162
+ ]
163
+ }
164
+ },
165
+ "required": [
166
+ "data"
167
+ ]
168
+ },
169
+ "annotations": {
170
+ "readOnlyHint": true,
171
+ "destructiveHint": false,
172
+ "idempotentHint": true,
173
+ "openWorldHint": false
174
+ },
175
+ "_http": {
176
+ "method": "GET",
177
+ "path": "/api/v1/campaigns"
178
+ }
179
+ },
180
+ {
181
+ "name": "get_campaign",
182
+ "title": "Get Campaign",
183
+ "description": "Returns full details of a single campaign by ID including configuration, steps count, and scheduling settings.",
184
+ "inputSchema": {
185
+ "type": "object",
186
+ "properties": {
187
+ "id": {
188
+ "type": "string",
189
+ "description": "Campaign ID."
190
+ }
191
+ },
192
+ "required": [
193
+ "id"
194
+ ],
195
+ "additionalProperties": false
196
+ },
197
+ "outputSchema": {
198
+ "type": "object",
199
+ "properties": {
200
+ "id": {
201
+ "type": "string"
202
+ },
203
+ "name": {
204
+ "type": "string"
205
+ },
206
+ "status": {
207
+ "type": "string",
208
+ "enum": [
209
+ "DRAFT",
210
+ "ACTIVE",
211
+ "PAUSED",
212
+ "COMPLETED",
213
+ "ARCHIVED"
214
+ ]
215
+ },
216
+ "stepsCount": {
217
+ "type": "integer"
218
+ },
219
+ "dailyLimit": {
220
+ "type": "integer"
221
+ },
222
+ "trackOpens": {
223
+ "type": "boolean"
224
+ },
225
+ "trackClicks": {
226
+ "type": "boolean"
227
+ },
228
+ "tags": {
229
+ "type": "array",
230
+ "items": {
231
+ "type": "string"
232
+ }
233
+ },
234
+ "createdAt": {
235
+ "type": "string",
236
+ "format": "date-time"
237
+ },
238
+ "updatedAt": {
239
+ "type": "string",
240
+ "format": "date-time"
241
+ }
242
+ },
243
+ "required": [
244
+ "id",
245
+ "name",
246
+ "status",
247
+ "createdAt"
248
+ ]
249
+ },
250
+ "annotations": {
251
+ "readOnlyHint": true,
252
+ "destructiveHint": false,
253
+ "idempotentHint": true,
254
+ "openWorldHint": false
255
+ },
256
+ "_http": {
257
+ "method": "GET",
258
+ "path": "/api/v1/campaigns/{id}"
259
+ }
260
+ },
261
+ {
262
+ "name": "get_campaign_stats",
263
+ "title": "Get Campaign Stats",
264
+ "description": "Returns aggregate email performance metrics for a campaign: sent, opened, clicked, replied, bounced counts and calculated rates.",
265
+ "inputSchema": {
266
+ "type": "object",
267
+ "properties": {
268
+ "id": {
269
+ "type": "string",
270
+ "description": "Campaign ID."
271
+ }
272
+ },
273
+ "required": [
274
+ "id"
275
+ ],
276
+ "additionalProperties": false
277
+ },
278
+ "outputSchema": {
279
+ "type": "object",
280
+ "properties": {
281
+ "campaignId": {
282
+ "type": "string"
283
+ },
284
+ "sent": {
285
+ "type": "integer",
286
+ "description": "Total emails sent."
287
+ },
288
+ "opened": {
289
+ "type": "integer",
290
+ "description": "Unique opens."
291
+ },
292
+ "clicked": {
293
+ "type": "integer",
294
+ "description": "Unique clicks."
295
+ },
296
+ "replied": {
297
+ "type": "integer",
298
+ "description": "Reply count."
299
+ },
300
+ "bounced": {
301
+ "type": "integer",
302
+ "description": "Bounce count."
303
+ },
304
+ "openRate": {
305
+ "type": "number",
306
+ "description": "Open rate as percentage (0-100)."
307
+ },
308
+ "clickRate": {
309
+ "type": "number",
310
+ "description": "Click rate as percentage (0-100)."
311
+ },
312
+ "replyRate": {
313
+ "type": "number",
314
+ "description": "Reply rate as percentage (0-100)."
315
+ },
316
+ "bounceRate": {
317
+ "type": "number",
318
+ "description": "Bounce rate as percentage (0-100)."
319
+ }
320
+ },
321
+ "required": [
322
+ "campaignId",
323
+ "sent",
324
+ "opened",
325
+ "clicked",
326
+ "replied",
327
+ "bounced",
328
+ "openRate",
329
+ "clickRate",
330
+ "replyRate",
331
+ "bounceRate"
332
+ ]
333
+ },
334
+ "annotations": {
335
+ "readOnlyHint": true,
336
+ "destructiveHint": false,
337
+ "idempotentHint": true,
338
+ "openWorldHint": false
339
+ },
340
+ "_http": {
341
+ "method": "GET",
342
+ "path": "/api/v1/campaigns/{id}/stats"
343
+ }
344
+ },
345
+ {
346
+ "name": "pause_campaign",
347
+ "title": "Pause Campaign",
348
+ "description": "Transitions an ACTIVE campaign to PAUSED. All pending sends are held until resumed.",
349
+ "inputSchema": {
350
+ "type": "object",
351
+ "properties": {
352
+ "id": {
353
+ "type": "string",
354
+ "description": "Campaign ID to pause."
355
+ }
356
+ },
357
+ "required": [
358
+ "id"
359
+ ],
360
+ "additionalProperties": false
361
+ },
362
+ "outputSchema": {
363
+ "type": "object",
364
+ "properties": {
365
+ "id": {
366
+ "type": "string"
367
+ },
368
+ "status": {
369
+ "type": "string",
370
+ "enum": [
371
+ "PAUSED"
372
+ ]
373
+ }
374
+ },
375
+ "required": [
376
+ "id",
377
+ "status"
378
+ ]
379
+ },
380
+ "annotations": {
381
+ "readOnlyHint": false,
382
+ "destructiveHint": false,
383
+ "idempotentHint": true,
384
+ "openWorldHint": false
385
+ },
386
+ "_http": {
387
+ "method": "POST",
388
+ "path": "/api/v1/campaigns/{id}/pause"
389
+ }
390
+ },
391
+ {
392
+ "name": "resume_campaign",
393
+ "title": "Resume Campaign",
394
+ "description": "Transitions a PAUSED campaign back to ACTIVE. Sending resumes from where it left off.",
395
+ "inputSchema": {
396
+ "type": "object",
397
+ "properties": {
398
+ "id": {
399
+ "type": "string",
400
+ "description": "Campaign ID to resume."
401
+ }
402
+ },
403
+ "required": [
404
+ "id"
405
+ ],
406
+ "additionalProperties": false
407
+ },
408
+ "outputSchema": {
409
+ "type": "object",
410
+ "properties": {
411
+ "id": {
412
+ "type": "string"
413
+ },
414
+ "status": {
415
+ "type": "string",
416
+ "enum": [
417
+ "ACTIVE"
418
+ ]
419
+ }
420
+ },
421
+ "required": [
422
+ "id",
423
+ "status"
424
+ ]
425
+ },
426
+ "annotations": {
427
+ "readOnlyHint": false,
428
+ "destructiveHint": false,
429
+ "idempotentHint": true,
430
+ "openWorldHint": false
431
+ },
432
+ "_http": {
433
+ "method": "POST",
434
+ "path": "/api/v1/campaigns/{id}/resume"
435
+ }
436
+ },
437
+ {
438
+ "name": "duplicate_campaign",
439
+ "title": "Duplicate Campaign",
440
+ "description": "Creates a DRAFT copy of an existing campaign including all primary steps. Variants are not copied.",
441
+ "inputSchema": {
442
+ "type": "object",
443
+ "properties": {
444
+ "id": {
445
+ "type": "string",
446
+ "description": "Campaign ID to duplicate."
447
+ }
448
+ },
449
+ "required": [
450
+ "id"
451
+ ],
452
+ "additionalProperties": false
453
+ },
454
+ "outputSchema": {
455
+ "type": "object",
456
+ "properties": {
457
+ "id": {
458
+ "type": "string",
459
+ "description": "New campaign ID."
460
+ },
461
+ "name": {
462
+ "type": "string",
463
+ "description": "Name with ' (copy)' suffix."
464
+ },
465
+ "status": {
466
+ "type": "string",
467
+ "enum": [
468
+ "DRAFT"
469
+ ]
470
+ },
471
+ "createdAt": {
472
+ "type": "string",
473
+ "format": "date-time"
474
+ }
475
+ },
476
+ "required": [
477
+ "id",
478
+ "name",
479
+ "status",
480
+ "createdAt"
481
+ ]
482
+ },
483
+ "annotations": {
484
+ "readOnlyHint": false,
485
+ "destructiveHint": false,
486
+ "idempotentHint": false,
487
+ "openWorldHint": false
488
+ },
489
+ "_http": {
490
+ "method": "POST",
491
+ "path": "/api/v1/campaigns/{id}/duplicate"
492
+ }
493
+ },
494
+ {
495
+ "name": "list_contacts",
496
+ "title": "List Contacts",
497
+ "description": "Lists contacts with optional filtering by email substring or status. Supports cursor-based pagination. Pass the returned nextCursor to fetch the next page.",
498
+ "inputSchema": {
499
+ "type": "object",
500
+ "properties": {
501
+ "email": {
502
+ "type": "string",
503
+ "description": "Case-insensitive email substring filter."
504
+ },
505
+ "status": {
506
+ "type": "string",
507
+ "description": "Filter contacts by status."
508
+ },
509
+ "cursor": {
510
+ "type": "string",
511
+ "description": "Pagination cursor from the previous response."
512
+ },
513
+ "limit": {
514
+ "type": "integer",
515
+ "minimum": 1,
516
+ "maximum": 100,
517
+ "default": 25,
518
+ "description": "Number of contacts to return per page."
519
+ }
520
+ },
521
+ "additionalProperties": false
522
+ },
523
+ "outputSchema": {
524
+ "type": "object",
525
+ "properties": {
526
+ "data": {
527
+ "type": "array",
528
+ "items": {
529
+ "type": "object",
530
+ "properties": {
531
+ "id": {
532
+ "type": "string"
533
+ },
534
+ "email": {
535
+ "type": "string",
536
+ "format": "email"
537
+ },
538
+ "firstName": {
539
+ "type": [
540
+ "string",
541
+ "null"
542
+ ]
543
+ },
544
+ "lastName": {
545
+ "type": [
546
+ "string",
547
+ "null"
548
+ ]
549
+ },
550
+ "company": {
551
+ "type": [
552
+ "string",
553
+ "null"
554
+ ]
555
+ },
556
+ "title": {
557
+ "type": [
558
+ "string",
559
+ "null"
560
+ ]
561
+ },
562
+ "status": {
563
+ "type": "string"
564
+ },
565
+ "customFields": {
566
+ "type": [
567
+ "object",
568
+ "null"
569
+ ],
570
+ "additionalProperties": true
571
+ },
572
+ "createdAt": {
573
+ "type": "string",
574
+ "format": "date-time"
575
+ },
576
+ "updatedAt": {
577
+ "type": "string",
578
+ "format": "date-time"
579
+ }
580
+ },
581
+ "required": [
582
+ "id",
583
+ "email",
584
+ "status",
585
+ "createdAt",
586
+ "updatedAt"
587
+ ]
588
+ }
589
+ },
590
+ "pagination": {
591
+ "type": "object",
592
+ "properties": {
593
+ "nextCursor": {
594
+ "type": [
595
+ "string",
596
+ "null"
597
+ ],
598
+ "description": "Pass this value as cursor to fetch the next page. Null when no more pages."
599
+ },
600
+ "hasMore": {
601
+ "type": "boolean"
602
+ }
603
+ },
604
+ "required": [
605
+ "nextCursor",
606
+ "hasMore"
607
+ ]
608
+ }
609
+ },
610
+ "required": [
611
+ "data",
612
+ "pagination"
613
+ ]
614
+ },
615
+ "annotations": {
616
+ "readOnlyHint": true,
617
+ "destructiveHint": false,
618
+ "idempotentHint": true,
619
+ "openWorldHint": false
620
+ },
621
+ "_http": {
622
+ "method": "GET",
623
+ "path": "/api/v1/contacts"
624
+ }
625
+ },
626
+ {
627
+ "name": "get_contact",
628
+ "title": "Get Contact",
629
+ "description": "Returns a single contact by ID including all fields and custom fields.",
630
+ "inputSchema": {
631
+ "type": "object",
632
+ "properties": {
633
+ "id": {
634
+ "type": "string",
635
+ "description": "Contact ID."
636
+ }
637
+ },
638
+ "required": [
639
+ "id"
640
+ ],
641
+ "additionalProperties": false
642
+ },
643
+ "outputSchema": {
644
+ "type": "object",
645
+ "properties": {
646
+ "id": {
647
+ "type": "string"
648
+ },
649
+ "email": {
650
+ "type": "string",
651
+ "format": "email"
652
+ },
653
+ "firstName": {
654
+ "type": [
655
+ "string",
656
+ "null"
657
+ ]
658
+ },
659
+ "lastName": {
660
+ "type": [
661
+ "string",
662
+ "null"
663
+ ]
664
+ },
665
+ "company": {
666
+ "type": [
667
+ "string",
668
+ "null"
669
+ ]
670
+ },
671
+ "title": {
672
+ "type": [
673
+ "string",
674
+ "null"
675
+ ]
676
+ },
677
+ "status": {
678
+ "type": "string"
679
+ },
680
+ "customFields": {
681
+ "type": [
682
+ "object",
683
+ "null"
684
+ ],
685
+ "additionalProperties": true
686
+ },
687
+ "createdAt": {
688
+ "type": "string",
689
+ "format": "date-time"
690
+ },
691
+ "updatedAt": {
692
+ "type": "string",
693
+ "format": "date-time"
694
+ }
695
+ },
696
+ "required": [
697
+ "id",
698
+ "email",
699
+ "status",
700
+ "createdAt",
701
+ "updatedAt"
702
+ ]
703
+ },
704
+ "annotations": {
705
+ "readOnlyHint": true,
706
+ "destructiveHint": false,
707
+ "idempotentHint": true,
708
+ "openWorldHint": false
709
+ },
710
+ "_http": {
711
+ "method": "GET",
712
+ "path": "/api/v1/contacts/{id}"
713
+ }
714
+ },
715
+ {
716
+ "name": "create_contact",
717
+ "title": "Create Contact",
718
+ "description": "Creates a single contact. Returns 409 if a contact with the same email already exists.",
719
+ "inputSchema": {
720
+ "type": "object",
721
+ "properties": {
722
+ "email": {
723
+ "type": "string",
724
+ "format": "email",
725
+ "description": "Contact email address. Must be unique."
726
+ },
727
+ "firstName": {
728
+ "type": "string",
729
+ "description": "First name."
730
+ },
731
+ "lastName": {
732
+ "type": "string",
733
+ "description": "Last name."
734
+ },
735
+ "company": {
736
+ "type": "string",
737
+ "description": "Company name."
738
+ },
739
+ "title": {
740
+ "type": "string",
741
+ "description": "Job title."
742
+ },
743
+ "customFields": {
744
+ "type": "object",
745
+ "additionalProperties": true,
746
+ "description": "Arbitrary key-value custom fields."
747
+ }
748
+ },
749
+ "required": [
750
+ "email"
751
+ ],
752
+ "additionalProperties": false
753
+ },
754
+ "outputSchema": {
755
+ "type": "object",
756
+ "properties": {
757
+ "id": {
758
+ "type": "string"
759
+ },
760
+ "email": {
761
+ "type": "string",
762
+ "format": "email"
763
+ },
764
+ "firstName": {
765
+ "type": [
766
+ "string",
767
+ "null"
768
+ ]
769
+ },
770
+ "lastName": {
771
+ "type": [
772
+ "string",
773
+ "null"
774
+ ]
775
+ },
776
+ "company": {
777
+ "type": [
778
+ "string",
779
+ "null"
780
+ ]
781
+ },
782
+ "title": {
783
+ "type": [
784
+ "string",
785
+ "null"
786
+ ]
787
+ },
788
+ "status": {
789
+ "type": "string"
790
+ },
791
+ "createdAt": {
792
+ "type": "string",
793
+ "format": "date-time"
794
+ },
795
+ "updatedAt": {
796
+ "type": "string",
797
+ "format": "date-time"
798
+ }
799
+ },
800
+ "required": [
801
+ "id",
802
+ "email",
803
+ "status",
804
+ "createdAt",
805
+ "updatedAt"
806
+ ]
807
+ },
808
+ "annotations": {
809
+ "readOnlyHint": false,
810
+ "destructiveHint": false,
811
+ "idempotentHint": false,
812
+ "openWorldHint": false
813
+ },
814
+ "_http": {
815
+ "method": "POST",
816
+ "path": "/api/v1/contacts"
817
+ }
818
+ },
819
+ {
820
+ "name": "update_contact",
821
+ "title": "Update Contact",
822
+ "description": "Updates mutable fields on a contact. Only provided fields are changed; omitted fields are left untouched.",
823
+ "inputSchema": {
824
+ "type": "object",
825
+ "properties": {
826
+ "id": {
827
+ "type": "string",
828
+ "description": "Contact ID to update."
829
+ },
830
+ "firstName": {
831
+ "type": [
832
+ "string",
833
+ "null"
834
+ ],
835
+ "description": "New first name, or null to clear."
836
+ },
837
+ "lastName": {
838
+ "type": [
839
+ "string",
840
+ "null"
841
+ ],
842
+ "description": "New last name, or null to clear."
843
+ },
844
+ "company": {
845
+ "type": [
846
+ "string",
847
+ "null"
848
+ ],
849
+ "description": "New company, or null to clear."
850
+ },
851
+ "title": {
852
+ "type": [
853
+ "string",
854
+ "null"
855
+ ],
856
+ "description": "New job title, or null to clear."
857
+ },
858
+ "customFields": {
859
+ "type": [
860
+ "object",
861
+ "null"
862
+ ],
863
+ "additionalProperties": true,
864
+ "description": "Replace custom fields object."
865
+ }
866
+ },
867
+ "required": [
868
+ "id"
869
+ ],
870
+ "additionalProperties": false
871
+ },
872
+ "outputSchema": {
873
+ "type": "object",
874
+ "properties": {
875
+ "id": {
876
+ "type": "string"
877
+ },
878
+ "email": {
879
+ "type": "string",
880
+ "format": "email"
881
+ },
882
+ "firstName": {
883
+ "type": [
884
+ "string",
885
+ "null"
886
+ ]
887
+ },
888
+ "lastName": {
889
+ "type": [
890
+ "string",
891
+ "null"
892
+ ]
893
+ },
894
+ "company": {
895
+ "type": [
896
+ "string",
897
+ "null"
898
+ ]
899
+ },
900
+ "title": {
901
+ "type": [
902
+ "string",
903
+ "null"
904
+ ]
905
+ },
906
+ "status": {
907
+ "type": "string"
908
+ },
909
+ "customFields": {
910
+ "type": [
911
+ "object",
912
+ "null"
913
+ ],
914
+ "additionalProperties": true
915
+ },
916
+ "createdAt": {
917
+ "type": "string",
918
+ "format": "date-time"
919
+ },
920
+ "updatedAt": {
921
+ "type": "string",
922
+ "format": "date-time"
923
+ }
924
+ },
925
+ "required": [
926
+ "id",
927
+ "email",
928
+ "status",
929
+ "createdAt",
930
+ "updatedAt"
931
+ ]
932
+ },
933
+ "annotations": {
934
+ "readOnlyHint": false,
935
+ "destructiveHint": false,
936
+ "idempotentHint": true,
937
+ "openWorldHint": false
938
+ },
939
+ "_http": {
940
+ "method": "PATCH",
941
+ "path": "/api/v1/contacts/{id}"
942
+ }
943
+ },
944
+ {
945
+ "name": "delete_contact",
946
+ "title": "Delete Contact",
947
+ "description": "Soft-deletes a contact. The contact is hidden from lists but retained internally for audit. Returns 204 with no body on success.",
948
+ "inputSchema": {
949
+ "type": "object",
950
+ "properties": {
951
+ "id": {
952
+ "type": "string",
953
+ "description": "Contact ID to delete."
954
+ }
955
+ },
956
+ "required": [
957
+ "id"
958
+ ],
959
+ "additionalProperties": false
960
+ },
961
+ "annotations": {
962
+ "readOnlyHint": false,
963
+ "destructiveHint": true,
964
+ "idempotentHint": true,
965
+ "openWorldHint": false
966
+ },
967
+ "_http": {
968
+ "method": "DELETE",
969
+ "path": "/api/v1/contacts/{id}"
970
+ }
971
+ },
972
+ {
973
+ "name": "list_enrollments",
974
+ "title": "List Campaign Enrollments",
975
+ "description": "Lists all enrollments (contact progressions) for a specific campaign.",
976
+ "inputSchema": {
977
+ "type": "object",
978
+ "properties": {
979
+ "campaignId": {
980
+ "type": "string",
981
+ "description": "Campaign ID to list enrollments for."
982
+ }
983
+ },
984
+ "required": [
985
+ "campaignId"
986
+ ],
987
+ "additionalProperties": false
988
+ },
989
+ "outputSchema": {
990
+ "type": "object",
991
+ "properties": {
992
+ "data": {
993
+ "type": "array",
994
+ "items": {
995
+ "type": "object",
996
+ "properties": {
997
+ "id": {
998
+ "type": "string"
999
+ },
1000
+ "campaignId": {
1001
+ "type": "string"
1002
+ },
1003
+ "contactId": {
1004
+ "type": "string"
1005
+ },
1006
+ "contactEmail": {
1007
+ "type": "string",
1008
+ "format": "email"
1009
+ },
1010
+ "status": {
1011
+ "type": "string"
1012
+ },
1013
+ "currentStep": {
1014
+ "type": "integer"
1015
+ },
1016
+ "scheduledAt": {
1017
+ "type": [
1018
+ "string",
1019
+ "null"
1020
+ ],
1021
+ "format": "date-time"
1022
+ },
1023
+ "createdAt": {
1024
+ "type": "string",
1025
+ "format": "date-time"
1026
+ },
1027
+ "updatedAt": {
1028
+ "type": "string",
1029
+ "format": "date-time"
1030
+ }
1031
+ },
1032
+ "required": [
1033
+ "id",
1034
+ "campaignId",
1035
+ "contactId",
1036
+ "status",
1037
+ "currentStep",
1038
+ "createdAt"
1039
+ ]
1040
+ }
1041
+ }
1042
+ },
1043
+ "required": [
1044
+ "data"
1045
+ ]
1046
+ },
1047
+ "annotations": {
1048
+ "readOnlyHint": true,
1049
+ "destructiveHint": false,
1050
+ "idempotentHint": true,
1051
+ "openWorldHint": false
1052
+ },
1053
+ "_http": {
1054
+ "method": "GET",
1055
+ "path": "/api/v1/campaigns/{campaignId}/enrollments"
1056
+ }
1057
+ },
1058
+ {
1059
+ "name": "enroll_contacts",
1060
+ "title": "Enroll Contact Lists",
1061
+ "description": "Enrolls all contacts from one or more contact lists into a campaign. Contacts already enrolled are skipped.",
1062
+ "inputSchema": {
1063
+ "type": "object",
1064
+ "properties": {
1065
+ "campaignId": {
1066
+ "type": "string",
1067
+ "description": "Campaign ID to enroll contacts into."
1068
+ },
1069
+ "listIds": {
1070
+ "type": "array",
1071
+ "items": {
1072
+ "type": "string"
1073
+ },
1074
+ "minItems": 1,
1075
+ "description": "Contact list IDs whose members will be enrolled."
1076
+ }
1077
+ },
1078
+ "required": [
1079
+ "campaignId",
1080
+ "listIds"
1081
+ ],
1082
+ "additionalProperties": false
1083
+ },
1084
+ "outputSchema": {
1085
+ "type": "object",
1086
+ "additionalProperties": true,
1087
+ "description": "Enrollment summary with counts of enrolled and skipped contacts."
1088
+ },
1089
+ "annotations": {
1090
+ "readOnlyHint": false,
1091
+ "destructiveHint": false,
1092
+ "idempotentHint": false,
1093
+ "openWorldHint": false
1094
+ },
1095
+ "_http": {
1096
+ "method": "POST",
1097
+ "path": "/api/v1/campaigns/{campaignId}/enrollments"
1098
+ }
1099
+ },
1100
+ {
1101
+ "name": "get_enrollment",
1102
+ "title": "Get Enrollment",
1103
+ "description": "Returns one enrollment by ID, including the contact email, current step, and scheduling info.",
1104
+ "inputSchema": {
1105
+ "type": "object",
1106
+ "properties": {
1107
+ "id": {
1108
+ "type": "string",
1109
+ "description": "Enrollment ID."
1110
+ }
1111
+ },
1112
+ "required": [
1113
+ "id"
1114
+ ],
1115
+ "additionalProperties": false
1116
+ },
1117
+ "outputSchema": {
1118
+ "type": "object",
1119
+ "properties": {
1120
+ "id": {
1121
+ "type": "string"
1122
+ },
1123
+ "campaignId": {
1124
+ "type": "string"
1125
+ },
1126
+ "contactId": {
1127
+ "type": "string"
1128
+ },
1129
+ "contactEmail": {
1130
+ "type": "string",
1131
+ "format": "email"
1132
+ },
1133
+ "status": {
1134
+ "type": "string"
1135
+ },
1136
+ "currentStep": {
1137
+ "type": "integer"
1138
+ },
1139
+ "scheduledAt": {
1140
+ "type": [
1141
+ "string",
1142
+ "null"
1143
+ ],
1144
+ "format": "date-time"
1145
+ },
1146
+ "createdAt": {
1147
+ "type": "string",
1148
+ "format": "date-time"
1149
+ },
1150
+ "updatedAt": {
1151
+ "type": "string",
1152
+ "format": "date-time"
1153
+ }
1154
+ },
1155
+ "required": [
1156
+ "id",
1157
+ "campaignId",
1158
+ "contactId",
1159
+ "contactEmail",
1160
+ "status",
1161
+ "currentStep",
1162
+ "createdAt",
1163
+ "updatedAt"
1164
+ ]
1165
+ },
1166
+ "annotations": {
1167
+ "readOnlyHint": true,
1168
+ "destructiveHint": false,
1169
+ "idempotentHint": true,
1170
+ "openWorldHint": false
1171
+ },
1172
+ "_http": {
1173
+ "method": "GET",
1174
+ "path": "/api/v1/enrollments/{id}"
1175
+ }
1176
+ },
1177
+ {
1178
+ "name": "pause_enrollment",
1179
+ "title": "Pause Enrollment",
1180
+ "description": "Pauses an ACTIVE enrollment. The contact will not receive further emails until resumed.",
1181
+ "inputSchema": {
1182
+ "type": "object",
1183
+ "properties": {
1184
+ "id": {
1185
+ "type": "string",
1186
+ "description": "Enrollment ID to pause."
1187
+ }
1188
+ },
1189
+ "required": [
1190
+ "id"
1191
+ ],
1192
+ "additionalProperties": false
1193
+ },
1194
+ "outputSchema": {
1195
+ "type": "object",
1196
+ "properties": {
1197
+ "id": {
1198
+ "type": "string"
1199
+ },
1200
+ "status": {
1201
+ "type": "string",
1202
+ "enum": [
1203
+ "PAUSED"
1204
+ ]
1205
+ }
1206
+ },
1207
+ "required": [
1208
+ "id",
1209
+ "status"
1210
+ ]
1211
+ },
1212
+ "annotations": {
1213
+ "readOnlyHint": false,
1214
+ "destructiveHint": false,
1215
+ "idempotentHint": true,
1216
+ "openWorldHint": false
1217
+ },
1218
+ "_http": {
1219
+ "method": "POST",
1220
+ "path": "/api/v1/enrollments/{id}/pause"
1221
+ }
1222
+ },
1223
+ {
1224
+ "name": "resume_enrollment",
1225
+ "title": "Resume Enrollment",
1226
+ "description": "Resumes a PAUSED enrollment. The contact will continue receiving emails from the next scheduled step.",
1227
+ "inputSchema": {
1228
+ "type": "object",
1229
+ "properties": {
1230
+ "id": {
1231
+ "type": "string",
1232
+ "description": "Enrollment ID to resume."
1233
+ }
1234
+ },
1235
+ "required": [
1236
+ "id"
1237
+ ],
1238
+ "additionalProperties": false
1239
+ },
1240
+ "outputSchema": {
1241
+ "type": "object",
1242
+ "properties": {
1243
+ "id": {
1244
+ "type": "string"
1245
+ },
1246
+ "status": {
1247
+ "type": "string",
1248
+ "enum": [
1249
+ "ACTIVE"
1250
+ ]
1251
+ }
1252
+ },
1253
+ "required": [
1254
+ "id",
1255
+ "status"
1256
+ ]
1257
+ },
1258
+ "annotations": {
1259
+ "readOnlyHint": false,
1260
+ "destructiveHint": false,
1261
+ "idempotentHint": true,
1262
+ "openWorldHint": false
1263
+ },
1264
+ "_http": {
1265
+ "method": "POST",
1266
+ "path": "/api/v1/enrollments/{id}/resume"
1267
+ }
1268
+ },
1269
+ {
1270
+ "name": "list_mailboxes",
1271
+ "title": "List Mailboxes",
1272
+ "description": "Lists all sender mailboxes connected to the account.",
1273
+ "inputSchema": {
1274
+ "type": "object",
1275
+ "additionalProperties": false
1276
+ },
1277
+ "outputSchema": {
1278
+ "type": "object",
1279
+ "properties": {
1280
+ "data": {
1281
+ "type": "array",
1282
+ "items": {
1283
+ "type": "object",
1284
+ "properties": {
1285
+ "id": {
1286
+ "type": "string"
1287
+ },
1288
+ "emailAddress": {
1289
+ "type": "string",
1290
+ "format": "email"
1291
+ },
1292
+ "displayName": {
1293
+ "type": [
1294
+ "string",
1295
+ "null"
1296
+ ]
1297
+ },
1298
+ "provider": {
1299
+ "type": "string",
1300
+ "enum": [
1301
+ "GOOGLE",
1302
+ "MICROSOFT",
1303
+ "SMTP"
1304
+ ]
1305
+ },
1306
+ "status": {
1307
+ "type": "string"
1308
+ },
1309
+ "createdAt": {
1310
+ "type": "string",
1311
+ "format": "date-time"
1312
+ }
1313
+ },
1314
+ "required": [
1315
+ "id",
1316
+ "emailAddress",
1317
+ "provider",
1318
+ "status",
1319
+ "createdAt"
1320
+ ]
1321
+ }
1322
+ }
1323
+ },
1324
+ "required": [
1325
+ "data"
1326
+ ]
1327
+ },
1328
+ "annotations": {
1329
+ "readOnlyHint": true,
1330
+ "destructiveHint": false,
1331
+ "idempotentHint": true,
1332
+ "openWorldHint": false
1333
+ },
1334
+ "_http": {
1335
+ "method": "GET",
1336
+ "path": "/api/v1/mailboxes"
1337
+ }
1338
+ },
1339
+ {
1340
+ "name": "get_mailbox",
1341
+ "title": "Get Mailbox",
1342
+ "description": "Returns mailbox details including SMTP/IMAP connection health and DNS record status (MX, SPF, DKIM).",
1343
+ "inputSchema": {
1344
+ "type": "object",
1345
+ "properties": {
1346
+ "id": {
1347
+ "type": "string",
1348
+ "description": "Mailbox ID."
1349
+ }
1350
+ },
1351
+ "required": [
1352
+ "id"
1353
+ ],
1354
+ "additionalProperties": false
1355
+ },
1356
+ "outputSchema": {
1357
+ "type": "object",
1358
+ "properties": {
1359
+ "id": {
1360
+ "type": "string"
1361
+ },
1362
+ "emailAddress": {
1363
+ "type": "string",
1364
+ "format": "email"
1365
+ },
1366
+ "displayName": {
1367
+ "type": [
1368
+ "string",
1369
+ "null"
1370
+ ]
1371
+ },
1372
+ "provider": {
1373
+ "type": "string",
1374
+ "enum": [
1375
+ "GOOGLE",
1376
+ "MICROSOFT",
1377
+ "SMTP"
1378
+ ]
1379
+ },
1380
+ "status": {
1381
+ "type": "string"
1382
+ },
1383
+ "smtpOk": {
1384
+ "type": [
1385
+ "boolean",
1386
+ "null"
1387
+ ],
1388
+ "description": "SMTP connectivity status."
1389
+ },
1390
+ "imapOk": {
1391
+ "type": [
1392
+ "boolean",
1393
+ "null"
1394
+ ],
1395
+ "description": "IMAP connectivity status."
1396
+ },
1397
+ "dnsMxOk": {
1398
+ "type": [
1399
+ "boolean",
1400
+ "null"
1401
+ ],
1402
+ "description": "MX record validation."
1403
+ },
1404
+ "dnsSpfOk": {
1405
+ "type": [
1406
+ "boolean",
1407
+ "null"
1408
+ ],
1409
+ "description": "SPF record validation."
1410
+ },
1411
+ "dnsDkimOk": {
1412
+ "type": [
1413
+ "boolean",
1414
+ "null"
1415
+ ],
1416
+ "description": "DKIM record validation."
1417
+ },
1418
+ "createdAt": {
1419
+ "type": "string",
1420
+ "format": "date-time"
1421
+ }
1422
+ },
1423
+ "required": [
1424
+ "id",
1425
+ "emailAddress",
1426
+ "provider",
1427
+ "status",
1428
+ "createdAt"
1429
+ ]
1430
+ },
1431
+ "annotations": {
1432
+ "readOnlyHint": true,
1433
+ "destructiveHint": false,
1434
+ "idempotentHint": true,
1435
+ "openWorldHint": false
1436
+ },
1437
+ "_http": {
1438
+ "method": "GET",
1439
+ "path": "/api/v1/mailboxes/{id}"
1440
+ }
1441
+ },
1442
+ {
1443
+ "name": "create_mailbox",
1444
+ "title": "Create SMTP Mailbox",
1445
+ "description": "Connects a new SMTP/IMAP mailbox to the account. Validates SMTP and IMAP credentials before saving. OAuth mailboxes (Google, Microsoft) can only be connected via the frontend OAuth flow. Pass labelId to assign the mailbox to an existing label group.",
1446
+ "inputSchema": {
1447
+ "type": "object",
1448
+ "properties": {
1449
+ "emailAddress": {
1450
+ "type": "string",
1451
+ "format": "email",
1452
+ "description": "Sender email address."
1453
+ },
1454
+ "displayName": {
1455
+ "type": "string",
1456
+ "description": "Optional display name shown in the From header."
1457
+ },
1458
+ "labelId": {
1459
+ "type": "string",
1460
+ "description": "Optional label/group ID to assign this mailbox to."
1461
+ },
1462
+ "smtpHost": {
1463
+ "type": "string",
1464
+ "description": "SMTP server hostname (e.g. smtp.gmail.com)."
1465
+ },
1466
+ "smtpPort": {
1467
+ "type": "integer",
1468
+ "minimum": 1,
1469
+ "maximum": 65535,
1470
+ "description": "SMTP port (465 for SSL, 587 for TLS)."
1471
+ },
1472
+ "smtpUsername": {
1473
+ "type": "string",
1474
+ "description": "SMTP authentication username (usually the email address)."
1475
+ },
1476
+ "smtpPassword": {
1477
+ "type": "string",
1478
+ "description": "SMTP authentication password or app password."
1479
+ },
1480
+ "imapHost": {
1481
+ "type": "string",
1482
+ "description": "IMAP server hostname (e.g. imap.gmail.com)."
1483
+ },
1484
+ "imapPort": {
1485
+ "type": "integer",
1486
+ "minimum": 1,
1487
+ "maximum": 65535,
1488
+ "description": "IMAP port (993 for SSL)."
1489
+ },
1490
+ "imapUsername": {
1491
+ "type": "string",
1492
+ "description": "IMAP authentication username (usually the email address)."
1493
+ },
1494
+ "imapPassword": {
1495
+ "type": "string",
1496
+ "description": "IMAP authentication password or app password."
1497
+ }
1498
+ },
1499
+ "required": [
1500
+ "emailAddress",
1501
+ "smtpHost",
1502
+ "smtpPort",
1503
+ "smtpUsername",
1504
+ "smtpPassword",
1505
+ "imapHost",
1506
+ "imapPort",
1507
+ "imapUsername",
1508
+ "imapPassword"
1509
+ ],
1510
+ "additionalProperties": false
1511
+ },
1512
+ "outputSchema": {
1513
+ "type": "object",
1514
+ "properties": {
1515
+ "id": {
1516
+ "type": "string"
1517
+ },
1518
+ "emailAddress": {
1519
+ "type": "string",
1520
+ "format": "email"
1521
+ },
1522
+ "displayName": {
1523
+ "type": [
1524
+ "string",
1525
+ "null"
1526
+ ]
1527
+ },
1528
+ "provider": {
1529
+ "type": "string",
1530
+ "enum": [
1531
+ "SMTP"
1532
+ ]
1533
+ },
1534
+ "status": {
1535
+ "type": "string"
1536
+ },
1537
+ "smtpOk": {
1538
+ "type": [
1539
+ "boolean",
1540
+ "null"
1541
+ ]
1542
+ },
1543
+ "imapOk": {
1544
+ "type": [
1545
+ "boolean",
1546
+ "null"
1547
+ ]
1548
+ },
1549
+ "createdAt": {
1550
+ "type": "string",
1551
+ "format": "date-time"
1552
+ }
1553
+ },
1554
+ "required": [
1555
+ "id",
1556
+ "emailAddress",
1557
+ "provider",
1558
+ "status",
1559
+ "createdAt"
1560
+ ]
1561
+ },
1562
+ "annotations": {
1563
+ "readOnlyHint": false,
1564
+ "destructiveHint": false,
1565
+ "idempotentHint": false,
1566
+ "openWorldHint": false
1567
+ },
1568
+ "_http": {
1569
+ "method": "POST",
1570
+ "path": "/api/v1/mailboxes"
1571
+ }
1572
+ },
1573
+ {
1574
+ "name": "update_mailbox",
1575
+ "title": "Update Mailbox",
1576
+ "description": "Updates a mailbox. For SMTP mailboxes: pass all connection fields (hosts/ports/usernames are required; passwords are optional — omit to keep stored value). For OAuth mailboxes (Google, Microsoft): only displayName can be changed via API; use the frontend to reconnect OAuth credentials.",
1577
+ "inputSchema": {
1578
+ "type": "object",
1579
+ "properties": {
1580
+ "id": {
1581
+ "type": "string",
1582
+ "description": "Mailbox ID."
1583
+ },
1584
+ "displayName": {
1585
+ "type": "string",
1586
+ "nullable": true,
1587
+ "description": "Display name for the From header. Pass null to clear."
1588
+ },
1589
+ "smtpHost": {
1590
+ "type": "string",
1591
+ "description": "SMTP hostname (SMTP mailboxes only, required when updating connection)."
1592
+ },
1593
+ "smtpPort": {
1594
+ "type": "integer",
1595
+ "minimum": 1,
1596
+ "maximum": 65535,
1597
+ "description": "SMTP port (SMTP mailboxes only)."
1598
+ },
1599
+ "smtpUsername": {
1600
+ "type": "string",
1601
+ "description": "SMTP username (SMTP mailboxes only)."
1602
+ },
1603
+ "smtpPassword": {
1604
+ "type": "string",
1605
+ "description": "SMTP password (SMTP mailboxes only). Omit to keep stored value."
1606
+ },
1607
+ "imapHost": {
1608
+ "type": "string",
1609
+ "description": "IMAP hostname (SMTP mailboxes only, required when updating connection)."
1610
+ },
1611
+ "imapPort": {
1612
+ "type": "integer",
1613
+ "minimum": 1,
1614
+ "maximum": 65535,
1615
+ "description": "IMAP port (SMTP mailboxes only)."
1616
+ },
1617
+ "imapUsername": {
1618
+ "type": "string",
1619
+ "description": "IMAP username (SMTP mailboxes only)."
1620
+ },
1621
+ "imapPassword": {
1622
+ "type": "string",
1623
+ "description": "IMAP password (SMTP mailboxes only). Omit to keep stored value."
1624
+ }
1625
+ },
1626
+ "required": [
1627
+ "id"
1628
+ ],
1629
+ "additionalProperties": false
1630
+ },
1631
+ "outputSchema": {
1632
+ "type": "object",
1633
+ "properties": {
1634
+ "id": {
1635
+ "type": "string"
1636
+ },
1637
+ "emailAddress": {
1638
+ "type": "string",
1639
+ "format": "email"
1640
+ },
1641
+ "displayName": {
1642
+ "type": [
1643
+ "string",
1644
+ "null"
1645
+ ]
1646
+ },
1647
+ "provider": {
1648
+ "type": "string",
1649
+ "enum": [
1650
+ "GOOGLE",
1651
+ "MICROSOFT",
1652
+ "SMTP"
1653
+ ]
1654
+ },
1655
+ "status": {
1656
+ "type": "string"
1657
+ },
1658
+ "smtpOk": {
1659
+ "type": [
1660
+ "boolean",
1661
+ "null"
1662
+ ]
1663
+ },
1664
+ "imapOk": {
1665
+ "type": [
1666
+ "boolean",
1667
+ "null"
1668
+ ]
1669
+ },
1670
+ "createdAt": {
1671
+ "type": "string",
1672
+ "format": "date-time"
1673
+ }
1674
+ },
1675
+ "required": [
1676
+ "id",
1677
+ "emailAddress",
1678
+ "provider",
1679
+ "status",
1680
+ "createdAt"
1681
+ ]
1682
+ },
1683
+ "annotations": {
1684
+ "readOnlyHint": false,
1685
+ "destructiveHint": false,
1686
+ "idempotentHint": true,
1687
+ "openWorldHint": false
1688
+ },
1689
+ "_http": {
1690
+ "method": "PATCH",
1691
+ "path": "/api/v1/mailboxes/{id}"
1692
+ }
1693
+ },
1694
+ {
1695
+ "name": "delete_mailbox",
1696
+ "title": "Delete Mailbox",
1697
+ "description": "Soft-deletes a mailbox. The mailbox is removed from active sending but retained internally for audit. Returns no body on success.",
1698
+ "inputSchema": {
1699
+ "type": "object",
1700
+ "properties": {
1701
+ "id": {
1702
+ "type": "string",
1703
+ "description": "Mailbox ID to delete."
1704
+ }
1705
+ },
1706
+ "required": [
1707
+ "id"
1708
+ ],
1709
+ "additionalProperties": false
1710
+ },
1711
+ "annotations": {
1712
+ "readOnlyHint": false,
1713
+ "destructiveHint": true,
1714
+ "idempotentHint": true,
1715
+ "openWorldHint": false
1716
+ },
1717
+ "_http": {
1718
+ "method": "DELETE",
1719
+ "path": "/api/v1/mailboxes/{id}"
1720
+ }
1721
+ },
1722
+ {
1723
+ "title": "List Events",
1724
+ "description": "Lists tracked email events (SENT, OPENED, CLICKED, REPLIED, BOUNCED, etc.) with optional filters. Supports cursor-based pagination.",
1725
+ "inputSchema": {
1726
+ "type": "object",
1727
+ "properties": {
1728
+ "campaignId": {
1729
+ "type": "string",
1730
+ "description": "Filter events by campaign ID."
1731
+ },
1732
+ "contactId": {
1733
+ "type": "string",
1734
+ "description": "Filter events by contact ID."
1735
+ },
1736
+ "type": {
1737
+ "type": "string",
1738
+ "enum": [
1739
+ "SENT",
1740
+ "DELIVERED",
1741
+ "OPENED",
1742
+ "CLICKED",
1743
+ "REPLIED",
1744
+ "BOUNCED",
1745
+ "COMPLAINED",
1746
+ "UNSUBSCRIBED"
1747
+ ],
1748
+ "description": "Filter events by type."
1749
+ },
1750
+ "cursor": {
1751
+ "type": "string",
1752
+ "description": "Pagination cursor from the previous response."
1753
+ },
1754
+ "limit": {
1755
+ "type": "integer",
1756
+ "minimum": 1,
1757
+ "maximum": 100,
1758
+ "default": 25,
1759
+ "description": "Number of events to return per page."
1760
+ }
1761
+ },
1762
+ "additionalProperties": false
1763
+ },
1764
+ "outputSchema": {
1765
+ "type": "object",
1766
+ "properties": {
1767
+ "data": {
1768
+ "type": "array",
1769
+ "items": {
1770
+ "type": "object",
1771
+ "properties": {
1772
+ "id": {
1773
+ "type": "string"
1774
+ },
1775
+ "sendJobId": {
1776
+ "type": "string"
1777
+ },
1778
+ "type": {
1779
+ "type": "string",
1780
+ "enum": [
1781
+ "SENT",
1782
+ "DELIVERED",
1783
+ "OPENED",
1784
+ "CLICKED",
1785
+ "REPLIED",
1786
+ "BOUNCED",
1787
+ "COMPLAINED",
1788
+ "UNSUBSCRIBED"
1789
+ ]
1790
+ },
1791
+ "metadata": {
1792
+ "type": [
1793
+ "object",
1794
+ "null"
1795
+ ],
1796
+ "additionalProperties": true
1797
+ },
1798
+ "createdAt": {
1799
+ "type": "string",
1800
+ "format": "date-time"
1801
+ }
1802
+ },
1803
+ "required": [
1804
+ "id",
1805
+ "sendJobId",
1806
+ "type",
1807
+ "createdAt"
1808
+ ]
1809
+ }
1810
+ },
1811
+ "pagination": {
1812
+ "type": "object",
1813
+ "properties": {
1814
+ "nextCursor": {
1815
+ "type": [
1816
+ "string",
1817
+ "null"
1818
+ ],
1819
+ "description": "Pass this value as cursor to fetch the next page. Null when no more pages."
1820
+ },
1821
+ "hasMore": {
1822
+ "type": "boolean"
1823
+ }
1824
+ },
1825
+ "required": [
1826
+ "nextCursor",
1827
+ "hasMore"
1828
+ ]
1829
+ }
1830
+ },
1831
+ "required": [
1832
+ "data",
1833
+ "pagination"
1834
+ ]
1835
+ },
1836
+ "annotations": {
1837
+ "readOnlyHint": true,
1838
+ "destructiveHint": false,
1839
+ "idempotentHint": true,
1840
+ "openWorldHint": false
1841
+ },
1842
+ "name": "list_events",
1843
+ "_http": {
1844
+ "method": "GET",
1845
+ "path": "/api/v1/events"
1846
+ }
1847
+ },
1848
+ {
1849
+ "name": "list_webhooks",
1850
+ "title": "List Webhooks",
1851
+ "description": "Lists all webhook subscriptions configured in the account settings.",
1852
+ "inputSchema": {
1853
+ "type": "object",
1854
+ "additionalProperties": false
1855
+ },
1856
+ "outputSchema": {
1857
+ "type": "object",
1858
+ "properties": {
1859
+ "data": {
1860
+ "type": "array",
1861
+ "items": {
1862
+ "type": "object",
1863
+ "properties": {
1864
+ "id": {
1865
+ "type": "string"
1866
+ },
1867
+ "name": {
1868
+ "type": [
1869
+ "string",
1870
+ "null"
1871
+ ]
1872
+ },
1873
+ "targetUrl": {
1874
+ "type": "string",
1875
+ "format": "uri"
1876
+ },
1877
+ "eventType": {
1878
+ "type": "string"
1879
+ },
1880
+ "active": {
1881
+ "type": "boolean"
1882
+ },
1883
+ "failCount": {
1884
+ "type": "integer"
1885
+ },
1886
+ "createdAt": {
1887
+ "type": "string",
1888
+ "format": "date-time"
1889
+ }
1890
+ },
1891
+ "required": [
1892
+ "id",
1893
+ "targetUrl",
1894
+ "eventType",
1895
+ "active",
1896
+ "failCount",
1897
+ "createdAt"
1898
+ ]
1899
+ }
1900
+ }
1901
+ },
1902
+ "required": [
1903
+ "data"
1904
+ ]
1905
+ },
1906
+ "annotations": {
1907
+ "readOnlyHint": true,
1908
+ "destructiveHint": false,
1909
+ "idempotentHint": true,
1910
+ "openWorldHint": false
1911
+ },
1912
+ "_http": {
1913
+ "method": "GET",
1914
+ "path": "/api/v1/webhooks"
1915
+ }
1916
+ },
1917
+ {
1918
+ "name": "get_webhook",
1919
+ "title": "Get Webhook",
1920
+ "description": "Returns one webhook subscription by ID.",
1921
+ "inputSchema": {
1922
+ "type": "object",
1923
+ "properties": {
1924
+ "id": {
1925
+ "type": "string",
1926
+ "description": "Webhook subscription ID."
1927
+ }
1928
+ },
1929
+ "required": [
1930
+ "id"
1931
+ ],
1932
+ "additionalProperties": false
1933
+ },
1934
+ "outputSchema": {
1935
+ "type": "object",
1936
+ "properties": {
1937
+ "id": {
1938
+ "type": "string"
1939
+ },
1940
+ "name": {
1941
+ "type": [
1942
+ "string",
1943
+ "null"
1944
+ ]
1945
+ },
1946
+ "targetUrl": {
1947
+ "type": "string",
1948
+ "format": "uri"
1949
+ },
1950
+ "eventType": {
1951
+ "type": "string"
1952
+ },
1953
+ "active": {
1954
+ "type": "boolean"
1955
+ },
1956
+ "failCount": {
1957
+ "type": "integer"
1958
+ },
1959
+ "createdAt": {
1960
+ "type": "string",
1961
+ "format": "date-time"
1962
+ }
1963
+ },
1964
+ "required": [
1965
+ "id",
1966
+ "targetUrl",
1967
+ "eventType",
1968
+ "active",
1969
+ "failCount",
1970
+ "createdAt"
1971
+ ]
1972
+ },
1973
+ "annotations": {
1974
+ "readOnlyHint": true,
1975
+ "destructiveHint": false,
1976
+ "idempotentHint": true,
1977
+ "openWorldHint": false
1978
+ },
1979
+ "_http": {
1980
+ "method": "GET",
1981
+ "path": "/api/v1/webhooks/{id}"
1982
+ }
1983
+ },
1984
+ {
1985
+ "name": "test_webhook",
1986
+ "title": "Send Test Webhook",
1987
+ "description": "Sends a test event payload to a webhook subscription URL and returns the HTTP status code from the target server.",
1988
+ "inputSchema": {
1989
+ "type": "object",
1990
+ "properties": {
1991
+ "id": {
1992
+ "type": "string",
1993
+ "description": "Webhook subscription ID to test."
1994
+ }
1995
+ },
1996
+ "required": [
1997
+ "id"
1998
+ ],
1999
+ "additionalProperties": false
2000
+ },
2001
+ "outputSchema": {
2002
+ "type": "object",
2003
+ "properties": {
2004
+ "httpStatus": {
2005
+ "type": "integer",
2006
+ "description": "HTTP status code returned by the webhook target."
2007
+ }
2008
+ },
2009
+ "required": [
2010
+ "httpStatus"
2011
+ ]
2012
+ },
2013
+ "annotations": {
2014
+ "readOnlyHint": false,
2015
+ "destructiveHint": false,
2016
+ "idempotentHint": true,
2017
+ "openWorldHint": true
2018
+ },
2019
+ "_http": {
2020
+ "method": "POST",
2021
+ "path": "/api/v1/webhooks/{id}/test"
2022
+ }
2023
+ },
2024
+ {
2025
+ "name": "update_campaign",
2026
+ "title": "Update Campaign",
2027
+ "description": "Updates a campaign's name, status, or assigned mailboxes. Status transitions: DRAFT→ACTIVE (requires at least one step), ACTIVE↔PAUSED, any→ARCHIVED (terminal). Omit fields to leave them unchanged.",
2028
+ "inputSchema": {
2029
+ "type": "object",
2030
+ "properties": {
2031
+ "id": {
2032
+ "type": "string",
2033
+ "description": "Campaign ID."
2034
+ },
2035
+ "name": {
2036
+ "type": "string",
2037
+ "minLength": 1,
2038
+ "maxLength": 255,
2039
+ "description": "New campaign name."
2040
+ },
2041
+ "status": {
2042
+ "type": "string",
2043
+ "enum": [
2044
+ "DRAFT",
2045
+ "ACTIVE",
2046
+ "PAUSED",
2047
+ "ARCHIVED"
2048
+ ],
2049
+ "description": "Target campaign status. DRAFT→ACTIVE requires at least one step. ARCHIVED is terminal."
2050
+ },
2051
+ "mailboxIds": {
2052
+ "type": "array",
2053
+ "items": {
2054
+ "type": "string"
2055
+ },
2056
+ "maxItems": 200,
2057
+ "description": "Replace the full set of mailboxes assigned to this campaign."
2058
+ }
2059
+ },
2060
+ "required": [
2061
+ "id"
2062
+ ],
2063
+ "additionalProperties": false
2064
+ },
2065
+ "outputSchema": {
2066
+ "type": "object",
2067
+ "properties": {
2068
+ "id": {
2069
+ "type": "string"
2070
+ },
2071
+ "name": {
2072
+ "type": "string"
2073
+ },
2074
+ "status": {
2075
+ "type": "string",
2076
+ "enum": [
2077
+ "DRAFT",
2078
+ "ACTIVE",
2079
+ "PAUSED",
2080
+ "COMPLETED",
2081
+ "ARCHIVED"
2082
+ ]
2083
+ },
2084
+ "createdAt": {
2085
+ "type": "string",
2086
+ "format": "date-time"
2087
+ },
2088
+ "updatedAt": {
2089
+ "type": "string",
2090
+ "format": "date-time"
2091
+ }
2092
+ },
2093
+ "required": [
2094
+ "id",
2095
+ "name",
2096
+ "status",
2097
+ "createdAt",
2098
+ "updatedAt"
2099
+ ]
2100
+ },
2101
+ "annotations": {
2102
+ "readOnlyHint": false,
2103
+ "destructiveHint": false,
2104
+ "idempotentHint": true,
2105
+ "openWorldHint": false
2106
+ },
2107
+ "_http": {
2108
+ "method": "PATCH",
2109
+ "path": "/api/v1/campaigns/{id}"
2110
+ }
2111
+ },
2112
+ {
2113
+ "name": "list_campaign_steps",
2114
+ "title": "List Campaign Steps",
2115
+ "description": "Returns all steps for a campaign in order (primary steps by position, then variants).",
2116
+ "inputSchema": {
2117
+ "type": "object",
2118
+ "properties": {
2119
+ "campaignId": {
2120
+ "type": "string",
2121
+ "description": "Campaign ID."
2122
+ }
2123
+ },
2124
+ "required": [
2125
+ "campaignId"
2126
+ ],
2127
+ "additionalProperties": false
2128
+ },
2129
+ "outputSchema": {
2130
+ "type": "object",
2131
+ "properties": {
2132
+ "data": {
2133
+ "type": "array",
2134
+ "items": {
2135
+ "type": "object",
2136
+ "properties": {
2137
+ "id": {
2138
+ "type": "string"
2139
+ },
2140
+ "campaignId": {
2141
+ "type": "string"
2142
+ },
2143
+ "order": {
2144
+ "type": "integer"
2145
+ },
2146
+ "variantOf": {
2147
+ "type": [
2148
+ "string",
2149
+ "null"
2150
+ ]
2151
+ },
2152
+ "variantLabel": {
2153
+ "type": [
2154
+ "string",
2155
+ "null"
2156
+ ]
2157
+ },
2158
+ "subject": {
2159
+ "type": "string"
2160
+ },
2161
+ "bodyHtml": {
2162
+ "type": "string"
2163
+ },
2164
+ "delayDays": {
2165
+ "type": "integer"
2166
+ },
2167
+ "delayHours": {
2168
+ "type": "integer"
2169
+ },
2170
+ "createdAt": {
2171
+ "type": "string",
2172
+ "format": "date-time"
2173
+ },
2174
+ "updatedAt": {
2175
+ "type": "string",
2176
+ "format": "date-time"
2177
+ }
2178
+ },
2179
+ "required": [
2180
+ "id",
2181
+ "campaignId",
2182
+ "order",
2183
+ "subject",
2184
+ "bodyHtml",
2185
+ "delayDays",
2186
+ "delayHours",
2187
+ "createdAt",
2188
+ "updatedAt"
2189
+ ]
2190
+ }
2191
+ }
2192
+ },
2193
+ "required": [
2194
+ "data"
2195
+ ]
2196
+ },
2197
+ "annotations": {
2198
+ "readOnlyHint": true,
2199
+ "destructiveHint": false,
2200
+ "idempotentHint": true,
2201
+ "openWorldHint": false
2202
+ },
2203
+ "_http": {
2204
+ "method": "GET",
2205
+ "path": "/api/v1/campaigns/{campaignId}/steps"
2206
+ }
2207
+ },
2208
+ {
2209
+ "name": "create_campaign_step",
2210
+ "title": "Create Campaign Step",
2211
+ "description": "Appends a new step to a campaign sequence. To add an A/Z variant, pass the parent step's ID in variantOf.",
2212
+ "inputSchema": {
2213
+ "type": "object",
2214
+ "properties": {
2215
+ "campaignId": {
2216
+ "type": "string",
2217
+ "description": "Campaign ID to add the step to."
2218
+ },
2219
+ "variantOf": {
2220
+ "type": "string",
2221
+ "description": "Parent step ID — creates this step as an A/Z variant of the parent."
2222
+ },
2223
+ "subject": {
2224
+ "type": "string",
2225
+ "maxLength": 255,
2226
+ "default": "",
2227
+ "description": "Email subject line."
2228
+ },
2229
+ "bodyHtml": {
2230
+ "type": "string",
2231
+ "maxLength": 200000,
2232
+ "default": "",
2233
+ "description": "Email body as HTML."
2234
+ },
2235
+ "delayDays": {
2236
+ "type": "integer",
2237
+ "minimum": 0,
2238
+ "maximum": 365,
2239
+ "description": "Days to wait after the previous step before sending (default 0)."
2240
+ },
2241
+ "delayHours": {
2242
+ "type": "integer",
2243
+ "minimum": 0,
2244
+ "maximum": 23,
2245
+ "description": "Additional hours to wait (default 0)."
2246
+ },
2247
+ "variantLabel": {
2248
+ "type": "string",
2249
+ "maxLength": 40,
2250
+ "description": "Short display label for this variant (e.g. 'Version B')."
2251
+ }
2252
+ },
2253
+ "required": [
2254
+ "campaignId"
2255
+ ],
2256
+ "additionalProperties": false
2257
+ },
2258
+ "outputSchema": {
2259
+ "type": "object",
2260
+ "properties": {
2261
+ "id": {
2262
+ "type": "string"
2263
+ },
2264
+ "campaignId": {
2265
+ "type": "string"
2266
+ },
2267
+ "order": {
2268
+ "type": "integer"
2269
+ },
2270
+ "subject": {
2271
+ "type": "string"
2272
+ },
2273
+ "bodyHtml": {
2274
+ "type": "string"
2275
+ },
2276
+ "delayDays": {
2277
+ "type": "integer"
2278
+ },
2279
+ "delayHours": {
2280
+ "type": "integer"
2281
+ },
2282
+ "createdAt": {
2283
+ "type": "string",
2284
+ "format": "date-time"
2285
+ }
2286
+ },
2287
+ "required": [
2288
+ "id",
2289
+ "campaignId",
2290
+ "order",
2291
+ "subject",
2292
+ "bodyHtml",
2293
+ "delayDays",
2294
+ "delayHours",
2295
+ "createdAt"
2296
+ ]
2297
+ },
2298
+ "annotations": {
2299
+ "readOnlyHint": false,
2300
+ "destructiveHint": false,
2301
+ "idempotentHint": false,
2302
+ "openWorldHint": false
2303
+ },
2304
+ "_http": {
2305
+ "method": "POST",
2306
+ "path": "/api/v1/campaigns/{campaignId}/steps"
2307
+ }
2308
+ },
2309
+ {
2310
+ "name": "update_campaign_step",
2311
+ "title": "Update Campaign Step",
2312
+ "description": "Updates subject, body, delay, or variant label on an existing campaign step. Omit fields to leave them unchanged.",
2313
+ "inputSchema": {
2314
+ "type": "object",
2315
+ "properties": {
2316
+ "campaignId": {
2317
+ "type": "string",
2318
+ "description": "Campaign ID (for URL routing)."
2319
+ },
2320
+ "stepId": {
2321
+ "type": "string",
2322
+ "description": "Step ID to update."
2323
+ },
2324
+ "subject": {
2325
+ "type": "string",
2326
+ "maxLength": 255,
2327
+ "description": "Email subject line."
2328
+ },
2329
+ "bodyHtml": {
2330
+ "type": "string",
2331
+ "maxLength": 200000,
2332
+ "description": "Email body as HTML."
2333
+ },
2334
+ "delayDays": {
2335
+ "type": "integer",
2336
+ "minimum": 0,
2337
+ "maximum": 365,
2338
+ "description": "Days to wait before this step."
2339
+ },
2340
+ "delayHours": {
2341
+ "type": "integer",
2342
+ "minimum": 0,
2343
+ "maximum": 23,
2344
+ "description": "Additional hours to wait."
2345
+ },
2346
+ "variantLabel": {
2347
+ "type": "string",
2348
+ "maxLength": 40,
2349
+ "nullable": true,
2350
+ "description": "Variant label. Pass null to clear."
2351
+ }
2352
+ },
2353
+ "required": [
2354
+ "campaignId",
2355
+ "stepId"
2356
+ ],
2357
+ "additionalProperties": false
2358
+ },
2359
+ "outputSchema": {
2360
+ "type": "object",
2361
+ "properties": {
2362
+ "id": {
2363
+ "type": "string"
2364
+ },
2365
+ "subject": {
2366
+ "type": "string"
2367
+ },
2368
+ "bodyHtml": {
2369
+ "type": "string"
2370
+ },
2371
+ "delayDays": {
2372
+ "type": "integer"
2373
+ },
2374
+ "delayHours": {
2375
+ "type": "integer"
2376
+ },
2377
+ "updatedAt": {
2378
+ "type": "string",
2379
+ "format": "date-time"
2380
+ }
2381
+ },
2382
+ "required": [
2383
+ "id",
2384
+ "subject",
2385
+ "bodyHtml",
2386
+ "delayDays",
2387
+ "delayHours",
2388
+ "updatedAt"
2389
+ ]
2390
+ },
2391
+ "annotations": {
2392
+ "readOnlyHint": false,
2393
+ "destructiveHint": false,
2394
+ "idempotentHint": true,
2395
+ "openWorldHint": false
2396
+ },
2397
+ "_http": {
2398
+ "method": "PATCH",
2399
+ "path": "/api/v1/campaigns/{campaignId}/steps/{stepId}"
2400
+ }
2401
+ },
2402
+ {
2403
+ "name": "delete_campaign_step",
2404
+ "title": "Delete Campaign Step",
2405
+ "description": "Permanently deletes a campaign step and all its A/Z variants. Returns no body on success.",
2406
+ "inputSchema": {
2407
+ "type": "object",
2408
+ "properties": {
2409
+ "campaignId": {
2410
+ "type": "string",
2411
+ "description": "Campaign ID."
2412
+ },
2413
+ "stepId": {
2414
+ "type": "string",
2415
+ "description": "Step ID to delete."
2416
+ }
2417
+ },
2418
+ "required": [
2419
+ "campaignId",
2420
+ "stepId"
2421
+ ],
2422
+ "additionalProperties": false
2423
+ },
2424
+ "annotations": {
2425
+ "readOnlyHint": false,
2426
+ "destructiveHint": true,
2427
+ "idempotentHint": true,
2428
+ "openWorldHint": false
2429
+ },
2430
+ "_http": {
2431
+ "method": "DELETE",
2432
+ "path": "/api/v1/campaigns/{campaignId}/steps/{stepId}"
2433
+ }
2434
+ },
2435
+ {
2436
+ "name": "get_campaign_settings",
2437
+ "title": "Get Campaign Settings",
2438
+ "description": "Returns the options and schedule settings for a campaign (behaviour flags, daily limits, A/Z config, CC/BCC, schedule).",
2439
+ "inputSchema": {
2440
+ "type": "object",
2441
+ "properties": {
2442
+ "id": {
2443
+ "type": "string",
2444
+ "description": "Campaign ID."
2445
+ }
2446
+ },
2447
+ "required": [
2448
+ "id"
2449
+ ],
2450
+ "additionalProperties": false
2451
+ },
2452
+ "outputSchema": {
2453
+ "type": "object",
2454
+ "description": "Full settings object. See CampaignSettings schema for all fields.",
2455
+ "additionalProperties": true
2456
+ },
2457
+ "annotations": {
2458
+ "readOnlyHint": true,
2459
+ "destructiveHint": false,
2460
+ "idempotentHint": true,
2461
+ "openWorldHint": false
2462
+ },
2463
+ "_http": {
2464
+ "method": "GET",
2465
+ "path": "/api/v1/campaigns/{id}/settings"
2466
+ }
2467
+ },
2468
+ {
2469
+ "name": "update_campaign_settings",
2470
+ "title": "Update Campaign Settings",
2471
+ "description": "Updates campaign options (behaviour, sending pattern, A/Z testing, deliverability) and/or schedule. All fields optional — omit to leave unchanged.",
2472
+ "inputSchema": {
2473
+ "type": "object",
2474
+ "properties": {
2475
+ "id": {
2476
+ "type": "string",
2477
+ "description": "Campaign ID."
2478
+ },
2479
+ "pauseOnReply": {
2480
+ "type": "boolean"
2481
+ },
2482
+ "pauseOnAutoReply": {
2483
+ "type": "boolean"
2484
+ },
2485
+ "stopCompanyOnReply": {
2486
+ "type": "boolean"
2487
+ },
2488
+ "trackOpens": {
2489
+ "type": "boolean"
2490
+ },
2491
+ "trackClicks": {
2492
+ "type": "boolean"
2493
+ },
2494
+ "deliveryOptimization": {
2495
+ "type": "boolean"
2496
+ },
2497
+ "includeUnsubscribe": {
2498
+ "type": "boolean"
2499
+ },
2500
+ "insertUnsubscribeHeader": {
2501
+ "type": "boolean"
2502
+ },
2503
+ "allowRiskyEmails": {
2504
+ "type": "boolean"
2505
+ },
2506
+ "providerMatching": {
2507
+ "type": "boolean"
2508
+ },
2509
+ "prioritizeNewLeads": {
2510
+ "type": "boolean"
2511
+ },
2512
+ "dailyLimit": {
2513
+ "type": "integer",
2514
+ "minimum": 1,
2515
+ "maximum": 10000
2516
+ },
2517
+ "minMinutesBetweenSends": {
2518
+ "type": "integer",
2519
+ "minimum": 1,
2520
+ "maximum": 1440
2521
+ },
2522
+ "randomAdditionalMinutes": {
2523
+ "type": "integer",
2524
+ "minimum": 0,
2525
+ "maximum": 1440
2526
+ },
2527
+ "maxNewLeadsPerDay": {
2528
+ "type": "integer",
2529
+ "minimum": 1,
2530
+ "maximum": 10000,
2531
+ "nullable": true
2532
+ },
2533
+ "abAutoOptimize": {
2534
+ "type": "boolean"
2535
+ },
2536
+ "abWinningMetric": {
2537
+ "type": "string",
2538
+ "enum": [
2539
+ "OPENS",
2540
+ "CLICKS",
2541
+ "REPLIES"
2542
+ ],
2543
+ "nullable": true
2544
+ },
2545
+ "ccEmails": {
2546
+ "type": "array",
2547
+ "items": {
2548
+ "type": "string",
2549
+ "format": "email"
2550
+ },
2551
+ "maxItems": 20
2552
+ },
2553
+ "bccEmails": {
2554
+ "type": "array",
2555
+ "items": {
2556
+ "type": "string",
2557
+ "format": "email"
2558
+ },
2559
+ "maxItems": 20
2560
+ },
2561
+ "limitEmailsPerCompany": {
2562
+ "type": "integer",
2563
+ "minimum": 1,
2564
+ "maximum": 1000,
2565
+ "nullable": true
2566
+ },
2567
+ "tags": {
2568
+ "type": "array",
2569
+ "items": {
2570
+ "type": "string"
2571
+ },
2572
+ "maxItems": 50
2573
+ },
2574
+ "scheduleId": {
2575
+ "type": "string",
2576
+ "nullable": true
2577
+ },
2578
+ "startAt": {
2579
+ "type": "string",
2580
+ "format": "date-time",
2581
+ "nullable": true
2582
+ },
2583
+ "endAt": {
2584
+ "type": "string",
2585
+ "format": "date-time",
2586
+ "nullable": true
2587
+ }
2588
+ },
2589
+ "required": [
2590
+ "id"
2591
+ ],
2592
+ "additionalProperties": false
2593
+ },
2594
+ "outputSchema": {
2595
+ "type": "object",
2596
+ "description": "Updated settings object.",
2597
+ "additionalProperties": true
2598
+ },
2599
+ "annotations": {
2600
+ "readOnlyHint": false,
2601
+ "destructiveHint": false,
2602
+ "idempotentHint": true,
2603
+ "openWorldHint": false
2604
+ },
2605
+ "_http": {
2606
+ "method": "PATCH",
2607
+ "path": "/api/v1/campaigns/{id}/settings"
2608
+ }
2609
+ },
2610
+ {
2611
+ "name": "get_campaign_intelligence",
2612
+ "title": "Get Campaign Intelligence",
2613
+ "description": "Returns the ICP (ideal customer profile) description and prospect website configured for AI copy generation.",
2614
+ "inputSchema": {
2615
+ "type": "object",
2616
+ "properties": {
2617
+ "id": {
2618
+ "type": "string",
2619
+ "description": "Campaign ID."
2620
+ }
2621
+ },
2622
+ "required": [
2623
+ "id"
2624
+ ],
2625
+ "additionalProperties": false
2626
+ },
2627
+ "outputSchema": {
2628
+ "type": "object",
2629
+ "properties": {
2630
+ "icpDescription": {
2631
+ "type": [
2632
+ "string",
2633
+ "null"
2634
+ ],
2635
+ "description": "ICP description used for AI copy generation."
2636
+ },
2637
+ "prospectWebsite": {
2638
+ "type": [
2639
+ "string",
2640
+ "null"
2641
+ ],
2642
+ "format": "uri",
2643
+ "description": "Prospect website URL used for AI copy generation."
2644
+ }
2645
+ },
2646
+ "required": [
2647
+ "icpDescription",
2648
+ "prospectWebsite"
2649
+ ]
2650
+ },
2651
+ "annotations": {
2652
+ "readOnlyHint": true,
2653
+ "destructiveHint": false,
2654
+ "idempotentHint": true,
2655
+ "openWorldHint": false
2656
+ },
2657
+ "_http": {
2658
+ "method": "GET",
2659
+ "path": "/api/v1/campaigns/{id}/intelligence"
2660
+ }
2661
+ },
2662
+ {
2663
+ "name": "update_campaign_intelligence",
2664
+ "title": "Update Campaign Intelligence",
2665
+ "description": "Updates the ICP description and/or prospect website used by the AI copy generator. Pass null to clear a field.",
2666
+ "inputSchema": {
2667
+ "type": "object",
2668
+ "properties": {
2669
+ "id": {
2670
+ "type": "string",
2671
+ "description": "Campaign ID."
2672
+ },
2673
+ "icpDescription": {
2674
+ "type": "string",
2675
+ "maxLength": 10000,
2676
+ "nullable": true,
2677
+ "description": "ICP description. Pass null to clear."
2678
+ },
2679
+ "prospectWebsite": {
2680
+ "type": "string",
2681
+ "format": "uri",
2682
+ "maxLength": 2048,
2683
+ "nullable": true,
2684
+ "description": "Prospect website URL. Pass null to clear."
2685
+ }
2686
+ },
2687
+ "required": [
2688
+ "id"
2689
+ ],
2690
+ "additionalProperties": false
2691
+ },
2692
+ "outputSchema": {
2693
+ "type": "object",
2694
+ "properties": {
2695
+ "icpDescription": {
2696
+ "type": [
2697
+ "string",
2698
+ "null"
2699
+ ]
2700
+ },
2701
+ "prospectWebsite": {
2702
+ "type": [
2703
+ "string",
2704
+ "null"
2705
+ ]
2706
+ }
2707
+ },
2708
+ "required": [
2709
+ "icpDescription",
2710
+ "prospectWebsite"
2711
+ ]
2712
+ },
2713
+ "annotations": {
2714
+ "readOnlyHint": false,
2715
+ "destructiveHint": false,
2716
+ "idempotentHint": true,
2717
+ "openWorldHint": false
2718
+ },
2719
+ "_http": {
2720
+ "method": "PATCH",
2721
+ "path": "/api/v1/campaigns/{id}/intelligence"
2722
+ }
2723
+ },
2724
+ {
2725
+ "name": "list_contact_lists",
2726
+ "title": "List Contact Lists",
2727
+ "description": "Returns all contact lists for the account, including the count of active contacts in each list.",
2728
+ "inputSchema": {
2729
+ "type": "object",
2730
+ "additionalProperties": false
2731
+ },
2732
+ "outputSchema": {
2733
+ "type": "object",
2734
+ "properties": {
2735
+ "data": {
2736
+ "type": "array",
2737
+ "items": {
2738
+ "type": "object",
2739
+ "properties": {
2740
+ "id": {
2741
+ "type": "string"
2742
+ },
2743
+ "name": {
2744
+ "type": "string"
2745
+ },
2746
+ "contactCount": {
2747
+ "type": "integer",
2748
+ "description": "Number of active (non-deleted) contacts."
2749
+ },
2750
+ "createdAt": {
2751
+ "type": "string",
2752
+ "format": "date-time"
2753
+ },
2754
+ "updatedAt": {
2755
+ "type": "string",
2756
+ "format": "date-time"
2757
+ }
2758
+ },
2759
+ "required": [
2760
+ "id",
2761
+ "name",
2762
+ "contactCount",
2763
+ "createdAt",
2764
+ "updatedAt"
2765
+ ]
2766
+ }
2767
+ }
2768
+ },
2769
+ "required": [
2770
+ "data"
2771
+ ]
2772
+ },
2773
+ "annotations": {
2774
+ "readOnlyHint": true,
2775
+ "destructiveHint": false,
2776
+ "idempotentHint": true,
2777
+ "openWorldHint": false
2778
+ },
2779
+ "_http": {
2780
+ "method": "GET",
2781
+ "path": "/api/v1/lists"
2782
+ }
2783
+ },
2784
+ {
2785
+ "name": "create_contact_list",
2786
+ "title": "Create Contact List",
2787
+ "description": "Creates a new empty contact list.",
2788
+ "inputSchema": {
2789
+ "type": "object",
2790
+ "properties": {
2791
+ "name": {
2792
+ "type": "string",
2793
+ "minLength": 1,
2794
+ "maxLength": 255,
2795
+ "description": "List name."
2796
+ }
2797
+ },
2798
+ "required": [
2799
+ "name"
2800
+ ],
2801
+ "additionalProperties": false
2802
+ },
2803
+ "outputSchema": {
2804
+ "type": "object",
2805
+ "properties": {
2806
+ "id": {
2807
+ "type": "string"
2808
+ },
2809
+ "name": {
2810
+ "type": "string"
2811
+ },
2812
+ "createdAt": {
2813
+ "type": "string",
2814
+ "format": "date-time"
2815
+ }
2816
+ },
2817
+ "required": [
2818
+ "id",
2819
+ "name",
2820
+ "createdAt"
2821
+ ]
2822
+ },
2823
+ "annotations": {
2824
+ "readOnlyHint": false,
2825
+ "destructiveHint": false,
2826
+ "idempotentHint": false,
2827
+ "openWorldHint": false
2828
+ },
2829
+ "_http": {
2830
+ "method": "POST",
2831
+ "path": "/api/v1/lists"
2832
+ }
2833
+ },
2834
+ {
2835
+ "name": "list_contacts_in_list",
2836
+ "title": "List Contacts in List",
2837
+ "description": "Returns contacts that are members of a given contact list, cursor-paginated. Supports search across email, name, and company.",
2838
+ "inputSchema": {
2839
+ "type": "object",
2840
+ "properties": {
2841
+ "listId": {
2842
+ "type": "string",
2843
+ "description": "Contact list ID."
2844
+ },
2845
+ "cursor": {
2846
+ "type": "string",
2847
+ "description": "Pagination cursor from the previous response."
2848
+ },
2849
+ "limit": {
2850
+ "type": "integer",
2851
+ "minimum": 1,
2852
+ "maximum": 100,
2853
+ "default": 25,
2854
+ "description": "Number of contacts to return."
2855
+ },
2856
+ "search": {
2857
+ "type": "string",
2858
+ "description": "Case-insensitive substring search across email, first name, last name, company."
2859
+ }
2860
+ },
2861
+ "required": [
2862
+ "listId"
2863
+ ],
2864
+ "additionalProperties": false
2865
+ },
2866
+ "outputSchema": {
2867
+ "type": "object",
2868
+ "properties": {
2869
+ "data": {
2870
+ "type": "array",
2871
+ "items": {
2872
+ "type": "object",
2873
+ "properties": {
2874
+ "id": {
2875
+ "type": "string"
2876
+ },
2877
+ "email": {
2878
+ "type": "string",
2879
+ "format": "email"
2880
+ },
2881
+ "firstName": {
2882
+ "type": [
2883
+ "string",
2884
+ "null"
2885
+ ]
2886
+ },
2887
+ "lastName": {
2888
+ "type": [
2889
+ "string",
2890
+ "null"
2891
+ ]
2892
+ },
2893
+ "company": {
2894
+ "type": [
2895
+ "string",
2896
+ "null"
2897
+ ]
2898
+ },
2899
+ "title": {
2900
+ "type": [
2901
+ "string",
2902
+ "null"
2903
+ ]
2904
+ },
2905
+ "status": {
2906
+ "type": "string"
2907
+ },
2908
+ "createdAt": {
2909
+ "type": "string",
2910
+ "format": "date-time"
2911
+ }
2912
+ },
2913
+ "required": [
2914
+ "id",
2915
+ "email",
2916
+ "status",
2917
+ "createdAt"
2918
+ ]
2919
+ }
2920
+ },
2921
+ "pagination": {
2922
+ "type": "object",
2923
+ "properties": {
2924
+ "nextCursor": {
2925
+ "type": [
2926
+ "string",
2927
+ "null"
2928
+ ]
2929
+ },
2930
+ "hasMore": {
2931
+ "type": "boolean"
2932
+ }
2933
+ },
2934
+ "required": [
2935
+ "nextCursor",
2936
+ "hasMore"
2937
+ ]
2938
+ }
2939
+ },
2940
+ "required": [
2941
+ "data",
2942
+ "pagination"
2943
+ ]
2944
+ },
2945
+ "annotations": {
2946
+ "readOnlyHint": true,
2947
+ "destructiveHint": false,
2948
+ "idempotentHint": true,
2949
+ "openWorldHint": false
2950
+ },
2951
+ "_http": {
2952
+ "method": "GET",
2953
+ "path": "/api/v1/lists/{listId}/contacts"
2954
+ }
2955
+ },
2956
+ {
2957
+ "name": "remove_contact_from_list",
2958
+ "title": "Remove Contact from List",
2959
+ "description": "Removes a contact's membership from a list (removes the 'label'). The contact record is preserved and can be re-added later. Returns no body on success.",
2960
+ "inputSchema": {
2961
+ "type": "object",
2962
+ "properties": {
2963
+ "listId": {
2964
+ "type": "string",
2965
+ "description": "Contact list ID."
2966
+ },
2967
+ "contactId": {
2968
+ "type": "string",
2969
+ "description": "Contact ID to remove."
2970
+ }
2971
+ },
2972
+ "required": [
2973
+ "listId",
2974
+ "contactId"
2975
+ ],
2976
+ "additionalProperties": false
2977
+ },
2978
+ "annotations": {
2979
+ "readOnlyHint": false,
2980
+ "destructiveHint": false,
2981
+ "idempotentHint": true,
2982
+ "openWorldHint": false
2983
+ },
2984
+ "_http": {
2985
+ "method": "DELETE",
2986
+ "path": "/api/v1/lists/{listId}/contacts/{contactId}"
2987
+ }
2988
+ },
2989
+ {
2990
+ "name": "get_campaign_variables",
2991
+ "title": "Get Campaign Template Variables",
2992
+ "description": "Returns every variable and snippet available for a campaign step: contact fields (standard + custom from enrolled contacts), mailbox signature, date/time tokens, spintax presets, and Liquid snippets. Use this to know what tokens you can insert when writing or editing a step subject or body.",
2993
+ "inputSchema": {
2994
+ "type": "object",
2995
+ "properties": {
2996
+ "campaignId": {
2997
+ "type": "string",
2998
+ "description": "Campaign ID."
2999
+ }
3000
+ },
3001
+ "required": [
3002
+ "campaignId"
3003
+ ],
3004
+ "additionalProperties": false
3005
+ },
3006
+ "annotations": {
3007
+ "readOnlyHint": true,
3008
+ "destructiveHint": false,
3009
+ "idempotentHint": true,
3010
+ "openWorldHint": false
3011
+ },
3012
+ "_http": {
3013
+ "method": "GET",
3014
+ "path": "/api/v1/campaigns/{campaignId}/variables"
3015
+ }
3016
+ }
3017
+ ]
3018
+ }