@hostinger/mcp 3.0.0 → 3.2.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.
Files changed (64) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/README.md +16 -287
  3. package/gemini-extension.json +1 -1
  4. package/package.json +2 -1
  5. package/server.json +2 -2
  6. package/skills/audit-hosting/SKILL.md +1 -1
  7. package/skills/deploy-to-hosting/SKILL.md +32 -15
  8. package/skills/headless/references/DATABASE.md +3 -3
  9. package/skills/headless/references/DEPLOYMENT.md +10 -12
  10. package/skills/migrate-to-hosting/SKILL.md +3 -3
  11. package/skills/troubleshoot-website/SKILL.md +2 -2
  12. package/src/core/catalog.js +4 -0
  13. package/src/core/catalog.ts +6 -1
  14. package/src/core/instructions.agency-hosting.js +2 -0
  15. package/src/core/instructions.agency-hosting.ts +3 -0
  16. package/src/core/instructions.js +1 -1
  17. package/src/core/instructions.ts +1 -1
  18. package/src/core/runtime.js +1925 -1228
  19. package/src/core/runtime.ts +1891 -1193
  20. package/src/core/skills.js +18 -18
  21. package/src/core/skills.ts +18 -18
  22. package/src/core/tools/agency-hosting.ts +2 -0
  23. package/src/core/tools/agent-readiness.ts +2 -0
  24. package/src/core/tools/all.js +290 -26
  25. package/src/core/tools/all.ts +292 -26
  26. package/src/core/tools/billing.ts +2 -0
  27. package/src/core/tools/dns.ts +2 -0
  28. package/src/core/tools/domains.ts +2 -0
  29. package/src/core/tools/ecommerce.js +82 -2
  30. package/src/core/tools/ecommerce.ts +84 -2
  31. package/src/core/tools/horizons.ts +2 -0
  32. package/src/core/tools/hosting.js +202 -21
  33. package/src/core/tools/hosting.ts +204 -21
  34. package/src/core/tools/mail.ts +2 -0
  35. package/src/core/tools/reach.ts +2 -0
  36. package/src/core/tools/vps.ts +2 -0
  37. package/src/core/tools/wordpress.ts +2 -0
  38. package/src/servers/agency-hosting.js +2 -2
  39. package/src/servers/agency-hosting.ts +2 -2
  40. package/src/servers/agent-readiness.js +1 -1
  41. package/src/servers/agent-readiness.ts +1 -1
  42. package/src/servers/all.js +1 -1
  43. package/src/servers/all.ts +1 -1
  44. package/src/servers/billing.js +1 -1
  45. package/src/servers/billing.ts +1 -1
  46. package/src/servers/dns.js +1 -1
  47. package/src/servers/dns.ts +1 -1
  48. package/src/servers/domains.js +1 -1
  49. package/src/servers/domains.ts +1 -1
  50. package/src/servers/ecommerce.js +1 -1
  51. package/src/servers/ecommerce.ts +1 -1
  52. package/src/servers/horizons.js +1 -1
  53. package/src/servers/horizons.ts +1 -1
  54. package/src/servers/hosting.js +1 -1
  55. package/src/servers/hosting.ts +1 -1
  56. package/src/servers/mail.js +1 -1
  57. package/src/servers/mail.ts +1 -1
  58. package/src/servers/reach.js +1 -1
  59. package/src/servers/reach.ts +1 -1
  60. package/src/servers/vps.js +1 -1
  61. package/src/servers/vps.ts +1 -1
  62. package/src/servers/wordpress.js +1 -1
  63. package/src/servers/wordpress.ts +1 -1
  64. package/types.d.ts +105 -5
package/CHANGELOG.md CHANGED
@@ -4,6 +4,39 @@ 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.2.0 — 2026-10-19
8
+
9
+ ### Operations
10
+
11
+ - Added `hosting_deploy` — Deploy website, nodejs app, WordPress plugin or theme
12
+ - Added `hosting_get-deployment` — Get deployment status, build status, build logs and failure analysis
13
+ - Hid 24 operations from search (they still run through `execute`): `hosting_import-wordpress-website`, `hosting_deploy-wordpress-plugin`, `hosting_deploy-wordpress-theme`, `hosting_deploy-js-application`, `hosting_deploy-static-website`, `hosting_list-js-deployments`, `hosting_show-js-deployment-logs`, `hosting_files_generate-upload-url`, `hosting_git_auto-deployment-settings`, `hosting_git_update-auto-deployment-settings`, `hosting_git_list-installations`, `hosting_git_list-installation-repositories`, `hosting_nodejs_list-builds`, `hosting_nodejs_start-build`, `hosting_nodejs_build-settings`, `hosting_nodejs_update-build-settings`, `hosting_nodejs_build-settings-from-archive`, `hosting_nodejs_analyse-failed-build`, `hosting_nodejs_build`, `hosting_nodejs_build-logs`, `hosting_websites_deploy-static-site-archive`, `wordpress_installations_import-website`, `wordpress_plugins_deploy`, `wordpress_themes_deploy`
14
+
15
+ ### Also in this release
16
+
17
+ - Documentation: `README.md`
18
+ - Dependencies: `package-lock.json`, `package.json`
19
+ - Bundled agent skills: 6 files
20
+ - Request handling and authentication: 4 files
21
+ - Server instructions: 4 files
22
+ - Other files: `src/core/skills.js`, `src/core/skills.ts`
23
+ - Server entry points: `src/servers/agency-hosting.js`, `src/servers/agency-hosting.ts`
24
+ - Build and packaging: `types.d.ts`
25
+
26
+ ## v3.1.0 — 2026-10-16
27
+
28
+ ### Operations
29
+
30
+ - Changed the description and input schema of `ecommerce_products_update`
31
+ - Changed the input schema of `ecommerce_products_create-physical`
32
+ - Changed the description and input schema of `ecommerce_product-variants_update-in-batch`
33
+
34
+ ### Also in this release
35
+
36
+ - Documentation: `README.md`
37
+ - Request handling and authentication: `src/core/runtime.js`, `src/core/runtime.ts`
38
+ - Build and packaging: `types.d.ts`
39
+
7
40
  ## v3.0.0 — 2026-10-15
