hostinger-api-mcp 2.11.0 → 2.13.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/CHANGELOG.md CHANGED
@@ -4,6 +4,28 @@ Generated at release time from the diff between the previous and current
4
4
  build. Tool changes are listed individually; everything else is summarised
5
5
  by area.
6
6
 
7
+ ## v2.13.0 — 2026-10-12
8
+
9
+ ### Operations
10
+
11
+ - Added `reach_profiles_connect-sending-domain` — Connect sending domain
12
+ - Added `reach_profiles_delete-sending-domain` — Delete sending domain
13
+ - Added `reach_profiles_settings` — Get profile settings
14
+ - Added `reach_profiles_update-settings` — Update profile settings
15
+
16
+ ### Also in this release
17
+
18
+ - Documentation: `README.md`
19
+ - Request handling and authentication: `src/core/runtime.js`, `src/core/runtime.ts`
20
+ - Build and packaging: `types.d.ts`
21
+
22
+ ## v2.12.0 — 2026-10-12
23
+
24
+ ### Also in this release
25
+
26
+ - Dependencies: `package-lock.json`
27
+ - Request handling and authentication: `src/core/runtime.js`, `src/core/runtime.ts`
28
+
7
29
  ## v2.11.0 — 2026-10-09
8
30
 
9
31
  ### Also in this release
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 over every operation (411 total)
72
+ - `hostinger-api-mcp` — unified server over every operation (415 total)
73
73
  - `hostinger-agency-hosting-mcp` — 42 operations for agency-hosting
74
74
  - `hostinger-billing-mcp` — 9 operations for billing
75
75
  - `hostinger-dns-mcp` — 8 operations for dns
@@ -78,7 +78,7 @@ This package installs the following MCP server commands:
78
78
  - `hostinger-horizons-mcp` — 6 operations for horizons
79
79
  - `hostinger-hosting-mcp` — 80 operations for hosting
80
80
  - `hostinger-mail-mcp` — 38 operations for mail
81
- - `hostinger-reach-mcp` — 52 operations for reach
81
+ - `hostinger-reach-mcp` — 56 operations for reach
82
82
  - `hostinger-vps-mcp` — 67 operations for vps
83
83
  - `hostinger-wordpress-mcp` — 38 operations for wordpress
84
84
 
@@ -3654,16 +3654,6 @@ directly usable template URL and for the tags the form puts on the contacts it c
3654
3654
  - **Method**: `GET`
3655
3655
  - **Path**: `/api/reach/v1/profiles/{profileUuid}/forms`
3656
3656
 
3657
- #### reach_profiles_domain-dns-status
3658
-
3659
- Retrieve the DNS configuration status for a profile's domain.
3660
-
3661
- This endpoint reports the state of MX, SPF, DKIM and DMARC records, including the
3662
- actual records found and the suggested records required for correct email delivery.
3663
-
3664
- - **Method**: `GET`
3665
- - **Path**: `/api/reach/v1/profiles/{profileUuid}/domains/dns-status`
3666
-
3667
3657
  #### reach_profiles_connected-sending-domain
3668
3658
 
3669
3659
  Get the sending domain connected to the profile, its verification status and any suspended
@@ -3677,6 +3667,49 @@ behind the status, use the DNS status endpoint.
3677
3667
  - **Method**: `GET`
3678
3668
  - **Path**: `/api/reach/v1/profiles/{profileUuid}/domains`
3679
3669
 
