hostinger-mcp-server@3.31.1
CAUTION· install onlyPublisher claims: "Interact with Hostinger services over the Hostinger API." Observed in sandbox: no network, touches nothing outside the project, writes no memory.
Coverage
Nothing executable in the bundle ran; the trace covers the install step only.- Tested
- every file read, file written and host contacted by what ran
- Not tested
- use of the skill by an agent
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
Code inventory arrives with this version's next honeypot run.- It will ask for
- unknown until the next run
- Where it talks to
- unknown until the next run
- What the honeypot saw
- no credential files read · no network
- What we could not test
- use of the skill by an agent
Not enough was observed to say yet. Nothing executable in the bundle ran; the trace covers the install step only. This version's code has not been inventoried for credentials and hosts either; both arrive with its next honeypot run (popular servers first). `vet-skills try hostinger-mcp-server` runs it now and prints the full answer.
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 (1 scenario; nothing executable in the bundle ran; the trace covers the install step only) on 2026-11-07 and scored it 70/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; Access to sensitive file paths; Access to sensitive file paths. Summary: no network, touches nothing outside the project, writes no memory.
Behavior trace
Honeypot run · 0 s · 1 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.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.**Shared and Cloud, on the local `hostinger-api-mcp` server:** one operation does every deploy — `hosting_deploy` with `domain` and either `path` (a directory on this machine) or `git: { repository: "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.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.export default "Hostinger API notes for agents. Find operations with search; the inputSchema it returns is authoritative for request shapes. Run one with execute, or chain several with multi-execute.\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.// 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.const instructions: string = "Hostinger API notes for agents. Find operations with search; the inputSchema it returns is authoritative for request shapes. Run one with execute, or chain several with mFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.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.`hostinger up` does steps 1 to 3 in one call and is the shortest path when you can run commands and the `hostinger` CLI is installed (`brew install hostinger/tap/hostinger`), signed in and has `hostinFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.- **Node.js source:** no `node_modules/`, no build output (`dist/`, `.next/`, `build/`), no `.env*`, nothing matched by `.gitignore`; 50 MB at most. `git archive --format=zip -o app_20260101_120000.ziFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."text": "---\nname: deploy-to-hosting\ndescription: \"Deploy an existing project to a website on Hostinger web hosting (Shared, Cloud or Agency plans) and keep it deployed: picks the right deploy for Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."text": "---\nname: headless-connect-cursor\ndescription: \"Specific Cursor Hostinger MCP Server connection instructions for the Hostinger Headless flow.\"\n---\n\n## Goals\n\n- Install (or reach) theFix: Replace encoded or assembled strings with plain literals and remove undeclared network calls."text": "---\nname: hostinger-headless-connect\ndescription: \"Connect step for the Hostinger Headless flow — verify Node, run the bootstrap (reach the Hostinger MCP server + OAuth sign-in), then routFix: Namespace tool names and keep tool descriptions literal; no instructions to the agent inside them."text": "---\nname: hostinger-headless-connect\ndescription: \"Connect step for the Hostinger Headless flow — verify Node, run the bootstrap (reach the Hostinger MCP server + OAuth sign-in), then routFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell."text": "---\nname: headless-connect-cursor\ndescription: \"Specific Cursor Hostinger MCP Server connection instructions for the Hostinger Headless flow.\"\n---\n\n## Goals\n\n- Install (or reach) theFix: Replace encoded or assembled strings with plain literals and remove undeclared network calls."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": "Local directory (preferred; 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 arcFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."text": "---\nname: hostinger-headless-connect\ndescription: \"Connect step for the Hostinger Headless flow — verify Node, run the bootstrap (reach the Hostinger MCP server + OAuth sign-in), then routFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell."description": "Local directory (preferred; 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 arcFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."text": "---\nname: deploy-to-hosting\ndescription: \"Deploy an existing project to a website on Hostinger web hosting (Shared, Cloud or Agency plans) and keep it deployed: picks the right deploy for 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."description": "Replaces the website's Node.js environment variables with the ones provided. This is a\nfull replace: any variable not in the request is deleted, and sending an empty `env_vars`\narrayFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.- **Node.js sites:** starts a build of the branch with the stored build settings; later pushes build the same way. When none are stored, they are detected from the branch's `package.json` and stored fFix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why."description": "Lists the Node.js environment variables currently set for the website. Values are always\nmasked as `********` and cannot be read back through this API. Use this endpoint to see\nwhichFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."description": "Lists the Node.js environment variables currently set for the website. Values are always\nmasked as `********` and cannot be read back through this API. Use this endpoint to see\nwhichFix: 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.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."description": "Replaces the website's Node.js environment variables with the ones provided. This is a\nfull replace: any variable not in the request is deleted, and sending an empty `env_vars`\narrayFix: 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."text": "---\nname: hostinger-headless-connect\ndescription: \"Connect step for the Hostinger Headless flow — verify Node, run the bootstrap (reach the Hostinger MCP server + OAuth sign-in), then routFix: 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.description: "Push phase of Step 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, pFix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.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.// 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.- **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.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.download nothing. Updates come from the installer (`npx skills update`, the plugin update),Fix: Pin versions and sources; vendor anything fetched at install time.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.// 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.export default "Hostinger API notes for agents. Find operations with search; the inputSchema it returns is authoritative for request shapes. Run one with execute, or chain several with multi-execute.\Fix: 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."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 install for a web-installed `headFix: Pin versions and sources; vendor anything fetched at install time.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.// 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('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.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.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.`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.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.> workspace's `site.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 install for Fix: Pin versions and sources; vendor anything fetched at install time.const instructions: string = "Hostinger API notes for agents. Find operations with search; the inputSchema it returns is authoritative for request shapes. Run one with execute, or chain several with mFix: 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."text": "---\nname: hostinger-headless\ndescription: \"Orchestrator for the Hostinger Headless build flow — build and deploy a real website on the user's Hostinger account from a single prompt that naFix: Pin versions and sources; vendor anything fetched at install time.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.this.log('error', `TUS upload error for ${relativePath}`, { error: error.message });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: ${errorMessage}`);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why."text": "---\nname: headless-connect-cursor\ndescription: \"Specific Cursor Hostinger MCP Server connection instructions for the Hostinger Headless flow.\"\n---\n\n## Goals\n\n- Install (or reach) theFix: Replace encoded or assembled strings with plain literals and remove undeclared network calls."text": "---\nname: hostinger-headless\ndescription: \"Orchestrator for the Hostinger Headless build flow — build and deploy a real website on the user's Hostinger account from a single prompt that naFix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why."text": "---\nname: headless-connect-cursor\ndescription: \"Specific Cursor Hostinger MCP Server connection instructions for the Hostinger Headless flow.\"\n---\n\n## Goals\n\n- Install (or reach) theFix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why."text": "#!/usr/bin/env node\n// Hostinger Headless — bootstrap.\n// Verifies the Hostinger MCP server is reachable and drives the OAuth sign-in,\n// emitting one JSON event per line on stdout so a coFix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.// 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.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."text": "---\nname: hostinger-headless-connect\ndescription: \"Connect step for the Hostinger Headless flow — verify Node, run the bootstrap (reach the Hostinger MCP server + OAuth sign-in), then routFix: Pin versions and sources; vendor anything fetched at install time."text": "---\nname: hostinger-headless-connect\ndescription: \"Connect step for the Hostinger Headless flow — verify Node, run the bootstrap (reach the Hostinger MCP server + OAuth sign-in), then routFix: Namespace tool names and keep tool descriptions literal; no instructions to the agent inside them."text": "---\nname: hostinger-headless-connect\ndescription: \"Connect step for the Hostinger Headless flow — verify Node, run the bootstrap (reach the Hostinger MCP server + OAuth sign-in), then routFix: Pin versions and sources; vendor anything fetched at install time."text": "---\nname: headless-connect-cursor\ndescription: \"Specific Cursor Hostinger MCP Server connection instructions for the Hostinger Headless flow.\"\n---\n\n## Goals\n\n- Install (or reach) theFix: Namespace tool names and keep tool descriptions literal; no instructions to the agent inside them."text": "---\nname: deploy-to-hosting\ndescription: \"Deploy an existing project to a website on Hostinger web hosting (Shared, Cloud or Agency plans) and keep it deployed: picks the right deploy for Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why."text": "---\nname: hostinger-headless\ndescription: \"Orchestrator for the Hostinger Headless build flow — build and deploy a real website on the user's Hostinger account from a single prompt that naFix: Pin versions and sources; vendor anything fetched at install time."text": "---\nname: headless-connect-cursor\ndescription: \"Specific Cursor Hostinger MCP Server connection instructions for the Hostinger Headless flow.\"\n---\n\n## Goals\n\n- Install (or reach) theFix: Replace encoded or assembled strings with plain literals and remove undeclared network calls."text": "---\nname: hostinger-headless-connect\ndescription: \"Connect step for the Hostinger Headless flow — verify Node, run the bootstrap (reach the Hostinger MCP server + OAuth sign-in), then routFix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why."text": "---\nname: hostinger-headless-connect\ndescription: \"Connect step for the Hostinger Headless flow — verify Node, run the bootstrap (reach the Hostinger MCP server + OAuth sign-in), then routFix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why."text": "---\nname: deploy-to-hosting\ndescription: \"Deploy an existing project to a website on Hostinger web hosting (Shared, Cloud or Agency plans) and keep it deployed: picks the right deploy for Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why."text": "#!/usr/bin/env node\n// Hostinger Headless — bootstrap.\n// Verifies the Hostinger MCP server is reachable and drives the OAuth sign-in,\n// emitting one JSON event per line on stdout so a coFix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.this.log('error', `TUS upload error for ${relativePath}`, { error: error.message });Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why."text": "---\nname: hostinger-headless\ndescription: \"Orchestrator for the Hostinger Headless build flow — build and deploy a real website on the user's Hostinger account from a single prompt that naFix: 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."description": "Import a WordPress website from an archive file to a hosting server. This tool uploads a website archive (zip, tar, tar.gz, etc.) and a database dump (.sql file) to deploy a complete WFix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why."text": "---\nname: headless-connect-cursor\ndescription: \"Specific Cursor Hostinger MCP Server connection instructions for the Hostinger Headless flow.\"\n---\n\n## Goals\n\n- Install (or reach) theFix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why."description": "Deploy, publish or upload a website to Hostinger web hosting (Shared, Cloud): static HTML, PHP, a nodejs (Node.js) app, a whole WordPress site, or a WordPress plugin or theme, from a lFix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why."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,\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."description": "Deploy a static website from an archive file to a hosting server. IMPORTANT: This tool only works for static websites with no build process. The archive must contain pre-built static fFix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why."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,\Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why."description": "Import a WordPress website from an archive file to a hosting server. This tool uploads a website archive (zip, tar, tar.gz, etc.) and a database dump (.sql file) to deploy a complete WFix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why."text": "---\nname: headless-connect-cursor\ndescription: \"Specific Cursor Hostinger MCP Server connection instructions for the Hostinger Headless flow.\"\n---\n\n## Goals\n\n- Install (or reach) theFix: Namespace tool names and keep tool descriptions literal; no instructions to the agent inside them."text": "---\nname: hostinger-headless-connect\ndescription: \"Connect step for the Hostinger Headless flow — verify Node, run the bootstrap (reach the Hostinger MCP server + OAuth sign-in), then routFix: Namespace tool names and keep tool descriptions literal; no instructions to the agent inside them."description": "Deploy a static website from an archive file to a hosting server. IMPORTANT: This tool only works for static websites with no build process. The archive must contain pre-built static fFix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why."description": "Deploy, publish or upload a website to Hostinger web hosting (Shared, Cloud): static HTML, PHP, a nodejs (Node.js) app, a whole WordPress site, or a WordPress plugin or theme, from a lFix: 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. Skills load their instruction text when triggered; the figure is what that costs.
Known vulnerabilities
Vulnerability advisories (OSV) cover npm and PyPI packages; this registry has no advisory database.
What would make this Verified
10 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.
- Outbound HTTP to raw IP address≈ +4 on the totalReplace encoded or assembled strings with plain literals and remove undeclared network calls.
- Cross-server tool reference≈ +4 on the totalNamespace tool names and keep tool descriptions literal; no instructions to the agent inside them.
- Destructive file system command detected≈ +4 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.
- 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.