hostinger-api-mcp 3.22.3 → 3.23.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,21 @@ 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.23.0 — 2026-10-30
8
+
9
+ ### Also in this release
10
+
11
+ - Bundled agent skills: `skills/headless/SKILL.md`
12
+ - Other files: `src/core/skills.js`, `src/core/skills.ts`
13
+
14
+ ## v3.22.4 — 2026-10-30
15
+
16
+ ### Also in this release
17
+
18
+ - Dependencies: `package-lock.json`
19
+ - Bundled agent skills: `skills/headless/steps/02-refine/SKILL.md`, `skills/headless/steps/03-provision/wordpress/SKILL.md`, `skills/headless/steps/05-design/SKILL.md`
20
+ - Other files: `src/core/skills.js`, `src/core/skills.ts`
21
+
7
22
  ## v3.22.3 — 2026-10-29
8
23
 
9
24
  No changes to the published artifact.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hostinger-api-mcp",
3
- "version": "3.22.3",
3
+ "version": "3.23.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": "3.22.3",
3
+ "version": "3.23.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.22.3",
9
+ "version": "3.23.0",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "npm",
13
13
  "identifier": "@hostinger/mcp",
14
- "version": "3.22.3",
14
+ "version": "3.23.0",
15
15
  "transport": {
16
16
  "type": "stdio"
17
17
  },
@@ -113,6 +113,16 @@ default only when the user says so in their own words ("you decide", "just build
113
113
  or when they said up front that no one will be there to answer; then list those defaults under gaps
114
114
  in the final report. Every step that asks the user something follows this.
115
115
 
116
+ ### Which language you write in
117
+
118
+ Write every message to the user, the final report included, in the language of the user's own
119
+ words in their latest message, so a user who writes a whole message in a new language gets replies
120
+ in that language from then on. What they quote or paste doesn't count (a business name, sample copy,
121
+ a tagline), and neither does a request for the site's language: "I want the website in Lithuanian",
122
+ written in English, sets the site's language (refine records it with the must-haves) and the replies
123
+ stay in English. When the latest message gives nothing to go by (a "yes", a link, only pasted text),
124
+ keep the language you were using.
125
+
116
126
  ### Background provision & the instance barrier
117
127
 
118
128
  **Provision always runs — what it does depends on what the domain already has.** Often onboarding on
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: headless-step-refine
3
- description: "Step 2 (refine) of the Hostinger Headless flow. Turns the user's seed — often just a domain — into a brief through conversation: asks what they want to build (purpose, audience, tone, pages, products, must-haves; images, local files, links all welcome), then *infers* the backend that fits (WordPress, Ecommerce, WordPress + Ecommerce, WordPress + WooCommerce for a one-site content+store, or Webapp for a custom app/SPA) — it never asks the user to pick a backend or a technology; the user confirms the plan in plain language, then it writes brief.md. Hostinger Ecommerce stays the default for selling; WooCommerce is chosen only when the user explicitly asks for it or wants content and a store on one WordPress site."
3
+ description: "Step 2 (refine) of the Hostinger Headless flow. Turns the user's seed — often just a domain — into a brief through conversation: asks what they want to build (purpose, audience, tone, pages, products, must-haves; images, local files, links all welcome), then *infers* the backend that fits (WordPress, Ecommerce, WordPress + Ecommerce, WordPress + WooCommerce for a one-site content+store, or Webapp for a custom app/SPA) — it never asks the user to pick a backend or a technology; it asks for the site name (suggesting a few when the user has none), the user confirms the plan in plain language, and only after their yes it writes brief.md. Hostinger Ecommerce stays the default for selling; WooCommerce is chosen only when the user explicitly asks for it or wants content and a store on one WordPress site."
4
4
  ---
5
5
 
6
6
  # headless-step-refine
@@ -9,12 +9,13 @@ Find out what the user wants to build, guess which backend fits, and write it do
9
9
  **conversation, not a form**: the pasted prompt names a domain and nothing else, so everything about
10
10
  the site comes from talking to the user.
11
11
 
12
- **Keep it short.** You must know what they are building, whether they sell and whether they'll
13
- publish content over time — enough to guess the backend — plus, when Step 2 found a project in the folder, the
14
- **Existing project** confirms. Every other question is optional: the more the user gives, the better the site, but never
15
- hold the build hostage to refinement. Fill gaps with sensible defaults and say so in the brief. A
16
- skipped question tool is not the user passing on a question; see *When you ask the user* in the
17
- top-level `SKILL.md`.
12
+ **Keep it short.** You must know what they are building, whether they sell and whether they'll publish
13
+ content over time — enough to guess the backend — plus the **site name** the user gave or picked and,
14
+ when Step 2 found a project in the folder, the **Existing project** confirms. Every other question is
15
+ optional: the more the user gives, the better the site, but never hold the build hostage to
16
+ refinement. Fill gaps with sensible defaults (never the site name) and say so in the brief. A skipped
17
+ question tool is not the user passing on a question; see *When you ask the user* in the top-level
18
+ `SKILL.md`.
18
19
 
