@hostinger/mcp 3.1.0 → 3.2.1

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 +47 -301
  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 +223 -30
  25. package/src/core/tools/all.ts +225 -30
  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.ts +2 -0
  30. package/src/core/tools/horizons.ts +2 -0
  31. package/src/core/tools/hosting.js +207 -25
  32. package/src/core/tools/hosting.ts +209 -25
  33. package/src/core/tools/mail.ts +2 -0
  34. package/src/core/tools/reach.ts +2 -0
  35. package/src/core/tools/vps.ts +2 -0
  36. package/src/core/tools/wordpress.js +10 -2
  37. package/src/core/tools/wordpress.ts +12 -2
  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 +131 -22
@@ -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: '3.1.0', tools });
6
+ startServer({ name: 'hostinger-horizons-mcp', version: '3.2.1', 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: '3.1.0', tools, instructions });
7
+ startServer({ name: 'hostinger-hosting-mcp', version: '3.2.1', 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: '3.1.0', tools, instructions });
7
+ startServer({ name: 'hostinger-hosting-mcp', version: '3.2.1', 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: '3.1.0', tools });
6
+ startServer({ name: 'hostinger-mail-mcp', version: '3.2.1', 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: '3.1.0', tools });
6
+ startServer({ name: 'hostinger-mail-mcp', version: '3.2.1', 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: '3.1.0', tools });
6
+ startServer({ name: 'hostinger-reach-mcp', version: '3.2.1', 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: '3.1.0', tools });
6
+ startServer({ name: 'hostinger-reach-mcp', version: '3.2.1', 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: '3.1.0', tools });
6
+ startServer({ name: 'hostinger-vps-mcp', version: '3.2.1', 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: '3.1.0', tools });
6
+ startServer({ name: 'hostinger-vps-mcp', version: '3.2.1', 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: '3.1.0', tools });
6
+ startServer({ name: 'hostinger-wordpress-mcp', version: '3.2.1', 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: '3.1.0', tools });
6
+ startServer({ name: 'hostinger-wordpress-mcp', version: '3.2.1', tools });
package/types.d.ts CHANGED
@@ -4,6 +4,92 @@
4
4
  */
5
5
 