8
41
 
9
42
  ### 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 (421 total)
72
+ - `hostinger-api-mcp` — unified server over every operation (399 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
@@ -77,7 +77,7 @@ This package installs the following MCP server commands:
77
77
  - `hostinger-domains-mcp` — 42 operations for domains
78
78
  - `hostinger-ecommerce-mcp` — 29 operations for ecommerce
79
79
  - `hostinger-horizons-mcp` — 6 operations for horizons
80
- - `hostinger-hosting-mcp` — 81 operations for hosting
80
+ - `hostinger-hosting-mcp` — 62 operations for hosting
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
@@ -229,7 +229,9 @@ Every server exposes three tools:
229
229
 
230
230
  ## Operations
231
231
 
232
- The operations reachable through `execute`, by binary:
232
+ The operations `search` offers, by binary:
233
+
234
+ Operations that newer tools replace are hidden from `search`, and not documented, in every binary that also offers the replacing tool. They keep working through `execute` until they are removed.
233
235
 
234
236
  ### `hostinger-agency-hosting-mcp`
235
237
 
@@ -1554,9 +1556,11 @@ subscribers is archived instead of deleted so its data stays available.
1554
1556
 
1555
1557
  #### ecommerce_products_update
1556
1558
 
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.
1559
+ Update a product's name, description, status, SEO settings or collections. Set status to
1560
+ published to make it buyable, draft to hide it, or archived to retire it. SEO settings (title,
1561
+ description, slug) left out keep their values. collection_changes adds or removes collections
1562
+ without touching the others. Variants, prices and inventory are managed through the variant
1563
+ endpoints, not here. Returns the updated product summary.
1560
1564
 
1561
1565
  - **Method**: `PATCH`
1562
1566
  - **Path**: `/api/ecommerce/v1/stores/{store_id}/products/{product_id}`
@@ -1662,8 +1666,8 @@ plus its default currency. Useful to verify prerequisites before building a stor
1662
1666
 
1663
1667
  #### ecommerce_product-variants_update-in-batch
1664
1668
 
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
1669
+ Update up to 100 existing variants in place by id — title, SKU, inventory, stock tracking
1670
+ and prices. Variants omitted from the request are left untouched. Prices replace the variant's
1667
1671
  existing prices in full. Returns the updated variants.
1668
1672
 
1669
1673
  - **Method**: `PATCH`
@@ -1810,51 +1814,16 @@ interface in the provided website URL.
1810
1814
 
1811
1815
  ### `hostinger-hosting-mcp`
1812
1816
 
1813
- #### hosting_import-wordpress-website
1814
-
1815
- Import a WordPress website from an archive file to a hosting server. This tool uploads a website archive (zip, tar, tar.gz, etc.) and a database dump (.sql file) to deploy a complete WordPress website. The archive will be extracted on the server automatically. Note: This process may take a while for larger sites. After upload completion, files are being extracted and the site will be available in a few minutes. Upload credentials are generated and used internally — do not call a separate upload-url endpoint or upload the files yourself, this tool does it end-to-end. The username will be automatically resolved from the domain.
1816
-
1817
- - **Method**: `custom`
1818
- - **Path**: `custom`
1819
-
1820
- #### hosting_deploy-wordpress-plugin
1821
-
1822
- Deploy a WordPress plugin from a directory to a hosting server. This tool uploads all plugin files and triggers plugin deployment. Upload credentials are generated and used internally — do not call a separate upload-url endpoint or upload the files yourself, this tool does it end-to-end.
1823
-
1824
- - **Method**: `custom`
1825
- - **Path**: `custom`
1826
-
1827
- #### hosting_deploy-wordpress-theme
1817
+ #### hosting_deploy
1828
1818
 
1829
- Deploy a WordPress theme from a directory to a hosting server. This tool uploads all theme files and triggers theme deployment. The uploaded theme can optionally be activated after deployment. Upload credentials are generated and used internally — do not call a separate upload-url endpoint or upload the files yourself, this tool does it end-to-end.
1819
+ Deploy, publish or upload a website to Hostinger web hosting (Shared, Cloud): static HTML, PHP, a nodejs (Node.js) app, a whole WordPress site, or a WordPress plugin or theme, from a local directory, an archive or a GitHub or GitLab repository. It detects what the project is and does the upload, build and Git setup itself: do not call upload or build operations, and do not archive the directory yourself. WARNING: it overwrites the website's contents and cannot be undone; confirm the domain with the user before deploying to a site that already has content. A Node.js build runs on the server: this returns a buildUuid at once, then call hosting_get-deployment until the build state is completed or failed. Static, PHP, plugin and theme deploys are done when this returns; a WordPress site import only starts, and its files are extracted a few minutes later. From Git, pass type (static or nodejs) unless the site already runs a Node.js app or you pass Node.js settings; a static or PHP site deploys the branch now and again on every push; a Node.js site builds the branch now and on every later push, with the settings stored for the site (when none are stored, pass appType and nodeVersion from the project's engines, plus outputDirectory and buildScript if the app has a build step). Git needs GitHub or GitLab connected once in hPanel.
1830
1820
 
