cloudpanel-mcp
npm
v2.1.1
Published by heyjishh — no publish provenance, so origin is unverified, but the source is public: the repository link below is self-declared yet readable, so you can inspect the code before adopting it.
The grade answers one question — how safe is this server for you to adopt — so it is computed in two auditable stages. Nothing below is an opinion or an LLM's guess; every line is a real term the deterministic engine applied, and the same input always yields the same number.
1. Threat score — 100 − 10.6 = 89. What the published surface and source actually contain:
| Points | What was found | Category |
|---|---|---|
| −9.5 | Untrusted input concatenated into a command sink ×2 MTC-SRC-009 | injection |
| −1.2 | Package runs install-time scripts MTC-SUP-010 | supply-chain |
2. Client adoption risk — 89 − 7 = 82. Three small, subtract-only factors that reflect your risk in adopting it — a clean scan proves less on a powerful, unverified or barely-inspectable package, so the grade says so plainly:
| Points | Adoption-risk factor |
|---|---|
| −6 | capability blast radius (high) — client exposure if the model is manipulated |
| −1 | publisher verification (public source) — no provenance, but the source is public and inspectable |
Capability observations and info notes are shown under Findings but never scored.
Open any row's finding below for the file, line and evidence behind a deduction.
Tools that read sensitive data ([cloudpanel_export_database, cloudpanel_import_database]) and tools that can send data out ([docker_exec]) are exposed together. An agent can move private data to the sink.
Evidence: sources [cloudpanel_export_database, cloudpanel_import_database] → sinks [docker_exec]
Fix: Keep secret-reading and egress capabilities on separate, separately-approved servers.
Location: flow cloudpanel_export_database → docker_exec
In the server's implementation (`build/cli.js:16`): Reading private keys / cloud credentials, or serializing the whole environment, is a sensitive-data source that becomes exfiltration when combined with any egress. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: (os.homedir(), ".ssh", "id_ed25519"), CP_HOST: HOST, }, }; } const PLATFORMS = [ { n
Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.
Location: server build/cli.js
Tool "docker_exec" appears to run shell commands or evaluate code (keyword "exec" in tool name). Arbitrary execution driven by model input is one of the most dangerous MCP capabilities; combined with any untrusted input it becomes RCE.
Fix: Sandbox execution, allowlist commands/arguments, and never pass model output to a shell unescaped.
Location: tool docker_exec
In the server's implementation (`build/cli.js:2`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: import { spawn } from "child_process"; import fs from "fs"; import path from "path"; import os from "os"; const PROJECT
Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.
Location: server build/cli.js
In the server's implementation (`build/ssh.js:126`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: }); } async exec(command) { try { await this.connect(); return await this.ex
Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.
Location: server build/ssh.js
In the server's implementation (`build/index.js:186`): A shell/process command assembled from concatenated or interpolated values is command injection when any part is attacker-influenced — the OWASP canonical RCE flow. Verify what reaches the interpolated value. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: onst result = await ssh.exec(`clpctl lets-encrypt:list --domainName=${domainName} 2>/dev/null || openssl x509 -in /etc/l
Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.
Location: server build/index.js
In the server's implementation (`build/ssh.js:141`): A shell/process command assembled from concatenated or interpolated values is command injection when any part is attacker-influenced — the OWASP canonical RCE flow. Verify what reaches the interpolated value. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: ) { return this.exec(`clpctl ${args} 2>&1`); } async checkClpctl() { try { const res
Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.
Location: server build/ssh.js
Tool "docker_exec" can mutate/egress but declares no destructiveHint. Clients that don't default to spec-safe behavior may not prompt before running it.
Fix: Declare accurate annotations, and gate destructive tools on user confirmation regardless.
Location: tool docker_exec
"cloudpanel-mcp" executes install script(s) at install time. An install hook runs at install time; most are routine build/setup, but review what it does before trusting it.
Evidence: node build/cli.js install
Fix: Review the scripts; install with --ignore-scripts where possible and vet what they do.
Location: package cloudpanel-mcp
Each tool and what it can reach — statically extracted from the published source.
cloudpanel_export_databasereads sensitive datacloudpanel_import_databasereads sensitive datadocker_execruns code / shellcloudpanel_create_backupno sensitive capabilitycloudpanel_create_mysql_databaseno sensitive capabilitycloudpanel_create_mysql_userno sensitive capabilitycloudpanel_create_nodejs_siteno sensitive capabilitycloudpanel_create_php_siteno sensitive capabilitycloudpanel_create_postgresql_databaseno sensitive capabilitycloudpanel_create_python_siteno sensitive capabilitycloudpanel_create_reverse_proxy_siteno sensitive capabilitycloudpanel_create_static_siteno sensitive capabilitycloudpanel_create_userno sensitive capabilitycloudpanel_delete_backupno sensitive capabilitycloudpanel_delete_mysql_databaseno sensitive capabilitycloudpanel_delete_mysql_userno sensitive capabilitycloudpanel_delete_siteno sensitive capabilitycloudpanel_delete_userno sensitive capabilitycloudpanel_disable_2fano sensitive capabilitycloudpanel_enable_2fano sensitive capabilitycloudpanel_install_sslno sensitive capabilitycloudpanel_list_backupsno sensitive capabilitycloudpanel_list_sitesno sensitive capabilitycloudpanel_list_ssl_certificatesno sensitive capabilitycloudpanel_list_usersno sensitive capabilitycloudpanel_raw_commandno sensitive capabilitycloudpanel_system_infono sensitive capabilitycloudpanel_system_updateno sensitive capabilitydeploy_projectno sensitive capabilitydocker_container_logsno sensitive capabilitydocker_deploy_composeno sensitive capabilitydocker_list_containersno sensitive capabilitydocker_list_imagesno sensitive capabilitydocker_load_imageno sensitive capabilitydocker_loginno sensitive capabilitydocker_pruneno sensitive capabilitydocker_restart_containerno sensitive capabilitydocker_stop_containerno sensitive capabilityserver_dns_checkno sensitive capabilityserver_firewall_allow_portno sensitive capabilityserver_firewall_statusno sensitive capabilityserver_install_certbotno sensitive capabilityserver_install_dockerno sensitive capabilityserver_install_mysqlno sensitive capabilityserver_install_nginxno sensitive capabilityserver_install_nodejsno sensitive capabilityserver_install_postgresqlno sensitive capabilityserver_install_redisno sensitive capabilityserver_software_statusno sensitive capabilityCross-tool combinations that form a data-exfiltration primitive (untrusted input → sensitive source → external sink).
Scan history per published version. The engine is deterministic — the same version always yields the same score, so a changed score means the package itself changed.
| Version | Score | Findings | Engine | Scanned |
|---|---|---|---|---|
v2.1.1 latest |
B 82/100 | 9 | 1.9.0 | 2026-07-24 |
Show this server's live Trust Score in your README, docs or website. The badge is served straight from the registry and updates automatically after every rescan — no API key needed. It links back to this page, so anyone who sees the grade can also read the findings behind it instead of taking a number on faith.
The score above is reproducible: the same package version always yields the same result. Run it locally or over the free API — no account, no LLM, fully deterministic.
npx mcptrustchecker scan cloudpanel-mcp --online
Security scan results for the A5sql MCP server.
Security scan results for the Agentskit MCP server.
Security scan results for the Aiven MCP server.
Security scan results for the All Inkl MCP server.
Structured aquarium, marine, terrarium and paludarium data for AI agents.
Security scan results for the Carvector MCP server.