3670
+ #### reach_profiles_connect-sending-domain
3671
+
3672
+ Connect a sending domain to the profile so emails can be sent from addresses on it.
3673
+
3674
+ Connecting does not make the domain ready to send: check the DNS status endpoint next for
3675
+ records that are still missing. A domain the account owns or has already verified connects
3676
+ immediately. Any other domain starts a TXT ownership verification and returns `409`;
3677
+ complete the verification in Reach, then retry. Returns `422` when the profile or another
3678
+ profile already has the domain, the domain is blocked, or its ownership cannot be verified.
3679
+ An already connected domain is never replaced.
3680
+
3681
+ On success the sender address of draft and scheduled campaigns, and of published automation
3682
+ and double opt-in emails, moves onto the new domain in the background, keeping the part
3683
+ before the `@`.
3684
+
3685
+ - **Method**: `POST`
3686
+ - **Path**: `/api/reach/v1/profiles/{profileUuid}/domains`
3687
+
3688
+ #### reach_profiles_delete-sending-domain
3689
+
3690
+ Disconnect the sending domain from the profile.
3691
+
3692
+ The domain record is removed, so the profile has no sending domain afterwards and campaigns
3693
+ cannot be sent until a domain is connected again. Sender addresses already stored on
3694
+ campaigns, automations and settings are left untouched and keep pointing at the removed
3695
+ domain. A domain that is not connected to the profile also succeeds, so success is not proof
3696
+ that anything was deleted. DNS records at the DNS provider are not removed. To switch
3697
+ domains, delete this one and connect the new one. Confirm the domain with the customer
3698
+ before calling.
3699
+
3700
+ - **Method**: `DELETE`
3701
+ - **Path**: `/api/reach/v1/profiles/{profileUuid}/domains`
3702
+
3703
+ #### reach_profiles_domain-dns-status
3704
+
3705
+ Retrieve the DNS configuration status for a profile's domain.
3706
+
3707
+ This endpoint reports the state of MX, SPF, DKIM and DMARC records, including the
3708
+ actual records found and the suggested records required for correct email delivery.
3709
+
3710
+ - **Method**: `GET`
3711
+ - **Path**: `/api/reach/v1/profiles/{profileUuid}/domains/dns-status`
3712
+
3680
3713
  #### reach_profiles_list-plan-feature-access
3681
3714
 
3682
3715
  List which plan features the profile can use.
@@ -3711,6 +3744,32 @@ This endpoint returns all profiles available to the client, including their basi
3711
3744
  - **Method**: `GET`
3712
3745
  - **Path**: `/api/reach/v1/profiles`
3713
3746
 
3747
+ #### reach_profiles_settings
3748
+
3749
+ Get the profile's saved sender identity and brand details.
3750
+
3751
+ Read the default sender before creating a campaign instead of asking the customer, and
3752
+ reuse the brand fields when generating email content. Any field can be `null` for a profile
3753
+ that never filled its settings in. This does not check that the sending domain is
3754
+ verified, use the connected sending domain endpoint for that.
3755
+
3756
+ - **Method**: `GET`
3757
+ - **Path**: `/api/reach/v1/profiles/{profileUuid}/settings`
3758
+
3759
+ #### reach_profiles_update-settings
3760
+
3761
+ Change the profile's default sender and brand details.
3762
+
3763
+ Send only the fields to change: every omitted field keeps its value, and `null` or an empty
3764
+ string clears a text field. The default sender is what campaigns created afterwards start
3765
+ from; existing campaigns keep their own sender. `sender_email` is only the part before the
3766
+ `@`, because Reach combines it with the profile's connected sending domain, so an address
3767
+ outside that domain cannot be set. Connecting a sending domain is a separate endpoint and
3768
+ a connected domain cannot be changed here. Returns the settings after the change.
3769
+
3770
+ - **Method**: `PATCH`
3771
+ - **Path**: `/api/reach/v1/profiles/{profileUuid}/settings`
3772
+
3714
3773
  #### reach_templates_list-email
3715
3774
 
3716
3775
  Get a list of the email templates in a profile, most recently updated first.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hostinger-api-mcp",
3
- "version": "2.11.0",
3
+ "version": "2.13.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": "2.11.0",
3
+ "version": "2.13.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": "2.11.0",
9
+ "version": "2.13.0",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "npm",
13
13
  "identifier": "@hostinger/mcp",
14
- "version": "2.11.0",
14
+ "version": "2.13.0",
15
15
  "transport": {
16
16
  "type": "stdio"
17
17
  },