1831
1821
  - **Method**: `custom`
1832
1822
  - **Path**: `custom`
1833
1823
 
1834
- #### hosting_deploy-js-application
1824
+ #### hosting_get-deployment
1835
1825
 
1836
- Deploy a JavaScript application from an archive file to a hosting server. IMPORTANT: the archive must ONLY contain application source files, not the build output, skip node_modules directory; also exclude all files matched by .gitignore if the ignore file exists. The build process will be triggered automatically on the server after the archive is uploaded. Upload credentials are generated and used internally — do not call a separate upload-url endpoint or upload the archive yourself, this tool does it end-to-end. After deployment, use the hosting_list-js-deployments tool to check deployment status and track build progress.
1837
-
1838
- - **Method**: `custom`
1839
- - **Path**: `custom`
1840
-
1841
- #### hosting_deploy-static-website
1842
-
1843
- Deploy a static website from an archive file to a hosting server. IMPORTANT: This tool only works for static websites with no build process. The archive must contain pre-built static files (HTML, CSS, JavaScript, images, etc.) ready to be served. If the website has a package.json file or requires a build command, use hosting_deploy-js-application instead. The tool uploads the archive to the website's file browser over TUS and triggers deployment; the archive is extracted and deployed directly without any build steps. Upload credentials are generated and used internally — do not call a separate upload-url endpoint or upload the archive yourself, this tool does it end-to-end. The username will be automatically resolved from the domain.
1844
-
1845
- - **Method**: `custom`
1846
- - **Path**: `custom`
1847
-
1848
- #### hosting_list-js-deployments
1849
-
1850
- List javascript application deployments for checking their status. Use this tool when customer asks for the status of the deployment. This tool retrieves a paginated list of Node.js application deployments for a domain with optional filtering by deployment states.
1851
-
1852
- - **Method**: `custom`
1853
- - **Path**: `custom`
1854
-
1855
- #### hosting_show-js-deployment-logs
1856
-
1857
- Retrieve logs for a specified JavaScript application deployment for debugging purposes in case of failure.
1826
+ Check deployment status, build status, build logs and why a build failed (failure analysis) for a website's nodejs (Node.js) deployment: the state of its latest build (or of buildUuid), the end of the build log, the failure analysis when the build failed, and the build settings and Git auto-deployment settings stored for the site. Use it after hosting_deploy starts a Node.js build, and to find out why a deployment failed. Poll until the build state is completed or failed, with growing pauses. The log comes back in full; pass fromLine (the lines count from the previous call) to read only new output. A website without Node.js builds returns build: null with an explanation, because static, PHP, plugin and theme deploys are complete when hosting_deploy returns, and a WordPress site import is ready a few minutes after it starts.
1858
1827
 
1859
1828
  - **Method**: `custom`
1860
1829
  - **Path**: `custom`
@@ -2133,53 +2102,6 @@ Skip this verification when using Hostinger's free subdomains (*.hostingersite.c
2133
2102
  - **Method**: `POST`
2134
2103
  - **Path**: `/api/hosting/v1/domains/verify-ownership`
2135
2104
 
2136
- #### hosting_files_generate-upload-url
2137
-
2138
- Generate a file browser upload URL with authentication credentials
2139
- for uploading files directly to a website's file storage.
2140
-
2141
- While the website is still being set up (`status: running` on the list website setups
2142
- endpoint) this endpoint returns 409 with a `Retry-After` header: wait that many
2143
- seconds and retry, or poll the website setups until the status is `completed`.
2144
-
2145
- Returns `url`, `auth_key` and `rest_auth_key`. Use these to upload a file to the
2146
- website's `public_html` directory via the TUS resumable upload protocol (TUS 1.0.0).
2147
- Send `X-Auth: {auth_key}` and `X-Auth-Rest: {rest_auth_key}` headers on every request
2148
- below.
2149
-
2150
- 1. Create the upload: `POST` to `{url}/{relative_file_path}?override=true` with headers
2151
- `upload-length: {file size in bytes}` and `upload-offset: 0`. Expect `201 Created`.
2152
- 2. Upload the file: send the file bytes to the same location (any TUS 1.0.0 client, or
2153
- `PATCH` requests with an `upload-offset` header tracking progress) until complete.
2154
-
2155
- `relative_file_path` is the destination path inside `public_html`, e.g. `app.zip`.
2156
-
2157
- Instead of a TUS client, plain `curl` also works:
2158
- ```
2159
- FILE=app.zip
2160
- SIZE=$(stat -f%z "$FILE") # stat -c%s on Linux
2161
-
2162
- curl -i -X POST "{url}/${FILE}?override=true" \
2163
- -H "X-Auth: {auth_key}" \
2164
- -H "X-Auth-Rest: {rest_auth_key}" \
2165
- -H "Tus-Resumable: 1.0.0" \
2166
- -H "Upload-Length: ${SIZE}" \
2167
- -H "Upload-Offset: 0"
2168
- # -> 201 Created
2169
-
2170
- curl -i -X PATCH "{url}/${FILE}?override=true" \
2171
- -H "X-Auth: {auth_key}" \
2172
- -H "X-Auth-Rest: {rest_auth_key}" \
2173
- -H "Tus-Resumable: 1.0.0" \
2174
- -H "Content-Type: application/offset+octet-stream" \
2175
- -H "Upload-Offset: 0" \
2176
- --data-binary "@${FILE}"
2177
- # -> 204 No Content, Upload-Offset response header equals SIZE when done
2178
- ```
2179
-
2180
- - **Method**: `POST`
2181
- - **Path**: `/api/hosting/v1/files/upload-urls`
2182
-
2183
2105
  #### hosting_files_list-website-and-directories
