Skip to main content
Glama
hahsanayub

cPanel MCP Server

by hahsanayub
README.md
# cPanel MCP Server

A comprehensive Model Context Protocol (MCP) server for managing cPanel hosting accounts through AI assistants. Connects directly to cPanel's UAPI and API2, enabling natural language management of web hosting — DNS, DNSSEC, email (with DKIM/SPF), databases, domains, SSL/AutoSSL, PHP, cron jobs, security (WAF, IP blocker, virus scanner, 2FA), Git deployment, Node.js/Python apps, and more.

## Features

### File Management
- **List, create, read, edit, and delete files** in your hosting account

### Disk Usage
- **Account quota info** — check disk space consumption and limits

### MySQL Database Management
- **Full CRUD** for databases, users, and privileges
- **Server info** — version and restriction details
- **Privilege management** — grant/revoke per database

### PostgreSQL Database Management
- **Full CRUD** for databases, users, and privileges
- **Grant/revoke access** per database

### Email Management
- **Email accounts** — create, delete, change password, set quotas, list with disk usage
- **Forwarders** — create, list, and delete email forwarding rules
- **Autoresponders** — create, list, and delete out-of-office / autoresponse messages
- **Email routing** — view mail domain configuration

### Email Authentication (DKIM/SPF)
- **DKIM** — enable, disable, validate, and ensure keys exist for all domains
- **SPF** — validate and install/update SPF records
- **PTR** — validate reverse DNS records

### Email Filters & Spam
- **Email filters** — create structured rules and actions, list, delete, and trace/test filters
- **SpamAssassin** — enable/disable, configure spam box, get settings, clear spam
- **Greylisting** — enable/disable for all domains

### DNS Management
- **Get zone records** for any domain (via API2 ZoneEdit)
- **Add, edit, and delete** DNS records (A, AAAA, CNAME, MX, TXT, SRV, CAA)

### DNSSEC
- **Enable/disable** DNSSEC for domains
- **DS records** — fetch for registrar configuration
- **DNSKEY export** — export zone keys
- **NSEC3** — enable/disable (prevents zone enumeration)

### Domain Management
- **List all domains** — main, addon, subdomains, and parked
- **Addon domains** — create and delete
- **Subdomains** — create and delete with custom document roots
- **Parked domains (aliases)** — park and unpark
- **Redirects** — create and delete URL redirects (301/302)

### Cron Job Management
- **List, create, edit, and delete** cron jobs (via API2)
- **Notification email** — get and set the cron notification address

### PHP Management
- **List installed PHP versions** available on the server
- **Get/set PHP version** per domain
- **PHP INI directives** — read and modify (memory_limit, upload_max_filesize, etc.)

### SSL/TLS Management
- **List certificates** and **SSL status** per domain
- **Install and delete** SSL certificates
- **Generate CSR** for certificate requests
- **AutoSSL** — check status and trigger renewal
- **List private keys**

### Security
- **IP Blocker** — list, block, and unblock IP addresses/ranges
- **SSH Keys** — list, import, delete, authorize, and deauthorize keys
- **Hotlink Protection** — get status, enable with custom settings, disable
- **Directory Privacy** — list protected directories and add users

### ModSecurity (WAF)
- **Status** — check if ModSecurity is installed, list domain status
- **Enable/disable** globally or per domain

### Two-Factor Authentication
- **Status** — check if 2FA is configured
- **Setup** — generate secret/QR code, enable with verification
- **Remove** — disable 2FA

### Virus Scanner (ClamAV) *requires ClamAV plugin*
- **Scan** — start virus scan on a directory
- **Status** — check scan progress
- **Results** — list infected files, quarantine/disinfect

### Metrics & Logs
- **Bandwidth usage** statistics
- **Resource usage** — CPU, memory, I/O, entry processes
- **Error logs** — recent error entries
- **Visitor stats** — per-domain access statistics
- **Account stats** — summary of email accounts, databases, domains, disk, bandwidth

### Backup Management
- **Full account backup** to home directory
- **Partial backups** — home directory, databases, and email separately
- **Restore** — database and file restore from backup
- **List available backups**

### FTP Management
- **List FTP accounts** with disk usage
- **Create and delete** FTP accounts
- **Change password and quota**
- **Active sessions** — list and terminate
- **Server port** info

### Applications & Deployment
- **WordPress** — list installations *(requires WP Toolkit / Instance Manager)*
- **Node.js/Python/Ruby apps** — register, unregister, enable, disable, install dependencies *(requires Phusion Passenger)*
- **Git repositories** — create, list, update, delete, and deploy via `.cpanel.yml` *(requires Git Version Control feature)*

### Account Management
- **API tokens** — list, create, rename, and revoke
- **Features** — list available features, check if specific features are enabled
- **Account info** — user information, server details

## Installation and Configuration

### Prerequisites
- Node.js 18+
- A cPanel account with API token access

### Build

```bash
npm install
npm run build
```

### Configure

