@hostinger/mcp 2.17.1 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,32 @@ 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
+ ## v3.0.0 — 2026-10-15
8
+
9
+ ### Operations
10
+
11
+ - Added `wordpress_ai-content_generation-result` — Get generation result
12
+ - Changed the description of `wordpress_ai-content_generate-images`
13
+
14
+ ### Also in this release
15
+
16
+ - Documentation: `README.md`
17
+ - Request handling and authentication: `src/core/runtime.js`, `src/core/runtime.ts`
18
+ - Build and packaging: `types.d.ts`
19
+
20
+ ## v2.18.0 — 2026-10-15
21
+
22
+ ### Operations
23
+
24
+ - Changed the description and input schema of `hosting_websites_start-setup`
25
+ - Changed the description and input schema of `hosting_websites_create`
26
+
27
+ ### Also in this release
28
+
29
+ - Documentation: `README.md`
30
+ - Request handling and authentication: `src/core/runtime.js`, `src/core/runtime.ts`
31
+ - Build and packaging: `types.d.ts`
32
+
7
33
  ## v2.17.1 — 2026-10-15
8
34
 
9
35
  ### Operations
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 (420 total)
72
+ - `hostinger-api-mcp` — unified server over every operation (421 total)
73
73
  - `hostinger-agency-hosting-mcp` — 42 operations for agency-hosting
74
74
  - `hostinger-agent-readiness-mcp` — 3 operations for agent-readiness
75
75
  - `hostinger-billing-mcp` — 9 operations for billing
@@ -81,7 +81,7 @@ This package installs the following MCP server commands:
81
81
  - `hostinger-mail-mcp` — 38 operations for mail
82
82
  - `hostinger-reach-mcp` — 56 operations for reach
83
83
  - `hostinger-vps-mcp` — 67 operations for vps
84
- - `hostinger-wordpress-mcp` — 39 operations for wordpress
84
+ - `hostinger-wordpress-mcp` — 40 operations for wordpress
85
85
 
86
86
  Every binary exposes the same three tools; a scoped binary only searches and executes its own group's operations. `hostinger-api-mcp` remains the backwards-compatible default.
87
87
 
@@ -2600,8 +2600,8 @@ of the website root with generated credentials.
2600
2600
 
2601
2601
  Omit `domain` to set the website up on a generated temporary free subdomain.
2602
2602
 
2603
- The order must already have a hosting account: to create the first website on a new
2604
- hosting plan use the create website endpoint, which takes the `datacenter_code`.
2603
+ When the order has no hosting account yet, the setup creates one first, in the datacenter
2604
+ given by `datacenter_code` or the order's default datacenter when it is omitted.
2605
2605
  Returns 404 when the order does not exist or is not accessible to the authenticated
2606
2606
  client, and 409 with a `Retry-After` header while a setup for the same domain is still
2607
2607
  running.
@@ -2791,6 +2791,10 @@ endpoint instead.
2791
2791
 
2792
2792
  #### hosting_websites_create
2793
2793
 
2794
+ Deprecated: use `POST /api/hosting/v1/orders/{order_id}/onboardings` (start website setup)
2795
+ instead. It takes the same `domain` and `datacenter_code`, can also install WordPress, and
2796
+ returns the created setup.
2797
+
2794
2798
  Create a new website for the authenticated client.
2795
2799
 
2796
2800
  You must choose which hosting order to create this website on. Pass that
@@ -2800,10 +2804,8 @@ available IDs; the website is provisioned on that order's hosting plan.
2800
2804
  Only Web and Cloud hosting orders are accepted. To create a website on an Agency
2801
2805
  Plan order, use `POST /api/agency-hosting/v1/orders/{order_id}/websites/setups`.
2802
2806
 
2803
- The datacenter_code parameter is required when creating the first website
2804
- on a new hosting plan - this will set up and configure new hosting account
2805
- in the selected datacenter.
2806
-
2807
+ When the order has no hosting account yet, a new hosting account is set up first, in the
2808
+ datacenter given by `datacenter_code` or the order's default datacenter when it is omitted.
2807
2809
  Subsequent websites will be hosted on the same datacenter automatically.
2808
2810
 
2809
2811
  Website creation is asynchronous and takes up to a few minutes. Poll the list website
@@ -4638,13 +4640,20 @@ Use this endpoint to power off running VPS instances.
4638
4640
 
4639
4641
  #### wordpress_ai-content_generate-images
4640
4642
 
4641
- Generate one or more images from a prompt and an image type for the specified
4642
- WordPress installation. Images are returned inline as base64-encoded PNGs. They match
4643
- the requested aspect ratio and are never smaller than the requested size; logos are
4644
- transparent PNGs cropped to the mark.
4643
+ Start generating one or more images from a prompt and an image type for the specified
4644
+ WordPress installation. The generation runs asynchronously: the response is returned
4645
+ right away with `status: in-progress` and a `generation_id`. Poll
4646
+ GET /api/hosting/v1/accounts/{username}/wordpress/{software}/content/generations/{generation_id}
4647
+ every few seconds until `status` is `completed` or `failed`.
4648
+
4649
+ A completed generation returns temporary image URLs together with the time they expire;
4650
+ download the images before then. Images match the requested aspect ratio and are never
4651
+ smaller than the requested size; logos are transparent images cropped to the mark.
4645
4652
 
4646
- Generation is synchronous and can take up to a minute. The endpoint is limited to
4647
- 10 requests per minute.
4653
+ Only one image generation can run per installation at a time: while one is still in
4654
+ progress the endpoint returns 409 without the ID of the running generation, so a caller
4655
+ that did not receive the `202` has to wait for it to finish (up to a few minutes) before
4656
+ starting a new one. The endpoint is limited to 10 requests per minute.
4648
4657
 
4649
4658
  Provide the WordPress installation (software) identifier in the path. It can
4650
4659
  be obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).
@@ -4652,6 +4661,25 @@ be obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).
4652
4661
  - **Method**: `POST`
4653
4662
  - **Path**: `/api/hosting/v1/accounts/{username}/wordpress/{software}/content/images/generate`
4654
4663
 
4664
+ #### wordpress_ai-content_generation-result
4665
+
4666
+ Get the result of an AI content generation started for the specified WordPress
4667
+ installation, such as an image generation started with
4668
+ POST /api/hosting/v1/accounts/{username}/wordpress/{software}/content/images/generate.
4669
+
4670
+ While the generation is still running only `status: in-progress` is returned; poll every
4671
+ few seconds. Once `completed`, `result` holds the generated content shaped according to
4672
+ `type`: temporary image URLs together with the time they expire for `image-generation`, or
4673
+ the generated website document for `website-generation` (started from the Hostinger
4674
+ WordPress plugin). A `failed` generation has no `result`. Unknown or expired generation
4675
+ IDs return 404.
4676
+
4677
+ Provide the WordPress installation (software) identifier in the path. It can
4678
+ be obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).
4679
+
4680
+ - **Method**: `GET`
4681
+ - **Path**: `/api/hosting/v1/accounts/{username}/wordpress/{software}/content/generations/{generation_id}`
4682
+
4655
4683
  #### wordpress_ai-tools_show-option-status
4656
4684
 
4657
4685
  Show the current AI option status for the Hostinger Tools plugin on the
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hostinger-api-mcp",
3
- "version": "2.17.1",
3
+ "version": "3.0.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/mcp",
3
- "version": "2.17.1",
3
+ "version": "3.0.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.17.1",
9
+ "version": "3.0.0",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "npm",
13
13
  "identifier": "@hostinger/mcp",
14
- "version": "2.17.1",
14
+ "version": "3.0.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.67.1
67
+ * Generated from OpenAPI spec version 2.0.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.67.1
97
+ * Generated from OpenAPI spec version 2.0.0
98
98
  */
