Skip to main content
Glama
ecp-mcp-server

ecp-mcp-server

by EpicLabs23

ecp-mcp-server

An MCP server for ECP (Epic Control Panel) — manage a hosting account's apps, domains, databases, files, PHP, SSL, and more conversationally through Claude Code, Claude Desktop, or any other MCP-compatible client.

It talks to ECP's own API (the same one ECP's web UI uses) as the hosting account you configure it with — nothing about this project modifies EHM or ECP themselves.

What it can do

~200 tools across:

  • Apps — detect an app's stack/runtime/commands, deploy, create from git/upload, pull the latest commits for git apps (and manage their saved git login), manage domains and PHP version, tail logs, custom commands

  • Domains / DNS — add/remove domains and subdomains, DNS records, claim a domain's DNS zone held by another install (TXT challenge), redirects, port maps

  • Files — browse, read/write, move/copy/rename/delete, compress/extract

  • Databases — MySQL, MongoDB, MSSQL, and PostgreSQL: create/delete DBs and users, privileges, browse/edit rows or documents, backups

  • PHP / SSL / System — available PHP (lsphp) versions, Let's Encrypt/self-signed/uploaded certificates, WAF on/off, disk usage, log cleanup, account settings

  • Supervisor / Crontab — manage long-running processes and scheduled jobs

  • asdf — language runtime version management

  • Git integrations — connect GitHub/GitLab/Bitbucket, browse repos, manage per-app deploy webhooks

  • Managed WordPress — full install, status/event history, cache mode and purge, security status, XML-RPC toggle, admin password reset, one-time wp-admin login

  • Resource monitoring / notifications — resource status, current-cycle bandwidth use

  • storage.bd — backup config and job status

  • cPanel import — discover and import sites from a cPanel server over SSH

  • Shell — run a command in the account's container and get its exit code and output, with your approval for every command (see Security notes)

What it deliberately does not do: start a local file backup or restore. Those need a live browser connection for progress; use ECP's own web UI.

Related MCP server: cPanel MCP Server

Requirements

  • Node.js 18+

  • An ECP hosting account (username + password)

  • Some tools need a recent ECP: ecp_shell_exec and cPanel import need ECP 2.0.3+, DNS claim needs 2.0.4+, and the ecp_apps_git_* tools, ecp_files_upload_limit and ecp_resource_bandwidth_usage need 2.0.5+ (bandwidth also needs EHM 2.0.8+). On an older ECP these tools return a 404 error.

  • For ecp_shell_exec: an MCP client that supports elicitation (form mode)

Install

npx ecp-mcp-server

or install globally:

npm install -g ecp-mcp-server

You don't need to do either manually if you're adding it to an MCP client below — the client runs it for you.

Configure

This server is configured entirely through environment variables — no config file needed. See .env.sample for the full list. The essentials:

Variable

Required

Description

ECP_API_BASE_URL

yes

Your ECP instance's own API base URL, e.g. https://yourdomain.com:2324/api — not EHM's API.

ECP_ACCOUNT_USERNAME

yes

The hosting account to log in as. One server instance manages one account.

ECP_ACCOUNT_PASSWORD

yes

That account's password.

ECP_REMEMBER

no

true for a 30-day session instead of 24h.

ECP_TLS_INSECURE

no

Dev-only escape hatch for a self-signed ECP instance. Never set this for a real account — see the comment in .env.sample.

Use it

Claude Code

claude mcp add ecp-mcp-server \
  --scope user \
  -e ECP_API_BASE_URL=https://yourdomain.com:2324/api \
  -e ECP_ACCOUNT_USERNAME=youraccount \
  -e ECP_ACCOUNT_PASSWORD=yourpassword \
  -- npx ecp-mcp-server

Restart Claude Code (MCP servers load at session start), then just ask — "list my apps," "check disk usage," "show me the last few notifications."

Claude Desktop

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "ecp": {
      "command": "npx",
      "args": ["ecp-mcp-server"],
      "env": {
        "ECP_API_BASE_URL": "https://yourdomain.com:2324/api",
        "ECP_ACCOUNT_USERNAME": "youraccount",
        "ECP_ACCOUNT_PASSWORD": "yourpassword"
      }
    }
  }
}

Other MCP clients

This is a standard stdio MCP server (@modelcontextprotocol/sdk) — any compliant client can spawn npx ecp-mcp-server with the env vars above and use it.

Security notes

