hostinger-api-mcp 3.28.0 → 3.28.2

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 (45) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/gemini-extension.json +1 -1
  3. package/package.json +1 -1
  4. package/server.json +2 -2
  5. package/skills/headless/VERSION +2 -2
  6. package/skills/headless/connect/SKILL.md +51 -3
  7. package/skills/headless/connect/tools/antigravity.md +21 -19
  8. package/skills/headless/connect/tools/claude-code.md +24 -14
  9. package/skills/headless/connect/tools/codex.md +21 -15
  10. package/skills/headless/connect/tools/cursor.md +20 -14
  11. package/skills/headless/connect/tools/devin.md +23 -18
  12. package/skills/headless/connect/tools/vscode.md +24 -14
  13. package/skills/headless/steps/03-provision/ecommerce/SKILL.md +10 -17
  14. package/skills/headless/steps/04-content-model/ecommerce/SKILL.md +3 -3
  15. package/skills/headless/steps/08-deploy/SKILL.md +30 -8
  16. package/src/core/skills.js +30 -30
  17. package/src/core/skills.ts +30 -30
  18. package/src/servers/agency-hosting.js +1 -1
  19. package/src/servers/agency-hosting.ts +1 -1
  20. package/src/servers/agent-readiness.js +1 -1
  21. package/src/servers/agent-readiness.ts +1 -1
  22. package/src/servers/all.js +1 -1
  23. package/src/servers/all.ts +1 -1
  24. package/src/servers/billing.js +1 -1
  25. package/src/servers/billing.ts +1 -1
  26. package/src/servers/dns.js +1 -1
  27. package/src/servers/dns.ts +1 -1
  28. package/src/servers/domains.js +1 -1
  29. package/src/servers/domains.ts +1 -1
  30. package/src/servers/ecommerce.js +1 -1
  31. package/src/servers/ecommerce.ts +1 -1
  32. package/src/servers/gpu.js +1 -1
  33. package/src/servers/gpu.ts +1 -1
  34. package/src/servers/horizons.js +1 -1
  35. package/src/servers/horizons.ts +1 -1
  36. package/src/servers/hosting.js +1 -1
  37. package/src/servers/hosting.ts +1 -1
  38. package/src/servers/mail.js +1 -1
  39. package/src/servers/mail.ts +1 -1
  40. package/src/servers/reach.js +1 -1
  41. package/src/servers/reach.ts +1 -1
  42. package/src/servers/vps.js +1 -1
  43. package/src/servers/vps.ts +1 -1
  44. package/src/servers/wordpress.js +1 -1
  45. package/src/servers/wordpress.ts +1 -1
package/CHANGELOG.md CHANGED
@@ -4,6 +4,20 @@ 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.28.2 — 2026-11-04
8
+
9
+ ### Also in this release
10
+
11
+ - Bundled agent skills: `skills/headless/VERSION`, `skills/headless/steps/08-deploy/SKILL.md`
12
+ - Other files: `src/core/skills.js`, `src/core/skills.ts`
13
+
14
+ ## v3.28.1 — 2026-11-04
15
+
16
+ ### Also in this release
17
+
18
+ - Bundled agent skills: 11 files
19
+ - Other files: `src/core/skills.js`, `src/core/skills.ts`
20
+
7
21
  ## v3.28.0 — 2026-11-04
8
22
 
9
23
  ### Also in this release
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hostinger-api-mcp",
3
- "version": "3.28.0",
3
+ "version": "3.28.2",
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": "3.28.0",
3
+ "version": "3.28.2",
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.28.0",
9
+ "version": "3.28.2",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "npm",
13
13
  "identifier": "@hostinger/mcp",
14
- "version": "3.28.0",
14
+ "version": "3.28.2",
15
15
  "transport": {
16
16
  "type": "stdio"
17
17
  },
@@ -1,3 +1,3 @@
1
- version=3.28.0
2
- commit=0b30a7c65edb
1
+ version=3.28.2
2
+ commit=96c74d42d44e
3
3
  built=2026-11-04
@@ -72,10 +72,58 @@ npx --yes --package=@hostinger/mcp@latest hostinger-api-mcp --login
72
72
  npx --yes --package=@hostinger/mcp@latest hostinger-api-mcp --logout
73
73
  ```
74
74
 
75
- 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 in stdio mode; `--http` needs `HOSTINGER_API_TOKEN`.
75
+ 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`.
76
76
 
77
77
  ## Phase 2 - Route to the specific tool instructions
78
78
 
