diff --git a/.cursor-plugin/plugin.json b/.cursor-plugin/plugin.json index 5319e0f..56eed86 100644 --- a/.cursor-plugin/plugin.json +++ b/.cursor-plugin/plugin.json @@ -1,8 +1,8 @@ { "name": "hostinger-connector", "displayName": "Hostinger Connector", - "version": "0.3.2", - "description": "MCP plugin to deploy and manage Hostinger websites, WordPress, domains, DNS, VPS, and subscriptions from inside Cursor.", + "version": "0.3.3", + "description": "MCP plugin to deploy and manage Hostinger websites, WordPress, domains, DNS, VPS, email, and subscriptions from inside Cursor.", "author": "Hostinger", "license": "MIT", "homepage": "https://hostinger.com/", diff --git a/CHANGELOG.md b/CHANGELOG.md index 38294b3..d7cf64b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ # Changelog +## [0.3.3] - 2026-11-12 + +### Fixed + +- **Email could not be managed.** `mcp.json` now registers `hostinger-mail-mcp`, so the agent can create mailboxes, aliases and forwarders and issue Mail API tokens. Without it the agent reported that Hostinger has no email tools. + +### Changed + +- `rules/prefer-mcp-tools.mdc` lists the `mail_` prefix and says how to reach the inside of a mailbox: a scoped token from `mail_api-tokens_create`, used with the Hostinger Mail API, never the mailbox password. +- `rules/confirm-destructive-actions.mdc` covers deleting a mailbox, changing its password and creating a Mail API token. + ## [0.3.2] - 2026-11-05 ### Changed diff --git a/README.md b/README.md index 2636243..fc53b70 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ The plugin wires the official [`@hostinger/mcp`](https://www.npmjs.com/package/@ - Keep WordPress updated and secure across one site or all of them. - Audit the whole hosting account and get a prioritised to-do list. - Migrate a site from another host, testing it before DNS moves. -- Manage domains, DNS, VPS, subscriptions, ecommerce and email marketing. +- Manage domains, DNS, VPS, subscriptions, ecommerce, email and email marketing. --- @@ -88,8 +88,11 @@ Each product area runs as its own MCP server, so you can disable areas you don't | `hostinger-reach` | `hostinger-reach-mcp` | 52 | Contacts, segments, email marketing profiles | | `hostinger-ecommerce` | `hostinger-ecommerce-mcp` | 29 | Stores, products, sales channels, shipping | | `hostinger-vps` | `hostinger-vps-mcp` | 64 | Virtual machines, firewalls, snapshots, backups, SSH keys, metrics | +| `hostinger-mail` | `hostinger-mail-mcp` | 38 | Email orders, mailboxes, aliases, forwarders, catch-alls, autoreplies, mail logs, webhooks, Mail API tokens | -`@hostinger/mcp` also publishes `hostinger-mail-mcp` and `hostinger-horizons-mcp`, which the plugin doesn't wire up. +The mail server sets up email. To read or send messages, create a token with `mail_api-tokens_create` and use it with the [Hostinger Mail API](https://api.mail.hostinger.com/). + +`@hostinger/mcp` also publishes `hostinger-horizons-mcp`, which the plugin doesn't wire up. Operation names follow the API — `hosting_websites_list`, `dns_records_list`, `billing_subscriptions_list` — and the prefix tells you which server owns the operation. For the full catalog, see [`scripts/mcp-tools.json`](scripts/mcp-tools.json) or [hostinger/api-mcp-server](https://github.com/hostinger/api-mcp-server). diff --git a/mcp.json b/mcp.json index 31fa3dd..ee73e2b 100644 --- a/mcp.json +++ b/mcp.json @@ -3,47 +3,52 @@ "hostinger-hosting": { "command": "npx", "args": ["--yes", "--package=@hostinger/mcp@latest", "hostinger-hosting-mcp"], - "env": { "USER_AGENT": "plugin;cursor;0.3.2" } + "env": { "USER_AGENT": "plugin;cursor;0.3.3" } }, "hostinger-wordpress": { "command": "npx", "args": ["--yes", "--package=@hostinger/mcp@latest", "hostinger-wordpress-mcp"], - "env": { "USER_AGENT": "plugin;cursor;0.3.2" } + "env": { "USER_AGENT": "plugin;cursor;0.3.3" } }, "hostinger-agency-hosting": { "command": "npx", "args": ["--yes", "--package=@hostinger/mcp@latest", "hostinger-agency-hosting-mcp"], - "env": { "USER_AGENT": "plugin;cursor;0.3.2" } + "env": { "USER_AGENT": "plugin;cursor;0.3.3" } }, "hostinger-domains": { "command": "npx", "args": ["--yes", "--package=@hostinger/mcp@latest", "hostinger-domains-mcp"], - "env": { "USER_AGENT": "plugin;cursor;0.3.2" } + "env": { "USER_AGENT": "plugin;cursor;0.3.3" } }, "hostinger-dns": { "command": "npx", "args": ["--yes", "--package=@hostinger/mcp@latest", "hostinger-dns-mcp"], - "env": { "USER_AGENT": "plugin;cursor;0.3.2" } + "env": { "USER_AGENT": "plugin;cursor;0.3.3" } }, "hostinger-billing": { "command": "npx", "args": ["--yes", "--package=@hostinger/mcp@latest", "hostinger-billing-mcp"], - "env": { "USER_AGENT": "plugin;cursor;0.3.2" } + "env": { "USER_AGENT": "plugin;cursor;0.3.3" } }, "hostinger-reach": { "command": "npx", "args": ["--yes", "--package=@hostinger/mcp@latest", "hostinger-reach-mcp"], - "env": { "USER_AGENT": "plugin;cursor;0.3.2" } + "env": { "USER_AGENT": "plugin;cursor;0.3.3" } }, "hostinger-ecommerce": { "command": "npx", "args": ["--yes", "--package=@hostinger/mcp@latest", "hostinger-ecommerce-mcp"], - "env": { "USER_AGENT": "plugin;cursor;0.3.2" } + "env": { "USER_AGENT": "plugin;cursor;0.3.3" } }, "hostinger-vps": { "command": "npx", "args": ["--yes", "--package=@hostinger/mcp@latest", "hostinger-vps-mcp"], - "env": { "USER_AGENT": "plugin;cursor;0.3.2" } + "env": { "USER_AGENT": "plugin;cursor;0.3.3" } + }, + "hostinger-mail": { + "command": "npx", + "args": ["--yes", "--package=@hostinger/mcp@latest", "hostinger-mail-mcp"], + "env": { "USER_AGENT": "plugin;cursor;0.3.3" } } } } diff --git a/rules/confirm-destructive-actions.mdc b/rules/confirm-destructive-actions.mdc index 1e31593..5d240e9 100644 --- a/rules/confirm-destructive-actions.mdc +++ b/rules/confirm-destructive-actions.mdc @@ -17,7 +17,8 @@ The ones that do the most damage when wrong — confirm these even inside a flow - **Deletes data for good:** `hosting_websites_delete`, `agency-hosting_websites_delete`, `hosting_databases_delete`, `agency-hosting_databases_delete-website`, `wordpress_installations_delete`, `vps_virtual-machines_recreate`. - **Overwrites what is live:** `hosting_deploy-static-website`, `hosting_deploy-js-application`, `hosting_websites_deploy-static-site-archive`, `hosting_nodejs_start-build`, `hosting_import-wordpress-website`, `wordpress_installations_import-website`, `agency-hosting_deploy-php-application`, `agency-hosting_deploy-node-static-website`, `vps_snapshots_restore`, `vps_backups_restore`. - **Replaces a whole set:** `hosting_nodejs_replace-environment-variables` (every variable not sent is deleted), `agency-hosting_php_replace-website-options`, `agency-hosting_php_replace-website-extensions`. -- **Breaks traffic or mail:** `dns_records_update` (its `overwrite` defaults to `true`), `dns_records_delete`, `dns_records_reset`, `dns_snapshots_restore`, `domains_portfolio_update-nameservers`, `agency-hosting_domains_change-website`, and any change to apex `A`/`AAAA`, `NS` or `MX` records. +- **Breaks traffic or mail:** `dns_records_update` (its `overwrite` defaults to `true`), `dns_records_delete`, `dns_records_reset`, `dns_snapshots_restore`, `domains_portfolio_update-nameservers`, `agency-hosting_domains_change-website`, and any change to apex `A`/`AAAA`, `NS` or `MX` records; `mail_mailboxes_delete-mailbox` and `mail_mailboxes_change-mailbox-password`, which signs every mail client out. +- **Hands out access:** `mail_api-tokens_create` returns a token that can read and send email in the mailboxes it is scoped to. ## Confirmation format diff --git a/rules/prefer-mcp-tools.mdc b/rules/prefer-mcp-tools.mdc index d9b273d..00ddb0a 100644 --- a/rules/prefer-mcp-tools.mdc +++ b/rules/prefer-mcp-tools.mdc @@ -5,7 +5,7 @@ alwaysApply: true # Use the Hostinger MCP servers, not shell hacks -When the user asks about anything on Hostinger — websites, WordPress, Agency Plan sites, domains, DNS, VPS, subscriptions, email marketing, ecommerce — use one of this plugin's Hostinger MCP servers instead of: +When the user asks about anything on Hostinger — websites, WordPress, Agency Plan sites, domains, DNS, VPS, subscriptions, email, email marketing, ecommerce — use one of this plugin's Hostinger MCP servers instead of: - `curl` / `wget` against `https://developers.hostinger.com` - `ssh` into a host to read files or run commands @@ -36,6 +36,7 @@ The plugin registers one server per product area. The operation prefix tells you | `hostinger-reach` | `reach_` | Contacts, segments, email marketing profiles | | `hostinger-ecommerce` | `ecommerce_` | Stores, products, sales channels, shipping | | `hostinger-vps` | `vps_` | Virtual machines, firewalls, snapshots, backups, SSH keys, metrics | +| `hostinger-mail` | `mail_` | Email orders, mailboxes, aliases, forwarders, catch-alls, autoreplies, mail logs, webhooks, Mail API tokens | ## Operation selection @@ -44,6 +45,12 @@ The plugin registers one server per product area. The operation prefix tells you - Read before you write: pair a read with every change so you can report the before and after state. - For multi-step web hosting work — troubleshooting a site, connecting a domain, deploying, WordPress maintenance, an account audit, a migration — follow the matching skill in this plugin. +## Email + +- The `mail_` operations set up email: they create and delete mailboxes, aliases and forwarders, and read mail logs. They cannot read or send a message. +- To read, search, send or organise email in a mailbox, create a token with `mail_api-tokens_create`, scoped to the mailboxes you need, and use it with the Hostinger Mail API at `https://api.mail.hostinger.com/`. Revoke it with `mail_api-tokens_revoke` when the work is done. +- Never ask the user for a mailbox password, and never change one with `mail_mailboxes_change-mailbox-password` to get in. + ## Not covered by the API Say so plainly instead of substituting a plausible-sounding call: