Plesk MCP setup
A Plesk MCP setup needs the Plesk entitlement on your mcp-core license, your panel URL, and either a Plesk API key or your Plesk username and password. With that, Claude reads domains, clients, DNS, databases, logs and files. Changing anything on the server only becomes possible on a connection that runs in read-write mode.
What do you need for a Plesk MCP setup?
You need a running mcp-core installation and the Plesk add-on on the same license. New to mcp-core? Follow the mcp-core install guide first and come back to the Plesk MCP setup afterwards.
- An active license with the
tool:pleskentitlement. The add-on is the Plesk MCP server. - Admin access to the Plesk server you want to connect.
- A Plesk API key for that server (made as root on the server), or the username and password you log in to the panel with.
- Network access from the mcp-core container to the panel address.
- A connection in My Account → Licenses with the Plesk tool ticked.
Bought the add-on after you installed mcp-core? Your Plesk MCP setup needs no reinstall and no new download. The add-on is added to your license, and an email lists the env vars the tool needs.
How do you get a Plesk API key?
Plesk has no screen for API keys. You create the key on the server itself, as root, in a terminal:
- Log in to the Plesk server over SSH.
- Become root, for example with
sudo -i. - Run
plesk bin secret_key -c. Plesk prints the new key. - Paste that key into
PLESK_API_KEYin.env, or into the API key field of your connection in My Account.
plesk bin secret_key -c -ip-address 203.0.113.10 -description "AddoCore MCP"
With -ip-address the key only works from that address, the public IP of the server that runs mcp-core. -description helps you find the key again later. mcp-core sends the key in the X-API-Key header on every request.
The tool cannot create or revoke API keys itself. plesk bin secret_key -l lists the keys on the server and plesk bin secret_key -d <key> removes one. If a key leaks, remove it, create a new one and replace it. Treat the key like your admin password: anyone who has it can reach the same API.
Can you log in with your Plesk username and password instead?
Yes. No root access to the server, or no terminal? Fill in the username and password you use to log in to the panel (PLESK_USERNAME and PLESK_PASSWORD, or the Plesk username and Plesk password fields in My Account) and leave the API key empty. mcp-core then logs in with HTTP Basic on every request.
- Use an administrator login. A customer or reseller login only sees its own part of the server, and the connection check (reading the server info) fails with it.
- When both an API key and a username and password are filled in, mcp-core uses the API key.
- Changing the Plesk password breaks the connection until you enter the new one here too. An API key does not have that problem, can be limited to one IP address and can be removed on its own, so it is the better choice when you do have root.
Which env vars does the Plesk MCP setup read?
A Plesk MCP setup reads the panel address, one of two logins, and one optional fallback.
| Variable | Required | Default | Purpose |
|---|---|---|---|
PLESK_BASE_URL | Yes | none | The bare panel origin, including the port if you use one |
PLESK_API_KEY | This, or the two below | none | The key from plesk bin secret_key -c, sent as X-API-Key |
PLESK_USERNAME | Without an API key | none | The name you log in to the panel with |
PLESK_PASSWORD | Without an API key | none | The password of that login |
PLESK_MODE | No | read-only | Legacy fallback; the mode on the connection takes precedence |
A typical block with an API key, and the same with a username and password:
PLESK_BASE_URL=https://panel.example.com:8443
PLESK_API_KEY=your-plesk-api-key
# or, without an API key:
PLESK_BASE_URL=https://panel.example.com:8443
PLESK_USERNAME=admin
PLESK_PASSWORD=your-plesk-password
Enter the address as you type it in a browser to open your panel. mcp-core strips trailing slashes and appends /api/v2 itself, so do not add that path. The same values can also live in My Account → Licenses → Credentials. They are stored encrypted there, a running mcp-core picks them up without a new download, and they override .env.
Which tools does a read-only Plesk MCP setup give Claude?
A read-only Plesk MCP setup gives Claude 25 tools that read the panel and change nothing. This is the default for every connection.
- Server:
plesk_get_server_info,plesk_list_server_ips - Extensions:
plesk_list_extensions,plesk_get_extension - Clients:
plesk_list_clients,plesk_get_client,plesk_list_client_domains,plesk_get_client_statistics - Domains:
plesk_list_domains,plesk_get_domain,plesk_get_domain_owner,plesk_get_domain_status,plesk_check_domain_dns,plesk_search_domain_logs - FTP and databases:
plesk_list_ftp_users,plesk_list_databases,plesk_list_db_users,plesk_list_db_servers - DNS:
plesk_list_dns_records,plesk_get_dns_record - Domain files:
plesk_get_domain_file_info,plesk_list_domain_files,plesk_get_domain_file_content - CLI reference:
plesk_list_cli_commands,plesk_get_cli_command_ref
plesk_check_domain_dns runs Plesk’s own DNS resolution check (nameservers, A/MX records, email authentication, propagation). plesk_search_domain_logs searches web, mail and PHP logs by pattern, ISO 8601 start and end time and a sample size. File paths are relative to the document root; use encoding=base64 for binary files.
What does read-write mode add to the Plesk MCP setup?
Read-write mode registers 26 extra tools that change your server. You choose the mode per connection when you add it in My Account → Licenses → Connections. See entitlements vs. tool modes for how the license and the mode work together.
- Clients: create, update, delete, activate, suspend
- Domains: create, update, delete, set status (active, suspended, disabled)
- FTP users, databases, database users and DNS records: create, update or delete
- Extensions: install (by catalog ID, URL or file on the server), uninstall, enable, disable
plesk_exec_domain_command: any shell command as the domain’s hosting user, by default in its document rootplesk_call_cli_command: a Plesk CLI utility with server-wide administrative scope
How dangerous is read-write mode on a Plesk server?
One call can take sites offline or destroy data for good. plesk_delete_client removes the client and everything it owns: domains, mailboxes, databases. plesk_delete_domain removes the domain’s hosting, mail, databases and files. plesk_delete_database removes the data. None of these can be undone. Suspending a client takes its domains offline.
mcp-core does not ask for a second confirmation. A write call goes straight to the Plesk API. The guards are the mode gate and the warnings in the tool descriptions (“PERMANENTLY delete”, “DANGEROUS”) that Claude reads before it calls a tool. The two command tools default to fail_on_error: true, so a non-zero exit code returns an error. That reports a failure; it does not prevent one.
Practical rules for a Plesk MCP setup with write access: keep every shared connection read-only, give read-write to one connection that you use yourself, ask for one explicit action at a time, and make sure a recent backup exists.
What does the Plesk MCP setup never allow?
Some endpoints are not part of any Plesk MCP setup, in any mode. Domain file writes (upload, delete, copy, move, mkdir, append, chmod) are missing, so the file tools only read. API key management, server initialisation and the Plesk license endpoints are missing too. The shell command tool can still change files in read-write mode.
How do you restart mcp-core and test the Plesk MCP setup?
Run the update script from the folder you unzipped. It pulls the image and restarts mcp-core with your current .env.
./mcp-update.sh
If you just bought the add-on, trigger a license check so the entitlement arrives now:
docker exec mcp-core npm run refresh-license
In Claude, ask it to run mcp_status. It shows the license state, the active connection, its tools and the mode per tool. Then try “get the Plesk server info” and “list all domains”. Which client uses which connection token is covered in MCP connections.
Which errors come up during a Plesk MCP setup?
These messages come from the tool itself, so you can match them word for word.
- No Plesk tools in Claude: the container log says “PLESK_BASE_URL, and PLESK_API_KEY or PLESK_USERNAME + PLESK_PASSWORD, are not set”. Add the panel address and one of the two logins, run
./mcp-update.sh, and check the entitlement and the connection’s tool list. - Only read tools appear: a log line with
mode=read-onlyand “write tools” means the connection is read-only. Add a read-write connection if you really need writes. - “Plesk API error 401” (or another status code): Plesk rejected the request. Check the key (or the username and password) and that the URL points to the panel origin without
/api/v2. The message includes the first 300 characters of Plesk’s answer. - “Provide either database_id, or both parent_domain and server_id.”: a database user needs a target. Name the database, or the subscription and database server.
- “Provide exactly one of id, url, or file.”: an extension install was called without a source.
- “Rate limit exceeded for this tool”: mcp-core’s own per-connection limit. Wait the seconds it mentions.
Once mcp_status lists the Plesk tools and a test query returns your domains, the Plesk MCP setup is complete. The other add-ons are covered in the MCP setup guides.