hostinger-api-mcp@4.0.1
CAUTION· startup onlyPublisher claims: "MCP server for 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, ProgramData, ProgramFiles, REGISTER_PATH, REVOKE_PATH, SystemDrive, SystemRoot, USER_AGENT- Where it talks to
- no vendor host named in the codeAlso hostinger.com, 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 hostinger.com, 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 the host you bind (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-13 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; Access to sensitive file paths; Cross-server tool reference. Summary: no network, touches nothing outside the project, writes no memory.
Behavior trace
Honeypot run · 28 s · 2 scenarios · 0 deviationsStatic findings
…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.…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.…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.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.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.…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.// 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.… 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.…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.…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.… 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.values taken from the project `.env` file or the user prompt.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…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.exec('npx tsc', (error, stdout, stderr) => {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.the full desired set with real values taken from the project `.env` file or the userFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…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.…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.…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."start:ts": "npx tsc && node dist/src/servers/all.js"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.…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.…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.….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.// 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.….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.…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.…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.… | `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.…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.…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.… | `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.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.…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.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.…, '.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.…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."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.….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.…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.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.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.… 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.…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.// 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', `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', '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.…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.// 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.… 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.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."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.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.…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.…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.…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.…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.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.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.…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.…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.… 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.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
No advisories in OSV for hostinger-api-mcp@4.0.1 as of 22 h ago. This is the package itself, not its dependencies.
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.
- 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.
- npx invocation of non-well-known package≈ +2 on the totalPin versions and sources; vendor anything fetched at install time.
- MCP server using network transport (SSE/HTTP)≈ +2 on the totalNamespace tool names and keep tool descriptions literal; no instructions to the agent inside them.