Skip to main content
Glama

aeza-mcp

MCP server for the Aeza API: servers, backups, networks, DNS, billing and support as tools for an AI agent, one tool per API operation.

The tools are not baked in. On startup the server reads the API's OpenAPI spec and builds them from it, so it follows the API without a new release.

Setup

The server speaks MCP over stdio and needs Node 20 or newer:

claude mcp add aeza -e AEZA_API_KEY=<key> -- npx -y aeza-mcp

For clients configured with JSON:

{
  "mcpServers": {
    "aeza": {
      "command": "npx",
      "args": ["-y", "aeza-mcp"],
      "env": { "AEZA_API_KEY": "<key>", "AEZA_READ_ONLY": "1" }
    }
  }
}

With Bun, bunx aeza-mcp does the same without Node.

Related MCP server: Plesk MCP Server

Configuration

Variable

Default

AEZA_API_KEY

API key of the account. Without it only public endpoints work

AEZA_TOOLSETS

everything but internal and other

Comma-separated toolsets to expose, or all

AEZA_READ_ONLY

off

1 exposes only tools that change nothing

AEZA_ALLOW_DELETE

off

1 exposes tools that delete or overwrite data: deleting servers, domains and DNS records, backups, API keys or the account itself; reinstalling a server; restoring a backup. Ignored with AEZA_READ_ONLY

AEZA_MAX_OUTPUT_CHARS

40000

Longer results are cut, lists at an item boundary with a note on how many items are missing

AEZA_BASE_URL

https://my.aeza.ru/api/v2

How the spec is kept current

The spec is cached in ~/.cache/aeza-mcp (or $XDG_CACHE_HOME/aeza-mcp). Each start makes one small request, GET /version, and compares it with the cached spec's version; the 160 KB spec itself is downloaded only when they differ. A start takes about a second the first time and half a second after that.

  • When the API cannot be reached, the cached spec is used. With no cache either, the server exits with an error.

  • When the spec changes, the tools change with it, and the server says so on stderr (API spec updated: 60644150 -> …). Nobody reviews that change, so a new endpoint is callable as soon as Aeza documents it.

  • Sections of the API this server has not seen before go to the other toolset, which is off by default, so a new kind of tool appears only when you opt in.

  • An operation the server cannot make sense of is skipped with a line on stderr; the rest keep working.

Toolsets

Counts are for the spec as of November 2026.

Toolset

Tools

Read-only

Deleting

Covers

services

53

20

7

Servers: power, reinstall, rescue, stats, prolongation, backups, IPs and PTR, SSH keys, extra resources

catalog

8

7

0

Products, groups and types; price calculation and ordering

domains

15

8

2

Domains and DNS records, availability and delegation checks

billing

18

11

2

Transactions, invoices, payment methods, recurrent payments, withdrawals

account

28

8

5

Profile, API keys, sessions, SSO links, companies, notifications

support

19

9

0

Tickets, messages, ratings, file uploads

promo

16

9

0

Referral program, gifts, bonuses, gift codes

system

8

7

0

Health, version, error catalog, alerts

internal

19

7

1

Plumbing of the web panel (login flows, websocket tokens, web push, consents); off by default

other

0

0

0

API sections added after this list was written; off by default

Deleting tools are the API's DELETE operations plus reinstalling a server and restoring a backup, which wipe its disk just as surely; they are left out unless AEZA_ALLOW_DELETE=1. The default set is 149 tools, about 66 KB of tool definitions. Clients that load every definition into the model's context up front do better with a narrower AEZA_TOOLSETS, for example services,catalog,domains (67 tools, 33 KB).

Tools

A tool is named after its API section and operation: services_get_list, domains_create_record, service_backups_restore. Path and query parameters are top-level arguments, the request body goes under body:

{ "name": "domains_create_record", "arguments": { "domainId": 1, "body": { "type": "A", "name": "www", "content": "192.0.2.1" } } }

Arguments are validated against the spec before anything is sent. API errors come back as tool errors with the API's status, error code and details. Rate-limited requests (the API allows 10 per second) are retried.

Tools that are not read-only act on the real account: orders and prolongations spend its balance, deleting or reinstalling a server destroys its data. They are annotated as destructive so clients can ask for confirmation; AEZA_READ_ONLY=1 removes them entirely. Deleting tools, reinstalling a server and restoring a backup are not exposed at all until you opt in with AEZA_ALLOW_DELETE=1; without it the model is told they are disabled and how to enable them.

