cPanel MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GITHUB_TOKEN | No | Optional GitHub token for GitHub CI/CD and deployment features | |
| CPANEL_USERNAME | No | Your cPanel account username | |
| CPANEL_API_TOKEN | No | Your cPanel API token, generated from cPanel Security > Manage API Tokens | |
| CPANEL_SERVER_URL | No | Your cPanel server URL, e.g. https://your-domain.com:2083 | |
| CPANEL_VERIFY_SSL | No | Set to false to disable SSL certificate verification when your cPanel server uses a self-signed or shared SSL certificate | true |
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
} |
| prompts | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| login_cpanelB | Log into cPanel using your server URL, username, and API token. Credentials are saved permanently so you only have to do this once. |
| get_login_statusA | Check if cPanel is currently connected and view account connection status or get login instructions |
| logout_cpanelA | Disconnect and remove saved cPanel credentials from this computer |
| list_filesB | List files and directories in a specified path |
| create_fileC | Create a new file with specified text content |
| read_fileB | Read the contents of a text file |
| edit_fileA | Update the contents of an existing file |
| delete_fileB | Delete a file or directory (move to trash) |
| extract_archiveB | Extract a compressed archive (.zip, .tar, .tar.gz, .bz2) into a destination directory |
| compress_filesC | Compress files or a directory into a .zip, .tar, or .tar.gz archive |
| copy_filesC | Copy a file or directory to a new location on the server |
| move_filesB | Move or rename a file or directory on the server |
| change_permissionsC | Change file or directory permissions (chmod) |
| upload_file_base64B | Upload a binary or text file using Base64 encoding (ideal for images, archives, PDFs) |
| get_disk_usageA | Get account disk space usage summary (quota, used, limits) |
| list_mysql_databasesA | List all MySQL databases on the account |
| create_mysql_databaseB | Create a new MySQL database |
| delete_mysql_databaseB | Delete a MySQL database |
| rename_mysql_databaseC | Rename an existing MySQL database |
| check_mysql_databaseC | Check a database for table corruption or index issues |
| repair_mysql_databaseB | Repair damaged or corrupted tables in a database |
| list_mysql_usersA | List all MySQL database users |
| create_mysql_userB | Create a new MySQL database user |
| delete_mysql_userB | Delete a MySQL database user |
| set_mysql_user_passwordB | Change the password for an existing MySQL database user |
| rename_mysql_userC | Rename an existing MySQL user |
| set_mysql_privilegesB | Set privileges for a MySQL user on a database |
| revoke_mysql_privilegesB | Revoke all privileges for a MySQL user on a database |
| get_mysql_server_infoB | Get MySQL server information and restrictions |
| list_postgresql_databasesA | List all PostgreSQL databases |
| create_postgresql_databaseB | Create a new PostgreSQL database |
| delete_postgresql_databaseB | Delete a PostgreSQL database |
| list_postgresql_usersA | List all PostgreSQL users |
| create_postgresql_userB | Create a new PostgreSQL user |
| delete_postgresql_userB | Delete a PostgreSQL user |
| set_postgresql_privilegesB | Grant a PostgreSQL user access to a database |
| revoke_postgresql_privilegesB | Revoke a PostgreSQL user's access to a database |
| list_email_accountsA | List all email accounts with disk usage info |
| create_email_accountC | Create a new email account |
| delete_email_accountC | Delete an email account |
| change_email_passwordB | Change password for an email account |
| change_email_quotaC | Change mailbox quota for an email account |
| list_email_forwardersA | List all email forwarders |
| create_email_forwarderC | Create an email forwarder |
| delete_email_forwarderC | Delete an email forwarder |
| list_autorespondersA | List all email autoresponders |
| create_autoresponderC | Create an email autoresponder |
| delete_autoresponderB | Delete an email autoresponder |
| get_email_routingA | Get email routing configuration for all mail domains |
| get_email_client_settingsA | Get mail client manual and auto-config settings (IMAP, POP3, SMTP ports, hostnames, SSL settings) |
| get_email_disk_usageB | Get detailed disk space consumption for a specific email address |
| get_default_addressB | Get the catch-all (default) email address destination for a domain |
| set_default_addressC | Configure the catch-all (default) email behavior for unrouted emails sent to a domain |
| trace_email_deliveryB | Trace mail delivery and routing path for an email address to debug delivery failures |
| enable_dkimB | Enable DKIM (DomainKeys Identified Mail) for a domain |
| disable_dkimB | Disable DKIM for a domain |
| ensure_dkim_keysA | Ensure DKIM keys exist for all domains (generates missing keys) |
| validate_dkimA | Validate current DKIM configuration for all domains |
| validate_spfA | Validate current SPF records for all domains |
| install_spf_recordsB | Install/update SPF records for all domains |
| validate_ptr_recordsA | Validate current PTR (reverse DNS) records |
| list_email_filtersA | List all email filters for an account |
| add_email_filterB | Create or update an email filter. Rules are OR'd/AND'd via each rule's opt field; the last rule's opt is ignored by cPanel. |
| delete_email_filterB | Delete an email filter |
| trace_email_filterA | Test email filters against a message to see which rules match |
| enable_spam_assassinA | Enable SpamAssassin spam filtering for the account |
| disable_spam_assassinA | Disable SpamAssassin spam filtering |
| enable_spam_boxA | Enable the spam box (auto-deliver spam to a separate folder) |
| disable_spam_boxB | Disable the spam box |
| get_spam_settingsB | Get SpamAssassin settings and score threshold |
| clear_spam_boxA | Clear all messages from the SpamAssassin spam box |
| get_greylisting_statusA | Check if greylisting is enabled for the account |
| enable_greylistingA | Enable greylisting for all domains (delays first-time senders to block spam) |
| disable_greylistingA | Disable greylisting for all domains |
| get_dns_recordsB | Get all DNS records for a zone/domain |
| add_dns_recordB | Add a DNS zone record (A, AAAA, CNAME, MX, TXT, SRV, CAA) |
| edit_dns_recordA | Edit an existing DNS zone record |
| delete_dns_recordA | Delete a DNS zone record by line number |
| enable_dnssecA | Enable DNSSEC for a domain |
| disable_dnssecA | Disable DNSSEC for a domain |
| get_dnssec_ds_recordsA | Fetch DS records for a DNSSEC-enabled domain (needed for registrar configuration) |
| export_dnssec_keyA | Export a DNSSEC DNSKEY record for a domain |
| set_dnssec_nsec3A | Enable NSEC3 for a DNSSEC domain (prevents zone enumeration) |
| unset_dnssec_nsec3A | Disable NSEC3 for a DNSSEC domain (revert to NSEC) |
| list_domainsA | List all domains on the account (main, addon, sub, parked) |
| get_domain_infoB | Get detailed information about a specific domain |
| list_subdomainsA | List all subdomains |
| create_subdomainC | Create a new subdomain |
| delete_subdomainC | Delete a subdomain |
| list_addon_domainsA | List all addon domains |
| create_addon_domainB | Create a new addon domain |
| delete_addon_domainB | Delete an addon domain |
| list_parked_domainsA | List all parked/aliased domains |
| create_parked_domainB | Park/alias a domain to the main domain |
| delete_parked_domainA | Remove a parked/aliased domain |
| list_redirectsA | List all URL redirects |
| create_redirectB | Create a URL redirect |
| delete_redirectB | Delete a URL redirect |
| list_cron_jobsA | List all cron jobs on the account |
| create_cron_jobC | Create a new cron job |
| edit_cron_jobC | Edit an existing cron job |
| delete_cron_jobB | Delete a cron job |
| get_cron_emailA | Get the email address for cron job notifications |
| create_simple_cron_jobB | Create a cron job using a human-friendly schedule preset without manually formatting cron syntax |
| set_cron_emailA | Set the email address for cron job notifications |
| list_php_versionsA | List all installed PHP versions available on the server |
| get_php_version_for_domainA | Get the current PHP version assigned to a domain |
| set_php_version_for_domainB | Set the PHP version for a domain |
| get_php_ini_directivesA | Get current PHP INI directives for the account |
| set_php_ini_directivesB | Set PHP INI directives (e.g., memory_limit, upload_max_filesize) |
| list_ssl_certificatesA | List all installed SSL certificates |
| get_ssl_statusA | Get SSL status for all domains on the account |
| install_ssl_certificateB | Install an SSL certificate for a domain |
| delete_ssl_certificateA | Delete/uninstall an SSL certificate from a domain |
| generate_ssl_csrB | Generate a Certificate Signing Request (CSR) |
| get_autossl_statusA | Check AutoSSL status and pending requests |
| trigger_autosslA | Trigger an AutoSSL check/renewal for the account |
| list_ssl_keysA | List all SSL private keys on the account |
| list_blocked_ipsA | List all blocked IP addresses |
| block_ipA | Block an IP address or range |
| unblock_ipA | Unblock a previously blocked IP address |
| list_ssh_keysA | List all SSH keys on the account |
| import_ssh_keyB | Import an SSH public or private key |
| delete_ssh_keyB | Delete an SSH key |
| authorize_ssh_keyB | Authorize an SSH key for login |
| deauthorize_ssh_keyA | Deauthorize an SSH key (revoke login access) |
| generate_ssh_keyC | Generate a new RSA or DSA SSH keypair directly on the cPanel server |
| get_ssh_connection_infoA | Get server SSH port and connection details for remote terminal access |
| get_hotlink_protectionA | Get current hotlink protection settings |
| enable_hotlink_protectionC | Enable hotlink protection |
| disable_hotlink_protectionC | Disable hotlink protection |
| list_directory_privacyA | List directories with password protection configured |
| add_directory_userB | Add a user to a password-protected directory |
| get_modsecurity_statusA | Check if ModSecurity (WAF) is installed and get domain status |
| enable_modsecurityA | Enable ModSecurity (WAF) for all domains |
| disable_modsecurityA | Disable ModSecurity (WAF) for all domains |
| enable_modsecurity_domainB | Enable ModSecurity for specific domains |
| disable_modsecurity_domainA | Disable ModSecurity for specific domains |
| get_2fa_statusA | Check if two-factor authentication is configured for the account |
| generate_2fa_configA | Generate a new two-factor authentication secret (returns QR code data) |
| set_2faB | Enable two-factor authentication with a secret and verification code |
| remove_2faA | Remove/disable two-factor authentication from the account |
| start_virus_scanB | Start a ClamAV virus scan on a directory (requires ClamAV plugin on server) |
| get_virus_scan_statusA | Check the status of a running virus scan |
| list_infected_filesA | List files detected as infected by ClamAV |
| disinfect_filesB | Quarantine/disinfect files detected as infected |
| get_bandwidth_usageA | Get bandwidth usage statistics for the account |
| get_resource_usageA | Get current resource usage (CPU, memory, I/O, entry processes) |
| get_error_logA | Get the most recent entries from the site error log |
| get_visitors_statsC | Get visitor/access statistics for a domain |
| get_account_statsA | Get general account statistics (email count, db count, domains, etc.) |
| create_full_backupC | Create a full account backup |
| list_backupsA | List available backups on the account |
| create_database_backupC | Create a backup of a specific MySQL database |
| restore_database_backupB | Restore a MySQL database from a backup file |
| create_homedir_backupB | Create a backup of the home directory files |
| restore_file_backupC | Restore a file from a backup |
| create_email_backupA | Create a backup of email configurations and data |
| list_ftp_accountsA | List all FTP accounts with disk usage |
| create_ftp_accountB | Create a new FTP account |
| delete_ftp_accountB | Delete an FTP account |
| change_ftp_passwordB | Change an FTP account password |
| change_ftp_quotaA | Change an FTP account's disk quota |
| list_ftp_sessionsA | List active FTP sessions |
| kill_ftp_sessionA | Terminate an active FTP session |
| get_ftp_portB | Get the FTP server port number |
| list_wordpress_installationsA | List all WordPress installations managed by cPanel (requires WP Toolkit or Instance Manager on server) |
| list_passenger_appsA | List all registered Node.js/Python/Ruby applications |
| register_passenger_appB | Register a new Node.js, Python, or Ruby application |
| unregister_passenger_appB | Unregister/remove a Node.js, Python, or Ruby application |
| enable_passenger_appC | Enable/start a registered application |
| disable_passenger_appC | Disable/stop a registered application |
| ensure_passenger_depsA | Install/update dependencies for a registered application (npm install, pip install, etc.) |
| list_git_reposA | List all Git repositories managed by cPanel |
| create_git_repoB | Create a new Git repository in cPanel |
| delete_git_repoB | Delete a Git repository from cPanel |
| update_git_repoC | Pull/update a Git repository |
| deploy_git_repoA | Deploy a Git repository (trigger deployment via .cpanel.yml) |
| get_git_deployment_statusB | Get the deployment status of a Git repository |
| list_api_tokensA | List all cPanel API tokens for the account |
| create_api_tokenA | Create a new cPanel API token with full access |
| rename_api_tokenB | Rename an existing API token |
| revoke_api_tokenA | Revoke/delete an API token |
| list_featuresA | List all features available to the cPanel account |
| check_featureA | Check if a specific feature is enabled for the account |
| get_account_infoB | Get general server and account information |
| get_server_infoA | Get server information (hostname, OS, IP addresses) |
| verify_cpanel_connectionB | Test and verify the live connection and credentials to the cPanel server |
| provision_full_websiteA | Provision a complete website in one step: creates domain/docroot, MySQL database, secure user with full grants, index placeholder, and triggers AutoSSL |
| apply_dns_presetB | Configure DNS record bundles for popular services (Google Workspace, Microsoft 365, Zoho Mail, Resend, Cloudflare) |
| cleanup_account_temp_filesA | Free up disk space by emptying trash bins, clearing error_log files, and purging temporary session caches |
| configure_github_tokenC | Save a GitHub Personal Access Token (PAT) for automated GitHub repository operations and webhooks |
| connect_github_repoC | Connect and clone a GitHub repository to cPanel and optionally configure deployment paths |
| redeploy_from_githubB | Pull latest commits from GitHub and execute deployment tasks configured in .cpanel.yml |
| generate_cpanel_ymlC | Generate or update a .cpanel.yml deployment specification in a repository or directory |
| create_github_webhookC | Create a push webhook on a GitHub repository to trigger automatic redeployment on cPanel |
| setup_github_deploy_keyA | Generate an SSH key in cPanel and automatically register it as a read-only Deploy Key on GitHub for private repo access |
| generate_github_actions_workflowA | Generate a GitHub Actions workflow (.github/workflows/deploy.yml) that automatically calls cPanel to redeploy on push |
| check_github_sync_statusB | Check if cPanel repository is up-to-date with the latest commit on GitHub |
| setup_nodejs_appC | Provision and configure a complete Node.js application with Passenger, .htaccess routing, starter files, and domain mapping |
| restart_nodejs_appB | Restart a running Node.js application instantly by updating its Passenger restart trigger |
| list_nodejs_appsB | List all configured Node.js applications and their status |
| run_npm_installC | Run npm dependency installation for a Node.js application |
| configure_nodejs_envC | Set or update environment variables in .env for a Node.js application |
| destroy_nodejs_appC | Unregister and remove a Node.js application configuration |
| setup_python_appC | Provision and configure a complete Python application (Flask, Django, FastAPI, or WSGI) with Passenger and .htaccess routing |
| restart_python_appA | Restart a running Python WSGI application instantly by updating its Passenger restart trigger |
| list_python_appsA | List all configured Python applications and their status |
| run_pip_installC | Run pip dependency installation for a registered Python application |
| configure_python_envB | Set or update environment variables in .env for a Python application |
| destroy_python_appC | Unregister and remove a Python application configuration |
| setup_laravel_hostingB | Provision a complete, production-ready Laravel hosting environment: sets docroot to /public, provisions MySQL database, generates secure .env, configures 0775 permissions, adds Laravel scheduler cron, and sets PHP 8.2+ |
| deploy_laravel_updateC | Deploy updates to an existing Laravel installation: clears and warms config, route, and view caches |
| get_laravel_statusB | Inspect the health and configuration of a Laravel installation on cPanel |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| troubleshoot_domain | Perform a diagnostic audit on a domain including DNS, SSL, and error logs |
| hosting_security_audit | Audit hosting account security configuration: WAF, IP blocking, 2FA, and SSH keys |
| deploy_new_site | Guide the provisioning of a new domain, database, and SSL certificate |
| setup_github_cpanel_cicd | Guide the automated setup of a GitHub repository to continuously redeploy to cPanel |
| setup_nodejs_app_workflow | Guide the provisioning and configuration of a Node.js application on cPanel |
| setup_python_app_workflow | Guide the provisioning of a Flask, Django, or FastAPI application on cPanel |
| setup_laravel_app_workflow | Guide the complete provisioning of a production Laravel application on cPanel |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| disk_usage | |
| server_info | |
| account_summary |
TDQS
Scored across 214 tools
Most tools map to distinct cPanel resources and actions, but there are overlapping layers such as disable_modsecurity vs disable_modsecurity_domain, setup_nodejs_app vs register_passenger_app/enable_passenger_app, and provision_full_website vs individual domain/database/SSL creation tools. Descriptions help distinguish them, but the all-domain vs per-domain and high-level vs granular boundaries are not always crisp.
The toolset overwhelmingly uses snake_case with predictable verb_noun naming, such as list_domains, create_mysql_database, and delete_email_account. Minor deviations like login_cpanel, cleanup_account_temp_files, and get_2fa_status are readable but slightly less uniform.
A 214-tool surface is far beyond a practical, well-scoped MCP toolset, even for a domain as broad as cPanel. The large number of granular CRUD tools, security toggles, app-specific helpers, and provisioning shortcuts creates an overloaded interface that is hard for an agent to navigate efficiently.
Coverage is extensive across files, databases, email, DNS, domains, SSL, cron, security, backups, FTP, Git, and application hosting. Some lifecycle gaps remain, such as limited edit/update operations for certain domain and email resources and no obvious full-account backup restore tool.