@hostinger/mcp 2.18.0 → 3.1.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,33 @@ 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.1.0 — 2026-10-16
8
+
9
+ ### Operations
10
+
11
+ - Changed the description and input schema of `ecommerce_products_update`
12
+ - Changed the input schema of `ecommerce_products_create-physical`
13
+ - Changed the description and input schema of `ecommerce_product-variants_update-in-batch`
14
+
15
+ ### Also in this release
16
+
17
+ - Documentation: `README.md`
18
+ - Request handling and authentication: `src/core/runtime.js`, `src/core/runtime.ts`
19
+ - Build and packaging: `types.d.ts`
20
+
21
+ ## v3.0.0 — 2026-10-15
22
+
23
+ ### Operations
24
+
25
+ - Added `wordpress_ai-content_generation-result` — Get generation result
26
+ - Changed the description of `wordpress_ai-content_generate-images`
27
+
28
+ ### Also in this release
29
+
30
+ - Documentation: `README.md`
31
+ - Request handling and authentication: `src/core/runtime.js`, `src/core/runtime.ts`
32
+ - Build and packaging: `types.d.ts`
33
+
7
34
  ## v2.18.0 — 2026-10-15
8
35
 
9
36
  ### 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
 
@@ -1554,9 +1554,11 @@ subscribers is archived instead of deleted so its data stays available.
1554
1554
 
1555
1555
  #### ecommerce_products_update
1556
1556
 
1557
- Update a product's name, description or status. Set status to published to make it buyable,
1558
- draft to hide it, or archived to retire it. Variants, prices and inventory are managed
1559
- through the variant endpoints, not here. Returns the updated product summary.
1557
+ Update a product's name, description, status, SEO settings or collections. Set status to
1558
+ published to make it buyable, draft to hide it, or archived to retire it. SEO settings (title,
1559
+ description, slug) left out keep their values. collection_changes adds or removes collections
1560
+ without touching the others. Variants, prices and inventory are managed through the variant
1561
+ endpoints, not here. Returns the updated product summary.
1560
1562
 
1561
1563
  - **Method**: `PATCH`
1562
1564
  - **Path**: `/api/ecommerce/v1/stores/{store_id}/products/{product_id}`
@@ -1662,8 +1664,8 @@ plus its default currency. Useful to verify prerequisites before building a stor
1662
1664
 
1663
1665
  #### ecommerce_product-variants_update-in-batch
1664
1666
 
1665
- Update up to 100 existing variants in place by id — title, inventory, stock tracking and
1666
- prices. Variants omitted from the request are left untouched. Prices replace the variant's
1667
+ Update up to 100 existing variants in place by id — title, SKU, inventory, stock tracking
1668
+ and prices. Variants omitted from the request are left untouched. Prices replace the variant's
1667
1669
  existing prices in full. Returns the updated variants.
1668
1670
 
1669
1671
  - **Method**: `PATCH`
@@ -4640,13 +4642,20 @@ Use this endpoint to power off running VPS instances.
4640
4642
 
4641
4643
  #### wordpress_ai-content_generate-images
4642
4644
 
4643
- Generate one or more images from a prompt and an image type for the specified
4644
- WordPress installation. Images are returned inline as base64-encoded PNGs. They match
4645
- the requested aspect ratio and are never smaller than the requested size; logos are
4646
- transparent PNGs cropped to the mark.
4645
+ Start generating one or more images from a prompt and an image type for the specified
4646
+ WordPress installation. The generation runs asynchronously: the response is returned
4647
+ right away with `status: in-progress` and a `generation_id`. Poll
4648
+ GET /api/hosting/v1/accounts/{username}/wordpress/{software}/content/generations/{generation_id}
4649
+ every few seconds until `status` is `completed` or `failed`.
4647
4650
 
4648
- Generation is synchronous and can take up to a minute. The endpoint is limited to
4649
- 10 requests per minute.
4651
+ A completed generation returns temporary image URLs together with the time they expire;
4652
+ download the images before then. Images match the requested aspect ratio and are never
4653
+ smaller than the requested size; logos are transparent images cropped to the mark.
4654
+
4655
+ Only one image generation can run per installation at a time: while one is still in
4656
+ progress the endpoint returns 409 without the ID of the running generation, so a caller
4657
+ that did not receive the `202` has to wait for it to finish (up to a few minutes) before
4658
+ starting a new one. The endpoint is limited to 10 requests per minute.
4650
4659
 
