hostinger-api-mcp 1.50.0 → 1.51.1

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 (55) hide show
  1. package/README.md +1 -1
  2. package/gemini-extension.json +1 -1
  3. package/package.json +1 -1
  4. package/server.json +2 -2
  5. package/src/core/runtime.js +3 -1
  6. package/src/core/runtime.ts +3 -1
  7. package/src/core/tools/agency-hosting.js +239 -0
  8. package/src/core/tools/agency-hosting.ts +239 -0
  9. package/src/core/tools/all.js +2335 -5
  10. package/src/core/tools/all.ts +2335 -5
  11. package/src/core/tools/billing.js +57 -0
  12. package/src/core/tools/billing.ts +57 -0
  13. package/src/core/tools/dns.js +50 -0
  14. package/src/core/tools/dns.ts +50 -0
  15. package/src/core/tools/domains.js +255 -0
  16. package/src/core/tools/domains.ts +255 -0
  17. package/src/core/tools/ecommerce.js +180 -0
  18. package/src/core/tools/ecommerce.ts +180 -0
  19. package/src/core/tools/horizons.js +12 -0
  20. package/src/core/tools/horizons.ts +12 -0
  21. package/src/core/tools/hosting.js +365 -0
  22. package/src/core/tools/hosting.ts +365 -0
  23. package/src/core/tools/mail.js +239 -0
  24. package/src/core/tools/mail.ts +239 -0
  25. package/src/core/tools/reach.js +306 -0
  26. package/src/core/tools/reach.ts +306 -0
  27. package/src/core/tools/vps.js +400 -5
  28. package/src/core/tools/vps.ts +400 -5
  29. package/src/core/tools/wordpress.js +232 -0
  30. package/src/core/tools/wordpress.ts +232 -0
  31. package/src/servers/agency-hosting.js +1 -1
  32. package/src/servers/agency-hosting.ts +1 -1
  33. package/src/servers/all.js +1 -1
  34. package/src/servers/all.ts +1 -1
  35. package/src/servers/billing.js +1 -1
  36. package/src/servers/billing.ts +1 -1
  37. package/src/servers/dns.js +1 -1
  38. package/src/servers/dns.ts +1 -1
  39. package/src/servers/domains.js +1 -1
  40. package/src/servers/domains.ts +1 -1
  41. package/src/servers/ecommerce.js +1 -1
  42. package/src/servers/ecommerce.ts +1 -1
  43. package/src/servers/horizons.js +1 -1
  44. package/src/servers/horizons.ts +1 -1
  45. package/src/servers/hosting.js +1 -1
  46. package/src/servers/hosting.ts +1 -1
  47. package/src/servers/mail.js +1 -1
  48. package/src/servers/mail.ts +1 -1
  49. package/src/servers/reach.js +1 -1
  50. package/src/servers/reach.ts +1 -1
  51. package/src/servers/vps.js +1 -1
  52. package/src/servers/vps.ts +1 -1
  53. package/src/servers/wordpress.js +1 -1
  54. package/src/servers/wordpress.ts +1 -1
  55. package/types.d.ts +5 -5