99
99
  class MCPServer {
100
100
  private readonly name: string;
@@ -8484,7 +8484,7 @@ export default [
8484
8484
  "readOnlyHint": false,
8485
8485
  "destructiveHint": false
8486
8486
  },
8487
- "description": "Starts a website setup on a Web or Cloud hosting order and returns the created setup\nright away; the website itself is provisioned asynchronously. Poll the list website\nsetups endpoint with the `domain` filter every 10 to 15 seconds and wait for\n`status: completed` before uploading files, deploying or creating databases.\n\nOmit `type` for an empty website. `type: wordpress` installs WordPress in the website\nroot with the admin user, email and password from `wordpress`, the domain as the site\ntitle, and `en_US` when `wordpress.language` is omitted. The headless types\n(`headless_wordpress`, `headless_ecommerce`, `headless_pocketbase`) create a headless\nwebsite; `headless_wordpress` additionally installs WordPress into the `cms` directory\nof the website root with generated credentials.\n\nOmit `domain` to set the website up on a generated temporary free subdomain.\n\nThe order must already have a hosting account: to create the first website on a new\nhosting plan use the create website endpoint, which takes the `datacenter_code`.\nReturns 404 when the order does not exist or is not accessible to the authenticated\nclient, and 409 with a `Retry-After` header while a setup for the same domain is still\nrunning.",
8487
+ "description": "Starts a website setup on a Web or Cloud hosting order and returns the created setup\nright away; the website itself is provisioned asynchronously. Poll the list website\nsetups endpoint with the `domain` filter every 10 to 15 seconds and wait for\n`status: completed` before uploading files, deploying or creating databases.\n\nOmit `type` for an empty website. `type: wordpress` installs WordPress in the website\nroot with the admin user, email and password from `wordpress`, the domain as the site\ntitle, and `en_US` when `wordpress.language` is omitted. The headless types\n(`headless_wordpress`, `headless_ecommerce`, `headless_pocketbase`) create a headless\nwebsite; `headless_wordpress` additionally installs WordPress into the `cms` directory\nof the website root with generated credentials.\n\nOmit `domain` to set the website up on a generated temporary free subdomain.\n\nWhen the order has no hosting account yet, the setup creates one first, in the datacenter\ngiven by `datacenter_code` or the order's default datacenter when it is omitted.\nReturns 404 when the order does not exist or is not accessible to the authenticated\nclient, and 409 with a `Retry-After` header while a setup for the same domain is still\nrunning.",
8488
8488
  "method": "POST",
8489
8489
  "path": "/api/hosting/v1/orders/{order_id}/onboardings",
8490
8490
  "inputSchema": {
@@ -8506,7 +8506,11 @@ export default [
8506
8506
  },
8507
8507
  "domain": {
8508
8508
  "type": "string",
8509
- "description": "Customer-owned domain. Cannot start with \"www.\". Omit or `null` to set the website up on a generated temporary free subdomain."
8509
+ "description": "Customer-owned domain. Cannot start with \"www.\" and can have at most one subdomain level, e.g. `blog.example.com`. Omit or `null` to set the website up on a generated temporary free subdomain."
8510
+ },
8511
+ "datacenter_code": {
8512
+ "type": "string",
8513
+ "description": "Datacenter for the hosting account when the order does not have one yet. Omit to use the order's default datacenter. Ignored when the order already has a hosting account. List available datacenters to find valid codes."
8510
8514
  },
8511
8515
  "wordpress": {
8512
8516
  "type": "object",
@@ -9202,7 +9206,7 @@ export default [
9202
9206
  "readOnlyHint": false,
9203
9207
  "destructiveHint": false
9204
9208
  },
9205
- "description": "Create a new website for the authenticated client.\n\nYou must choose which hosting order to create this website on. Pass that\norder as `order_id` together with the domain name. List orders to see\navailable IDs; the website is provisioned on that order's hosting plan.\n\nOnly Web and Cloud hosting orders are accepted. To create a website on an Agency\nPlan order, use `POST /api/agency-hosting/v1/orders/{order_id}/websites/setups`.\n\nThe datacenter_code parameter is required when creating the first website\non a new hosting plan - this will set up and configure new hosting account\nin the selected datacenter.\n\nSubsequent websites will be hosted on the same datacenter automatically.\n\nWebsite creation is asynchronous and takes up to a few minutes. Poll the list website\nsetups endpoint with the `domain` filter every 10 to 15 seconds and wait for `status:\ncompleted` before uploading files, deploying or creating databases. While the setup is\n`running`, endpoints that operate on the website may respond with `404` or `409`.\n`is_enabled` on the websites list reflects suspension, not readiness.",
9209
+ "description": "Deprecated: use `POST /api/hosting/v1/orders/{order_id}/onboardings` (start website setup)\ninstead. It takes the same `domain` and `datacenter_code`, can also install WordPress, and\nreturns the created setup.\n\nCreate a new website for the authenticated client.\n\nYou must choose which hosting order to create this website on. Pass that\norder as `order_id` together with the domain name. List orders to see\navailable IDs; the website is provisioned on that order's hosting plan.\n\nOnly Web and Cloud hosting orders are accepted. To create a website on an Agency\nPlan order, use `POST /api/agency-hosting/v1/orders/{order_id}/websites/setups`.\n\nWhen the order has no hosting account yet, a new hosting account is set up first, in the\ndatacenter given by `datacenter_code` or the order's default datacenter when it is omitted.\nSubsequent websites will be hosted on the same datacenter automatically.\n\nWebsite creation is asynchronous and takes up to a few minutes. Poll the list website\nsetups endpoint with the `domain` filter every 10 to 15 seconds and wait for `status:\ncompleted` before uploading files, deploying or creating databases. While the setup is\n`running`, endpoints that operate on the website may respond with `404` or `409`.\n`is_enabled` on the websites list reflects suspension, not readiness.",
9206
9210
  "method": "POST",
9207
9211
  "path": "/api/hosting/v1/websites",
9208
9212
  "inputSchema": {
@@ -9210,7 +9214,7 @@ export default [
9210
9214
  "properties": {
9211
9215
  "domain": {
9212
9216
  "type": "string",
9213
- "description": "Domain name for the website. Cannot start with \"www.\""
9217
+ "description": "Domain name for the website. Cannot start with \"www.\" and can have at most one subdomain level, e.g. `blog.example.com`."
9214
9218
  },
9215
9219
  "order_id": {
9216
9220
  "type": "integer",
@@ -9218,7 +9222,7 @@ export default [
9218
9222
  },
9219
9223
  "datacenter_code": {
9220
9224
  "type": "string",
9221
- "description": "Datacenter code. This parameter is required when creating the first website on a new hosting plan."
9225
+ "description": "Datacenter for the hosting account when the order does not have one yet. Omit to use the order's default datacenter. Ignored when the order already has a hosting account. Must be an available datacenter; list available datacenters to find valid codes."
9222
9226
  }
9223
9227
  },
9224
9228
  "required": [
@@ -15959,7 +15963,7 @@ export default [
15959
15963
  "readOnlyHint": false,
15960
15964
  "destructiveHint": false
15961
15965
  },
15962
- "description": "Generate one or more images from a prompt and an image type for the specified\nWordPress installation. Images are returned inline as base64-encoded PNGs. They match\nthe requested aspect ratio and are never smaller than the requested size; logos are\ntransparent PNGs cropped to the mark.\n\nGeneration is synchronous and can take up to a minute. The endpoint is limited to\n10 requests per minute.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).",
15966
+ "description": "Start generating one or more images from a prompt and an image type for the specified\nWordPress installation. The generation runs asynchronously: the response is returned\nright away with `status: in-progress` and a `generation_id`. Poll\nGET /api/hosting/v1/accounts/{username}/wordpress/{software}/content/generations/{generation_id}\nevery few seconds until `status` is `completed` or `failed`.\n\nA completed generation returns temporary image URLs together with the time they expire;\ndownload the images before then. Images match the requested aspect ratio and are never\nsmaller than the requested size; logos are transparent images cropped to the mark.\n\nOnly one image generation can run per installation at a time: while one is still in\nprogress the endpoint returns 409 without the ID of the running generation, so a caller\nthat did not receive the `202` has to wait for it to finish (up to a few minutes) before\nstarting a new one. The endpoint is limited to 10 requests per minute.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).",
15963
15967
  "method": "POST",
15964
15968
  "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/content/images/generate",
15965
15969
  "inputSchema": {
@@ -16024,6 +16028,54 @@ export default [
16024
16028
  ],
16025
16029
  "group": "wordpress"
16026
16030
  },
16031
+ {
16032
+ "name": "wordpress_ai-content_generation-result",
16033
+ "title": "Get generation result",
16034
+ "annotations": {
16035
+ "title": "Get generation result",
16036
+ "readOnlyHint": true,
16037
+ "destructiveHint": false
16038
+ },
16039
+ "description": "Get the result of an AI content generation started for the specified WordPress\ninstallation, such as an image generation started with\nPOST /api/hosting/v1/accounts/{username}/wordpress/{software}/content/images/generate.\n\nWhile the generation is still running only `status: in-progress` is returned; poll every\nfew seconds. Once `completed`, `result` holds the generated content shaped according to\n`type`: temporary image URLs together with the time they expire for `image-generation`, or\nthe generated website document for `website-generation` (started from the Hostinger\nWordPress plugin). A `failed` generation has no `result`. Unknown or expired generation\nIDs return 404.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).",
16040
+ "method": "GET",
16041
+ "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/content/generations/{generation_id}",
16042
+ "inputSchema": {
16043
+ "type": "object",
16044
+ "properties": {
16045
+ "username": {
16046
+ "type": "string",
16047
+ "description": "username parameter"
16048
+ },
16049
+ "software": {
16050
+ "type": "string",
16051
+ "description": "WordPress installation (software) identifier"
16052
+ },
16053
+ "generation_id": {
16054
+ "type": "string",
16055
+ "description": "Generation ID returned when the generation was started"
16056
+ },
16057
+ "type": {
16058
+ "type": "string",
16059
+ "description": "Generation type to look up. When omitted, every generation type is checked.",
16060
+ "enum": [
16061
+ "website-generation",
16062
+ "image-generation"
16063
+ ]
16064
+ }
16065
+ },
16066
+ "required": [
16067
+ "username",
16068
+ "software",
16069
+ "generation_id"
16070
+ ]
16071
+ },
16072
+ "security": [
16073
+ {
16074
+ "apiToken": []
16075
+ }
16076
+ ],
16077
+ "group": "wordpress"
16078
+ },
16027
16079
  {
16028
16080
  "name": "wordpress_ai-tools_show-option-status",
16029
16081
  "title": "Show AI option status",
@@ -8498,7 +8498,7 @@ const tools: OpenApiTool[] = [
8498
8498
  "readOnlyHint": false,
8499
8499
  "destructiveHint": false
8500
8500
  },
8501
- "description": "Starts a website setup on a Web or Cloud hosting order and returns the created setup\nright away; the website itself is provisioned asynchronously. Poll the list website\nsetups endpoint with the `domain` filter every 10 to 15 seconds and wait for\n`status: completed` before uploading files, deploying or creating databases.\n\nOmit `type` for an empty website. `type: wordpress` installs WordPress in the website\nroot with the admin user, email and password from `wordpress`, the domain as the site\ntitle, and `en_US` when `wordpress.language` is omitted. The headless types\n(`headless_wordpress`, `headless_ecommerce`, `headless_pocketbase`) create a headless\nwebsite; `headless_wordpress` additionally installs WordPress into the `cms` directory\nof the website root with generated credentials.\n\nOmit `domain` to set the website up on a generated temporary free subdomain.\n\nThe order must already have a hosting account: to create the first website on a new\nhosting plan use the create website endpoint, which takes the `datacenter_code`.\nReturns 404 when the order does not exist or is not accessible to the authenticated\nclient, and 409 with a `Retry-After` header while a setup for the same domain is still\nrunning.",
8501
+ "description": "Starts a website setup on a Web or Cloud hosting order and returns the created setup\nright away; the website itself is provisioned asynchronously. Poll the list website\nsetups endpoint with the `domain` filter every 10 to 15 seconds and wait for\n`status: completed` before uploading files, deploying or creating databases.\n\nOmit `type` for an empty website. `type: wordpress` installs WordPress in the website\nroot with the admin user, email and password from `wordpress`, the domain as the site\ntitle, and `en_US` when `wordpress.language` is omitted. The headless types\n(`headless_wordpress`, `headless_ecommerce`, `headless_pocketbase`) create a headless\nwebsite; `headless_wordpress` additionally installs WordPress into the `cms` directory\nof the website root with generated credentials.\n\nOmit `domain` to set the website up on a generated temporary free subdomain.\n\nWhen the order has no hosting account yet, the setup creates one first, in the datacenter\ngiven by `datacenter_code` or the order's default datacenter when it is omitted.\nReturns 404 when the order does not exist or is not accessible to the authenticated\nclient, and 409 with a `Retry-After` header while a setup for the same domain is still\nrunning.",
8502
8502
  "method": "POST",
8503
8503
  "path": "/api/hosting/v1/orders/{order_id}/onboardings",
8504
8504
  "inputSchema": {
@@ -8520,7 +8520,11 @@ const tools: OpenApiTool[] = [
8520
8520
  },
8521
8521
  "domain": {
8522
8522
  "type": "string",
8523
- "description": "Customer-owned domain. Cannot start with \"www.\". Omit or `null` to set the website up on a generated temporary free subdomain."
8523
+ "description": "Customer-owned domain. Cannot start with \"www.\" and can have at most one subdomain level, e.g. `blog.example.com`. Omit or `null` to set the website up on a generated temporary free subdomain."
8524
+ },
8525
+ "datacenter_code": {
8526
+ "type": "string",
8527
+ "description": "Datacenter for the hosting account when the order does not have one yet. Omit to use the order's default datacenter. Ignored when the order already has a hosting account. List available datacenters to find valid codes."
8524
8528
  },
8525
8529
  "wordpress": {
8526
8530
  "type": "object",
@@ -9216,7 +9220,7 @@ const tools: OpenApiTool[] = [
9216
9220
  "readOnlyHint": false,
9217
9221
  "destructiveHint": false
9218
9222
  },
9219
- "description": "Create a new website for the authenticated client.\n\nYou must choose which hosting order to create this website on. Pass that\norder as `order_id` together with the domain name. List orders to see\navailable IDs; the website is provisioned on that order's hosting plan.\n\nOnly Web and Cloud hosting orders are accepted. To create a website on an Agency\nPlan order, use `POST /api/agency-hosting/v1/orders/{order_id}/websites/setups`.\n\nThe datacenter_code parameter is required when creating the first website\non a new hosting plan - this will set up and configure new hosting account\nin the selected datacenter.\n\nSubsequent websites will be hosted on the same datacenter automatically.\n\nWebsite creation is asynchronous and takes up to a few minutes. Poll the list website\nsetups endpoint with the `domain` filter every 10 to 15 seconds and wait for `status:\ncompleted` before uploading files, deploying or creating databases. While the setup is\n`running`, endpoints that operate on the website may respond with `404` or `409`.\n`is_enabled` on the websites list reflects suspension, not readiness.",
9223
+ "description": "Deprecated: use `POST /api/hosting/v1/orders/{order_id}/onboardings` (start website setup)\ninstead. It takes the same `domain` and `datacenter_code`, can also install WordPress, and\nreturns the created setup.\n\nCreate a new website for the authenticated client.\n\nYou must choose which hosting order to create this website on. Pass that\norder as `order_id` together with the domain name. List orders to see\navailable IDs; the website is provisioned on that order's hosting plan.\n\nOnly Web and Cloud hosting orders are accepted. To create a website on an Agency\nPlan order, use `POST /api/agency-hosting/v1/orders/{order_id}/websites/setups`.\n\nWhen the order has no hosting account yet, a new hosting account is set up first, in the\ndatacenter given by `datacenter_code` or the order's default datacenter when it is omitted.\nSubsequent websites will be hosted on the same datacenter automatically.\n\nWebsite creation is asynchronous and takes up to a few minutes. Poll the list website\nsetups endpoint with the `domain` filter every 10 to 15 seconds and wait for `status:\ncompleted` before uploading files, deploying or creating databases. While the setup is\n`running`, endpoints that operate on the website may respond with `404` or `409`.\n`is_enabled` on the websites list reflects suspension, not readiness.",
9220
9224
  "method": "POST",
9221
9225
  "path": "/api/hosting/v1/websites",
9222
9226
  "inputSchema": {
@@ -9224,7 +9228,7 @@ const tools: OpenApiTool[] = [
9224
9228
  "properties": {
9225
9229
  "domain": {
9226
9230
  "type": "string",
9227
- "description": "Domain name for the website. Cannot start with \"www.\""
9231
+ "description": "Domain name for the website. Cannot start with \"www.\" and can have at most one subdomain level, e.g. `blog.example.com`."
9228
9232
  },
9229
9233
  "order_id": {
9230
9234
  "type": "integer",
@@ -9232,7 +9236,7 @@ const tools: OpenApiTool[] = [
9232
9236
  },
9233
9237
  "datacenter_code": {
9234
9238
  "type": "string",
9235
- "description": "Datacenter code. This parameter is required when creating the first website on a new hosting plan."
9239
+ "description": "Datacenter for the hosting account when the order does not have one yet. Omit to use the order's default datacenter. Ignored when the order already has a hosting account. Must be an available datacenter; list available datacenters to find valid codes."
9236
9240
  }
9237
9241
  },
9238
9242
  "required": [
@@ -15973,7 +15977,7 @@ const tools: OpenApiTool[] = [
15973
15977
  "readOnlyHint": false,
15974
15978
  "destructiveHint": false
15975
15979
  },
15976
- "description": "Generate one or more images from a prompt and an image type for the specified\nWordPress installation. Images are returned inline as base64-encoded PNGs. They match\nthe requested aspect ratio and are never smaller than the requested size; logos are\ntransparent PNGs cropped to the mark.\n\nGeneration is synchronous and can take up to a minute. The endpoint is limited to\n10 requests per minute.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).",
15980
+ "description": "Start generating one or more images from a prompt and an image type for the specified\nWordPress installation. The generation runs asynchronously: the response is returned\nright away with `status: in-progress` and a `generation_id`. Poll\nGET /api/hosting/v1/accounts/{username}/wordpress/{software}/content/generations/{generation_id}\nevery few seconds until `status` is `completed` or `failed`.\n\nA completed generation returns temporary image URLs together with the time they expire;\ndownload the images before then. Images match the requested aspect ratio and are never\nsmaller than the requested size; logos are transparent images cropped to the mark.\n\nOnly one image generation can run per installation at a time: while one is still in\nprogress the endpoint returns 409 without the ID of the running generation, so a caller\nthat did not receive the `202` has to wait for it to finish (up to a few minutes) before\nstarting a new one. The endpoint is limited to 10 requests per minute.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).",
15977
15981
  "method": "POST",
15978
15982
  "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/content/images/generate",
15979
15983
  "inputSchema": {
@@ -16038,6 +16042,54 @@ const tools: OpenApiTool[] = [
16038
16042
  ],
16039
16043
  "group": "wordpress"
16040
16044
  },
16045
+ {
16046
+ "name": "wordpress_ai-content_generation-result",
16047
+ "title": "Get generation result",
16048
+ "annotations": {
16049
+ "title": "Get generation result",
16050
+ "readOnlyHint": true,
16051
+ "destructiveHint": false
16052
+ },
16053
+ "description": "Get the result of an AI content generation started for the specified WordPress\ninstallation, such as an image generation started with\nPOST /api/hosting/v1/accounts/{username}/wordpress/{software}/content/images/generate.\n\nWhile the generation is still running only `status: in-progress` is returned; poll every\nfew seconds. Once `completed`, `result` holds the generated content shaped according to\n`type`: temporary image URLs together with the time they expire for `image-generation`, or\nthe generated website document for `website-generation` (started from the Hostinger\nWordPress plugin). A `failed` generation has no `result`. Unknown or expired generation\nIDs return 404.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).",
16054
+ "method": "GET",
16055
+ "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/content/generations/{generation_id}",
16056
+ "inputSchema": {
16057
+ "type": "object",
16058
+ "properties": {
16059
+ "username": {
16060
+ "type": "string",
16061
+ "description": "username parameter"
16062
+ },
16063
+ "software": {
16064
+ "type": "string",
16065
+ "description": "WordPress installation (software) identifier"
16066
+ },
16067
+ "generation_id": {
16068
+ "type": "string",
16069
+ "description": "Generation ID returned when the generation was started"
16070
+ },
16071
+ "type": {
16072
+ "type": "string",
16073
+ "description": "Generation type to look up. When omitted, every generation type is checked.",
16074
+ "enum": [
16075
+ "website-generation",
16076
+ "image-generation"
16077
+ ]
16078
+ }
16079
+ },
16080
+ "required": [
16081
+ "username",
16082
+ "software",
16083
+ "generation_id"
16084
+ ]
16085
+ },
16086
+ "security": [
16087
+ {
16088
+ "apiToken": []
16089
+ }
16090
+ ],
16091
+ "group": "wordpress"
16092
+ },
16041
16093
  {
16042
16094
  "name": "wordpress_ai-tools_show-option-status",
16043
16095
  "title": "Show AI option status",
@@ -2874,7 +2874,7 @@ export default [
2874
2874
  "readOnlyHint": false,
2875
2875
  "destructiveHint": false
2876
2876
  },
2877
- "description": "Starts a website setup on a Web or Cloud hosting order and returns the created setup\nright away; the website itself is provisioned asynchronously. Poll the list website\nsetups endpoint with the `domain` filter every 10 to 15 seconds and wait for\n`status: completed` before uploading files, deploying or creating databases.\n\nOmit `type` for an empty website. `type: wordpress` installs WordPress in the website\nroot with the admin user, email and password from `wordpress`, the domain as the site\ntitle, and `en_US` when `wordpress.language` is omitted. The headless types\n(`headless_wordpress`, `headless_ecommerce`, `headless_pocketbase`) create a headless\nwebsite; `headless_wordpress` additionally installs WordPress into the `cms` directory\nof the website root with generated credentials.\n\nOmit `domain` to set the website up on a generated temporary free subdomain.\n\nThe order must already have a hosting account: to create the first website on a new\nhosting plan use the create website endpoint, which takes the `datacenter_code`.\nReturns 404 when the order does not exist or is not accessible to the authenticated\nclient, and 409 with a `Retry-After` header while a setup for the same domain is still\nrunning.",
2877
+ "description": "Starts a website setup on a Web or Cloud hosting order and returns the created setup\nright away; the website itself is provisioned asynchronously. Poll the list website\nsetups endpoint with the `domain` filter every 10 to 15 seconds and wait for\n`status: completed` before uploading files, deploying or creating databases.\n\nOmit `type` for an empty website. `type: wordpress` installs WordPress in the website\nroot with the admin user, email and password from `wordpress`, the domain as the site\ntitle, and `en_US` when `wordpress.language` is omitted. The headless types\n(`headless_wordpress`, `headless_ecommerce`, `headless_pocketbase`) create a headless\nwebsite; `headless_wordpress` additionally installs WordPress into the `cms` directory\nof the website root with generated credentials.\n\nOmit `domain` to set the website up on a generated temporary free subdomain.\n\nWhen the order has no hosting account yet, the setup creates one first, in the datacenter\ngiven by `datacenter_code` or the order's default datacenter when it is omitted.\nReturns 404 when the order does not exist or is not accessible to the authenticated\nclient, and 409 with a `Retry-After` header while a setup for the same domain is still\nrunning.",
2878
2878
  "method": "POST",
2879
2879
  "path": "/api/hosting/v1/orders/{order_id}/onboardings",
2880
2880
  "inputSchema": {
@@ -2896,7 +2896,11 @@ export default [
2896
2896
  },
2897
2897
  "domain": {
2898
2898
  "type": "string",
2899
- "description": "Customer-owned domain. Cannot start with \"www.\". Omit or `null` to set the website up on a generated temporary free subdomain."
2899
+ "description": "Customer-owned domain. Cannot start with \"www.\" and can have at most one subdomain level, e.g. `blog.example.com`. Omit or `null` to set the website up on a generated temporary free subdomain."
2900
+ },
2901
+ "datacenter_code": {
2902
+ "type": "string",
2903
+ "description": "Datacenter for the hosting account when the order does not have one yet. Omit to use the order's default datacenter. Ignored when the order already has a hosting account. List available datacenters to find valid codes."
2900
2904
  },
2901
2905
  "wordpress": {
2902
2906
  "type": "object",
@@ -3592,7 +3596,7 @@ export default [
3592
3596
  "readOnlyHint": false,
3593
3597
  "destructiveHint": false
3594
3598
  },
3595
- "description": "Create a new website for the authenticated client.\n\nYou must choose which hosting order to create this website on. Pass that\norder as `order_id` together with the domain name. List orders to see\navailable IDs; the website is provisioned on that order's hosting plan.\n\nOnly Web and Cloud hosting orders are accepted. To create a website on an Agency\nPlan order, use `POST /api/agency-hosting/v1/orders/{order_id}/websites/setups`.\n\nThe datacenter_code parameter is required when creating the first website\non a new hosting plan - this will set up and configure new hosting account\nin the selected datacenter.\n\nSubsequent websites will be hosted on the same datacenter automatically.\n\nWebsite creation is asynchronous and takes up to a few minutes. Poll the list website\nsetups endpoint with the `domain` filter every 10 to 15 seconds and wait for `status:\ncompleted` before uploading files, deploying or creating databases. While the setup is\n`running`, endpoints that operate on the website may respond with `404` or `409`.\n`is_enabled` on the websites list reflects suspension, not readiness.",
3599
+ "description": "Deprecated: use `POST /api/hosting/v1/orders/{order_id}/onboardings` (start website setup)\ninstead. It takes the same `domain` and `datacenter_code`, can also install WordPress, and\nreturns the created setup.\n\nCreate a new website for the authenticated client.\n\nYou must choose which hosting order to create this website on. Pass that\norder as `order_id` together with the domain name. List orders to see\navailable IDs; the website is provisioned on that order's hosting plan.\n\nOnly Web and Cloud hosting orders are accepted. To create a website on an Agency\nPlan order, use `POST /api/agency-hosting/v1/orders/{order_id}/websites/setups`.\n\nWhen the order has no hosting account yet, a new hosting account is set up first, in the\ndatacenter given by `datacenter_code` or the order's default datacenter when it is omitted.\nSubsequent websites will be hosted on the same datacenter automatically.\n\nWebsite creation is asynchronous and takes up to a few minutes. Poll the list website\nsetups endpoint with the `domain` filter every 10 to 15 seconds and wait for `status:\ncompleted` before uploading files, deploying or creating databases. While the setup is\n`running`, endpoints that operate on the website may respond with `404` or `409`.\n`is_enabled` on the websites list reflects suspension, not readiness.",
3596
3600
  "method": "POST",
3597
3601
  "path": "/api/hosting/v1/websites",
3598
3602
  "inputSchema": {
@@ -3600,7 +3604,7 @@ export default [
3600
3604
  "properties": {
3601
3605
  "domain": {
3602
3606
  "type": "string",
3603
- "description": "Domain name for the website. Cannot start with \"www.\""
3607
+ "description": "Domain name for the website. Cannot start with \"www.\" and can have at most one subdomain level, e.g. `blog.example.com`."
3604
3608
  },
3605
3609
  "order_id": {
3606
3610
  "type": "integer",
@@ -3608,7 +3612,7 @@ export default [
3608
3612
  },
3609
3613
  "datacenter_code": {
3610
3614
  "type": "string",
3611
- "description": "Datacenter code. This parameter is required when creating the first website on a new hosting plan."
3615
+ "description": "Datacenter for the hosting account when the order does not have one yet. Omit to use the order's default datacenter. Ignored when the order already has a hosting account. Must be an available datacenter; list available datacenters to find valid codes."
3612
3616
  }
3613
3617
  },
3614
3618
  "required": [
@@ -2888,7 +2888,7 @@ const tools: OpenApiTool[] = [
2888
2888
  "readOnlyHint": false,
2889
2889
  "destructiveHint": false
2890
2890
  },
2891
- "description": "Starts a website setup on a Web or Cloud hosting order and returns the created setup\nright away; the website itself is provisioned asynchronously. Poll the list website\nsetups endpoint with the `domain` filter every 10 to 15 seconds and wait for\n`status: completed` before uploading files, deploying or creating databases.\n\nOmit `type` for an empty website. `type: wordpress` installs WordPress in the website\nroot with the admin user, email and password from `wordpress`, the domain as the site\ntitle, and `en_US` when `wordpress.language` is omitted. The headless types\n(`headless_wordpress`, `headless_ecommerce`, `headless_pocketbase`) create a headless\nwebsite; `headless_wordpress` additionally installs WordPress into the `cms` directory\nof the website root with generated credentials.\n\nOmit `domain` to set the website up on a generated temporary free subdomain.\n\nThe order must already have a hosting account: to create the first website on a new\nhosting plan use the create website endpoint, which takes the `datacenter_code`.\nReturns 404 when the order does not exist or is not accessible to the authenticated\nclient, and 409 with a `Retry-After` header while a setup for the same domain is still\nrunning.",
2891
+ "description": "Starts a website setup on a Web or Cloud hosting order and returns the created setup\nright away; the website itself is provisioned asynchronously. Poll the list website\nsetups endpoint with the `domain` filter every 10 to 15 seconds and wait for\n`status: completed` before uploading files, deploying or creating databases.\n\nOmit `type` for an empty website. `type: wordpress` installs WordPress in the website\nroot with the admin user, email and password from `wordpress`, the domain as the site\ntitle, and `en_US` when `wordpress.language` is omitted. The headless types\n(`headless_wordpress`, `headless_ecommerce`, `headless_pocketbase`) create a headless\nwebsite; `headless_wordpress` additionally installs WordPress into the `cms` directory\nof the website root with generated credentials.\n\nOmit `domain` to set the website up on a generated temporary free subdomain.\n\nWhen the order has no hosting account yet, the setup creates one first, in the datacenter\ngiven by `datacenter_code` or the order's default datacenter when it is omitted.\nReturns 404 when the order does not exist or is not accessible to the authenticated\nclient, and 409 with a `Retry-After` header while a setup for the same domain is still\nrunning.",
2892
2892
  "method": "POST",
2893
2893
  "path": "/api/hosting/v1/orders/{order_id}/onboardings",
2894
2894
  "inputSchema": {
@@ -2910,7 +2910,11 @@ const tools: OpenApiTool[] = [
2910
2910
  },
2911
2911
  "domain": {
2912
2912
  "type": "string",
2913
- "description": "Customer-owned domain. Cannot start with \"www.\". Omit or `null` to set the website up on a generated temporary free subdomain."
2913
+ "description": "Customer-owned domain. Cannot start with \"www.\" and can have at most one subdomain level, e.g. `blog.example.com`. Omit or `null` to set the website up on a generated temporary free subdomain."
2914
+ },
2915
+ "datacenter_code": {
2916
+ "type": "string",
2917
+ "description": "Datacenter for the hosting account when the order does not have one yet. Omit to use the order's default datacenter. Ignored when the order already has a hosting account. List available datacenters to find valid codes."
2914
2918
  },
2915
2919
  "wordpress": {
2916
2920
  "type": "object",
@@ -3606,7 +3610,7 @@ const tools: OpenApiTool[] = [
3606
3610
  "readOnlyHint": false,
3607
3611
  "destructiveHint": false
3608
3612
  },
3609
- "description": "Create a new website for the authenticated client.\n\nYou must choose which hosting order to create this website on. Pass that\norder as `order_id` together with the domain name. List orders to see\navailable IDs; the website is provisioned on that order's hosting plan.\n\nOnly Web and Cloud hosting orders are accepted. To create a website on an Agency\nPlan order, use `POST /api/agency-hosting/v1/orders/{order_id}/websites/setups`.\n\nThe datacenter_code parameter is required when creating the first website\non a new hosting plan - this will set up and configure new hosting account\nin the selected datacenter.\n\nSubsequent websites will be hosted on the same datacenter automatically.\n\nWebsite creation is asynchronous and takes up to a few minutes. Poll the list website\nsetups endpoint with the `domain` filter every 10 to 15 seconds and wait for `status:\ncompleted` before uploading files, deploying or creating databases. While the setup is\n`running`, endpoints that operate on the website may respond with `404` or `409`.\n`is_enabled` on the websites list reflects suspension, not readiness.",
3613
+ "description": "Deprecated: use `POST /api/hosting/v1/orders/{order_id}/onboardings` (start website setup)\ninstead. It takes the same `domain` and `datacenter_code`, can also install WordPress, and\nreturns the created setup.\n\nCreate a new website for the authenticated client.\n\nYou must choose which hosting order to create this website on. Pass that\norder as `order_id` together with the domain name. List orders to see\navailable IDs; the website is provisioned on that order's hosting plan.\n\nOnly Web and Cloud hosting orders are accepted. To create a website on an Agency\nPlan order, use `POST /api/agency-hosting/v1/orders/{order_id}/websites/setups`.\n\nWhen the order has no hosting account yet, a new hosting account is set up first, in the\ndatacenter given by `datacenter_code` or the order's default datacenter when it is omitted.\nSubsequent websites will be hosted on the same datacenter automatically.\n\nWebsite creation is asynchronous and takes up to a few minutes. Poll the list website\nsetups endpoint with the `domain` filter every 10 to 15 seconds and wait for `status:\ncompleted` before uploading files, deploying or creating databases. While the setup is\n`running`, endpoints that operate on the website may respond with `404` or `409`.\n`is_enabled` on the websites list reflects suspension, not readiness.",
3610
3614
  "method": "POST",
3611
3615
  "path": "/api/hosting/v1/websites",
3612
3616
  "inputSchema": {
@@ -3614,7 +3618,7 @@ const tools: OpenApiTool[] = [
3614
3618
  "properties": {
3615
3619
  "domain": {
3616
3620
  "type": "string",
3617
- "description": "Domain name for the website. Cannot start with \"www.\""
3621
+ "description": "Domain name for the website. Cannot start with \"www.\" and can have at most one subdomain level, e.g. `blog.example.com`."
3618
3622
  },
3619
3623
  "order_id": {
3620
3624
  "type": "integer",
@@ -3622,7 +3626,7 @@ const tools: OpenApiTool[] = [
3622
3626
  },
3623
3627
  "datacenter_code": {
3624
3628
  "type": "string",
3625
- "description": "Datacenter code. This parameter is required when creating the first website on a new hosting plan."
3629
+ "description": "Datacenter for the hosting account when the order does not have one yet. Omit to use the order's default datacenter. Ignored when the order already has a hosting account. Must be an available datacenter; list available datacenters to find valid codes."
3626
3630
  }
3627
3631
  },
3628
3632
  "required": [
@@ -8,7 +8,7 @@ export default [
8
8
  "readOnlyHint": false,
9
9
  "destructiveHint": false
10
10
  },
11
- "description": "Generate one or more images from a prompt and an image type for the specified\nWordPress installation. Images are returned inline as base64-encoded PNGs. They match\nthe requested aspect ratio and are never smaller than the requested size; logos are\ntransparent PNGs cropped to the mark.\n\nGeneration is synchronous and can take up to a minute. The endpoint is limited to\n10 requests per minute.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).",
11
+ "description": "Start generating one or more images from a prompt and an image type for the specified\nWordPress installation. The generation runs asynchronously: the response is returned\nright away with `status: in-progress` and a `generation_id`. Poll\nGET /api/hosting/v1/accounts/{username}/wordpress/{software}/content/generations/{generation_id}\nevery few seconds until `status` is `completed` or `failed`.\n\nA completed generation returns temporary image URLs together with the time they expire;\ndownload the images before then. Images match the requested aspect ratio and are never\nsmaller than the requested size; logos are transparent images cropped to the mark.\n\nOnly one image generation can run per installation at a time: while one is still in\nprogress the endpoint returns 409 without the ID of the running generation, so a caller\nthat did not receive the `202` has to wait for it to finish (up to a few minutes) before\nstarting a new one. The endpoint is limited to 10 requests per minute.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).",
12
12
  "method": "POST",
13
13
  "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/content/images/generate",
14
14
  "inputSchema": {
@@ -73,6 +73,54 @@ export default [
73
73
  ],
74
74
  "group": "wordpress"
75
75
  },
76
+ {
77
+ "name": "wordpress_ai-content_generation-result",
78
+ "title": "Get generation result",
79
+ "annotations": {
80
+ "title": "Get generation result",
81
+ "readOnlyHint": true,
82
+ "destructiveHint": false
83
+ },
84
+ "description": "Get the result of an AI content generation started for the specified WordPress\ninstallation, such as an image generation started with\nPOST /api/hosting/v1/accounts/{username}/wordpress/{software}/content/images/generate.\n\nWhile the generation is still running only `status: in-progress` is returned; poll every\nfew seconds. Once `completed`, `result` holds the generated content shaped according to\n`type`: temporary image URLs together with the time they expire for `image-generation`, or\nthe generated website document for `website-generation` (started from the Hostinger\nWordPress plugin). A `failed` generation has no `result`. Unknown or expired generation\nIDs return 404.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).",
85
+ "method": "GET",
86
+ "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/content/generations/{generation_id}",
87
+ "inputSchema": {
88
+ "type": "object",
89
+ "properties": {
90
+ "username": {
91
+ "type": "string",
92
+ "description": "username parameter"
93
+ },
94
+ "software": {
95
+ "type": "string",
96
+ "description": "WordPress installation (software) identifier"
97
+ },
98
+ "generation_id": {
99
+ "type": "string",
100
+ "description": "Generation ID returned when the generation was started"
101
+ },
102
+ "type": {
103
+ "type": "string",
104
+ "description": "Generation type to look up. When omitted, every generation type is checked.",
105
+ "enum": [
106
+ "website-generation",
107
+ "image-generation"
108
+ ]
109
+ }
110
+ },
111
+ "required": [
112
+ "username",
113
+ "software",
114
+ "generation_id"
115
+ ]
116
+ },
117
+ "security": [
118
+ {
119
+ "apiToken": []
120
+ }
121
+ ],
122
+ "group": "wordpress"
123
+ },
76
124
  {
77
125
  "name": "wordpress_ai-tools_show-option-status",
78
126
  "title": "Show AI option status",
@@ -22,7 +22,7 @@ const tools: OpenApiTool[] = [
22
22
  "readOnlyHint": false,
23
23
  "destructiveHint": false
24
24
  },
25
- "description": "Generate one or more images from a prompt and an image type for the specified\nWordPress installation. Images are returned inline as base64-encoded PNGs. They match\nthe requested aspect ratio and are never smaller than the requested size; logos are\ntransparent PNGs cropped to the mark.\n\nGeneration is synchronous and can take up to a minute. The endpoint is limited to\n10 requests per minute.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).",
25
+ "description": "Start generating one or more images from a prompt and an image type for the specified\nWordPress installation. The generation runs asynchronously: the response is returned\nright away with `status: in-progress` and a `generation_id`. Poll\nGET /api/hosting/v1/accounts/{username}/wordpress/{software}/content/generations/{generation_id}\nevery few seconds until `status` is `completed` or `failed`.\n\nA completed generation returns temporary image URLs together with the time they expire;\ndownload the images before then. Images match the requested aspect ratio and are never\nsmaller than the requested size; logos are transparent images cropped to the mark.\n\nOnly one image generation can run per installation at a time: while one is still in\nprogress the endpoint returns 409 without the ID of the running generation, so a caller\nthat did not receive the `202` has to wait for it to finish (up to a few minutes) before\nstarting a new one. The endpoint is limited to 10 requests per minute.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).",
26
26
  "method": "POST",
27
27
  "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/content/images/generate",
28
28
  "inputSchema": {
@@ -87,6 +87,54 @@ const tools: OpenApiTool[] = [
87
87
  ],
88
88
  "group": "wordpress"
89
89
  },
90
+ {
91
+ "name": "wordpress_ai-content_generation-result",
92
+ "title": "Get generation result",
93
+ "annotations": {
94
+ "title": "Get generation result",
95
+ "readOnlyHint": true,
96
+ "destructiveHint": false
97
+ },
98
+ "description": "Get the result of an AI content generation started for the specified WordPress\ninstallation, such as an image generation started with\nPOST /api/hosting/v1/accounts/{username}/wordpress/{software}/content/images/generate.\n\nWhile the generation is still running only `status: in-progress` is returned; poll every\nfew seconds. Once `completed`, `result` holds the generated content shaped according to\n`type`: temporary image URLs together with the time they expire for `image-generation`, or\nthe generated website document for `website-generation` (started from the Hostinger\nWordPress plugin). A `failed` generation has no `result`. Unknown or expired generation\nIDs return 404.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).",
99
+ "method": "GET",
100
+ "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/content/generations/{generation_id}",
101
+ "inputSchema": {
102
+ "type": "object",
103
+ "properties": {
104
+ "username": {
105
+ "type": "string",
106
+ "description": "username parameter"
107
+ },
108
+ "software": {
109
+ "type": "string",
110
+ "description": "WordPress installation (software) identifier"
111
+ },
112
+ "generation_id": {
113
+ "type": "string",
114
+ "description": "Generation ID returned when the generation was started"
115
+ },
116
+ "type": {
117
+ "type": "string",
118
+ "description": "Generation type to look up. When omitted, every generation type is checked.",
119
+ "enum": [
120
+ "website-generation",
121
+ "image-generation"
122
+ ]
123
+ }
124
+ },
125
+ "required": [
126
+ "username",
127
+ "software",
128
+ "generation_id"
129
+ ]
130
+ },
131
+ "security": [
132
+ {
133
+ "apiToken": []
134
+ }
135
+ ],
136
+ "group": "wordpress"
137
+ },
90
138
  {
91
139
  "name": "wordpress_ai-tools_show-option-status",
92
140
  "title": "Show AI option status",
@@ -4,4 +4,4 @@ import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/agency-hosting.js';
5
5
  import instructions from '../core/instructions.js';
6
6
 
7
- startServer({ name: 'hostinger-agency-hosting-mcp', version: '2.17.1', tools, instructions });
7
+ startServer({ name: 'hostinger-agency-hosting-mcp', version: '3.0.0', tools, instructions });
@@ -4,4 +4,4 @@ import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/agency-hosting.js';
5
5
  import instructions from '../core/instructions.js';
6
6
 
7
- startServer({ name: 'hostinger-agency-hosting-mcp', version: '2.17.1', tools, instructions });
7
+ startServer({ name: 'hostinger-agency-hosting-mcp', version: '3.0.0', tools, instructions });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/agent-readiness.js';
5
5
 
6
- startServer({ name: 'hostinger-agent-readiness-mcp', version: '2.17.1', tools });
6
+ startServer({ name: 'hostinger-agent-readiness-mcp', version: '3.0.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/agent-readiness.js';
5
5
 
6
- startServer({ name: 'hostinger-agent-readiness-mcp', version: '2.17.1', tools });
6
+ startServer({ name: 'hostinger-agent-readiness-mcp', version: '3.0.0', tools });
@@ -5,4 +5,4 @@ import tools from '../core/tools/all.js';
5
5
  import instructions from '../core/instructions.js';
6
6
  import skills from '../core/skills.js';
7
7
 
8
- startServer({ name: 'hostinger-api-mcp', version: '2.17.1', tools, instructions, skills });
8
+ startServer({ name: 'hostinger-api-mcp', version: '3.0.0', tools, instructions, skills });
@@ -5,4 +5,4 @@ import tools from '../core/tools/all.js';
5
5
  import instructions from '../core/instructions.js';
6
6
  import skills from '../core/skills.js';
7
7
 
8
- startServer({ name: 'hostinger-api-mcp', version: '2.17.1', tools, instructions, skills });
8
+ startServer({ name: 'hostinger-api-mcp', version: '3.0.0', tools, instructions, skills });
@@ -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: '2.17.1', tools });
6
+ startServer({ name: 'hostinger-billing-mcp', version: '3.0.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: '2.17.1', tools });
6
+ startServer({ name: 'hostinger-billing-mcp', version: '3.0.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: '2.17.1', tools });
6
+ startServer({ name: 'hostinger-dns-mcp', version: '3.0.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: '2.17.1', tools });
6
+ startServer({ name: 'hostinger-dns-mcp', version: '3.0.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: '2.17.1', tools });
6
+ startServer({ name: 'hostinger-domains-mcp', version: '3.0.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: '2.17.1', tools });
6
+ startServer({ name: 'hostinger-domains-mcp', version: '3.0.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: '2.17.1', tools });
6
+ startServer({ name: 'hostinger-ecommerce-mcp', version: '3.0.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: '2.17.1', tools });
6
+ startServer({ name: 'hostinger-ecommerce-mcp', version: '3.0.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: '2.17.1', tools });
6
+ startServer({ name: 'hostinger-horizons-mcp', version: '3.0.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: '2.17.1', tools });
6
+ startServer({ name: 'hostinger-horizons-mcp', version: '3.0.0', tools });
@@ -4,4 +4,4 @@ import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/hosting.js';
5
5
  import instructions from '../core/instructions.js';
6
6
 
7
- startServer({ name: 'hostinger-hosting-mcp', version: '2.17.1', tools, instructions });
7
+ startServer({ name: 'hostinger-hosting-mcp', version: '3.0.0', tools, instructions });
@@ -4,4 +4,4 @@ import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/hosting.js';
5
5
  import instructions from '../core/instructions.js';
6
6
 
7
- startServer({ name: 'hostinger-hosting-mcp', version: '2.17.1', tools, instructions });
7
+ startServer({ name: 'hostinger-hosting-mcp', version: '3.0.0', tools, instructions });
@@ -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: '2.17.1', tools });
6
+ startServer({ name: 'hostinger-mail-mcp', version: '3.0.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: '2.17.1', tools });
6
+ startServer({ name: 'hostinger-mail-mcp', version: '3.0.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: '2.17.1', tools });
6
+ startServer({ name: 'hostinger-reach-mcp', version: '3.0.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: '2.17.1', tools });
6
+ startServer({ name: 'hostinger-reach-mcp', version: '3.0.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: '2.17.1', tools });
6
+ startServer({ name: 'hostinger-vps-mcp', version: '3.0.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: '2.17.1', tools });
6
+ startServer({ name: 'hostinger-vps-mcp', version: '3.0.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: '2.17.1', tools });
6
+ startServer({ name: 'hostinger-wordpress-mcp', version: '3.0.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: '2.17.1', tools });
6
+ startServer({ name: 'hostinger-wordpress-mcp', version: '3.0.0', tools });
package/types.d.ts CHANGED
@@ -4893,8 +4893,8 @@ of the website root with generated credentials.
4893
4893
 
4894
4894
  Omit `domain` to set the website up on a generated temporary free subdomain.
4895
4895
 
4896
- The order must already have a hosting account: to create the first website on a new
4897
- hosting plan use the create website endpoint, which takes the `datacenter_code`.
4896
+ When the order has no hosting account yet, the setup creates one first, in the datacenter
4897
+ given by `datacenter_code` or the order's default datacenter when it is omitted.
4898
4898
  Returns 404 when the order does not exist or is not accessible to the authenticated
4899
4899
  client, and 409 with a `Retry-After` header while a setup for the same domain is still
4900
4900
  running.
@@ -4910,9 +4910,13 @@ running.
4910
4910
  */
4911
4911
  type?: string;
4912
4912
  /**
4913
- * Customer-owned domain. Cannot start with "www.". Omit or `null` to set the website up on a generated temporary free subdomain.
4913
+ * Customer-owned domain. Cannot start with "www." and can have at most one subdomain level, e.g. `blog.example.com`. Omit or `null` to set the website up on a generated temporary free subdomain.
4914
4914
  */
4915
4915
  domain?: string;
4916
+ /**
4917
+ * Datacenter for the hosting account when the order does not have one yet. Omit to use the order's default datacenter. Ignored when the order already has a hosting account. List available datacenters to find valid codes.
4918
+ */
4919
+ datacenter_code?: string;
4916
4920
  /**
4917
4921
  * WordPress install settings. Required when `type` is `wordpress`, not allowed otherwise. The site title is the domain.
4918
4922
  */
@@ -5320,7 +5324,11 @@ endpoint instead.
5320
5324
  };
5321
5325
 
5322
5326
  /**
5323
- * Create a new website for the authenticated client.
5327
+ * Deprecated: use `POST /api/hosting/v1/orders/{order_id}/onboardings` (start website setup)
5328
+ instead. It takes the same `domain` and `datacenter_code`, can also install WordPress, and
5329
+ returns the created setup.
5330
+
5331
+ Create a new website for the authenticated client.
5324
5332
 
5325
5333
  You must choose which hosting order to create this website on. Pass that
5326
5334
  order as `order_id` together with the domain name. List orders to see
@@ -5329,10 +5337,8 @@ available IDs; the website is provisioned on that order's hosting plan.
5329
5337
  Only Web and Cloud hosting orders are accepted. To create a website on an Agency
5330
5338
  Plan order, use `POST /api/agency-hosting/v1/orders/{order_id}/websites/setups`.
5331
5339
 
5332
- The datacenter_code parameter is required when creating the first website
5333
- on a new hosting plan - this will set up and configure new hosting account
5334
- in the selected datacenter.
5335
-
5340
+ When the order has no hosting account yet, a new hosting account is set up first, in the
5341
+ datacenter given by `datacenter_code` or the order's default datacenter when it is omitted.
5336
5342
  Subsequent websites will be hosted on the same datacenter automatically.
5337
5343
 
5338
5344
  Website creation is asynchronous and takes up to a few minutes. Poll the list website
@@ -5344,7 +5350,7 @@ completed` before uploading files, deploying or creating databases. While the se
5344
5350
  "hosting_websites_create": {
5345
5351
  params: {
5346
5352
  /**
5347
- * Domain name for the website. Cannot start with "www."
5353
+ * Domain name for the website. Cannot start with "www." and can have at most one subdomain level, e.g. `blog.example.com`.
5348
5354
  */
5349
5355
  domain: string;
5350
5356
  /**
@@ -5352,7 +5358,7 @@ completed` before uploading files, deploying or creating databases. While the se
5352
5358
  */
5353
5359
  order_id: number;
5354
5360
  /**
5355
- * Datacenter code. This parameter is required when creating the first website on a new hosting plan.
5361
+ * Datacenter for the hosting account when the order does not have one yet. Omit to use the order's default datacenter. Ignored when the order already has a hosting account. Must be an available datacenter; list available datacenters to find valid codes.
5356
5362
  */
5357
5363
  datacenter_code?: string;
5358
5364
  };
@@ -9307,13 +9313,20 @@ Use this endpoint to power off running VPS instances.
9307
9313
  };
9308
9314
 
9309
9315
  /**
9310
- * Generate one or more images from a prompt and an image type for the specified
9311
- WordPress installation. Images are returned inline as base64-encoded PNGs. They match
9312
- the requested aspect ratio and are never smaller than the requested size; logos are
9313
- transparent PNGs cropped to the mark.
9316
+ * Start generating one or more images from a prompt and an image type for the specified
9317
+ WordPress installation. The generation runs asynchronously: the response is returned
9318
+ right away with `status: in-progress` and a `generation_id`. Poll
9319
+ GET /api/hosting/v1/accounts/{username}/wordpress/{software}/content/generations/{generation_id}
9320
+ every few seconds until `status` is `completed` or `failed`.
9321
+
9322
+ A completed generation returns temporary image URLs together with the time they expire;
9323
+ download the images before then. Images match the requested aspect ratio and are never
9324
+ smaller than the requested size; logos are transparent images cropped to the mark.
9314
9325
 
9315
- Generation is synchronous and can take up to a minute. The endpoint is limited to
9316
- 10 requests per minute.
9326
+ Only one image generation can run per installation at a time: while one is still in
9327
+ progress the endpoint returns 409 without the ID of the running generation, so a caller
9328
+ that did not receive the `202` has to wait for it to finish (up to a few minutes) before
9329
+ starting a new one. The endpoint is limited to 10 requests per minute.
9317
9330
 
9318
9331
  Provide the WordPress installation (software) identifier in the path. It can
9319
9332
  be obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).
@@ -9360,6 +9373,43 @@ be obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).
9360
9373
  response: any; // Response structure will depend on the API
9361
9374
  };
9362
9375
 
9376
+ /**
9377
+ * Get the result of an AI content generation started for the specified WordPress
9378
+ installation, such as an image generation started with
9379
+ POST /api/hosting/v1/accounts/{username}/wordpress/{software}/content/images/generate.
9380
+
9381
+ While the generation is still running only `status: in-progress` is returned; poll every
9382
+ few seconds. Once `completed`, `result` holds the generated content shaped according to
9383
+ `type`: temporary image URLs together with the time they expire for `image-generation`, or
9384
+ the generated website document for `website-generation` (started from the Hostinger
9385
+ WordPress plugin). A `failed` generation has no `result`. Unknown or expired generation
9386
+ IDs return 404.
9387
+
9388
+ Provide the WordPress installation (software) identifier in the path. It can
9389
+ be obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).
9390
+ */
9391
+ "wordpress_ai-content_generation-result": {
9392
+ params: {
9393
+ /**
9394
+ * username parameter
9395
+ */
9396
+ username: string;
9397
+ /**
9398
+ * WordPress installation (software) identifier
9399
+ */
9400
+ software: string;
9401
+ /**
9402
+ * Generation ID returned when the generation was started
9403
+ */
9404
+ generation_id: string;
9405
+ /**
9406
+ * Generation type to look up. When omitted, every generation type is checked.
9407
+ */
9408
+ type?: string;
9409
+ };
9410
+ response: any; // Response structure will depend on the API
9411
+ };
9412
+
9363
9413
  /**
9364
9414
  * Show the current AI option status for the Hostinger Tools plugin on the
9365
9415
  specified WordPress installation. Filter by `option` to return a single