Worth understanding before you point this at an account you care about:

  • Scope: one server instance = one hosting account, authenticated exactly as that account (same permissions, same rate limits as logging into ECP's web UI yourself). It cannot reach any other account.

  • Destructive/security-sensitive actions require confirm: true as an explicit tool argument (dropping a table, deleting a file, granting privileges, etc.) — this makes the intent unambiguous in both your MCP client's approval prompt and the audit log below. Don't run this with your client's "auto-approve all tools" setting on.

  • Local audit log: every tool call is appended to a local file (ECP_MCP_AUDIT_LOG_PATH, defaults to audit.log next to the installed package) with secrets redacted — since ECP itself doesn't currently keep a durable record of actions taken this way.

  • Credentials live only in the environment variables you provide and in-process memory — never written to disk beyond what you configure.

  • Shell commands need your approval for each command. ecp_shell_exec runs a command as the account user, with the same reach as ECP's browser terminal. Before anything runs, the server shows you the exact command through an MCP elicitation prompt. Declining runs nothing. The confirm: true pattern above isn't enough here, because the AI fills in that argument itself and could be steered by text it reads. If your client can't show elicitation prompts, the tool refuses to run. Commands are non-interactive and are killed after their timeout (max 300s). Every command is recorded in the audit log.

Development

git clone https://github.com/EpicLabs23/ecp-mcp-server.git
cd ecp-mcp-server
npm install
cp .env.sample .env   # fill in your own values
npm run build
npm run inspect        # opens the MCP Inspector to test tools manually

License

MIT

Available Tools

194 tools
ecp_apps_create_from_gitA

Create an app by cloning a git repo. Either set provider+repo_full_name (clone via a connected git account, see ecp_git_* tools) or repo_url (+ optional repo_username/repo_password for a private repo). Note: the clone runs in the background - this tool returns once the clone STARTS, not once it finishes. For a large repo, check ecp_apps_directory_tree afterward before assuming the files are all there.

Inputs: app_dir (required), app_name (required), branch, provider, +5 more.

ecp_apps_create_from_uploadC

Register an app whose files were already uploaded to app_dir.

Inputs: app_dir (required), app_name (required), domain, deploy_type.

ecp_apps_deleteA

Delete an app: stops its supervisor process (if any) and removes its files. Irreversible.

Inputs: id (required), confirm (required).

ecp_apps_deploy_stepB

Run one step of an app's deploy lifecycle. action='start'|'stop'|'restart'|'remove' manage the app's supervisor process and return a real result. action='install'|'build' run a command in the background via app_root_directory (install_command/build_command) but this tool CANNOT show you their output - check ecp_apps_tail_logs or the app's own state afterward. action='configure' pins an asdf runtime version (stack_version) for the app and also returns no output.

Inputs: action (required), app_name (required), app_root_directory (required), app_id, +6 more.

ecp_apps_directory_treeB

Browse the account's directory tree (used to pick a location for a new app, or to sanity-check where a git clone landed).

Inputs: directory.

ecp_apps_flush_logsB

Clear an app's supervisor-managed process log.

Inputs: app_name (required).

ecp_apps_getA

Get one app's details by id.

Inputs: id (required).

ecp_apps_listB

List all apps on this hosting account.

Inputs: no named parameters.

ecp_apps_save_custom_commandB

Save a named custom command for an app (does not run it - see the blocked command-execution phase in the plan for why 'run' isn't exposed yet).

Inputs: app_id (required), commands (required).

ecp_apps_tail_logsC

Tail an app's supervisor-managed process log (only meaningful after a 'start' deploy step).

Inputs: app_name (required), byte_count.

ecp_apps_update_domainC

Point an app at a domain: creates the nginx server block and updates the app's domain record.

Inputs: id (required), domain (required).

ecp_apps_update_static_domainB

Point a static-site app at a domain: creates the nginx static block and updates the app's domain record.

Inputs: id (required), domain (required).

ecp_asdf_installA

Install a plugin version (takes time). This tool cannot show install output - check ecp_asdf_list_installed_versions afterward to confirm it succeeded.

Inputs: name (required), confirm (required), version (required).

ecp_asdf_list_all_versionsC

List all available versions for a plugin (e.g. nodejs).

Inputs: name (required).

ecp_asdf_list_installed_versionsC

List installed versions for a plugin.

Inputs: name (required).

ecp_asdf_plugin_listA

List asdf plugins currently installed on this account's container.

Inputs: no named parameters.

ecp_asdf_plugin_list_allB

List all asdf plugins available to install (e.g. nodejs, python, ruby).

Inputs: no named parameters.

ecp_asdf_set_globalC

Set the global default version for a plugin.

Inputs: name (required), version (required).

ecp_asdf_uninstallA

Uninstall a plugin version. Breaks anything still configured to use it. This tool cannot show output - check ecp_asdf_list_installed_versions afterward.

Inputs: name (required), confirm (required), version (required).

ecp_backup_list_snapshotsA

List local restic snapshots of this account's host paths (separate from storage.bd's own backups).

Inputs: no named parameters.

ecp_crontab_addA

Schedule a cron job. cron_expression is a standard 5-field schedule (e.g. '0 3 * * *'). The command runs unattended, repeatedly, as this account's own system user - review carefully before confirming.

Inputs: command (required), confirm (required), cron_expression (required).

ecp_crontab_listB

List this account's scheduled cron jobs.

Inputs: no named parameters.

ecp_crontab_removeA

Remove a scheduled cron job. Must match an existing entry's cron_expression and command exactly (see ecp_crontab_list).

Inputs: command (required), confirm (required), cron_expression (required).

ecp_db_connection_infoA

Get the static host/port connection info for each database engine, for apps running in this account's own container.

Inputs: no named parameters.

ecp_db_services_statusA

Check whether Postgres/MSSQL/Mongo are enabled/configured/reachable for this account (MySQL is always available - it's EHM's own DB engine, not an optional one).

Inputs: no named parameters.

ecp_dns_add_recordC

Add a DNS record to a domain's zone.

Inputs: name (required), type (required), domain (required), ttl, +5 more.

ecp_dns_delete_recordA

Delete a DNS record from a domain's zone. record must match the existing record (name/type/content) closely enough for the DNS provider to identify it.

Inputs: domain (required), record (required), confirm (required).

ecp_dns_list_recordsC

List DNS records for a domain's zone.

Inputs: domain (required).

ecp_domains_add_domainC

Add an additional (addon) domain to this account.

Inputs: domain (required), dns_server.

ecp_domains_add_subdomainB

Add a subdomain of a domain this account already owns.

Inputs: domain (required), subdomain (required).

ecp_domains_deleteA

Delete a domain from this account. Cannot delete the primary domain. Irreversible.

Inputs: domain (required), confirm (required).

ecp_domains_list_additionalA

List additional (addon) domains only, excluding the primary domain.

Inputs: no named parameters.

ecp_domains_list_allA

List every domain (primary + additional) on this account.

Inputs: no named parameters.

ecp_domains_remove_redirectB

Remove a domain's redirect.

Inputs: domain (required).

ecp_domains_set_redirectC

Redirect a domain to another URL (e.g. www -> apex).

Inputs: domain (required), redirect_type (required), redirect_target (required).

ecp_files_add_fileC

Create a new empty file.

Inputs: file_name (required), destination (required).

ecp_files_add_folderC

Create a new folder.

Inputs: destination (required), folder_name (required).

ecp_files_change_permissionC

chmod a file (e.g. new_permission: '644').

Inputs: file_name (required), new_permission (required), current_directory (required).

ecp_files_compressC

Compress one or more files/folders into an archive.

Inputs: file_paths (required), output_filename (required), current_directory (required).

ecp_files_copyC

Copy one file/folder to a destination.

Inputs: file_path (required), destination (required).

ecp_files_copy_multipleC

Copy multiple files/folders to a destination.

Inputs: file_paths (required), destination (required).

ecp_files_deleteA

Delete a single file or folder. Irreversible.

Inputs: confirm (required), file_path (required).

ecp_files_delete_multipleC

Delete multiple files/folders. Irreversible.

Inputs: confirm (required), file_paths (required).

ecp_files_directory_treeA

Get the directory tree including files (for browsing/editing, unlike ecp_apps_directory_tree which is folders only).

Inputs: directory, hidden_files.

ecp_files_extractB

Extract an archive into a destination directory.

Inputs: file_path (required), destination (required).

ecp_files_is_directory_existsB

Check whether a directory exists.

Inputs: directory (required).

ecp_files_listC

List files/folders in a directory.

Inputs: directory, hidden_files.

ecp_files_moveC

Move one file/folder to a destination.

Inputs: file_path (required), destination (required).

ecp_files_move_multipleC

Move multiple files/folders to a destination.

Inputs: file_paths (required), destination (required).

ecp_files_readC

Read a text file's content.

Inputs: file_path (required).

ecp_files_renameC

Rename a file or folder within a directory.

Inputs: new_name (required), file_name (required), current_directory (required).

ecp_files_writeB

Overwrite a text file's content (creates it if it doesn't exist). Can break a running app if it's a config/env/source file - review the current content first.

