mcp-plesk-lite
v1.1.2
Published
MCP server for Plesk web hosting administration — manage domains, DNS, databases, mail, SSL, backups, and WordPress via AI agents
Maintainers
Readme
mcp-plesk-lite
MCP server for Plesk web hosting administration. Manage domains, DNS, databases, mail, SSL certificates, backups, and WordPress installations via any MCP-compatible AI agent (Claude, n8n, etc.).
Self-hosted, lightweight.
Features
- 78+ tools covering the full Plesk REST API
- Works with Claude Desktop, n8n, Cursor, and any MCP client
- stdio transport (default) + HTTP Streamable transport (optional)
- Supports API key or username/password authentication
- Self-signed TLS certificate support
- Confirmation required for all destructive operations
Installation
Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"mcp-plesk": {
"command": "npx",
"args": ["-y", "mcp-plesk-lite"],
"env": {
"PLESK_BASE_URL": "https://your-plesk-server.com:8443/api/v2",
"PLESK_API_KEY": "your-api-key",
"PLESK_ALLOW_SELF_SIGNED": "true"
}
}
}
}n8n (HTTP transport)
Start the server with an HTTP port:
PLESK_BASE_URL=https://your-plesk-server.com:8443/api/v2 \
PLESK_API_KEY=your-api-key \
MCP_HTTP_PORT=3000 \
npx mcp-plesk-liteThen configure your n8n MCP node to connect to http://localhost:3000/mcp.
Manual install
npm install -g mcp-plesk-liteConfiguration
Copy .env.example to .env and fill in your values:
| Variable | Required | Description |
|---|---|---|
| PLESK_BASE_URL | ✅ | Plesk API URL, e.g. https://your-server.com:8443/api/v2 |
| PLESK_API_KEY | ✅ * | API key — generate in Plesk → Profile → API Keys |
| PLESK_USERNAME | ✅ * | Admin username (alternative to API key) |
| PLESK_PASSWORD | ✅ * | Admin password (alternative to API key) |
| PLESK_ALLOW_SELF_SIGNED | ❌ | Accept self-signed TLS certs (default: true) |
| PLESK_DEFAULT_WP_SITE_ID | ❌ | Default WordPress site ID for wp_* tools (default: 5) |
| MCP_HTTP_PORT | ❌ | Run as HTTP server on this port instead of stdio |
* Provide either PLESK_API_KEY or PLESK_USERNAME + PLESK_PASSWORD.
Available Tools
Server (3)
| Tool | Description |
|---|---|
| plesk_server_info | Plesk version, hostname, OS, license, IP addresses |
| plesk_health_check | API availability and response latency |
| plesk_system_stats | CPU, RAM, disk, load average |
Domains (6)
| Tool | Description |
|---|---|
| plesk_list_domains | List all domains, optionally filtered by name |
| plesk_get_domain | Get domain details by ID |
| plesk_create_domain | Create a new domain ⚠️ |
| plesk_update_domain | Update domain configuration |
| plesk_delete_domain | Delete domain and ALL data ⚠️ |
| plesk_get_domain_status | Get domain operational status |
Clients (7)
| Tool | Description |
|---|---|
| plesk_list_clients | List all client accounts |
| plesk_get_client | Get client details and usage stats |
| plesk_create_client | Create a client account ⚠️ |
| plesk_update_client | Update client account settings |
| plesk_delete_client | Delete client and ALL associated domains ⚠️ |
| plesk_suspend_client | Suspend a client account ⚠️ |
| plesk_activate_client | Reactivate a suspended client |
Subscriptions (4)
| Tool | Description |
|---|---|
| plesk_list_subscriptions | List all subscriptions |
| plesk_get_subscription | Get subscription details and status |
| plesk_suspend_subscription | Suspend a subscription ⚠️ |
| plesk_enable_subscription | Reactivate a suspended subscription |
DNS (4)
| Tool | Description |
|---|---|
| plesk_get_dns_records | Get all DNS records for a domain |
| plesk_create_dns_record | Add a DNS record ⚠️ |
| plesk_update_dns_record | Update a DNS record ⚠️ |
| plesk_delete_dns_record | Delete a DNS record ⚠️ |
Databases (9)
| Tool | Description |
|---|---|
| plesk_list_databases | List databases, optionally filtered by domain |
| plesk_get_database | Get database and its users |
| plesk_create_database | Create a database ⚠️ |
| plesk_delete_database | Delete a database and ALL its data ⚠️ |
| plesk_list_db_servers | List configured database servers |
| plesk_list_db_users | List database users |
| plesk_create_db_user | Create a database user ⚠️ |
| plesk_update_db_user | Update database user password |
| plesk_delete_db_user | Delete a database user ⚠️ |
Mail (4)
| Tool | Description |
|---|---|
| plesk_list_mailboxes | List mailboxes, optionally filtered by domain |
| plesk_create_mailbox | Create a mailbox ⚠️ |
| plesk_delete_mailbox | Delete a mailbox and ALL emails ⚠️ |
| plesk_reset_mailbox_password | Reset mailbox password ⚠️ |
SSL / TLS (3)
| Tool | Description |
|---|---|
| plesk_list_certificates | List installed SSL certificates |
| plesk_install_certificate | Install SSL cert (manual PEM or Let's Encrypt) ⚠️ |
| plesk_renew_certificate | Renew a Let's Encrypt certificate ⚠️ |
Backups (3)
| Tool | Description |
|---|---|
| plesk_list_backups | List all backups |
| plesk_create_backup | Create server or domain backup ⚠️ |
| plesk_restore_backup | Restore backup — IRREVERSIBLE ⚠️⚠️ |
WordPress (23)
| Tool | Description |
|---|---|
| wp_list_sites | List all WP Toolkit managed installations |
| wp_get_site | Get WordPress site details |
| wp_get_site_status | Version, URL, security score, available updates |
| wp_security_status | Security status and vulnerabilities |
| wp_list_plugins | List plugins for a site |
| wp_list_themes | List themes for a site |
| wp_scan_installations | Scan server for all WP installations |
| wp_install_plugin | Install a plugin from WordPress.org ⚠️ |
| wp_activate_plugin | Activate an installed plugin |
| wp_deactivate_plugin | Deactivate a plugin |
| wp_update_plugin | Update a plugin ⚠️ |
| wp_remove_plugin | Remove a plugin ⚠️ |
| wp_install_theme | Install a theme ⚠️ |
| wp_activate_theme | Activate a theme |
| wp_update_theme | Update a theme ⚠️ |
| wp_remove_theme | Remove a theme ⚠️ |
| wp_update_core | Update WordPress core ⚠️⚠️ |
| wp_apply_security_fix | Apply security hardening ⚠️ |
| wp_clone_site | Clone a WP site to a new domain ⚠️⚠️ |
| wp_sync_site | Sync WP site — overwrites target ⚠️⚠️ |
| wp_enable_debug | Enable WP_DEBUG mode ⚠️ |
| wp_disable_debug | Disable WP_DEBUG mode |
| wp_manage_maintenance_mode | Enable / disable maintenance mode ⚠️ |
Extensions (5)
| Tool | Description |
|---|---|
| plesk_list_extensions | List installed extensions with version and status |
| plesk_get_extension | Get extension details by ID |
| plesk_install_extension | Install an extension from catalog, URL, or file ⚠️ |
| plesk_remove_extension | Uninstall an extension ⚠️ |
| plesk_toggle_extension | Enable or disable an extension |
System / Advanced (7)
| Tool | Description |
|---|---|
| plesk_raw_request | Execute any Plesk REST API request directly |
| plesk_list_cli_commands | List available Plesk CLI commands |
| plesk_get_cli_command_ref | Get CLI command options and subcommands |
| plesk_cli | Execute any Plesk CLI command |
| plesk_list_ftp_users | List FTP users |
| plesk_create_ftp_user | Create an FTP user ⚠️ |
| plesk_delete_ftp_user | Delete an FTP user ⚠️ |
⚠️ = requires confirmation · ⚠️⚠️ = requires double confirmation (irreversible)
Contributing
Branch naming: fix/..., feat/..., chore/...
Commit messages follow Conventional Commits — semantic-release uses them to determine the next version automatically:
| Prefix | Release |
|---|---|
| fix: | Patch 1.0.x |
| feat: | Minor 1.x.0 |
| feat!: / BREAKING CHANGE | Major x.0.0 |
| chore: / docs: | No release |
See CONTRIBUTING for the full PR checklist.
License
MIT © Mohamed Ben Hariz
