hostinger-api-mcp 3.12.2 → 3.14.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.
Files changed (40) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/gemini-extension.json +1 -1
  3. package/package.json +1 -1
  4. package/server.json +2 -2
  5. package/skills/deploy-to-hosting/SKILL.md +15 -1
  6. package/skills/headless/steps/02-refine/SKILL.md +60 -32
  7. package/skills/headless/steps/03-provision/webapp/SKILL.md +2 -0
  8. package/skills/headless/steps/08-deploy/SKILL.md +7 -0
  9. package/src/core/instructions.agency-hosting.js +1 -1
  10. package/src/core/instructions.agency-hosting.ts +1 -1
  11. package/src/core/instructions.js +1 -1
  12. package/src/core/instructions.ts +1 -1
  13. package/src/core/skills.js +12 -12
  14. package/src/core/skills.ts +12 -12
  15. package/src/servers/agency-hosting.js +1 -1
  16. package/src/servers/agency-hosting.ts +1 -1
  17. package/src/servers/agent-readiness.js +1 -1
  18. package/src/servers/agent-readiness.ts +1 -1
  19. package/src/servers/all.js +1 -1
  20. package/src/servers/all.ts +1 -1
  21. package/src/servers/billing.js +1 -1
  22. package/src/servers/billing.ts +1 -1
  23. package/src/servers/dns.js +1 -1
  24. package/src/servers/dns.ts +1 -1
  25. package/src/servers/domains.js +1 -1
  26. package/src/servers/domains.ts +1 -1
  27. package/src/servers/ecommerce.js +1 -1
  28. package/src/servers/ecommerce.ts +1 -1
  29. package/src/servers/horizons.js +1 -1
  30. package/src/servers/horizons.ts +1 -1
  31. package/src/servers/hosting.js +1 -1
  32. package/src/servers/hosting.ts +1 -1
  33. package/src/servers/mail.js +1 -1
  34. package/src/servers/mail.ts +1 -1
  35. package/src/servers/reach.js +1 -1
  36. package/src/servers/reach.ts +1 -1
  37. package/src/servers/vps.js +1 -1
  38. package/src/servers/vps.ts +1 -1
  39. package/src/servers/wordpress.js +1 -1
  40. package/src/servers/wordpress.ts +1 -1
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.14.0 — 2026-10-27
8
+
9
+ ### Also in this release
10
+
11
+ - Bundled agent skills: `skills/headless/steps/02-refine/SKILL.md`, `skills/headless/steps/03-provision/webapp/SKILL.md`
12
+ - Other files: `src/core/skills.js`, `src/core/skills.ts`
13
+
14
+ ## v3.13.0 — 2026-10-27
15
+
16
+ ### Also in this release
17
+
18
+ - Bundled agent skills: `skills/deploy-to-hosting/SKILL.md`, `skills/headless/steps/08-deploy/SKILL.md`
19
+ - Server instructions: 4 files
20
+ - Other files: `src/core/skills.js`, `src/core/skills.ts`
21
+
7
22
  ## v3.12.2 — 2026-10-27
8
23
 
9
24
  ### Also in this release
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hostinger-api-mcp",
3
- "version": "3.12.2",
3
+ "version": "3.14.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.12.2",
3
+ "version": "3.14.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.12.2",
9
+ "version": "3.14.0",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "npm",
13
13
  "identifier": "@hostinger/mcp",
14
- "version": "3.12.2",
14
+ "version": "3.14.0",
15
15
  "transport": {
16
16
  "type": "stdio"
17
17
  },
@@ -13,9 +13,23 @@ Ship a project that already exists — on disk or in a Git repository — to a H
13
13
  - Batch reads with `multi-execute`; values pass between steps as `$steps.<i>.<path>`. Batches chain operations from one server only — the Hostinger Connector runs `hosting`, `wordpress` and `agency-hosting` as separate servers.
14
14
  - Every deploy overwrites the website's current contents. Confirm the target domain with the user before the first deploy to a site that already has content.
15
15
 
16
+ ## 0. If a shell and the Hostinger CLI are available
17
+
18
+ `hostinger up` does steps 1 to 3 in one call and is the shortest path when you can run commands and the `hostinger` CLI is installed (`brew install hostinger/tap/hostinger`), signed in and has `hostinger up`: it finds or creates the website, detects the type, packs the directory (honouring `.gitignore`; skipping `node_modules`, `.git`, `.env` files, credentials and private keys, and listing symlinks it does not follow), uploads, deploys or builds, waits for the build and links the directory in `.hostinger/site.json`, the same file this skill uses. Nothing is asked without a terminal.
19
+
20
+ ```
21
+ hostinger up <dir> --domain <domain> --yes --format json # existing website; --yes only after the user agreed to replace its content
22
+ hostinger up <dir> --create --format json # new website on the only plan, free subdomain
23
+ hostinger up <dir> --domain <domain> --dry-run # the plan as JSON, changes nothing: show it to the user before a first deploy (overwritesContent: the real run needs --yes)
24
+ hostinger up <dir> --domain <domain> --type nodejs --app-type next --output-directory .next --build-script build --node-version 22 --yes --format json
25
+ hostinger up <dir> --domain <domain> --no-wait --format json # returns buildUuid at once; poll with `hostinger hosting nodejs build <domain> <uuid>`
26
+ ```
27
+
28
+ Run it from the project directory: the link is written in the current directory, with `path` naming `<dir>`. The JSON result has `url`, `data.type`, `data.buildUuid`, `data.buildState`, `data.skippedFiles` and, on failure, `error`. Shared and Cloud plans only; for Agency plans, archives and WordPress plugins or themes, use the operations below. The MCP's `hosting_deploy` does the same work when there is no shell.
29
+
16
30
  ## 1. Pick the target website