Development

bun install
bun start           # run the server from source
bun run typecheck
bun test
bun publish         # typechecks, tests and builds dist/ first

File

src/spec.ts

Downloads and caches the spec

src/operations.ts

Turns the spec into tool definitions: names, toolsets, JSON Schemas, and fixes for what the spec gets wrong

src/api.ts

HTTP calls: API key, serialization, errors, retries

src/server.ts

The MCP server

test/openapi.json

Snapshot of the real spec that the tests run against

Created in T3 Code.

Available Tools

149 tools
account_payment_methods_createC
Destructive

Create account payment method POST /account/payment-methods

Inputs: body (required).

account_payment_methods_get_by_idC
Read-onlyIdempotent

Get account payment method by id GET /account/payment-methods/{id}

Inputs: id (required).

account_payment_methods_get_listC
Read-onlyIdempotent

Get account payment methods GET /account/payment-methods

Inputs: sort, limit, filter, offset.

accounts_change_passwordC
DestructiveIdempotent

Change password PUT /accounts/me/password

Inputs: body (required).

accounts_change_phoneC
DestructiveIdempotent

Initiate phone change PUT /accounts/me/phone

Inputs: body (required).

accounts_confirm_phoneC
Destructive

Confirm change phone POST /accounts/me/phone/confirm

Inputs: body (required).

accounts_get_account_infoC
Read-onlyIdempotent

Get account info GET /accounts/me

Inputs: no named parameters.

accounts_patch_account_meA
Destructive

Partially update current account (interface lang/theme, profile; legal only if billing region is RU). Currency is not changed here. PATCH /accounts/me

Inputs: body (required).

accounts_security_confirmations_requestB
Destructive

Send an email code to confirm a security setting change POST /accounts/me/security-confirmations

Inputs: body (required).

accounts_security_confirmations_verifyC
Destructive

Verify an email code without consuming it POST /accounts/me/security-confirmations/verify

Inputs: body (required).

api_keys_createC
Destructive

Create a new API key POST /api-keys

Inputs: body (required).

api_keys_editC
Destructive

Edit your existing api key data PATCH /api-keys/{id}

Inputs: id (required), body (required).

api_keys_get_listB
Read-onlyIdempotent

Get all API keys GET /api-keys

Inputs: no named parameters.

billing_invoices_createD
Destructive

Billing invoices create POST /billing/invoices

Inputs: body (required).

billing_invoices_get_invoiceC
Read-onlyIdempotent

Billing invoices get invoice GET /billing/invoices/{id}

Inputs: id (required).

billing_payment_methods_get_exchange_ratesC
Read-onlyIdempotent

Billing payment methods get exchange rates GET /billing/payment-methods/{method}/exchange-rates

Inputs: method (required).

billing_payment_methods_get_listB
Read-onlyIdempotent

Get available payment methods Returns list of payment methods available for the authenticated user based on their region and account type GET /billing/payment-methods

Inputs: no named parameters.

billing_transactions_get_listC
Read-onlyIdempotent

Get transaction list GET /billing/transactions

Inputs: sort, limit, filter, offset.

billing_transactions_get_oneC
Read-onlyIdempotent

Get transaction by id GET /billing/transactions/{id}

Inputs: id (required).

bonuses_activateD
Destructive

Bonuses activate POST /bonuses/{id}/activate

Inputs: id (required).

bonuses_activate_bonus_caseD
Destructive

Bonuses activate bonus case POST /bonuses/bonus-case/{id}/activate

Inputs: id (required).

bonuses_get_listC
Read-onlyIdempotent

Get bonuses list GET /bonuses

Inputs: no named parameters.

companies_createD
Destructive

Create company POST /companies

Inputs: body (required).

companies_get_company_invoicesD
Read-onlyIdempotent

Own company invoices GET /companies/{id}/invoices

Inputs: id (required), sort, limit, filter, +1 more.

companies_get_own_companyB
Read-onlyIdempotent

Own company (attached to account) GET /companies/own

Inputs: no named parameters.

companies_request_kybC
Destructive

Request KYB POST /companies/{id}/kyb/request

