hostinger-api-mcp 1.53.0 → 1.54.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -69,7 +69,7 @@ pnpm update -g @hostinger/mcp
69
69
 
70
70
  This package installs the following MCP server commands:
71
71
 
72
- - `hostinger-api-mcp` — unified server with every tool (372 total)
72
+ - `hostinger-api-mcp` — unified server with every tool (375 total)
73
73
  - `hostinger-agency-hosting-mcp` — 38 tools for agency-hosting
74
74
  - `hostinger-billing-mcp` — 9 tools for billing
75
75
  - `hostinger-dns-mcp` — 8 tools for dns
@@ -78,7 +78,7 @@ This package installs the following MCP server commands:
78
78
  - `hostinger-horizons-mcp` — 2 tools for horizons
79
79
  - `hostinger-hosting-mcp` — 58 tools for hosting
80
80
  - `hostinger-mail-mcp` — 38 tools for mail
81
- - `hostinger-reach-mcp` — 49 tools for reach
81
+ - `hostinger-reach-mcp` — 52 tools for reach
82
82
  - `hostinger-vps-mcp` — 63 tools for vps
83
83
  - `hostinger-wordpress-mcp` — 38 tools for wordpress
84
84
 
@@ -2661,6 +2661,17 @@ emails sent by automations or the double opt-in confirmations instead.
2661
2661
  - **Method**: `GET`
2662
2662
  - **Path**: `/api/reach/v1/profiles/{profileUuid}/campaigns`
2663
2663
 
2664
+ #### reach_createADraftCampaignV1
2665
+
2666
+ Create a campaign in a profile.
2667
+
2668
+ The campaign is created as a draft, so nothing is sent and no contact is touched. It has no
2669
+ audience yet either - targeting and scheduling are not part of this request, the draft is
2670
+ finished and sent from the Reach interface.
2671
+
2672
+ - **Method**: `POST`
2673
+ - **Path**: `/api/reach/v1/profiles/{profileUuid}/campaigns`
2674
+
2664
2675
  #### reach_getCampaignPerformanceV1
2665
2676
 
2666
2677
  Get the performance of a campaign: delivery, opens, clicks and unsubscribes, with the
@@ -3155,6 +3166,28 @@ This endpoint returns all profiles available to the client, including their basi
3155
3166
  - **Method**: `GET`
3156
3167
  - **Path**: `/api/reach/v1/profiles`
3157
3168
 
3169
+ #### reach_listEmailTemplatesV1
3170
+
3171
+ Get a list of the email templates in a profile, most recently updated first.
3172
+
3173
+ Templates are the reusable email bodies a campaign is built from. The list is not paginated
3174
+ and only the metadata is returned - the template content itself is not exposed. Use the
3175
+ `uuid` of a template as the `template_uuid` when creating a campaign.
3176
+
3177
+ - **Method**: `GET`
3178
+ - **Path**: `/api/reach/v1/profiles/{profileUuid}/templates`
3179
+
3180
+ #### reach_createAnEmailTemplateV1
3181
+
3182
+ Create an email template in a profile.
3183
+
3184
+ The template holds the HTML body a campaign reuses, so it can be created before any
3185
+ campaign exists. Only the template metadata comes back - keep the returned `uuid` to
3186
+ reference it as the `template_uuid` of a campaign.
3187
+
3188
+ - **Method**: `POST`
3189
+ - **Path**: `/api/reach/v1/profiles/{profileUuid}/templates`
3190
+
3158
3191
  ### `hostinger-vps-mcp`
3159
3192
 
3160
3193
  #### VPS_getDataCenterListV1
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hostinger-api-mcp",
3
- "version": "1.53.0",
3
+ "version": "1.54.0",
4
4
  "description": "Hostinger API — manage domains, DNS, hosting, VPS, billing and more from Gemini CLI.",
