hostinger-api-mcp 0.3.2 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -49,15 +49,16 @@ pnpm update -g hostinger-api-mcp
49
49
 
50
50
  This package installs the following MCP server commands:
51
51
 
52
- - `hostinger-api-mcp` — unified server with every tool (153 total)
52
+ - `hostinger-api-mcp` — unified server with every tool (155 total)
53
53
  - `hostinger-billing-mcp` — 7 tools for billing
54
54
  - `hostinger-dns-mcp` — 8 tools for dns
55
55
  - `hostinger-domains-mcp` — 18 tools for domains
56
56
  - `hostinger-ecommerce-mcp` — 7 tools for ecommerce
57
57
  - `hostinger-horizons-mcp` — 2 tools for horizons
58
- - `hostinger-hosting-mcp` — 37 tools for hosting
58
+ - `hostinger-hosting-mcp` — 35 tools for hosting
59
59
  - `hostinger-reach-mcp` — 12 tools for reach
60
60
  - `hostinger-vps-mcp` — 62 tools for vps
61
+ - `hostinger-wordpress-mcp` — 4 tools for wordpress
61
62
 
62
63
  Pick the binary that matches your agent's scope. `hostinger-api-mcp` remains the backwards-compatible default.
63
64
 
@@ -1008,43 +1009,6 @@ websites list endpoint to see when your new website becomes available.
1008
1009
  - **Method**: `POST`
1009
1010
  - **Path**: `/api/hosting/v1/websites`
1010
1011
 
1011
- #### hosting_installWordPressV1
1012
-
1013
- Install WordPress on an existing website.
1014
-
1015
- The website must already exist before calling this endpoint. To create a new
1016
- website first, use POST /api/hosting/v1/websites and poll
1017
- GET /api/hosting/v1/websites until it appears.
1018
-
1019
- Call GET /api/hosting/v1/wordpress/installations filtered by username and
1020
- domain before proceeding to check whether WordPress is already installed on
1021
- the target domain/path. If WordPress already exists and `overwrite` is false
1022
- (the default), the async job will fail.
1023
-
1024
- This operation is asynchronous: a successful response only means the install
1025
- job has been queued, not that WordPress is ready. Installation typically
1026
- takes 1-2 minutes. Poll GET /api/hosting/v1/wordpress/installations filtered
1027
- by username and domain to track progress. When the installation appears in
1028
- that list, WordPress is ready.
1029
-
1030
- - **Method**: `POST`
1031
- - **Path**: `/api/hosting/v1/accounts/{username}/wordpress/installations`
1032
-
1033
- #### hosting_listWordPressInstallationsV1
1034
-
1035
- List WordPress installations accessible to the authenticated client.
1036
-
1037
- Use this endpoint to discover existing WordPress installations and to poll
1038
- for installation status after calling the install endpoint. When a newly
1039
- requested installation appears in this list, WordPress is ready. Filter by
1040
- username and domain to narrow results to a specific website.
1041
-
1042
- Each installation includes a `valid` flag and, when invalid, a
1043
- `validationError` describing why.
1044
-
1045
- - **Method**: `GET`
1046
- - **Path**: `/api/hosting/v1/wordpress/installations`
1047
-
1048
1012
  ### `hostinger-reach-mcp`
1049
1013
 
1050
1014
  #### reach_deleteAContactV1
@@ -1876,3 +1840,76 @@ Use this endpoint to power off running VPS instances.
1876
1840
 
1877
1841
  - **Method**: `POST`
1878
1842
  - **Path**: `/api/vps/v1/virtual-machines/{virtualMachineId}/stop`