@@ -16,6 +16,12 @@ export interface OpenApiTool extends Tool {
16
16
  const tools: OpenApiTool[] = [
17
17
  {
18
18
  "name": "reach_getAutomationDetailsV1",
19
+ "title": "Get automation details",
20
+ "annotations": {
21
+ "title": "Get automation details",
22
+ "readOnlyHint": true,
23
+ "destructiveHint": false
24
+ },
19
25
  "description": "Get a single automation with the counts of contacts that entered it, are moving through it,\nfinished it or failed on the way.\n\nThis describes the automation itself. To see the workflow it runs, use the steps endpoint.",
20
26
  "method": "GET",
21
27
  "path": "/api/reach/v1/profiles/{profileUuid}/automations/{automationUuid}",
@@ -45,6 +51,12 @@ const tools: OpenApiTool[] = [
45
51
  },
46
52
  {
47
53
  "name": "reach_listAutomationsV1",
54
+ "title": "List automations",
55
+ "annotations": {
56
+ "title": "List automations",
57
+ "readOnlyHint": true,
58
+ "destructiveHint": false
59
+ },
48
60
  "description": "Get a paginated list of the automations in a profile.\n\nEvery automation comes with the counts of contacts that entered it, are moving through it,\nfinished it or failed on the way. Those counts describe the contact journey and are not\nemail engagement metrics - for opens, clicks and unsubscribes use the campaign statistics\nendpoint instead.",
49
61
  "method": "GET",
50
62
  "path": "/api/reach/v1/profiles/{profileUuid}/automations",
@@ -94,6 +106,12 @@ const tools: OpenApiTool[] = [
94
106
  },
95
107
  {
96
108
  "name": "reach_listAutomationStepsV1",
109
+ "title": "List automation steps",
110
+ "annotations": {
111
+ "title": "List automation steps",
112
+ "readOnlyHint": true,
113
+ "destructiveHint": false
114
+ },
97
115
  "description": "Get the workflow of an automation as a flat list of steps.\n\nThe steps form a tree rather than a straight line: follow `parent_uuid` to reconstruct the\nbranches, and use `step_order` to order the steps that share a parent. An automation with no\nsteps yet returns an empty list.",
98
116
  "method": "GET",
99
117
  "path": "/api/reach/v1/profiles/{profileUuid}/automations/{automationUuid}/steps",
@@ -123,6 +141,12 @@ const tools: OpenApiTool[] = [
123
141
  },
124
142
  {
125
143
  "name": "reach_getCampaignDetailsV1",
144
+ "title": "Get campaign details",
145
+ "annotations": {
146
+ "title": "Get campaign details",
147
+ "readOnlyHint": true,
148
+ "destructiveHint": false
149
+ },
126
150
  "description": "Get a single campaign with its sender, subject, template reference, targeting and delivery\nprogress.\n\nThis describes how the campaign was set up and how far it has got. For opens, clicks and\nunsubscribes use the campaign statistics endpoint.",
127
151
  "method": "GET",
128
152
  "path": "/api/reach/v1/profiles/{profileUuid}/campaigns/{campaignUuid}",
@@ -152,6 +176,12 @@ const tools: OpenApiTool[] = [
152
176
  },
153
177
  {
154
178
  "name": "reach_listCampaignsV1",
179
+ "title": "List campaigns",
180
+ "annotations": {
181
+ "title": "List campaigns",
182
+ "readOnlyHint": true,
183
+ "destructiveHint": false
184
+ },
155
185
  "description": "Get a paginated list of the campaigns in a profile.\n\nEach campaign carries its headline engagement rates. Filter by status to find drafts,\nscheduled, sending or sent campaigns, keeping in mind that a fully sent campaign has the\nstatus `publish`. By default only regular campaigns are returned - pass `type` to get the\nemails sent by automations or the double opt-in confirmations instead.",
156
186
  "method": "GET",
157
187
  "path": "/api/reach/v1/profiles/{profileUuid}/campaigns",
@@ -212,6 +242,12 @@ const tools: OpenApiTool[] = [
212
242
  },
213
243
  {
214
244
  "name": "reach_getCampaignPerformanceV1",
245
+ "title": "Get campaign performance",
246
+ "annotations": {
247
+ "title": "Get campaign performance",
248
+ "readOnlyHint": true,
249
+ "destructiveHint": false
250
+ },
215
251
  "description": "Get the performance of a campaign: delivery, opens, clicks and unsubscribes, with the\nmatching rates.\n\nEvery count is unique contacts rather than raw events, so a contact who opens the same email\nfive times is counted once.",
216
252
  "method": "GET",
217
253
  "path": "/api/reach/v1/profiles/{profileUuid}/campaigns/{campaignUuid}/statistics",
@@ -241,6 +277,13 @@ const tools: OpenApiTool[] = [
241
277
  },
242
278
  {
243
279
  "name": "reach_deleteAContactV1",
280
+ "title": "Delete a contact",
281
+ "annotations": {
282
+ "title": "Delete a contact",
283
+ "readOnlyHint": false,
284
+ "destructiveHint": true,
285
+ "idempotentHint": true
286
+ },
244
287
  "description": "Delete a contact with the specified UUID.\n\nThis endpoint permanently removes a contact from the email marketing system.\n\n**Deprecated.** This endpoint cannot target a profile, so it always falls back to the\nclient's default profile and cannot delete contacts of any other profile. Use\n`DELETE /api/reach/v1/profiles/{profileUuid}/contacts/{contactUuid}` instead.",
245
288
  "method": "DELETE",
246
289
  "path": "/api/reach/v1/contacts/{uuid}",
@@ -265,6 +308,13 @@ const tools: OpenApiTool[] = [
265
308
  },
266
309
  {
267
310
  "name": "reach_deleteAContactFieldV1",
311
+ "title": "Delete a contact field",
312
+ "annotations": {
313
+ "title": "Delete a contact field",
314
+ "readOnlyHint": false,
315
+ "destructiveHint": true,
316
+ "idempotentHint": true
317
+ },
268
318
  "description": "Delete a custom contact field.\n\nEvery value contacts hold for the field is deleted with it, and for the choice types so\nare its options. The contacts themselves are not affected.",
269
319
  "method": "DELETE",
270
320
  "path": "/api/reach/v1/profiles/{profileUuid}/contacts/fields/{fieldUuid}",
@@ -294,6 +344,13 @@ const tools: OpenApiTool[] = [
294
344
  },
295
345
  {
296
346
  "name": "reach_updateAContactFieldV1",
347
+ "title": "Update a contact field",
348
+ "annotations": {
349
+ "title": "Update a contact field",
350
+ "readOnlyHint": false,
351
+ "destructiveHint": true,
352
+ "idempotentHint": true
353
+ },
297
354
  "description": "Rename a custom contact field and, for the choice types, replace its option set.\n\nOptions carrying a uuid are kept and relabelled, options without one are created, and any\nexisting option left out of the list is deleted along with the values contacts hold for\nit. The field type and slug cannot be changed.",
298
355
  "method": "PATCH",
299
356
  "path": "/api/reach/v1/profiles/{profileUuid}/contacts/fields/{fieldUuid}",
@@ -349,6 +406,12 @@ const tools: OpenApiTool[] = [
349
406
  },
350
407
  {
351
408
  "name": "reach_listContactFieldsV1",
409
+ "title": "List contact fields",
410
+ "annotations": {
411
+ "title": "List contact fields",
412
+ "readOnlyHint": true,
413
+ "destructiveHint": false
414
+ },
352
415
  "description": "Get the custom contact fields defined in a profile.\n\nCustom fields let you store your own attributes on contacts. The returned uuids are what\nyou pass to the contact update endpoint to set values, and choice fields also list the\noptions available to pick from.",
353
416
  "method": "GET",
354
417
  "path": "/api/reach/v1/profiles/{profileUuid}/contacts/fields",
@@ -373,6 +436,12 @@ const tools: OpenApiTool[] = [
373
436
  },
374
437
  {
375
438
  "name": "reach_createAContactFieldV1",
439
+ "title": "Create a contact field",
440
+ "annotations": {
441
+ "title": "Create a contact field",
442
+ "readOnlyHint": false,
443
+ "destructiveHint": false
444
+ },
376
445
  "description": "Define a new custom contact field in a profile.\n\nThe `slug` is derived from the label and, like the field type, cannot be changed later.\nUse the returned uuid to set values on contacts.",
377
446
  "method": "POST",
378
447
  "path": "/api/reach/v1/profiles/{profileUuid}/contacts/fields",
@@ -422,6 +491,12 @@ const tools: OpenApiTool[] = [
422
491
  },
423
492
  {
424
493
  "name": "reach_listContactGroupsV1",
494
+ "title": "List contact groups",
495
+ "annotations": {
496
+ "title": "List contact groups",
497
+ "readOnlyHint": true,
498
+ "destructiveHint": false
499
+ },
425
500
  "description": "Get a list of all contact groups.\n\nThis endpoint returns a list of contact groups that can be used to organize contacts.",
426
501
  "method": "GET",
427
502
  "path": "/api/reach/v1/contacts/groups",
@@ -439,6 +514,12 @@ const tools: OpenApiTool[] = [
439
514
  },
440
515
  {
441
516
  "name": "reach_listContactsV1",
517
+ "title": "List contacts",
518
+ "annotations": {
519
+ "title": "List contacts",
520
+ "readOnlyHint": true,
521
+ "destructiveHint": false
522
+ },
442
523
  "description": "Get a list of contacts, optionally filtered by group and subscription status.\n\nThis endpoint returns a paginated list of contacts with their basic information.\nYou can filter contacts by group UUID and subscription status.\n\n**Deprecated.** This endpoint cannot target a profile, so it always falls back to the\nclient's default profile and cannot list contacts of any other profile. Use\n`GET /api/reach/v1/profiles/{profileUuid}/contacts` instead, which also replaces the\ngroup filter with a tag filter.",
443
524
  "method": "GET",
444
525
  "path": "/api/reach/v1/contacts",
@@ -475,6 +556,12 @@ const tools: OpenApiTool[] = [
475
556
  },
476
557
  {
477
558
  "name": "reach_createANewContactV1",
559
+ "title": "Create a new contact",
560
+ "annotations": {
561
+ "title": "Create a new contact",
562
+ "readOnlyHint": false,
563
+ "destructiveHint": false
564
+ },
478
565
  "description": "Create a new contact in the email marketing system.\n\nThis endpoint allows you to create a new contact with basic information like name, email, and surname.\n\nIf double opt-in is enabled,\nthe contact will be created with a pending status and a confirmation email will be sent.",
479
566
  "method": "POST",
480
567
  "path": "/api/reach/v1/contacts",
@@ -523,6 +610,12 @@ const tools: OpenApiTool[] = [
523
610
  },
524
611
  {
525
612
  "name": "reach_getContactDetailsV1",
613
+ "title": "Get contact details",
614
+ "annotations": {
615
+ "title": "Get contact details",
616
+ "readOnlyHint": true,
617
+ "destructiveHint": false
618
+ },
526
619
  "description": "Get the full details of a single contact.\n\nAlongside the contact's own attributes this returns the tags assigned to it and the\nvalues it holds for the profile's custom contact fields.",
527
620
  "method": "GET",
528
621
  "path": "/api/reach/v1/profiles/{profileUuid}/contacts/{contactUuid}",
@@ -552,6 +645,13 @@ const tools: OpenApiTool[] = [
552
645
  },
553
646
  {
554
647
  "name": "reach_deleteAProfileContactV1",
648
+ "title": "Delete a profile contact",
649
+ "annotations": {
650
+ "title": "Delete a profile contact",
651
+ "readOnlyHint": false,
652
+ "destructiveHint": true,
653
+ "idempotentHint": true
654
+ },
555
655
  "description": "Permanently delete a contact from a profile.\n\nThe contact is removed together with its custom field values and tag assignments.",
556
656
  "method": "DELETE",
557
657
  "path": "/api/reach/v1/profiles/{profileUuid}/contacts/{contactUuid}",
@@ -581,6 +681,13 @@ const tools: OpenApiTool[] = [
581
681
  },
582
682
  {
583
683
  "name": "reach_updateAContactV1",
684
+ "title": "Update a contact",
685
+ "annotations": {
686
+ "title": "Update a contact",
687
+ "readOnlyHint": false,
688
+ "destructiveHint": true,
689
+ "idempotentHint": true
690
+ },
584
691
  "description": "Update a contact's attributes and custom field values.\n\nOnly the properties present in the request body are changed, so a partial body is enough\nto change a single attribute. Sending a property as `null` clears it.\n\nThe response carries the contact's core attributes. Read back its tags, custom field\nvalues, source and note with `GET /api/reach/v1/profiles/{profileUuid}/contacts/{contactUuid}`.",
585
692
  "method": "PATCH",
586
693
  "path": "/api/reach/v1/profiles/{profileUuid}/contacts/{contactUuid}",
@@ -669,6 +776,12 @@ const tools: OpenApiTool[] = [
669
776
  },
670
777
  {
671
778
  "name": "reach_createContactsInBulkV1",
779
+ "title": "Create contacts in bulk",
780
+ "annotations": {
781
+ "title": "Create contacts in bulk",
782
+ "readOnlyHint": false,
783
+ "destructiveHint": false
784
+ },
672
785
  "description": "Create many contacts in a profile in a single call.\n\nThe contacts are imported in the background, so a success response means the import was\naccepted rather than finished. Contacts whose email already exists in the profile are\nleft as they are. If double opt-in is enabled, new contacts start off pending and are\nsent a confirmation email.",
673
786
  "method": "POST",
674
787
  "path": "/api/reach/v1/profiles/{profileUuid}/contacts/bulk",
@@ -735,6 +848,12 @@ const tools: OpenApiTool[] = [
735
848
  },
736
849
  {
737
850
  "name": "reach_listProfileContactsV1",
851
+ "title": "List profile contacts",
852
+ "annotations": {
853
+ "title": "List profile contacts",
854
+ "readOnlyHint": true,
855
+ "destructiveHint": false
856
+ },
738
857
  "description": "Get a paginated list of contacts belonging to a profile.\n\nContacts can be filtered by subscription status, by tag, and by an email search term.\nThe `meta.total` field of the response is the number of contacts matching the filters,\nso calling this endpoint without filters gives the profile's total contact count.",
739
858
  "method": "GET",
740
859
  "path": "/api/reach/v1/profiles/{profileUuid}/contacts",
@@ -785,6 +904,12 @@ const tools: OpenApiTool[] = [
785
904
  },
786
905
  {
787
906
  "name": "reach_createNewContactsV1",
907
+ "title": "Create new contacts",
908
+ "annotations": {
909
+ "title": "Create new contacts",
910
+ "readOnlyHint": false,
911
+ "destructiveHint": false
912
+ },
788
913
  "description": "Create a new contact in the email marketing system.\n\nThis endpoint allows you to create a new contact with basic information like name, email, and surname.\n\nIf double opt-in is enabled, the contact will be created with a pending status\nand a confirmation email will be sent.",
789
914
  "method": "POST",
790
915
  "path": "/api/reach/v1/profiles/{profileUuid}/contacts",
@@ -838,6 +963,12 @@ const tools: OpenApiTool[] = [
838
963
  },
839
964
  {
840
965
  "name": "reach_listSegmentsV1",
966
+ "title": "List segments",
967
+ "annotations": {
968
+ "title": "List segments",
969
+ "readOnlyHint": true,
970
+ "destructiveHint": false
971
+ },
841
972
  "description": "Get a list of all contact segments.\n\nThis endpoint returns a list of contact segments that can be used to organize contacts.\n\n**Deprecated.** This endpoint cannot target a profile, so it always falls back to\nthe client's default profile and cannot list the segments of any other profile. Use\n`GET /api/reach/v1/profiles/{profileUuid}/segmentation/segments` instead.",
842
973
  "method": "GET",
843
974
  "path": "/api/reach/v1/segmentation/segments",
@@ -855,6 +986,12 @@ const tools: OpenApiTool[] = [
855
986
  },
856
987
  {
857
988
  "name": "reach_createANewContactSegmentV1",
989
+ "title": "Create a new contact segment",
990
+ "annotations": {
991
+ "title": "Create a new contact segment",
992
+ "readOnlyHint": false,
993
+ "destructiveHint": false
994
+ },
858
995
  "description": "Create a new contact segment.\n\nThis endpoint allows creating a new contact segment that can be used to organize contacts.\nThe segment can be configured with specific criteria like email, name, subscription status, etc.\n\n**Deprecated.** This endpoint cannot target a profile, so it always falls back to\nthe client's default profile and cannot create segments in any other profile. Use\n`POST /api/reach/v1/profiles/{profileUuid}/segmentation/segments` instead.",
859
996
  "method": "POST",
860
997
  "path": "/api/reach/v1/segmentation/segments",
@@ -961,6 +1098,12 @@ const tools: OpenApiTool[] = [
961
1098
  },
962
1099
  {
963
1100
  "name": "reach_countProfileSegmentContactsV1",
1101
+ "title": "Count profile segment contacts",
1102
+ "annotations": {
1103
+ "title": "Count profile segment contacts",
1104
+ "readOnlyHint": true,
1105
+ "destructiveHint": false
1106
+ },
964
1107
  "description": "Count the contacts currently matching a segment without listing them.\n\nCheaper than paging through the segment contacts endpoint when only the size is needed.",
965
1108
  "method": "GET",
966
1109
  "path": "/api/reach/v1/profiles/{profileUuid}/segmentation/segments/{segmentUuid}/count",
@@ -990,6 +1133,12 @@ const tools: OpenApiTool[] = [
990
1133
  },
991
1134
  {
992
1135
  "name": "reach_listProfileSegmentContactsV1",
1136
+ "title": "List profile segment contacts",
1137
+ "annotations": {
1138
+ "title": "List profile segment contacts",
1139
+ "readOnlyHint": true,
1140
+ "destructiveHint": false
1141
+ },
993
1142
  "description": "Retrieve contacts associated with a specific segment for a given profile.\n\nThis endpoint allows you to fetch and filter contacts that belong to a particular segment,\nidentified by its UUID, scoped to a specific profile.",
994
1143
  "method": "GET",
995
1144
  "path": "/api/reach/v1/profiles/{profileUuid}/segmentation/segments/{segmentUuid}/contacts",
@@ -1027,6 +1176,12 @@ const tools: OpenApiTool[] = [
1027
1176
  },
1028
1177
  {
1029
1178
  "name": "reach_getProfileSegmentDetailsV1",
1179
+ "title": "Get profile segment details",
1180
+ "annotations": {
1181
+ "title": "Get profile segment details",
1182
+ "readOnlyHint": true,
1183
+ "destructiveHint": false
1184
+ },
1030
1185
  "description": "Get a single segment of a profile, including the conditions that define it.\n\nTo retrieve the contacts currently matching those conditions, use the segment contacts\nendpoint instead.",
1031
1186
  "method": "GET",
1032
1187
  "path": "/api/reach/v1/profiles/{profileUuid}/segmentation/segments/{segmentUuid}",
@@ -1056,6 +1211,13 @@ const tools: OpenApiTool[] = [
1056
1211
  },
1057
1212
  {
1058
1213
  "name": "reach_updateAProfileSegmentV1",
1214
+ "title": "Update a profile segment",
1215
+ "annotations": {
1216
+ "title": "Update a profile segment",
1217
+ "readOnlyHint": false,
1218
+ "destructiveHint": true,
1219
+ "idempotentHint": true
1220
+ },
1059
1221
  "description": "Rename a segment and/or replace the conditions that define it.\n\n`name` is always required. Omit `conditions` to rename without touching the conditions;\nsupply them and they replace the existing set entirely rather than being merged into it.\nContacts are never modified, but which of them match the segment can change immediately.",
1060
1222
  "method": "PUT",
1061
1223
  "path": "/api/reach/v1/profiles/{profileUuid}/segmentation/segments/{segmentUuid}",
@@ -1153,6 +1315,13 @@ const tools: OpenApiTool[] = [
1153
1315
  },
1154
1316
  {
1155
1317
  "name": "reach_deleteAProfileSegmentV1",
1318
+ "title": "Delete a profile segment",
1319
+ "annotations": {
1320
+ "title": "Delete a profile segment",
1321
+ "readOnlyHint": false,
1322
+ "destructiveHint": true,
1323
+ "idempotentHint": true
1324
+ },
1156
1325
  "description": "Delete a segment.\n\nOnly the segment definition is removed. The contacts that matched it are left untouched.",
1157
1326
  "method": "DELETE",
1158
1327
  "path": "/api/reach/v1/profiles/{profileUuid}/segmentation/segments/{segmentUuid}",
@@ -1182,6 +1351,12 @@ const tools: OpenApiTool[] = [
1182
1351
  },
1183
1352
  {
1184
1353
  "name": "reach_listSegmentFilterAttributesV1",
1354
+ "title": "List segment filter attributes",
1355
+ "annotations": {
1356
+ "title": "List segment filter attributes",
1357
+ "readOnlyHint": true,
1358
+ "destructiveHint": false
1359
+ },
1185
1360
  "description": "List every attribute a segment condition can filter on, with the operators each attribute\naccepts, the value format they expect and, where the value is constrained, the allowed\nvalues.\n\nThe list is profile specific: it includes the profile's custom contact fields, its tags and\nits 20 most recently published campaigns, so the valid attributes cannot be hardcoded. Read\nit before creating or updating a segment to discover the valid `attribute`, `operator` and\n`value` combinations.",
1186
1361
  "method": "GET",
1187
1362
  "path": "/api/reach/v1/profiles/{profileUuid}/segmentation/filters/attributes",
@@ -1206,6 +1381,12 @@ const tools: OpenApiTool[] = [
1206
1381
  },
1207
1382
  {
1208
1383
  "name": "reach_previewContactsMatchingConditionsV1",
1384
+ "title": "Preview contacts matching conditions",
1385
+ "annotations": {
1386
+ "title": "Preview contacts matching conditions",
1387
+ "readOnlyHint": true,
1388
+ "destructiveHint": false
1389
+ },
1209
1390
  "description": "Preview the contacts matching a set of conditions without saving a segment.\n\nThe body is the same set of conditions accepted when creating or updating a segment, so this\nis how to check who a filter reaches, and how many, before persisting it. Nothing is stored\nand no contact is modified.\n\nCall the segment filter attributes endpoint first to discover the valid `attribute`,\n`operator` and `value` combinations.",
1210
1391
  "method": "POST",
1211
1392
  "path": "/api/reach/v1/profiles/{profileUuid}/segmentation/filters/contacts",
@@ -1326,6 +1507,12 @@ const tools: OpenApiTool[] = [
1326
1507
  },
1327
1508
  {
1328
1509
  "name": "reach_listProfileSegmentsV1",
1510
+ "title": "List profile segments",
1511
+ "annotations": {
1512
+ "title": "List profile segments",
1513
+ "readOnlyHint": true,
1514
+ "destructiveHint": false
1515
+ },
1329
1516
  "description": "Get a paginated list of the segments defined in a profile.\n\nEach entry carries the number of contacts currently matching it, which is recalculated on\nread rather than stored. Use `count_type` to count either every matching contact or only\nthe subscribed ones.",
1330
1517
  "method": "GET",
1331
1518
  "path": "/api/reach/v1/profiles/{profileUuid}/segmentation/segments",
@@ -1366,6 +1553,12 @@ const tools: OpenApiTool[] = [
1366
1553
  },
1367
1554
  {
1368
1555
  "name": "reach_createAProfileSegmentV1",
1556
+ "title": "Create a profile segment",
1557
+ "annotations": {
1558
+ "title": "Create a profile segment",
1559
+ "readOnlyHint": false,
1560
+ "destructiveHint": false
1561
+ },
1369
1562
  "description": "Create a segment in a profile.\n\nA segment is a saved set of conditions rather than a fixed list, so its membership changes\nas contacts change. Creating one does not modify any contact.",
1370
1563
  "method": "POST",
1371
1564
  "path": "/api/reach/v1/profiles/{profileUuid}/segmentation/segments",
@@ -1460,6 +1653,12 @@ const tools: OpenApiTool[] = [
1460
1653
  },
1461
1654
  {
1462
1655
  "name": "reach_listSegmentContactsV1",
1656
+ "title": "List segment contacts",
1657
+ "annotations": {
1658
+ "title": "List segment contacts",
1659
+ "readOnlyHint": true,
1660
+ "destructiveHint": false
1661
+ },
1463
1662
  "description": "Retrieve contacts associated with a specific segment.\n\nThis endpoint allows you to fetch and filter contacts that belong to a particular segment,\nidentified by its UUID.\n\n**Deprecated.** This endpoint cannot target a profile, so it always falls back to\nthe client's default profile and cannot read segments of any other profile. Use\n`GET /api/reach/v1/profiles/{profileUuid}/segmentation/segments/{segmentUuid}/contacts` instead.",
1464
1663
  "method": "GET",
1465
1664
  "path": "/api/reach/v1/segmentation/segments/{segmentUuid}/contacts",
@@ -1492,6 +1691,12 @@ const tools: OpenApiTool[] = [
1492
1691
  },
1493
1692
  {
1494
1693
  "name": "reach_getSegmentDetailsV1",
1694
+ "title": "Get segment details",
1695
+ "annotations": {
1696
+ "title": "Get segment details",
1697
+ "readOnlyHint": true,
1698
+ "destructiveHint": false
1699
+ },
1495
1700
  "description": "Get details of a specific segment.\n\nThis endpoint retrieves information about a single segment identified by UUID.\nSegments are used to organize and group contacts based on specific criteria.\n\n**Deprecated.** This endpoint cannot target a profile, so it always falls back to\nthe client's default profile and cannot read segments of any other profile. Use\n`GET /api/reach/v1/profiles/{profileUuid}/segmentation/segments/{segmentUuid}` instead.",
1496
1701
  "method": "GET",
1497
1702
  "path": "/api/reach/v1/segmentation/segments/{segmentUuid}",
@@ -1516,6 +1721,12 @@ const tools: OpenApiTool[] = [
1516
1721
  },
1517
1722
  {
1518
1723
  "name": "reach_assignAContactToATagV1",
1724
+ "title": "Assign a contact to a tag",
1725
+ "annotations": {
1726
+ "title": "Assign a contact to a tag",
1727
+ "readOnlyHint": false,
1728
+ "destructiveHint": false
1729
+ },
1519
1730
  "description": "Assign a tag to a single contact.\n\nUnlike the bulk endpoint this is applied immediately rather than queued. Assigning a tag\nthe contact already carries succeeds without duplicating it.",
1520
1731
  "method": "POST",
1521
1732
  "path": "/api/reach/v1/profiles/{profileUuid}/tags/{tagUuid}/contacts/{contactUuid}",
@@ -1550,6 +1761,13 @@ const tools: OpenApiTool[] = [
1550
1761
  },
1551
1762
  {
1552
1763
  "name": "reach_removeAContactFromATagV1",
1764
+ "title": "Remove a contact from a tag",
1765
+ "annotations": {
1766
+ "title": "Remove a contact from a tag",
1767
+ "readOnlyHint": false,
1768
+ "destructiveHint": true,
1769
+ "idempotentHint": true
1770
+ },
1553
1771
  "description": "Remove a tag from a single contact.\n\nUnlike the bulk endpoint this is applied immediately rather than queued. Neither the tag\nnor the contact is deleted.",
1554
1772
  "method": "DELETE",
1555
1773
  "path": "/api/reach/v1/profiles/{profileUuid}/tags/{tagUuid}/contacts/{contactUuid}",
@@ -1584,6 +1802,12 @@ const tools: OpenApiTool[] = [
1584
1802
  },
1585
1803
  {
1586
1804
  "name": "reach_assignContactsToATagV1",
1805
+ "title": "Assign contacts to a tag",
1806
+ "annotations": {
1807
+ "title": "Assign contacts to a tag",
1808
+ "readOnlyHint": false,
1809
+ "destructiveHint": false
1810
+ },
1587
1811
  "description": "Assign a tag to many contacts at once.\n\nPass `contact_uuids` to target specific contacts, or `all_contacts` to target every contact\nin the profile. The work is queued, so a success response means it was accepted rather than\nfinished. Contacts that already carry the tag are left alone.",
1588
1812
  "method": "POST",
1589
1813
  "path": "/api/reach/v1/profiles/{profileUuid}/tags/{tagUuid}/contacts",
@@ -1625,6 +1849,13 @@ const tools: OpenApiTool[] = [
1625
1849
  },
1626
1850
  {
1627
1851
  "name": "reach_removeContactsFromATagV1",
1852
+ "title": "Remove contacts from a tag",
1853
+ "annotations": {
1854
+ "title": "Remove contacts from a tag",
1855
+ "readOnlyHint": false,
1856
+ "destructiveHint": true,
1857
+ "idempotentHint": true
1858
+ },
1628
1859
  "description": "Remove a tag from many contacts at once.\n\nPass `contact_uuids` to target specific contacts, or `all_contacts` to target every contact\nin the profile. The work is queued, so a success response means it was accepted rather than\nfinished. The tag itself and the contacts are not deleted.",
1629
1860
  "method": "DELETE",
1630
1861
  "path": "/api/reach/v1/profiles/{profileUuid}/tags/{tagUuid}/contacts",
@@ -1654,6 +1885,13 @@ const tools: OpenApiTool[] = [
1654
1885
  },
1655
1886
  {
1656
1887
  "name": "reach_deleteATagV1",
1888
+ "title": "Delete a tag",
1889
+ "annotations": {
1890
+ "title": "Delete a tag",
1891
+ "readOnlyHint": false,
1892
+ "destructiveHint": true,
1893
+ "idempotentHint": true
1894
+ },
1657
1895
  "description": "Delete a tag and remove it from every contact carrying it.\n\nThe contacts themselves are not deleted. This is idempotent: deleting a tag that does not\nexist in the profile still succeeds.",
1658
1896
  "method": "DELETE",
1659
1897
  "path": "/api/reach/v1/profiles/{profileUuid}/tags/{tagUuid}",
@@ -1683,6 +1921,13 @@ const tools: OpenApiTool[] = [
1683
1921
  },
1684
1922
  {
1685
1923
  "name": "reach_renameATagV1",
1924
+ "title": "Rename a tag",
1925
+ "annotations": {
1926
+ "title": "Rename a tag",
1927
+ "readOnlyHint": false,
1928
+ "destructiveHint": true,
1929
+ "idempotentHint": true
1930
+ },
1686
1931
  "description": "Rename a tag.\n\nThe contacts assigned to the tag are unaffected. Names are unique within a profile, so\nrenaming a tag to a name that is already taken is rejected.",
1687
1932
  "method": "PATCH",
1688
1933
  "path": "/api/reach/v1/profiles/{profileUuid}/tags/{tagUuid}",
@@ -1717,6 +1962,12 @@ const tools: OpenApiTool[] = [
1717
1962
  },
1718
1963
  {
1719
1964
  "name": "reach_listProfileTagsV1",
1965
+ "title": "List profile tags",
1966
+ "annotations": {
1967
+ "title": "List profile tags",
1968
+ "readOnlyHint": true,
1969
+ "destructiveHint": false
1970
+ },
1720
1971
  "description": "Get all tags defined in a profile.\n\nTags are the way contacts are grouped in Reach, and can be used to filter the contact\nlist or to build segments.",
1721
1972
  "method": "GET",
1722
1973
  "path": "/api/reach/v1/profiles/{profileUuid}/tags",
@@ -1741,6 +1992,12 @@ const tools: OpenApiTool[] = [
1741
1992
  },
1742
1993
  {
1743
1994
  "name": "reach_createOrFindTagsV1",
1995
+ "title": "Create or find tags",
1996
+ "annotations": {
1997
+ "title": "Create or find tags",
1998
+ "readOnlyHint": false,
1999
+ "destructiveHint": false
2000
+ },
1744
2001
  "description": "Create tags in a profile.\n\nNames that already exist in the profile are not duplicated: the existing tag is returned\ninstead, so the call is safe to repeat. Every tag in the request is returned, whether it\nwas created now or already existed.",
1745
2002
  "method": "POST",
1746
2003
  "path": "/api/reach/v1/profiles/{profileUuid}/tags",
@@ -1774,6 +2031,12 @@ const tools: OpenApiTool[] = [
1774
2031
  },
1775
2032
  {
1776
2033
  "name": "reach_getFormDetailsV1",
2034
+ "title": "Get form details",
2035
+ "annotations": {
2036
+ "title": "Get form details",
2037
+ "readOnlyHint": true,
2038
+ "destructiveHint": false
2039
+ },
1777
2040
  "description": "Get a single form with the URL of its hosted template and the tags it applies to the contacts\nit captures.\n\nThere is no ready-made embed snippet in the response - either serve the template HTML yourself\nor build your own embed around the form uuid.",
1778
2041
  "method": "GET",
1779
2042
  "path": "/api/reach/v1/profiles/{profileUuid}/forms/{formUuid}",
@@ -1803,6 +2066,13 @@ const tools: OpenApiTool[] = [
1803
2066
  },
1804
2067
  {
1805
2068
  "name": "reach_deleteFormV1",
2069
+ "title": "Delete form",
2070
+ "annotations": {
2071
+ "title": "Delete form",
2072
+ "readOnlyHint": false,
2073
+ "destructiveHint": true,
2074
+ "idempotentHint": true
2075
+ },
1806
2076
  "description": "Permanently delete a form together with its template.\n\nA form that has already captured submissions cannot be deleted, so that the contacts it collected\nare never silently discarded - pause the form instead to stop it collecting new ones. Views alone\ndo not block deletion.",
1807
2077
  "method": "DELETE",
1808
2078
  "path": "/api/reach/v1/profiles/{profileUuid}/forms/{formUuid}",
@@ -1832,6 +2102,12 @@ const tools: OpenApiTool[] = [
1832
2102
  },
1833
2103
  {
1834
2104
  "name": "reach_listFormsV1",
2105
+ "title": "List forms",
2106
+ "annotations": {
2107
+ "title": "List forms",
2108
+ "readOnlyHint": true,
2109
+ "destructiveHint": false
2110
+ },
1835
2111
  "description": "Get a paginated list of the signup forms in a profile.\n\nEach form carries a reference to the template that renders it. Get the form details for a\ndirectly usable template URL and for the tags the form puts on the contacts it captures.",
1836
2112
  "method": "GET",
1837
2113
  "path": "/api/reach/v1/profiles/{profileUuid}/forms",
@@ -1864,6 +2140,12 @@ const tools: OpenApiTool[] = [
1864
2140
  },
1865
2141
  {
1866
2142
  "name": "reach_getProfileDomainDNSStatusV1",
2143
+ "title": "Get profile domain DNS status",
2144
+ "annotations": {
2145
+ "title": "Get profile domain DNS status",
2146
+ "readOnlyHint": true,
2147
+ "destructiveHint": false
2148
+ },
1867
2149
  "description": "Retrieve the DNS configuration status for a profile's domain.\n\nThis endpoint reports the state of MX, SPF, DKIM and DMARC records, including the\nactual records found and the suggested records required for correct email delivery.",
1868
2150
  "method": "GET",
1869
2151
  "path": "/api/reach/v1/profiles/{profileUuid}/domains/dns-status",
@@ -1888,6 +2170,12 @@ const tools: OpenApiTool[] = [
1888
2170
  },
1889
2171
  {
1890
2172
  "name": "reach_getConnectedSendingDomainV1",
2173
+ "title": "Get connected sending domain",
2174
+ "annotations": {
2175
+ "title": "Get connected sending domain",
2176
+ "readOnlyHint": true,
2177
+ "destructiveHint": false
2178
+ },
1891
2179
  "description": "Get the sending domain connected to the profile, its verification status and any suspended\nsender addresses.\n\nCampaigns only go out once a domain is connected and active, so this is the cheapest way to\ncheck that precondition before building one. A profile with no domain connected returns the\nsame shape with every field set to `null`. For the individual MX, SPF, DKIM and DMARC records\nbehind the status, use the DNS status endpoint.",
1892
2180
  "method": "GET",
1893
2181
  "path": "/api/reach/v1/profiles/{profileUuid}/domains",
@@ -1912,6 +2200,12 @@ const tools: OpenApiTool[] = [
1912
2200
  },
1913
2201
  {
1914
2202
  "name": "reach_listPlanFeatureAccessV1",
2203
+ "title": "List plan feature access",
2204
+ "annotations": {
2205
+ "title": "List plan feature access",
2206
+ "readOnlyHint": true,
2207
+ "destructiveHint": false
2208
+ },
1915
2209
  "description": "List which plan features the profile can use.\n\nThis is the feature lock matrix, not a usage quota. `available` means the feature can be\nused right now and `locked` means it is not part of the base plan, so an upgrade is needed.\nFor remaining emails, recipients and AI credits use the limits endpoint instead.\n\nWorth checking before building something that cannot be activated afterwards, such as an\nautomation on a plan without automation activation.",
1916
2210
  "method": "GET",
1917
2211
  "path": "/api/reach/v1/profiles/{profileUuid}/features",
@@ -1936,6 +2230,12 @@ const tools: OpenApiTool[] = [
1936
2230
  },
1937
2231
  {
1938
2232
  "name": "reach_getRemainingPlanLimitsV1",
2233
+ "title": "Get remaining plan limits",
2234
+ "annotations": {
2235
+ "title": "Get remaining plan limits",
2236
+ "readOnlyHint": true,
2237
+ "destructiveHint": false
2238
+ },
1939
2239
  "description": "Get how much of the plan is left for the current period.\n\nTwo things to keep in mind before you build alerting on this. The period is a calendar month\nrather than a billing anniversary, so the counters reset on the 1st no matter when the\nsubscription started. And usage is tracked per order, so every profile on the same order shares\none pool and reports the same numbers here. Only the current period is available, past usage is\nnot kept.",
1940
2240
  "method": "GET",
1941
2241
  "path": "/api/reach/v1/profiles/{profileUuid}/limits",
@@ -1960,6 +2260,12 @@ const tools: OpenApiTool[] = [
1960
2260
  },
1961
2261
  {
1962
2262
  "name": "reach_listProfilesV1",
2263
+ "title": "List Profiles",
2264
+ "annotations": {
2265
+ "title": "List Profiles",
2266
+ "readOnlyHint": true,
2267
+ "destructiveHint": false
2268
+ },
1963
2269
  "description": "This endpoint returns all profiles available to the client, including their basic information.",
1964
2270
  "method": "GET",
1965
2271
  "path": "/api/reach/v1/profiles",