{
  "markdown": "# Plesk MCP Server\n\n<!-- mcp-name: io.github.FlayedOne/plesk-mcp -->\n\nThis [MCP server](https://modelcontextprotocol.io) for [Plesk](https://www.plesk.com) allows administrators to manage their Plesk servers using various AI agents and apps. It builds on top of [Plesk REST API](https://docs.plesk.com/en-US/obsidian/api-rpc/about-rest-api.79359/) and WP Toolkit REST API, and provides core administration capabilities, as well as ability to manage the server through shell commands and upload files to the server.\n\nThe MCP server runs locally on your machine, so important information doesn't leave your environment.\n\n## Plesk Requirements\n\nThe MCP server is expected to support any sufficiently recent Plesk version (there are no strict limitations) and any OS (Linux or Windows) that Plesk supports. However, it was tested only on Plesk Obsidian 18.0.76, so prefer using a [supported Plesk version](https://endoflife.date/plesk).\n\nObviously, API access must not be disabled on the server.\n\n## MCP Server Requirements\n\nYou will need `uv` Python package manager to run the server. Refer to the [official documentation](https://docs.astral.sh/uv/getting-started/installation/) for installation instructions.\n\n## Usage\n\nConfigure the server in your VS Code `mcp.json` or equivalent (in other agents or apps) using a configuration like:\n\n```json\n{\n    \"servers\": {\n        \"plesk\": {\n            \"command\": \"uvx\",\n            \"args\": [\n                \"plesk-mcp@latest\"\n            ],\n            \"env\": {\n                // Base URL of your Plesk server. May include port.\n                // If you don't have a valid TLS certificate or want to use HTTP,\n                // add the --insecure flag to the args above.\n                // However, this is not recommended as you credentials may be leaked as a result.\n                \"PLESK_HOST\": \"https://plesk.example.net:8443\",\n                // API key (recommended).\n                // Create via `plesk bin secret_key --create -description 'Plesk MCP'` on the server.\n                \"PLESK_API_KEY\": \"00000000-0000-0000-0000-000000000000\",\n                // Alternatively, you can use username and password.\n                \"PLESK_USERNAME\": \"admin\",\n                \"PLESK_PASSWORD\": \"passwd\"\n            }\n        }\n    }\n}\n```\n\nYou may want to use env file (e.g. via `\"envFile\"` parameter) if your agent or app supports it. This will avoid putting credentials directly in the config file.\n\nSee `uvx plesk-mcp@latest --help` for details on available options and environment variables.\n\n## Recommended Usage\n\nFor better behavior, it's recommended to use this MCP server in combination with a documentation MCP server. Select either [plesk-local-docs-mcp](local-docs/README.md) or [plesk-remote-docs-mcp](remote-docs/README.md). This will allow the agent to get more accurate information about Plesk usage when needed.\n\nYou may also attach several Plesk servers at once if needed (e.g. for managing multiple servers).\n\nHere's an example configuration:\n\n```json\n{\n    \"servers\": {\n        \"plesk-docs\": {\n            \"command\": \"uvx\",\n            \"args\": [\n                \"plesk-local-docs-mcp@latest\"\n            ],\n            \"env\": {\n                \"OPENAI_API_KEY\": \"sk-...\"\n            }\n        },\n        \"plesk1\": {\n            \"command\": \"uvx\",\n            \"args\": [\n                \"plesk-mcp@latest\"\n            ],\n            \"env\": {\n                \"PLESK_HOST\": \"https://plesk1.example.net:8443\",\n                \"PLESK_API_KEY\": \"00000000-0000-0000-0000-000000000000\"\n            }\n        },\n        \"plesk2\": {\n            \"command\": \"uvx\",\n            \"args\": [\n                \"plesk-mcp@latest\"\n            ],\n            \"env\": {\n                \"PLESK_HOST\": \"https://plesk2.example.net\",\n                \"PLESK_USERNAME\": \"admin\",\n                \"PLESK_PASSWORD\": \"passwd\"\n            }\n        }\n    }\n}\n```\n\n## Development\n\nMCP server run command:\n\n```bash\nuv run plesk-mcp --log-level debug --insecure\n```\n\nBefore commit:\n\n```bash\nuv run ruff format\nuv run ruff check --fix\nuv run mypy .\nuv run pytest\n```\n\nPublish:\n\n```bash\nuv build --clear\nuv publish\nmcp-publisher login github\nmcp-publisher publish\n```\n\n## Testing\n\n### Using Plesk Docker Image\n\nIf you don't have a Plesk instance but want to test this MCP server, you may use [Plesk Docker image](https://github.com/plesk/docker) instead:\n\n```bash\ndocker run -d --rm --tmpfs /tmp --tmpfs /run --tmpfs /run/lock -v /sys/fs/cgroup:/sys/fs/cgroup --cgroupns host -p 80:80 -p 443:443 -p 8880:8880 -p 8443:8443 --name plesk plesk/plesk\n```\n\nThe Docker image startup is not instant, so give it a minute or so before trying to connect.\n\nAnd then configure the MCP server as:\n```json\n{\n    \"servers\": {\n        \"plesk\": {\n            \"command\": \"uvx\",\n            \"args\": [\n                \"plesk-mcp@latest\",\n                \"--insecure\"\n            ],\n            \"env\": {\n                \"PLESK_HOST\": \"https://localhost:8443\",\n                \"PLESK_PASSWORD\": \"changeme1Q**\"\n            }\n        }\n    }\n}\n```\n\n### Without Plesk Server (Demo Mode)\n\nAlternatively, run in demo mode from sources (with mocked responses):\n\n```json\n{\n    \"servers\": {\n        \"plesk\": {\n            \"command\": \"uv\",\n            \"args\": [\n                \"run\",\n                \"plesk-mcp\"\n            ],\n            \"env\": {\n                \"PLESK_HOST\": \"https://linux.demo.example.net\",\n                \"PLESK_API_KEY\": \"-\"\n            }\n        }\n    }\n}\n```\n\n### Automated tests\n\nUnit tests run with `uv run pytest` (in the project root and in each sub-project). Smoke tests that exercise real services are skipped by default and selected via `-m smoke`:\n\n```bash\n# Plesk MCP smoke tests (against a reachable Plesk instance, e.g. from the Docker image described above)\nPLESK_HOST=https://localhost:8443 PLESK_PASSWORD='changeme1Q**' PLESK_INSECURE=1 \\\n    uv run pytest -m smoke\n```\n",
  "bytes": 5905,
  "sha": "ff0e048bff7182c20a0afbcc50bf34276e374848635c5c3d2b4a33e17facfc90",
  "repo_slug": "flayedone/plesk-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_flayedone_plesk_mcp_f4ca0ee2/readme"
}