1843
+
1844
+ ### `hostinger-wordpress-mcp`
1845
+
1846
+ #### hosting_installWordPressV1
1847
+
1848
+ Install WordPress on an existing website.
1849
+
1850
+ The website must already exist before calling this endpoint. To create a new
1851
+ website first, use POST /api/hosting/v1/websites and poll
1852
+ GET /api/hosting/v1/websites until it appears.
1853
+
1854
+ Call GET /api/hosting/v1/wordpress/installations filtered by username and
1855
+ domain before proceeding to check whether WordPress is already installed on
1856
+ the target domain/path. If WordPress already exists and `overwrite` is false
1857
+ (the default), the async job will fail.
1858
+
1859
+ This operation is asynchronous: a successful response only means the install
1860
+ job has been queued, not that WordPress is ready. Installation typically
1861
+ takes 1-2 minutes. Poll GET /api/hosting/v1/wordpress/installations filtered
1862
+ by username and domain to track progress. When the installation appears in
1863
+ that list, WordPress is ready.
1864
+
1865
+ - **Method**: `POST`
1866
+ - **Path**: `/api/hosting/v1/accounts/{username}/wordpress/installations`
1867
+
1868
+ #### hosting_listWordPressInstallationsV1
1869
+
1870
+ List WordPress installations accessible to the authenticated client.
1871
+
1872
+ Use this endpoint to discover existing WordPress installations and to poll
1873
+ for installation status after calling the install endpoint. When a newly
1874
+ requested installation appears in this list, WordPress is ready. Filter by
1875
+ username and domain to narrow results to a specific website.
1876
+
1877
+ Each installation includes a `valid` flag and, when invalid, a
1878
+ `validationError` describing why.
1879
+
1880
+ - **Method**: `GET`
1881
+ - **Path**: `/api/hosting/v1/wordpress/installations`
1882
+
1883
+ #### hosting_installWordPressPluginsV1
1884
+
1885
+ Install one or more plugins on an existing WordPress installation.
1886
+
1887
+ Provide the WordPress installation (software) identifier in the path. It can
1888
+ be obtained from GET /api/hosting/v1/wordpress/installations (the `id`
1889
+ field). Use GET /api/hosting/v1/wordpress/plugins to discover the plugin
1890
+ slugs available for installation.
1891
+
1892
+ This operation is asynchronous: a successful response only means the install
1893
+ job has been queued, not that the plugins are ready.
1894
+
1895
+ - **Method**: `POST`
1896
+ - **Path**: `/api/hosting/v1/accounts/{username}/wordpress/{software}/plugins/install`
1897
+
1898
+ #### hosting_installWordPressThemeV1
1899
+
1900
+ Install a theme on an existing WordPress installation.
1901
+
1902
+ Provide the WordPress installation (software) identifier in the path. It can
1903
+ be obtained from GET /api/hosting/v1/wordpress/installations (the `id`
1904
+ field).
1905
+
1906
+ When the theme is one of the Hostinger themes (hostinger-blog,
1907
+ hostinger-affiliate-theme, hostinger-ai-theme), the optional `palette`,
1908
+ `layout`, and `font` fields are forwarded to the custom installer (defaults:
1909
+ palette1, layout1, default). For any other theme they are ignored.
1910
+
1911
+ This operation is asynchronous: a successful response only means the install
1912
+ job has been queued, not that the theme is ready.
1913
+
1914
+ - **Method**: `POST`
1915
+ - **Path**: `/api/hosting/v1/accounts/{username}/wordpress/{software}/themes/install`
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hostinger-api-mcp",
3
- "version": "0.3.2",
3
+ "version": "1.0.0",
4
4
  "description": "Hostinger API — manage domains, DNS, hosting, VPS, billing and more from Gemini CLI.",
5
5
  "mcpServers": {
6
6
  "hostinger": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hostinger-api-mcp",
3
- "version": "0.3.2",
3
+ "version": "1.0.0",
4
4
  "mcpName": "io.github.hostinger/hostinger-api-mcp",
5
5
  "description": "MCP server for Hostinger API",
6
6
  "repository": {
@@ -26,7 +26,8 @@
26
26
  "hostinger-horizons-mcp": "./src/servers/horizons.js",
27
27
  "hostinger-hosting-mcp": "./src/servers/hosting.js",
28
28
  "hostinger-reach-mcp": "./src/servers/reach.js",
29
- "hostinger-vps-mcp": "./src/servers/vps.js"
29
+ "hostinger-vps-mcp": "./src/servers/vps.js",
30
+ "hostinger-wordpress-mcp": "./src/servers/wordpress.js"
30
31
  },
31
32
  "scripts": {
32
33
  "start": "node src/servers/all.js",
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": "0.3.2",
9
+ "version": "1.0.0",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "npm",
13
13
  "identifier": "hostinger-api-mcp",
14
- "version": "0.3.2",
14
+ "version": "1.0.0",
15
15
  "transport": {
16
16
  "type": "stdio"
17
17
  },
@@ -29,7 +29,7 @@ const SECURITY_SCHEMES = {
29
29
 
30
30
  /**
31
31
  * MCP Server for Hostinger API
32
- * Generated from OpenAPI spec version 0.22.1
32
+ * Generated from OpenAPI spec version 1.0.0
33
33
  */
34
34
  class MCPServer {
35
35
  constructor({ name, version, tools }) {
@@ -47,7 +47,7 @@ const SECURITY_SCHEMES: Record<string, SecurityScheme> = {
47
47
 
48
48
  /**
49
49
  * MCP Server for Hostinger API
50
- * Generated from OpenAPI spec version 0.22.1
50
+ * Generated from OpenAPI spec version 1.0.0
51
51
  */
52
52
  class MCPServer {
53
53
  private readonly name: string;
@@ -2586,138 +2586,6 @@ export default [
2586
2586
  ],
2587
2587
  "group": "hosting"
2588
2588
  },
2589
- {
2590
- "name": "hosting_installWordPressV1",
2591
- "description": "Install WordPress on an existing website.\n\nThe website must already exist before calling this endpoint. To create a new\nwebsite first, use POST /api/hosting/v1/websites and poll\nGET /api/hosting/v1/websites until it appears.\n\nCall GET /api/hosting/v1/wordpress/installations filtered by username and\ndomain before proceeding to check whether WordPress is already installed on\nthe target domain/path. If WordPress already exists and `overwrite` is false\n(the default), the async job will fail.\n\nThis operation is asynchronous: a successful response only means the install\njob has been queued, not that WordPress is ready. Installation typically\ntakes 1-2 minutes. Poll GET /api/hosting/v1/wordpress/installations filtered\nby username and domain to track progress. When the installation appears in\nthat list, WordPress is ready.",
2592
- "method": "POST",
2593
- "path": "/api/hosting/v1/accounts/{username}/wordpress/installations",
2594
- "inputSchema": {
2595
- "type": "object",
2596
- "properties": {
2597
- "username": {
2598
- "type": "string",
2599
- "description": "username parameter"
2600
- },
2601
- "domain": {
2602
- "type": "string",
2603
- "description": "Domain of the existing website where WordPress will be installed"
2604
- },
2605
- "site_title": {
2606
- "type": "string",
2607
- "description": "Title of the WordPress site"
2608
- },
2609
- "language": {
2610
- "type": "string",
2611
- "description": "WordPress locale. Defaults to en_US when omitted."
2612
- },
2613
- "directory": {
2614
- "type": "string",
2615
- "description": "Relative directory to install WordPress into. Defaults to the website root when omitted."
2616
- },
2617
- "overwrite": {
2618
- "type": "boolean",
2619
- "description": "When false (default), does not replace an existing installation. If WordPress is already installed on the domain/path, the async install job fails unless true."
2620
- },
2621
- "auto_updates": {
2622
- "type": "string",
2623
- "description": "WordPress core auto-update policy",
2624
- "enum": [
2625
- "all",
2626
- "none",
2627
- "minor"
2628
- ]
2629
- },
2630
- "version": {
2631
- "type": "string",
2632
- "description": "WordPress core version to install. If omitted, the latest core version compatible with the account vhost PHP version is selected."
2633
- },
2634
- "credentials": {
2635
- "type": "object",
2636
- "description": "WordPress admin credentials",
2637
- "properties": {
2638
- "email": {
2639
- "type": "string",
2640
- "description": "email parameter"
2641
- },
2642
- "login": {
2643
- "type": "string",
2644
- "description": "WordPress admin username"
2645
- },
2646
- "password": {
2647
- "type": "string",
2648
- "description": "password parameter"
2649
- }
2650
- },
2651
- "required": [
2652
- "email",
2653
- "login",
2654
- "password"
2655
- ]
2656
- },
2657
- "database": {
2658
- "type": "object",
2659
- "description": "Optional. If the named database already exists, it will be used for this WordPress install. Otherwise a new database is created with a generated name and random credentials.",
2660
- "properties": {
2661
- "name": {
2662
- "type": "string",
2663
- "description": "Database name (username prefix added if missing)"
2664
- },
2665
- "password": {
2666
- "type": "string",
2667
- "description": "password parameter"
2668
- }
2669
- }
2670
- }
2671
- },
2672
- "required": [
2673
- "username",
2674
- "domain",
2675
- "site_title",
2676
- "credentials"
2677
- ]
2678
- },
2679
- "security": [
2680
- {
2681
- "apiToken": []
2682
- }
2683
- ],
2684
- "group": "hosting"
2685
- },
2686
- {
2687
- "name": "hosting_listWordPressInstallationsV1",
2688
- "description": "List WordPress installations accessible to the authenticated client.\n\nUse this endpoint to discover existing WordPress installations and to poll\nfor installation status after calling the install endpoint. When a newly\nrequested installation appears in this list, WordPress is ready. Filter by\nusername and domain to narrow results to a specific website.\n\nEach installation includes a `valid` flag and, when invalid, a\n`validationError` describing why.",
2689
- "method": "GET",
2690
- "path": "/api/hosting/v1/wordpress/installations",
2691
- "inputSchema": {
2692
- "type": "object",
2693
- "properties": {
2694
- "username": {
2695
- "type": "string",
2696
- "description": "Filter by specific username"
2697
- },
2698
- "domain": {
2699
- "type": "string",
2700
- "description": "Filter by domain name (exact match)"
2701
- },
2702
- "ownership": {
2703
- "type": "string",
2704
- "description": "Filter by ownership type. Defaults to \"owned\". Use \"all\" to include both owned and managed installations.",
2705
- "enum": [
2706
- "owned",
2707
- "managed",
2708
- "all"
2709
- ]
2710
- }
2711
- },
2712
- "required": []
2713
- },
2714
- "security": [
2715
- {
2716
- "apiToken": []
2717
- }
2718
- ],
2719
- "group": "hosting"
2720
- },
2721
2589
  {
2722
2590
  "name": "reach_deleteAContactV1",
2723
2591
  "description": "Delete a contact with the specified UUID.\n\nThis endpoint permanently removes a contact from the email marketing system.",
@@ -4945,5 +4813,229 @@ export default [
4945
4813
  }
4946
4814
  ],
4947
4815
  "group": "vps"
4816
+ },
4817
+ {
4818
+ "name": "hosting_installWordPressV1",
4819
+ "description": "Install WordPress on an existing website.\n\nThe website must already exist before calling this endpoint. To create a new\nwebsite first, use POST /api/hosting/v1/websites and poll\nGET /api/hosting/v1/websites until it appears.\n\nCall GET /api/hosting/v1/wordpress/installations filtered by username and\ndomain before proceeding to check whether WordPress is already installed on\nthe target domain/path. If WordPress already exists and `overwrite` is false\n(the default), the async job will fail.\n\nThis operation is asynchronous: a successful response only means the install\njob has been queued, not that WordPress is ready. Installation typically\ntakes 1-2 minutes. Poll GET /api/hosting/v1/wordpress/installations filtered\nby username and domain to track progress. When the installation appears in\nthat list, WordPress is ready.",
4820
+ "method": "POST",
4821
+ "path": "/api/hosting/v1/accounts/{username}/wordpress/installations",
4822
+ "inputSchema": {
4823
+ "type": "object",
4824
+ "properties": {
4825
+ "username": {
4826
+ "type": "string",
4827
+ "description": "username parameter"
4828
+ },
4829
+ "domain": {
4830
+ "type": "string",
4831
+ "description": "Domain of the existing website where WordPress will be installed"
4832
+ },
4833
+ "site_title": {
4834
+ "type": "string",
4835
+ "description": "Title of the WordPress site"
4836
+ },
4837
+ "language": {
4838
+ "type": "string",
4839
+ "description": "WordPress locale. Defaults to en_US when omitted."
4840
+ },
4841
+ "directory": {
4842
+ "type": "string",
4843
+ "description": "Relative directory to install WordPress into. Defaults to the website root when omitted."
4844
+ },
4845
+ "overwrite": {
4846
+ "type": "boolean",
4847
+ "description": "When false (default), does not replace an existing installation. If WordPress is already installed on the domain/path, the async install job fails unless true."
4848
+ },
4849
+ "auto_updates": {
4850
+ "type": "string",
4851
+ "description": "WordPress core auto-update policy",
4852
+ "enum": [
4853
+ "all",
4854
+ "none",
4855
+ "minor"
4856
+ ]
4857
+ },
4858
+ "version": {
4859
+ "type": "string",
4860
+ "description": "WordPress core version to install. If omitted, the latest core version compatible with the account vhost PHP version is selected."
4861
+ },
4862
+ "credentials": {
4863
+ "type": "object",
4864
+ "description": "WordPress admin credentials",
4865
+ "properties": {
4866
+ "email": {
4867
+ "type": "string",
4868
+ "description": "email parameter"
4869
+ },
4870
+ "login": {
4871
+ "type": "string",
4872
+ "description": "WordPress admin username"
4873
+ },
4874
+ "password": {
4875
+ "type": "string",
4876
+ "description": "password parameter"
4877
+ }
4878
+ },
4879
+ "required": [
4880
+ "email",
4881
+ "login",
4882
+ "password"
4883
+ ]
4884
+ },
4885
+ "database": {
4886
+ "type": "object",
4887
+ "description": "Optional. If the named database already exists, it will be used for this WordPress install. Otherwise a new database is created with a generated name and random credentials.",
4888
+ "properties": {
4889
+ "name": {
4890
+ "type": "string",
4891
+ "description": "Database name (username prefix added if missing)"
4892
+ },
4893
+ "password": {
4894
+ "type": "string",
4895
+ "description": "password parameter"
4896
+ }
4897
+ }
4898
+ }
4899
+ },
4900
+ "required": [
4901
+ "username",
4902
+ "domain",
4903
+ "site_title",
4904
+ "credentials"
4905
+ ]
4906
+ },
4907
+ "security": [
4908
+ {
4909
+ "apiToken": []
4910
+ }
4911
+ ],
4912
+ "group": "wordpress"
4913
+ },
4914
+ {
4915
+ "name": "hosting_listWordPressInstallationsV1",
4916
+ "description": "List WordPress installations accessible to the authenticated client.\n\nUse this endpoint to discover existing WordPress installations and to poll\nfor installation status after calling the install endpoint. When a newly\nrequested installation appears in this list, WordPress is ready. Filter by\nusername and domain to narrow results to a specific website.\n\nEach installation includes a `valid` flag and, when invalid, a\n`validationError` describing why.",
4917
+ "method": "GET",
4918
+ "path": "/api/hosting/v1/wordpress/installations",
4919
+ "inputSchema": {
4920
+ "type": "object",
4921
+ "properties": {
4922
+ "username": {
4923
+ "type": "string",
4924
+ "description": "Filter by specific username"
4925
+ },
4926
+ "domain": {
4927
+ "type": "string",
4928
+ "description": "Filter by domain name (exact match)"
4929
+ },
4930
+ "ownership": {
4931
+ "type": "string",
4932
+ "description": "Filter by ownership type. Defaults to \"owned\". Use \"all\" to include both owned and managed installations.",
4933
+ "enum": [
4934
+ "owned",
4935
+ "managed",
4936
+ "all"
4937
+ ]
4938
+ }
4939
+ },
4940
+ "required": []
4941
+ },
4942
+ "security": [
4943
+ {
4944
+ "apiToken": []
4945
+ }
4946
+ ],
4947
+ "group": "wordpress"
4948
+ },
4949
+ {
4950
+ "name": "hosting_installWordPressPluginsV1",
4951
+ "description": "Install one or more plugins on an existing WordPress installation.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id`\nfield). Use GET /api/hosting/v1/wordpress/plugins to discover the plugin\nslugs available for installation.\n\nThis operation is asynchronous: a successful response only means the install\njob has been queued, not that the plugins are ready.",
4952
+ "method": "POST",
4953
+ "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/plugins/install",
4954
+ "inputSchema": {
4955
+ "type": "object",
4956
+ "properties": {
4957
+ "username": {
4958
+ "type": "string",
4959
+ "description": "username parameter"
4960
+ },
4961
+ "software": {
4962
+ "type": "string",
4963
+ "description": "WordPress installation (software) identifier"
4964
+ },
4965
+ "plugins": {
4966
+ "type": "array",
4967
+ "description": "Plugin slugs to install. Use GET /api/hosting/v1/wordpress/plugins to discover available slugs.",
4968
+ "items": {
4969
+ "type": "string",
4970
+ "description": "Plugin slug"
4971
+ }
4972
+ }
4973
+ },
4974
+ "required": [
4975
+ "username",
4976
+ "software",
4977
+ "plugins"
4978
+ ]
4979
+ },
4980
+ "security": [
4981
+ {
4982
+ "apiToken": []
4983
+ }
4984
+ ],
4985
+ "group": "wordpress"
4986
+ },
4987
+ {
4988
+ "name": "hosting_installWordPressThemeV1",
4989
+ "description": "Install a theme on an existing WordPress installation.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id`\nfield).\n\nWhen the theme is one of the Hostinger themes (hostinger-blog,\nhostinger-affiliate-theme, hostinger-ai-theme), the optional `palette`,\n`layout`, and `font` fields are forwarded to the custom installer (defaults:\npalette1, layout1, default). For any other theme they are ignored.\n\nThis operation is asynchronous: a successful response only means the install\njob has been queued, not that the theme is ready.",
4990
+ "method": "POST",
4991
+ "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/themes/install",
4992
+ "inputSchema": {
4993
+ "type": "object",
4994
+ "properties": {
4995
+ "username": {
4996
+ "type": "string",
4997
+ "description": "username parameter"
4998
+ },
4999
+ "software": {
5000
+ "type": "string",
5001
+ "description": "WordPress installation (software) identifier"
5002
+ },
5003
+ "theme": {
5004
+ "type": "string",
5005
+ "description": "Slug of the theme to install. Hostinger theme slugs (hostinger-blog, hostinger-affiliate-theme, hostinger-ai-theme) trigger the custom installer and forward the optional palette/layout/font fields; any other WordPress theme slug uses the standard installer and ignores those fields."
5006
+ },
5007
+ "palette": {
5008
+ "type": "string",
5009
+ "description": "Palette identifier. Only applied when the theme is a Hostinger theme; the default is used when omitted."
5010
+ },
5011
+ "layout": {
5012
+ "type": "string",
5013
+ "description": "Layout identifier. Only applied when the theme is a Hostinger theme; the default is used when omitted."
5014
+ },
5015
+ "font": {
5016
+ "type": "string",
5017
+ "description": "Font identifier. Only applied when the theme is a Hostinger theme; the default is used when omitted.",
5018
+ "enum": [
5019
+ "professional",
5020
+ "modern",
5021
+ "elegant",
5022
+ "creative",
5023
+ "dynamic",
5024
+ "default"
5025
+ ]
5026
+ }
5027
+ },
5028
+ "required": [
5029
+ "username",
5030
+ "software",
5031
+ "theme"
5032
+ ]
5033
+ },
5034
+ "security": [
5035
+ {
5036
+ "apiToken": []
5037
+ }
5038
+ ],
5039
+ "group": "wordpress"
4948
5040
  }
4949
5041
  ];