5
5
  "mcpServers": {
6
6
  "hostinger": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hostinger-api-mcp",
3
- "version": "1.53.0",
3
+ "version": "1.54.0",
4
4
  "mcpName": "io.github.hostinger/hostinger-api-mcp",
5
5
  "description": "MCP server for Hostinger API",
6
6
  "repository": {
package/server.json CHANGED
@@ -6,12 +6,12 @@
6
6
  "url": "https://github.com/hostinger/api-mcp-server",
7
7
  "source": "github"
8
8
  },
9
- "version": "1.53.0",
9
+ "version": "1.54.0",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "npm",
13
13
  "identifier": "@hostinger/mcp",
14
- "version": "1.53.0",
14
+ "version": "1.54.0",
15
15
  "transport": {
16
16
  "type": "stdio"
17
17
  },
@@ -29,7 +29,7 @@ const SECURITY_SCHEMES = {
29
29
 
30
30
  /**
31
31
  * MCP Server for Hostinger API
32
- * Generated from OpenAPI spec version 1.46.2
32
+ * Generated from OpenAPI spec version 1.47.0
33
33
  */
34
34
  class MCPServer {
35
35
  constructor({ name, version, tools }) {
@@ -52,7 +52,7 @@ const SECURITY_SCHEMES: Record<string, SecurityScheme> = {
52
52
 
53
53
  /**
54
54
  * MCP Server for Hostinger API
55
- * Generated from OpenAPI spec version 1.46.2
55
+ * Generated from OpenAPI spec version 1.47.0
56
56
  */
57
57
  class MCPServer {
58
58
  private readonly name: string;
@@ -746,7 +746,6 @@ export default [
746
746
  "type": "string",
747
747
  "description": "Website type",
748
748
  "enum": [
749
- "horizons",
750
749
  "node-static"
751
750
  ]
752
751
  },
@@ -791,46 +790,6 @@ export default [
791
790
  "title",
792
791
  "admin"
793
792
  ]
794
- },
795
- "clone": {
796
- "type": "object",
797
- "description": "Clone the new website from an existing website",
798
- "properties": {
799
- "website_uid": {
800
- "type": "string",
801
- "description": "website_uid parameter"
802
- }
803
- },
804
- "required": [
805
- "website_uid"
806
- ]
807
- },
808
- "derive_domain": {
809
- "type": "object",
810
- "description": "Derive the domain from an existing vhost",
811
- "properties": {
812
- "from_vhost": {
813
- "type": "object",
814
- "description": "from_vhost parameter",
815
- "properties": {
816
- "username": {
817
- "type": "string",
818
- "description": "username parameter"
819
- },
820
- "vhost": {
821
- "type": "string",
822
- "description": "vhost parameter"
823
- }
824
- },
825
- "required": [
826
- "username",
827
- "vhost"
828
- ]
829
- }
830
- },
831
- "required": [
832
- "from_vhost"
833
- ]
834
793
  }
835
794
  },
836
795
  "required": [
@@ -760,7 +760,6 @@ const tools: OpenApiTool[] = [
760
760
  "type": "string",
761
761
  "description": "Website type",
762
762
  "enum": [
763
- "horizons",
764
763
  "node-static"
765
764
  ]
766
765
  },
@@ -805,46 +804,6 @@ const tools: OpenApiTool[] = [
805
804
  "title",
806
805
  "admin"
807
806
  ]
808
- },
809
- "clone": {
810
- "type": "object",
811
- "description": "Clone the new website from an existing website",
812
- "properties": {
813
- "website_uid": {
814
- "type": "string",
815
- "description": "website_uid parameter"
816
- }
817
- },
818
- "required": [
819
- "website_uid"
820
- ]
821
- },
822
- "derive_domain": {
823
- "type": "object",
824
- "description": "Derive the domain from an existing vhost",
825
- "properties": {
826
- "from_vhost": {
827
- "type": "object",
828
- "description": "from_vhost parameter",
829
- "properties": {
830
- "username": {
831
- "type": "string",
832
- "description": "username parameter"
833
- },
834
- "vhost": {
835
- "type": "string",
836
- "description": "vhost parameter"
837
- }
838
- },
839
- "required": [
840
- "username",
841
- "vhost"
842
- ]
843
- }
844
- },
845
- "required": [
846
- "from_vhost"
847
- ]
848
807
  }
849
808
  },
850
809
  "required": [
@@ -1045,7 +1045,6 @@ export default [
1045
1045
  "type": "string",
1046
1046
  "description": "Website type",
1047
1047
  "enum": [
1048
- "horizons",
1049
1048
  "node-static"
1050
1049
  ]
1051
1050
  },
@@ -1090,46 +1089,6 @@ export default [
1090
1089
  "title",
1091
1090
  "admin"
1092
1091
  ]
1093
- },
1094
- "clone": {
1095
- "type": "object",
1096
- "description": "Clone the new website from an existing website",
1097
- "properties": {
1098
- "website_uid": {
1099
- "type": "string",
1100
- "description": "website_uid parameter"
1101
- }
1102
- },
1103
- "required": [
1104
- "website_uid"
1105
- ]
1106
- },
1107
- "derive_domain": {
1108
- "type": "object",
1109
- "description": "Derive the domain from an existing vhost",
1110
- "properties": {
1111
- "from_vhost": {
1112
- "type": "object",
1113
- "description": "from_vhost parameter",
1114
- "properties": {
1115
- "username": {
1116
- "type": "string",
1117
- "description": "username parameter"
1118
- },
1119
- "vhost": {
1120
- "type": "string",
1121
- "description": "vhost parameter"
1122
- }
1123
- },
1124
- "required": [
1125
- "username",
1126
- "vhost"
1127
- ]
1128
- }
1129
- },
1130
- "required": [
1131
- "from_vhost"
1132
- ]
1133
1092
  }
1134
1093
  },
1135
1094
  "required": [
@@ -9505,6 +9464,72 @@ export default [
9505
9464
  ],
9506
9465
  "group": "reach"
9507
9466
  },
9467
+ {
9468
+ "name": "reach_createADraftCampaignV1",
9469
+ "title": "Create a draft campaign",
9470
+ "annotations": {
9471
+ "title": "Create a draft campaign",
9472
+ "readOnlyHint": false,
9473
+ "destructiveHint": false
9474
+ },
9475
+ "description": "Create a campaign in a profile.\n\nThe campaign is created as a draft, so nothing is sent and no contact is touched. It has no\naudience yet either - targeting and scheduling are not part of this request, the draft is\nfinished and sent from the Reach interface.",
9476
+ "method": "POST",
9477
+ "path": "/api/reach/v1/profiles/{profileUuid}/campaigns",
9478
+ "inputSchema": {
9479
+ "type": "object",
9480
+ "properties": {
9481
+ "profileUuid": {
9482
+ "type": "string",
9483
+ "description": "Profile uuid parameter"
9484
+ },
9485
+ "sender_name": {
9486
+ "type": "string",
9487
+ "description": "From name shown to the recipients."
9488
+ },
9489
+ "sender_email": {
9490
+ "type": "string",
9491
+ "description": "From address of the campaign. Its domain has to be verified on the profile before\nthe campaign can be sent."
9492
+ },
9493
+ "title": {
9494
+ "type": "string",
9495
+ "description": "Name the campaign is listed under. Not shown to the recipients."
9496
+ },
9497
+ "subject": {
9498
+ "type": "string",
9499
+ "description": "Subject line of the email."
9500
+ },
9501
+ "template_uuid": {
9502
+ "type": "string",
9503
+ "description": "Template to send, as returned by the template endpoints. Can be left out and\nattached later, but the campaign cannot be sent without one."
9504
+ },
9505
+ "metadata": {
9506
+ "type": "object",
9507
+ "description": "Extra campaign fields. Any key outside the listed ones is rejected.",
9508
+ "properties": {
9509
+ "preheader": {
9510
+ "type": "string",
9511
+ "description": "Preview text shown after the subject line in the inbox."
9512
+ },
9513
+ "source": {
9514
+ "type": "string",
9515
+ "description": "Where the campaign was created from."
9516
+ }
9517
+ }
9518
+ }
9519
+ },
9520
+ "required": [
9521
+ "profileUuid",
9522
+ "sender_name",
9523
+ "sender_email"
9524
+ ]
9525
+ },
9526
+ "security": [
9527
+ {
9528
+ "apiToken": []
9529
+ }
9530
+ ],
9531
+ "group": "reach"
9532
+ },
9508
9533
  {
9509
9534
  "name": "reach_getCampaignPerformanceV1",
9510
9535
  "title": "Get campaign performance",
@@ -11546,6 +11571,75 @@ export default [
11546
11571
  ],
11547
11572
  "group": "reach"
11548
11573
  },
11574
+ {
11575
+ "name": "reach_listEmailTemplatesV1",
11576
+ "title": "List email templates",
11577
+ "annotations": {
11578
+ "title": "List email templates",
11579
+ "readOnlyHint": true,
11580
+ "destructiveHint": false
11581
+ },
11582
+ "description": "Get a list of the email templates in a profile, most recently updated first.\n\nTemplates are the reusable email bodies a campaign is built from. The list is not paginated\nand only the metadata is returned - the template content itself is not exposed. Use the\n`uuid` of a template as the `template_uuid` when creating a campaign.",
11583
+ "method": "GET",
11584
+ "path": "/api/reach/v1/profiles/{profileUuid}/templates",
11585
+ "inputSchema": {
11586
+ "type": "object",
11587
+ "properties": {
11588
+ "profileUuid": {
11589
+ "type": "string",
11590
+ "description": "Profile uuid parameter"
11591
+ }
11592
+ },
11593
+ "required": [
11594
+ "profileUuid"
11595
+ ]
11596
+ },
11597
+ "security": [
11598
+ {
11599
+ "apiToken": []
11600
+ }
11601
+ ],
11602
+ "group": "reach"
11603
+ },
11604
+ {
11605
+ "name": "reach_createAnEmailTemplateV1",
11606
+ "title": "Create an email template",
11607
+ "annotations": {
11608
+ "title": "Create an email template",
11609
+ "readOnlyHint": false,
11610
+ "destructiveHint": false
11611
+ },
11612
+ "description": "Create an email template in a profile.\n\nThe template holds the HTML body a campaign reuses, so it can be created before any\ncampaign exists. Only the template metadata comes back - keep the returned `uuid` to\nreference it as the `template_uuid` of a campaign.",
11613
+ "method": "POST",
11614
+ "path": "/api/reach/v1/profiles/{profileUuid}/templates",
11615
+ "inputSchema": {
11616
+ "type": "object",
11617
+ "properties": {
11618
+ "profileUuid": {
11619
+ "type": "string",
11620
+ "description": "Profile uuid parameter"
11621
+ },
11622
+ "template_content": {
11623
+ "type": "string",
11624
+ "description": "The email body as HTML. It is sanitised before it is stored, so the saved template\ncan differ from what was sent - inline any styles the email clients need and keep\nthe markup self-contained."
11625
+ },
11626
+ "title": {
11627
+ "type": "string",
11628
+ "description": "Name the template is listed under. Not shown to the recipients."
11629
+ }
11630
+ },
11631
+ "required": [
11632
+ "profileUuid",
11633
+ "template_content"
11634
+ ]
11635
+ },
11636
+ "security": [
11637
+ {
11638
+ "apiToken": []
11639
+ }
11640
+ ],
11641
+ "group": "reach"
11642
+ },
11549
11643
  {
11550
11644
  "name": "VPS_getDataCenterListV1",
11551
11645
  "title": "Get data center list",
@@ -1059,7 +1059,6 @@ const tools: OpenApiTool[] = [
1059
1059
  "type": "string",
1060
1060
  "description": "Website type",
1061
1061
  "enum": [
1062
- "horizons",
1063
1062
  "node-static"
1064
1063
  ]
1065
1064
  },
@@ -1104,46 +1103,6 @@ const tools: OpenApiTool[] = [
1104
1103
  "title",
1105
1104
  "admin"
1106
1105
  ]
1107
- },
1108
- "clone": {
1109
- "type": "object",
1110
- "description": "Clone the new website from an existing website",
1111
- "properties": {
1112
- "website_uid": {
1113
- "type": "string",
1114
- "description": "website_uid parameter"
1115
- }
1116
- },
1117
- "required": [
1118
- "website_uid"
1119
- ]
1120
- },
1121
- "derive_domain": {
1122
- "type": "object",
1123
- "description": "Derive the domain from an existing vhost",
1124
- "properties": {
1125
- "from_vhost": {
1126
- "type": "object",
1127
- "description": "from_vhost parameter",
1128
- "properties": {
1129
- "username": {
1130
- "type": "string",
1131
- "description": "username parameter"
1132
- },
1133
- "vhost": {
1134
- "type": "string",
1135
- "description": "vhost parameter"
1136
- }
1137
- },
1138
- "required": [
1139
- "username",
1140
- "vhost"
1141
- ]
1142
- }
1143
- },
1144
- "required": [
1145
- "from_vhost"
1146
- ]
1147
1106
  }
1148
1107
  },
1149
1108
  "required": [
@@ -9519,6 +9478,72 @@ const tools: OpenApiTool[] = [
9519
9478
  ],
9520
9479
  "group": "reach"
9521
9480
  },
9481
+ {
9482
+ "name": "reach_createADraftCampaignV1",
9483
+ "title": "Create a draft campaign",
9484
+ "annotations": {
9485
+ "title": "Create a draft campaign",
9486
+ "readOnlyHint": false,
9487
+ "destructiveHint": false
9488
+ },
9489
+ "description": "Create a campaign in a profile.\n\nThe campaign is created as a draft, so nothing is sent and no contact is touched. It has no\naudience yet either - targeting and scheduling are not part of this request, the draft is\nfinished and sent from the Reach interface.",
9490
+ "method": "POST",
9491
+ "path": "/api/reach/v1/profiles/{profileUuid}/campaigns",
9492
+ "inputSchema": {
9493
+ "type": "object",
9494
+ "properties": {
9495
+ "profileUuid": {
9496
+ "type": "string",
9497
+ "description": "Profile uuid parameter"
9498
+ },
9499
+ "sender_name": {
9500
+ "type": "string",
9501
+ "description": "From name shown to the recipients."
9502
+ },
9503
+ "sender_email": {
9504
+ "type": "string",
9505
+ "description": "From address of the campaign. Its domain has to be verified on the profile before\nthe campaign can be sent."
9506
+ },
9507
+ "title": {
9508
+ "type": "string",
9509
+ "description": "Name the campaign is listed under. Not shown to the recipients."
9510
+ },
9511
+ "subject": {
9512
+ "type": "string",
9513
+ "description": "Subject line of the email."
9514
+ },
9515
+ "template_uuid": {
9516
+ "type": "string",
9517
+ "description": "Template to send, as returned by the template endpoints. Can be left out and\nattached later, but the campaign cannot be sent without one."
9518
+ },
9519
+ "metadata": {
9520
+ "type": "object",
9521
+ "description": "Extra campaign fields. Any key outside the listed ones is rejected.",
9522
+ "properties": {
9523
+ "preheader": {
9524
+ "type": "string",
9525
+ "description": "Preview text shown after the subject line in the inbox."
9526
+ },
9527
+ "source": {
9528
+ "type": "string",
9529
+ "description": "Where the campaign was created from."
9530
+ }
9531
+ }
9532
+ }
9533
+ },
9534
+ "required": [
9535
+ "profileUuid",
9536
+ "sender_name",
9537
+ "sender_email"
9538
+ ]
9539
+ },
9540
+ "security": [
9541
+ {
9542
+ "apiToken": []
9543
+ }
9544
+ ],
9545
+ "group": "reach"
9546
+ },
9522
9547
  {
9523
9548
  "name": "reach_getCampaignPerformanceV1",
9524
9549
  "title": "Get campaign performance",
@@ -11560,6 +11585,75 @@ const tools: OpenApiTool[] = [
11560
11585
  ],
11561
11586
  "group": "reach"
11562
11587
  },
11588
+ {
11589
+ "name": "reach_listEmailTemplatesV1",
11590
+ "title": "List email templates",
11591
+ "annotations": {
11592
+ "title": "List email templates",
11593
+ "readOnlyHint": true,
11594
+ "destructiveHint": false
11595
+ },
11596
+ "description": "Get a list of the email templates in a profile, most recently updated first.\n\nTemplates are the reusable email bodies a campaign is built from. The list is not paginated\nand only the metadata is returned - the template content itself is not exposed. Use the\n`uuid` of a template as the `template_uuid` when creating a campaign.",
11597
+ "method": "GET",
11598
+ "path": "/api/reach/v1/profiles/{profileUuid}/templates",
11599
+ "inputSchema": {
11600
+ "type": "object",
11601
+ "properties": {
11602
+ "profileUuid": {
11603
+ "type": "string",
11604
+ "description": "Profile uuid parameter"
11605
+ }
11606
+ },
11607
+ "required": [
11608
+ "profileUuid"
11609
+ ]
11610
+ },
11611
+ "security": [
11612
+ {
11613
+ "apiToken": []
11614
+ }
11615
+ ],
11616
+ "group": "reach"
11617
+ },
11618
+ {
11619
+ "name": "reach_createAnEmailTemplateV1",
11620
+ "title": "Create an email template",
11621
+ "annotations": {
11622
+ "title": "Create an email template",
11623
+ "readOnlyHint": false,
11624
+ "destructiveHint": false
11625
+ },
11626
+ "description": "Create an email template in a profile.\n\nThe template holds the HTML body a campaign reuses, so it can be created before any\ncampaign exists. Only the template metadata comes back - keep the returned `uuid` to\nreference it as the `template_uuid` of a campaign.",
11627
+ "method": "POST",
11628
+ "path": "/api/reach/v1/profiles/{profileUuid}/templates",
11629
+ "inputSchema": {
11630
+ "type": "object",
11631
+ "properties": {
11632
+ "profileUuid": {
11633
+ "type": "string",
11634
+ "description": "Profile uuid parameter"
11635
+ },
11636
+ "template_content": {
11637
+ "type": "string",
11638
+ "description": "The email body as HTML. It is sanitised before it is stored, so the saved template\ncan differ from what was sent - inline any styles the email clients need and keep\nthe markup self-contained."
11639
+ },
11640
+ "title": {
11641
+ "type": "string",
11642
+ "description": "Name the template is listed under. Not shown to the recipients."
11643
+ }
11644
+ },
11645
+ "required": [
11646
+ "profileUuid",
11647
+ "template_content"
11648
+ ]
11649
+ },
11650
+ "security": [
11651
+ {
11652
+ "apiToken": []
11653
+ }
11654
+ ],
11655
+ "group": "reach"
11656
+ },
11563
11657
  {
11564
11658
  "name": "VPS_getDataCenterListV1",
11565
11659
  "title": "Get data center list",
@@ -226,6 +226,72 @@ export default [
226
226
  ],
227
227
  "group": "reach"
228
228
  },
229
+ {
230
+ "name": "reach_createADraftCampaignV1",
231
+ "title": "Create a draft campaign",
232
+ "annotations": {
233
+ "title": "Create a draft campaign",
234
+ "readOnlyHint": false,
235
+ "destructiveHint": false
236
+ },
237
+ "description": "Create a campaign in a profile.\n\nThe campaign is created as a draft, so nothing is sent and no contact is touched. It has no\naudience yet either - targeting and scheduling are not part of this request, the draft is\nfinished and sent from the Reach interface.",
238
+ "method": "POST",
239
+ "path": "/api/reach/v1/profiles/{profileUuid}/campaigns",
240
+ "inputSchema": {
241
+ "type": "object",
242
+ "properties": {
243
+ "profileUuid": {
244
+ "type": "string",
245
+ "description": "Profile uuid parameter"
246
+ },
247
+ "sender_name": {
248
+ "type": "string",
249
+ "description": "From name shown to the recipients."
250
+ },
251
+ "sender_email": {
252
+ "type": "string",
253
+ "description": "From address of the campaign. Its domain has to be verified on the profile before\nthe campaign can be sent."
254
+ },
255
+ "title": {
256
+ "type": "string",
257
+ "description": "Name the campaign is listed under. Not shown to the recipients."
258
+ },
259
+ "subject": {
260
+ "type": "string",
261
+ "description": "Subject line of the email."
262
+ },
263
+ "template_uuid": {
264
+ "type": "string",
265
+ "description": "Template to send, as returned by the template endpoints. Can be left out and\nattached later, but the campaign cannot be sent without one."
266
+ },
267
+ "metadata": {
268
+ "type": "object",
269
+ "description": "Extra campaign fields. Any key outside the listed ones is rejected.",
270
+ "properties": {
271
+ "preheader": {
272
+ "type": "string",
273
+ "description": "Preview text shown after the subject line in the inbox."
274
+ },
275
+ "source": {
276
+ "type": "string",
277
+ "description": "Where the campaign was created from."
278
+ }
279
+ }
280
+ }
281
+ },
282
+ "required": [
283
+ "profileUuid",
284
+ "sender_name",
285
+ "sender_email"
286
+ ]
287
+ },
288
+ "security": [
289
+ {
290
+ "apiToken": []
291
+ }
292
+ ],
293
+ "group": "reach"
294
+ },
229
295
  {
230
296
  "name": "reach_getCampaignPerformanceV1",
231
297
  "title": "Get campaign performance",
@@ -2266,5 +2332,74 @@ export default [
2266
2332
  }
2267
2333
  ],
2268
2334
  "group": "reach"
2335
+ },
2336
+ {
2337
+ "name": "reach_listEmailTemplatesV1",
2338
+ "title": "List email templates",
2339
+ "annotations": {
2340
+ "title": "List email templates",
2341
+ "readOnlyHint": true,
2342
+ "destructiveHint": false
2343
+ },
2344
+ "description": "Get a list of the email templates in a profile, most recently updated first.\n\nTemplates are the reusable email bodies a campaign is built from. The list is not paginated\nand only the metadata is returned - the template content itself is not exposed. Use the\n`uuid` of a template as the `template_uuid` when creating a campaign.",
2345
+ "method": "GET",
2346
+ "path": "/api/reach/v1/profiles/{profileUuid}/templates",
2347
+ "inputSchema": {
2348
+ "type": "object",
2349
+ "properties": {
2350
+ "profileUuid": {
2351
+ "type": "string",
2352
+ "description": "Profile uuid parameter"
2353
+ }
2354
+ },
2355
+ "required": [
2356
+ "profileUuid"
2357
+ ]
2358
+ },
2359
+ "security": [
2360
+ {
2361
+ "apiToken": []
2362
+ }
2363
+ ],
2364
+ "group": "reach"
2365
+ },
2366
+ {
2367
+ "name": "reach_createAnEmailTemplateV1",
2368
+ "title": "Create an email template",
2369
+ "annotations": {
2370
+ "title": "Create an email template",
2371
+ "readOnlyHint": false,
2372
+ "destructiveHint": false
2373
+ },
2374
+ "description": "Create an email template in a profile.\n\nThe template holds the HTML body a campaign reuses, so it can be created before any\ncampaign exists. Only the template metadata comes back - keep the returned `uuid` to\nreference it as the `template_uuid` of a campaign.",
2375
+ "method": "POST",
2376
+ "path": "/api/reach/v1/profiles/{profileUuid}/templates",
2377
+ "inputSchema": {
2378
+ "type": "object",
2379
+ "properties": {
2380
+ "profileUuid": {
2381
+ "type": "string",
2382
+ "description": "Profile uuid parameter"
2383
+ },
2384
+ "template_content": {
2385
+ "type": "string",
2386
+ "description": "The email body as HTML. It is sanitised before it is stored, so the saved template\ncan differ from what was sent - inline any styles the email clients need and keep\nthe markup self-contained."
2387
+ },
2388
+ "title": {
2389
+ "type": "string",
2390
+ "description": "Name the template is listed under. Not shown to the recipients."
2391
+ }
2392
+ },
2393
+ "required": [
2394
+ "profileUuid",
2395
+ "template_content"
2396
+ ]
2397
+ },
2398
+ "security": [
2399
+ {
2400
+ "apiToken": []
2401
+ }
2402
+ ],
2403
+ "group": "reach"
2269
2404
  }