Add the following to your MCP settings configuration (e.g., `claude_desktop_config.json`, `cline_mcp_settings.json`, or your IDE's MCP config):

```json
{
  "mcpServers": {
    "cpanel": {
      "command": "node",
      "args": ["/path/to/cPanel-MCP-Server/build/index.js"],
      "env": {
        "CPANEL_USERNAME": "your_cpanel_username",
        "CPANEL_API_TOKEN": "your_cpanel_api_token",
        "CPANEL_SERVER_URL": "https://your-domain.com:2083"
      }
    }
  }
}
```

Replace the placeholder values with your actual cPanel credentials.

### Environment Variables

| Variable | Required | Default | Description |
|----------|----------|---------|-------------|
| `CPANEL_USERNAME` | Yes | — | cPanel account username |
| `CPANEL_API_TOKEN` | Yes | — | API token for authentication |
| `CPANEL_SERVER_URL` | Yes | — | cPanel server URL (e.g., `https://example.com:2083`) |
| `CPANEL_TIMEOUT_MS` | No | `30000` | Request timeout in milliseconds |
| `CPANEL_VERIFY_SSL` | No | `true` | Set to `false` to disable SSL certificate verification (for self-signed certs) |

### Getting a cPanel API Token

1. Log in to cPanel
2. Go to **Security** > **Manage API Tokens**
3. Create a new token with a descriptive name
4. Copy the token — it won't be shown again

## Available Tools (165 total)

| Category | Count |
|----------|-------|
| File Management | 5 |
| Disk Usage | 1 |
| MySQL | 9 |
| PostgreSQL | 8 |
| Email (accounts, forwarders, autoresponders) | 12 |
| Email Authentication (DKIM/SPF/PTR) | 7 |
| Email Filters & Spam | 13 |
| DNS | 4 |
| DNSSEC | 6 |
| Domains (addon, sub, parked, redirects) | 14 |
| Cron Jobs | 6 |
| PHP | 5 |
| SSL/TLS & AutoSSL | 8 |
| Security (IP blocker, SSH, hotlink, privacy) | 13 |
| ModSecurity (WAF) | 5 |
| Two-Factor Auth | 4 |
| Virus Scanner (ClamAV) | 4 |
| Metrics & Logs | 5 |
| Backups | 7 |
| FTP | 8 |
| WordPress | 1 |
| Passenger Apps (Node.js/Python/Ruby) | 6 |
| Git Version Control & Deployment | 6 |
| API Tokens | 4 |
| Account & Server Info | 4 |

## Architecture

```
src/
├── index.ts           # MCP server entry point — registers all 25 tool modules
├── cpanel-api.ts      # cPanel API client (UAPI + API2, token auth, error handling)
└── tools/
    ├── files.ts           # File operations (Fileman)
    ├── disk.ts            # Disk usage (Quota, DiskUsage)
    ├── mysql.ts           # MySQL databases (Mysql)
    ├── postgresql.ts      # PostgreSQL databases (Postgresql)
    ├── email.ts           # Email accounts, forwarders, autoresponders (Email)
    ├── email-auth.ts      # DKIM, SPF, PTR validation (EmailAuth)
    ├── email-filters.ts   # Filters, SpamAssassin, Greylisting
    ├── dns.ts             # DNS zone records (DNS)
    ├── dnssec.ts          # DNSSEC management (DNSSEC)
    ├── domains.ts         # Domains, subdomains, redirects
    ├── cron.ts            # Cron jobs (API2 Cron)
    ├── php.ts             # PHP version & INI (LangPHP)
    ├── ssl.ts             # SSL/TLS & AutoSSL (SSL)
    ├── security.ts        # IP blocker, SSH, hotlink, privacy
    ├── modsecurity.ts     # ModSecurity WAF
    ├── twofa.ts           # Two-factor authentication
    ├── virus-scanner.ts   # ClamAV virus scanner
    ├── metrics.ts         # Bandwidth, resources, logs, stats
    ├── backups.ts         # Full & partial backups, restore
    ├── ftp.ts             # FTP accounts & sessions
    ├── wordpress.ts       # WordPress installations
    ├── passenger.ts       # Node.js/Python/Ruby apps
    ├── version-control.ts # Git repos & deployment
    ├── tokens.ts          # API token management
    └── features.ts        # Feature checks & server info
```

## API Compatibility

- **UAPI** (preferred) — used for most modules
- **API2** (legacy) — used where cPanel has no UAPI equivalent:
  - **Cron jobs** — `Cron::fetchcron`, `add_line`, `edit_line`, `remove_line`, `get_email`, `set_email`
  - **DNS records** — `ZoneEdit::fetchzone_records`, `add_zone_record`, `edit_zone_record`, `remove_zone_record`
  - **Subdomains** — `SubDomain::listsubdomains`, `addsubdomain`, `delsubdomain`
  - **Addon domains** — `AddonDomain::listaddondomains`, `addaddondomain`, `deladdondomain`
  - **Parked domains** — `Park::listparkeddomains`, `park`, `unpark`
  - **IP blocking list** — `DenyIp::listdenyips`
- Both API versions share the same authenticated client with retry logic and error handling

## Security

Your cPanel credentials are loaded from environment variables at runtime and are never stored in the repository. The API token should be treated as a secret — do not commit it to version control.

## License

ISC