4651
4660
  Provide the WordPress installation (software) identifier in the path. It can
4652
4661
  be obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).
@@ -4654,6 +4663,25 @@ be obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).
4654
4663
  - **Method**: `POST`
4655
4664
  - **Path**: `/api/hosting/v1/accounts/{username}/wordpress/{software}/content/images/generate`
4656
4665
 
4666
+ #### wordpress_ai-content_generation-result
4667
+
4668
+ Get the result of an AI content generation started for the specified WordPress
4669
+ installation, such as an image generation started with
4670
+ POST /api/hosting/v1/accounts/{username}/wordpress/{software}/content/images/generate.
4671
+
4672
+ While the generation is still running only `status: in-progress` is returned; poll every
4673
+ few seconds. Once `completed`, `result` holds the generated content shaped according to
4674
+ `type`: temporary image URLs together with the time they expire for `image-generation`, or
4675
+ the generated website document for `website-generation` (started from the Hostinger
4676
+ WordPress plugin). A `failed` generation has no `result`. Unknown or expired generation
4677
+ IDs return 404.
4678
+
4679
+ Provide the WordPress installation (software) identifier in the path. It can
4680
+ be obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).
4681
+
4682
+ - **Method**: `GET`
4683
+ - **Path**: `/api/hosting/v1/accounts/{username}/wordpress/{software}/content/generations/{generation_id}`
4684
+
4657
4685
  #### wordpress_ai-tools_show-option-status
4658
4686
 
4659
4687
  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.18.0",
3
+ "version": "3.1.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.18.0",
3
+ "version": "3.1.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.18.0",
9
+ "version": "3.1.0",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "npm",
13
13
  "identifier": "@hostinger/mcp",
14
- "version": "2.18.0",
14
+ "version": "3.1.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.68.0
67
+ * Generated from OpenAPI spec version 2.1.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.68.0
97
+ * Generated from OpenAPI spec version 2.1.0
98
98
  */
99
99
  class MCPServer {
100
100
  private readonly name: string;
@@ -4845,7 +4845,7 @@ export default [
4845
4845
  "destructiveHint": true,
4846
4846
  "idempotentHint": true
4847
4847
  },
4848
- "description": "Update a product's name, description or status. Set status to published to make it buyable,\ndraft to hide it, or archived to retire it. Variants, prices and inventory are managed\nthrough the variant endpoints, not here. Returns the updated product summary.",
4848
+ "description": "Update a product's name, description, status, SEO settings or collections. Set status to\npublished to make it buyable, draft to hide it, or archived to retire it. SEO settings (title,\ndescription, slug) left out keep their values. collection_changes adds or removes collections\nwithout touching the others. Variants, prices and inventory are managed through the variant\nendpoints, not here. Returns the updated product summary.",
4849
4849
  "method": "PATCH",
4850
4850
  "path": "/api/ecommerce/v1/stores/{store_id}/products/{product_id}",
4851
4851
  "inputSchema": {
@@ -4875,6 +4875,64 @@ export default [
4875
4875
  "published",
4876
4876
  "archived"
4877
4877
  ]
4878
+ },
4879
+ "seo_settings": {
4880
+ "type": "object",
4881
+ "description": "Search-engine settings to change. Send at least one field; omitted fields keep their current values.",
4882
+ "properties": {
4883
+ "title": {
4884
+ "type": "string",
4885
+ "description": "Search-engine title for the product page."
4886
+ },
4887
+ "description": {
4888
+ "type": "string",
4889
+ "description": "Search-engine description for the product page."
4890
+ },
4891
+ "slug": {
4892
+ "type": "string",
4893
+ "description": "URL slug of the product page. Lowercase letters, digits and dashes."
4894
+ }
4895
+ }
4896
+ },
4897
+ "collection_changes": {
4898
+ "type": "object",
4899
+ "description": "Adds the product to or removes it from collections without touching its other collections. Send at least one collection in add or remove.",
4900
+ "properties": {
4901
+ "add": {
4902
+ "type": "array",
4903
+ "description": "Collections to add the product to. Every id must exist in the store.",
4904
+ "items": {
4905
+ "type": "object",
4906
+ "description": "add parameter",
4907
+ "properties": {
4908
+ "id": {
4909
+ "type": "string",
4910
+ "description": "The collection id."
4911
+ }
4912
+ },
4913
+ "required": [
4914
+ "id"
4915
+ ]
4916
+ }
4917
+ },
4918
+ "remove": {
4919
+ "type": "array",
4920
+ "description": "Collections to take the product out of. Ids the product is not in are ignored.",
4921
+ "items": {
4922
+ "type": "object",
4923
+ "description": "remove parameter",
4924
+ "properties": {
4925
+ "id": {
4926
+ "type": "string",
4927
+ "description": "The collection id."
4928
+ }
4929
+ },
4930
+ "required": [
4931
+ "id"
4932
+ ]
4933
+ }
4934
+ }
4935
+ }
4878
4936
  }
4879
4937
  },