2270
2405
  ];
@@ -240,6 +240,72 @@ const tools: OpenApiTool[] = [
240
240
  ],
241
241
  "group": "reach"
242
242
  },
243
+ {
244
+ "name": "reach_createADraftCampaignV1",
245
+ "title": "Create a draft campaign",
246
+ "annotations": {
247
+ "title": "Create a draft campaign",
248
+ "readOnlyHint": false,
249
+ "destructiveHint": false
250
+ },
251
+ "description": "Create a campaign in a profile.\n\nThe campaign is created as a draft, so nothing is sent and no contact is touched. It has no\naudience yet either - targeting and scheduling are not part of this request, the draft is\nfinished and sent from the Reach interface.",
252
+ "method": "POST",
253
+ "path": "/api/reach/v1/profiles/{profileUuid}/campaigns",
254
+ "inputSchema": {
255
+ "type": "object",
256
+ "properties": {
257
+ "profileUuid": {
258
+ "type": "string",
259
+ "description": "Profile uuid parameter"
260
+ },
261
+ "sender_name": {
262
+ "type": "string",
263
+ "description": "From name shown to the recipients."
264
+ },
265
+ "sender_email": {
266
+ "type": "string",
267
+ "description": "From address of the campaign. Its domain has to be verified on the profile before\nthe campaign can be sent."
268
+ },
269
+ "title": {
270
+ "type": "string",
271
+ "description": "Name the campaign is listed under. Not shown to the recipients."
272
+ },
273
+ "subject": {
274
+ "type": "string",
275
+ "description": "Subject line of the email."
276
+ },
277
+ "template_uuid": {
278
+ "type": "string",
279
+ "description": "Template to send, as returned by the template endpoints. Can be left out and\nattached later, but the campaign cannot be sent without one."
280
+ },
281
+ "metadata": {
282
+ "type": "object",
283
+ "description": "Extra campaign fields. Any key outside the listed ones is rejected.",
284
+ "properties": {
285
+ "preheader": {
286
+ "type": "string",
287
+ "description": "Preview text shown after the subject line in the inbox."
288
+ },
289
+ "source": {
290
+ "type": "string",
291
+ "description": "Where the campaign was created from."
292
+ }
293
+ }
294
+ }
295
+ },
296
+ "required": [
297
+ "profileUuid",
298
+ "sender_name",
299
+ "sender_email"
300
+ ]
301
+ },
302
+ "security": [
303
+ {
304
+ "apiToken": []
305
+ }
306
+ ],
307
+ "group": "reach"
308
+ },
243
309
  {
244
310
  "name": "reach_getCampaignPerformanceV1",
245
311
  "title": "Get campaign performance",
@@ -2280,6 +2346,75 @@ const tools: OpenApiTool[] = [
2280
2346
  }
2281
2347
  ],