Inputs: confirm (required), file_path (required), file_content (required).

ecp_git_authorize_urlA

Get the OAuth authorize URL to connect a git provider. Open it in a browser to complete the connection - this tool can't complete OAuth itself.

Inputs: provider (required).

ecp_git_disconnect_providerC

Disconnect a connected git provider.

Inputs: confirm (required), provider (required).

ecp_git_list_connectionsA

List this account's connected git accounts.

Inputs: no named parameters.

ecp_git_list_providersA

List git providers (GitHub/GitLab/Bitbucket) enabled for this install.

Inputs: no named parameters.

ecp_git_list_reposA

Browse repos available via a connected git provider (for picking one to deploy from).

Inputs: provider (required), page, search.

ecp_git_webhook_capabilitiesC

Get what webhook features the app's git provider supports.

Inputs: app_id (required).

ecp_git_webhook_createA

Create a deploy webhook for an app: runs commands automatically whenever a matching push arrives. Review each command carefully before confirming.

Inputs: app_id (required), confirm (required), provider (required), commands, +1 more.

ecp_git_webhook_deleteB

Delete an app's deploy webhook. Irreversible.

Inputs: app_id (required), confirm (required).

ecp_git_webhook_deliveriesA

List an app's webhook delivery history (for debugging why a push didn't deploy).