@@ -64,7 +64,7 @@ const GetSkillRequestSchema = z.object({
64
64
 
65
65
  /**
66
66
  * MCP Server for Hostinger API
67
- * Generated from OpenAPI spec version 1.62.0
67
+ * Generated from OpenAPI spec version 1.64.0
68
68
  */
69
69
  class MCPServer {
70
70
  constructor({ name, version, tools, instructions, skills = [] }) {
@@ -94,7 +94,7 @@ interface Skill { uri: string; frontmatter: Record<string, unknown>; resources:
94
94
 
95
95
  /**
96
96
  * MCP Server for Hostinger API
97
- * Generated from OpenAPI spec version 1.62.0
97
+ * Generated from OpenAPI spec version 1.64.0
98
98
  */
99
99
  class MCPServer {
100
100
  private readonly name: string;
@@ -12827,16 +12827,16 @@ export default [
12827
12827
  "group": "reach"
12828
12828
  },
12829
12829
  {
12830
- "name": "reach_profiles_domain-dns-status",
12831
- "title": "Get profile domain DNS status",
12830
+ "name": "reach_profiles_connected-sending-domain",
12831
+ "title": "Get connected sending domain",
12832
12832
  "annotations": {
12833
- "title": "Get profile domain DNS status",
12833
+ "title": "Get connected sending domain",
12834
12834
  "readOnlyHint": true,
12835
12835
  "destructiveHint": false
12836
12836
  },
12837
- "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.",
12837
+ "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.",
12838
12838
  "method": "GET",
12839
- "path": "/api/reach/v1/profiles/{profileUuid}/domains/dns-status",
12839
+ "path": "/api/reach/v1/profiles/{profileUuid}/domains",
12840
12840
  "inputSchema": {
12841
12841
  "type": "object",
12842
12842
  "properties": {
@@ -12857,16 +12857,82 @@ export default [
12857
12857
  "group": "reach"
12858
12858
  },
12859
12859
  {
12860
- "name": "reach_profiles_connected-sending-domain",
12861
- "title": "Get connected sending domain",
12860
+ "name": "reach_profiles_connect-sending-domain",
12861
+ "title": "Connect sending domain",
12862
12862
  "annotations": {
12863
- "title": "Get connected sending domain",
12863
+ "title": "Connect sending domain",
12864
+ "readOnlyHint": false,
12865
+ "destructiveHint": false
12866
+ },
12867
+ "description": "Connect a sending domain to the profile so emails can be sent from addresses on it.\n\nConnecting does not make the domain ready to send: check the DNS status endpoint next for\nrecords that are still missing. A domain the account owns or has already verified connects\nimmediately. Any other domain starts a TXT ownership verification and returns `409`;\ncomplete the verification in Reach, then retry. Returns `422` when the profile or another\nprofile already has the domain, the domain is blocked, or its ownership cannot be verified.\nAn already connected domain is never replaced.\n\nOn success the sender address of draft and scheduled campaigns, and of published automation\nand double opt-in emails, moves onto the new domain in the background, keeping the part\nbefore the `@`.",
12868
+ "method": "POST",
12869
+ "path": "/api/reach/v1/profiles/{profileUuid}/domains",
12870
+ "inputSchema": {
12871
+ "type": "object",
12872
+ "properties": {
12873
+ "profileUuid": {
12874
+ "type": "string",
12875
+ "description": "Profile uuid parameter"
12876
+ },
12877
+ "domain": {
12878
+ "type": "string",
12879
+ "description": "domain parameter"
12880
+ }
12881
+ },
12882
+ "required": [
12883
+ "profileUuid",
12884
+ "domain"
12885
+ ]
12886
+ },
12887
+ "security": [
12888
+ {
12889
+ "apiToken": []
12890
+ }
12891
+ ],
12892
+ "group": "reach"
12893
+ },
12894
+ {
12895
+ "name": "reach_profiles_delete-sending-domain",
12896
+ "title": "Delete sending domain",
12897
+ "annotations": {
12898
+ "title": "Delete sending domain",
12899
+ "readOnlyHint": false,
12900
+ "destructiveHint": true,
12901
+ "idempotentHint": true
12902
+ },
12903
+ "description": "Disconnect the sending domain from the profile.\n\nThe domain record is removed, so the profile has no sending domain afterwards and campaigns\ncannot be sent until a domain is connected again. Sender addresses already stored on\ncampaigns, automations and settings are left untouched and keep pointing at the removed\ndomain. A domain that is not connected to the profile also succeeds, so success is not proof\nthat anything was deleted. DNS records at the DNS provider are not removed. To switch\ndomains, delete this one and connect the new one. Confirm the domain with the customer\nbefore calling.",
12904
+ "method": "DELETE",
12905
+ "path": "/api/reach/v1/profiles/{profileUuid}/domains",
12906
+ "inputSchema": {
12907
+ "type": "object",
12908
+ "properties": {
12909
+ "profileUuid": {
12910
+ "type": "string",
12911
+ "description": "Profile uuid parameter"
12912
+ }
12913
+ },
12914
+ "required": [
12915
+ "profileUuid"
12916
+ ]
12917
+ },
12918
+ "security": [
12919
+ {
12920
+ "apiToken": []
12921
+ }
12922
+ ],
12923
+ "group": "reach"
12924
+ },
12925
+ {
12926
+ "name": "reach_profiles_domain-dns-status",
12927
+ "title": "Get profile domain DNS status",
12928
+ "annotations": {
12929
+ "title": "Get profile domain DNS status",
12864
12930
  "readOnlyHint": true,
12865
12931
  "destructiveHint": false
12866
12932
  },
12867
- "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.",
12933
+ "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.",
12868
12934
  "method": "GET",
12869
- "path": "/api/reach/v1/profiles/{profileUuid}/domains",
12935
+ "path": "/api/reach/v1/profiles/{profileUuid}/domains/dns-status",
12870
12936
  "inputSchema": {
12871
12937
  "type": "object",
12872
12938
  "properties": {
@@ -12969,6 +13035,172 @@ export default [
12969
13035
  ],
12970
13036
  "group": "reach"
12971
13037
  },
13038
+ {
13039
+ "name": "reach_profiles_settings",
13040
+ "title": "Get profile settings",
13041
+ "annotations": {
13042
+ "title": "Get profile settings",
13043
+ "readOnlyHint": true,
13044
+ "destructiveHint": false
13045
+ },
13046
+ "description": "Get the profile's saved sender identity and brand details.\n\nRead the default sender before creating a campaign instead of asking the customer, and\nreuse the brand fields when generating email content. Any field can be `null` for a profile\nthat never filled its settings in. This does not check that the sending domain is\nverified, use the connected sending domain endpoint for that.",
13047
+ "method": "GET",
13048
+ "path": "/api/reach/v1/profiles/{profileUuid}/settings",
13049
+ "inputSchema": {
13050
+ "type": "object",
13051
+ "properties": {
13052
+ "profileUuid": {
13053
+ "type": "string",
13054
+ "description": "Profile uuid parameter"
13055
+ }
13056
+ },
13057
+ "required": [
13058
+ "profileUuid"
13059
+ ]
13060
+ },
13061
+ "security": [
13062
+ {
13063
+ "apiToken": []
13064
+ }
13065
+ ],
13066
+ "group": "reach"
13067
+ },
13068
+ {
13069
+ "name": "reach_profiles_update-settings",
13070
+ "title": "Update profile settings",
13071
+ "annotations": {
13072
+ "title": "Update profile settings",
13073
+ "readOnlyHint": false,
13074
+ "destructiveHint": true,
13075
+ "idempotentHint": true
13076
+ },
13077
+ "description": "Change the profile's default sender and brand details.\n\nSend only the fields to change: every omitted field keeps its value, and `null` or an empty\nstring clears a text field. The default sender is what campaigns created afterwards start\nfrom; existing campaigns keep their own sender. `sender_email` is only the part before the\n`@`, because Reach combines it with the profile's connected sending domain, so an address\noutside that domain cannot be set. Connecting a sending domain is a separate endpoint and\na connected domain cannot be changed here. Returns the settings after the change.",
13078
+ "method": "PATCH",
13079
+ "path": "/api/reach/v1/profiles/{profileUuid}/settings",
13080
+ "inputSchema": {
13081
+ "type": "object",
13082
+ "properties": {
13083
+ "profileUuid": {
13084
+ "type": "string",
13085
+ "description": "Profile uuid parameter"
13086
+ },
13087
+ "brand_name": {
13088
+ "type": "string",
13089
+ "description": "brand_name parameter"
13090
+ },
13091
+ "website_url": {
13092
+ "type": "string",
13093
+ "description": "website_url parameter"
13094
+ },
13095
+ "business_address": {
13096
+ "type": "string",
13097
+ "description": "business_address parameter"
13098
+ },
13099
+ "privacy_policy_url": {
13100
+ "type": "string",
13101
+ "description": "privacy_policy_url parameter"
13102
+ },
13103
+ "accent_color": {
13104
+ "type": "string",
13105
+ "description": "accent_color parameter"
13106
+ },
13107
+ "button_color": {
13108
+ "type": "string",
13109
+ "description": "button_color parameter"
13110
+ },
13111
+ "background_color": {
13112
+ "type": "string",
13113
+ "description": "background_color parameter"
13114
+ },
13115
+ "text_color": {
13116
+ "type": "string",
13117
+ "description": "text_color parameter"
13118
+ },
13119
+ "links_color": {
13120
+ "type": "string",
13121
+ "description": "links_color parameter"
13122
+ },
13123
+ "button_text": {
13124
+ "type": "string",
13125
+ "description": "Button text colour."
13126
+ },
13127
+ "button_corners": {
13128
+ "type": "integer",
13129
+ "description": "button_corners parameter"
13130
+ },
13131
+ "font_family": {
13132
+ "type": "string",
13133
+ "description": "font_family parameter"
13134
+ },
13135
+ "heading_font_family": {
13136
+ "type": "string",
13137
+ "description": "heading_font_family parameter"
13138
+ },
13139
+ "logo_url": {
13140
+ "type": "string",
13141
+ "description": "Public image URL. Logo uploads are not supported."
13142
+ },
13143
+ "social_links": {
13144
+ "type": "array",
13145
+ "description": "social_links parameter",
13146
+ "items": {
13147
+ "type": "string",
13148
+ "description": "social_links parameter"
13149
+ }
13150
+ },
13151
+ "socials": {
13152
+ "type": "object",
13153
+ "description": "Social profile links keyed by platform.",
13154
+ "properties": {}
13155
+ },
13156
+ "about": {
13157
+ "type": "string",
13158
+ "description": "about parameter"
13159
+ },
13160
+ "keywords": {
13161
+ "type": "array",
13162
+ "description": "keywords parameter",
13163
+ "items": {
13164
+ "type": "string",
13165
+ "description": "keywords parameter"
13166
+ }
13167
+ },
13168
+ "topics": {
13169
+ "type": "array",
13170
+ "description": "topics parameter",
13171
+ "items": {
13172
+ "type": "string",
13173
+ "description": "topics parameter"
13174
+ }
13175
+ },
13176
+ "selling_points": {
13177
+ "type": "array",
13178
+ "description": "selling_points parameter",
13179
+ "items": {
13180
+ "type": "string",
13181
+ "description": "selling_points parameter"
13182
+ }
13183
+ },
13184
+ "sender_name": {
13185
+ "type": "string",
13186
+ "description": "Default sender name. Letters, numbers and spaces only."
13187
+ },
13188
+ "sender_email": {
13189
+ "type": "string",
13190
+ "description": "Part of the default sender address before the `@`, for example `hello`. Never send a\nfull address: Reach adds the profile's connected sending domain itself."
13191
+ }
13192
+ },
13193
+ "required": [
13194
+ "profileUuid"
13195
+ ]
13196
+ },
13197
+ "security": [
13198
+ {
13199
+ "apiToken": []
13200
+ }
13201
+ ],
13202
+ "group": "reach"
13203
+ },
12972
13204
  {
12973
13205
  "name": "reach_templates_list-email",
12974
13206
  "title": "List email templates",