Inputs: id (required).

companies_request_resellerC
Destructive

Request reseller status for company POST /companies/{id}/reseller/request

Inputs: id (required).

companies_update_companyD
Destructive

Update company PATCH /companies/{id}

Inputs: id (required), body (required).

domains_check_domain_availableC
Read-onlyIdempotent

Check domain availability POST /domains/check

Inputs: body (required).

domains_check_domain_delegationB
Read-onlyIdempotent

Checks whether the given domain belongs to the caller, is registered in billing, and is fully delegated to our nameservers. POST /domains/check-delegation

Inputs: body (required).

domains_createD
Destructive

Domains create POST /domains

Inputs: body (required).

domains_create_recordD
Destructive

Domains create record POST /domains/{domainId}/records

Inputs: body (required), domainId (required).

domains_edit_recordD
Destructive

Domains edit record PATCH /domains/{domainId}/records/{recordId}

Inputs: body (required), domainId (required), recordId (required).

domains_getC
Read-onlyIdempotent

Domains get GET /domains/{id}

Inputs: id (required).

domains_get_expected_nameserversB
Read-onlyIdempotent

Get expected nameservers for domain delegation GET /domains/nameservers

Inputs: no named parameters.

domains_get_listD
Read-onlyIdempotent

Domains get list GET /domains

Inputs: sort, limit, filter, offset.

domains_get_recordC
Read-onlyIdempotent

Domains get record GET /domains/{domainId}/records/{recordId}

Inputs: domainId (required), recordId (required).

domains_get_records_listC
Read-onlyIdempotent

Domains get records list GET /domains/{domainId}/records

Inputs: domainId (required), sort, limit, filter, +1 more.

domains_get_record_typesA
Read-onlyIdempotent

Get supported DNS record types and validation filters GET /domains/record-types

Inputs: no named parameters.

domains_schedule_ns_checkD
Destructive

Domains schedule ns check POST /domains/{id}/schedule-ns-check

Inputs: id (required).

domains_verifyB
Destructive

Confirms ownership of a pending_verification zone by matching the _verify TXT record against its authoritative nameservers. POST /domains/{id}/verify

Inputs: id (required).

feature_flags_get_all_feature_flagsB
Read-onlyIdempotent

Get all user feature flags GET /feature-flags

Inputs: no named parameters.

files_saveD
Destructive

Save uploaded file POST /files/save

Inputs: body (required).

gifts_buy_giftD
Destructive

Gifts buy gift POST /gifts

Inputs: body (required).

gifts_editD
DestructiveIdempotent

Edit gift PUT /gifts/{id}

Inputs: id (required), body (required).

gifts_get_by_codeC
Read-onlyIdempotent

Gifts get by code GET /gifts/by-code/{code}

Inputs: code (required).

gifts_get_gift_stylesC
Read-onlyIdempotent

Get gift styles GET /gifts/styles

Inputs: no named parameters.

gifts_get_owned_giftsC
Read-onlyIdempotent

Gifts get owned gifts GET /gifts

Inputs: no named parameters.

gifts_regenD
Destructive

Gifts regen POST /gifts/{id}/regen

Inputs: id (required).

gifts_use_codeC
Destructive

Gifts use code POST /gifts/by-code/{code}/use

Inputs: code (required).

leakcheck_leack_checkC
Read-onlyIdempotent

Leakcheck leack check GET /leakcheck/aeza

Inputs: no named parameters.

notifications_get_listC
Read-onlyIdempotent

Get list of user notifications GET /notifications

Inputs: sort, limit, filter, offset.

notifications_get_oneB
Read-onlyIdempotent

Get notification by ID GET /notifications/{id}

Inputs: id (required).

notifications_mark_all_as_readA
Destructive

Mark all notifications as read POST /notifications/read

Inputs: no named parameters.

notifications_mark_as_readC
Destructive

Mark notification as read POST /notifications/{id}/read

Inputs: id (required).

other_get_errorsC
Read-onlyIdempotent

Other get errors GET /errors

Inputs: no named parameters.

other_get_healthC
Read-onlyIdempotent

Other get health GET /health

Inputs: no named parameters.

other_get_infoC
Read-onlyIdempotent

Other get info GET /info

Inputs: no named parameters.

other_get_versionC
Read-onlyIdempotent