79
+ **Use the Hostinger connector only through your tool's native MCP tools** (`mcp__hostinger__*`,
80
+ `mcp__hostinger-*__*`, or however your tool names them). Never spawn the MCP server yourself and
81
+ never write a JSON-RPC client to talk to it: every connector call must be a visible MCP tool call
82
+ the user can follow and approve, not a script.
83
+
84
+ ### Check both tool groups, not just "some Hostinger tools"
85
+
86
+ The build needs **two** groups of connector operations, and they come from different servers. Having
87
+ one group says nothing about the other:
88
+
89
+ | Group | Operations | Comes from | Needed by |
90
+ |---|---|---|---|
91
+ | **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 |
92
+ | **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) |
93
+
94
+ Check each group on its own, right here at connect, before anything else:
95
+
96
+ - **Hosting:** a Hostinger search tool finds `hosting_websites_list` (e.g. search "list websites").
97
+ - **Ecommerce:** a tool from the `hostinger-ecommerce` server is in the session (Claude Code:
98
+ `mcp__hostinger-ecommerce__*`), and its search finds `ecommerce_stores_list` (e.g. search "list stores").
99
+
100
+ Only when **both** pass are the Hostinger tools "in this session". If either is missing, the tools
101
+ are **not** in this session: follow *register, restart, resume* below for the missing server(s) now,
102
+ even though other Hostinger tools respond. Don't wait for refine to choose a backend: the restart
103
+ costs the least before the user has been asked anything, and finding the gap at provision forces a
104
+ second restart in the middle of the build.
105
+
106
+ ### When the Hostinger tools aren't in this session: register, restart, resume
107
+
108
+ Most coding tools load MCP servers only when they start, so a server registered mid-run isn't usable
109
+ until the tool restarts. When either tool group above is missing:
110
+
111
+ 1. **Register the missing servers** in the tool's MCP config, as the tool route below shows: `hostinger`
112
+ (`npx -y @hostinger/mcp@latest`) if the hosting group is missing, and `hostinger-ecommerce`
113
+ (`npx --package=@hostinger/mcp@latest hostinger-ecommerce-mcp`) if the ecommerce group is missing.
114
+ Skip a server that is already registered under its name. When neither group is there, register
115
+ both: the backend isn't chosen until refine, and one restart then covers every backend.
116
+ 2. **Pull the skills and write `connect.json`** (the route's skills step and Phase 3) before you stop,
117
+ so the next run starts from them.
118
+ 3. **Send the first message and end your turn.** It follows *The first message* in
119
+ `headless/SKILL.md`: the sign-in link if one was needed, then one line saying Hostinger is set up
120
+ and asking the user to restart the tool (the route says how) and paste the same prompt again so the
121
+ build continues from there. This is a pause, not a run ending: no final report and no build report.
122
+ 4. **On the next run** the tools are loaded, so connect skips registration and check-state resumes the
123
+ domain's workspace.
124
+
125
+ If a tool loads new servers without a restart (VS Code), use them right away and skip steps 3–4.
126
+
79
127
  | Tool | Route |
80
128
  |-------------|---------------------------------|
81
129
  | Claude Code | `connect/tools/claude-code.md` |
@@ -85,8 +133,8 @@ Credentials live in `~/.config/hostinger-mcp/credentials.json` (macOS/Linux) or
85
133
  | Antigravity | `connect/tools/antigravity.md` |
86
134
  | Devin | `connect/tools/devin.md` |
87
135
 
88
- If the user's tool isn't listed yet, connect it the generic way (register the Hostinger MCP server
89
- for that tool, or drive `npx --yes --package=@hostinger/mcp@latest hostinger-api-mcp` over stdio) and continue.
136
+ If the user's tool isn't listed yet, connect it the generic way: register both Hostinger MCP servers
137
+ in that tool's MCP config (command `npx`, args as above), then follow *register, restart, resume*.
90
138
 
91
139
  ### Always pull the latest skills (never run a stale copy)
92
140
 
@@ -8,25 +8,18 @@ description: "Specific Antigravity Hostinger MCP Server connection instructions
8
8
  - Make Hostinger MCP tools and Skills available in Google Antigravity.
9
9
  - Don't provision hosting, create stores, install WordPress, or deploy by hand here — the skill does all of that. This entry stops at signed in and checking that Hostinger MCP and skills are reachable.
10
10
 
11
- ## Step 1 — Make the connector callable (no restart needed)
12
-
13
- The later stages drive the Hostinger connector. If its Hostinger tools already respond in this
14
- session, use them and move on.
15
-
16
- If they don't, **don't rely on registering the server and restarting** — Antigravity loads MCP servers
17
- when the editor starts, and you can't restart it mid-run. The Hostinger MCP runs as a local **stdio**
18
- process and the bootstrap already signed you in, so talk to it directly for this run: spawn
19
- `npx -y @hostinger/mcp@latest` and speak newline-delimited JSON-RPC 2.0 over its stdin/stdout
20
- (`initialize` → `notifications/initialized` → `tools/call`). It reuses your cached sign-in automatically
21
- (`~/.config/hostinger-mcp/credentials.json`, or `HOSTINGER_API_TOKEN`) — no tokens to handle. It
22
- exposes `search`, `execute`, `multi-execute`; everything the stages need goes through `execute`, and a
23
- result is in `reply.result.content[0].text`. Write the little client yourself (~20 lines), keep one
24
- process alive for the whole run, and use it wherever a stage calls the connector.
25
-
26
- **To persist it for future Antigravity sessions** (optional), add the server to
27
- `~/.gemini/antigravity/mcp_config.json` (Windows: `C:\Users\<USERNAME>\.gemini\antigravity\mcp_config.json`) —
28
- reachable from the Agent panel's "..." → MCP Servers → Manage MCP Servers → View raw config — then fully
29
- quit and reopen Antigravity once so it loads:
11
+ ## Step 1 — Make the MCP tools available
12
+
13
+ The later stages drive the Hostinger connector through Antigravity's native MCP tools. Check **both** tool groups (hosting and ecommerce), as *Check both tool groups* in `connect/SKILL.md`
14
+ says: other Hostinger tools responding doesn't mean the `hostinger-ecommerce` ones are there. Both
15
+ respond → use them and move on.
16
+
17
+ If either is missing, add the missing server(s) to `~/.gemini/antigravity/mcp_config.json` (Windows:
18
+ `C:\Users\<USERNAME>\.gemini\antigravity\mcp_config.json`), which you can reach from the Agent panel's
19
+ "..." → MCP Servers → Manage MCP Servers → View raw config. Merge them into any existing
20
+ `mcpServers` rather than replacing the file. The bootstrap already signed you in, so they reuse the
21
+ cached sign-in (`~/.config/hostinger-mcp/credentials.json`, or `HOSTINGER_API_TOKEN`) and there are
22
+ no tokens to handle:
30
23
 
31
24
  ```json
32
25
  {
@@ -34,11 +27,20 @@ quit and reopen Antigravity once so it loads:
34
27
  "hostinger": {
35
28
  "command": "npx",
36
29
  "args": ["-y", "@hostinger/mcp@latest"]
30
+ },
31
+ "hostinger-ecommerce": {
32
+ "command": "npx",
33
+ "args": ["--package=@hostinger/mcp@latest", "hostinger-ecommerce-mcp"]
37
34
  }
38
35
  }
39
36
  }
40
37
  ```
41
38
 
39
+ Antigravity loads MCP servers only when the editor starts, so follow *register, restart, resume* in
40
+ `connect/SKILL.md`: finish Step 2 and `connect.json`, then ask the user to fully quit and reopen
41
+ Antigravity and paste the same prompt. Never spawn the server yourself or write a JSON-RPC client to
42
+ reach it.
43
+
42
44
  ## Step 2 — Install the skills and hand off
43
45
 
44
46
  Download the Hostinger skills locally **at the start of every run** so your agent then reads the files
@@ -9,20 +9,30 @@ description: "Specific Claude Code Hostinger MCP Server connection instructions
9
9
  - Don't provision hosting, create stores, install WordPress, or deploy by hand here — the skill does all of that. This entry stops at signed in and checking that Hostinger MCP and skills are available.
10
10
 
11
11
 
12
- ## Step 1 — Make the MCP callable (no restart needed)
13
-
14
- Stages 2–10 drive the Hostinger connector. If its tools are already in this session
15
- (`mcp__hostinger__*`, or the scoped `mcp__hostinger-*__*`), use them and move on.
16
-
17
- If they aren't, **don't register the server and restart** — Claude Code only loads MCP servers at
18
- startup, but you don't need it to. The Hostinger MCP runs as a local **stdio** process and the
19
- bootstrap already signed you in, so talk to it directly: spawn `npx -y @hostinger/mcp@latest` and
20
- speak newline-delimited JSON-RPC 2.0 over its stdin/stdout (`initialize` →
21
- `notifications/initialized` → `tools/call`). It reuses your cached sign-in automatically
22
- (`~/.config/hostinger-mcp/credentials.json`, or `HOSTINGER_API_TOKEN`) — no tokens to handle. It
23
- exposes `search`, `execute`, `multi-execute`; everything the stages need goes through `execute`, and
24
- a result is in `reply.result.content[0].text`. Write the little client yourself (~20 lines), keep one
25
- process alive for the whole run, and use it wherever a stage calls the connector.
12
+ ## Step 1 — Make the MCP tools available
13
+
14
+ Stages 2–10 drive the Hostinger connector through Claude Code's native MCP tools. Check **both** tool
15
+ groups as *Check both tool groups* in `connect/SKILL.md` says:
16
+
17
+ - **Hosting:** `mcp__hostinger__*`, or the scoped `mcp__hostinger-hosting__*`.
18
+ - **Ecommerce:** `mcp__hostinger-ecommerce__*`. The scoped servers (`hostinger-hosting`,
19
+ `hostinger-wordpress`, `hostinger-domains`, …) never include it, so a session full of
20
+ `mcp__hostinger-*__*` tools can still be missing it.
21
+
22
+ Both present → use them and move on. Either missing → register the missing server(s) at user scope
23
+ now (`claude mcp list` shows what's already registered; skip those). The bootstrap already signed you
24
+ in, so they reuse the cached sign-in (`~/.config/hostinger-mcp/credentials.json`, or
25
+ `HOSTINGER_API_TOKEN`) and there are no tokens to handle:
26
+
27
+ ```bash
28
+ claude mcp add hostinger --scope user -- npx -y @hostinger/mcp@latest # hosting group missing
29
+ claude mcp add hostinger-ecommerce --scope user -- npx --package=@hostinger/mcp@latest hostinger-ecommerce-mcp # ecommerce group missing
30
+ ```
31
+
32
+ Claude Code loads MCP servers only at startup, so follow *register, restart, resume* in
33
+ `connect/SKILL.md`: finish Step 2 and `connect.json`, then ask the user to exit Claude Code, start it
34
+ again in the same folder (`claude`, or `claude --continue` to keep this conversation) and paste the
35
+ same prompt. Never spawn the server yourself or write a JSON-RPC client to reach it.
26
36
 
27
37
  ## Step 2 — Install the skills and hand off
28
38
 
@@ -8,31 +8,37 @@ description: "Specific Codex Hostinger MCP Server connection instructions for th
8
8
  - Make Hostinger MCP tools and Skills available in Codex.
9
9
  - Don't provision hosting, create stores, install WordPress, or deploy by hand here — the skill does all of that. This entry stops at signed in and checking that Hostinger MCP and skills are reachable.
10
10
 
11
- ## Step 1 — Make the connector callable (no restart needed)
11
+ ## Step 1 — Make the MCP tools available
12
12
 
13
- The later stages drive the Hostinger connector. If its Hostinger tools already respond in this
14
- session, use them and move on.
13
+ The later stages drive the Hostinger connector through Codex's native MCP tools. Check **both** tool groups (hosting and ecommerce), as *Check both tool groups* in `connect/SKILL.md`
14
+ says: other Hostinger tools responding doesn't mean the `hostinger-ecommerce` ones are there. Both
15
+ respond → use them and move on.
15
16
 
16
- If they don't, **don't rely on registering the server and restarting** — Codex loads MCP servers when
17
- it starts, and you can't restart it mid-run. The Hostinger MCP runs as a local **stdio** process and the
18
- bootstrap already signed you in, so talk to it directly for this run: spawn `npx -y @hostinger/mcp@latest`
19
- and speak newline-delimited JSON-RPC 2.0 over its stdin/stdout (`initialize` →
20
- `notifications/initialized` → `tools/call`). It reuses your cached sign-in automatically
21
- (`~/.config/hostinger-mcp/credentials.json`, or `HOSTINGER_API_TOKEN`) — no tokens to handle. It
22
- exposes `search`, `execute`, `multi-execute`; everything the stages need goes through `execute`, and a
23
- result is in `reply.result.content[0].text`. Write the little client yourself (~20 lines), keep one
24
- process alive for the whole run, and use it wherever a stage calls the connector.
17
+ If either is missing, register the missing server(s); skip one already registered. The bootstrap already signed you in, so they reuse the cached
18
+ sign-in (`~/.config/hostinger-mcp/credentials.json`, or `HOSTINGER_API_TOKEN`) and there are no tokens
19
+ to handle:
25
20
 
26
- **To persist it for future Codex sessions** (optional), register the server with
27
- `codex mcp add hostinger -- npx -y @hostinger/mcp@latest`, or add it to `~/.codex/config.toml`, then
28
- restart Codex so it loads:
21
+ ```bash
22
+ codex mcp add hostinger -- npx -y @hostinger/mcp@latest
23
+ codex mcp add hostinger-ecommerce -- npx --package=@hostinger/mcp@latest hostinger-ecommerce-mcp
24
+ ```
25
+
26
+ or add them to `~/.codex/config.toml`:
29
27
 
30
28
  ```toml
31
29
  [mcp_servers.hostinger]
32
30
  command = "npx"
33
31
  args = ["-y", "@hostinger/mcp@latest"]
32
+
33
+ [mcp_servers.hostinger-ecommerce]
34
+ command = "npx"
35
+ args = ["--package=@hostinger/mcp@latest", "hostinger-ecommerce-mcp"]
34
36
  ```
35
37
 
38
+ Codex loads MCP servers only when it starts, so follow *register, restart, resume* in
39
+ `connect/SKILL.md`: finish Step 2 and `connect.json`, then ask the user to restart Codex and paste the
40
+ same prompt. Never spawn the server yourself or write a JSON-RPC client to reach it.
41
+
36
42
  ## Step 2 — Install the skills and hand off
37
43
 
38
44
  Download the Hostinger skills locally **at the start of every run** so your agent then reads the files
@@ -32,9 +32,17 @@ npm install -g @hostinger/mcp
32
32
  hostinger-api-mcp --version
33
33
  ```
34
34
 
35
- ### Persist for future Cursor sessions (optional)
35
+ ### Register the servers in Cursor
36
36
 
37
- Register the server in `.cursor/mcp.json` (project) or `~/.cursor/mcp.json` (global), then fully quit and reopen Cursor once so it loads. **Do not** put `HOSTINGER_API_TOKEN` in this file when you want OAuth — leave the token unset so stdio OAuth can run:
37
+ Check **both** tool groups, as *Check both tool groups* in `connect/SKILL.md` says: hosting
38
+ (`mcp__hostinger__*` or `mcp__hostinger-hosting__*`) **and** ecommerce (`mcp__hostinger-ecommerce__*`).
39
+ The scoped `mcp__hostinger-*__*` servers never include ecommerce, so they alone don't count. Both
40
+ present → skip registration: go to Step 2 only if you still need sign-in, otherwise go to Step 3.
41
+
42
+ If either is missing, register the missing server(s) in `~/.cursor/mcp.json` (global, so every project and every
43
+ later run has them). Merge them into any existing `mcpServers` rather than replacing the file.
44
+ **Do not** put `HOSTINGER_API_TOKEN` in this file when you want OAuth: leave the token unset so
45
+ OAuth can run:
38
46
 
39
47
  ```json
40
48
  {
@@ -42,12 +50,20 @@ Register the server in `.cursor/mcp.json` (project) or `~/.cursor/mcp.json` (glo
42
50
  "hostinger": {
43
51
  "command": "npx",
44
52
  "args": ["--yes", "--package=@hostinger/mcp@latest", "hostinger-api-mcp"]
53
+ },
54
+ "hostinger-ecommerce": {
55
+ "command": "npx",
56
+ "args": ["--yes", "--package=@hostinger/mcp@latest", "hostinger-ecommerce-mcp"]
45
57
  }
46
58
  }
47
59
  }
48
60
  ```
49
61
 
50
- If Hostinger MCP tools are already in this session (`mcp__hostinger__*` / `mcp__hostinger-*__*`), skip ahead to Step 2 only if you still need sign-in; otherwise go to Step 3.
62
+ Cursor loads MCP servers only when the editor starts, so after Step 2 and Step 3 follow
63
+ *register, restart, resume* in `connect/SKILL.md`: ask the user to fully quit and reopen Cursor
64
+ (and, if Cursor asks, enable the two Hostinger servers under Settings → MCP), then paste the same
65
+ prompt. Never spawn the server yourself or write a JSON-RPC client to reach it: every connector call
66
+ must be a native MCP tool call.
51
67
 
52
68
  ## Step 2 — Authenticate with OAuth (browser opens)
53
69
 
@@ -84,17 +100,7 @@ npx --yes --package=@hostinger/mcp@latest hostinger-api-mcp --logout
84
100
 
85
101
  **API token (optional, CI / scripts):** set `HOSTINGER_API_TOKEN` in the environment before launching Cursor. When present it always wins and no OAuth code runs. Do not commit the token.
86
102
 
87
- ## Step 3 — Use the connector in this run (no Cursor restart)
88
-
89
- Cursor only loads registered MCP servers when the editor starts, so a mid-run `.cursor/mcp.json` change will not attach tools to **this** session. For the rest of this run, talk to the local stdio server directly: spawn
90
-
91
- ```bash
92
- npx --yes --package=@hostinger/mcp@latest hostinger-api-mcp
93
- ```
94
-
95
- and speak newline-delimited JSON-RPC 2.0 over its stdin/stdout (`initialize` → `notifications/initialized` → `tools/call`). It reuses the cached sign-in from Step 2 (or `HOSTINGER_API_TOKEN`) — no tokens to handle in chat. It exposes `search`, `execute`, and `multi-execute`; everything the stages need goes through `execute`, and a result is in `reply.result.content[0].text`. Keep one process alive for the whole run.
96
-
97
- ## Step 4 — Install the skills and hand off
103
+ ## Step 3 — Install the skills and hand off
98
104
 
99
105
  Download the Hostinger skills locally **at the start of every run** so your agent then reads the files
100
106
  directly with no further network calls during the run. **Always pull the latest and overwrite any
@@ -8,32 +8,37 @@ description: "Specific Devin Hostinger MCP Server connection instructions for th
8
8
  - Make Hostinger MCP tools and Skills available in Devin.
9
9
  - Don't provision hosting, create stores, install WordPress, or deploy by hand here — the skill does all of that. This entry stops at signed in and checking that Hostinger MCP and skills are reachable.
10
10
 
11
- ## Step 1 — Make the connector callable
11
+ ## Step 1 — Make the MCP tools available
12
12
 
13
- The later stages drive the Hostinger connector. If its Hostinger tools already respond in this
14
- session, use them and move on.
13
+ The later stages drive the Hostinger connector through Devin's native MCP tools. Check **both** tool groups (hosting and ecommerce), as *Check both tool groups* in `connect/SKILL.md`
14
+ says: other Hostinger tools responding doesn't mean the `hostinger-ecommerce` ones are there. Both
15
+ respond → use them and move on.
15
16
 
16
- If they don't, register the Hostinger MCP server for Devin. The local MCP runs as a **stdio** process
17
- and the bootstrap already signed you in, so it reuses your cached sign-in automatically
18
- (`~/.config/hostinger-mcp/credentials.json`, or `HOSTINGER_API_TOKEN`) — no tokens to handle.
17
+ If either is missing, register the missing server(s) for Devin; skip one already registered. The bootstrap already signed you in, so they reuse the
18
+ cached sign-in (`~/.config/hostinger-mcp/credentials.json`, or `HOSTINGER_API_TOKEN`) and there are no
19
+ tokens to handle.
19
20
 
20
- - **Devin CLI:** `devin mcp add hostinger -- npx -y @hostinger/mcp@latest`
21
- - **Devin app:** Settings → MCP Marketplace → **Add Your Own**, transport **STDIO**, with:
21
+ - **Devin CLI:**
22
+
23
+ ```bash
24
+ devin mcp add hostinger -- npx -y @hostinger/mcp@latest
25
+ devin mcp add hostinger-ecommerce -- npx --package=@hostinger/mcp@latest hostinger-ecommerce-mcp
26
+ ```
27
+
28
+ - **Devin app:** Settings → MCP Marketplace → **Add Your Own**, transport **STDIO**, once per server:
22
29
 
23
30
  ```json
24
- {
25
- "command": "npx",
26
- "args": ["-y", "@hostinger/mcp@latest"]
27
- }
31
+ { "command": "npx", "args": ["-y", "@hostinger/mcp@latest"] }
28
32
  ```
29
33
 
30
- On Devin Desktop, fully quit and reopen the app once after adding the server so it loads.
34
+ ```json
35
+ { "command": "npx", "args": ["--package=@hostinger/mcp@latest", "hostinger-ecommerce-mcp"] }
36
+ ```
31
37
 
32
- If you can't reach the registered server from this run, drive `npx -y @hostinger/mcp@latest` directly
33
- over stdio instead: spawn it and speak newline-delimited JSON-RPC 2.0 over its stdin/stdout
34
- (`initialize` → `notifications/initialized` → `tools/call`). It exposes `search`, `execute`,
35
- `multi-execute`; everything the stages need goes through `execute`, and a result is in
36
- `reply.result.content[0].text`.
38
+ If the tools still aren't in this session, follow *register, restart, resume* in `connect/SKILL.md`:
39
+ finish Step 2 and `connect.json`, then ask the user to restart the Devin session (on Devin Desktop,
40
+ fully quit and reopen the app) and paste the same prompt. Never spawn the server yourself or write a
41
+ JSON-RPC client to reach it.
37
42
 
38
43
  ## Step 2 — Install the skills and hand off
39
44
 
@@ -8,15 +8,16 @@ description: "Specific VS Code Hostinger MCP Server connection instructions for
8
8
  - Make Hostinger MCP tools and Skills available in VS Code (GitHub Copilot / agent mode).
9
9
  - Don't provision hosting, create stores, install WordPress, or deploy by hand here — the skill does all of that. This entry stops at signed in and checking that Hostinger MCP and skills are reachable.
10
10
 
11
- ## Step 1 — Make the connector callable
11
+ ## Step 1 — Make the MCP tools available
12
12
 
13
- The later stages drive the Hostinger connector. If its Hostinger tools already respond in this
14
- session, use them and move on.
13
+ The later stages drive the Hostinger connector through VS Code's native MCP tools. Check **both** tool groups (hosting and ecommerce), as *Check both tool groups* in `connect/SKILL.md`
14
+ says: other Hostinger tools responding doesn't mean the `hostinger-ecommerce` ones are there. Both
15
+ respond → use them and move on.
15
16
 
16
- If they don't, register the Hostinger MCP server for VS Code. The local MCP runs as a **stdio**
17
- process and the bootstrap already signed you in, so it reuses your cached sign-in automatically
18
- (`~/.config/hostinger-mcp/credentials.json`, or `HOSTINGER_API_TOKEN`) — no tokens to handle. Add it to
19
- `.vscode/mcp.json` (workspace) or your user `settings.json` under `mcp`:
17
+ If either is missing, register the missing server(s) for VS Code; skip one already registered. The bootstrap already signed you in, so they reuse
18
+ the cached sign-in (`~/.config/hostinger-mcp/credentials.json`, or `HOSTINGER_API_TOKEN`) and there are
19
+ no tokens to handle. Add them to `.vscode/mcp.json` (workspace) or your user `settings.json` under
20
+ `mcp`:
20
21
 
21
22
  ```json
22
23
  // .vscode/mcp.json
@@ -26,21 +27,30 @@ process and the bootstrap already signed you in, so it reuses your cached sign-i
26
27
  "type": "stdio",
27
28
  "command": "npx",
28
29
  "args": ["-y", "@hostinger/mcp@latest"]
30
+ },
31
+ "hostinger-ecommerce": {
32
+ "type": "stdio",
33
+ "command": "npx",
34
+ "args": ["--package=@hostinger/mcp@latest", "hostinger-ecommerce-mcp"]
29
35
  }
30
36
  }