2184
2106
 
2185
2107
  List files and directories under a website's document root.
@@ -2200,35 +2122,6 @@ containing secrets (e.g. credential files) — none of these are returned by thi
2200
2122
  - **Method**: `GET`
2201
2123
  - **Path**: `/api/hosting/v1/accounts/{username}/domains/{domain}/files/content`
2202
2124
 
2203
- #### hosting_git_auto-deployment-settings
2204
-
2205
- Returns the Git auto-deployment settings of the website: which repository and branch deploy
2206
- into which directory, and whether pushes trigger a deployment. `is_enabled` false keeps the
2207
- repository link but ignores pushes.
2208
-
2209
- When the website has no auto-deployment configured every field is null. Save settings with
2210
- `Update Git auto-deployment settings`.
2211
-
2212
- - **Method**: `GET`
2213
- - **Path**: `/api/hosting/v1/accounts/{username}/websites/{domain}/git/auto-deployments/settings`
2214
-
2215
- #### hosting_git_update-auto-deployment-settings
2216
-
2217
- Creates or replaces the Git auto-deployment settings of the website: repository, branch, the
2218
- directory under the document root to deploy into, and `is_enabled`. Send the full set;
2219
- `is_enabled` defaults to true and `directory` to the document root. `installation_uuid` must
2220
- be an installation from `List Git installations` that belongs to the same customer as the
2221
- website.
2222
-
2223
- For PHP and static websites, saving with `is_enabled` true deploys the branch right away and
2224
- every later push to that branch deploys again. For Node.js and Website Builder websites saving
2225
- does not clone anything. On a Node.js website start the first deploy with
2226
- `Start Node.js build` using `source_type` `git`; pushes then trigger new builds with the build
2227
- settings stored for the website.
2228
-
2229
- - **Method**: `PUT`
2230
- - **Path**: `/api/hosting/v1/accounts/{username}/websites/{domain}/git/auto-deployments/settings`
2231
-
2232
2125
  #### hosting_git_delete-auto-deployment-settings
2233
2126
 
2234
2127
  Removes the Git auto-deployment settings of the website. Files already deployed stay on the
@@ -2238,39 +2131,6 @@ configured.
2238
2131
  - **Method**: `DELETE`
2239
2132
  - **Path**: `/api/hosting/v1/accounts/{username}/websites/{domain}/git/auto-deployments/settings`
2240
2133
 
2241
- #### hosting_git_list-installations
2242
-
2243
- Lists the Git provider accounts the customer has connected. Only installations with status
2244
- `active` are returned unless the `status` filter says otherwise.
2245
-
2246
- An empty list means the customer has no active installation. Check `status=suspended` and
2247
- `status=pending` as well. If there is none at all, a Git provider (GitHub or GitLab) has to be
2248
- connected once in hPanel (Websites, Manage, Advanced, Git; or Add Website, Node.js Web App,
2249
- Import Git Repository); this endpoint then lists the new installation.
2250
-
2251
- Use `uuid` as the path parameter of `List Git installation repositories`, and as
2252
- `installation_uuid` in `Start Node.js build` with `source_type` `git` and in
2253
- `Update Git auto-deployment settings`.
2254
-
2255
- - **Method**: `GET`
2256
- - **Path**: `/api/hosting/v1/git/installations`
2257
-
2258
- #### hosting_git_list-installation-repositories
2259
-
2260
- Lists the repositories the Git installation can access, read live from the provider. Works
2261
- for github and gitlab installations. Use an active installation: a suspended or pending one
2262
- is still queried and the call fails with whatever the provider answers. The list is cut at
2263
- the first 500 repositories in the order the provider returns them; when the account has
2264
- more, name the repository directly instead of searching this list.
2265
-
2266
- `owner`, `name` and a branch (`default_branch` or another one) go into `source_options` of
2267
- `Start Node.js build` or into `Update Git auto-deployment settings`. Returns 404 when the
2268
- installation does not belong to the customer. Limited to 10 calls per minute per API client
2269
- (429 above that).
2270
-
2271
- - **Method**: `GET`
2272
- - **Path**: `/api/hosting/v1/git/installations/{uuid}/repositories`
2273
-
2274
2134
  #### hosting_git_deploy-website-repository
2275
2135
 
2276
2136
  Clones a Git repository into a directory of the website, or pulls it again. An empty or missing
@@ -2332,84 +2192,6 @@ to it.
2332
2192
  - **Method**: `POST`
2333
2193
  - **Path**: `/api/hosting/v1/headless/agent-reports`
2334
2194
 