17
31
 
18
- - `.hostinger/site.json` in the project: reuse its `domain` and `username` (or `website_uid`).
32
+ - `.hostinger/site.json` in the project: reuse its `domain` and `username` (or `website_uid`). The CLI's `hostinger up` and `hostinger link` write the same file and keep any fields you add while it names the same website (linking another website starts it afresh); its `type` may be `static`, `nodejs` or `php`.
19
33
  - Otherwise look the domain up with `hosting_websites_list` (Shared and Cloud; substring match — take the exact entry) and `agency-hosting_websites_list-plan` (Agency; keep `details.uid`).
20
34
  - No website yet:
21
35
  - Shared and Cloud: take a domain (the user's own, or `hosting_domains_generate-free-subdomain`) and an `order_id` from `hosting_orders_list`, then `hosting_websites_create`. `datacenter_code` is needed only for the first website on a new plan (first entry of `hosting_datacenters_list`). Poll `hosting_websites_list-setups` with `domain` every 10–15 s until `status: completed` — uploads and deploys return 404 or 409 before that.
@@ -9,8 +9,9 @@ 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.** The only thing you must know is *what they are building* — enough to guess the
13
- backend. Every other question is optional: the more the user gives, the better the site, but never
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
14
15
  hold the build hostage to refinement. Fill gaps with sensible defaults and say so in the brief. A
15
16
  skipped question tool is not the user passing on a question; see *When you ask the user* in the
16
17
  top-level `SKILL.md`.
@@ -52,8 +53,8 @@ Before asking anything, collect what the user has already given you, so you don'
52
53
  framework config (`next.config.*`, `astro.config.*`, `vite.config.*`, `svelte.config.*`, `nuxt.*`),
53
54
  a `src/` or `app/` tree, `index.html`, a storefront/cart, etc. A real project here usually means the
54
55
  user **already has their own frontend** and mainly needs a Hostinger backend to wire it to — lean
55
- toward "bring your own frontend" in Step 3. If the folder has nothing site-like, assume they don't
56
- and lean toward "agent builds it".
56
+ toward "bring your own frontend" in Step 3. That is what *Step 2 found a project in the folder*
57
+ means everywhere below.
57
58
  - Anything in the pasted prompt beyond the domain (a sentence, a link, a screenshot).
58
59
  - Files in the current project that look like site material (copy, logos, product lists, images).
59
60
  - What the agent already knows about the user from local memory or this conversation (a prior build,
@@ -62,10 +63,13 @@ Before asking anything, collect what the user has already given you, so you don'
62
63
 
63
64
  ## Step 3 — Ask
64
65
 
65
- If Step 2 already answers *what are you building* and *will they sell*, skip the Round 1–3 questions
66
- below, but still ask **Build mode** before moving on.
66
+ When Step 2 found a project in the folder, ask **Build mode** and the **Existing project** confirms
67
+ below in your first message, after Round 1 when Round 1 still needs asking; they don't count toward
68
+ the 3 rounds, and code that answers Round 1 never skips them. Otherwise don't ask Build mode: it
69
+ defaults (see *Build mode* below).
67
70
 
68
- Otherwise open with one line and **wait for the user's answer**: *"Tell me what you want to build — a
71
+ If Step 2 already answers the three Round 1 questions, skip the Round 1–3 questions below. Otherwise
72
+ open with one line and **wait for the user's answer**: *"Tell me what you want to build — a
69
73
  sentence is enough. Links, screenshots or files help too. Skip anything you don't want to answer."*
70
74
 
71
75
  > **"What do you want to build?" is an OPEN question — ask it in plain prose and wait.** Never turn it
@@ -84,18 +88,19 @@ decide" means *use defaults*, not *ask again*. A skipped tool result is not thei
84
88
  that round in plain text, as *When you ask the user* in the top-level `SKILL.md` says. The re-ask
85
89
  repeats the round; it doesn't count toward the 3.
86
90
 
87
- **Round 1 — what it is (the only required round):**
91
+ **Round 1 — what it is (required; these three decide the backend):**
88
92
 
89
93
  1. **What are you building?** The business or project, and what the site is for.
90
94
  2. **Will you sell anything on it?** Physical products, digital products, services with checkout —
91
- or nothing. *This decides the backend.* Skip it only when the answer is already unmistakable
92
- ("an online shop for my candles", "my personal blog"); when in doubt, ask.
93
- 3. **Who is it for?** The audience, and how they'll find the site. *(optional)*
95
+ or nothing. Skip it only when the answer is already unmistakable ("an online shop for my
96
+ candles", "my personal blog"); when in doubt, ask.
97
+ 3. **Will you publish content over time?** Blog posts, articles, news, recipes, portfolio pieces,
98
+ case studies, and how often — or a handful of pages that rarely change. Skip it only when the
99
+ answer is already unmistakable ("my personal blog", an app the user is deploying).
94
100
 
95
101
  **Round 2 — what goes on it (optional, adapt to Round 1):**
96
102
 
97
- - **Content they'll publish over time** — blog posts, articles, news, recipes, portfolio pieces,
98
- case studies? How often? Or is it a handful of pages that rarely change?
103
+ - **Who is it for?** The audience, and how they'll find the site.
99
104
  - **Pages** — propose a page list from what you know and ask them to add or remove.
100
105
  - If they sell: **what and how many** — a rough product count, categories, whether products have
101
106
  variants (size, colour), and the shipping regions.
@@ -110,6 +115,20 @@ the design directions, so it is **not** asked again later; gather it here:
110
115
  - **Colours & brand** — brand/accent colours, logo, fonts, existing copy, photos. Note where they live.
111
116
  - **Must-haves and no-gos** — contact form, newsletter, bookings, languages, things to avoid.
112
117
 
118
+ **Existing project — when Step 2 found a project in the folder (required, in the Build mode message):**
119
+
120
+ Build mode answers the look. The code shows the rest, but the user knows what has to survive the
121
+ move, so ask each as a confirm of what you found, naming it, so the user only says yes or corrects you:
122
+
123
+ 1. **Routes that open directly** — the client-side routes you found (name them, e.g. `/stats`,
124
+ `/settings`) must open from a typed link and survive a refresh? Ask only when the code routes in
125
+ the browser (React Router, Vue Router, a history or hash router); a server-routed app has none.
126
+ 2. **Data** — the database and environment variable names you found (or "none"): is that all the
127
+ app needs? Hostinger gives the app MySQL only: a different database (Postgres, MongoDB, a SQLite
128
+ file) goes under **Out of scope** as a migration the user owns, not as `Database: MySQL`.
129
+
130
+ Record the routes and data in **Existing project**.
131
+
113
132
  If the user asks for something outside the scope (user accounts, member areas, bookings with a
114
133
  calendar backend, user-generated content), say plainly that the headless flow doesn't support it yet
115
134
  and record it under **Out of scope** — don't promise it.
@@ -121,25 +140,27 @@ and record it under **Out of scope** — don't promise it.
121
140
  > for it. (A form that needs accounts, payments or a booking calendar is still out of scope — this is a
122
141
  > plain name/email/message enquiry form.)
123
142
 
124
- ### Build mode — ask once (this one *is* a user choice)
143
+ ### Build mode — a user choice when the folder holds a project
125
144
 
126
- The backend is your call, but **how the frontend gets built is the user's** — because most of the time
127
- the user already has their own frontend and just needs a Hostinger backend to wire it to. After the
128
- folder + memory inspection (Step 2), ask **one** question (a structured choice is ideal here), seeding
129
- the default from what you found:
145
+ The backend is your call, but **how the frontend gets built is the user's**. When Step 2 found a
146
+ project in the folder, ask **one** question (a structured choice is ideal here); it also settles the
147
+ app's look:
130
148
 
131
- - **Bring your own frontend** *(default when Step 2 found a real project in the folder)* — "I already
132
- have a frontend / I'll drive the design and we vibe-code it together." The agent **uses the user's
149
+ - **Bring your own frontend — keep my app's look** *(the default)* — the agent **uses the user's
133
150
  existing project in the current folder as the source**, collaborates on design/code at the user's
134
151
  direction, and wires it to the provisioned backend. There is **no agent-generated design** — the
135
- design step defers to the user (see the Build mode box at the top of the design step), and the frontend step builds on their project
136
- rather than scaffolding a new one.
137
- - **Agent designs and builds it** *(default when the folder has nothing site-like)* — "Give me ideas
138
- — you design and code it." Today's flow: the design step proposes directions and the frontend step
139
- scaffolds and implements them.
152
+ design step defers to the user (see the Build mode box at the top of the design step), and the
153
+ frontend step builds on their project rather than scaffolding a new one. Write "Keep the look we
154
+ have: the app in this folder" in **Design direction**.
155
+ - **Agent designs and builds it — a new design** — the design step proposes directions and the
156
+ frontend step scaffolds and implements them.
157
+
158
+ A skipped tool result is not a pick: re-ask in plain text, and use the default only when the user
159
+ says so (see *When you ask the user* in the top-level `SKILL.md`).
140
160
 
141
- A skipped tool result is not a pick: re-ask in plain text, and use the seeded default only when the
142
- user says so (see *When you ask the user* in the top-level `SKILL.md`).
161
+ Otherwise don't ask: Build mode is **Agent designs and builds**. When the user says they have their
162
+ own code elsewhere, ask for its path, inspect it as in Step 2, and from then on treat it as a project
163
+ found in the folder.
143
164
 
144
165
  Record the answer as the brief's **Build mode**. This is the one frontend/technology question you *do*
145
166
  put to the user; everything else about the stack (framework, SSR/SSG) is still inferred. The deliverable
@@ -195,6 +216,8 @@ site, not the backend:
195
216
 
196
217
  - **The plan** — what it is, audience, pages, products (if any), tone. Mark anything you defaulted
197
218
  (*"assumed: warm, minimal look"*) so the user sees what they skipped.
219
+ - **Your app** *(when Step 2 found a project in the folder)* — one line: keeps its look or gets a new
220
+ one, the routes that must open directly, and whether a database is created.
198
221
  - **How it's built** — state the backend as a *consequence* in one plain line, focused on what it
199
222
  means for them day to day ("I'll build this on WordPress, so you edit pages and posts in a normal
200
223
  WordPress admin"), **not** as a choice you're asking them to make. Don't ask "is WordPress OK?" or
@@ -208,8 +231,9 @@ theirs and note it in the brief.
208
231
  ## Step 6 — Write `brief.md` and hand off
209
232
 
210
233
  Write `brief.md` from the template below. Fill every section from the conversation, defaulting what
211
- the user skipped and tagging it `(assumed)`; leave out **Products** when nothing is sold. Use the
212
- user's own words where you can. Then update `state.json`:
234
+ the user skipped and tagging it `(assumed)`; leave out **Products** when nothing is sold and
235
+ **Existing project** unless Step 2 found a project in the folder. Use the user's own words where you
236
+ can. Then update `state.json`:
213
237
  `"stage": "provision"`, fresh `updated_at`.
214
238
 
215
239
  The **Suggested backend** section is the contract with `03-provision/SKILL.md`, which routes on it.
@@ -239,7 +263,7 @@ routes it to the `wordpress` subfolder with the store enabled (it is **not** a s
239
263
  (layout, structure, mood); colours / brand palette; any screenshots. This is where ALL design questions
240
264
  land — the frontend step reads this and does not re-ask. Write "Agent's choice: <short style>" when the
241
265
  user didn't specify. Record in the user's own words a request to keep their current look ("Keep the look
242
- we have: <site URL | screenshots | brand guide>") and any logo idea they describe; the design step acts
266
+ we have: <site URL | screenshots | brand guide | the app in this folder>") and any logo idea they describe; the design step acts
243
267
  on both.>
244
268
 
245
269
  ## Pages
@@ -261,14 +285,18 @@ on both.>
261
285
  ## Assets
262
286
  <logo, colours, photos, copy the user provided and where they are; "None yet" if none>
263
287
 
288
+ ## Existing project
289
+ <only when Step 2 found a project in the folder: its path; the framework; the client-side
290
+ routes that must open directly and on refresh (or "None"); Database: none | MySQL; the env var names
291
+ the app reads — names only, never values>
292
+
264
293
  ## Suggested backend
265
294
  **<WordPress | Ecommerce | WordPress + Ecommerce | WordPress + WooCommerce | Webapp>** — <one-line reason>.
266
295
  <"Confirmed by the user." or "User chose this over the recommended <X> because <reason>.">
267
296
 
268
297
  ## Build mode
269
298
  **<Bring your own frontend | Agent designs and builds>** — <one line>. <When "Bring your own frontend":
270
- the path to the user's existing project in the current folder (the frontend source), and how they want
271
- to drive design/code. When "Agent designs and builds": leave the design + frontend steps to run as
299
+ how they want to drive design/code; the project's path is under **Existing project**. When "Agent designs and builds": leave the design + frontend steps to run as
272
300
  normal.> The design step and the frontend step both read this: **Bring your own frontend** → design
273
301
  defers to the user and frontend builds on their project; **Agent designs and builds** → both run as normal.
274
302
 
@@ -58,6 +58,8 @@ All website/database operations below go through the Hostinger connector (`execu
58
58
  ## Step 3 — Database (only if the app needs one)
59
59
 
60
60
  Skip this step entirely for an app with no database (static SPA, an app that talks to an external API).
61
+ The app needs one when `brief.md` → **Existing project** says **Database: MySQL**, or, for a new app,
62
+ when the brief describes data the app stores itself.
61
63
  This is **join-half** work — it needs the live website, so run it once `provision.status == "completed"`.
62
64
 
63
65
  **Preferred — let the platform create the database and inject the credentials:**
@@ -17,6 +17,13 @@ This is an **instance-barrier** step: run it only after `provision.status == "co
17
17
  > `hostinger-api-mcp` server instead (see the connect step:
18
18
  > `npx --yes --package=@hostinger/mcp@latest hostinger-api-mcp`).
19
19
 
20
+ > **With a shell and the Hostinger CLI installed**, the same deploy is one command, with the build
21
+ > settings passed exactly as the table below says. Run it from the project, since it links the current directory:
22
+ > `cd ~/.hostinger/<domain>/src && hostinger up --domain <domain> --type nodejs --app-type <appType> --output-directory <dir> --build-script build --node-version 22 --package-manager npm --yes --format json`.
23
+ > It uploads, builds, waits and returns `data.buildUuid` and `data.buildState`; add `--no-wait` to
24
+ > return at once and poll with `hostinger hosting nodejs build <domain> <uuid>`. Then continue at
25
+ > "Verify" below.
26
+
20
27
  **In:** the project in `~/.hostinger/<domain>/src/`, `site.json` (`username`, `urls`), `state.json`
21
28
  (`frontend.framework`, `frontend.rendering`).
22
29
 
@@ -1,2 +1,2 @@
1
1
  // Auto-generated server instructions
2
- export default "Hostinger API notes for agents. Find operations with search; the inputSchema it returns is authoritative for request shapes. Run one with execute, or chain several with multi-execute.\n\nDatabases (web hosting, hosting_* operations)\n- MySQL runs on the same server as the website. From the deployed app connect to host 127.0.0.1, port 3306. PHP may also use localhost (Unix socket). Node.js should use 127.0.0.1: localhost can resolve to IPv6 (::1) and not every database user has that grant.\n- The `host` from hosting_databases_list (srvNNNN.hstgr.io) is only for connections from outside Hostinger, after hosting_databases_create-remote-connection. Never use it from the app.\n- Agency Plan (agency-hosting_* operations) database users are created for localhost; the PHP app connects there.\n\nAsynchronous operations\n- A success response often means \"queued\", not \"done\". Poll the matching read operation with backoff (seconds, then minutes). Never re-send the write.\n- hosting_websites_create -> poll hosting_websites_list-setups with the domain until status is completed (a few minutes); file, deploy and database calls return 404/409 before that.\n- A Node.js deploy or hosting_nodejs_start-build -> poll hosting_get-deployment with the domain until the build state is completed or failed; a failed build comes back with its logs and failure analysis.\n- wordpress_installations_install and WordPress plugin/theme/core jobs -> poll wordpress_installations_list.\n- agency-hosting_website-setups_create -> poll agency-hosting_website-setups_status with setup_uuid; other Agency Plan jobs -> agency-hosting_websites_list-processes.\n- Website deletion, database repair and domain contact changes finish in the background.\n\nCredentials\n- Never write database passwords or API tokens into source code, client-side JavaScript or committed .env files.\n- Node.js apps read them from environment variables: set the full set with hosting_nodejs_replace-environment-variables (full replace; values are masked on read). Build-time variables (Next.js) need a new build afterwards.\n- PHP apps read them from a config file on the server, outside the repository.\n- Generate strong passwords and do not echo them back once stored.\n\nFor end-to-end site builds install the headless skill: npx skills add hostinger/api-mcp-server";
2
+ export default "Hostinger API notes for agents. Find operations with search; the inputSchema it returns is authoritative for request shapes. Run one with execute, or chain several with multi-execute.\n\nDatabases (web hosting, hosting_* operations)\n- MySQL runs on the same server as the website. From the deployed app connect to host 127.0.0.1, port 3306. PHP may also use localhost (Unix socket). Node.js should use 127.0.0.1: localhost can resolve to IPv6 (::1) and not every database user has that grant.\n- The `host` from hosting_databases_list (srvNNNN.hstgr.io) is only for connections from outside Hostinger, after hosting_databases_create-remote-connection. Never use it from the app.\n- Agency Plan (agency-hosting_* operations) database users are created for localhost; the PHP app connects there.\n\nAsynchronous operations\n- A success response often means \"queued\", not \"done\". Poll the matching read operation with backoff (seconds, then minutes). Never re-send the write.\n- hosting_websites_create -> poll hosting_websites_list-setups with the domain until status is completed (a few minutes); file, deploy and database calls return 404/409 before that.\n- A Node.js deploy or hosting_nodejs_start-build -> poll hosting_get-deployment with the domain until the build state is completed or failed; a failed build comes back with its logs and failure analysis.\n- wordpress_installations_install and WordPress plugin/theme/core jobs -> poll wordpress_installations_list.\n- agency-hosting_website-setups_create -> poll agency-hosting_website-setups_status with setup_uuid; other Agency Plan jobs -> agency-hosting_websites_list-processes.\n- Website deletion, database repair and domain contact changes finish in the background.\n\nCredentials\n- Never write database passwords or API tokens into source code, client-side JavaScript or committed .env files.\n- Node.js apps read them from environment variables: set the full set with hosting_nodejs_replace-environment-variables (full replace; values are masked on read). Build-time variables (Next.js) need a new build afterwards.\n- PHP apps read them from a config file on the server, outside the repository.\n- Generate strong passwords and do not echo them back once stored.\n\nDeploying from a shell\n- The Hostinger CLI deploys a website in one command and links the directory: `hostinger up <dir> --domain <domain> --format json` (`--yes` replaces content, `--create` makes a site, `--dry-run` shows the plan). It never prompts without a terminal.\n\nFor end-to-end site builds install the headless skill: npx skills add hostinger/api-mcp-server";
@@ -1,3 +1,3 @@
1
1
  // Auto-generated server instructions
2
- const instructions: string = "Hostinger API notes for agents. Find operations with search; the inputSchema it returns is authoritative for request shapes. Run one with execute, or chain several with multi-execute.\n\nDatabases (web hosting, hosting_* operations)\n- MySQL runs on the same server as the website. From the deployed app connect to host 127.0.0.1, port 3306. PHP may also use localhost (Unix socket). Node.js should use 127.0.0.1: localhost can resolve to IPv6 (::1) and not every database user has that grant.\n- The `host` from hosting_databases_list (srvNNNN.hstgr.io) is only for connections from outside Hostinger, after hosting_databases_create-remote-connection. Never use it from the app.\n- Agency Plan (agency-hosting_* operations) database users are created for localhost; the PHP app connects there.\n\nAsynchronous operations\n- A success response often means \"queued\", not \"done\". Poll the matching read operation with backoff (seconds, then minutes). Never re-send the write.\n- hosting_websites_create -> poll hosting_websites_list-setups with the domain until status is completed (a few minutes); file, deploy and database calls return 404/409 before that.\n- A Node.js deploy or hosting_nodejs_start-build -> poll hosting_get-deployment with the domain until the build state is completed or failed; a failed build comes back with its logs and failure analysis.\n- wordpress_installations_install and WordPress plugin/theme/core jobs -> poll wordpress_installations_list.\n- agency-hosting_website-setups_create -> poll agency-hosting_website-setups_status with setup_uuid; other Agency Plan jobs -> agency-hosting_websites_list-processes.\n- Website deletion, database repair and domain contact changes finish in the background.\n\nCredentials\n- Never write database passwords or API tokens into source code, client-side JavaScript or committed .env files.\n- Node.js apps read them from environment variables: set the full set with hosting_nodejs_replace-environment-variables (full replace; values are masked on read). Build-time variables (Next.js) need a new build afterwards.\n- PHP apps read them from a config file on the server, outside the repository.\n- Generate strong passwords and do not echo them back once stored.\n\nFor end-to-end site builds install the headless skill: npx skills add hostinger/api-mcp-server";
2
+ const instructions: string = "Hostinger API notes for agents. Find operations with search; the inputSchema it returns is authoritative for request shapes. Run one with execute, or chain several with multi-execute.\n\nDatabases (web hosting, hosting_* operations)\n- MySQL runs on the same server as the website. From the deployed app connect to host 127.0.0.1, port 3306. PHP may also use localhost (Unix socket). Node.js should use 127.0.0.1: localhost can resolve to IPv6 (::1) and not every database user has that grant.\n- The `host` from hosting_databases_list (srvNNNN.hstgr.io) is only for connections from outside Hostinger, after hosting_databases_create-remote-connection. Never use it from the app.\n- Agency Plan (agency-hosting_* operations) database users are created for localhost; the PHP app connects there.\n\nAsynchronous operations\n- A success response often means \"queued\", not \"done\". Poll the matching read operation with backoff (seconds, then minutes). Never re-send the write.\n- hosting_websites_create -> poll hosting_websites_list-setups with the domain until status is completed (a few minutes); file, deploy and database calls return 404/409 before that.\n- A Node.js deploy or hosting_nodejs_start-build -> poll hosting_get-deployment with the domain until the build state is completed or failed; a failed build comes back with its logs and failure analysis.\n- wordpress_installations_install and WordPress plugin/theme/core jobs -> poll wordpress_installations_list.\n- agency-hosting_website-setups_create -> poll agency-hosting_website-setups_status with setup_uuid; other Agency Plan jobs -> agency-hosting_websites_list-processes.\n- Website deletion, database repair and domain contact changes finish in the background.\n\nCredentials\n- Never write database passwords or API tokens into source code, client-side JavaScript or committed .env files.\n- Node.js apps read them from environment variables: set the full set with hosting_nodejs_replace-environment-variables (full replace; values are masked on read). Build-time variables (Next.js) need a new build afterwards.\n- PHP apps read them from a config file on the server, outside the repository.\n- Generate strong passwords and do not echo them back once stored.\n\nDeploying from a shell\n- The Hostinger CLI deploys a website in one command and links the directory: `hostinger up <dir> --domain <domain> --format json` (`--yes` replaces content, `--create` makes a site, `--dry-run` shows the plan). It never prompts without a terminal.\n\nFor end-to-end site builds install the headless skill: npx skills add hostinger/api-mcp-server";
3
3
  export default instructions;
@@ -1,2 +1,2 @@
1
1
  // Auto-generated server instructions
2
- export default "Hostinger API notes for agents. Find operations with search; the inputSchema it returns is authoritative for request shapes. Run one with execute, or chain several with multi-execute.\n\nDatabases (web hosting, hosting_* operations)\n- MySQL runs on the same server as the website. From the deployed app connect to host 127.0.0.1, port 3306. PHP may also use localhost (Unix socket). Node.js should use 127.0.0.1: localhost can resolve to IPv6 (::1) and not every database user has that grant.\n- The `host` from hosting_databases_list (srvNNNN.hstgr.io) is only for connections from outside Hostinger, after hosting_databases_create-remote-connection. Never use it from the app.\n- Agency Plan (agency-hosting_* operations) database users are created for localhost; the PHP app connects there.\n\nAsynchronous operations\n- A success response often means \"queued\", not \"done\". Poll the matching read operation with backoff (seconds, then minutes). Never re-send the write.\n- hosting_websites_create -> poll hosting_websites_list-setups with the domain until status is completed (a few minutes); file, deploy and database calls return 404/409 before that.\n- A Node.js deploy or hosting_nodejs_start-build -> poll hosting_get-deployment with the domain until the build state is completed or failed; a failed build comes back with its logs and failure analysis.\n- wordpress_installations_install and WordPress plugin/theme/core jobs -> poll wordpress_installations_list.\n- agency-hosting_website-setups_create -> poll agency-hosting_website-setups_status with setup_uuid; other Agency Plan jobs -> agency-hosting_websites_list-processes.\n- Website deletion, database repair and domain contact changes finish in the background.\n\nCredentials\n- Never write database passwords or API tokens into source code, client-side JavaScript or committed .env files.\n- Node.js apps read them from environment variables: set the full set with hosting_nodejs_replace-environment-variables (full replace; values are masked on read). Build-time variables (Next.js) need a new build afterwards.\n- PHP apps read them from a config file on the server, outside the repository.\n- Generate strong passwords and do not echo them back once stored.\n\nDeploying a website (this server only)\n- hosting_deploy replaces the upload, archive-deploy, build, WordPress import/plugin/theme and Git operations named above. Give it a local directory (it detects static/PHP, Node.js, a WordPress site, plugin or theme and packs it itself), a local archive with `type`, or `git: { repository, branch }`. Do not run those operations by hand.\n- A Node.js deploy returns a buildUuid at once and builds on the server. Poll hosting_get-deployment with the domain, pausing longer each time, until the build state is completed or failed. A failed build comes back with its logs and analysis: fix the cause and deploy again. It replaces the build, log and settings operations.\n- Static, PHP, plugin and theme deploys are complete when hosting_deploy returns. A WordPress site import only starts: its files are extracted and the site is ready a few minutes later.\n- Every deploy overwrites the site's contents: confirm the domain with the user before the first deploy to a site that already has content.\n\nFor end-to-end site builds install the headless skill: npx skills add hostinger/api-mcp-server";
2
+ export default "Hostinger API notes for agents. Find operations with search; the inputSchema it returns is authoritative for request shapes. Run one with execute, or chain several with multi-execute.\n\nDatabases (web hosting, hosting_* operations)\n- MySQL runs on the same server as the website. From the deployed app connect to host 127.0.0.1, port 3306. PHP may also use localhost (Unix socket). Node.js should use 127.0.0.1: localhost can resolve to IPv6 (::1) and not every database user has that grant.\n- The `host` from hosting_databases_list (srvNNNN.hstgr.io) is only for connections from outside Hostinger, after hosting_databases_create-remote-connection. Never use it from the app.\n- Agency Plan (agency-hosting_* operations) database users are created for localhost; the PHP app connects there.\n\nAsynchronous operations\n- A success response often means \"queued\", not \"done\". Poll the matching read operation with backoff (seconds, then minutes). Never re-send the write.\n- hosting_websites_create -> poll hosting_websites_list-setups with the domain until status is completed (a few minutes); file, deploy and database calls return 404/409 before that.\n- A Node.js deploy or hosting_nodejs_start-build -> poll hosting_get-deployment with the domain until the build state is completed or failed; a failed build comes back with its logs and failure analysis.\n- wordpress_installations_install and WordPress plugin/theme/core jobs -> poll wordpress_installations_list.\n- agency-hosting_website-setups_create -> poll agency-hosting_website-setups_status with setup_uuid; other Agency Plan jobs -> agency-hosting_websites_list-processes.\n- Website deletion, database repair and domain contact changes finish in the background.\n\nCredentials\n- Never write database passwords or API tokens into source code, client-side JavaScript or committed .env files.\n- Node.js apps read them from environment variables: set the full set with hosting_nodejs_replace-environment-variables (full replace; values are masked on read). Build-time variables (Next.js) need a new build afterwards.\n- PHP apps read them from a config file on the server, outside the repository.\n- Generate strong passwords and do not echo them back once stored.\n\nDeploying from a shell\n- The Hostinger CLI deploys a website in one command and links the directory: `hostinger up <dir> --domain <domain> --format json` (`--yes` replaces content, `--create` makes a site, `--dry-run` shows the plan). It never prompts without a terminal.\n\nDeploying a website (this server only)\n- hosting_deploy replaces the upload, archive-deploy, build, WordPress import/plugin/theme and Git operations named above. Give it a local directory (it detects static/PHP, Node.js, a WordPress site, plugin or theme and packs it itself), a local archive with `type`, or `git: { repository, branch }`. Do not run those operations by hand.\n- A Node.js deploy returns a buildUuid at once and builds on the server. Poll hosting_get-deployment with the domain, pausing longer each time, until the build state is completed or failed. A failed build comes back with its logs and analysis: fix the cause and deploy again. It replaces the build, log and settings operations.\n- Static, PHP, plugin and theme deploys are complete when hosting_deploy returns. A WordPress site import only starts: its files are extracted and the site is ready a few minutes later.\n- Every deploy overwrites the site's contents: confirm the domain with the user before the first deploy to a site that already has content.\n\nFor end-to-end site builds install the headless skill: npx skills add hostinger/api-mcp-server";
@@ -1,3 +1,3 @@
1
1
  // Auto-generated server instructions
2
- const instructions: string = "Hostinger API notes for agents. Find operations with search; the inputSchema it returns is authoritative for request shapes. Run one with execute, or chain several with multi-execute.\n\nDatabases (web hosting, hosting_* operations)\n- MySQL runs on the same server as the website. From the deployed app connect to host 127.0.0.1, port 3306. PHP may also use localhost (Unix socket). Node.js should use 127.0.0.1: localhost can resolve to IPv6 (::1) and not every database user has that grant.\n- The `host` from hosting_databases_list (srvNNNN.hstgr.io) is only for connections from outside Hostinger, after hosting_databases_create-remote-connection. Never use it from the app.\n- Agency Plan (agency-hosting_* operations) database users are created for localhost; the PHP app connects there.\n\nAsynchronous operations\n- A success response often means \"queued\", not \"done\". Poll the matching read operation with backoff (seconds, then minutes). Never re-send the write.\n- hosting_websites_create -> poll hosting_websites_list-setups with the domain until status is completed (a few minutes); file, deploy and database calls return 404/409 before that.\n- A Node.js deploy or hosting_nodejs_start-build -> poll hosting_get-deployment with the domain until the build state is completed or failed; a failed build comes back with its logs and failure analysis.\n- wordpress_installations_install and WordPress plugin/theme/core jobs -> poll wordpress_installations_list.\n- agency-hosting_website-setups_create -> poll agency-hosting_website-setups_status with setup_uuid; other Agency Plan jobs -> agency-hosting_websites_list-processes.\n- Website deletion, database repair and domain contact changes finish in the background.\n\nCredentials\n- Never write database passwords or API tokens into source code, client-side JavaScript or committed .env files.\n- Node.js apps read them from environment variables: set the full set with hosting_nodejs_replace-environment-variables (full replace; values are masked on read). Build-time variables (Next.js) need a new build afterwards.\n- PHP apps read them from a config file on the server, outside the repository.\n- Generate strong passwords and do not echo them back once stored.\n\nDeploying a website (this server only)\n- hosting_deploy replaces the upload, archive-deploy, build, WordPress import/plugin/theme and Git operations named above. Give it a local directory (it detects static/PHP, Node.js, a WordPress site, plugin or theme and packs it itself), a local archive with `type`, or `git: { repository, branch }`. Do not run those operations by hand.\n- A Node.js deploy returns a buildUuid at once and builds on the server. Poll hosting_get-deployment with the domain, pausing longer each time, until the build state is completed or failed. A failed build comes back with its logs and analysis: fix the cause and deploy again. It replaces the build, log and settings operations.\n- Static, PHP, plugin and theme deploys are complete when hosting_deploy returns. A WordPress site import only starts: its files are extracted and the site is ready a few minutes later.\n- Every deploy overwrites the site's contents: confirm the domain with the user before the first deploy to a site that already has content.\n\nFor end-to-end site builds install the headless skill: npx skills add hostinger/api-mcp-server";
2
+ const instructions: string = "Hostinger API notes for agents. Find operations with search; the inputSchema it returns is authoritative for request shapes. Run one with execute, or chain several with multi-execute.\n\nDatabases (web hosting, hosting_* operations)\n- MySQL runs on the same server as the website. From the deployed app connect to host 127.0.0.1, port 3306. PHP may also use localhost (Unix socket). Node.js should use 127.0.0.1: localhost can resolve to IPv6 (::1) and not every database user has that grant.\n- The `host` from hosting_databases_list (srvNNNN.hstgr.io) is only for connections from outside Hostinger, after hosting_databases_create-remote-connection. Never use it from the app.\n- Agency Plan (agency-hosting_* operations) database users are created for localhost; the PHP app connects there.\n\nAsynchronous operations\n- A success response often means \"queued\", not \"done\". Poll the matching read operation with backoff (seconds, then minutes). Never re-send the write.\n- hosting_websites_create -> poll hosting_websites_list-setups with the domain until status is completed (a few minutes); file, deploy and database calls return 404/409 before that.\n- A Node.js deploy or hosting_nodejs_start-build -> poll hosting_get-deployment with the domain until the build state is completed or failed; a failed build comes back with its logs and failure analysis.\n- wordpress_installations_install and WordPress plugin/theme/core jobs -> poll wordpress_installations_list.\n- agency-hosting_website-setups_create -> poll agency-hosting_website-setups_status with setup_uuid; other Agency Plan jobs -> agency-hosting_websites_list-processes.\n- Website deletion, database repair and domain contact changes finish in the background.\n\nCredentials\n- Never write database passwords or API tokens into source code, client-side JavaScript or committed .env files.\n- Node.js apps read them from environment variables: set the full set with hosting_nodejs_replace-environment-variables (full replace; values are masked on read). Build-time variables (Next.js) need a new build afterwards.\n- PHP apps read them from a config file on the server, outside the repository.\n- Generate strong passwords and do not echo them back once stored.\n\nDeploying from a shell\n- The Hostinger CLI deploys a website in one command and links the directory: `hostinger up <dir> --domain <domain> --format json` (`--yes` replaces content, `--create` makes a site, `--dry-run` shows the plan). It never prompts without a terminal.\n\nDeploying a website (this server only)\n- hosting_deploy replaces the upload, archive-deploy, build, WordPress import/plugin/theme and Git operations named above. Give it a local directory (it detects static/PHP, Node.js, a WordPress site, plugin or theme and packs it itself), a local archive with `type`, or `git: { repository, branch }`. Do not run those operations by hand.\n- A Node.js deploy returns a buildUuid at once and builds on the server. Poll hosting_get-deployment with the domain, pausing longer each time, until the build state is completed or failed. A failed build comes back with its logs and analysis: fix the cause and deploy again. It replaces the build, log and settings operations.\n- Static, PHP, plugin and theme deploys are complete when hosting_deploy returns. A WordPress site import only starts: its files are extracted and the site is ready a few minutes later.\n- Every deploy overwrites the site's contents: confirm the domain with the user before the first deploy to a site that already has content.\n\nFor end-to-end site builds install the headless skill: npx skills add hostinger/api-mcp-server";
3
3
  export default instructions;