31
37
  }
32
38
  ```
33
39
 
34
- Or add it in one command: `code --add-mcp '{"name":"hostinger","command":"npx","args":["-y","@hostinger/mcp@latest"]}'`.
35
- VS Code picks up the server and its tools become available immediately — no editor restart needed.
40
+ Or add them in two commands:
41
+
42
+ ```bash
43
+ code --add-mcp '{"name":"hostinger","command":"npx","args":["-y","@hostinger/mcp@latest"]}'
44
+ code --add-mcp '{"name":"hostinger-ecommerce","command":"npx","args":["--package=@hostinger/mcp@latest","hostinger-ecommerce-mcp"]}'
45
+ ```
46
+
47
+ VS Code picks up new servers and their tools become available right away, with no editor restart.
36
48
  (Alternatively, the official Hostinger Connector extension installs the same server:
37
49
  `code --install-extension hostinger-official.hostinger-connector`.)
38
50
 
39
- If you can't reach the registered server from this run, drive `npx -y @hostinger/mcp@latest` directly
40
- over stdio instead: spawn it and speak newline-delimited JSON-RPC 2.0 over its stdin/stdout
41
- (`initialize` → `notifications/initialized` → `tools/call`). It exposes `search`, `execute`,
42
- `multi-execute`; everything the stages need goes through `execute`, and a result is in
43
- `reply.result.content[0].text`.
51
+ If the tools still don't show up, follow *register, restart, resume* in `connect/SKILL.md`: finish
52
+ Step 2 and `connect.json`, then ask the user to run **Developer: Reload Window** and paste the same
53
+ prompt. Never spawn the server yourself or write a JSON-RPC client to reach it.
44
54
 
45
55
  ## Step 2 — Install the skills and hand off
46
56
 
@@ -17,26 +17,19 @@ Provision a **Hostinger Ecommerce** backend for `<domain>` and prove it is ready
17
17
 
18
18
  > ## ⚠️ Prerequisite: the `hostinger-ecommerce` MCP server must be connected
19
19
  > Store management is **not** in the `hosting`/`wordpress` MCP groups — it's the separate
20
- > **`hostinger-ecommerce`** group (`ecommerce_*` ops, OAuth-backed, no API token needed). If those
21
- > tools aren't available, add the server and **reconnect the session** before continuing:
20
+ > **`hostinger-ecommerce`** group (`ecommerce_*` ops, OAuth-backed, no API token needed). Connect
21
+ > registers it alongside `hostinger`, so its tools are normally already in the session. If they
22
+ > aren't (for example, a tool connected before connect registered both servers), register it now. The
23
+ > command for each tool is in its `connect/tools/<tool>.md`; for Claude Code:
22
24
  > ```bash