2335
- #### hosting_nodejs_list-builds
2336
-
2337
- Retrieve a paginated list of Node.js build processes for a specific website.
2338
-
2339
- Each build represents a single run of the Node.js build pipeline. Use the `states`
2340
- query parameter to filter results by build state (pending, running, completed, failed).
2341
- Use the `uuid` from a build to poll its output via the `Get Node.js Build Logs` endpoint.
2342
-
2343
- - **Method**: `GET`
2344
- - **Path**: `/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds`
2345
-
2346
- #### hosting_nodejs_start-build
2347
-
2348
- Start a Node.js build process using files already present on the website's file storage.
2349
-
2350
- WARNING: on success this overwrites the website's existing contents and cannot be
2351
- undone — verify this is intended before calling this endpoint.
2352
-
2353
- With `source_type` `archive`, `source_options.archive_path` must point to an existing
2354
- archive file on the server (relative to the website document root). Use the
2355
- `Generate Upload URL` endpoint to obtain credentials and upload the archive first. To
2356
- auto-detect build settings from an archive before starting, first call the
2357
- `Get Node.js Build Settings from Archive` endpoint.
2358
-
2359
- With `source_type` `git`, `source_options` carries `owner`, `repository`, `branch` and
2360
- `installation_uuid`. Take the installation from `List Git installations` and the owner and
2361
- repository from `List Git installation repositories`; the branch is cloned at its current
2362
- head. The installation must belong to the same customer as the website.
2363
-
2364
- The returned build `uuid` can be used to poll progress and retrieve logs via
2365
- the `Get Node.js Build Logs` endpoint.
2366
-
2367
- - **Method**: `POST`
2368
- - **Path**: `/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds`
2369
-
2370
- #### hosting_nodejs_build-settings
2371
-
2372
- Returns the build settings stored for the website: framework (`app_type`), Node.js version,
2373
- root and output directory, build script, entry file and package manager. Stored settings
2374
- drive Git auto-deployment builds. A build started through the API uses the values sent in
2375
- that request and saves them here only when no settings exist yet.
2376
-
2377
- Returns 404 until the first build or the first settings update stores them. Use this after
2378
- a failed build to check whether the framework or the entry file were detected wrong, then
2379
- fix them with the `Update Node.js build settings` endpoint.
2380
-
2381
- - **Method**: `GET`
2382
- - **Path**: `/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds/settings`
2383
-
2384
- #### hosting_nodejs_update-build-settings
2385
-
2386
- Replaces the build settings stored for the website. Send the full set: `node_version` is
2387
- required and every nullable field you omit is stored as null. Creates the settings when
2388
- none exist yet.
2389
-
2390
- This does not start a build. Stored settings drive Git auto-deployment builds; a build
2391
- started through the API uses the values sent in that request, so to rebuild with corrected
2392
- settings call `Start Node.js build` with the same values. Typical fixes: a wrong `app_type`
2393
- after auto-detection, or a missing `entry_file` for express, fastify, nest, nuxt and hono
2394
- apps.
2395
-
2396
- - **Method**: `PUT`
2397
- - **Path**: `/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds/settings`
2398
-
2399
- #### hosting_nodejs_build-settings-from-archive
2400
-
2401
- Auto-detect Node.js build settings from a package.json inside an archive already on the server.
2402
-
2403
- Use this before calling `Start Node.js Build` to preview what settings will be used,
2404
- or to let the user review and override values (framework, node version, root directory,
2405
- output directory, build script) before committing to a build.
2406
-
2407
- The archive must already be present on the website's file storage. Use the
2408
- `Generate Upload URL` endpoint to obtain credentials and upload the archive first.
2409
-
2410
- - **Method**: `GET`
2411
- - **Path**: `/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds/settings/from-archive`
2412
-
2413
2195
  #### hosting_nodejs_list-environment-variables
2414
2196
 
2415
2197
  Lists the Node.js environment variables currently set for the website. Values are always
@@ -2444,41 +2226,6 @@ values taken from the project `.env` file or the user prompt.
2444
2226
  - **Method**: `PUT`
2445
2227
  - **Path**: `/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds/settings/env`
2446
2228
 
2447
- #### hosting_nodejs_analyse-failed-build
2448
-
2449
- Returns an AI analysis of why a build failed and how to fix it, based on the build logs,
2450
- the project file list and package.json. Only builds in the `failed` state can be analysed;
2451
- any other state returns 422. When no analysis could be produced both `analysis` and
2452
- `solution` are null, in which case read `Get NodeJS build logs` instead.
2453
-
2454
- Each call runs the analysis again, so call it once per failed build and keep the result.
2455
- Limited to 5 calls per minute per API client (429 above that).
2456
-
2457
- - **Method**: `GET`
2458
- - **Path**: `/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds/{uuid}/analysis`
2459
-
2460
- #### hosting_nodejs_build
2461
-
2462
- Returns one build by UUID: its state (`pending`, `running`, `completed`, `failed`), the
2463
- options it ran with and timestamps. Poll this while a build is pending or running. When it
2464
- is failed, read `Get NodeJS build logs` and `Analyse failed Node.js build` for the cause.
2465
- Returns 404 when the UUID does not belong to a build of this website.
2466
-
2467
- - **Method**: `GET`
2468
- - **Path**: `/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds/{uuid}`
2469
-
2470
- #### hosting_nodejs_build-logs
2471
-
2472
- Retrieve logs from a specific Node.js build process.
2473
-
2474
- To stream live output while a build is running, poll this endpoint repeatedly
2475
- while the build state is `running`, passing the previously returned `lines` count
2476
- as `from_line` to fetch only new output since the last call.
2477
- Log content may contain ANSI escape sequences (color codes).
2478
-
2479
- - **Method**: `GET`
2480
- - **Path**: `/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds/{uuid}/logs`
2481
-
2482
2229
  #### hosting_nodejs_runtime-logs
