ecp-mcp-server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ECP_REMEMBER | No | Set to "true" for a 30-day session instead of the default 24h session. | |
| ECP_API_BASE_URL | Yes | Your ECP instance's own API base URL, e.g. https://yourdomain.com:2324/api | |
| ECP_TLS_INSECURE | No | Dev-only escape hatch for a self-signed ECP instance. Do not set for a real account. | |
| ECP_ACCOUNT_PASSWORD | Yes | The hosting account's password. | |
| ECP_ACCOUNT_USERNAME | Yes | The hosting account to log in as. One server instance manages one account. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| ecp_whoamiA | Get the profile of the hosting account this MCP server is authenticated as. |
| ecp_apps_listB | List all apps on this hosting account. |
| ecp_apps_getA | Get one app's details by id. |
| 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). |
| ecp_apps_create_from_uploadC | Register an app whose files were already uploaded to app_dir. |
| 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. |
| ecp_apps_deleteA | Delete an app: stops its supervisor process (if any) and removes its files. Irreversible. |
| ecp_apps_update_domainC | Point an app at a domain: creates the nginx server block and updates the app's domain record. |
| 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. |
| 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. |
| ecp_apps_tail_logsC | Tail an app's supervisor-managed process log (only meaningful after a 'start' deploy step). |
| ecp_apps_flush_logsB | Clear an app's supervisor-managed process log. |
| 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). |
| ecp_domains_list_allA | List every domain (primary + additional) on this account. |
| ecp_domains_list_additionalA | List additional (addon) domains only, excluding the primary domain. |
| ecp_domains_add_domainC | Add an additional (addon) domain to this account. |
| ecp_domains_add_subdomainB | Add a subdomain of a domain this account already owns. |
| ecp_domains_deleteA | Delete a domain from this account. Cannot delete the primary domain. Irreversible. |
| ecp_domains_set_redirectC | Redirect a domain to another URL (e.g. www -> apex). |
| ecp_domains_remove_redirectB | Remove a domain's redirect. |
| ecp_dns_list_recordsC | List DNS records for a domain's zone. |
| ecp_dns_add_recordC | Add a DNS record to a domain's zone. |
| ecp_dns_delete_recordA | Delete a DNS record from a domain's zone. |
| ecp_network_port_mapsB | List all port mappings on this account. |
| ecp_network_domain_port_mapsB | List port mappings for one domain. |
| ecp_network_update_port_mapsC | Update a port mapping and its nginx config. Can affect site routing. |
| ecp_nginx_list_domainsA | List domains that have an nginx config on this container. |
| ecp_nginx_get_confB | Read the raw nginx config for a domain. |
| 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. |
| ecp_files_listC | List files/folders in a directory. |
| ecp_files_directory_treeA | Get the directory tree including files (for browsing/editing, unlike ecp_apps_directory_tree which is folders only). |
| ecp_files_is_directory_existsB | Check whether a directory exists. |
| ecp_files_readC | Read a text file's content. |
| 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. |
| ecp_files_add_fileC | Create a new empty file. |
| ecp_files_add_folderC | Create a new folder. |
| ecp_files_renameC | Rename a file or folder within a directory. |
| ecp_files_copyC | Copy one file/folder to a destination. |
| ecp_files_copy_multipleC | Copy multiple files/folders to a destination. |
| ecp_files_moveC | Move one file/folder to a destination. |
| ecp_files_move_multipleC | Move multiple files/folders to a destination. |
| ecp_files_change_permissionC | chmod a file (e.g. new_permission: '644'). |
| ecp_files_compressC | Compress one or more files/folders into an archive. |
| ecp_files_extractB | Extract an archive into a destination directory. |
| ecp_files_deleteA | Delete a single file or folder. Irreversible. |
| ecp_files_delete_multipleC | Delete multiple files/folders. Irreversible. |
| 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). |
| ecp_db_connection_infoA | Get the static host/port connection info for each database engine, for apps running in this account's own container. |
| ecp_mysql_create_databaseA | Create a MySQL database. db_name gets the account's own prefix applied automatically. |
| ecp_mysql_delete_databaseA | Delete a MySQL database. Irreversible. |
| ecp_mysql_list_databasesA | List this account's MySQL databases. |
| ecp_mysql_database_sizesA | Get size (in bytes) of each MySQL database. |
| ecp_mysql_table_sizesB | Get size of each table in a MySQL database. |
| ecp_mysql_list_columnsA | List a table's columns (metadata only, no row data). |
| ecp_mysql_truncate_tableB | Delete all rows from a table. Irreversible. |
| ecp_mysql_drop_tableB | Drop (delete) a table entirely. Irreversible. |
| 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. |
| ecp_mysql_insert_rowC | Insert a row into a table. |
| ecp_mysql_update_rowC | Update a row in a table, identified by primary_key. |
| ecp_mysql_delete_rowA | Delete a row from a table, identified by primary_key. Irreversible. |
| 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). |
| ecp_mysql_import_databaseA | Import a .sql dump into an existing MySQL database, overwriting its content. Irreversible - pass the full SQL as text. |
| ecp_mysql_backup_to_storage_bdB | Back up a MySQL database to the account's storage.bd tenant. |
| ecp_mysql_restore_from_storage_bdA | Restore a MySQL database from a storage.bd snapshot, overwriting its current content. Irreversible. |
| ecp_mysql_list_db_usersA | List additional MySQL users on this account (beyond the account's own default user). |
| ecp_mysql_create_db_userB | Create an additional MySQL user. db_username gets the account's own prefix applied automatically. |
| ecp_mysql_delete_db_userB | Delete an additional MySQL user. Irreversible. |
| ecp_mysql_change_db_userA | Reassign a database to be owned by a different MySQL user (both must already belong to this account). |
| ecp_mysql_list_privilegesA | List a MySQL user's privileges on a database. |
| ecp_mysql_grant_privilegesA | Grant privileges (e.g. ['SELECT','INSERT']) to a MySQL user on a database. Security-sensitive - review carefully before confirming. |
| ecp_mysql_revoke_privilegesC | Revoke privileges from a MySQL user on a database. |
| 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). |
| ecp_mongo_delete_databaseB | Delete a MongoDB database. Irreversible. |
| ecp_mongo_list_databasesA | List this account's MongoDB databases. |
| ecp_mongo_database_sizesA | Get size of each MongoDB database. |
| ecp_mongo_list_collectionsA | List collections in a database (metadata only, no document data). |
| ecp_mongo_create_collectionC | Create a collection in a database. |
| ecp_mongo_drop_collectionA | Drop (delete) a collection entirely. Irreversible. |
| ecp_mongo_browse_documentsC | Browse documents in a collection. Connects as the given db_username/password, which must be a user this account owns. |
| ecp_mongo_insert_documentC | Insert a document into a collection. |
| ecp_mongo_update_documentC | Update a document, identified by id. |
| ecp_mongo_delete_documentB | Delete a document, identified by id. Irreversible. |
| ecp_mongo_backup_to_storage_bdB | Back up a MongoDB database to the account's storage.bd tenant. |
| ecp_mongo_restore_from_storage_bdA | Restore a MongoDB database from a storage.bd snapshot, overwriting its current content. Irreversible. |
| ecp_mongo_list_usersB | List additional MongoDB users on this account. |
| 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. |
| ecp_mongo_delete_userB | Delete a MongoDB user. Irreversible. |
| ecp_mongo_update_user_passwordC | Change a MongoDB user's password. |
| 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. |
| 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. |
| ecp_mssql_delete_databaseB | Delete a MSSQL database. Irreversible. |
| ecp_mssql_list_databasesB | List this account's MSSQL databases. |
| ecp_mssql_database_sizesA | Get size of each MSSQL database. |
| ecp_mssql_table_sizesC | Get size of each table in a MSSQL database. |
| ecp_mssql_list_columnsA | List a table's columns (metadata only, no row data). |
| ecp_mssql_truncate_tableB | Delete all rows from a table. Irreversible. |
| ecp_mssql_drop_tableC | Drop (delete) a table entirely. Irreversible. |
| ecp_mssql_browse_rowsC | Browse rows in a table. Connects as the given db_username/password, which must be a user this account owns. |
| ecp_mssql_insert_rowC | Insert a row into a table. |
| ecp_mssql_update_rowC | Update a row in a table, identified by primary_key. |
| ecp_mssql_delete_rowC | Delete a row from a table, identified by primary_key. Irreversible. |
| ecp_mssql_backup_to_storage_bdC | Back up a MSSQL database to the account's storage.bd tenant. |
| ecp_mssql_restore_from_storage_bdA | Restore a MSSQL database from a storage.bd snapshot, overwriting its current content. Irreversible. |
| ecp_mssql_list_db_usersB | List additional MSSQL users on this account. |
| ecp_mssql_create_database_userB | Create an additional MSSQL user. db_username gets the account's own prefix applied automatically. |
| ecp_mssql_delete_userB | Delete a MSSQL user. Irreversible. |
| ecp_mssql_change_database_ownerC | Change a database's owning user (both must already belong to this account). |
| 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. |
| 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. |
| 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. |
| 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). |
| ecp_postgres_delete_databaseB | Delete a Postgres database. Irreversible. |
| ecp_postgres_list_databasesA | List this account's Postgres databases. |
| ecp_postgres_database_sizesA | Get size of each Postgres database. |
| ecp_postgres_table_sizesA | Get size of each table in a Postgres database. |
| ecp_postgres_list_columnsB | List a table's columns (metadata only, no row data). |
| ecp_postgres_truncate_tableB | Delete all rows from a table. Irreversible. |
| ecp_postgres_drop_tableC | Drop (delete) a table entirely. Irreversible. |
| ecp_postgres_browse_rowsB | Browse rows in a table. Connects as the given db_username/password, which must be a user this account owns. |
| ecp_postgres_insert_rowD | Insert a row into a table. |
| ecp_postgres_update_rowC | Update a row in a table, identified by primary_key. |
| ecp_postgres_delete_rowA | Delete a row from a table, identified by primary_key. Irreversible. |
| ecp_postgres_backup_to_storage_bdB | Back up a Postgres database to the account's storage.bd tenant. |
| ecp_postgres_restore_from_storage_bdA | Restore a Postgres database from a storage.bd snapshot, overwriting its current content. Irreversible. |
| ecp_postgres_list_db_usersA | List additional Postgres users on this account. |
| ecp_postgres_create_database_userA | Create an additional Postgres user. db_username gets the account's own prefix applied automatically. |
| ecp_postgres_delete_userC | Delete a Postgres user. Irreversible. |
| ecp_postgres_change_database_ownerA | Change a database's owning user (both must already belong to this account). |
| 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. |
| 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. |
| 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. |
| 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). |
| ecp_postgres_import_databaseA | Import a .sql dump into an existing Postgres database, overwriting its content. Irreversible - pass the full SQL as text. |
| ecp_php_installed_versionsA | List PHP versions installed on this account's container. |
| ecp_php_installed_packagesC | List installed PHP extensions for a version. |
| ecp_php_get_iniC | Get php.ini values for a PHP version. |
| ecp_php_set_iniB | Overwrite php.ini for a PHP version. Can break every app using that version if malformed. |
| 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. |
| 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. |
| ecp_ssl_available_certificatesB | List certificates available for a domain (pass certificate_name: 'lets_encrypt' or 'self_signed'). |
| 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). |
| 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. |
| ecp_ssl_request_self_signedA | Generate a new self-signed certificate for a domain (does not apply it to nginx). |
| 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. |
| 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. |
| ecp_system_disk_usageC | Get disk, container-temp-file, and database usage/quota for this account. |
| ecp_system_check_for_updateA | Check whether an ECP/system update is available. |
| 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. |
| ecp_system_get_configB | Get this account's ECP config key/values. |
| ecp_system_set_configC | Update ECP config key/values for this account. |
| ecp_supervisor_list_processesA | List all supervised processes on this account. |
| ecp_supervisor_process_infoA | Get status/info for one supervised process. |
| ecp_supervisor_add_processC | Register a new supervised (auto-restarting) process. |
| ecp_supervisor_remove_processA | Remove a supervised process. Irreversible (config is deleted, not just stopped). |
| ecp_supervisor_start_processC | Start a supervised process. |
| ecp_supervisor_stop_processC | Stop a supervised process. |
| ecp_supervisor_restart_processC | Restart a supervised process. |
| ecp_crontab_listB | List this account's scheduled cron jobs. |
| 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. |
| ecp_crontab_removeA | Remove a scheduled cron job. Must match an existing entry's cron_expression and command exactly (see ecp_crontab_list). |
| ecp_asdf_plugin_list_allB | List all asdf plugins available to install (e.g. nodejs, python, ruby). |
| ecp_asdf_plugin_listA | List asdf plugins currently installed on this account's container. |
| ecp_asdf_list_all_versionsC | List all available versions for a plugin (e.g. nodejs). |
| ecp_asdf_list_installed_versionsC | List installed versions for a plugin. |
| 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. |
| 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. |
| ecp_asdf_set_globalC | Set the global default version for a plugin. |
| ecp_oneclick_blueprint_appsB | List available one-click app blueprints (fetched from the public EH blueprints catalog). |
| 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). |
| 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. |
| 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. |
| ecp_git_list_providersA | List git providers (GitHub/GitLab/Bitbucket) enabled for this install. |
| 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. |
| ecp_git_list_connectionsA | List this account's connected git accounts. |
| ecp_git_disconnect_providerC | Disconnect a connected git provider. |
| ecp_git_list_reposA | Browse repos available via a connected git provider (for picking one to deploy from). |
| ecp_git_webhook_getB | Get an app's git deploy-webhook config and status. |
| ecp_git_webhook_createA | Create a deploy webhook for an app: runs |
| ecp_git_webhook_updateC | Update an app's deploy-webhook branch filter and/or commands. Review each command carefully before confirming. |
| ecp_git_webhook_deleteB | Delete an app's deploy webhook. Irreversible. |
| ecp_git_webhook_rotate_secretC | Rotate an app's deploy-webhook secret (invalidates the old one). |
| ecp_git_webhook_capabilitiesC | Get what webhook features the app's git provider supports. |
| ecp_git_webhook_deliveriesA | List an app's webhook delivery history (for debugging why a push didn't deploy). |
| ecp_resource_statusA | Get this account's resource/quota status (e.g. disk or CPU pressure, suspension warnings). |
| ecp_resource_status_dismissC | Dismiss a resource-status warning banner. |
| ecp_notifications_listC | List this account's notifications. |
| ecp_notifications_mark_readB | Mark one notification read. |
| ecp_notifications_mark_all_readA | Mark all notifications read. |
| ecp_notifications_deleteC | Delete one notification. Irreversible. |
| ecp_notifications_clear_allB | Delete all notifications. Irreversible. |
| ecp_storage_bd_get_configA | Get this account's storage.bd backup config (client_id only - the secret is never returned). |
| ecp_storage_bd_set_configA | Set this account's storage.bd backup credentials (client_id as '.', client_secret). |
| ecp_storage_bd_job_statusA | Check whether a storage.bd backup/restore job is currently running for this account. |
| ecp_backup_list_snapshotsA | List local restic snapshots of this account's host paths (separate from storage.bd's own backups). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 194 tools
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.
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.
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.
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.