23
- > claude mcp add-json hostinger-ecommerce '{"command":"npx","args":["--package=@hostinger/mcp@latest","hostinger-ecommerce-mcp"],"env":{"USER_AGENT":"extension;claude-code;via-cursor;1.4.2"}}' --scope user
25
+ > claude mcp add hostinger-ecommerce --scope user -- npx --package=@hostinger/mcp@latest hostinger-ecommerce-mcp
24
26
  > ```
25
- > (For other tools, enable the **Ecommerce** MCP in the Hostinger Connector.) A newly added MCP server
26
- > only loads on a session restart/reconnect.
27
+ > (Or enable the **Ecommerce** MCP in the Hostinger Connector.) A newly added MCP server only loads
28
+ > after a restart, so pause the run with *register, restart, resume* from `connect/SKILL.md`: save
29
+ > state, ask the user to restart the tool and paste the same prompt, and end your turn. Check-state then
30
+ > resumes at provision. Never spawn the server yourself or write a JSON-RPC client to reach it.
27
31
  >
28
- > **Can't restart your own session? Don't block — drive the server directly.** A coding agent usually
29
- > can't reconnect itself, so instead of stopping, run the stdio server yourself and speak MCP to it:
30
- > spawn `npx --package=@hostinger/mcp@latest hostinger-ecommerce-mcp` (same `USER_AGENT` as above) and
31
- > send newline-delimited JSON-RPC over its stdin/stdout — `initialize` → the `notifications/initialized`
32
- > notification → `tools/list` → `tools/call`, where the tools are `search` / `execute` / `multi-execute`
33
- > (call ops exactly as in-session: `{ "name": "execute", "arguments": { "operation": "…", "params": {…} } }`).
34
- > It self-authenticates with the same stored Hostinger OAuth creds as the other connected servers, so
35
- > there is **no token to handle** (keep any secret off the command line). Your sandbox may ask the user
36
- > to approve spawning it — ask once, then proceed. Only fall back to asking the user to restart if
37
- > driving the server directly isn't permitted.
38
- >
39
- > Verify the tools work (in-session or via the direct drive) with a search — e.g. "list stores" →
32
+ > Verify the tools work in-session with a search — e.g. "list stores" →
40
33
  > `ecommerce_stores_list` — before proceeding.
41
34
  > The authoritative, always-current build guide is `ecommerce_miscellaneous_custom-storefront-setup-instructions` — read it once per build.
42
35
 
@@ -12,9 +12,9 @@ OAuth). Prices are **integers in minor units** (cents) and live on **variants**.
12
12
  **In:** `content-model.md` (prepared catalog), `site.json` (`ecommerce.store_id`). **Out:** products +
13
13
  images created in the store; ids recorded back into `content-model.md`.
14
14
 
15
- > If the `hostinger-ecommerce` MCP tools aren't available, don't stop — see the prerequisite in
16
- > `../../03-provision/ecommerce/SKILL.md` (add the server, and if you can't reconnect your session,
17
- > drive the stdio server directly rather than blocking).
15
+ > If the `hostinger-ecommerce` MCP tools aren't available, follow the prerequisite in
16
+ > `../../03-provision/ecommerce/SKILL.md`: register the server, then pause with *register, restart,
17
+ > resume* from `connect/SKILL.md`. Never drive the server yourself over stdio.
18
18
 
19
19
  ## Step 1 — Create products (idempotent)
20
20
 
@@ -97,23 +97,45 @@ Zip the project **source** with `package.json` at the archive root. **Include**
97
97
  `package.json`, `package-lock.json`, `.nvmrc`. **Exclude** `node_modules/`, the build output
98
98
  (`.next/`, `dist/`, `out/`), `.git/`, and any `.htaccess` — the server installs and builds from source.
99
99
 
100
+ > ## ⚠️ Write the archive outside `~/.hostinger/` (the deploy refuses it there)
101
+ > `hosting_deploy` refuses any `path` under a hidden folder at the top of the home directory
102
+ > (`~/.hostinger`, `~/.config`, …) with *"it is, or contains, a home, system or credentials location"*:
103
+ > a deploy publishes what it reads, so the connector protects dotfolders that can hold tokens. That
104
+ > covers both `~/.hostinger/<domain>/app.zip` **and** the `~/.hostinger/<domain>/src/` directory
105
+ > itself, so neither can be passed as `path`. Keep the source in the workspace as usual, but write the
106
+ > archive to a fresh temp directory and pass that. Don't copy the archive somewhere else after a
107
+ > refusal, and don't move `src/` out of the workspace.
108
+
100
109
  ```bash