2483
2230
 
2484
2231
  Returns the Node.js application's runtime console log entries, oldest first, each with
@@ -2817,24 +2564,6 @@ completed` before uploading files, deploying or creating databases. While the se
2817
2564
  - **Method**: `POST`
2818
2565
  - **Path**: `/api/hosting/v1/websites`
2819
2566
 
2820
- #### hosting_websites_deploy-static-site-archive
2821
-
2822
- Deploy a static application from an archive file.
2823
-
2824
- WARNING: this overwrites the website's existing contents and cannot be undone —
2825
- verify this is intended before calling this endpoint.
2826
-
2827
- This endpoint allows you to deploy a static application from an archive
2828
- file that has been uploaded to the website's directory.
2829
-
2830
- This only works for static sites (pre-built HTML/CSS/JS with no build step). For
2831
- Node.js applications, use `Create NodeJS build from archive` instead, or
2832
- `Start Node.js build` if the archive is already uploaded. For WordPress sites,
2833
- use `Import WordPress website`.
2834
-
2835
- - **Method**: `POST`
2836
- - **Path**: `/api/hosting/v1/accounts/{username}/websites/{domain}/deploy`
2837
-
2838
2567
  #### hosting_websites_delete
2839
2568
 
2840
2569
  This endpoint permanently removes a website and all of its data. This action
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hostinger-api-mcp",
3
- "version": "3.0.0",
3
+ "version": "3.2.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": "3.0.0",
3
+ "version": "3.2.0",
4
4
  "mcpName": "io.github.hostinger/hostinger-api-mcp",
5
5
  "description": "MCP server for Hostinger API",
6
6
  "repository": {
@@ -44,6 +44,7 @@
44
44
  "cors": "^2.8.5",
45
45
  "dotenv": "^18.0.1",
46
46
  "express": "^5.2.1",
47
+ "fflate": "^0.8.3",
47
48
  "minimist": "^1.2.8",
48
49
  "tus-js-client": "^4.1.0",
49
50
  "zod": "^4.1.0"
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": "3.0.0",
9
+ "version": "3.2.0",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "npm",
13
13
  "identifier": "@hostinger/mcp",
14
- "version": "3.0.0",
14
+ "version": "3.2.0",
15
15
  "transport": {
16
16
  "type": "stdio"
17
17
  },
@@ -30,7 +30,7 @@ Tell the user the size (plans, websites, WordPress installs) before the checks.
30
30
  Per Shared and Cloud website (skip `builder` and `horizons`):
31
31
 
32
32
  - `hosting_ssl_status` — flag `failed` (with `last_error`), `expired`, `not_installed` on a custom domain, `is_https_redirect_enabled: false`, and `expires_at` within 30 days when `is_lifetime` is false. Lifetime certificates renew on their own.
33
- - Node.js sites: `hosting_nodejs_list-builds` with `per_page: 1` (latest build failed?) and `hosting_nodejs_list-vulnerabilities` with `severities: ["critical", "high"]`.
33
+ - Node.js sites: `hosting_get-deployment` (latest build failed? `build.state`; on the hosted server use `hosting_nodejs_list-builds` with `per_page: 1`) and `hosting_nodejs_list-vulnerabilities` with `severities: ["critical", "high"]`.
34
34
 
35
35
  Per hosting account (`username`): `hosting_databases_list` — flag `disk_usage_mb` above 80% of `max_size_mb`.
36
36
 
@@ -24,27 +24,30 @@ Ship a project that already exists — on disk or in a Git repository — to a H
24
24
 
25
25
  ## 2. Choose the deploy
26
26
 
27
- Wrong method is the most common failure. Decide from the project on disk:
27
+ **Shared and Cloud, on the local `hostinger-api-mcp` server:** one operation does every deploy — `hosting_deploy` with `domain` and either `path` (a directory on this machine) or `git: { repository: "owner/name", branch }`. Given a directory it detects what the project is, packs it itself (it skips `node_modules`, `.git` and `.env` files, listing the `.env` ones as `skippedFiles` so you can set their values with `hosting_nodejs_replace-environment-variables`; it does not read `.gitignore`, so keep build output out of the directory) and does the upload, build and Git setup. Do not archive the directory or call upload and build operations by hand.
28
28
 
29
- | Project | Shared / Cloud |
29
+ | Project | `hosting_deploy` treats it as |
30
30
  | --- | --- |
31
- | Plain HTML/CSS/JS, or a framework's static build output | `hosting_deploy-static-website` |
32
- | `package.json` with a build or a server (Next.js, Nuxt, Express, Vite…) | `hosting_deploy-js-application` |
33
- | PHP code, no build step | `hosting_deploy-static-website` (extracts the archive as-is) |
34
- | WordPress plugin or theme folder | `hosting_deploy-wordpress-plugin` / `hosting_deploy-wordpress-theme` (`activate` optional) |
35
- | A whole WordPress site from elsewhere | the `migrate-to-hosting` skill |
31
+ | Plain HTML/CSS/JS, or a framework's static build output | `static` — extracts as-is |
32
+ | `package.json` with a build script, a start script or a server dependency (Next.js, Nuxt, Express, Vite…) | `nodejs` — starts a build, returns `buildUuid` |
33
+ | PHP code, no build step | `static` |
34
+ | WordPress plugin folder (a `Plugin Name:` header) or theme folder (`Theme Name:` in `style.css`) | `wordpress-plugin` / `wordpress-theme`; `activate: true` activates a theme |
35
+ | A whole WordPress site from elsewhere | `wordpress-site`, with `databaseDump` — see the `migrate-to-hosting` skill |
36
36
 
37
- On Agency the website's type decides (`agency-hosting_websites_get`): sites created as `node-static` take `agency-hosting_deploy-node-static-website`, which runs the build when the project has one; every other site takes `agency-hosting_deploy-php-application`, which extracts the archive as-is. WordPress plugins and themes on Agency sites are installed from wp-admin.
37
+ - Pass `type` to override detection. It is required for an archive (an archive cannot be inspected) and when a directory matches more than one WordPress type, which `hosting_deploy` rejects as ambiguous.
38
+ - Node.js build settings come from the project; detection covers the framework and the build script. Set `appType`, `outputDirectory`, `buildScript`, `entryFile`, `nodeVersion` (default 22), `rootDirectory` or `packageManager` when it is wrong. A TypeScript or other compiled server app always needs `entryFile` set to the built file (for example `dist/server.js`): detection only guesses a root-level file, and the build fails with "Entry file not found". The entry file is relative to the root directory for express, fastify, hono, react-router and other, and to the output directory for nest, nuxt, nitro, astro and svelte-kit (`main.js`, not `dist/main.js`); Next.js ignores it. Per-framework values are in the Hostinger docs under Node.js (Supported Frameworks, Build Settings).
39
+ - Static, PHP, plugin and theme deploys are live when the call returns. A WordPress site import only starts (`status: import_started`) and finishes extracting a few minutes later; do not report it complete or verify it before then. Node.js builds run on the server: see step 3.
38
40
 
39
- Archive rules (name archives `name_YYYYMMDD_HHMMSS.zip`):
41
+ **Agency:** the website's type decides (`agency-hosting_websites_get`): sites created as `node-static` take `agency-hosting_deploy-node-static-website`, which runs the build when the project has one; every other site takes `agency-hosting_deploy-php-application`, which extracts the archive as-is. They deploy archives, synchronously: the site is live when the call returns. WordPress plugins and themes on Agency sites are installed from wp-admin.
42
+
43
+ Archive rules for Agency (name archives `name_YYYYMMDD_HHMMSS.zip`) and for archives you build yourself:
40
44
 
41
45
  - **Static:** build locally first. `index.html` must be at the archive root, not inside a folder: `cd dist && zip -r ../site_20260101_120000.zip .`
42
46
  - **Node.js source:** no `node_modules/`, no build output (`dist/`, `.next/`, `build/`), no `.env*`, nothing matched by `.gitignore`; 50 MB at most. `git archive --format=zip -o app_20260101_120000.zip HEAD` produces exactly the committed files — mention that uncommitted changes are left out.
43
- - Agency deploys are synchronous: the site is live when the call returns.
44
47
 
45
- The operations in the table read the archive from this machine, so only the local `hostinger-api-mcp` server has them. On the hosted server (`mcp.hostinger.com`) `search` does not find them — upload the files yourself as below.
48
+ `hosting_deploy` and the `agency-hosting_deploy-*` operations read files from this machine, so only the local server has them. On the hosted server (`mcp.hostinger.com`) `search` does not find them — upload the files yourself as below.
46
49
 
47
- ### Without the local deploy operations
50
+ ### Without the local deploy operations (hosted server; on the local server only for Agency)
48
51
 
49
52
  1. Get upload credentials: `hosting_files_generate-upload-url` (`username`, `domain`); Agency: `agency-hosting_files_generate-upload-url` (`website_uid`). Both return `url`, `auth_key` and `rest_auth_key`, which authenticate the upload instead of the API token.
50
53
  2. Upload each file with TUS, where `DEST` is its path in the website's storage:
@@ -69,15 +72,29 @@ curl -sS -X PATCH "$URL/$DEST?override=true" -H "X-Auth: $AUTH_KEY" -H "X-Auth-R
69
72
 
70
73
  ## 3. Node.js builds
71
74
 
72
- `hosting_deploy-js-application` uploads the archive to the document root, detects settings from `package.json` and starts a build. Track it with `hosting_nodejs_list-builds` and `hosting_nodejs_build` (by `uuid`), polling every 10–20 s — builds take minutes.
75
+ `hosting_deploy` returns a `buildUuid` at once; the build runs on the server and takes minutes. Track it with `hosting_get-deployment` (`domain`, optionally `buildUuid`; the latest build by default), polling every 10–20 s until `build.state` is `completed` or `failed`. It returns the build, its log and the stored build settings; pass the previous `logs.lines` as `fromLine` to read only new output.
76
+
77
+ - Failed build: the response already carries `analysis` (fetched once per build; the API allows 5 a minute).
78
+ - Wrong detection (framework, `output_directory`, or an entry file inside the build output, such as `dist/server.js` for a compiled app): deploy again with `appType`, `outputDirectory`, `buildScript` or `entryFile` set. An archive deploy sends its settings with the request and leaves the stored ones alone; a Git deploy also stores these values, so later pushes build with them.
79
+
80
+ On the hosted server, which has no `hosting_deploy` or `hosting_get-deployment`:
73
81
 
82
+ - After the upload steps below, start the build and track it with `hosting_nodejs_list-builds` and `hosting_nodejs_build` (by `uuid`), polling every 10–20 s.
74
83
  - Failed build: `hosting_nodejs_analyse-failed-build` once per build (5 calls a minute), then `hosting_nodejs_build-logs` if the analysis is empty.
75
- - Wrong detection (framework, `output_directory`, or a missing `entry_file` for express, fastify, nest, nuxt and hono): run `hosting_nodejs_start-build` with explicit values, `source_type: "archive"` and `source_options.archive_path` set to the archive's file name in the document root (check it is there with `hosting_files_list-website-and-directories`). Store the same values with `hosting_nodejs_update-build-settings`.
84
+ - Wrong detection: run `hosting_nodejs_start-build` with explicit values, `source_type: "archive"` and `source_options.archive_path` set to the archive's file name in the document root (check it is there with `hosting_files_list-website-and-directories`). Store the same values with `hosting_nodejs_update-build-settings`.
76
85
  - To review detected settings before any build: upload the archive with `hosting_files_generate-upload-url` (the TUS steps are in its description), then `hosting_nodejs_build-settings-from-archive`.
77
86
 
78
87
  ## 4. Auto-deploy from Git
79
88
 
80
- 1. `hosting_git_list-installations`. With no `active` installation (check `status: "pending"` and `"suspended"` too), the user connects GitHub or GitLab once in hPanel under Websites → Manage → Advanced → Git; there is no API for that step.
89
+ On the local server, `hosting_deploy` with `git: { repository: "owner/name", branch }` does all of it: it finds the Git installation that can reach the repository and deploys it as the `type` you give. Always pass `type: "static"` or `"nodejs"` unless the site already runs a Node.js app (or you pass Node.js settings such as `appType`): a new site is not detected as Node.js, and a Node.js repository deployed as static would publish its source. Then:
90
+ - **PHP and static sites:** saves the auto-deployment settings, which deploys the branch immediately and again on every push;
91
+ - **Node.js sites:** starts a build of the branch with the stored build settings; later pushes build the same way. A Git deploy has nothing to detect from, so when none are stored pass `appType` and `nodeVersion` (from `engines` in `package.json`), plus `outputDirectory` and `buildScript` if the app has a build step; they are stored for those pushes.
92
+
93
+ With no active installation it stops and says so: the user connects GitHub or GitLab once in hPanel under Websites → Manage → Advanced → Git; there is no API for that step. Confirm with `hosting_get-deployment`, which returns the stored `gitAutoDeployment`.
94
+
95
+ On the hosted server, by hand:
96
+
97
+ 1. `hosting_git_list-installations`. With no `active` installation (check `status: "pending"` and `"suspended"` too), the user connects GitHub or GitLab once in hPanel, as above.
81
98
  2. `hosting_git_list-installation-repositories` with the installation `uuid` gives `owner`, `name` and `default_branch` (10 calls a minute).
82
99
  3. `hosting_git_update-auto-deployment-settings` with `installation_uuid`, `owner`, `repository`, `branch` and optional `directory`.
83
100
  - PHP and static sites deploy the branch immediately and again on every push.
@@ -29,8 +29,8 @@ Do not put the remote `host` into the deployed app — it has no grant for conne
29
29
  | You called | Poll this until | Typical wait |
30
30
  | --- | --- | --- |
31
31
  | `hosting_websites_create` | `hosting_websites_list-setups` with the domain reports `status: completed` | up to a few minutes |
32
- | `hosting_deploy-js-application` | `hosting_list-js-deployments` shows the build finished | minutes |
33
- | `hosting_nodejs_start-build` | `hosting_nodejs_build` state is `completed` or `failed` | minutes |
32
+ | `hosting_deploy` of a Node.js app | `hosting_get-deployment` reports a `completed` or `failed` build | minutes |
33
+ | `hosting_nodejs_start-build` (hosted server, which has no `hosting_deploy`) | `hosting_nodejs_build` state is `completed` or `failed` | minutes |
34
34
  | `wordpress_installations_install`, plugin/theme/core jobs | `wordpress_installations_list` lists the install | 1–2 minutes |
35
35
  | `hosting_databases_repair`, `hosting_websites_delete` | nothing to poll — runs in the background | minutes |
36
36
  | `agency-hosting_website-setups_create` | `agency-hosting_website-setups_status` with `setup_uuid` is `completed` | minutes |
@@ -39,7 +39,7 @@ Poll with backoff (a few seconds, then tens of seconds). A queued response is no
39
39
 
40
40
  ## 5. When the app is up but broken
41
41
 
42
- - Build failed: `hosting_nodejs_build-logs` for the raw log, `hosting_nodejs_analyse-failed-build` for a diagnosis.
42
+ - Build failed: `hosting_get-deployment` returns the logs and a diagnosis together (hosted server: `hosting_nodejs_build-logs` for the raw log, `hosting_nodejs_analyse-failed-build` for a diagnosis).
43
43
  - Build passed, app errors: `hosting_nodejs_runtime-logs` with a `period` such as `1h`; entries before `last_deployed_at` belong to the previous deploy.
44
44
  - `Access denied for user 'x'@'::1'`: the app used `localhost` from Node.js — set `DB_HOST` to `127.0.0.1`.
45
45
  - PHP limits (memory, upload size): `hosting_php_get`, then `hosting_php_update-options`.