4880
4938
  "required": [
@@ -5047,6 +5105,24 @@ export default [
5047
5105
  "currency": {
5048
5106
  "type": "string",
5049
5107
  "description": "ISO 4217 currency code. Defaults to the store's default currency when omitted."
5108
+ },
5109
+ "seo_settings": {
5110
+ "type": "object",
5111
+ "description": "Search-engine settings. Omitted fields are generated from the name and description; a slug already in use gets a numeric suffix. Send at least one field.",
5112
+ "properties": {
5113
+ "title": {
5114
+ "type": "string",
5115
+ "description": "Search-engine title for the product page."
5116
+ },
5117
+ "description": {
5118
+ "type": "string",
5119
+ "description": "Search-engine description for the product page."
5120
+ },
5121
+ "slug": {
5122
+ "type": "string",
5123
+ "description": "URL slug of the product page. Lowercase letters, digits and dashes."
5124
+ }
5125
+ }
5050
5126
  }
5051
5127
  },
5052
5128
  "required": [
@@ -5424,7 +5500,7 @@ export default [
5424
5500
  "destructiveHint": true,
5425
5501
  "idempotentHint": true
5426
5502
  },
5427
- "description": "Update up to 100 existing variants in place by id — title, inventory, stock tracking and\nprices. Variants omitted from the request are left untouched. Prices replace the variant's\nexisting prices in full. Returns the updated variants.",
5503
+ "description": "Update up to 100 existing variants in place by id — title, SKU, inventory, stock tracking\nand prices. Variants omitted from the request are left untouched. Prices replace the variant's\nexisting prices in full. Returns the updated variants.",
5428
5504
  "method": "PATCH",
5429
5505
  "path": "/api/ecommerce/v1/stores/{store_id}/products/{product_id}/variants/batch",
5430
5506
  "inputSchema": {
@@ -5453,6 +5529,10 @@ export default [
5453
5529
  "type": "string",
5454
5530
  "description": "The variant title."
5455
5531
  },
5532
+ "sku": {
5533
+ "type": "string",
5534
+ "description": "The variant SKU."
5535
+ },
5456
5536
  "inventory_quantity": {
5457
5537
  "type": "integer",
5458
5538
  "description": "Units in stock."
@@ -15963,7 +16043,7 @@ export default [
15963
16043
  "readOnlyHint": false,
15964
16044
  "destructiveHint": false
15965
16045
  },
15966
- "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).",
16046
+ "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).",
15967
16047
  "method": "POST",
15968
16048
  "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/content/images/generate",
15969
16049
  "inputSchema": {
@@ -16028,6 +16108,54 @@ export default [
16028
16108
  ],
16029
16109
  "group": "wordpress"
16030
16110
  },
16111
+ {
16112
+ "name": "wordpress_ai-content_generation-result",
16113
+ "title": "Get generation result",
16114
+ "annotations": {
16115
+ "title": "Get generation result",
16116
+ "readOnlyHint": true,
16117
+ "destructiveHint": false
16118
+ },
16119
+ "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).",
16120
+ "method": "GET",
16121
+ "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/content/generations/{generation_id}",
16122
+ "inputSchema": {
16123
+ "type": "object",
16124
+ "properties": {
16125
+ "username": {
16126
+ "type": "string",
16127
+ "description": "username parameter"
16128
+ },
16129
+ "software": {
16130
+ "type": "string",
16131
+ "description": "WordPress installation (software) identifier"
16132
+ },
16133
+ "generation_id": {
16134
+ "type": "string",
16135
+ "description": "Generation ID returned when the generation was started"
16136
+ },
16137
+ "type": {
16138
+ "type": "string",
16139
+ "description": "Generation type to look up. When omitted, every generation type is checked.",
16140
+ "enum": [
16141
+ "website-generation",
16142
+ "image-generation"
16143
+ ]
16144
+ }
16145
+ },
16146
+ "required": [
16147
+ "username",
16148
+ "software",
16149
+ "generation_id"
16150
+ ]
16151
+ },
16152
+ "security": [
16153
+ {
16154
+ "apiToken": []
16155
+ }
16156
+ ],
16157
+ "group": "wordpress"
16158
+ },
16031
16159
  {
16032
16160
  "name": "wordpress_ai-tools_show-option-status",
16033
16161
  "title": "Show AI option status",
@@ -4859,7 +4859,7 @@ const tools: OpenApiTool[] = [
4859
4859
  "destructiveHint": true,
4860
4860
  "idempotentHint": true
4861
4861
  },
4862
- "description": "Update a product's name, description or status. Set status to published to make it buyable,\ndraft to hide it, or archived to retire it. Variants, prices and inventory are managed\nthrough the variant endpoints, not here. Returns the updated product summary.",
4862
+ "description": "Update a product's name, description, status, SEO settings or collections. Set status to\npublished to make it buyable, draft to hide it, or archived to retire it. SEO settings (title,\ndescription, slug) left out keep their values. collection_changes adds or removes collections\nwithout touching the others. Variants, prices and inventory are managed through the variant\nendpoints, not here. Returns the updated product summary.",
4863
4863
  "method": "PATCH",
4864
4864
  "path": "/api/ecommerce/v1/stores/{store_id}/products/{product_id}",
4865
4865
  "inputSchema": {
@@ -4889,6 +4889,64 @@ const tools: OpenApiTool[] = [
4889
4889
  "published",
4890
4890
  "archived"
4891
4891
  ]
4892
+ },
4893
+ "seo_settings": {
4894
+ "type": "object",
4895
+ "description": "Search-engine settings to change. Send at least one field; omitted fields keep their current values.",
4896
+ "properties": {
4897
+ "title": {
4898
+ "type": "string",
4899
+ "description": "Search-engine title for the product page."
4900
+ },
4901
+ "description": {
4902
+ "type": "string",
4903
+ "description": "Search-engine description for the product page."
4904
+ },
4905
+ "slug": {
4906
+ "type": "string",
4907
+ "description": "URL slug of the product page. Lowercase letters, digits and dashes."
4908
+ }
4909
+ }
4910
+ },
4911
+ "collection_changes": {
4912
+ "type": "object",
4913
+ "description": "Adds the product to or removes it from collections without touching its other collections. Send at least one collection in add or remove.",
4914
+ "properties": {
4915
+ "add": {
4916
+ "type": "array",
4917
+ "description": "Collections to add the product to. Every id must exist in the store.",
4918
+ "items": {
4919
+ "type": "object",
4920
+ "description": "add parameter",
4921
+ "properties": {
4922
+ "id": {
4923
+ "type": "string",
4924
+ "description": "The collection id."
4925
+ }
4926
+ },
4927
+ "required": [
4928
+ "id"
4929
+ ]
4930
+ }
4931
+ },
4932
+ "remove": {
4933
+ "type": "array",
4934
+ "description": "Collections to take the product out of. Ids the product is not in are ignored.",
4935
+ "items": {
4936
+ "type": "object",
4937
+ "description": "remove parameter",
4938
+ "properties": {
4939
+ "id": {
4940
+ "type": "string",
4941
+ "description": "The collection id."
4942
+ }
4943
+ },
4944
+ "required": [
4945
+ "id"
4946
+ ]
4947
+ }
4948
+ }
4949
+ }
4892
4950
  }
4893
4951
  },
4894
4952
  "required": [
@@ -5061,6 +5119,24 @@ const tools: OpenApiTool[] = [
5061
5119
  "currency": {
5062
5120
  "type": "string",
5063
5121
  "description": "ISO 4217 currency code. Defaults to the store's default currency when omitted."
5122
+ },
5123
+ "seo_settings": {
5124
+ "type": "object",
5125
+ "description": "Search-engine settings. Omitted fields are generated from the name and description; a slug already in use gets a numeric suffix. Send at least one field.",
5126
+ "properties": {
5127
+ "title": {
5128
+ "type": "string",
5129
+ "description": "Search-engine title for the product page."
5130
+ },
5131
+ "description": {
5132
+ "type": "string",
5133
+ "description": "Search-engine description for the product page."
5134
+ },
5135
+ "slug": {
5136
+ "type": "string",
5137
+ "description": "URL slug of the product page. Lowercase letters, digits and dashes."
5138
+ }
5139
+ }
5064
5140
  }
5065
5141
  },
5066
5142
  "required": [
@@ -5438,7 +5514,7 @@ const tools: OpenApiTool[] = [
5438
5514
  "destructiveHint": true,
5439
5515
  "idempotentHint": true
5440
5516
  },
5441
- "description": "Update up to 100 existing variants in place by id — title, inventory, stock tracking and\nprices. Variants omitted from the request are left untouched. Prices replace the variant's\nexisting prices in full. Returns the updated variants.",
5517
+ "description": "Update up to 100 existing variants in place by id — title, SKU, inventory, stock tracking\nand prices. Variants omitted from the request are left untouched. Prices replace the variant's\nexisting prices in full. Returns the updated variants.",
5442
5518
  "method": "PATCH",
5443
5519
  "path": "/api/ecommerce/v1/stores/{store_id}/products/{product_id}/variants/batch",
5444
5520
  "inputSchema": {
@@ -5467,6 +5543,10 @@ const tools: OpenApiTool[] = [
5467
5543
  "type": "string",
5468
5544
  "description": "The variant title."
5469
5545
  },
5546
+ "sku": {
5547
+ "type": "string",
5548
+ "description": "The variant SKU."
5549
+ },
5470
5550
  "inventory_quantity": {
5471
5551
  "type": "integer",
5472
5552
  "description": "Units in stock."
@@ -15977,7 +16057,7 @@ const tools: OpenApiTool[] = [
15977
16057
  "readOnlyHint": false,
15978
16058
  "destructiveHint": false
15979
16059
  },
15980
- "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).",
16060
+ "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).",
15981
16061
  "method": "POST",
15982
16062
  "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/content/images/generate",
15983
16063
  "inputSchema": {
@@ -16042,6 +16122,54 @@ const tools: OpenApiTool[] = [
16042
16122
  ],
16043
16123
  "group": "wordpress"
16044
16124
  },
16125
+ {
16126
+ "name": "wordpress_ai-content_generation-result",
16127
+ "title": "Get generation result",
16128
+ "annotations": {
16129
+ "title": "Get generation result",
16130
+ "readOnlyHint": true,
16131
+ "destructiveHint": false
16132
+ },
16133
+ "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).",
16134
+ "method": "GET",
16135
+ "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/content/generations/{generation_id}",
16136
+ "inputSchema": {
16137
+ "type": "object",
16138
+ "properties": {
16139
+ "username": {
16140
+ "type": "string",
16141
+ "description": "username parameter"
16142
+ },
16143
+ "software": {
16144
+ "type": "string",
16145
+ "description": "WordPress installation (software) identifier"
16146
+ },
16147
+ "generation_id": {
16148
+ "type": "string",
16149
+ "description": "Generation ID returned when the generation was started"
16150
+ },
16151
+ "type": {
16152
+ "type": "string",
16153
+ "description": "Generation type to look up. When omitted, every generation type is checked.",
16154
+ "enum": [
16155
+ "website-generation",
16156
+ "image-generation"
16157
+ ]
16158
+ }
16159
+ },
16160
+ "required": [
16161
+ "username",
16162
+ "software",
16163
+ "generation_id"
16164
+ ]
16165
+ },
16166
+ "security": [
16167
+ {
16168
+ "apiToken": []
16169
+ }
16170
+ ],
16171
+ "group": "wordpress"
16172
+ },
16045
16173
  {
16046
16174
  "name": "wordpress_ai-tools_show-option-status",
16047
16175
  "title": "Show AI option status",