MCP server for the cPanel UAPI - manage email, DNS, files, MySQL, SSL, cron, subdomains, and more on shared cPanel hosting
70 tools with inconsistent quality. Naming is generally verb-noun compliant (domains_list_all, email_create, etc.), but descriptions vary widely: many are terse (10-30 chars, e.g., 'List main, parked, addon, and sub domains') and lack actionable context for LLM selection. Input schemas are present for most tools but often minimal, many accept empty objects {} (domains_list_all, subdomain_list, email_list) with no parameters, limiting composability. Parameter descriptions exist but are sparse (e.g., 'Subdomain prefix, e.g. "blog"' lacks format/length constraints). Output schemas are not documented anywhere in the source. Error handling is generic (asErrorContent wrapper) with no recovery guidance. Security concern: setup tool and auth_switch_profile modify state but lack confirmation patterns. No tool annotations (readOnlyHint, destructiveHint) visible in registration code.
Get account information
Add an addon domain. Wraps AddonDomain::add_addon_domain.
List addon domains. Wraps AddonDomain::list_addon_domains.
List all saved credential profiles
Show current authentication status and active profile
Switch to a different credential profile
Test credentials against cPanel without saving them
Create a full backup
List available backups
Output schemas not documented. Tools return raw API responses (asJsonContent wrapper) with no schema definition. LLMs cannot predict field names, types, or pagination structure. Violates pattern:response-shaper.
Many tools accept empty input schemas {} (domains_list_all, subdomain_list, email_list, etc.) with no parameters. Reduces composability and forces LLMs to discover available filters via trial-and-error. Should expose pagination (limit, offset) and filtering parameters.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 38 | 2026-07-28+ | v2 |
Add a cron job
List cron jobs
Remove a cron job
Add a DNS record
Delete a DNS record
Edit a DNS record
List DNS records for a zone
List main, parked, addon, and sub domains. Wraps DomainInfo::list_domains.
Add an email autoresponder
Add an email forwarder
Change email account password
Create an email account
Delete an email account
Delete an email autoresponder
Delete an email filter
Delete an email forwarder
Get email account disk usage
List email accounts
List email autoresponders
List email filters
List email forwarders
Set email account quota
Change file permissions
Compress files
Copy a file
Delete a file
Extract compressed files
Get file information
List files in a directory
Create a directory
Move or rename a file
Read file content
Write file content
Change FTP account password
Create an FTP account
Delete an FTP account
Get FTP server port
Get FTP server hostname
List FTP accounts
Set FTP account quota
List functions available on a specific UAPI module
List available UAPI modules with descriptions
Create a MySQL database
Create a MySQL user
Delete a MySQL database
Delete a MySQL user
List MySQL databases
List MySQL users
Rename a MySQL database
Revoke MySQL privileges
Change MySQL user password
Grant MySQL privileges
Interactive setup tool for configuring cPanel credentials
Delete an SSL certificate
Install an SSL certificate
List SSL certificates
Create a subdomain. Wraps SubDomain::add_subdomain.
List subdomains. Wraps SubDomain::list_subdomains.
Delete a subdomain. Wraps SubDomain::delete_subdomain.
Call any cPanel UAPI endpoint directly
Get current cPanel user information
Descriptions are terse (10-50 chars) and lack actionable context. E.g., 'List main, parked, addon, and sub domains' does not explain WHEN to call this vs subdomain_list or addon_domain_list. No recovery guidance in error cases. Violates pattern:tool-description.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) visible in tool registration. Destructive tools (email_delete, files_delete, mysql_delete_database, cron_remove) should be marked with destructiveHint=true to signal irreversibility to LLMs.
setup and auth_switch_profile modify persistent state (credential profiles) without confirmation or dry-run. Agents could accidentally overwrite active credentials. Violates pattern:confirmation-request.