@hostinger/mcp 3.5.0 → 3.6.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,18 @@ 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.6.0 — 2026-10-21
8
+
9
+ ### Operations
10
+
11
+ - Changed the description and input schema of `hosting_deploy`
12
+
13
+ ### Also in this release
14
+
15
+ - Documentation: `README.md`
16
+ - Request handling and authentication: `src/core/runtime.js`, `src/core/runtime.ts`
17
+ - Build and packaging: `types.d.ts`
18
+
7
19
  ## v3.5.0 — 2026-10-21
8
20
 
9
21
  ### Also in this release
package/README.md CHANGED
@@ -1816,7 +1816,7 @@ interface in the provided website URL.
1816
1816
 
1817
1817
  #### hosting_deploy
1818
1818
 
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. For a plugin or theme on a headless WordPress (installed in the cms folder), pass headless: true. 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.
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. A plugin or theme goes into the site's WordPress installation, also when WordPress is in a folder of the document root (headless). 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.
1820
1820
 
1821
1821
  - **Method**: `custom`
1822
1822
  - **Path**: `custom`
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hostinger-api-mcp",
3
- "version": "3.5.0",
3
+ "version": "3.6.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.5.0",
3
+ "version": "3.6.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": "3.5.0",
9
+ "version": "3.6.0",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "npm",
13
13
  "identifier": "@hostinger/mcp",
14
- "version": "3.5.0",
14
+ "version": "3.6.0",
15
15
  "transport": {
16
16
  "type": "stdio"
17
17
  },
@@ -643,9 +643,6 @@ class MCPServer {
643
643
  if (resolved === 'wordpress-site' && !databaseDump) {
644
644
  throw new Error('databaseDump (path to a .sql file) is required to import a WordPress site');
645
645
  }
646
- if (params.headless === true && resolved !== 'wordpress-plugin' && resolved !== 'wordpress-theme') {
647
- throw new Error('headless is for wordpress-plugin and wordpress-theme deploys only, not ' + resolved);
648
- }
649
646
  return resolved;
650
647
  }
651
648
 