Other get version GET /version

Inputs: no named parameters.

other_unsubscribe_mail_challengeC
Destructive

Unsubscribe from unwanted mailings. POST /unsubscribe

Inputs: body (required).

promo_giftcodes_useC
Destructive

Use giftcode POST /promo/giftcodes/{code}/use

Inputs: code (required).

recurrent_payments_create_recurrent_payment_configD
Destructive

Recurrent payments create recurrent payment config POST /billing/recurrent-payments/configure

Inputs: body (required).

recurrent_payments_get_current_recurrent_payment_configC
Read-onlyIdempotent

Recurrent payments get current recurrent payment config GET /billing/recurrent-payments/config

Inputs: no named parameters.

recurrent_payments_update_recurrent_payment_configC
Destructive

Recurrent payments update recurrent payment config PATCH /billing/recurrent-payments/config

Inputs: body (required).

referral_programs_get_daily_statsA
Read-onlyIdempotent

Get rolling earned stats of all the account referral programs (one point per day) GET /referral-programs/daily-stats

Inputs: no named parameters.

referral_programs_get_defaultB
Read-onlyIdempotent

Get default referral program GET /referral-programs

Inputs: no named parameters.

referral_programs_get_historyC
Read-onlyIdempotent

Get referral program operations history GET /referral-programs/history

Inputs: sort, limit, filter, offset.

referral_programs_get_tiersC
Read-onlyIdempotent

Get referral tiers GET /referral-programs/tiers

Inputs: no named parameters.

referral_programs_get_topC
Read-onlyIdempotent

Get top referral programs GET /referral-programs/top

Inputs: no named parameters.

service_backups_createC
Destructive

Create backup POST /services/{serviceId}/backups

Inputs: body (required), serviceId (required).

service_backups_disable_backupsC
Destructive

Disable backups POST /services/{serviceId}/backups/disable

Inputs: serviceId (required).

service_backups_enable_backupsC
Destructive

Enable backups POST /services/{serviceId}/backups/enable

Inputs: body (required), serviceId (required).

service_backups_get_backups_priceC
Read-onlyIdempotent

Get backups price GET /services/{serviceId}/backups/price

Inputs: serviceId (required).

service_backups_get_listC
Read-onlyIdempotent

Get backups GET /services/{serviceId}/backups

Inputs: serviceId (required), sort, limit, filter, +1 more.

service_backups_set_scheduleC
Destructive

Set schedule for service POST /services/{serviceId}/backups/schedule

Inputs: body (required), serviceId (required).

service_product_groups_get_listC
Read-onlyIdempotent

Get service product groups list GET /services/groups

Inputs: type.

service_products_get_listC
Read-onlyIdempotent

Get service products list GET /services/products

Inputs: type, group.

service_products_get_pm_commands_schema_clientC
Read-onlyIdempotent

Get PM module commands schema (client view) Returns a list of commands supported by the specified PM module GET /services/products/commands-schema

Inputs: pm (required).

service_products_get_pm_parameters_schema_clientB
Read-onlyIdempotent

Get PM module parameters schema (client view) Returns a list of product-determining parameters of the specified PM module GET /services/products/parameters-schema

Inputs: pm (required).

services_change_passwordC
Destructive

Change service password POST /services/{id}/change-password

Inputs: id (required), body (required).

services_change_productB
Destructive

Pay and switch service to another product in the same group POST /services/{id}/change-product

Inputs: id (required), body (required).

services_connect_remote_vncC
Destructive

Create vnc connection POST /services/{id}/remote/vnc

Inputs: id (required).

services_editC
Destructive

Edit your service data PATCH /services/{id}

Inputs: id (required), body (required).

services_enter_rescue_modeC
Destructive

Enter to rescue mode POST /services/{id}/rescue

Inputs: id (required).

services_get_by_idC
Read-onlyIdempotent

Get service by id GET /services/{id}

Inputs: id (required).

services_get_change_product_priceA
Read-onlyIdempotent

Get prorated price for switching service to another product in the same group GET /services/{id}/change-product

Inputs: id (required), productId (required).

services_get_computed_parametersC
Read-onlyIdempotent

Get service computed parameters GET /services/{id}/computed-parameters

Inputs: id (required).

services_get_expiringA
Read-onlyIdempotent