110
+ # macOS/Linux — the OS temp dir is outside the home directory
101
111
  cd ~/.hostinger/<domain>/src
102
- zip -r -X ../app.zip . -x 'node_modules/*' '.next/*' 'dist/*' 'out/*' '.git/*' '**/.htaccess'
112
+ DEPLOY_DIR=$(mktemp -d)
113
+ zip -r -X "$DEPLOY_DIR/app.zip" . -x 'node_modules/*' '.next/*' 'dist/*' 'out/*' '.git/*' '**/.htaccess'
114
+ echo "$DEPLOY_DIR/app.zip" # the absolute path to pass as `path` in Step 3
115
+ ```
116
+
117
+ ```powershell
118
+ # Windows PowerShell — %TEMP% sits under AppData, which the deploy also refuses; use a plain folder in your
119
+ # profile, which only you can write to (never a folder under C:\, which every local account can write into)
120
+ cd $HOME\.hostinger\<domain>\src
121
+ $DeployDir = Join-Path $HOME "hostinger-deploy\<domain>"; New-Item -ItemType Directory -Force $DeployDir | Out-Null
122
+ tar -a -cf "$DeployDir\app.zip" --exclude=node_modules --exclude=.next --exclude=dist --exclude=out --exclude=.git --exclude=.htaccess .
123
+ "$DeployDir\app.zip" # the absolute path to pass as `path` in Step 3
103
124
  ```
104
125
 
126
+ Delete the temp directory once the build in Step 4 is `completed`.
127
+
105
128
  ## Step 3 — Deploy (one shot: settings + upload + build)
106
129
 
107
130
  Pass the framework's build settings **inline** on the deploy call — there is no separate settings step.
108
- `path` is the archive from Step 2 (or the source directory itself; `hosting_deploy` archives a directory
109
- for you, skipping `node_modules/`, `.git/` and `.env`, but it does **not** read `.gitignore`, so the
110
- build output must already be absent).
131
+ `path` is the absolute path of the archive from Step 2, in its temp directory. Never pass a path under
132
+ `~/.hostinger/`, the `src/` directory included: the deploy refuses it (see Step 2).
111
133
 
112
134
  ```json