@@ -826,12 +823,6 @@ class MCPServer {
826
823
  if (params.slug !== undefined && !(typeof params.slug === 'string' && /^[a-z0-9_-]+$/.test(params.slug))) {
827
824
  throw new Error('slug must contain only lower-case letters, digits, "-" and "_"');
828
825
  }
829
- if (params.headless !== undefined && typeof params.headless !== 'boolean') {
830
- throw new Error('headless must be a boolean');
831
- }
832
- if (params.headless === true && git !== undefined) {
833
- throw new Error('headless is for wordpress-plugin and wordpress-theme deploys only, which need a local directory, not git');
834
- }
835
826
  if (git !== undefined && (typeof git !== 'object' || git === null || typeof git.repository !== 'string' || typeof git.branch !== 'string' || git.branch === '')) {
836
827
  throw new Error('git must be an object with repository (owner/name) and branch');
837
828
  }
@@ -855,13 +846,39 @@ class MCPServer {
855
846
  theme: '/api/hosting/v1/accounts/{username}/websites/{domain}/wordpress/themes/deploy',
856
847
  };
857
848
 
858
- // A headless WordPress is installed in this folder of the document root, not at the root itself.
859
- hosting_deploy_headlessDirectory = 'cms';
860
-
861
849
  async hosting_deploy_callWordpress(kind, params) {
862
850
  return this.executeApiCall({ name: 'wordpress_' + kind, method: 'POST', path: this.hosting_deploy_wordpressEndpoints[kind] }, params);
863
851
  }
864
852
 
853
+ // The folder of the document root WordPress is installed in ('' for the root, e.g. 'cms' on a headless
854
+ // site), from the installation directory wordpress_installations_list reports (public_html or '' for the root,
855
+ // public_html/<folder> or a bare <folder> otherwise). Absolute paths and .. segments are refused.
856
+ async hosting_deploy_wordpressDirectory(username, domain) {
857
+ const response = await this.executeApiCall({ name: 'wordpress_installations_list', method: 'GET', path: '/api/hosting/v1/wordpress/installations' }, { username, domain, ownership: 'all' });
858
+ const list = Array.isArray(response) ? response : (response && Array.isArray(response.data) ? response.data : []);
859
+ const installations = list.filter((installation) => typeof installation.domain === 'string' && installation.domain.toLowerCase() === domain.toLowerCase());
860
+ if (installations.length === 0) {
861
+ return '';
862
+ }
863
+ if (installations.length > 1) {
864
+ throw new Error('Several WordPress installations found for ' + domain + ' (' + installations.map((installation) => installation.directory).join(', ') + '); cannot tell which one to deploy to');
865
+ }
866
+ let directory = typeof installations[0].directory === 'string' ? installations[0].directory : '';
867
+ if (directory.startsWith('/') || directory.split('/').includes('..')) {
868
+ throw new Error('Unrecognized WordPress installation directory for ' + domain + ': ' + String(installations[0].directory));
869
+ }
870
+ while (directory.endsWith('/')) {
871
+ directory = directory.slice(0, -1);
872
+ }
873
+ if (directory === 'public_html') {
874
+ return '';
875
+ }
876
+ if (directory.startsWith('public_html/')) {
877
+ return directory.slice('public_html/'.length);
878
+ }
879
+ return directory;
880
+ }
881
+
865
882
  hosting_deploy_randomSuffix() {
866
883
  return Math.random().toString(36).slice(2, 10).padEnd(8, '0');
867
884
  }
@@ -927,7 +944,6 @@ class MCPServer {
927
944
 
928
945
  async hosting_deploy_wordpressExtension(username, domain, type, params) {
929
946
  const isPlugin = type === 'wordpress-plugin';
930
- const headless = params.headless === true;
931
947
  const directory = path.resolve(params.path);
932
948
  const slug = params.slug !== undefined ? params.slug : this.hosting_deploy_slug(directory);
933
949
  const { files, skipped } = this.hosting_deploy_listFiles(directory);
@@ -935,9 +951,10 @@ class MCPServer {
935
951
  throw new Error('No files found in directory: ' + directory);
936
952
  }
937
953
 
954
+ const wordpressDirectory = await this.hosting_deploy_wordpressDirectory(username, domain);
938
955
  // The files land in a fresh directory; the deploy call then installs from it.
939
956
  const uploadDirName = slug + '-' + this.hosting_deploy_randomSuffix();
940
- const remoteRoot = (headless ? this.hosting_deploy_headlessDirectory + '/' : '') + (isPlugin ? 'wp-content/plugins/' : 'wp-content/themes/') + uploadDirName;
957
+ const remoteRoot = (wordpressDirectory ? wordpressDirectory + '/' : '') + (isPlugin ? 'wp-content/plugins/' : 'wp-content/themes/') + uploadDirName;
941
958
  await this.hosting_deploy_upload(username, domain, files.map((relativePath) => ({
942
959
  absolutePath: path.join(directory, relativePath),
943
960
  relativePath: remoteRoot + '/' + relativePath,
@@ -957,7 +974,7 @@ class MCPServer {
957
974
  slug,
958
975
  files: files.length,
959
976
  ...(isPlugin ? {} : { activated: params.activate === true }),
960
- ...(headless ? { headless: true } : {}),
977
+ ...(wordpressDirectory ? { wordpressDirectory } : {}),
961
978
  }, skipped);
962
979
  }
963
980
 
@@ -680,9 +680,6 @@ class MCPServer {
680
680
  if (resolved === 'wordpress-site' && !databaseDump) {
681
681
  throw new Error('databaseDump (path to a .sql file) is required to import a WordPress site');
682
682
  }
683
- if (params.headless === true && resolved !== 'wordpress-plugin' && resolved !== 'wordpress-theme') {
684
- throw new Error('headless is for wordpress-plugin and wordpress-theme deploys only, not ' + resolved);
685
- }
686
683
  return resolved;
687
684
  }
688
685
 
@@ -863,12 +860,6 @@ class MCPServer {
863
860
  if (params.slug !== undefined && !(typeof params.slug === 'string' && /^[a-z0-9_-]+$/.test(params.slug))) {
864
861
  throw new Error('slug must contain only lower-case letters, digits, "-" and "_"');
865
862
  }
866
- if (params.headless !== undefined && typeof params.headless !== 'boolean') {
867
- throw new Error('headless must be a boolean');
868
- }
869
- if (params.headless === true && git !== undefined) {
870
- throw new Error('headless is for wordpress-plugin and wordpress-theme deploys only, which need a local directory, not git');
871
- }
872
863
  if (git !== undefined && (typeof git !== 'object' || git === null || typeof git.repository !== 'string' || typeof git.branch !== 'string' || git.branch === '')) {
873
864
  throw new Error('git must be an object with repository (owner/name) and branch');
874
865
  }
@@ -892,13 +883,39 @@ class MCPServer {
892
883
  theme: '/api/hosting/v1/accounts/{username}/websites/{domain}/wordpress/themes/deploy',
893
884
  };
894
885
 
895
- // A headless WordPress is installed in this folder of the document root, not at the root itself.
896
- private hosting_deploy_headlessDirectory = 'cms';
897
-
898
886
  private async hosting_deploy_callWordpress(kind: string, params: Record<string, any>): Promise<any> {
899
887
  return this.executeApiCall({ name: 'wordpress_' + kind, method: 'POST', path: this.hosting_deploy_wordpressEndpoints[kind] } as any, params);
900
888
  }
901
889
 
890
+ // The folder of the document root WordPress is installed in ('' for the root, e.g. 'cms' on a headless
891
+ // site), from the installation directory wordpress_installations_list reports (public_html or '' for the root,
892
+ // public_html/<folder> or a bare <folder> otherwise). Absolute paths and .. segments are refused.
893
+ private async hosting_deploy_wordpressDirectory(username: string, domain: string): Promise<string> {
894
+ const response = await this.executeApiCall({ name: 'wordpress_installations_list', method: 'GET', path: '/api/hosting/v1/wordpress/installations' } as any, { username, domain, ownership: 'all' });
895
+ const list = Array.isArray(response) ? response : (response && Array.isArray(response.data) ? response.data : []);
896
+ const installations = list.filter((installation: any) => typeof installation.domain === 'string' && installation.domain.toLowerCase() === domain.toLowerCase());
897
+ if (installations.length === 0) {
898
+ return '';
899
+ }
900
+ if (installations.length > 1) {
901
+ throw new Error('Several WordPress installations found for ' + domain + ' (' + installations.map((installation: any) => installation.directory).join(', ') + '); cannot tell which one to deploy to');
902
+ }
903
+ let directory = typeof installations[0].directory === 'string' ? installations[0].directory : '';
904
+ if (directory.startsWith('/') || directory.split('/').includes('..')) {
905
+ throw new Error('Unrecognized WordPress installation directory for ' + domain + ': ' + String(installations[0].directory));
906
+ }
907
+ while (directory.endsWith('/')) {
908
+ directory = directory.slice(0, -1);
909
+ }
910
+ if (directory === 'public_html') {
911
+ return '';
912
+ }
913
+ if (directory.startsWith('public_html/')) {
914
+ return directory.slice('public_html/'.length);
915
+ }
916
+ return directory;
917
+ }
918
+
902
919
  private hosting_deploy_randomSuffix(): string {
903
920
  return Math.random().toString(36).slice(2, 10).padEnd(8, '0');
904
921
  }
@@ -964,7 +981,6 @@ class MCPServer {
964
981
 
965
982
  private async hosting_deploy_wordpressExtension(username: string, domain: string, type: string, params: Record<string, any>): Promise<any> {
966
983
  const isPlugin = type === 'wordpress-plugin';
967
- const headless = params.headless === true;
968
984
  const directory = path.resolve(params.path);
969
985
  const slug = params.slug !== undefined ? params.slug : this.hosting_deploy_slug(directory);
970
986
  const { files, skipped } = this.hosting_deploy_listFiles(directory);
@@ -972,9 +988,10 @@ class MCPServer {
972
988
  throw new Error('No files found in directory: ' + directory);
973
989
  }
974
990
 
991
+ const wordpressDirectory = await this.hosting_deploy_wordpressDirectory(username, domain);
975
992
  // The files land in a fresh directory; the deploy call then installs from it.
976
993
  const uploadDirName = slug + '-' + this.hosting_deploy_randomSuffix();
977
- const remoteRoot = (headless ? this.hosting_deploy_headlessDirectory + '/' : '') + (isPlugin ? 'wp-content/plugins/' : 'wp-content/themes/') + uploadDirName;
994
+ const remoteRoot = (wordpressDirectory ? wordpressDirectory + '/' : '') + (isPlugin ? 'wp-content/plugins/' : 'wp-content/themes/') + uploadDirName;
978
995
  await this.hosting_deploy_upload(username, domain, files.map((relativePath) => ({
979
996
  absolutePath: path.join(directory, relativePath),
980
997
  relativePath: remoteRoot + '/' + relativePath,
@@ -994,7 +1011,7 @@ class MCPServer {
994
1011
  slug,
995
1012
  files: files.length,
996
1013
  ...(isPlugin ? {} : { activated: params.activate === true }),
997
- ...(headless ? { headless: true } : {}),
1014
+ ...(wordpressDirectory ? { wordpressDirectory } : {}),
998
1015
  }, skipped);
999
1016
  }
1000
1017
 
@@ -9,7 +9,7 @@ export default [
9
9
  "destructiveHint": true
10
10
  },
11
11
  "topic": "hosting",
12
- "description": "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. For a plugin or theme on a headless WordPress (installed in the cms folder), pass headless: true. 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.",
12
+ "description": "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. A plugin or theme goes into the site's WordPress installation, also when WordPress is in a folder of the document root (headless). 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.",
13
13
  "method": "",
14
14
  "path": "",
15
15
  "inputSchema": {
@@ -64,10 +64,6 @@ export default [
64
64
  "type": "boolean",
65
65
  "description": "Activate the theme after deployment (WordPress themes only, default: false)"
66
66
  },
67
- "headless": {
68
- "type": "boolean",
69
- "description": "The site runs headless WordPress, installed in the cms folder of the document root: the plugin or theme is uploaded to cms/wp-content/plugins or cms/wp-content/themes and installed there (wordpress-plugin and wordpress-theme only, default: false)"
70
- },
71
67
  "databaseDump": {
72
68
  "type": "string",
73
69
  "description": "Path to a .sql dump; required for a WordPress site import"
@@ -25,7 +25,7 @@ const tools: OpenApiTool[] = [
25
25
  "destructiveHint": true
26
26
  },
27
27
  "topic": "hosting",
28
- "description": "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. For a plugin or theme on a headless WordPress (installed in the cms folder), pass headless: true. 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.",
28
+ "description": "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. A plugin or theme goes into the site's WordPress installation, also when WordPress is in a folder of the document root (headless). 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.",
29
29
  "method": "",
30
30
  "path": "",
31
31
  "inputSchema": {
@@ -80,10 +80,6 @@ const tools: OpenApiTool[] = [
80
80
  "type": "boolean",
81
81
  "description": "Activate the theme after deployment (WordPress themes only, default: false)"
82
82
  },
83
- "headless": {
84
- "type": "boolean",
85
- "description": "The site runs headless WordPress, installed in the cms folder of the document root: the plugin or theme is uploaded to cms/wp-content/plugins or cms/wp-content/themes and installed there (wordpress-plugin and wordpress-theme only, default: false)"
86
- },
87
83
  "databaseDump": {
88
84
  "type": "string",
89
85
  "description": "Path to a .sql dump; required for a WordPress site import"
@@ -9,7 +9,7 @@ export default [
9
9
  "destructiveHint": true
10
10
  },
11
11
  "topic": "hosting",
12
- "description": "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. For a plugin or theme on a headless WordPress (installed in the cms folder), pass headless: true. 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.",
12
+ "description": "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. A plugin or theme goes into the site's WordPress installation, also when WordPress is in a folder of the document root (headless). 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.",
13
13
  "method": "",
14
14
  "path": "",
15
15
  "inputSchema": {
@@ -64,10 +64,6 @@ export default [
64
64
  "type": "boolean",
65
65
  "description": "Activate the theme after deployment (WordPress themes only, default: false)"
66
66
  },
67
- "headless": {
68
- "type": "boolean",
69
- "description": "The site runs headless WordPress, installed in the cms folder of the document root: the plugin or theme is uploaded to cms/wp-content/plugins or cms/wp-content/themes and installed there (wordpress-plugin and wordpress-theme only, default: false)"
70
- },
71
67
  "databaseDump": {
72
68
  "type": "string",
73
69
  "description": "Path to a .sql dump; required for a WordPress site import"
@@ -25,7 +25,7 @@ const tools: OpenApiTool[] = [
25
25
  "destructiveHint": true
26
26
  },
27
27
  "topic": "hosting",
28
- "description": "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. For a plugin or theme on a headless WordPress (installed in the cms folder), pass headless: true. 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.",
28
+ "description": "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. A plugin or theme goes into the site's WordPress installation, also when WordPress is in a folder of the document root (headless). 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.",
29
29
  "method": "",
30
30
  "path": "",
31
31
  "inputSchema": {
@@ -80,10 +80,6 @@ const tools: OpenApiTool[] = [
80
80
  "type": "boolean",
81
81
  "description": "Activate the theme after deployment (WordPress themes only, default: false)"
82
82
  },
83
- "headless": {
84
- "type": "boolean",
85
- "description": "The site runs headless WordPress, installed in the cms folder of the document root: the plugin or theme is uploaded to cms/wp-content/plugins or cms/wp-content/themes and installed there (wordpress-plugin and wordpress-theme only, default: false)"
86
- },
87
83
  "databaseDump": {
88
84
  "type": "string",
89
85
  "description": "Path to a .sql dump; required for a WordPress site import"
@@ -4,4 +4,4 @@ import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/agency-hosting.js';
5
5
  import instructions from '../core/instructions.agency-hosting.js';
6
6
 
7
- startServer({ name: 'hostinger-agency-hosting-mcp', version: '3.5.0', tools, instructions });
7
+ startServer({ name: 'hostinger-agency-hosting-mcp', version: '3.6.0', tools, instructions });
@@ -4,4 +4,4 @@ import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/agency-hosting.js';
5
5
  import instructions from '../core/instructions.agency-hosting.js';
6
6
 
7
- startServer({ name: 'hostinger-agency-hosting-mcp', version: '3.5.0', tools, instructions });
7
+ startServer({ name: 'hostinger-agency-hosting-mcp', version: '3.6.0', tools, instructions });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/agent-readiness.js';
5
5
 
6
- startServer({ name: 'hostinger-agent-readiness-mcp', version: '3.5.0', tools });
6
+ startServer({ name: 'hostinger-agent-readiness-mcp', version: '3.6.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/agent-readiness.js';
5
5
 
6
- startServer({ name: 'hostinger-agent-readiness-mcp', version: '3.5.0', tools });
6
+ startServer({ name: 'hostinger-agent-readiness-mcp', version: '3.6.0', tools });
@@ -5,4 +5,4 @@ import tools from '../core/tools/all.js';
5
5
  import instructions from '../core/instructions.js';
6
6
  import skills from '../core/skills.js';
7
7
 
8
- startServer({ name: 'hostinger-api-mcp', version: '3.5.0', tools, instructions, skills });
8
+ startServer({ name: 'hostinger-api-mcp', version: '3.6.0', tools, instructions, skills });
@@ -5,4 +5,4 @@ import tools from '../core/tools/all.js';
5
5
  import instructions from '../core/instructions.js';
6
6
  import skills from '../core/skills.js';
7
7
 
8
- startServer({ name: 'hostinger-api-mcp', version: '3.5.0', tools, instructions, skills });
8
+ startServer({ name: 'hostinger-api-mcp', version: '3.6.0', tools, instructions, skills });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/billing.js';
5
5
 
6
- startServer({ name: 'hostinger-billing-mcp', version: '3.5.0', tools });
6
+ startServer({ name: 'hostinger-billing-mcp', version: '3.6.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/billing.js';
5
5
 
6
- startServer({ name: 'hostinger-billing-mcp', version: '3.5.0', tools });
6
+ startServer({ name: 'hostinger-billing-mcp', version: '3.6.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/dns.js';
5
5
 
6
- startServer({ name: 'hostinger-dns-mcp', version: '3.5.0', tools });
6
+ startServer({ name: 'hostinger-dns-mcp', version: '3.6.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/dns.js';
5
5
 
6
- startServer({ name: 'hostinger-dns-mcp', version: '3.5.0', tools });
6
+ startServer({ name: 'hostinger-dns-mcp', version: '3.6.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/domains.js';
5
5
 
6
- startServer({ name: 'hostinger-domains-mcp', version: '3.5.0', tools });
6
+ startServer({ name: 'hostinger-domains-mcp', version: '3.6.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/domains.js';
5
5
 
6
- startServer({ name: 'hostinger-domains-mcp', version: '3.5.0', tools });
6
+ startServer({ name: 'hostinger-domains-mcp', version: '3.6.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/ecommerce.js';
5
5
 
6
- startServer({ name: 'hostinger-ecommerce-mcp', version: '3.5.0', tools });
6
+ startServer({ name: 'hostinger-ecommerce-mcp', version: '3.6.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/ecommerce.js';
5
5
 
6
- startServer({ name: 'hostinger-ecommerce-mcp', version: '3.5.0', tools });
6
+ startServer({ name: 'hostinger-ecommerce-mcp', version: '3.6.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/horizons.js';
5
5
 
6
- startServer({ name: 'hostinger-horizons-mcp', version: '3.5.0', tools });
6
+ startServer({ name: 'hostinger-horizons-mcp', version: '3.6.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/horizons.js';
5
5
 
6
- startServer({ name: 'hostinger-horizons-mcp', version: '3.5.0', tools });
6
+ startServer({ name: 'hostinger-horizons-mcp', version: '3.6.0', tools });
@@ -4,4 +4,4 @@ import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/hosting.js';
5
5
  import instructions from '../core/instructions.js';
6
6
 
7
- startServer({ name: 'hostinger-hosting-mcp', version: '3.5.0', tools, instructions });
7
+ startServer({ name: 'hostinger-hosting-mcp', version: '3.6.0', tools, instructions });
@@ -4,4 +4,4 @@ import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/hosting.js';
5
5
  import instructions from '../core/instructions.js';
6
6
 
7
- startServer({ name: 'hostinger-hosting-mcp', version: '3.5.0', tools, instructions });
7
+ startServer({ name: 'hostinger-hosting-mcp', version: '3.6.0', tools, instructions });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/mail.js';
5
5
 
6
- startServer({ name: 'hostinger-mail-mcp', version: '3.5.0', tools });
6
+ startServer({ name: 'hostinger-mail-mcp', version: '3.6.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/mail.js';
5
5
 
6
- startServer({ name: 'hostinger-mail-mcp', version: '3.5.0', tools });
6
+ startServer({ name: 'hostinger-mail-mcp', version: '3.6.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/reach.js';
5
5
 
6
- startServer({ name: 'hostinger-reach-mcp', version: '3.5.0', tools });
6
+ startServer({ name: 'hostinger-reach-mcp', version: '3.6.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/reach.js';
5
5
 
6
- startServer({ name: 'hostinger-reach-mcp', version: '3.5.0', tools });
6
+ startServer({ name: 'hostinger-reach-mcp', version: '3.6.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/vps.js';
5
5
 
6
- startServer({ name: 'hostinger-vps-mcp', version: '3.5.0', tools });
6
+ startServer({ name: 'hostinger-vps-mcp', version: '3.6.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/vps.js';
5
5
 
6
- startServer({ name: 'hostinger-vps-mcp', version: '3.5.0', tools });
6
+ startServer({ name: 'hostinger-vps-mcp', version: '3.6.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/wordpress.js';
5
5
 
6
- startServer({ name: 'hostinger-wordpress-mcp', version: '3.5.0', tools });
6
+ startServer({ name: 'hostinger-wordpress-mcp', version: '3.6.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/wordpress.js';
5
5
 
6
- startServer({ name: 'hostinger-wordpress-mcp', version: '3.5.0', tools });
6
+ startServer({ name: 'hostinger-wordpress-mcp', version: '3.6.0', tools });
package/types.d.ts CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  export interface APITools {
7
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. For a plugin or theme on a headless WordPress (installed in the cms folder), pass headless: true. 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.
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. A plugin or theme goes into the site's WordPress installation, also when WordPress is in a folder of the document root (headless). 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
9
  */
10
10
  "hosting_deploy": {
11
11
  params: {
@@ -33,10 +33,6 @@ export interface APITools {
33
33
  * Activate the theme after deployment (WordPress themes only, default: false)
34
34
  */
35
35
  activate?: boolean;
36
- /**
37
- * The site runs headless WordPress, installed in the cms folder of the document root: the plugin or theme is uploaded to cms/wp-content/plugins or cms/wp-content/themes and installed there (wordpress-plugin and wordpress-theme only, default: false)
38
- */
39
- headless?: boolean;
40
36
  /**
41
37
  * Path to a .sql dump; required for a WordPress site import
42
38
  */