Inputs: app_id (required).

ecp_git_webhook_getB

Get an app's git deploy-webhook config and status.

Inputs: app_id (required).

ecp_git_webhook_rotate_secretC

Rotate an app's deploy-webhook secret (invalidates the old one).

Inputs: app_id (required), confirm (required).

ecp_git_webhook_updateC

Update an app's deploy-webhook branch filter and/or commands. Review each command carefully before confirming.

Inputs: app_id (required), confirm (required), provider (required), commands, +1 more.

ecp_mongo_assign_user_to_databaseA

Grant a MongoDB user readWrite access to a database (both must already belong to this account). MongoDB only supports whole-database readWrite here - no read-only or per-collection grants like MySQL/Postgres. Security-sensitive - review carefully before confirming.

Inputs: confirm (required), db_name (required), db_username (required).

ecp_mongo_backup_to_storage_bdB

Back up a MongoDB database to the account's storage.bd tenant.

Inputs: db_name (required).

ecp_mongo_browse_documentsC

Browse documents in a collection. Connects as the given db_username/password, which must be a user this account owns.

Inputs: db_name (required), password (required), db_username (required), collection_name (required), +5 more.

ecp_mongo_create_collectionC

Create a collection in a database.

Inputs: db_name (required), collection_name (required).

ecp_mongo_create_databaseA

Create a MongoDB database. db_name gets the account's own prefix applied automatically. db_username must already exist (see ecp_mongo_create_user).

Inputs: db_name (required), db_username (required).

ecp_mongo_create_userA

Create a MongoDB user. db_username gets the account's own prefix applied automatically. Grants readWrite on this account's default database - MongoDB here has no read-only role option, unlike MySQL/Postgres's granular privilege grants.

Inputs: password (required), db_username (required).

ecp_mongo_database_sizesA

Get size of each MongoDB database.

Inputs: no named parameters.

ecp_mongo_delete_databaseB

Delete a MongoDB database. Irreversible.

Inputs: confirm (required), db_name (required).

ecp_mongo_delete_documentB

Delete a document, identified by id. Irreversible.

Inputs: id (required), confirm (required), db_name (required), password (required), +2 more.

ecp_mongo_delete_userB

Delete a MongoDB user. Irreversible.

Inputs: confirm (required), db_username (required).

ecp_mongo_drop_collectionA

Drop (delete) a collection entirely. Irreversible.

Inputs: confirm (required), db_name (required), collection_name (required).

ecp_mongo_insert_documentC

Insert a document into a collection.

Inputs: confirm (required), db_name (required), document (required), password (required), +2 more.

ecp_mongo_list_collectionsA

List collections in a database (metadata only, no document data).

Inputs: db_name (required).

ecp_mongo_list_databasesA

List this account's MongoDB databases.

Inputs: no named parameters.

ecp_mongo_list_usersB

List additional MongoDB users on this account.

Inputs: no named parameters.

ecp_mongo_restore_from_storage_bdA

Restore a MongoDB database from a storage.bd snapshot, overwriting its current content. Irreversible.

Inputs: confirm (required), db_name (required), snapshot_id (required).

ecp_mongo_update_documentC

Update a document, identified by id.

Inputs: id (required), values (required), confirm (required), db_name (required), +3 more.

ecp_mongo_update_user_passwordC

Change a MongoDB user's password.

Inputs: password (required), db_username (required).

ecp_mssql_backup_to_storage_bdC

Back up a MSSQL database to the account's storage.bd tenant.

Inputs: db_name (required).

ecp_mssql_browse_rowsC

Browse rows in a table. Connects as the given db_username/password, which must be a user this account owns.

Inputs: db_name (required), password (required), table_name (required), db_username (required), +5 more.

ecp_mssql_change_database_ownerC

Change a database's owning user (both must already belong to this account).

Inputs: db_name (required), db_username (required).

ecp_mssql_create_databaseA

Create a MSSQL database. db_name gets the account's own prefix applied automatically. Creates the login together with the database.

Inputs: db_name (required), password (required), db_username (required).

ecp_mssql_create_database_userB

