# PageMotor on Hostinger with Cursor — LLM Prompt

> **How to use this file:** Paste the entire contents into Claude, ChatGPT, Gemini, or any LLM as your opening message. It gives the model the whole guide, so it can walk you through it, ask where you have got to, and help when something does not behave.
>
> *Source: [https://documentation.elmspark.com/guides/pagemotor-cursor/](https://documentation.elmspark.com/guides/pagemotor-cursor/)*

---

You are helping me with the following. Use this guide as your reference. Work through it with me, ask what I have already done, and help me troubleshoot. Where a step changes something on a live site, a domain, or a server, tell me what it will do and wait for me to confirm before we go on. If something here contradicts what I am actually seeing, say so rather than guessing.

**What this covers:** Hostinger has a native MCP server for Cursor. Add it to Cursor's MCP config, then use Composer to provision a PageMotor VPS, set DNS, and deploy — without leaving your editor.

# PageMotor on Hostinger with Cursor

Hostinger have a native MCP server and Cursor is one of the supported IDEs. Connect it once through Cursor’s settings, then use Composer to provision a PageMotor VPS, set DNS, and deploy — without a browser or a separate terminal.

▶ The whole route in 4 minutes 3 seconds, narrated, with captions — the two things that differ from the Claude Code route, and the template whose name makes it look right while quietly breaking everything after it.

**Read the narration instead**

**The shape of it.** Hostinger have a native MCP server, and Cursor is a supported editor. Connect it once through Cursor's settings, then use Composer to provision a VPS, set DNS and deploy — without a browser or a separate terminal.

**If you know the Claude Code version.** There are only two differences. Same Hostinger MCP, same prompt templates, same on-box setup script. What changes is where the config goes — Cursor's own settings rather than a Claude Code config file — and that you run the prompts in Composer.

**First time on a VPS?** Three things do three different jobs. Cursor can run server commands through Composer once the MCP is connected, which is what this sets up; a chat window on its own does not touch your server. CloudPanel is your control panel — sites, databases and SSL, point and click. A terminal is a text window connected to the server itself, where any command actually runs.

**Two ways in.** In hPanel, click API in the left sidebar under Dev tools; the page opens with the Cursor tab highlighted. The Hostinger Connector extension handles the connection through a UI with no JSON editing. Or configure manually, for more control over exactly which tools load into Composer — the route this guide walks.

**Tick two tools, untick the rest.** **Domains and DNS** sets the A record pointing your domain at the new server; **VPS hosting** creates and manages the servers. Hostinger's own page puts it well: enable only the products you use, for faster and more focused responses. Fewer tools means a cleaner Composer context window.

**Name it, then copy it immediately.** Generating opens a modal with a name field and an expiry dropdown; *Never expires* is the practical choice for a dev-tool token on your own machine. The token then shows once — refreshing or leaving hides it permanently, and Regenerate invalidates the old one immediately.

**Save it, then restart Cursor.** The generated JSON is tailored to the tools you ticked. Add your token as an environment variable in each server entry, save to `~/.cursor/mcp.json`, and restart. The restart is what actually loads it, and it is easy to skip.

**Open Composer and ask.** One brief covers the whole job: the plan, the CloudPanel template, the region, a hostname and your SSH public key. Then read the IP back and create the DNS A record pointing your domain at it. Regions work by name or by ID.

**The same trap as the Claude Code route.** Hostinger ships a separate image whose name mentions Claude Code, and it sounds like the obvious pick. It has *no control panel on it*, so site creation, the database and the certificate all break afterwards. Take the CloudPanel template — and because template IDs change, have Composer list the templates and choose by *name* first.

**Then prove it.** Install EP Host Check and read its report. It inspects the finished box and tells you what it can and cannot do, each with a plain fix, rather than you assuming the provisioning worked.

A VPS is a real computer that you control, and a few steps below ask you to run a command "on the server". Here is what that means, because it trips up nearly everyone the first time.

**Three things, three different jobs:**

- **Cursor (your editor)** can run server commands through Composer once the Hostinger MCP is connected, which is what this guide sets up. On its own, a chat window does not touch your server.
- **CloudPanel** is your control panel: a web page for managing sites, databases and SSL. Point and click. It is not where you type server commands.
- **A terminal** is a plain text window connected to the server itself. This is where any command in this guide actually runs.

So when you see a line like `chown -R ...`, it runs in a **terminal on the VPS**. Not in Cursor, not in CloudPanel.

**Two ways to open a terminal on your VPS:**

1. **Browser terminal (easiest).** In hPanel, open your VPS and click the **Terminal** button in the overview. A terminal opens in your browser, already logged in to your server. Paste your command and press Enter. Hostinger has a step-by-step with screenshots: [How to use the Hostinger VPS Browser terminal](https://www.hostinger.com/support/7978544-how-to-use-the-browser-terminal-in-hostinger/).
2. **SSH from your own computer.** Open Terminal on a Mac, or PowerShell on Windows, and type `ssh root@YOUR-VPS-IP`. Your IP is on the Hostinger VPS page. Enter the root password when prompted. **Note:** as you type the password nothing appears on screen, no dots or stars. That is normal, just type it and press Enter.

**The details you swap into commands:**

- **VPS IP** and **root password**: on your Hostinger VPS dashboard.
- **Site User** and **site path**: in CloudPanel. The path is usually `/home/SITEUSER/htdocs/yourdomain.com`.

When you are finished, type `exit` to leave. That is the whole mystery solved. The rest of this guide is the easy part.

## 1 Go to the Hostinger API page

Log into hPanel and click **API** in the left sidebar under Dev tools. The page opens with the Cursor tab already highlighted.

## 2 Select the MCP tools you need

Click **Config manually**. The page reveals a numbered setup flow, starting with tool selection. For PageMotor you need two:

- **Domains and DNS** — sets the A record that points your domain at the new server
- **VPS hosting** — creates and manages your servers

Tick only those two and untick the rest. The file path below the grid confirms where the config goes: `~/.cursor/mcp.json`.

## 3 Generate your API token

Scroll up to the **Generate an API token** section and click the button.

A modal opens with a name field and an expiration dropdown. Give it a name you will recognise (e.g. `cursor-token`) and set expiration to **Never expires**.

## 4 Copy the token before leaving the page

After generating, the token appears once with a copy warning. Copy it now — refreshing or leaving the page hides it permanently.

## 5 Copy the MCP JSON config

Scroll back down to the Manual Configuration section. Step 3 on the page shows the JSON Hostinger generated for the tools you selected. Use the Copy button on the right of the code block.

Add your token as an `env` variable in each server entry. The complete, paste-ready version for DNS + VPS:

```
{
  "mcpServers": {
    "hostinger-dns": {
      "command": "npx",
      "args": ["--package=hostinger-api-mcp@latest", "hostinger-dns-mcp"],
      "env": { "HOSTINGER_API_TOKEN": "YOUR-TOKEN-HERE" }
    },
    "hostinger-vps": {
      "command": "npx",
      "args": ["--package=hostinger-api-mcp@latest", "hostinger-vps-mcp"],
      "env": { "HOSTINGER_API_TOKEN": "YOUR-TOKEN-HERE" }
    }
  }
}
```

Replace `YOUR-TOKEN-HERE` with the token from Step 4. It must appear in each server entry separately.

## 6 Save to ~/.cursor/mcp.json and restart

Save the JSON to `~/.cursor/mcp.json` (the path the Hostinger page showed in Step 2). Create the file if it does not exist; if it does, add the Hostinger entries inside the existing `mcpServers` object.

Restart Cursor. The MCP servers load automatically.

## 7 Open Composer and provision the VPS

Press Cmd I to open Composer. Paste this prompt, editing your domain and details:

**Which region should I pick? (datacenter IDs)**

Specify by name or ID — the MCP understands both. IDs confirmed from the live API:

| ID | Location | Good for |
|---|---|---|
| `18` | Manchester, UK | Ireland, UK, Northern Europe |
| `15` | Paris, France | Western Europe |
| `19` | Frankfurt, Germany | Central Europe |
| `11` | Vilnius, Lithuania | Eastern Europe / Baltic |
| `24` | Boston 2, USA | US East Coast |

**What does Composer actually send to the Hostinger API?**

For the technically curious. The MCP translates your plain-English request into a call like this:

```
POST /api/vps/v1/virtual-machines
{
  "item_id": "hostingercom-vps-kvm2-usd-1m",   // KVM 2, billed monthly
  "setup": {
    "template_id": 1096,               // Ubuntu 24.04 with CloudPanel
    "data_center_id": 18,             // Manchester, UK
    "hostname": "pagemotor-mysite",
    "public_key": "ssh-ed25519 ..."   // from ~/.ssh/id_ed25519.pub
  }
}
```

The `item_id` is the billing price ID. Monthly and annual differ by suffix:

| Plan | RAM | Monthly price ID | Intro price |
|---|---|---|---|
| KVM 1 | 4 GB | `hostingercom-vps-kvm1-usd-1m` | $9.99/mo |
| KVM 2 | 8 GB | `hostingercom-vps-kvm2-usd-1m` | $13.99/mo |
| KVM 4 | 16 GB | `hostingercom-vps-kvm4-usd-1m` | $25.99/mo |
| KVM 8 | 32 GB | `hostingercom-vps-kvm8-usd-1m` | $50.99/mo |

Swap `-1m` for `-1y` or `-2y` for annual billing, which is cheaper per month.

Cursor Composer calls the `hostinger-vps` and `hostinger-dns` MCP tools directly. You can watch which tools it calls in the Composer panel. Provisioning takes three to six minutes — Composer will poll and update you.

## 8 Let Composer finish the on-box setup

Once the VPS is running and DNS is set, give Composer the second brief. Download the on-box script first so Cursor can reference it with @ :

Then paste this into Composer (use `@provision-pagemotor.sh` at the top to attach the file):

Cursor reads the script, adapts the commands to your site name, and runs them over SSH using its built-in terminal. It will output each step as it runs.

- Database names use **hyphens, not underscores** (CloudPanel rejects underscores silently).
- PHP version must be **8.3** — do not let it default to 8.5.
- PageMotor files go straight into the **site root**, not a subfolder.
- SSL is requested *after* DNS resolves — the script loops and waits.
- nginx ignores PageMotor's `.htaccess` directory protection, so the deny rules in the prompt's step 7 are load-bearing, not optional. PageMotor probes for them itself and raises an admin warning if they are missing. Details, and why this bites hardest on migrations: Migrating an existing site onto this VPS? below.

## 9 Verify with EP Host Check

Visit `https://mysite.com/admin/` and register your PageMotor admin account. Then install **EP Host Check** from the EP Suite updates channel and run it.

All 12 checks should be green. The key one is *PHP can save PageMotor’s files*. That is the check that goes red on a locked-down shared host and green on a properly-owned VPS. When it is green, your designs will save, your theme will compile, and the “9 out of 10 bugs are the host” category is closed.

## Migrating an existing site onto this VPS?

A fresh install can skip this section. If you are moving an existing PageMotor site here from another host, two things break silently on the way in. Both come from a real migration reported on the PageMotor developers forum, so this is field experience, not theory.

**1. Apache protection does not follow you to nginx.** PageMotor guards its sensitive directories (error logs, Skill state, and protected uploads including Brain files) with per-directory `.htaccess` files, which is automatic on Apache and LiteSpeed. CloudPanel serves your site with nginx, and nginx ignores `.htaccess` entirely. So the moment nginx starts serving a migrated site those directories are publicly readable over the web, and nothing looks broken. Current PageMotor releases probe for this themselves and raise an admin warning with the exact paths for your install. The fix is three rules. In CloudPanel open **Sites → your site → Vhost**, add these inside the `server { }` block, and save:

```
location ^~ /user-content/logs/              { deny all; }
location ^~ /user-content/skills/            { deny all; }
location ^~ /user-content/uploads/protected/ { deny all; }
```

Always edit the vhost through the CloudPanel page, not the file on disk: the panel regenerates that file, and panel edits are what survive. To confirm the rules are live, request `https://yourdomain.com/user-content/logs/` in a browser. You want a 403, not a log file.

**2. Zip extraction can strip the write bits.** If you carry the site over as a zip and extract it on the server, directories can come out as `555` (read and execute, no write) depending on what built the zip. Ownership then looks perfect, every file belongs to the site user, but PHP cannot write anywhere, and the first symptom is usually a plugin install failing with “staging directory could not be created”. The scripted provision this guide references sets the permission bits explicitly, so a from-scratch build never hits this; a hand-carried zip is the case it cannot see. The fix is one pass in a server terminal:

```
cd /home/SITEUSER/htdocs/yourdomain.com
chown -R SITEUSER:www-data .
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
```

## Who looks after this server?

**You do.** Hostinger sell a self-managed VPS, and say so plainly on their own VPS page: *“As our VPS solutions are self-managed, you will get full freedom to configure and manage the virtual server.”*

Hostinger looks after the hardware, the network, DDoS filtering at the edge, and whatever backups your plan includes. Everything from Ubuntu upwards is yours: security patches, your control panel, PHP, the database, your TLS certificate, and PageMotor itself.

That is not a catch. It is the same freedom that makes a VPS fix the problems shared hosting gives PageMotor. But nobody emails you when a patch is published, and a server left alone for a year is running a year of known, catalogued, publicly indexed vulnerabilities. Budget about fifteen minutes a month.

---

*Generated from the guide above. If something here looks wrong, the guide is the source of truth: https://documentation.elmspark.com/guides/pagemotor-cursor/*
