Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .cursor-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "hostinger-connector",
"displayName": "Hostinger Connector",
"version": "0.3.3",
"version": "0.3.4",
"description": "MCP plugin to deploy and manage Hostinger websites, WordPress, domains, DNS, VPS, email, and subscriptions from inside Cursor.",
"author": "Hostinger",
"license": "MIT",
Expand Down
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# Changelog

## [0.3.4] - 2026-11-15

### Changed

- Synced with `@hostinger/mcp` 4.0.1: deploy-to-hosting, hostinger-headless, maintain-wordpress, operation catalog, troubleshoot-website

## [0.3.3] - 2026-11-12

### Fixed
Expand Down
20 changes: 10 additions & 10 deletions mcp.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,52 +3,52 @@
"hostinger-hosting": {
"command": "npx",
"args": ["--yes", "--package=@hostinger/mcp@latest", "hostinger-hosting-mcp"],
"env": { "USER_AGENT": "plugin;cursor;0.3.3" }
"env": { "USER_AGENT": "plugin;cursor;0.3.4" }
},
"hostinger-wordpress": {
"command": "npx",
"args": ["--yes", "--package=@hostinger/mcp@latest", "hostinger-wordpress-mcp"],
"env": { "USER_AGENT": "plugin;cursor;0.3.3" }
"env": { "USER_AGENT": "plugin;cursor;0.3.4" }
},
"hostinger-agency-hosting": {
"command": "npx",
"args": ["--yes", "--package=@hostinger/mcp@latest", "hostinger-agency-hosting-mcp"],
"env": { "USER_AGENT": "plugin;cursor;0.3.3" }
"env": { "USER_AGENT": "plugin;cursor;0.3.4" }
},
"hostinger-domains": {
"command": "npx",
"args": ["--yes", "--package=@hostinger/mcp@latest", "hostinger-domains-mcp"],
"env": { "USER_AGENT": "plugin;cursor;0.3.3" }
"env": { "USER_AGENT": "plugin;cursor;0.3.4" }
},
"hostinger-dns": {
"command": "npx",
"args": ["--yes", "--package=@hostinger/mcp@latest", "hostinger-dns-mcp"],
"env": { "USER_AGENT": "plugin;cursor;0.3.3" }
"env": { "USER_AGENT": "plugin;cursor;0.3.4" }
},
"hostinger-billing": {
"command": "npx",
"args": ["--yes", "--package=@hostinger/mcp@latest", "hostinger-billing-mcp"],
"env": { "USER_AGENT": "plugin;cursor;0.3.3" }
"env": { "USER_AGENT": "plugin;cursor;0.3.4" }
},
"hostinger-reach": {
"command": "npx",
"args": ["--yes", "--package=@hostinger/mcp@latest", "hostinger-reach-mcp"],
"env": { "USER_AGENT": "plugin;cursor;0.3.3" }
"env": { "USER_AGENT": "plugin;cursor;0.3.4" }
},
"hostinger-ecommerce": {
"command": "npx",
"args": ["--yes", "--package=@hostinger/mcp@latest", "hostinger-ecommerce-mcp"],
"env": { "USER_AGENT": "plugin;cursor;0.3.3" }
"env": { "USER_AGENT": "plugin;cursor;0.3.4" }
},
"hostinger-vps": {
"command": "npx",
"args": ["--yes", "--package=@hostinger/mcp@latest", "hostinger-vps-mcp"],
"env": { "USER_AGENT": "plugin;cursor;0.3.3" }
"env": { "USER_AGENT": "plugin;cursor;0.3.4" }
},
"hostinger-mail": {
"command": "npx",
"args": ["--yes", "--package=@hostinger/mcp@latest", "hostinger-mail-mcp"],
"env": { "USER_AGENT": "plugin;cursor;0.3.3" }
"env": { "USER_AGENT": "plugin;cursor;0.3.4" }
}
}
}
29 changes: 19 additions & 10 deletions scripts/mcp-tools.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"package": "@hostinger/mcp",
"version": "3.29.0",
"total": 468,
"version": "4.0.1",
"total": 477,
"groups": {
"agency-hosting": [
"agency-hosting_cache_clear-website",
Expand Down Expand Up @@ -159,7 +159,15 @@
"gpu_catalog_pool",
"gpu_catalog_pool-groups",
"gpu_catalog_pool-instance-types",
"gpu_catalog_pool-os-templates"
"gpu_catalog_pool-os-templates",
"gpu_exposed-services_create",
"gpu_exposed-services_delete",
"gpu_exposed-services_list",
"gpu_instances_create",
"gpu_instances_delete",
"gpu_instances_get",
"gpu_instances_list",
"gpu_instances_metrics"
],
"horizons": [
"changelog_list-entries",
Expand Down Expand Up @@ -197,10 +205,6 @@
"hosting_databases_setup-website",
"hosting_datacenters_list",
"hosting_deploy",
"hosting_deploy-js-application",
"hosting_deploy-static-website",
"hosting_deploy-wordpress-plugin",
"hosting_deploy-wordpress-theme",
"hosting_domains_create-website-parked",
"hosting_domains_create-website-subdomain",
"hosting_domains_delete-website-parked",
Expand All @@ -223,8 +227,6 @@
"hosting_git_ssh-public-key",
"hosting_git_update-auto-deployment-settings",
"hosting_headless_submit-build-report",
"hosting_import-wordpress-website",
"hosting_list-js-deployments",
"hosting_nodejs_analyse-failed-build",
"hosting_nodejs_build",
"hosting_nodejs_build-logs",
Expand All @@ -245,13 +247,18 @@
"hosting_php_get",
"hosting_php_info",
"hosting_php_reset-extensions",
"hosting_php_update",
"hosting_php_update-extensions",
"hosting_php_update-options",
"hosting_php_update-version",
"hosting_pocketbase_backend",
"hosting_pocketbase_create-backend",
"hosting_pocketbase_delete-backend",
"hosting_pocketbase_list-backends",
"hosting_pocketbase_set-superuser",
"hosting_redirects_create-website",
"hosting_redirects_delete-website",
"hosting_redirects_list-website",
"hosting_show-js-deployment-logs",
"hosting_ssl_install",
"hosting_ssl_status",
"hosting_ssl_toggle-https-redirect",
Expand Down Expand Up @@ -320,6 +327,8 @@
"reach_campaigns_get",
"reach_campaigns_list",
"reach_campaigns_performance",
"reach_campaigns_send",
"reach_campaigns_update",
"reach_contact-fields_create",
"reach_contact-fields_delete",
"reach_contact-fields_list",
Expand Down
2 changes: 1 addition & 1 deletion skills/deploy-to-hosting/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ Agency Plan sites have no Git operations; deploy archives.

1. `hosting_nodejs_list-environment-variables` for the current keys. Values come back as `********`; never send those back.
2. Build the full set: every current key plus the new ones, with real values from the project's `.env` or the user. When the real value of an existing key is unknown, ask — do not drop it.
3. Send it once; the app restarts. Values baked in at build time (Next.js `NEXT_PUBLIC_*`, Vite `VITE_*`) need a new `hosting_nodejs_start-build`.
3. Send it once; the app restarts. Values baked in at build time (Next.js `NEXT_PUBLIC_*`, Vite `VITE_*`) need a new build: deploy again with `hosting_deploy`; for local files uploaded to the hosted server, run `hosting_nodejs_start-build` again as in step 2.

Keys use uppercase letters, digits and underscores. Never commit `.env` files or repeat secret values back to the user.

Expand Down
12 changes: 7 additions & 5 deletions skills/hostinger-headless/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -192,13 +192,15 @@ has usually outlasted the job, so it returns at once. The single rule that makes
### Waiting on Hostinger: `wait.mjs`

`wait.mjs` (next to this file) waits for a slow Hostinger job in one command, so you don't spend a turn
on every check:
on every check. Run it, like `push-content.mjs`, from the home folder (`cd "$HOME" && …`): both
start the Hostinger MCP server with the user's sign-in, and a version manager's `node` (asdf, mise)
runs whatever Node the current project's `.tool-versions` names:

```bash
node <skill>/wait.mjs setup <domain> # a fresh site's setup → completed
node <skill>/wait.mjs cms <domain> <username> # a shell swap's WordPress install at /cms → valid
node <skill>/wait.mjs build <domain> <buildUuid> # the deploy build → completed, then the root serves 200
node <skill>/wait.mjs live <domain> # the root serves 200
cd "$HOME" && node <skill>/wait.mjs setup <domain> # a fresh site's setup → completed
cd "$HOME" && node <skill>/wait.mjs cms <domain> <username> # a shell swap's WordPress install at /cms → valid
cd "$HOME" && node <skill>/wait.mjs build <domain> <buildUuid> # the deploy build → completed, then the root serves 200 (http:// while SSL is pending)
cd "$HOME" && node <skill>/wait.mjs live <domain> # the root serves 200
```

Run it in the foreground, with a `--timeout` just under your tool's command limit (e.g. `--timeout 9m`
Expand Down
6 changes: 3 additions & 3 deletions skills/hostinger-headless/VERSION
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
version=3.29.0
commit=c4c3f98adbe2
built=2026-11-05
version=4.0.1
commit=9de0d1c40059
built=2026-11-13
44 changes: 34 additions & 10 deletions skills/hostinger-headless/connect/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,10 +77,10 @@ Read `<skill>/VERSION`: its line 1 is the skills version this run uses, which go
Run the bundled script. It verifies the MCP server and handles sign-in, emitting one JSON event per line on stdout. Run it as a background/streaming process. Show the user only the sign-in URL (`awaiting_user`) or a
failure's `detail`, and handle the other events silently (table below).

The script is safe and inspectable: it only checks the MCP server via `npx` and drives the OAuth sign-in (a browser flow with a localhost callback) — no other network calls, no filesystem writes.
The script is safe and inspectable: it copies the launcher to `~/.hostinger/mcp/launch.mjs`, checks the MCP server through it and drives the OAuth sign-in (a browser flow with a localhost callback) — no other network calls, no other filesystem writes.

```bash
node <skill>/connect/bootstrap.mjs
cd "$HOME" && node <skill>/connect/bootstrap.mjs
```

### Relay these events
Expand All @@ -89,11 +89,12 @@ The script emits one JSON object per line:

| Event | What to do |
| --- |--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `launcher` (`command`, `args`) | How to start the MCP server: use these for every registration (Phase 2). |
| `mcp_ok` | MCP server reachable — continue. |
| `logged_in` | Already authenticated (env token or a previous sign-in) — continue. |
| `awaiting_user` (`verificationUri`) | A browser window should have opened on the user's machine. Show the URL in plain prose and wait for the user to finish signing in. The OAuth callback lands on a localhost port, so the sign-in must be completed on this same machine. |
| `success` | Bootstrap done — continue to Phase 2. |
| `mcp_unreachable` / `login_failed` (with `detail`) | Stop and show the user the `detail`. Do not improvise a parallel setup by hand. |
| `launcher_failed` / `mcp_unreachable` / `login_failed` (with `detail`) | Stop and show the user the `detail`. Do not improvise a parallel setup by hand. |

If the environment has a `HOSTINGER_API_TOKEN` set (for example CI), the bootstrap reports `logged_in` immediately — no browser needed.

Expand All @@ -107,8 +108,8 @@ hostinger-api-mcp --login
hostinger-api-mcp --logout

# Without a global install:
npx --yes --package=@hostinger/mcp@latest hostinger-api-mcp --login
npx --yes --package=@hostinger/mcp@latest hostinger-api-mcp --logout
cd "$HOME" && node "$HOME/.hostinger/mcp/launch.mjs" --login
cd "$HOME" && node "$HOME/.hostinger/mcp/launch.mjs" --logout
```

Credentials live in `~/.config/hostinger-mcp/credentials.json` (macOS/Linux) or `%APPDATA%\hostinger-mcp\credentials.json` (Windows) and are shared by every Hostinger MCP binary. OAuth works only when the tool runs the server over its default local (stdio) transport, which is what every registration below uses; `--http` needs `HOSTINGER_API_TOKEN`.
Expand All @@ -127,8 +128,8 @@ one group says nothing about the other:

| Group | Operations | Comes from | Needed by |
|---|---|---|---|
| **Hosting** | `hosting_*` (websites, deploy, build report), `wordpress_*` | `hostinger` (`npx -y @hostinger/mcp@latest`), or the scoped servers such as `hostinger-hosting` + `hostinger-wordpress` | every build |
| **Ecommerce** | `ecommerce_*` (stores, products, shipping, payments) | **only** `hostinger-ecommerce` (`npx --package=@hostinger/mcp@latest hostinger-ecommerce-mcp`), or the Ecommerce MCP in the Hostinger Connector. Neither `hostinger` nor the scoped hosting servers include it | Ecommerce backends (chosen later, in refine) |
| **Hosting** | `hosting_*` (websites, deploy, build report), `wordpress_*` | `hostinger` (`<command> <launcher>`), or the scoped servers such as `hostinger-hosting` + `hostinger-wordpress` | every build |
| **Ecommerce** | `ecommerce_*` (stores, products, shipping, payments) | **only** `hostinger-ecommerce` (`<command> <launcher> hostinger-ecommerce-mcp`), or the Ecommerce MCP in the Hostinger Connector. Neither `hostinger` nor the scoped hosting servers include it | Ecommerce backends (chosen later, in refine) |

Check each group on its own, right here at connect, before anything else:

Expand All @@ -148,8 +149,8 @@ Most coding tools load MCP servers only when they start, so a server registered
until the tool restarts. When either tool group above is missing:

1. **Register the missing servers** in the tool's MCP config, as the tool route below shows: `hostinger`
(`npx -y @hostinger/mcp@latest`) if the hosting group is missing, and `hostinger-ecommerce`
(`npx --package=@hostinger/mcp@latest hostinger-ecommerce-mcp`) if the ecommerce group is missing.
(`<command> <launcher>`) if the hosting group is missing, and `hostinger-ecommerce`
(`<command> <launcher> hostinger-ecommerce-mcp`) if the ecommerce group is missing.
Skip a server that is already registered under its name. When neither group is there, register
both: the backend isn't chosen until refine, and one restart then covers every backend.
2. **Write `connect.json`** (Phase 3) before you stop. The skill folder from Phase 1 stays in place,
Expand All @@ -163,6 +164,29 @@ until the tool restarts. When either tool group above is missing:

If a tool loads new servers without a restart (VS Code), use them right away and skip steps 3–4.

**Every registration and every command that starts the MCP server goes through the launcher**
(`~/.hostinger/mcp/launch.sh` and `launch.mjs`, which the bootstrap writes): never `npx` directly, with or without
`--prefix`. The tool starts the server, and you run commands, in the user's project, often a cloned
repository or template. npx run there puts the project's `node_modules/.bin` first on PATH and reads
its `.npmrc`, so whoever wrote the project runs their own `node` with the user's Hostinger sign-in.
The launcher runs npx from the home folder instead. A registration runs exactly the bootstrap's
`launcher` event, never a bare `node`: a version manager (asdf, mise) picks the Node that the project's
own `.tool-versions` names. On macOS and Linux the event is `/bin/sh` with `launch.sh`, which finds
Node only after moving to the home folder, so Node upgrades don't break it; on Windows it is the
absolute path of `node.exe` with `launch.mjs`. Replace `<command>` and `<launcher>` with that event's
`command` and `args[0]`, in shell commands and in JSON or TOML configs alike, and never leave a
placeholder in place. In JSON and TOML configs, double every backslash of a Windows path
(`C:\\Program Files\\nodejs\\node.exe`); a single one is an escape there (`\n` in `\nodejs` becomes a
newline). Commands you run yourself start in the home folder
(`cd "$HOME" && node …`) for the same reason.

**An existing Hostinger registration is "already registered" only when it runs exactly the
bootstrap's `launcher` event** (same `command`, `args[0]` the launcher, plus `hostinger-ecommerce-mcp`
for that server). Before you trust one (both groups present, or a name the tool lists), check its
command (Claude Code: `claude mcp get <name>`; otherwise the tool's MCP config). Anything else, such as
`npx`, a bare `node` or `hostinger-api-mcp`, or any other command or path than the event's:
remove it and register it again through the launcher, then follow *register, restart, resume*.

| Tool | Route |
|-------------|---------------------------------|
| Claude Code | `connect/tools/claude-code.md` |
Expand All @@ -173,7 +197,7 @@ If a tool loads new servers without a restart (VS Code), use them right away and
| Devin | `connect/tools/devin.md` |

If the user's tool isn't listed yet, connect it the generic way: register both Hostinger MCP servers
in that tool's MCP config (command `npx`, args as above), then follow *register, restart, resume*.
in that tool's MCP config (command `<command>`, args `<launcher>` as above), then follow *register, restart, resume*.

### The skills come from Phase 1 only

Expand Down
Loading
Loading