Create an additional MSSQL user. db_username gets the account's own prefix applied automatically.

Inputs: password (required), db_username (required).

ecp_mssql_database_sizesA

Get size of each MSSQL database.

Inputs: no named parameters.

ecp_mssql_delete_databaseB

Delete a MSSQL database. Irreversible.

Inputs: confirm (required), db_name (required).

ecp_mssql_delete_rowC

Delete a row from a table, identified by primary_key. Irreversible.

Inputs: confirm (required), db_name (required), password (required), table_name (required), +2 more.

ecp_mssql_delete_userB

Delete a MSSQL user. Irreversible.

Inputs: confirm (required), db_username (required).

ecp_mssql_drop_tableC

Drop (delete) a table entirely. Irreversible.

Inputs: confirm (required), db_name (required), table_name (required).

ecp_mssql_grant_privilegesA

Grant privileges to a user on a database. Note: MSSQL's privilege model here is coarser than MySQL/Postgres - only these 5 DML permissions, applied schema-wide (SCHEMA::dbo), not per-table. Security-sensitive - review carefully before confirming.

Inputs: confirm (required), db_name (required), privileges (required), db_username (required).

ecp_mssql_insert_rowC

Insert a row into a table.

Inputs: values (required), confirm (required), db_name (required), password (required), +2 more.

ecp_mssql_list_columnsA

List a table's columns (metadata only, no row data).

Inputs: db_name (required), table_name (required).

ecp_mssql_list_databasesB

List this account's MSSQL databases.

Inputs: no named parameters.

ecp_mssql_list_db_usersB

List additional MSSQL users on this account.

Inputs: no named parameters.

ecp_mssql_list_privilegesA

List a MSSQL user's privileges on a database. Note: MSSQL's privilege model here is coarser than MySQL/Postgres - only these 5 DML permissions, applied schema-wide (SCHEMA::dbo), not per-table.

Inputs: db_name (required), db_username (required).

ecp_mssql_restore_from_storage_bdA

Restore a MSSQL database from a storage.bd snapshot, overwriting its current content. Irreversible.

Inputs: confirm (required), db_name (required), snapshot_id (required).

ecp_mssql_revoke_privilegesA

Revoke privileges from a user on a database. Note: MSSQL's privilege model here is coarser than MySQL/Postgres - only these 5 DML permissions, applied schema-wide (SCHEMA::dbo), not per-table.

Inputs: confirm (required), db_name (required), privileges (required), db_username (required).

ecp_mssql_table_sizesC

Get size of each table in a MSSQL database.

Inputs: db_name (required).

ecp_mssql_truncate_tableB

Delete all rows from a table. Irreversible.

Inputs: confirm (required), db_name (required), table_name (required).

ecp_mssql_update_rowC

Update a row in a table, identified by primary_key.

Inputs: values (required), confirm (required), db_name (required), password (required), +3 more.

ecp_mysql_backup_to_storage_bdB

Back up a MySQL database to the account's storage.bd tenant.

Inputs: db_name (required).

ecp_mysql_browse_rowsB

Browse rows in a table. Connects as the given MySQL user (db_username/password), which must be a user this account owns.

Inputs: db_name (required), password (required), table_name (required), db_username (required), +5 more.

ecp_mysql_change_db_userA

Reassign a database to be owned by a different MySQL user (both must already belong to this account).

Inputs: db_name (required), db_username (required).

ecp_mysql_create_databaseA

Create a MySQL database. db_name gets the account's own prefix applied automatically.

Inputs: db_name (required), db_username.

ecp_mysql_create_db_userB

Create an additional MySQL user. db_username gets the account's own prefix applied automatically.

Inputs: password (required), db_username (required).

ecp_mysql_database_sizesA

Get size (in bytes) of each MySQL database.

Inputs: no named parameters.

ecp_mysql_delete_databaseA

Delete a MySQL database. Irreversible.

Inputs: confirm (required), db_name (required).

ecp_mysql_delete_db_userB

Delete an additional MySQL user. Irreversible.

Inputs: confirm (required), db_username (required).

ecp_mysql_delete_rowA

Delete a row from a table, identified by primary_key. Irreversible.

Inputs: confirm (required), db_name (required), password (required), table_name (required), +2 more.

ecp_mysql_drop_tableB

Drop (delete) a table entirely. Irreversible.

Inputs: confirm (required), db_name (required), table_name (required).

ecp_mysql_export_databaseA

Export a MySQL database as a .sql dump (returned as text - large databases will produce a large result, consider ecp_mysql_backup_to_storage_bd instead for anything beyond a quick look).

Inputs: db_name (required).

ecp_mysql_grant_privilegesA

Grant privileges (e.g. ['SELECT','INSERT']) to a MySQL user on a database. Security-sensitive - review carefully before confirming.