19
20
  > **Never ask the user to choose a backend or a technology.** Don't ask "WordPress or Ecommerce?",
20
21
  > don't present WordPress/Ecommerce/WooCommerce/Webapp as options, and don't surface the backend in a
@@ -37,9 +38,10 @@ Read everything already in `~/.hostinger/<domain>/` (`state.json`, `connect.json
37
38
  or files the user dropped there) — it all counts as input.
38
39
 
39
40
  If `brief.md` already exists for this domain, **don't overwrite it**. Show the user a three-line
40
- summary (what the site is, its pages, the suggested backend) and ask: *keep it, or change
41
- something?* Keep → go to Step 6. Change → edit only what they asked for, then re-confirm (Step 5). A
42
- skipped tool result is not Keep; see *When you ask the user* in the top-level `SKILL.md`.
41
+ summary (what the site is, its pages, the suggested backend) and ask: *keep it, or change something?*
42
+ Keep → go to Step 6, unless the brief has no **Site name** section: then ask Round 1 question 4 first
43
+ and add it. Change → edit only what they asked for, then re-confirm (Step 5). A skipped tool result is
44
+ not Keep; see *When you ask the user* in the top-level `SKILL.md`.
43
45
 
44
46
  If the site is already provisioned (`site.json` exists), the backend is **fixed** — never change the
45
47
  Suggested backend on a provisioned site. Explain that switching backends means a new domain.
@@ -68,7 +70,7 @@ below in your first message, after Round 1 when Round 1 still needs asking; they
68
70
  the 3 rounds, and code that answers Round 1 never skips them. Otherwise don't ask Build mode: it
69
71
  defaults (see *Build mode* below).
70
72
 
71
- If Step 2 already answers the three Round 1 questions, skip the Round 1–3 questions below. Otherwise
73
+ If Step 2 already answers the Round 1 questions, skip the Round 1–3 questions below. Otherwise
72
74
  open with one line and **wait for the user's answer**: *"Tell me what you want to build — a
73
75
  sentence is enough. Links, screenshots or files help too. Skip anything you don't want to answer."*
74
76
 
@@ -82,13 +84,13 @@ sentence is enough. Links, screenshots or files help too. Skip anything you don'
82
84
  Ask in **short rounds of 2–3 questions**, and adapt each round to the previous answers. If your tool
83
85
  has a structured question UI (multiple choice with an "other" field), use it for the choice-shaped
84
86
  follow-up questions (pages, selling yes/no, tone) — **never for the opening "what do you want to
85
- build?" and never for the backend** (that's your decision, not theirs). **At most 3 rounds**, and
86
- stop early as soon as you can guess the backend and the user seems done — "just build it" or "you
87
- decide" means *use defaults*, not *ask again*. A skipped tool result is not their answer: re-ask
88
- that round in plain text, as *When you ask the user* in the top-level `SKILL.md` says. The re-ask
89
- repeats the round; it doesn't count toward the 3.
87
+ build?" and never for the backend** (that's your decision, not theirs). **At most 3 rounds**, and stop
88
+ early as soon as you can guess the backend and the user seems done — "just build it" or "you decide"
89
+ means *use defaults*, not *ask again*, except for the site name and the Step 5 confirm. A skipped tool
90
+ result is not their answer: re-ask that round in plain text, as *When you ask the user* in the
91
+ top-level `SKILL.md` says. The re-ask repeats the round; it doesn't count toward the 3.
90
92
 
91
- **Round 1 — what it is (required; these three decide the backend):**
93
+ **Round 1 — what it is (required; the first three decide the backend):**
92
94
 
93
95
  1. **What are you building?** The business or project, and what the site is for.
94
96
  2. **Will you sell anything on it?** Physical products, digital products, services with checkout —
@@ -97,6 +99,12 @@ repeats the round; it doesn't count toward the 3.
97
99
  3. **Will you publish content over time?** Blog posts, articles, news, recipes, portfolio pieces,
98
100
  case studies, and how often — or a handful of pages that rarely change. Skip it only when the
99
101
  answer is already unmistakable ("my personal blog", an app the user is deploying).
102
+ 4. **What's the site called?** The business or brand name the site and logo will carry. Skip it when
103
+ the user already named the business anywhere ("I run Paper Moon"), and use that name as given, even
104
+ when it differs from the domain: asking again tells them you weren't listening. With no name, or
105
+ "you decide", suggest 2–3 names that fit the business plus one taken from the domain
106
+ (`kowalski-plumbing.co.uk` → "Kowalski Plumbing"), and wait for their pick: "you decide" means
107
+ *pick from your suggestions*, because a name they never saw ends up on their logo and every page.
100
108
 
101
109
  **Round 2 — what goes on it (optional, adapt to Round 1):**
102
110
 
@@ -217,9 +225,11 @@ client-only app) — it deploys as a Node.js app either way. When unsure, defaul
217
225
 
218
226
  ## Step 5 — Confirm the plan in one message
219
227
 
220
- Send **one** message that confirms **what you'll build** — the plan, not the plumbing. Lead with the
221
- site, not the backend:
228
+ This confirm always happens, even after "you decide" or "just build it": an owner who said "go" early
229
+ hasn't seen the name or the plan yet. Send **one** message, on its own, that confirms **what you'll
230
+ build** — the plan, not the plumbing. Lead with the site, not the backend:
222
231
 
232
+ - **The name** — the site name from Round 1, as it will appear on the logo and pages.
223
233
  - **The plan** — what it is, audience, pages, products (if any), tone. Mark anything you defaulted
224
234
  (*"assumed: warm, minimal look"*) so the user sees what they skipped.
225
235
  - **Your app** *(when Step 2 found a project in the folder)* — one line: keeps its look or gets a new
@@ -229,10 +239,12 @@ site, not the backend:
229
239
  WordPress admin"), **not** as a choice you're asking them to make. Don't ask "is WordPress OK?" or
230
240
  offer alternatives unless it was a genuine close call *and* the difference matters to the user.
231
241
 
232
- End with *"Good to go, or anything to change?"* A yes (or "go") → write `brief.md`. A skipped tool
242
+ End with *"Good to go, or anything to change?"* and end your turn there: nothing after refine
243
+ (provision, content, design, logo) starts until the user replies (see *When you ask the user* in the
244
+ top-level `SKILL.md` for a run no one will answer). A yes (or "go") → write `brief.md`. A skipped tool
233
245
  result is not a yes (see *When you ask the user* in the top-level `SKILL.md`). Changes → apply them
234
- and write it; don't loop back into questions. If the user *volunteers* a different backend, use
235
- theirs and note it in the brief.
246
+ and write it; don't loop back into questions. If the user *volunteers* a different backend, use theirs
247
+ and note it in the brief.
236
248
 
237
249
  ## Step 6 — Write `brief.md` and hand off
238
250
 
@@ -255,6 +267,10 @@ routes it to the `wordpress` subfolder with the store enabled (it is **not** a s
255
267
 
256
268
  > Brief agreed with the user on <today>.
257
269
 
270
+ ## Site name
271
+ **<site name>** — <"Given by the user." | "Picked by the user from: <the suggestions>." | "Taken from
272
+ the domain; no one was there to answer.">
273
+
258
274
  ## Purpose
259
275
  <what the site is, who runs it, what it's for — 2–3 sentences>
260
276
 
@@ -79,7 +79,7 @@ install WordPress straight into its `/cms` directory. This is the onboarding han
79
79
  ```json
80
80
  { "operation": "wordpress_installations_install",
81
81
  "params": { "username": "<username>", "domain": "<domain>", "type": "headless",
82
- "site_title": "<site title from brief.md>",
82
+ "site_title": "<the brief's Site name>",
83
83
  "credentials": { "login": "<admin login>", "email": "<account email>",
84
84
  "password": "<strong generated password>" } } }
85
85
  ```
@@ -327,9 +327,10 @@ can't build it that way.
327
327
  **The user supplied a logo** → copy it into `brand/` unchanged, note it in the **Logo** section, and
328
328
  skip the rest of this step. Never redraw or recolour it.
329
329
 
330
- Otherwise, turn the name into a **designed** logo: shaped, coloured and composed. Typing the name in
331
- the display font with an emoji or symbol next to it doesn't count. Build the chosen direction's **logo
332
- idea** (as replaced by any logo wish, Step 4) with one or two of these moves:
330
+ Otherwise, turn the brief's **Site name**, spelled as the user confirmed it, into a **designed** logo:
331
+ shaped, coloured and composed. Typing the name in the display font with an emoji or symbol next to it
332
+ doesn't count. Build the chosen direction's **logo idea** (as replaced by any logo wish, Step 4) with
333
+ one or two of these moves:
333
334
 
334
335
  | Move | What it is | Suits |
335
336
  |---|---|---|