113
135
  { "operation": "hosting_deploy",
114
136
  "params": {
115
137
  "domain": "<domain>",
116
- "path": "/absolute/path/to/.hostinger/<domain>/app.zip",
138
+ "path": "<absolute path printed in Step 2, e.g. /var/folders/…/tmp.XXXX/app.zip>",
117
139
  "type": "nodejs",
118
140
  "appType": "<framework appType, e.g. next>",
119
141
  "outputDirectory": "<framework output dir, e.g. .next>",
@@ -224,6 +246,6 @@ still deploys as `type: "nodejs"` with its `appType` — the framework's static
224
246
  that way, and `/cms` is preserved. If a flow ever tells you to deploy a headless site as `type:
225
247
  "static"`, you are on a stale/legacy skill copy — stop and re-pull the latest skills.
226
248
 
227
- `hosting_deploy` on the local server is the only path: give its `path` either the source **directory** (it archives it for
228
- you) or a local **archive** (`zip`, `tar`, `tar.gz`, `tgz`, `7z`) — there is no separate upload or build
229
- step to fall back to.
249
+ `hosting_deploy` on the local server is the only path: give its `path` a local **archive** (`zip`, `tar`,
250
+ `tar.gz`, `tgz`, `7z`) written outside `~/.hostinger/` as in Step 2. There is no separate upload or
251
+ build step to fall back to.