hostinger-mcp-server@3.32.1
CAUTION· startup onlyPublisher claims: "Interact with Hostinger services over the Hostinger API." Observed in sandbox: no network, touches nothing outside the project, writes no memory.
Coverage
Startup only; authenticated tool behavior not tested.- Tested
- server startup over stdio (initialize sent) · every file read, file written and host contacted by what ran
- Not tested
- the tool list (the server exited before answering) · what the tools do when called with real credentials
What this means for the label: Caution here covers what ran. The server's tools were not exercised with a real credential, so nothing about their behavior is asserted; the credential summary below says what to do with that.
Before you give it your token
- It will ask for
API_TOKENAPITOKENAUTH_KEYAUTHORIZE_PATHHOSTINGER_API_TOKENOAUTH_ISSUERREST_AUTH_KEYTOKEN_PATHConfiguration, not credentials: API_BASE_URL, API_HEADERS, CALLBACK_PATH, MCP_PROJECT_DIR, REGISTER_PATH, REVOKE_PATH, SystemDrive, SystemRoot, USER_AGENT- Where it talks to
- hostinger.com (its own)Also mcpservers.org, unsplash.com, wordpress.org, ipify.org, monarx.com — not the publisher's domain; check what for before connecting.
- What the honeypot saw
- no credential files read · no network
- What we could not test
- the tool list (the server exited before answering) · what the tools do when called with real credentials
Connect it with a scoped credential, under the guard, and read the third-party hosts first. The code names mcpservers.org, unsplash.com, wordpress.org, ipify.org, monarx.com as well as its own vendor. The guard injects API_TOKEN, APITOKEN, AUTH_KEY, AUTHORIZE_PATH, HOSTINGER_API_TOKEN, OAUTH_ISSUER, REST_AUTH_KEY, TOKEN_PATH only into requests to hostinger.com (and its subdomains) and refuses the rest.
Never paste a credential into a chat, a ticket or a report, including ours. How the guard holds it.
Is [email protected] safe to install?
KillerSkills ran it in the KillerSkills honeypot sandbox (2 scenarios; startup only; authenticated tool behavior not tested) on 2026-11-10 and scored it 71/100 (Caution). It is not known to be malicious, but it has behaviour or code a security policy should decide on before install. Notable findings: Access to sensitive file paths; Destructive file system command detected; Access to sensitive file paths. Summary: no network, touches nothing outside the project, writes no memory.
Behavior trace
Honeypot run · 26 s · 2 scenarios · 0 deviationsStatic findings
// Env files (examples such as .env.example are kept), credentials and private keys: a deploy would serve themFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…ostinger-mcp-$V.tgz\" -C \"$D\" --strip-components=2 package/skills/headless && rm \"$D/hostinger-mcp-$V.tgz\"; }; } \\\n && echo \"$D/headless\" )\n```\n\n```powe…Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.2. Build the full set: every current key plus the new ones, with real values from the project's `.env` or the user. When the real value of an existing key is unknown, ask — do not drop it.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.if (['.env', '.envrc', '.netrc', '.git-credentials', '.pgpass', '.npmrc', '.hostinger.yaml', 'credentials.json', 'auth.json', '.my.cnf', '.pypirc', '.vault-token'].includes(name)) {Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.if (['.env', '.envrc', '.netrc', '.git-credentials', '.pgpass', '.npmrc', '.hostinger.yaml', 'credentials.json', 'auth.json', '.my.cnf', '.pypirc', '.vault-token'].includes(name)) {Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.// Env files (examples such as .env.example are kept), credentials and private keys: a deploy would serve themFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…e 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 w…Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.Never include passwords, JWTs or other secrets in the report. For wp-admin access, give the URL andFix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.4. **Never** put the password in source, a committed `.env`, client-side JavaScript, or a chat reply;Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.… packs the directory (honouring `.gitignore`; skipping `node_modules`, `.git`, `.env` files, credentials and private keys, and listing symlinks it does not follow),…Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…e 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 w…Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.return name.startsWith('.env.') && !['.env.example', '.env.sample', '.env.template', '.env.dist'].includes(name);Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…ects what the project is, packs it itself (it skips `node_modules`, `.git` and `.env` files, listing the `.env` ones as `skippedFiles` so you can set their values w…Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.return name.startsWith('.env.') && !['.env.example', '.env.sample', '.env.template', '.env.dist'].includes(name);Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…ource:** no `node_modules/`, no build output (`dist/`, `.next/`, `build/`), no `.env*`, nothing matched by `.gitignore`; 50 MB at most. `git archive --format=zip -o…Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.this.log('error', `Failed to fetch upload credentials: ${errorMessage}`);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…at request; send\nthe full desired set with real values taken from the project `.env` file or the user\nprompt instead.", "method": "GET", "path": "/api/hos…Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.this.log('warning', 'Upload credentials request failed, retrying: ' + error.message);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…the same way. When none are stored, they are detected from the branch's `package.json` and stored for those pushes; pass `appType`, `nodeVersion`, `outputDirectory`, `buildScript` or `entryFile` to override them (a compiled app still …Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.… packs the directory (honouring `.gitignore`; skipping `node_modules`, `.git`, `.env` files, credentials and private keys, and listing symlinks it does not follow),…Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.this.log('debug', `Making pre-upload POST request to ${uploadUrlWithFile}`);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…ch the Hostinger MCP server + OAuth sign-in), then route to the matching coding-tool skill under tools/ so MCP tools and skills are available before the build steps run. Triggers: connect to Hostinger, set up the Hostinger connector, start…Fix: Namespace tool names and keep tool descriptions literal; no instructions to the agent inside them.…: "static"`, you are on a stale/legacy skill copy — stop and update the skill (`npx skills update` or the plugin update for an installed skill, or connect's Phase 1 npm i…Fix: Pin versions and sources; vendor anything fetched at install time.// The headless skill's launcher starts this server from the home folder (npx run in the project wouldFix: Pin versions and sources; vendor anything fetched at install time.Map `frontend.framework` (from `state.json`) to its `appType` + build output directory, and pass thoseFix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.The launcher runs npx from the home folder instead. A registration runs exactly the bootstrap'sFix: Pin versions and sources; vendor anything fetched at install time.…at request; send\nthe full desired set with real values taken from the project `.env` file or the user\nprompt instead.", "method": "GET", "path": "/api/hos…Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.`package.json`, `package-lock.json`, `.nvmrc`. **Exclude** `node_modules/`, the build outputFix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.// Keeps the absolute PATH entries outside any node_modules folder. npx run in a project puts itsFix: Pin versions and sources; vendor anything fetched at install time.this.log('error', `Pre-upload POST request failed: ${errorMessage}`);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…ch the Hostinger MCP server + OAuth sign-in), then route to the matching coding-tool skill under tools/ so MCP tools and skills are available before the build steps run. Triggers: connect to Hostinger, set up the Hostinger connector, start…Fix: Namespace tool names and keep tool descriptions literal; no instructions to the agent inside them."start:ts": "npx tsc && node dist/src/servers/all.js"Fix: Pin versions and sources; vendor anything fetched at install time.…t needs no API token.\n\nFor end-to-end site builds install the headless skill: npx skills add hostinger/api-mcp-server"; export default instructions; Fix: Pin versions and sources; vendor anything fetched at install time.…referred; it is archived for you, skipping node_modules, .git and secret files (.env, keys, credentials), but not reading .gitignore, so keep build output out) or a…Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."description": "Absolute or relative path to the theme directory containing all theme files. node_modules, .git, symlinks and secret files (.env, keys, credentials) are not uploaded."Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.this.log('error', 'Pre-upload POST request failed - Full Response Details:', {Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why."description": "Absolute or relative path to the plugin directory containing all plugin files. node_modules, .git, symlinks and secret files (.env, keys, credentials) are not uploaded."Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."description": "Absolute or relative path to the theme directory containing all theme files. node_modules, .git, symlinks and secret files (.env, keys, credentials) are not uploaded."Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."description": "Absolute or relative path to the plugin directory containing all plugin files. node_modules, .git, symlinks and secret files (.env, keys, credentials) are not uploaded."Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.// The headless skill's launcher starts this server from the home folder (npx run in the project wouldFix: Pin versions and sources; vendor anything fetched at install time.…referred; it is archived for you, skipping node_modules, .git and secret files (.env, keys, credentials), but not reading .gitignore, so keep build output out) or a…Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…t needs no API token.\n\nFor end-to-end site builds install the headless skill: npx skills add hostinger/api-mcp-server"; Fix: Pin versions and sources; vendor anything fetched at install time.`npx next start`), check desktop and mobile widths, navigation and a couple of key routes, and presentFix: Pin versions and sources; vendor anything fetched at install time.- **Contact form** (`site.json → contact_form.enabled`): POST one throwaway test submission (dummyFix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…est. Always send the full desired set with real\nvalues taken from the project `.env` file or the user prompt.", "method": "PUT", "path": "/api/hosting/v1/a…Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.console.log(`send it: pass ${file} unchanged to hosting_headless_submit-build-report, then run report-sent ${id} (or report-rejected ${id} on a 422)`);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.….json`, you are running a stale/legacy skill copy — stop and update the skill (`npx skills update` or the plugin update for an installed skill, or connect's Phase 1 npm i…Fix: Pin versions and sources; vendor anything fetched at install time.…ostinger-mcp-$V.tgz\" -C \"$D\" --strip-components=2 package/skills/headless && rm \"$D/hostinger-mcp-$V.tgz\"; }; } \\\n && echo \"$D/headless\" )\n```\n\n```powe…Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.…est. Always send the full desired set with real\nvalues taken from the project `.env` file or the user prompt.", "method": "PUT", "path": "/api/hosting/v1/a…Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.… packs the directory (honouring `.gitignore`; skipping `node_modules`, `.git`, `.env` files, credentials and private keys, and listing symlinks it does not follow),…Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…p 4 for a headless WordPress backend: write the drafted content into one content.json and run push-content.mjs, which creates the site title, categories, tags, images, pages, posts, menu, Yoast fields and the WooCommerce catalog through th…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.- **An installer put the skill here** (you read this file from disk, from a folder that `npx skillsFix: Pin versions and sources; vendor anything fetched at install time.// Keeps the absolute PATH entries outside any node_modules folder. npx run in a project puts itsFix: Pin versions and sources; vendor anything fetched at install time.download nothing. Updates come from the installer (`npx skills update`, the plugin update),Fix: Pin versions and sources; vendor anything fetched at install time.repository or template. npx run there puts the project's `node_modules/.bin` first on PATH and readsFix: Pin versions and sources; vendor anything fetched at install time.this.log('warning', 'Upload credentials request failed, retrying: ' + error.message);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…check-state without waiting for a reply.\n\n\n## Reference Sources\n\n- https://mcpservers.org/servers/hostinger/api-mcp-server\n- https://www.hostinger.com/connector\n" }, { "uri": "skill://host…Fix: Namespace tool names and keep tool descriptions literal; no instructions to the agent inside them.….json`, you are running a stale/legacy skill copy — stop and update the skill (`npx skills update` or the plugin update for an installed skill, or connect's Phase 1 npm i…Fix: Pin versions and sources; vendor anything fetched at install time.this.log('error', `Pre-upload POST request failed: ${errorMessage}`);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.….json`, you are running a stale/legacy skill copy — stop and update the skill (`npx skills update` or the plugin update for an installed skill, or connect's Phase 1 npm i…Fix: Pin versions and sources; vendor anything fetched at install time.… so every project and every\nlater run has them). Merge them into any existing `mcpServers` rather than replacing the file.\n**Do not** put `HOSTINGER_API_TOKEN` in this file when you want OAuth: leave the token unset so\nOAuth can run:\n\…Fix: Namespace tool names and keep tool descriptions literal; no instructions to the agent inside them.…r before the first deploy to a site that already has content. A `.hostinger/site.json` that came with the project (committed to Git, or in a cloned or downloaded project) is not an earlier deploy: whoever wrote it chose the domain, so conf…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why."description": "Application root directory (where package.json is located) relative to public_html.\nOmit it, or send \".\", for public_html itself."Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…tep 3.\n\nIf either is missing, register the missing server(s) in `~/.cursor/mcp.json` (global, so every project and every\nlater run has them). Merge them into any existing `mcpServers` rather than replacing the file.\n**Do not** put `HOS…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.… for the site (when none are stored, they are detected from the branch's package.json; pass appType, nodeVersion, outputDirectory, buildScript or entryFile to override them). Git needs GitHub or GitLa…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…lse }, "description": "Auto-detect Node.js build settings from a package.json inside an archive already on the server.\n\nUse this before calling `Start Node.js Build` to preview what settings will be used,\nor to let the user review and o…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…staller put the skill here** (you read this file from disk, from a folder that `npx skills\n add` or a Claude Code or Cursor plugin installed): that folder is `<skill>`. U…Fix: Pin versions and sources; vendor anything fetched at install time.…r before the first deploy to a site that already has content. A `.hostinger/site.json` that came with the project (committed to Git, or in a cloned or downloaded project) is not an earlier deploy: whoever wrote it chose the domain, so conf…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.… for the site (when none are stored, they are detected from the branch's package.json; pass appType, nodeVersion, outputDirectory, buildScript or entryFile to override them). Git needs GitHub or GitLa…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…SION`: its line 1 is the skills version this run uses, which goes into\n`connect.json` (Phase 3).\n\n### Run the bootstrap\n\nRun the bundled script. It verifies the MCP server and handles sign-in, emitting one JSON event per line on stdou…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.… so every project and every\nlater run has them). Merge them into any existing `mcpServers` rather than replacing the file.\n**Do not** put `HOSTINGER_API_TOKEN` in this file when you want OAuth: leave the token unset so\nOAuth can run:\n\…Fix: Namespace tool names and keep tool descriptions literal; no instructions to the agent inside them.… | `connect/SKILL.md` → `connect/tools/<tool>.md` | `connect.json` | no |\n| 1 | **check state** — where does this domain stand? resume / switch / start over | `steps/01-check-state/SKILL.md` | `state.json` | no |\n| 2 | **refine** — disco…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.… | `connect/SKILL.md` → `connect/tools/<tool>.md` | `connect.json` | no |\n| 1 | **check state** — where does this domain stand? resume / switch / start over | `steps/01-check-state/SKILL.md` | `state.json` | no |\n| 2 | **refine** — disco…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…, '.config');\n const credsPath = path.join(base, 'hostinger-mcp', 'credentials.json');\n if (existsSync(credsPath)) {\n try {\n const creds = JSON.parse(readFileSync(credsPath, 'utf8'));\n if (creds.refresh_token || (creds.access_token &&…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…lse }, "description": "Auto-detect Node.js build settings from a package.json inside an archive already on the server.\n\nUse this before calling `Start Node.js Build` to preview what settings will be used,\nor to let the user review and o…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…tep 3.\n\nIf either is missing, register the missing server(s) in `~/.cursor/mcp.json` (global, so every project and every\nlater run has them). Merge them into any existing `mcpServers` rather than replacing the file.\n**Do not** put `HOS…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…check-state without waiting for a reply.\n\n\n## Reference Sources\n\n- https://mcpservers.org/servers/hostinger/api-mcp-server\n- https://www.hostinger.com/connector\n" }, { "uri": "skill://host…Fix: Namespace tool names and keep tool descriptions literal; no instructions to the agent inside them.this.log('error', `Failed to fetch upload credentials: ${errorMessage}`);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.… CSS, JavaScript, images, etc.) ready to be served. If the website has a package.json file or requires a build command, use hosting_deploy-js-application instead. The tool uploads the archive to the website's file browser over TUS and trig…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…is tool uploads a website archive (zip, tar, tar.gz, etc.) and a database dump (.sql file) to deploy a complete WordPress website. The archive will be extracted on the server automatically. Note: This process may take a while for larger si…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…SION`: its line 1 is the skills version this run uses, which goes into\n`connect.json` (Phase 3).\n\n### Run the bootstrap\n\nRun the bundled script. It verifies the MCP server and handles sign-in, emitting one JSON event per line on stdou…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…is tool uploads a website archive (zip, tar, tar.gz, etc.) and a database dump (.sql file) to deploy a complete WordPress website. The archive will be extracted on the server automatically. Note: This process may take a while for larger si…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.this.log('error', 'Pre-upload POST request failed - Full Response Details:', {Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…, '.config');\n const credsPath = path.join(base, 'hostinger-mcp', 'credentials.json');\n if (existsSync(credsPath)) {\n try {\n const creds = JSON.parse(readFileSync(credsPath, 'utf8'));\n if (creds.refresh_token || (creds.access_token &&…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.this.log('debug', `Making pre-upload POST request to ${uploadUrlWithFile}`);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.… CSS, JavaScript, images, etc.) ready to be served. If the website has a package.json file or requires a build command, use hosting_deploy-js-application instead. The tool uploads the archive to the website's file browser over TUS and trig…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…staller put the skill here** (you read this file from disk, from a folder that `npx skills\n add` or a Claude Code or Cursor plugin installed): that folder is `<skill>`. U…Fix: Pin versions and sources; vendor anything fetched at install time."description": "Application root directory (where package.json is located) relative to public_html.\nOmit it, or send \".\", for public_html itself."Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.Cost to the agent
Tokens estimated at four characters each. The tool list is re-read by the agent on every turn, so it is the number to compare between servers that do the same job: ranked across the index.
Known vulnerabilities
Vulnerability advisories (OSV) cover npm and PyPI packages; this registry has no advisory database.
What would make this Verified
9 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%- Unclaimed publisher≈ +8 on the totalClaim hostinger: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
- Access to sensitive file paths≈ +4 on the totalStop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
- Destructive file system command detected≈ +4 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.
- Cross-server tool reference≈ +4 on the totalNamespace tool names and keep tool descriptions literal; no instructions to the agent inside them.
- File type combined with upload action≈ +2 on the totalRemove the call, or declare the host in frontmatter and explain in the README what is sent and why.
- npx invocation of non-well-known package≈ +2 on the totalPin versions and sources; vendor anything fetched at install time.