Get services that are about to expire GET /services/expiring

Inputs: no named parameters.

services_get_listC
Read-onlyIdempotent

Get services list GET /services

Inputs: sort, limit, filter, offset.

services_get_priceC
Read-onlyIdempotent

Get service price breakdown GET /services/{id}/price

Inputs: id (required).

services_get_pricesB
Read-onlyIdempotent

Get computed total price for each payment term from product rawPrices GET /services/{id}/prices

Inputs: id (required).

services_get_statsC
Read-onlyIdempotent

Get service usage stats GET /services/{id}/stats/{statType}

Inputs: id (required), toDate (required), fromDate (required), statType (required), +1 more.

services_gotoC
Destructive

Get goto link for service POST /services/{id}/goto

Inputs: id (required).

services_leave_rescue_modeC
Destructive

Leave rescue mode POST /services/{id}/rescue/leave

Inputs: id (required).

services_limits_get_listC
Read-onlyIdempotent

Services limits get list GET /services/limits

Inputs: no named parameters.

services_migrateC
Destructive

Migrate service to new product from legacy product POST /services/{id}/migrate

Inputs: id (required).

services_networks_buy_ipv4C
Destructive

Buy IPv4 address for service POST /services/{serviceId}/networks/ipv4

Inputs: body (required), serviceId (required).

services_networks_change_ipv4B
Destructive

Change (replace) IPv4 address for a one-time payment POST /services/{serviceId}/networks/ipv4/{externalId}/change

Inputs: body (required), serviceId (required), externalId (required).

services_networks_edit_ptrC
Destructive

Edit PTR record POST /services/{serviceId}/networks/ipv4/{externalId}/edit-ptr

Inputs: body (required), serviceId (required), externalId (required).

services_networks_ipv4_get_listD
Read-onlyIdempotent

Services networks ipv4 get list GET /services/{serviceId}/networks/ipv4

Inputs: serviceId (required).

services_networks_ipv4_get_priceC
Read-onlyIdempotent

Services networks ipv4 get price GET /services/{serviceId}/networks/ipv4/price

Inputs: serviceId (required).

services_networks_ipv6_get_listC
Read-onlyIdempotent

Services networks ipv6 get list GET /services/{serviceId}/networks/ipv6

Inputs: serviceId (required).

services_networks_make_mainC
Destructive

Make netork as main POST /services/{serviceId}/networks/ipv4/{externalId}/make-main

Inputs: serviceId (required), externalId (required).

services_operating_systems_get_listD
Read-onlyIdempotent

Services operating systems get list GET /services/operating-systems

Inputs: sort, limit, filter, offset.

services_operating_systems_get_recipes_listC
Read-onlyIdempotent

Services operating systems get recipes list GET /services/operating-systems/recipes

Inputs: no named parameters.

services_orders_create_orderC
Destructive

Create service order POST /services/orders

Inputs: body (required).

services_orders_get_priceC
Read-onlyIdempotent

Get price for product with parameters GET /services/orders/price

Inputs: productId (required), termCount, paymentTerm, isBackupsEnabled, +1 more.

services_prolongC
Destructive

Prolong service POST /services/{id}/prolong

Inputs: id (required), body (required).

services_prolong_manyC
Destructive

Prolong multiple services POST /services/prolong/bulk

Inputs: body (required).

services_resources_add_additional_resourcesC
Destructive

Add additional resources to service POST /services/{id}/additional-resources

Inputs: id (required), body (required).

services_resources_get_additional_resources_priceC
Read-onlyIdempotent

Get additional resources price POST /services/{id}/additional-resources/get-price

Inputs: id (required), body (required).

services_resources_get_resourcesC
Read-onlyIdempotent

Get service resources information GET /services/{id}/resources

Inputs: id (required).

services_restartC
Destructive

Restart service POST /services/{id}/ctl/restart

Inputs: id (required), body (required).

services_resumeB
Destructive

Resume service POST /services/{id}/ctl/resume

Inputs: id (required).

services_send_commandC
Destructive

Send command to service pm with service POST /services/{id}/command/{command}

Inputs: id (required), body (required), command (required).

services_send_serviceless_commandC
Destructive

Send command to service pm POST /services/command/{command}

Inputs: pm (required), body (required), command (required).