6
6
  export interface APITools {
7
+ /**
8
+ * 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.
9
+ */
10
+ "hosting_deploy": {
11
+ params: {
12
+ /**
13
+ * Domain name of the website to deploy to (e.g., example.com)
14
+ */
15
+ domain: string;
16
+ /**
17
+ * Local directory (preferred; it is archived for you, skipping node_modules, .git and .env files, but not reading .gitignore, so keep build output out) or archive (zip, tar, tar.gz, tgz, 7z, gz, gzip). Not together with git.
18
+ */
19
+ path?: string;
20
+ /**
21
+ * Deploy a repository branch instead of local files. Not together with path.
22
+ */
23
+ git?: object;
24
+ /**
25
+ * What is deployed. Detected for a directory (a Plugin Name: or Theme Name: header, wp-config.php or wp-content, a package.json with a build or start script); required for an archive, when detection reports ambiguity, and for a Git deploy unless the site already runs a Node.js app or Node.js settings are passed. static also covers PHP.
26
+ */
27
+ type?: string;
28
+ /**
29
+ * WordPress plugin or theme slug: lower-case letters, digits, - and _ (default: the directory name)
30
+ */
31
+ slug?: string;
32
+ /**
33
+ * Activate the theme after deployment (WordPress themes only, default: false)
34
+ */
35
+ activate?: boolean;
36
+ /**
37
+ * Path to a .sql dump; required for a WordPress site import
38
+ */
39
+ databaseDump?: string;
40
+ /**
41
+ * Node.js major version (default: detected from an archive, or stored for the site, else 22; set it from the project's engines for a Git deploy)
42
+ */
43
+ nodeVersion?: number;
44
+ /**
45
+ * Node.js framework, e.g. next, nuxt, vite, express, react, vue, astro; overrides detection or stored settings
46
+ */
47
+ appType?: string;
48
+ /**
49
+ * Directory with the package.json, relative to the site root (default .)
50
+ */
51
+ rootDirectory?: string;
52
+ /**
53
+ * Build output directory relative to the root directory, e.g. dist
54
+ */
55
+ outputDirectory?: string;
56
+ /**
57
+ * The package.json script that builds the app, e.g. build
58
+ */
59
+ buildScript?: string;
60
+ /**
61
+ * Entry file of a server app. Relative to the root directory for express, fastify, hono, react-router and other; for a compiled (TypeScript) app give the built file, e.g. dist/server.js, because detection guesses a root-level file. Relative to the output directory for nest, nuxt, nitro, astro and svelte-kit (main.js, not dist/main.js). Ignored for next.
62
+ */
63
+ entryFile?: string;
64
+ /**
65
+ * Package manager used to install dependencies
66
+ */
67
+ packageManager?: string;
68
+ };
69
+ response: any; // Response structure will depend on the API
70
+ };
71
+
72
+ /**
73
+ * 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.
74
+ */
75
+ "hosting_get-deployment": {
76
+ params: {
77
+ /**
78
+ * Domain name of the website (e.g., example.com)
79
+ */
80
+ domain: string;
81
+ /**
82
+ * Build to inspect, as returned by hosting_deploy (default: the latest build)
83
+ */
84
+ buildUuid?: string;
85
+ /**
86
+ * Read the build log from this line on (default 0, the whole log). Pass the lines count returned by the previous call to get only new output.
87
+ */
88
+ fromLine?: number;
89
+ };
90
+ response: any; // Response structure will depend on the API
91
+ };
92
+
7
93
  /**
8
94
  * Deploy a node-static Agency Plan (h5g) website from an archive file. WARNING: this overwrites the website's existing contents and cannot be undone — always confirm with the user before proceeding. Use this for Agency Plan websites of type node-static (a Node.js-built static site that requires a build step or a plain simple static site). The tool resolves the website from its domain, uploads the archive to the website's file browser over TUS, and triggers the build-assets process which builds the site and deploys the result to public_html. This operation is synchronous: the build and deployment complete before the tool returns, so the website is live as soon as the tool finishes successfully — there is no separate asynchronous build to wait for or poll. 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. For plain PHP applications that should be extracted as-is, use agency-hosting_deploy-php-application instead. The website UID is automatically resolved from the domain.
9
95
  */
@@ -4871,8 +4957,9 @@ wait for `status: completed` before uploading files, deploying or creating datab
4871
4957
  `failed` means the setup stopped before finishing or has not reported progress for
4872
4958
  over an hour. Setups older than 24 hours are not listed.
4873
4959
 
4874
- `type` is the website type the setup was started with (`wordpress`, `headless_wordpress`,
4875
- `headless_ecommerce`, `headless_pocketbase`), or `null` for an empty website.
4960
+ `type` is the website type the setup was started with (`wordpress`, `headless_empty`,
4961
+ `headless_wordpress`, `headless_ecommerce`, `headless_pocketbase`), or `null` for an empty
4962
+ website.
4876
4963
  */
4877
4964
  "hosting_websites_list-setups": {
4878
4965
  params: {
@@ -4895,17 +4982,25 @@ over an hour. Setups older than 24 hours are not listed.
4895
4982
  /**
4896
4983
  * Starts a website setup on a Web or Cloud hosting order and returns the created setup
4897
4984
  right away; the website itself is provisioned asynchronously. Poll the list website
4898
- setups endpoint with the `domain` filter every 10 to 15 seconds and wait for
4899
- `status: completed` before uploading files, deploying or creating databases.
4985
+ setups endpoint (`hosting_websites_list-setups`) with the `domain` filter every 10 to 15
4986
+ seconds and wait for `status: completed` before uploading files, deploying or creating
4987
+ databases.
4900
4988
 
4901
4989
  Omit `type` for an empty website. `type: wordpress` installs WordPress in the website
4902
4990
  root with the admin user, email and password from `wordpress`, the domain as the site
4903
4991
  title, and `en_US` when `wordpress.language` is omitted. The headless types
4904
- (`headless_wordpress`, `headless_ecommerce`, `headless_pocketbase`) create a headless
4905
- website; `headless_wordpress` additionally installs WordPress into the `cms` directory
4906
- of the website root with generated credentials.
4907
-
4908
- Omit `domain` to set the website up on a generated temporary free subdomain.
4992
+ (`headless_empty`, `headless_wordpress`, `headless_ecommerce`, `headless_pocketbase`)
4993
+ create a headless website; `headless_wordpress` additionally installs WordPress into the
4994
+ `cms` directory of the website root with generated credentials. `headless_empty` installs
4995
+ nothing: WordPress can be added later through
4996
+ `POST /api/hosting/v1/accounts/{username}/wordpress/installations`
4997
+ (`wordpress_installations_install`) with `type: headless`.
4998
+
4999
+ Omit `domain` to set the website up on a generated temporary free subdomain. To know the
5000
+ free subdomain before the call, so a timed-out call can be looked up and retried on the
5001
+ same domain, generate one through `POST /api/hosting/v1/domains/free-subdomains`
5002
+ (`hosting_domains_generate-free-subdomain`) and send it as `domain`. It is accepted for
5003
+ 24 hours, only from the client that generated it.
4909
5004
 
4910
5005
  When the order has no hosting account yet, the setup creates one first, in the datacenter
4911
5006
  given by `datacenter_code` or the order's default datacenter when it is omitted.
@@ -4920,11 +5015,11 @@ running.
4920
5015
  */
4921
5016
  order_id: number;
4922
5017
  /**
4923
- * Website type. Omit or `null` for an empty website. `wordpress` installs WordPress in the website root and requires `wordpress`. The headless types (`headless_wordpress`, `headless_ecommerce`, `headless_pocketbase`) create a headless website; `headless_wordpress` additionally installs WordPress into the `cms` directory with generated credentials.
5018
+ * Website type. Omit or `null` for an empty website. `wordpress` installs WordPress in the website root and requires `wordpress`. The headless types (`headless_empty`, `headless_wordpress`, `headless_ecommerce`, `headless_pocketbase`) create a headless website; `headless_wordpress` additionally installs WordPress into the `cms` directory with generated credentials. `headless_empty` installs nothing, so WordPress can be added later through `POST /api/hosting/v1/accounts/{username}/wordpress/installations` (`wordpress_installations_install`) with `type: headless`.
4924
5019
  */
4925
5020
  type?: string;
4926
5021
  /**
4927
- * 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.
5022
+ * Customer-owned domain, or a free subdomain you generated through `POST /api/hosting/v1/domains/free-subdomains` (`hosting_domains_generate-free-subdomain`) in the last 24 hours. 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.
4928
5023
  */
4929
5024
  domain?: string;
4930
5025
  /**
@@ -9580,19 +9675,29 @@ database files that have been uploaded to the website's directory.
9580
9675
  * Install WordPress on an existing website.
9581
9676
 
9582
9677
  The website must already exist before calling this endpoint. To create a new
9583
- website first, use POST /api/hosting/v1/websites and poll
9584
- GET /api/hosting/v1/websites until it appears.
9585
-
9586
- Call GET /api/hosting/v1/wordpress/installations filtered by username and
9587
- domain before proceeding to check whether WordPress is already installed on
9588
- the target domain/path. If WordPress already exists and `overwrite` is false
9589
- (the default), the async job will fail.
9678
+ website first, use POST /api/hosting/v1/orders/{order_id}/onboardings
9679
+ (`hosting_websites_start-setup`) and poll GET /api/hosting/v1/onboardings
9680
+ (`hosting_websites_list-setups`) with the `domain` filter until its `status` is
9681
+ `completed`.
9682
+
9683
+ Send `type: headless` to turn a headless website (for example one created by
9684
+ `hosting_websites_start-setup` with `type: headless_empty`) into a headless WordPress
9685
+ website: WordPress is installed into the `cms` directory with the Hostinger headless
9686
+ MU plugin and the website is marked as a headless WordPress website. `directory` is
9687
+ not allowed with it. The target website must already be headless: the headless
9688
+ install rewrites the root `.htaccess`, so on any other website the request is
9689
+ rejected with 422.
9690
+
9691
+ Call GET /api/hosting/v1/wordpress/installations (`wordpress_installations_list`)
9692
+ filtered by username and domain before proceeding to check whether WordPress is
9693
+ already installed on the target domain/path. If WordPress already exists and
9694
+ `overwrite` is false (the default), the async job will fail.
9590
9695
 
9591
9696
  This operation is asynchronous: a successful response only means the install
9592
9697
  job has been queued, not that WordPress is ready. Installation typically
9593
- takes 1-2 minutes. Poll GET /api/hosting/v1/wordpress/installations filtered
9594
- by username and domain to track progress. When the installation appears in
9595
- that list, WordPress is ready.
9698
+ takes 1-2 minutes. Poll GET /api/hosting/v1/wordpress/installations
9699
+ (`wordpress_installations_list`) filtered by username and domain to track
9700
+ progress. When the installation appears in that list, WordPress is ready.
9596
9701
 
9597
9702
  Returns 422 when the account already uses all the databases its plan allows,
9598
9703
  unless `database.name` is an existing database on the account.
@@ -9616,7 +9721,11 @@ unless `database.name` is an existing database on the account.
9616
9721
  */
9617
9722
  language?: string;
9618
9723
  /**
9619
- * Relative directory to install WordPress into. Defaults to the website root when omitted.
9724
+ * Installation kind; `default` when omitted. `headless` installs WordPress into the `cms` directory with the Hostinger headless MU plugin and marks the website as a headless WordPress website. Accepted only for a website that is already headless, e.g. one created by `POST /api/hosting/v1/orders/{order_id}/onboardings` (`hosting_websites_start-setup`) with `type: headless_empty`; any other website is rejected with 422.
9725
+ */
9726
+ type?: string;
9727
+ /**
9728
+ * Installation subdirectory relative to the document root; omit for the root. Not allowed with `type: headless`, which always installs into `cms`.
9620
9729
  */
9621
9730
  directory?: string;
9622
9731
  /**