Inputs: confirm (required), db_name (required), privileges (required), db_username (required).

ecp_mysql_import_databaseA

Import a .sql dump into an existing MySQL database, overwriting its content. Irreversible - pass the full SQL as text.

Inputs: confirm (required), db_name (required), sql_content (required).

ecp_mysql_insert_rowC

Insert a row into a table.

Inputs: values (required), confirm (required), db_name (required), password (required), +2 more.

ecp_mysql_list_columnsA

List a table's columns (metadata only, no row data).

Inputs: db_name (required), table_name (required).

ecp_mysql_list_databasesA

List this account's MySQL databases.

Inputs: no named parameters.

ecp_mysql_list_db_usersA

List additional MySQL users on this account (beyond the account's own default user).

Inputs: no named parameters.

ecp_mysql_list_privilegesA

List a MySQL user's privileges on a database.

Inputs: db_name (required), db_username (required).

ecp_mysql_restore_from_storage_bdA

Restore a MySQL database from a storage.bd snapshot, overwriting its current content. Irreversible.

Inputs: confirm (required), db_name (required), snapshot_id (required).

ecp_mysql_revoke_privilegesC

Revoke privileges from a MySQL user on a database.

Inputs: confirm (required), db_name (required), privileges (required), db_username (required).

ecp_mysql_table_sizesB

Get size of each table in a MySQL database.

Inputs: db_name (required).

ecp_mysql_truncate_tableB

Delete all rows from a table. Irreversible.

Inputs: confirm (required), db_name (required), table_name (required).

ecp_mysql_update_rowC

Update a row in a table, identified by primary_key.

Inputs: values (required), confirm (required), db_name (required), password (required), +3 more.

ecp_network_domain_port_mapsB

List port mappings for one domain.

Inputs: domain (required).

ecp_network_port_mapsB

List all port mappings on this account.

Inputs: no named parameters.

ecp_network_update_port_mapsC

Update a port mapping and its nginx config. Can affect site routing.

Inputs: domain (required), host_port (required), guest_port (required), https, +1 more.

ecp_nginx_get_confB

Read the raw nginx config for a domain.

Inputs: domain_name (required).

ecp_nginx_list_domainsA

List domains that have an nginx config on this container.

Inputs: no named parameters.

ecp_nginx_set_confA

Overwrite the raw nginx config for a domain. Malformed content can break the site - verify the config is valid before writing.

Inputs: confirm (required), domain_name (required), file_content (required).

ecp_notifications_clear_allB

Delete all notifications. Irreversible.

Inputs: confirm (required).

ecp_notifications_deleteC

Delete one notification. Irreversible.

Inputs: id (required), confirm (required).

ecp_notifications_listC

List this account's notifications.

Inputs: unread.

ecp_notifications_mark_all_readA

Mark all notifications read.

Inputs: no named parameters.

ecp_notifications_mark_readB

Mark one notification read.

Inputs: id (required).

ecp_oneclick_blueprint_appsB

List available one-click app blueprints (fetched from the public EH blueprints catalog).

Inputs: no named parameters.

ecp_oneclick_create_databaseA

Create a MySQL user + database in one step, for use during a one-click app install. If user creation fails (e.g. already exists), database creation is still attempted - check ecp_mysql_list_db_users/ecp_mysql_list_databases afterward if unsure.

Inputs: db_name (required), db_pass (required), db_user (required).

ecp_oneclick_get_blueprintA

Get a blueprint's definition, including the install commands it expects to run (for you to review/run yourself - see note on why this MCP server doesn't run them automatically).

Inputs: name (required), version (required).

ecp_oneclick_install_wordpressA

Scaffold a WordPress app: creates the app directory, nginx server block, and patches wp-config.php for HTTPS. Does NOT install WordPress itself - see ecp_oneclick_get_blueprint and run its install commands yourself afterward.

Inputs: domain (required), app_dir (required), app_name (required), php_version (required).

ecp_php_get_iniC

Get php.ini values for a PHP version.

Inputs: version (required).

ecp_php_installA

Install a PHP version (apt-get, takes time). This tool cannot show install output - check ecp_php_installed_versions afterward to confirm it succeeded.

Inputs: confirm (required), version (required).

ecp_php_installed_packagesC

List installed PHP extensions for a version.

Inputs: version (required).

ecp_php_installed_versionsA

List PHP versions installed on this account's container.

Inputs: no named parameters.

ecp_php_set_iniB

Overwrite php.ini for a PHP version. Can break every app using that version if malformed.

Inputs: confirm (required), version (required), file_content (required).

ecp_php_uninstallA

Uninstall a PHP version. Breaks any app still configured to use it. This tool cannot show uninstall output - check ecp_php_installed_versions afterward.