services_ssh_keys_createC
Destructive

Create SSH key POST /services/ssh-keys

Inputs: body (required).

services_ssh_keys_editC
Destructive

Edit SSH key PATCH /services/ssh-keys/{sshKeyId}

Inputs: body (required), sshKeyId (required).

services_ssh_keys_getB
Read-onlyIdempotent

Get SSH key by id GET /services/ssh-keys/{sshKeyId}

Inputs: sshKeyId (required).

services_ssh_keys_get_listC
Read-onlyIdempotent

Get SSH keys list GET /services/ssh-keys

Inputs: sort, limit, filter, offset.

services_suspendC
Destructive

Suspend service POST /services/{id}/ctl/suspend

Inputs: id (required), body (required).

service_types_get_listC
Read-onlyIdempotent

Get service product types list GET /services/types

Inputs: limit, offset.

sessions_get_activeB
Read-onlyIdempotent

Get active sessions GET /sessions

Inputs: no named parameters.

sso_get_listC
Read-onlyIdempotent

Get sso links GET /sso

Inputs: no named parameters.

support_archiveC
Destructive

Mark ticket as solved POST /support/tickets/{id}/archive

Inputs: id (required).

support_categories_client_categoriesA
Read-onlyIdempotent

Active support categories for ticket creation form GET /support/categories

Inputs: no named parameters.

support_createC
Destructive

Create ticket POST /support/tickets

Inputs: body (required).

support_get_average_response_timeA
Read-onlyIdempotent

Get average support first response time (sec) over last 7 days GET /support/average-response-time

Inputs: no named parameters.

support_get_listB
Read-onlyIdempotent

Get ticket list GET /support/tickets

Inputs: no named parameters.

support_get_messagesC
Read-onlyIdempotent

Get ticket messages GET /support/tickets/{id}/messages

Inputs: id (required).

support_get_oneC
Read-onlyIdempotent

Get ticket info GET /support/tickets/{id}

Inputs: id (required).

support_get_opened_ticket_countC
Read-onlyIdempotent

Get opened ticket count GET /support/tickets/count

Inputs: no named parameters.

support_gpt_send_messageC
Destructive

Send message to gpt POST /support/gpt

Inputs: body (required).

support_rates_getC
Read-onlyIdempotent

Get ticket rate info GET /support/tickets/{id}/rate

Inputs: id (required).

support_rates_get_cloud_tipsC
Read-onlyIdempotent

Get CloudTips recipients for a ticket GET /support/tickets/{id}/rate/tips/cloudtips

Inputs: id (required).

support_rates_get_tipsC
Read-onlyIdempotent

Get ticket tips GET /support/tickets/{id}/rate/tips

Inputs: id (required).

support_rates_rateC
Destructive

Rate ticket POST /support/tickets/{id}/rate

Inputs: id (required), body (required).

support_rates_tipC
Destructive

Tip ticket POST /support/tickets/{id}/rate/tips

Inputs: id (required), body (required).

support_readC
Destructive

Mark ticket as read POST /support/tickets/{id}/read

Inputs: id (required).

support_send_messageC
Destructive

Send message to ticket POST /support/tickets/{id}/messages

Inputs: id (required), body (required).

support_set_reactionC
Destructive

Set reaction to support message PATCH /support/tickets/{id}/messages/{messageId}/reaction

Inputs: id (required), body (required), messageId (required).

system_get_listC
Read-onlyIdempotent

Get active system alerts by slots GET /system/alerts

Inputs: slots (required).

withdraws_get_limitsB
Read-onlyIdempotent

Get withdraw limits GET /withdraws/limits

Inputs: no named parameters.

withdraws_get_listC
Read-onlyIdempotent

Get withdraws GET /withdraws

Inputs: limit, offset.

withdraws_get_methodsB
Read-onlyIdempotent

Get withdraw methods GET /withdraws/methods

Inputs: no named parameters.

withdraws_initC
Destructive

Init new withdraw POST /withdraws

Inputs: body (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables AI assistants to manage Coolify infrastructure including servers, applications, databases, deployments, and 80+ one-click services through 98 comprehensive tools for both cloud and self-hosted instances.
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables AI agents to manage Plesk hosting environments through a set of standardized tools for security, health monitoring, DNS, email, backups, and service management.
      MIT