2282
2348
  "group": "reach"
2349
+ },
2350
+ {
2351
+ "name": "reach_listEmailTemplatesV1",
2352
+ "title": "List email templates",
2353
+ "annotations": {
2354
+ "title": "List email templates",
2355
+ "readOnlyHint": true,
2356
+ "destructiveHint": false
2357
+ },
2358
+ "description": "Get a list of the email templates in a profile, most recently updated first.\n\nTemplates are the reusable email bodies a campaign is built from. The list is not paginated\nand only the metadata is returned - the template content itself is not exposed. Use the\n`uuid` of a template as the `template_uuid` when creating a campaign.",
2359
+ "method": "GET",
2360
+ "path": "/api/reach/v1/profiles/{profileUuid}/templates",
2361
+ "inputSchema": {
2362
+ "type": "object",
2363
+ "properties": {
2364
+ "profileUuid": {
2365
+ "type": "string",
2366
+ "description": "Profile uuid parameter"
2367
+ }
2368
+ },
2369
+ "required": [
2370
+ "profileUuid"
2371
+ ]
2372
+ },
2373
+ "security": [
2374
+ {
2375
+ "apiToken": []
2376
+ }
2377
+ ],
2378
+ "group": "reach"
2379
+ },
2380
+ {
2381
+ "name": "reach_createAnEmailTemplateV1",
2382
+ "title": "Create an email template",
2383
+ "annotations": {
2384
+ "title": "Create an email template",
2385
+ "readOnlyHint": false,
2386
+ "destructiveHint": false
2387
+ },
2388
+ "description": "Create an email template in a profile.\n\nThe template holds the HTML body a campaign reuses, so it can be created before any\ncampaign exists. Only the template metadata comes back - keep the returned `uuid` to\nreference it as the `template_uuid` of a campaign.",
2389
+ "method": "POST",
2390
+ "path": "/api/reach/v1/profiles/{profileUuid}/templates",
2391
+ "inputSchema": {
2392
+ "type": "object",
2393
+ "properties": {
2394
+ "profileUuid": {
2395
+ "type": "string",
2396
+ "description": "Profile uuid parameter"
2397
+ },
2398
+ "template_content": {
2399
+ "type": "string",
2400
+ "description": "The email body as HTML. It is sanitised before it is stored, so the saved template\ncan differ from what was sent - inline any styles the email clients need and keep\nthe markup self-contained."
2401
+ },
2402
+ "title": {
2403
+ "type": "string",
2404
+ "description": "Name the template is listed under. Not shown to the recipients."
2405
+ }
2406
+ },
2407
+ "required": [
2408
+ "profileUuid",
2409
+ "template_content"
2410
+ ]
2411
+ },
2412
+ "security": [
2413
+ {
2414
+ "apiToken": []
2415
+ }
2416
+ ],
2417
+ "group": "reach"
2283
2418
  }