Inputs: confirm (required), version (required).

ecp_postgres_backup_to_storage_bdB

Back up a Postgres database to the account's storage.bd tenant.

Inputs: db_name (required).

ecp_postgres_browse_rowsB

Browse rows in a table. Connects as the given db_username/password, which must be a user this account owns.

Inputs: db_name (required), password (required), table_name (required), db_username (required), +5 more.

ecp_postgres_change_database_ownerA

Change a database's owning user (both must already belong to this account).

Inputs: db_name (required), db_username (required).

ecp_postgres_create_databaseA

Create a Postgres database. db_name gets the account's own prefix applied automatically. db_username must already exist (see ecp_postgres_create_database_user).

Inputs: db_name (required), db_username (required).

ecp_postgres_create_database_userA

Create an additional Postgres user. db_username gets the account's own prefix applied automatically.

Inputs: password (required), db_username (required).

ecp_postgres_database_sizesA

Get size of each Postgres database.

Inputs: no named parameters.

ecp_postgres_delete_databaseB

Delete a Postgres database. Irreversible.

Inputs: confirm (required), db_name (required).

ecp_postgres_delete_rowA

Delete a row from a table, identified by primary_key. Irreversible.

Inputs: confirm (required), db_name (required), password (required), table_name (required), +2 more.

ecp_postgres_delete_userC

Delete a Postgres user. Irreversible.

Inputs: confirm (required), db_username (required).

ecp_postgres_drop_tableC

Drop (delete) a table entirely. Irreversible.

Inputs: confirm (required), db_name (required), table_name (required).

ecp_postgres_export_databaseA

Export a Postgres database as a .sql dump (returned as text - large databases will produce a large result, consider ecp_postgres_backup_to_storage_bd instead for anything beyond a quick look).

Inputs: db_name (required).

ecp_postgres_grant_privilegesA

Grant privileges to a user on a database. Applied per-table (all tables in the public schema) plus default privileges for future tables. Security-sensitive - review carefully before confirming.

Inputs: confirm (required), db_name (required), privileges (required), db_username (required).

ecp_postgres_import_databaseA

Import a .sql dump into an existing Postgres database, overwriting its content. Irreversible - pass the full SQL as text.

Inputs: confirm (required), db_name (required), sql_content (required).

ecp_postgres_insert_rowD

Insert a row into a table.

Inputs: values (required), confirm (required), db_name (required), password (required), +2 more.

ecp_postgres_list_columnsB

List a table's columns (metadata only, no row data).

Inputs: db_name (required), table_name (required).

ecp_postgres_list_databasesA

List this account's Postgres databases.

Inputs: no named parameters.

ecp_postgres_list_db_usersA

List additional Postgres users on this account.

Inputs: no named parameters.

ecp_postgres_list_privilegesB

List a Postgres user's privileges on a database. Applied per-table (all tables in the public schema) plus default privileges for future tables.

Inputs: db_name (required), db_username (required).

ecp_postgres_restore_from_storage_bdA

Restore a Postgres database from a storage.bd snapshot, overwriting its current content. Irreversible.

Inputs: confirm (required), db_name (required), snapshot_id (required).

ecp_postgres_revoke_privilegesA

Revoke privileges from a user on a database. Applied per-table (all tables in the public schema) plus default privileges for future tables.

Inputs: confirm (required), db_name (required), privileges (required), db_username (required).

ecp_postgres_table_sizesA

Get size of each table in a Postgres database.

Inputs: db_name (required).

ecp_postgres_truncate_tableB

Delete all rows from a table. Irreversible.

Inputs: confirm (required), db_name (required), table_name (required).

ecp_postgres_update_rowC

Update a row in a table, identified by primary_key.

Inputs: values (required), confirm (required), db_name (required), password (required), +3 more.

ecp_resource_statusA

Get this account's resource/quota status (e.g. disk or CPU pressure, suspension warnings).

Inputs: no named parameters.

ecp_resource_status_dismissC

Dismiss a resource-status warning banner.

Inputs: resource_type (required).

ecp_ssl_apply_certificateA

Apply an already-generated certificate to a domain's nginx config, without regenerating it. Can break HTTPS for that domain if misapplied.

Inputs: domain (required), confirm (required), certificate_name (required).

ecp_ssl_available_certificatesB

List certificates available for a domain (pass certificate_name: 'lets_encrypt' or 'self_signed').

Inputs: domain, certificate_name.

ecp_ssl_request_lets_encryptA

Issue a new Let's Encrypt certificate for a domain (does not apply it to nginx - see ecp_ssl_update_lets_encrypt or ecp_ssl_apply_certificate).

Inputs: domain (required).

ecp_ssl_request_self_signedA

Generate a new self-signed certificate for a domain (does not apply it to nginx).

