← Plugin catalog
Developer Tools
Hostinger Connector
Hostinger International Ltd v0.1.0
Publisher description
From the marketplace listing
Manage your Hostinger account from wherever you write code. Deploy a static site or a Node.js app straight from the project you have open, install and run WordPress, buy and configure domains, edit DNS records, administer a VPS, or set up an online store. You sign in through your browser with the account you already have, so there is no API key to paste. Anything destructive or billable asks you first.
Language: English · Automatically detected from descriptions.
Files & skills
File archives
Plugin package17 files · 45.3 KBBrowse files →
Skill instructions
domains5.86 KB
--- name: domains description: Use when the user wants to work with domain names or DNS at Hostinger — checking availability and buying a domain, reading domain details and renewal dates, changing nameservers, setting up forwarding, managing registrar lock, WHOIS privacy and WHOIS contact profiles, getting an authorization code for a transfer, and reading, editing, validating, resetting or restoring DNS records. --- # Domains and DNS This skill spans **two** binaries. They are separate installs and separate tool groups; loading one does not give you the other. | Binary | Covers | | --- | --- | | `hostinger-domains-mcp` | registration, nameservers, forwarding, lock, privacy, WHOIS, transfers | | `hostinger-dns-mcp` | DNS zone records and snapshots | If the user's request touches both — "point my new domain at my site" — say up front that both binaries are needed, and stop if only one is loaded rather than half-completing the task. Run the `hostinger` router first. Its safety gates apply to everything here. ## Buying a domain — the one billable path `domains_purchaseNewDomainV1` charges the user. It requires the router's two-confirmation billable gate, and it must never run off an implied request. "Get my site online" is not permission to buy a domain; suggest the free `*.hostingersite.com` subdomain from `websites` first and let the user choose. 1. `domains_checkDomainAvailabilityV1` — check the exact name. 2. State the **price and the term** to the user, and the fact that domain registrations are generally non-refundable. 3. First confirmation, naming the domain and the price. 4. Second confirmation in a separate turn. 5. `domains_purchaseNewDomainV1` needs a WHOIS profile — see below. ## WHOIS profiles Registries require registrant contact data. `domains_createWHOISProfileV1` stores it; `domains_getWHOISProfileListV1` and `domains_getWHOISProfileV1` read it back; `domains_getWHOISProfileUsageV1` shows which domains use a profile. `domains_setWHOISProfileAsDefaultV1` marks one as the default for future purchases, per TLD; `domains_unsetDefaultWHOISProfileV1` clears that. Setting a default means later purchases silently reuse those contact details — say which profile you are making the default, and never set one the user has not seen. This is personal data — a real name, address, email and phone. Collect only what the registry requires, take it from the user directly, and never copy it into project files, commits or summaries. `domains_deleteWHOISProfileV1` fails or orphans domains if the profile is still in use, so check usage first. `domains_enablePrivacyProtectionV1` hides those details from public WHOIS; `domains_disablePrivacyProtectionV1` exposes them again. Disabling is a privacy regression — say so explicitly and get a confirmation, even though nothing is destroyed. ## Reading state - `domains_getDomainListV1` — every domain on the account. - `domains_getDomainDetailsV1` — status, expiry, nameservers, lock and privacy state for one domain. Run this before changing anything. - `domains_getDomainRenewalInformationV1` — renewal date and pricing. - `v2_getDomainVerificationsDIRECT` — domain verification records. ## Nameservers, forwarding and lock - `domains_updateDomainNameserversV1` — **this is the highest-blast-radius tool in the skill.** Pointing nameservers away from Hostinger takes the domain's entire DNS zone out of service: website, email, everything. Show the current nameservers from `domains_getDomainDetailsV1`, spell out what will stop resolving, and confirm before changing them. Propagation takes up to 24–48 hours and is not instantly reversible. - Forwarding: `domains_getDomainForwardingV1`, `domains_createDomainForwardingV1`, `domains_updateDomainForwardingV1`, `domains_deleteDomainForwardingV1`. - Registrar lock: `domains_enableDomainLockV1`, `domains_disableDomainLockV1`. The lock exists to prevent unauthorised transfers. **Disabling it is a security downgrade** — only do it as a deliberate step in a transfer the user is actively performing, and offer to re-enable it afterwards. ## Transfers `domains_getDomainAuthorizationCodeV1` returns the EPP/auth code that lets another registrar take the domain. Treat it as a secret: show it to the user in the conversation, never write it to a file, and never include it in a summary. Track incoming transfers with `domains_getTransferListV1` and `domains_getTransferV1`. ## DNS records Read first: `DNS_getDNSRecordsV1`. Validate before you commit: `DNS_validateDNSRecordsV1` checks a record set without applying it — use it on every non-trivial change, because a bad zone is a live outage. `DNS_updateDNSRecordsV1` applies changes. Be explicit with the user about what each record does, and remember that TTL governs how long a mistake persists in resolver caches. ### Snapshots are the safety net — use them `DNS_getDNSSnapshotListV1` and `DNS_getDNSSnapshotV1` read historical zone states; `DNS_restoreDNSSnapshotV1` rolls back to one. **Take stock of the current snapshot list before any destructive record change**, and tell the user which snapshot they can roll back to. This turns an outage into a two-minute fix. ### The two destructive DNS tools Both need two confirmations, never batched: - `DNS_deleteDNSRecordsV1` — removes specific records. Name each record being deleted, with its type and value, not "the selected records". - `DNS_resetDNSRecordsV1` — discards the entire zone and returns it to Hostinger defaults. This will break custom mail routing (MX, SPF, DKIM, DMARC), verification records for third-party services, and any subdomain pointing elsewhere. State that plainly, list what is currently in the zone, and confirm the snapshot the user can restore from before running it. Restoring a snapshot is itself a full-zone overwrite. It is the recovery path, but it discards every change made since that snapshot — confirm it the same way.
ecommerce5.02 KB
--- name: ecommerce description: Use when the user wants a Hostinger online store — creating a store, adding physical or digital products, setting flat-rate shipping, enabling a manual payment method, checking whether the store is ready to take orders, and creating or updating a custom sales channel so a frontend you built can serve the catalog and a hosted checkout. Not for WooCommerce, which is a WordPress plugin. --- # Ecommerce Binary: **`hostinger-ecommerce-mcp`** — every tool named `ecommerce_*`. Run the `hostinger` router first. Its safety gates apply to everything here. **This is a Hostinger store, not WooCommerce.** WooCommerce is a WordPress plugin and is managed through the WordPress tools in `websites`. If the user has a WooCommerce site and asks for products, they mean that one — say so rather than creating a second, unrelated store here. ## Order of operations The steps depend on each other, and doing them out of order produces a store that looks finished but cannot take an order: 1. `ecommerce_getStoresV1` — **check for an existing store first.** Never create a second store for an account that already has one unless the user says that is what they want. 2. `ecommerce_createStoreV1` — creates the store and a primary sales channel alongside it. 3. Products: `ecommerce_createPhysicalProductV1` or `ecommerce_createDigitalProductV1`. Each creates a published product with a single variant. A digital product takes an optional external download link. 4. `ecommerce_setStoreShippingV1` — flat-rate shipping, creating the zone if it does not exist. **Physical products need this**; without it a customer cannot complete checkout. Digital products do not. 5. `ecommerce_enableManualPaymentMethodV1` — lets the store accept orders without an online payment provider. See the warning below. 6. `ecommerce_getStoreMetadataV1` — readiness check: whether payment methods and shipping are configured, plus the default currency. **Run this before telling the user the store is live**, and report what it says rather than assuming. ## Currency and prices Products are priced in the **store currency**, which comes from `ecommerce_getStoreMetadataV1`. Read it before creating a product — a price entered against the wrong currency is a live mispricing that customers can order against. Confirm the currency with the user when creating the first product. ## Manual payment is not online payment `ecommerce_enableManualPaymentMethodV1` means the store accepts an order and the merchant collects money **some other way** — a bank transfer, cash on delivery, an invoice. Nothing is charged automatically. Say that explicitly when enabling it, because "payments enabled" reads as "customers can pay by card" and it does not. Connecting a real payment provider happens in hPanel, not through these tools. ## Custom sales channels — for a frontend you built A custom sales channel is how a separately deployed frontend serves the store's catalog while checkout, orders and shipping stay with Hostinger. - `ecommerce_listSalesChannelsV1` — existing channels and their metadata. - `ecommerce_createCustomSalesChannelV1` — create one for a frontend you built. - `ecommerce_updateSalesChannelV1` — change the merchant-facing `name` and the public `url`, which is returned as the channel's `domain`. - `ecommerce_getCustomStorefrontSetupInstructionsV1` — **read this before writing any frontend code.** It returns the actual, current integration steps as Markdown. Follow them rather than reconstructing an integration from memory; the contract can change and the instructions are authoritative. The channel `url` must be the address the storefront is really served from. A mismatch breaks the checkout hand-off, which fails at the worst possible moment — after the customer has picked something. ## Products are published immediately Both create tools produce a **published** product. There is no draft state here, so a product created to try something out is publicly visible and orderable the moment it exists. Confirm name, price and currency before creating, and do not create throwaway test products on a store that is taking real orders. ## The destructive one `ecommerce_deleteStoreV1` soft-deletes a store: the underlying data is preserved but the store is marked deleted, which takes the storefront and its checkout offline. Two confirmations, never batched. Name the store, say what stops working — the storefront, any custom sales channel pointing at it, and the ability to take orders — and say that undoing it is a support request, not a tool call. ## Full tool list Stores: `ecommerce_getStoresV1`, `ecommerce_createStoreV1`, `ecommerce_getStoreMetadataV1`, `ecommerce_deleteStoreV1` Products: `ecommerce_createPhysicalProductV1`, `ecommerce_createDigitalProductV1` Checkout: `ecommerce_setStoreShippingV1`, `ecommerce_enableManualPaymentMethodV1` Sales channels: `ecommerce_listSalesChannelsV1`, `ecommerce_createCustomSalesChannelV1`, `ecommerce_updateSalesChannelV1`, `ecommerce_getCustomStorefrontSetupInstructionsV1`
email-marketing4.63 KB
--- name: email-marketing description: Use when the user wants to work with Hostinger Reach, their email marketing product — listing and creating contacts, importing contacts in bulk, organising them into groups, building segments with custom criteria, reading segment membership, listing marketing profiles, and checking whether a sending domain's MX, SPF, DKIM and DMARC records are configured. Not for mailboxes or reading mail. --- # Email marketing (Reach) Binary: **`hostinger-reach-mcp`** — every tool named `reach_*`. Run the `hostinger` router first. Its safety gates apply to everything here. This is **marketing contacts and segments**, not email hosting. Creating a mailbox, forwarding, or an autoreply is a different product and is not covered by any skill in this plugin — say so rather than reaching for another binary. ## Start from the profile Everything is scoped to a Reach profile. `reach_listProfilesV1` lists them; take the identifier from there rather than guessing, and if there are several, ask which one before writing anything. `reach_getProfileDomainDNSStatusV1` reports the MX, SPF, DKIM and DMARC state for the profile's sending domain. **Check this before the user sends anything to a real list** — a domain missing SPF or DKIM gets its mail filtered as spam, and that damages the domain's reputation in a way that is slow to undo. Fixing the records themselves is the `domains` skill. ## Reading contacts, groups and segments - `reach_listContactsV1` — paginated, filterable by group and subscription status. Respect the subscription status: an unsubscribed contact is a request the user is legally obliged to honour, not a row to work around. - `reach_listContactGroupsV1` — groups the contacts are organised into. - `reach_listSegmentsV1`, `reach_getSegmentDetailsV1` — segments and one segment's definition. - `reach_listSegmentContactsV1`, `reach_listProfileSegmentContactsV1` — who is actually in a segment. Use these to show the user the size and shape of an audience *before* they act on it. ## Personal data — the constraint that shapes this whole skill Contacts are named people with email addresses, and in many jurisdictions that is regulated personal data. Treat it accordingly: - **Never write contact data into project files, commits, deploy archives, or a summary that could be pasted elsewhere.** Show it in the conversation to the user who asked, and nowhere else. - **Never import a list the user cannot account for.** Before `reach_createNewContactsV1`, ask where the addresses came from and confirm the people consented to marketing email. If the answer is a scraped list, a purchased list, or "found it somewhere", decline and say why: it is a legal problem for the user and it will burn their sending domain. - **Never invent contacts.** Do not fabricate names or addresses to fill out a test, and do not derive an address from a pattern (`firstname@company.com`). - **Do not enrich.** Adding data about a contact from another source is not what the user asked for and is exactly what data protection rules restrict. ## Writes - `reach_createANewContactV1` — one contact. Read back the name, email and group before creating it. - `reach_createNewContactsV1` — bulk. State **how many** contacts, which group they land in, and where the list came from, then take one confirmation. A bulk import is the highest-volume write in this skill; a mistake here is visible to every recipient. - `reach_createANewContactSegmentV1` — a segment definition. Show the criteria in plain language and say roughly who it will match; a criterion the user misread means the wrong audience gets the next campaign. ## The destructive one `reach_deleteAContactV1` **permanently removes a contact** from the email marketing system, by UUID. Two confirmations, never batched: 1. First names the contact — email address and name, resolved from `reach_listContactsV1`, not the raw UUID the user pasted. State that the contact and their history cannot be restored. 2. Second in a separate turn. Never delete more than one contact per approval, and never carry an approval forward to another contact. If the user wants a contact to stop receiving mail, unsubscribing is usually what they mean — check before deleting. ## Full tool list Profiles: `reach_listProfilesV1`, `reach_getProfileDomainDNSStatusV1` Contacts: `reach_listContactsV1`, `reach_createANewContactV1`, `reach_createNewContactsV1`, `reach_deleteAContactV1`, `reach_listContactGroupsV1` Segments: `reach_listSegmentsV1`, `reach_createANewContactSegmentV1`, `reach_getSegmentDetailsV1`, `reach_listSegmentContactsV1`, `reach_listProfileSegmentContactsV1`
hostinger14.1 KB
---
name: hostinger
description: Start here for any task involving the user's Hostinger account — deploying a site, managing hosting and PHP, running WordPress, buying or configuring domains and DNS records, or administering a VPS. This skill connects the Hostinger MCP server, signs the user in, sets the safety rules that every Hostinger action follows, and hands off to the specialist skill that owns the task.
---
# Hostinger — router
You are a coding agent with shell access. This skill gets the session to a
known-good, connected, authenticated state and then routes to a specialist. It
does not perform Hostinger operations itself.
**You do the setup, not the user.** Run the phases below yourself. The user
should only ever have to do two things: restart the app once if servers had to
be added, and click **Allow** in the browser once to sign in. Never hand them a
list of commands to run.
Skip straight to Routing when a Hostinger tool call has already succeeded in
this session.
## Phase 0 — Node
The Hostinger MCP server requires **Node 20 or newer**.
```bash
node -v
```
If that errors or reports below 20, tell the user how to fix it and stop — do
not work around it:
- macOS: `brew install node`, or `nvm install 22 && nvm use 22`
- Linux: `nvm install 22 && nvm use 22`, or the distribution's Node 20+ package
- Windows: `winget install OpenJS.NodeJS.LTS`
## Phase 1 — Is every Hostinger server registered?
Do **not** decide this from the tools the current task happens to need. Check
whether all nine Hostinger servers are registered, by reading the config:
```bash
grep -o 'mcp_servers\.hostinger-[a-z-]*' ~/.codex/config.toml | sort -u
```
The names are `hostinger-hosting`, `hostinger-wordpress`,
`hostinger-agency-hosting`, `hostinger-domains`, `hostinger-dns`,
`hostinger-vps`, `hostinger-ecommerce`, `hostinger-reach`, `hostinger-billing` —
nine at the time of writing, and the package may have added more since. See
*MCP binaries* at the end for how to check.
- **All nine present** → go to Phase 3.
- **Any missing** → Phase 2, and register *every* missing one, not just the one
this task needs.
Do not substitute shell commands or direct API calls for a missing tool.
## Phase 2 — Register all of them at once
Register the Hostinger MCP servers in the shared Codex MCP configuration. The
ChatGPT desktop app, Codex CLI and the IDE extension all read the same config, so
this is done once per machine.
**Register all nine, in one pass, even when the task needs one.** New servers
are only picked up when the host restarts. Registering just what the immediate
request needs means the user restarts again the next time they ask for something
in a different area — deploy, then domains, then a store, a restart each time.
That is the single worst thing this skill can do to them. One write, one restart,
everything works from then on.
Never tell the user "I added the missing module, restart and ask again" more than
once in the life of a machine. If you find yourself about to, you registered too
narrowly the first time.
**Preferred path — `codex` CLI.** It is often not on `PATH` even when a Codex
host is installed. On macOS the ChatGPT desktop app bundles it at
`/Applications/ChatGPT.app/Contents/Resources/codex`. Look in both places:
```bash
command -v codex || ls /Applications/ChatGPT.app/Contents/Resources/codex
```
If you find it, add every server that Phase 1 reported missing:
```bash
for g in hosting wordpress agency-hosting domains dns vps ecommerce reach billing; do
codex mcp add "hostinger-$g" \
--env "USER_AGENT=plugin;codex;openai-plugin;0.1.0" \
-- npx --package=hostinger-api-mcp@latest "hostinger-$g-mcp"
done
```
`npx --package=` resolves the binary out of the package at launch, so nothing has
to be installed globally. Do not run `npm install -g` and do not escalate with
`sudo`. Adding a server that already exists may error — that is harmless, keep
going with the rest.
`USER_AGENT` is appended to the `User-Agent` header the server sends to the
Hostinger API, and it is how Hostinger attributes traffic to the client it came
from. Set it on every block you create. Keep the value exactly as written above,
and never overwrite a different `USER_AGENT` that another Hostinger client
already put in the config.
**Fallback — edit the config directly.** Only when `codex` cannot be found
anywhere. Prefer the CLI whenever it exists: it makes a surgical edit, while
hand-editing risks damaging a file the user's other tools depend on.
The file is `~/.codex/config.toml` (`%USERPROFILE%\.codex\config.toml` on
Windows). **Back it up first**, and tell the user where the backup is:
```bash
cp ~/.codex/config.toml ~/.codex/config.toml.bak
```
Then **append only**. These rules are absolute:
- Add a block **only** for a server name that is not already in the file.
- If a `[mcp_servers.hostinger-*]` block already exists, **leave it byte for
byte alone** — even when it looks different from the example below, has extra
keys, or seems wrong. Other Hostinger tooling writes keys this skill does not
know about, such as `enabled` and a `USER_AGENT` used for attribution, and
dropping them silently breaks things elsewhere.
- Never normalise, reformat, reorder, or re-emit existing blocks to match the
example. The example is a template for **new** blocks only.
- Never delete a block, and never touch a `[mcp_servers.*]` entry for a
non-Hostinger server.
```toml
[mcp_servers.hostinger-hosting]
command = "npx"
args = ["--package=hostinger-api-mcp@latest", "hostinger-hosting-mcp"]
enabled = true
[mcp_servers.hostinger-hosting.env]
PATH = "<the value of $PATH in this shell>"
```
**The `env.PATH` line is not optional.** The host spawns MCP servers with a
minimal environment that often does not include the directory holding `node` and
`npx`, so a server registered without it starts and immediately dies with
`npx: command not found`. Read the current `PATH` with `echo $PATH` and write
that literal value in. Setting `env` replaces the inherited environment for that
server rather than extending it, so `PATH` has to be spelled out in full. Every
block you add needs its own `.env` — do not add a server without one.
**Verify the edit did not lose anything.** Before telling the user to restart,
compare the block headers against the backup:
```bash
diff <(grep '^\[mcp_servers' ~/.codex/config.toml.bak) \
<(grep '^\[mcp_servers' ~/.codex/config.toml)
```
Every line should be an addition. If anything was **removed**, you rewrote
instead of appending: restore with
`cp ~/.codex/config.toml.bak ~/.codex/config.toml`, tell the user plainly what
happened, and use the `codex` CLI instead. Do not attempt the hand-edit a second
time.
**If the host refuses the tool count.** All of them together expose a lot of
tools, and some hosts cap how many they will load. If that happens, do not go
back to registering one at a time — set `enabled = false` on the categories the
user does not need (`hostinger-reach`, `hostinger-billing` and
`hostinger-agency-hosting` are the usual first candidates), leave the blocks in
place, and tell the user which ones you turned off and that flipping one back on
is a config edit plus one restart. This mirrors the category toggles in the
Hostinger Connector.
Verify by reading the file back, or with `codex mcp list` if you have the CLI.
**Then ask for the one restart.** New MCP servers are picked up when the host
starts, not while it is running. Tell the user plainly which servers you added
and that the app needs a restart — in the ChatGPT desktop app, save and select
**Restart**; in the IDE extension, **Restart extension**; in the CLI, start a
new session. Say that after the restart they should repeat their original
request, and that sign-in happens on its own at that point.
Stop here. Do not claim the task is done, and do not try to work around the
missing tools in the meantime.
## Phase 3 — Sign in
Do not run a login command, and do not ask the user for a token. The server
handles OAuth itself: on the first tool call with no valid stored credentials it
opens the Hostinger sign-in page in the browser and waits.
Trigger it with a cheap read-only call — `hosting_listWebsitesV1` is a good one,
and its output you need anyway.
- **It returns data.** Already authenticated, from stored credentials or a
`HOSTINGER_API_TOKEN` in the environment. Continue.
- **A browser window opens.** Tell the user a Hostinger consent screen has
opened and to click **Allow**. Then wait — the call completes on its own once
they do. Nothing else is required of them, and credentials are reused by every
later session. The OAuth callback lands on localhost, so sign-in must finish
on this machine.
- **It fails with an auth error and no browser opened.** Report the error
verbatim and stop. Do not improvise a parallel setup by hand.
Expired credentials are refreshed automatically, and a dead refresh token falls
back to the same browser flow. Either way it is transparent — never pre-empt it
with a manual login step.
## Safety policy — applies to every Hostinger skill
These gates are a product decision, not a suggestion. Follow them even when the
user asks you to hurry, says they already agreed, or calls the confirmation
unnecessary. If the user applies time pressure, say plainly that the gate stays
and continue at the same pace.
**One confirmation before any write.** State the operation, the affected
resource, and the account it belongs to. "Create the subdomain `cms.example.com`
on account `u123456789`?" — not "Shall I proceed?".
**Two confirmations, never batched, for anything destructive or billable.**
Destructive means data that cannot be recovered from Hostinger: deleting a
website, database, WordPress installation, store, marketing contact, VPS
snapshot, DNS zone, or WHOIS profile; resetting DNS records; recreating a VPS.
Billable means anything that charges the user: buying a domain or a VPS, placing
or renewing an order. Also treat **disabling auto-renewal** this way — nothing is
charged, but the service lapses, and for a domain that loss is permanent. For
these:
1. First confirmation states what will be lost or charged, in plain language
and with the specific resource named. Not "this is destructive" but
"this permanently deletes the website `example.com` and its databases;
Hostinger cannot restore them".
2. Second confirmation is a separate turn, after the user has answered the
first. Never bundle several destructive operations into one approval, and
never carry an approval forward to a different resource.
**Never purchase anything the user did not explicitly ask for by name.** A
request to "get my site online" does not authorise buying a domain or a plan.
Quote the price, name the item, and get an explicit yes.
**Read before write.** List the current state and show it to the user before
changing it. Most Hostinger tools are keyed on a `username` and a `domain` that
must come from a list call, not from a guess.
## Routing
The six specialists match the six product categories in the Hostinger
Connector, so what the user can toggle there maps one-to-one onto what a skill
can do here.
| The user wants to… | Skill |
| --- | --- |
| Deploy a site; provision hosting; manage PHP, databases, cron, caching, subdomains; install or operate WordPress; Agency Plan websites | `websites` |
| Buy, transfer, lock, or configure a domain; edit DNS records | `domains` |
| See subscriptions, auto-renewal, payment methods, prices; order or renew a product | `subscriptions-and-payments` |
| Manage marketing contacts, groups and segments in Hostinger Reach | `email-marketing` |
| Create a Hostinger store, add products, set shipping, wire a custom storefront | `ecommerce` |
| Create, snapshot, firewall, or recover a VPS | `vps` |
If a request spans two specialists — "deploy this site on a domain I want to
buy" — run them in sequence, applying each one's gates. Do not merge their
confirmations.
Two product areas have **no** skill here: **mailboxes** (creating mail accounts,
forwarders, autoreplies) and **Horizons**. If the user asks for those, say
plainly that this plugin does not cover them and point them at hPanel, rather
than improvising with another binary.
## MCP binaries
Tools reach the agent through scoped MCP servers. Each specialist names the
binaries it needs. All of them ship in the single npm package
`hostinger-api-mcp`, so every binary is reachable through one `npx --package=`
invocation:
| Binary | Used by |
| --- | --- |
| `hostinger-hosting-mcp` | `websites` |
| `hostinger-wordpress-mcp` | `websites` |
| `hostinger-agency-hosting-mcp` | `websites` (Agency Plan only) |
| `hostinger-domains-mcp` | `domains` |
| `hostinger-dns-mcp` | `domains` |
| `hostinger-vps-mcp` | `vps` |
| `hostinger-ecommerce-mcp` | `ecommerce` |
| `hostinger-reach-mcp` | `email-marketing` |
| `hostinger-billing-mcp` | `subscriptions-and-payments` |
This table is for knowing which binary holds a tool, **not** for deciding what to
register — Phase 2 registers all nine together so the user restarts once. Note
that a single skill can span several binaries: `websites` reaches into three and
`domains` needs both of its own, which is another reason not to register
piecemeal.
The unscoped `hostinger-api-mcp` exposes every group at once, including the mail
and Horizons groups no skill here covers. Prefer the scoped binaries: they keep
the tool list small enough for the host to expose in full, and some hosts cap how
many tools they will load.
**Do not treat any list here as closed.** Hostinger ships new tools regularly,
and new product groups occasionally. A tool that exists but is not named in a
skill is still a tool you should use when it fits — the lists are orientation, not
an allowlist. Conversely, a tool named in a skill may have been renamed or
removed; if a call fails because the tool does not exist, say so and adapt rather
than insisting. The authoritative list of binaries is whatever the package ships:
```bash
npm view hostinger-api-mcp bin
```
If that shows a `hostinger-<something>-mcp` this skill does not mention, it is a
product group added after this plugin was written. Register it the same way, tell
the user it exists, and treat the absence of a matching skill as a gap in the
plugin rather than a reason to avoid the product.
subscriptions-and-payments4.67 KB
--- name: subscriptions-and-payments description: Use when the user wants to see or manage what they pay Hostinger for — listing subscriptions and their renewal state, enabling or disabling auto-renewal, renewing a subscription, browsing the product catalog with prices, listing payment methods and setting a default, or placing an order for a Hostinger product. Every write here costs the user money or affects whether their services stay online. --- # Subscriptions and payments Binary: **`hostinger-billing-mcp`** — every tool named `billing_*`. Run the `hostinger` router first. Its safety gates apply here more than anywhere else in the product: **this is the only skill that can charge the user's card.** Read the billable gate below before any write. ## The reading half is safe — start there - `billing_getSubscriptionListV1` — every subscription on the account, with status and renewal state. This is the answer to "what am I paying for?" and "when does X expire?". - `billing_getCatalogItemListV1` — orderable products and prices. **Prices are in cents**, as integers with no decimal point: `1099` is €10.99. Convert before showing a price to the user, and never quote the raw integer. - `billing_getPaymentMethodListV1` — methods available for new orders. Show the last digits and type; never echo full card data even if a field contains it. Answer read-only questions from these three and stop. Do not offer a purchase the user did not ask for. ## The billable gate `billing_createPurchaseOrderV1` and `billing_renewSubscriptionV1` **place real orders against a real payment method.** `billing_createPurchaseOrderV1` is the broadest tool in the whole Hostinger catalog — it can order any product — which makes it the one most likely to do expensive damage from a vague request. Before either of them: 1. `billing_getCatalogItemListV1` for the exact item and its price. Never order an item the user named loosely — "the cheapest plan", "whatever works" — get a specific catalog item first and read the name back. 2. State **item, term and total in currency**, converted from cents, plus which payment method will be charged from `billing_getPaymentMethodListV1`. 3. **First confirmation** naming all of that, and saying that hosting and domain purchases are generally non-refundable. 4. **Second confirmation in a separate turn**, after the user answers the first. Never batch several items into one approval, and never carry an approval forward to a different item, term or quantity. Never place an order to unblock your own work. If a task stalls because a plan or a domain is missing, say so, quote what it would cost, and stop. "Get my site online" is not authorisation to buy anything. ## Auto-renewal — small calls, large consequences - `billing_enableAutoRenewalV1` — future charges will happen without asking. Say that plainly and name the subscription and its renewal amount. - `billing_disableAutoRenewalV1` — **the service will expire at the end of the current term.** For hosting that means the website goes offline; for a domain it means the registration lapses and the name can be taken by someone else, which is not reversible after the redemption window. Name the subscription and the date it would lapse, and confirm. Both are one confirmation, but the confirmation has to state the consequence, not just the toggle. ## Payment methods - `billing_setDefaultPaymentMethodV1` — changes what future orders and renewals charge. One confirmation naming the method. - `billing_deletePaymentMethodV1` — **check for dependencies first.** Removing the method that active auto-renewals depend on means those renewals fail silently and services lapse. Read `billing_getSubscriptionListV1` and `billing_getPaymentMethodListV1`, say which subscriptions would be left without a working method, and take two confirmations if any would. Never help the user *add* a payment method through these tools — there is no tool for it, and card details must never pass through the conversation. Point them at hPanel. ## Handling money data Prices are integer cents. Subscription and order responses may carry billing identifiers and partial payment details. Show the user only what they asked for, never write any of it into a project file or a commit, and never include it in a summary that could be pasted elsewhere. ## Full tool list Reads: `billing_getSubscriptionListV1`, `billing_getCatalogItemListV1`, `billing_getPaymentMethodListV1` Billable: `billing_createPurchaseOrderV1`, `billing_renewSubscriptionV1` Renewal state: `billing_enableAutoRenewalV1`, `billing_disableAutoRenewalV1` Payment methods: `billing_setDefaultPaymentMethodV1`, `billing_deletePaymentMethodV1`
vps6.3 KB
--- name: vps description: Use when the user wants to administer a Hostinger VPS — listing and inspecting virtual machines, starting, stopping or restarting them, taking and restoring snapshots and backups, managing firewalls and their rules, SSH public keys, post-install scripts, PTR records, hostnames and nameservers, entering recovery mode, reading metrics and malware scan results, or running Docker projects on the machine. --- # VPS operations Binary: **`hostinger-vps-mcp`** — every tool named `VPS_*`. Run the `hostinger` router first. Its safety gates apply to everything here, and they matter more on a VPS than anywhere else: this is the one product where a single tool call can destroy a machine the user cannot rebuild from Hostinger. ## Always start by reading state `VPS_getVirtualMachinesV1` lists the machines and their IDs; every other tool is keyed on one. `VPS_getVirtualMachineDetailsV1` gives plan, state, hostname, template and IP for a single machine. Never act on a machine ID the user typed without confirming it against the list — VPS IDs are numeric and easy to transpose. Asynchronous work returns an action, not a result. `VPS_getActionsV1` and `VPS_getActionDetailsV1` are how you find out whether the thing actually happened. Poll them with backoff instead of assuming success. ## The four tools that can lose the user's server Two confirmations, in separate turns, never batched, per the router's policy. For each of these, the first confirmation must state in plain language what is destroyed and that Hostinger cannot bring it back. - **`VPS_recreateVirtualMachineV1`** — wipes the machine and reinstalls the OS from a template. Everything on disk is gone: sites, databases, configuration, anything not already in a snapshot or an off-box backup. Before offering it, check `VPS_getSnapshotV1` and `VPS_getBackupsV1` and tell the user exactly what restore point exists, or that none does. - **`VPS_deleteSnapshotV1`** — removes the restore point itself. Confirm what it was taken from and when. - **`VPS_restoreSnapshotV1` / `VPS_restoreBackupV1`** — recovery, but also a full-disk overwrite: everything written since that point is discarded. Say how old the restore point is and what window of work will be lost. - **`VPS_deleteProjectV1`** — deletes a Docker project and its containers. `VPS_purchaseNewVirtualMachineV1` charges the user. Two confirmations, price and term stated, never off an implied request. `VPS_setupPurchasedVirtualMachineV1` provisions an already-purchased machine — it is not itself billable, but it does write a root password and a template. ## Power and recovery - `VPS_startVirtualMachineV1`, `VPS_stopVirtualMachineV1`, `VPS_restartVirtualMachineV1` — stopping or restarting takes the user's services offline. One confirmation naming the machine and what it hosts. - `VPS_startRecoveryModeV1` / `VPS_stopRecoveryModeV1` — boots a rescue environment. Recovery mode reboots the machine and the normal system is not running while it is active; make sure the user understands the downtime, and remind them to stop recovery mode afterwards. ## Credentials and access - `VPS_setRootPasswordV1`, `VPS_setPanelPasswordV1` — show the new password to the user in the conversation only. Never write it to a project file, a summary, or anything that could be committed or pasted elsewhere. Say plainly that changing the root password breaks any automation still using the old one. - SSH keys: `VPS_getPublicKeysV1`, `VPS_createPublicKeyV1`, `VPS_attachPublicKeyV1`, `VPS_getAttachedPublicKeysV1`, `VPS_deletePublicKeyV1`. Detaching or deleting the only attached key can lock the user out of their own machine — check `VPS_getAttachedPublicKeysV1` and warn before removing the last one. ## Firewalls `VPS_getFirewallListV1` and `VPS_getFirewallDetailsV1` first, always. - Rules: `VPS_createFirewallRuleV1`, `VPS_updateFirewallRuleV1`, `VPS_deleteFirewallRuleV1`. - Attachment: `VPS_activateFirewallV1`, `VPS_deactivateFirewallV1`, `VPS_syncFirewallV1`, `VPS_createNewFirewallV1`, `VPS_deleteFirewallV1`. Two specific hazards worth naming to the user before acting: 1. **Removing or narrowing an SSH rule can lock them out**, and fixing it needs console access. Confirm the source range before touching port 22. 2. **Activating a restrictive firewall on a live machine** can cut off a running site or database. Read the ruleset back to the user before activating it. Opening a port to `0.0.0.0/0` exposes that service to the entire internet. If the user asks for it, say so and offer a narrower source range instead. ## Snapshots, backups and templates - `VPS_createSnapshotV1`, `VPS_getSnapshotV1`, `VPS_deleteSnapshotV1`, `VPS_restoreSnapshotV1` - `VPS_getBackupsV1`, `VPS_restoreBackupV1` - `VPS_getTemplatesV1`, `VPS_getTemplateDetailsV1` Offer to take a snapshot before any risky operation. It is the cheapest insurance available and turns most VPS mistakes into a rollback. ## Networking and identity - `VPS_setHostnameV1`, `VPS_resetHostnameV1` - `VPS_setNameserversV1` — resolver configuration on the machine, not the domain's registrar nameservers; those are `domains`. - `VPS_createPTRRecordV1`, `VPS_deletePTRRecordV1` — reverse DNS, which matters for outbound mail deliverability. Deleting a PTR record can silently degrade it; mention that. - `VPS_getDataCenterListV1` ## Post-install scripts `VPS_getPostInstallScriptsV1`, `VPS_getPostInstallScriptV1`, `VPS_createPostInstallScriptV1`, `VPS_updatePostInstallScriptV1`, `VPS_deletePostInstallScriptV1`. These run as root on a freshly recreated machine. Show the user the full script body before creating or updating one, and never assemble a script from content you did not get directly from the user. ## Docker projects `VPS_getProjectListV1`, `VPS_createNewProjectV1`, `VPS_updateProjectV1`, `VPS_getProjectContentsV1`, `VPS_getProjectContainersV1`, `VPS_getProjectLogsV1`, `VPS_startProjectV1`, `VPS_stopProjectV1`, `VPS_restartProjectV1`, `VPS_deleteProjectV1`. `VPS_getProjectLogsV1` is the first stop when a container misbehaves. ## Monitoring `VPS_getMetricsV1` for resource usage, `VPS_getScanMetricsV1` for malware scan results, `VPS_installMonarxV1` / `VPS_uninstallMonarxV1` for the malware scanner itself. Uninstalling Monarx reduces the machine's protection — confirm it, and say what the user is giving up.
websites7.38 KB
--- name: websites description: Use for anything on a Hostinger hosting plan — deploying static sites and Node.js applications, provisioning websites and free subdomains, installing and operating WordPress with its plugins and themes, and managing PHP versions and extensions, MySQL databases, cron jobs, subdomains, parked domains and server-side caching. Also covers Agency Plan websites. Buying or configuring a domain name belongs to domains; a VPS belongs to vps. --- # Websites Everything that lives on a hosting plan. This is the largest area in the product, and it spans **three** MCP binaries: | Binary | Covers | | --- | --- | | `hostinger-hosting-mcp` | plans, websites, deploys, PHP, databases, cron, caching, subdomains | | `hostinger-wordpress-mcp` | WordPress installs, plugins, themes, core, WP caching | | `hostinger-agency-hosting-mcp` | Agency Plan (h5g) websites — a separate product with its own tools | Their tools are all named `hosting_*`, `hosting_*` and `agency-hosting_*` / `agencyHosting_*` respectively — note that the prefix does not tell you which binary a tool is in. If a tool you need is missing, the binary holding it is not loaded; say so rather than working around it. Run the `hostinger` router first. Its safety gates apply to everything here. ## Pick the right product first Ask this before anything else, because the tool sets do not overlap: - **Regular hosting plan** — the common case. `hosting_listWebsitesV1` shows these. Everything in `references/SETUP.md`, `DEPLOYMENT.md` and `OPERATIONS.md` applies. - **Agency Plan (h5g)** — a different product with parallel, non-interchangeable tools. `agency-hosting_listAgencyPlanOrdersV1` shows whether the account has one. See `references/AGENCY.md`. Never mix the two tool sets on one website. ## The shape of a run 1. **Plan check** — a website can only exist on an active hosting plan. 2. **Domain** — free subdomain by default, or verify a domain the user owns. 3. **Create the website** and wait for it to exist. 4. **Deploy** — static or Node.js, chosen by what the project actually is. 5. **Verify** — a 200 plus real page copy, not just a 200. Steps 1–3 are in `references/SETUP.md`; 4–5 in `references/DEPLOYMENT.md`. Day-two operations — PHP, databases, cron, caching, subdomains — are in `references/OPERATIONS.md`. WordPress, including using it as a headless content backend, is in `references/WORDPRESS.md`. Agency Plan work is in `references/AGENCY.md`. Read the reference before running the step; the sequences there encode failure modes that are not obvious from the tool descriptions. ## Things that will bite you **A free subdomain is not a website.** `hosting_generateAFreeSubdomainV1` returns a domain; deploying to it before `hosting_createWebsiteV1` fails with `No website found for domain`. Create, then poll `hosting_listWebsitesV1` until it appears. **`username` is not the account email.** Almost every hosting tool is keyed on the hosting account `username`, which comes from `hosting_listWebsitesV1`. Never guess it, and never reuse one site's username for another. **Static and Node.js deploys take opposite archives.** `hosting_deployStaticWebsite` wants the *build output* with `index.html` at the archive root. `hosting_deployJsApplication` wants the *source*, with `node_modules/` and build output excluded, under 50 MB. Sending the wrong one is the most common failure in this flow. **Creation and builds are asynchronous.** `hosting_createWebsiteV1` and the Node.js build both return before the work finishes. Poll with backoff — websites take minutes, builds take longer. Do not report success off the queued response. **Three WordPress-shaped deploy tools are in the hosting binary, not the WordPress one:** `hosting_importWordpressWebsite`, `hosting_deployWordpressPlugin`, `hosting_deployWordpressTheme`. They are file-upload deploys rather than WordPress management. Migrating an existing WordPress site is a deploy and belongs here; installing WordPress fresh is in `references/WORDPRESS.md`. ## Destructive tools Two confirmations, never batched, per the router's policy: - `hosting_deleteWebsiteV1` — removes the site, its files and its databases. Takes an explicit `confirm: true`; that flag is not a substitute for asking the user. - `hosting_deleteAccountDatabaseV1` — drops the database and its remote connection rules. - `hosting_deleteWordPressInstallationV1` — removes the installation and its content. Name the exact domain and installation. - `agency-hosting_deleteAgencyPlanWebsiteV1`, `agency-hosting_deleteAgencyPlanWebsiteDatabaseV1` — same weight, see `references/AGENCY.md`. Single confirmation naming the exact resource is enough for the recoverable ones: `hosting_deleteAccountCronJobV1`, `hosting_deleteWebsiteSubdomainV1`, `hosting_deleteWebsiteParkedDomainV1`, `hosting_deleteDatabaseRemoteConnectionV1`, `hosting_uninstallWordPressPluginsV1`, `hosting_uninstallWordPressThemesV1`, `hosting_resetPHPExtensionsV1`, `agency-hosting_deleteAgencyPlanWebsiteCronJobV1`, `agency-hosting_deleteAgencyPlanWebsiteDatabaseUserV1`. `hosting_changeDatabasePasswordV1` is not destructive but it *is* breaking: any site config still holding the old password stops working. Say that before running it. ## Credentials `hosting_createLoginLinksV1` and `hosting_getInstallationJWTTokenV1` mint wp-admin access. `hosting_getPhpMyAdminLinkV1` mints database access. Show them to the user who asked, never write them into a project file, and never include them in a commit, a deploy archive, or a summary that might be pasted elsewhere. ## Full tool list — `hostinger-hosting-mcp` Deployment: `hosting_deployStaticWebsite`, `hosting_deployJsApplication`, `hosting_listJsDeployments`, `hosting_showJsDeploymentLogs`, `hosting_importWordpressWebsite`, `hosting_deployWordpressPlugin`, `hosting_deployWordpressTheme` Node.js builds: `hosting_listNodeJSBuildsV1`, `hosting_createNodeJSBuildFromArchiveV1`, `hosting_getNodeJSBuildLogsV1`, `hosting_restartNode_jsApplicationV1`, `hosting_listNode_jsVulnerabilitiesV1`, `hosting_patchNode_jsVulnerabilitiesV1` Websites and plans: `hosting_listWebsitesV1`, `hosting_createWebsiteV1`, `hosting_deleteWebsiteV1`, `hosting_listOrdersV1`, `hosting_listAvailableDatacentersV1`, `hosting_generateAFreeSubdomainV1`, `hosting_verifyDomainOwnershipV1` Subdomains and parked domains: `hosting_listWebsiteSubdomainsV1`, `hosting_createWebsiteSubdomainV1`, `hosting_deleteWebsiteSubdomainV1`, `hosting_listWebsiteParkedDomainsV1`, `hosting_createWebsiteParkedDomainV1`, `hosting_deleteWebsiteParkedDomainV1` Databases: `hosting_listAccountDatabasesV1`, `hosting_createAccountDatabaseV1`, `hosting_deleteAccountDatabaseV1`, `hosting_changeDatabasePasswordV1`, `hosting_repairDatabaseV1`, `hosting_getPhpMyAdminLinkV1`, `hosting_listDatabaseRemoteConnectionsV1`, `hosting_createDatabaseRemoteConnectionV1`, `hosting_deleteDatabaseRemoteConnectionV1` PHP: `hosting_getPHPDetailsV1`, `hosting_getPHPInfoV1`, `hosting_updatePHPVersionV1`, `hosting_updatePHPExtensionsV1`, `hosting_updatePHPOptionsV1`, `hosting_resetPHPExtensionsV1` Cron: `hosting_listAccountCronJobsV1`, `hosting_createAccountCronJobV1`, `hosting_deleteAccountCronJobV1`, `hosting_getCronJobOutputV1` Caching: `hosting_clearWebsiteCacheV1`, `hosting_toggleWebsiteCacheV1`, `hosting_toggleCachelessModeV1` The `hostinger-wordpress-mcp` and `hostinger-agency-hosting-mcp` tool lists are in `references/WORDPRESS.md` and `references/AGENCY.md`.
Referenced files: 5
Package details
Publisher declarations from the archived package. These are separate from our research and the live service's terms.
- Package license
- MIT
- Package author
- Hostinger
- Keywords
- hosting, deployment, wordpress, dns, vps, ecommerce, email-marketing, node.js
Declared capabilities
- Read
- Write
Package observed Oct 2, 2026.
Technical details
- First seen
- Sep 30, 2026 · 22:02 UTC
- Last seen
- Oct 2, 2026 · 18:00 UTC
- Collection status
- Collected
plugins_6a71b86845548191aaa5d3c5652e7c64
Download plugin data (JSON)