2284
2419
  ];
2285
2420
  export default tools;
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/agency-hosting.js';
5
5
 
6
- startServer({ name: 'hostinger-agency-hosting-mcp', version: '1.53.0', tools });
6
+ startServer({ name: 'hostinger-agency-hosting-mcp', version: '1.54.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/agency-hosting.js';
5
5
 
6
- startServer({ name: 'hostinger-agency-hosting-mcp', version: '1.53.0', tools });
6
+ startServer({ name: 'hostinger-agency-hosting-mcp', version: '1.54.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/all.js';
5
5
 
6
- startServer({ name: 'hostinger-api-mcp', version: '1.53.0', tools });
6
+ startServer({ name: 'hostinger-api-mcp', version: '1.54.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/all.js';
5
5
 
6
- startServer({ name: 'hostinger-api-mcp', version: '1.53.0', tools });
6
+ startServer({ name: 'hostinger-api-mcp', version: '1.54.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/billing.js';
5
5
 
6
- startServer({ name: 'hostinger-billing-mcp', version: '1.53.0', tools });
6
+ startServer({ name: 'hostinger-billing-mcp', version: '1.54.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/billing.js';
5
5
 
6
- startServer({ name: 'hostinger-billing-mcp', version: '1.53.0', tools });
6
+ startServer({ name: 'hostinger-billing-mcp', version: '1.54.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/dns.js';
5
5
 
6
- startServer({ name: 'hostinger-dns-mcp', version: '1.53.0', tools });
6
+ startServer({ name: 'hostinger-dns-mcp', version: '1.54.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/dns.js';
5
5
 
6
- startServer({ name: 'hostinger-dns-mcp', version: '1.53.0', tools });
6
+ startServer({ name: 'hostinger-dns-mcp', version: '1.54.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/domains.js';
5
5
 
6
- startServer({ name: 'hostinger-domains-mcp', version: '1.53.0', tools });
6
+ startServer({ name: 'hostinger-domains-mcp', version: '1.54.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/domains.js';
5
5
 
6
- startServer({ name: 'hostinger-domains-mcp', version: '1.53.0', tools });
6
+ startServer({ name: 'hostinger-domains-mcp', version: '1.54.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/ecommerce.js';
5
5
 
6
- startServer({ name: 'hostinger-ecommerce-mcp', version: '1.53.0', tools });
6
+ startServer({ name: 'hostinger-ecommerce-mcp', version: '1.54.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/ecommerce.js';
5
5
 
6
- startServer({ name: 'hostinger-ecommerce-mcp', version: '1.53.0', tools });
6
+ startServer({ name: 'hostinger-ecommerce-mcp', version: '1.54.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/horizons.js';
5
5
 
6
- startServer({ name: 'hostinger-horizons-mcp', version: '1.53.0', tools });
6
+ startServer({ name: 'hostinger-horizons-mcp', version: '1.54.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/horizons.js';
5
5
 
6
- startServer({ name: 'hostinger-horizons-mcp', version: '1.53.0', tools });
6
+ startServer({ name: 'hostinger-horizons-mcp', version: '1.54.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/hosting.js';
5
5
 
6
- startServer({ name: 'hostinger-hosting-mcp', version: '1.53.0', tools });
6
+ startServer({ name: 'hostinger-hosting-mcp', version: '1.54.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/hosting.js';
5
5
 
6
- startServer({ name: 'hostinger-hosting-mcp', version: '1.53.0', tools });
6
+ startServer({ name: 'hostinger-hosting-mcp', version: '1.54.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/mail.js';
5
5
 
6
- startServer({ name: 'hostinger-mail-mcp', version: '1.53.0', tools });
6
+ startServer({ name: 'hostinger-mail-mcp', version: '1.54.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/mail.js';
5
5
 
6
- startServer({ name: 'hostinger-mail-mcp', version: '1.53.0', tools });
6
+ startServer({ name: 'hostinger-mail-mcp', version: '1.54.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/reach.js';
5
5
 
6
- startServer({ name: 'hostinger-reach-mcp', version: '1.53.0', tools });
6
+ startServer({ name: 'hostinger-reach-mcp', version: '1.54.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/reach.js';
5
5
 
6
- startServer({ name: 'hostinger-reach-mcp', version: '1.53.0', tools });
6
+ startServer({ name: 'hostinger-reach-mcp', version: '1.54.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/vps.js';
5
5
 
6
- startServer({ name: 'hostinger-vps-mcp', version: '1.53.0', tools });
6
+ startServer({ name: 'hostinger-vps-mcp', version: '1.54.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/vps.js';
5
5
 
6
- startServer({ name: 'hostinger-vps-mcp', version: '1.53.0', tools });
6
+ startServer({ name: 'hostinger-vps-mcp', version: '1.54.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/wordpress.js';
5
5
 
6
- startServer({ name: 'hostinger-wordpress-mcp', version: '1.53.0', tools });
6
+ startServer({ name: 'hostinger-wordpress-mcp', version: '1.54.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/wordpress.js';
5
5
 
6
- startServer({ name: 'hostinger-wordpress-mcp', version: '1.53.0', tools });
6
+ startServer({ name: 'hostinger-wordpress-mcp', version: '1.54.0', tools });
package/types.d.ts CHANGED
@@ -587,14 +587,6 @@ that identifies the job. The new website becomes reachable once provisioning fin
587
587
  * WordPress installation options
588
588
  */
589
589
  wordpress?: object;
590
- /**
591
- * Clone the new website from an existing website
592
- */
593
- clone?: object;
594
- /**
595
- * Derive the domain from an existing vhost
596
- */
597
- derive_domain?: object;
598
590
  };
599
591
  response: any; // Response structure will depend on the API
600
592
  };
@@ -5425,6 +5417,49 @@ opt-in confirmations.
5425
5417
  response: any; // Response structure will depend on the API
5426
5418
  };
5427
5419
 
5420
+ /**
5421
+ * Create a campaign in a profile.
5422
+
5423
+ The campaign is created as a draft, so nothing is sent and no contact is touched. It has no
5424
+ audience yet either - targeting and scheduling are not part of this request, the draft is
5425
+ finished and sent from the Reach interface.
5426
+ */
5427
+ "reach_createADraftCampaignV1": {
5428
+ params: {
5429
+ /**
5430
+ * Profile uuid parameter
5431
+ */
5432
+ profileUuid: string;
5433
+ /**
5434
+ * From name shown to the recipients.
5435
+ */
5436
+ sender_name: string;
5437
+ /**
5438
+ * From address of the campaign. Its domain has to be verified on the profile before
5439
+ the campaign can be sent.
5440
+ */
5441
+ sender_email: string;
5442
+ /**
5443
+ * Name the campaign is listed under. Not shown to the recipients.
5444
+ */
5445
+ title?: string;
5446
+ /**
5447
+ * Subject line of the email.
5448
+ */
5449
+ subject?: string;
5450
+ /**
5451
+ * Template to send, as returned by the template endpoints. Can be left out and
5452
+ attached later, but the campaign cannot be sent without one.
5453
+ */
5454
+ template_uuid?: string;
5455
+ /**
5456
+ * Extra campaign fields. Any key outside the listed ones is rejected.
5457
+ */
5458
+ metadata?: object;
5459
+ };
5460
+ response: any; // Response structure will depend on the API
5461
+ };
5462
+
5428
5463
  /**
5429
5464
  * Get the performance of a campaign: delivery, opens, clicks and unsubscribes, with the
5430
5465
  matching rates.
@@ -6502,6 +6537,50 @@ not kept.
6502
6537
  response: any; // Response structure will depend on the API
6503
6538
  };
6504
6539
 
6540
+ /**
6541
+ * Get a list of the email templates in a profile, most recently updated first.
6542
+
6543
+ Templates are the reusable email bodies a campaign is built from. The list is not paginated
6544
+ and only the metadata is returned - the template content itself is not exposed. Use the
6545
+ `uuid` of a template as the `template_uuid` when creating a campaign.
6546
+ */
6547
+ "reach_listEmailTemplatesV1": {
6548
+ params: {
6549
+ /**
6550
+ * Profile uuid parameter
6551
+ */
6552
+ profileUuid: string;
6553
+ };
6554
+ response: any; // Response structure will depend on the API
6555
+ };
6556
+
6557
+ /**
6558
+ * Create an email template in a profile.
6559
+
6560
+ The template holds the HTML body a campaign reuses, so it can be created before any
6561
+ campaign exists. Only the template metadata comes back - keep the returned `uuid` to
6562
+ reference it as the `template_uuid` of a campaign.
6563
+ */
6564
+ "reach_createAnEmailTemplateV1": {
6565
+ params: {
6566
+ /**
6567
+ * Profile uuid parameter
6568
+ */
6569
+ profileUuid: string;
6570
+ /**
6571
+ * The email body as HTML. It is sanitised before it is stored, so the saved template
6572
+ can differ from what was sent - inline any styles the email clients need and keep
6573
+ the markup self-contained.
6574
+ */
6575
+ template_content: string;
6576
+ /**
6577
+ * Name the template is listed under. Not shown to the recipients.
6578
+ */
6579
+ title?: string;
6580
+ };
6581
+ response: any; // Response structure will depend on the API
6582
+ };
6583
+
6505
6584
  /**
6506
6585
  * Retrieve all available data centers.
6507
6586