Inputs: domain (required).

ecp_ssl_update_lets_encryptB

Issue and apply a Let's Encrypt certificate to a domain's nginx config. Can break HTTPS for that domain if it fails partway.

Inputs: domain (required), confirm (required).

ecp_ssl_update_self_signedA

Generate and apply a self-signed certificate to a domain's nginx config. Can break HTTPS for that domain if it fails partway.

Inputs: domain (required), confirm (required).

ecp_storage_bd_get_configA

Get this account's storage.bd backup config (client_id only - the secret is never returned).

Inputs: no named parameters.

ecp_storage_bd_job_statusA

Check whether a storage.bd backup/restore job is currently running for this account.

Inputs: no named parameters.

ecp_storage_bd_set_configA

Set this account's storage.bd backup credentials (client_id as '<tenant_id>.<install_id>', client_secret).

Inputs: confirm (required), client_id (required), client_secret (required).

ecp_supervisor_add_processC

Register a new supervised (auto-restarting) process.

Inputs: name (required), command (required), directory (required), autostart, +1 more.

ecp_supervisor_list_processesA

List all supervised processes on this account.

Inputs: no named parameters.

ecp_supervisor_process_infoA

Get status/info for one supervised process.

Inputs: app_name (required).

ecp_supervisor_remove_processA

Remove a supervised process. Irreversible (config is deleted, not just stopped).

Inputs: confirm (required), app_name (required).

ecp_supervisor_restart_processC

Restart a supervised process.

Inputs: app_name (required).

ecp_supervisor_start_processC

Start a supervised process.

Inputs: app_name (required).

ecp_supervisor_stop_processC

Stop a supervised process.

Inputs: app_name (required).

ecp_system_check_for_updateA

Check whether an ECP/system update is available.

Inputs: no named parameters.

ecp_system_disk_usageC

Get disk, container-temp-file, and database usage/quota for this account.

Inputs: no named parameters.

ecp_system_get_configB

Get this account's ECP config key/values.

Inputs: no named parameters.

ecp_system_set_configC

Update ECP config key/values for this account.

Inputs: config (required), confirm (required).

ecp_system_updateA

Update account/hosting settings (hosting_environment, hosting_version) or ECP password. Requires the account's own current password. Account-wide impact - review carefully.

Inputs: confirm (required), ecp_password (required), hosting_version, hosting_environment.

ecp_whoamiA

Get the profile of the hosting account this MCP server is authenticated as.

Inputs: no named parameters.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    C2.9/5.0

    Scored across 194 tools

    Disambiguation4/5

    Most tools are clearly distinct by resource area and action, and the descriptions carefully call out subtle differences (e.g. ecp_apps_directory_tree vs ecp_files_directory_tree, ecp_ssl_request vs ecp_ssl_update vs ecp_ssl_apply). A few near-duplicates exist—ecp_files_copy vs ecp_files_copy_multiple and ecp_files_move vs ecp_files_move_multiple—but they are rare and understandable.

    Naming Consistency4/5

    The ecp_<area>_<verb>_<noun> pattern is followed almost everywhere, making names very predictable. Minor deviations include ecp_network_port_maps (noun-first), ecp_network_domain_port_maps, and ecp_files_is_directory_exists (awkward verb phrase), but these do not undermine the overall uniformity.

    Tool Count1/5

    194 tools is an extreme count for a single MCP server. Even accounting for the broad hosting-panel domain (files, four database engines, SSL, nginx, git, supervisor, cron, notifications, backups), this volume creates a massive selection surface and will overwhelm agents. The count alone warrants the lowest score.

    Completeness4/5

    The tool surface is remarkably comprehensive: apps, domains, DNS, nginx, files, four database engines with user/privilege/backup/restore operations, SSL, supervisor, crontab, asdf, git webhooks, notifications, and storage. The only notable gap is the explicitly blocked ability to run custom commands directly (ecp_apps_save_custom_command mentions 'run' isn't exposed yet), which is a stated intentional limitation rather than an oversight.

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      C
      quality
      B
      maintenance
      Enables natural language interaction with a Panelica hosting panel to manage domains, SSL, databases, services, and more through any MCP client.
      404
      340 npm
      2
      MIT
    • A
      license
      B
      quality
      C
      maintenance
      A comprehensive MCP server for managing cPanel hosting accounts through AI assistants. It supports DNS, email (DKIM/SPF), databases, domains, SSL, PHP, cron jobs, security, Git deployment, and more.
      100
      26
      ISC
    • A
      license
      C
      quality
      D
      maintenance
      Connect any MCP-compatible AI agent to the full Hostinger platform. Manage VPS, domains, DNS, hosting, WordPress, email, ecommerce, and more through natural language.
      100
      0
      MIT