{
    "openapi": "3.1.0",
    "info": {
        "title": "JetHost MCP API",
        "version": "0.1.0",
        "x-generated-at": "2026-07-08",
        "description": "Machine-readable catalog of the JetHost MCP tools. The live transport is JSON-RPC 2.0 `tools/call` over streamable HTTP at https://mcp.jethost.bg/mcp; the per-tool paths below document each tool's arguments and result schema. The cpanel_uapi tool additionally fronts a large cPanel catalog — see llms-full.txt."
    },
    "servers": [
        {
            "url": "https://mcp.jethost.bg/mcp"
        }
    ],
    "x-oauth-metadata": {
        "issuer": "https://jethost.bg/app",
        "protected_resource_metadata": "https://mcp.jethost.bg/.well-known/oauth-protected-resource",
        "authorization_server_metadata": "https://mcp.jethost.bg/.well-known/oauth-authorization-server",
        "registration_endpoint": "https://jethost.bg/app/index.php?m=jethost_mcp_oauth&action=register",
        "authorization_endpoint": "https://jethost.bg/app/index.php?m=jethost_mcp_oauth&action=authorize",
        "token_endpoint": "https://jethost.bg/app/index.php?m=jethost_mcp_oauth&action=token",
        "jwks_uri": "https://jethost.bg/app/index.php?m=jethost_mcp_oauth&action=jwks",
        "revocation_endpoint": "https://jethost.bg/app/index.php?m=jethost_mcp_oauth&action=revoke",
        "response_types_supported": [
            "code"
        ],
        "grant_types_supported": [
            "authorization_code",
            "refresh_token"
        ],
        "code_challenge_methods_supported": [
            "S256"
        ],
        "token_endpoint_auth_methods_supported": [
            "none"
        ]
    },
    "components": {
        "securitySchemes": {
            "oauth2": {
                "type": "oauth2",
                "flows": {
                    "authorizationCode": {
                        "authorizationUrl": "https://jethost.bg/app/index.php?m=jethost_mcp_oauth&action=authorize",
                        "tokenUrl": "https://jethost.bg/app/index.php?m=jethost_mcp_oauth&action=token",
                        "scopes": {
                            "cpanel:uapi": "Manage your hosting account via cPanel — read and change settings on the cPanel features JetHost has enabled (this can modify your account)",
                            "read:analytics": "Read your websites' traffic statistics and visitor analytics",
                            "read:deploy": "View the deployment status and history of your websites",
                            "read:domain_catalog": "Check domain availability and get EUR pricing from JetHost's catalog",
                            "read:domains": "View your registered domains and their details",
                            "read:invoices": "View your invoices and billing history",
                            "read:logs": "Read your websites' access logs and PHP error logs",
                            "read:product_catalog": "View JetHost's hosting plans with EUR pricing",
                            "read:services": "View your hosting services",
                            "read:tickets": "View your support tickets and conversation history",
                            "read:websites": "View the domains and document roots hosted on your hosting accounts",
                            "write:deploy": "Deploy websites from a git repository — a public URL or a private SSH repo — to your hosting (overwrites the target site)"
                        }
                    }
                }
            }
        }
    },
    "paths": {
        "/tools/list_services": {
            "post": {
                "operationId": "list_services",
                "tags": [
                    "Services"
                ],
                "summary": "List the caller's active and suspended hosting services.",
                "description": "List the caller's active and suspended hosting services. Dates are ISO YYYY-MM-DD — present them to the user in Bulgarian format DD.MM.YYYYг (e.g. 15.06.2026г).",
                "security": [
                    {
                        "oauth2": [
                            "read:services"
                        ]
                    }
                ],
                "x-mcp-tool": "list_services",
                "x-mcp-annotations": {
                    "readOnly": true,
                    "destructive": false,
                    "idempotent": true,
                    "openWorld": false
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {}
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Tool result",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "services": {
                                            "type": "array",
                                            "items": {
                                                "type": "object",
                                                "properties": {
                                                    "id": {
                                                        "type": "integer"
                                                    },
                                                    "domain": {
                                                        "type": "string"
                                                    },
                                                    "product": {
                                                        "type": "string"
                                                    },
                                                    "status": {
                                                        "type": "string",
                                                        "enum": [
                                                            "Active",
                                                            "Suspended",
                                                            "Terminated",
                                                            "Pending",
                                                            "Cancelled",
                                                            "Fraud",
                                                            "Completed"
                                                        ]
                                                    },
                                                    "next_due_date": {
                                                        "type": [
                                                            "string",
                                                            "null"
                                                        ]
                                                    },
                                                    "recurring_amount": {
                                                        "type": "object",
                                                        "properties": {
                                                            "value": {
                                                                "type": "string"
                                                            },
                                                            "currency": {
                                                                "type": "string"
                                                            }
                                                        },
                                                        "required": [
                                                            "value",
                                                            "currency"
                                                        ]
                                                    },
                                                    "first_payment_amount": {
                                                        "type": "object",
                                                        "properties": {
                                                            "value": {
                                                                "type": "string"
                                                            },
                                                            "currency": {
                                                                "type": "string"
                                                            }
                                                        },
                                                        "required": [
                                                            "value",
                                                            "currency"
                                                        ]
                                                    }
                                                },
                                                "required": [
                                                    "id",
                                                    "domain",
                                                    "product",
                                                    "status",
                                                    "next_due_date",
                                                    "recurring_amount",
                                                    "first_payment_amount"
                                                ]
                                            }
                                        }
                                    },
                                    "required": [
                                        "services"
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        },
        "/tools/get_service": {
            "post": {
                "operationId": "get_service",
                "tags": [
                    "Services"
                ],
                "summary": "Get a single hosting service by ID, including status, billing cycle, disk/bandwidth usage, server, and default nameservers.",
                "description": "Get a single hosting service by ID, including status, billing cycle, disk/bandwidth usage, server, and default nameservers. Dates (registration_date, next_due_date) are ISO YYYY-MM-DD — present them to the user in Bulgarian format DD.MM.YYYYг (e.g. 15.06.2026г).",
                "security": [
                    {
                        "oauth2": [
                            "read:services"
                        ]
                    }
                ],
                "x-mcp-tool": "get_service",
                "x-mcp-annotations": {
                    "readOnly": true,
                    "destructive": false,
                    "idempotent": true,
                    "openWorld": false
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "id": {
                                        "type": "integer"
                                    }
                                },
                                "required": [
                                    "id"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Tool result",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "service": {
                                            "type": "object",
                                            "properties": {
                                                "id": {
                                                    "type": "integer"
                                                },
                                                "domain": {
                                                    "type": "string"
                                                },
                                                "product": {
                                                    "type": "string"
                                                },
                                                "status": {
                                                    "type": "string",
                                                    "enum": [
                                                        "Active",
                                                        "Suspended",
                                                        "Terminated",
                                                        "Pending",
                                                        "Cancelled",
                                                        "Fraud",
                                                        "Completed"
                                                    ]
                                                },
                                                "registration_date": {
                                                    "type": [
                                                        "string",
                                                        "null"
                                                    ]
                                                },
                                                "next_due_date": {
                                                    "type": [
                                                        "string",
                                                        "null"
                                                    ]
                                                },
                                                "billing_cycle": {
                                                    "type": "string"
                                                },
                                                "recurring_amount": {
                                                    "type": "object",
                                                    "properties": {
                                                        "value": {
                                                            "type": "string"
                                                        },
                                                        "currency": {
                                                            "type": "string"
                                                        }
                                                    },
                                                    "required": [
                                                        "value",
                                                        "currency"
                                                    ]
                                                },
                                                "first_payment_amount": {
                                                    "type": "object",
                                                    "properties": {
                                                        "value": {
                                                            "type": "string"
                                                        },
                                                        "currency": {
                                                            "type": "string"
                                                        }
                                                    },
                                                    "required": [
                                                        "value",
                                                        "currency"
                                                    ]
                                                },
                                                "disk_usage_mb": {
                                                    "type": "integer"
                                                },
                                                "disk_limit_mb": {
                                                    "type": [
                                                        "integer",
                                                        "null"
                                                    ]
                                                },
                                                "bandwidth_usage_mb": {
                                                    "type": "integer"
                                                },
                                                "bandwidth_limit_mb": {
                                                    "type": [
                                                        "integer",
                                                        "null"
                                                    ]
                                                },
                                                "suspension_reason": {
                                                    "type": [
                                                        "string",
                                                        "null"
                                                    ]
                                                },
                                                "server_name": {
                                                    "type": [
                                                        "string",
                                                        "null"
                                                    ]
                                                },
                                                "dedicated_ip": {
                                                    "type": [
                                                        "string",
                                                        "null"
                                                    ]
                                                },
                                                "nameservers": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string"
                                                    }
                                                }
                                            },
                                            "required": [
                                                "id",
                                                "domain",
                                                "product",
                                                "status",
                                                "registration_date",
                                                "next_due_date",
                                                "billing_cycle",
                                                "recurring_amount",
                                                "first_payment_amount",
                                                "disk_usage_mb",
                                                "disk_limit_mb",
                                                "bandwidth_usage_mb",
                                                "bandwidth_limit_mb",
                                                "suspension_reason",
                                                "server_name",
                                                "dedicated_ip",
                                                "nameservers"
                                            ]
                                        },
                                        "error": {
                                            "type": "string"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/tools/get_service_usage": {
            "post": {
                "operationId": "get_service_usage",
                "tags": [
                    "Services"
                ],
                "summary": "Get CPU usage for one of the caller's hosting services by ID: current, today, and month-to-date CPU-minutes (UTC). Pass month=YYYY-MM to also get a per-day series.",
                "description": "Get CPU usage for one of the caller's hosting services by ID: current, today, and month-to-date CPU-minutes (UTC). Pass month=YYYY-MM to also get a per-day series. Data may be up to ~60s stale.",
                "security": [
                    {
                        "oauth2": [
                            "read:services"
                        ]
                    }
                ],
                "x-mcp-tool": "get_service_usage",
                "x-mcp-annotations": {
                    "readOnly": true,
                    "destructive": false,
                    "idempotent": true,
                    "openWorld": false
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "service_id": {
                                        "type": "integer",
                                        "description": "The hosting service ID."
                                    },
                                    "month": {
                                        "type": [
                                            "null",
                                            "string"
                                        ],
                                        "description": "Optional 'YYYY-MM' to include a per-day CPU series.",
                                        "default": null
                                    }
                                },
                                "required": [
                                    "service_id"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Tool result",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "usage": {
                                            "type": "object",
                                            "properties": {
                                                "service_id": {
                                                    "type": "integer"
                                                },
                                                "has_data": {
                                                    "type": "boolean"
                                                },
                                                "as_of_utc": {
                                                    "type": [
                                                        "string",
                                                        "null"
                                                    ]
                                                },
                                                "cpu_minutes_current": {
                                                    "type": [
                                                        "number",
                                                        "null"
                                                    ]
                                                },
                                                "cpu_minutes_today": {
                                                    "type": [
                                                        "number",
                                                        "null"
                                                    ]
                                                },
                                                "cpu_minutes_month": {
                                                    "type": [
                                                        "number",
                                                        "null"
                                                    ]
                                                },
                                                "month": {
                                                    "type": "string"
                                                },
                                                "series": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "object",
                                                        "properties": {
                                                            "day": {
                                                                "type": "integer"
                                                            },
                                                            "minutes": {
                                                                "type": "number"
                                                            }
                                                        },
                                                        "required": [
                                                            "day",
                                                            "minutes"
                                                        ]
                                                    }
                                                }
                                            },
                                            "required": [
                                                "service_id",
                                                "has_data",
                                                "as_of_utc",
                                                "cpu_minutes_current",
                                                "cpu_minutes_today",
                                                "cpu_minutes_month"
                                            ]
                                        },
                                        "error": {
                                            "type": "string"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/tools/list_invoices": {
            "post": {
                "operationId": "list_invoices",
                "tags": [
                    "Invoices"
                ],
                "summary": "List the caller's invoices.",
                "description": "List the caller's invoices, optionally filtered by status (Unpaid, Paid, Cancelled, Refunded, Collections, Draft, Payment Pending, Overdue). Dates (date, due_date) are ISO YYYY-MM-DD — present them to the user in Bulgarian format DD.MM.YYYYг (e.g. 15.06.2026г).",
                "security": [
                    {
                        "oauth2": [
                            "read:invoices"
                        ]
                    }
                ],
                "x-mcp-tool": "list_invoices",
                "x-mcp-annotations": {
                    "readOnly": true,
                    "destructive": false,
                    "idempotent": true,
                    "openWorld": false
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "status": {
                                        "type": "string",
                                        "default": ""
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Tool result",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "invoices": {
                                            "type": "array",
                                            "items": {
                                                "type": "object",
                                                "properties": {
                                                    "id": {
                                                        "type": "integer"
                                                    },
                                                    "invoice_number": {
                                                        "type": "string"
                                                    },
                                                    "status": {
                                                        "type": "string",
                                                        "enum": [
                                                            "Unpaid",
                                                            "Paid",
                                                            "Cancelled",
                                                            "Refunded",
                                                            "Collections",
                                                            "Draft",
                                                            "Payment Pending",
                                                            "Overdue"
                                                        ]
                                                    },
                                                    "total": {
                                                        "type": "object",
                                                        "properties": {
                                                            "value": {
                                                                "type": "string"
                                                            },
                                                            "currency": {
                                                                "type": "string"
                                                            }
                                                        },
                                                        "required": [
                                                            "value",
                                                            "currency"
                                                        ]
                                                    },
                                                    "due_date": {
                                                        "type": [
                                                            "string",
                                                            "null"
                                                        ]
                                                    },
                                                    "date": {
                                                        "type": [
                                                            "string",
                                                            "null"
                                                        ]
                                                    }
                                                },
                                                "required": [
                                                    "id",
                                                    "invoice_number",
                                                    "status",
                                                    "total",
                                                    "due_date",
                                                    "date"
                                                ]
                                            }
                                        }
                                    },
                                    "required": [
                                        "invoices"
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        },
        "/tools/get_invoice": {
            "post": {
                "operationId": "get_invoice",
                "tags": [
                    "Invoices"
                ],
                "summary": "Get a single invoice by ID, including line items.",
                "description": "Get a single invoice by ID, including line items. Dates (date, due_date) are ISO YYYY-MM-DD — present them to the user in Bulgarian format DD.MM.YYYYг (e.g. 15.06.2026г).",
                "security": [
                    {
                        "oauth2": [
                            "read:invoices"
                        ]
                    }
                ],
                "x-mcp-tool": "get_invoice",
                "x-mcp-annotations": {
                    "readOnly": true,
                    "destructive": false,
                    "idempotent": true,
                    "openWorld": false
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "id": {
                                        "type": "integer"
                                    }
                                },
                                "required": [
                                    "id"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Tool result",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "invoice": {
                                            "type": "object",
                                            "properties": {
                                                "id": {
                                                    "type": "integer"
                                                },
                                                "invoice_number": {
                                                    "type": "string"
                                                },
                                                "status": {
                                                    "type": "string",
                                                    "enum": [
                                                        "Unpaid",
                                                        "Paid",
                                                        "Cancelled",
                                                        "Refunded",
                                                        "Collections",
                                                        "Draft",
                                                        "Payment Pending",
                                                        "Overdue"
                                                    ]
                                                },
                                                "total": {
                                                    "type": "object",
                                                    "properties": {
                                                        "value": {
                                                            "type": "string"
                                                        },
                                                        "currency": {
                                                            "type": "string"
                                                        }
                                                    },
                                                    "required": [
                                                        "value",
                                                        "currency"
                                                    ]
                                                },
                                                "due_date": {
                                                    "type": [
                                                        "string",
                                                        "null"
                                                    ]
                                                },
                                                "date": {
                                                    "type": [
                                                        "string",
                                                        "null"
                                                    ]
                                                },
                                                "line_items": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "object",
                                                        "properties": {
                                                            "id": {
                                                                "type": "integer"
                                                            },
                                                            "description": {
                                                                "type": "string"
                                                            },
                                                            "amount": {
                                                                "type": "object",
                                                                "properties": {
                                                                    "value": {
                                                                        "type": "string"
                                                                    },
                                                                    "currency": {
                                                                        "type": "string"
                                                                    }
                                                                },
                                                                "required": [
                                                                    "value",
                                                                    "currency"
                                                                ]
                                                            },
                                                            "type": {
                                                                "type": "string"
                                                            }
                                                        },
                                                        "required": [
                                                            "id",
                                                            "description",
                                                            "amount",
                                                            "type"
                                                        ]
                                                    }
                                                }
                                            },
                                            "required": [
                                                "id",
                                                "invoice_number",
                                                "status",
                                                "total",
                                                "due_date",
                                                "date",
                                                "line_items"
                                            ]
                                        },
                                        "error": {
                                            "type": "string"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/tools/search_invoices": {
            "post": {
                "operationId": "search_invoices",
                "tags": [
                    "Invoices"
                ],
                "summary": "Search the caller's invoices for line items whose description matches a substring (case-insensitive). Returns up to 50 matching invoices, newest first.",
                "description": "Search the caller's invoices for line items whose description matches a substring (case-insensitive). Returns up to 50 matching invoices, newest first. Dates (date, due_date) are ISO YYYY-MM-DD — present them to the user in Bulgarian format DD.MM.YYYYг (e.g. 15.06.2026г).",
                "security": [
                    {
                        "oauth2": [
                            "read:invoices"
                        ]
                    }
                ],
                "x-mcp-tool": "search_invoices",
                "x-mcp-annotations": {
                    "readOnly": true,
                    "destructive": false,
                    "idempotent": true,
                    "openWorld": false
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "query": {
                                        "type": "string",
                                        "description": "Substring to match against item descriptions."
                                    }
                                },
                                "required": [
                                    "query"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Tool result",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "invoices": {
                                            "type": "array",
                                            "items": {
                                                "type": "object",
                                                "properties": {
                                                    "id": {
                                                        "type": "integer"
                                                    },
                                                    "invoice_number": {
                                                        "type": "string"
                                                    },
                                                    "status": {
                                                        "type": "string",
                                                        "enum": [
                                                            "Unpaid",
                                                            "Paid",
                                                            "Cancelled",
                                                            "Refunded",
                                                            "Collections",
                                                            "Draft",
                                                            "Payment Pending",
                                                            "Overdue"
                                                        ]
                                                    },
                                                    "total": {
                                                        "type": "object",
                                                        "properties": {
                                                            "value": {
                                                                "type": "string"
                                                            },
                                                            "currency": {
                                                                "type": "string"
                                                            }
                                                        },
                                                        "required": [
                                                            "value",
                                                            "currency"
                                                        ]
                                                    },
                                                    "due_date": {
                                                        "type": [
                                                            "string",
                                                            "null"
                                                        ]
                                                    },
                                                    "date": {
                                                        "type": [
                                                            "string",
                                                            "null"
                                                        ]
                                                    }
                                                },
                                                "required": [
                                                    "id",
                                                    "invoice_number",
                                                    "status",
                                                    "total",
                                                    "due_date",
                                                    "date"
                                                ]
                                            }
                                        },
                                        "truncated": {
                                            "type": "boolean"
                                        },
                                        "limit": {
                                            "type": "integer"
                                        },
                                        "error": {
                                            "type": "string"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/tools/find_invoices_by_relation": {
            "post": {
                "operationId": "find_invoices_by_relation",
                "tags": [
                    "Invoices"
                ],
                "summary": "Find the caller's invoices that include a charge for a specific hosting service (rel_type=Hosting) or domain (rel_type=Domain). rel_id is the integer service id or domain id. Returns up to 50 matching invoices, newest first.",
                "description": "Find the caller's invoices that include a charge for a specific hosting service (rel_type=Hosting) or domain (rel_type=Domain). rel_id is the integer service id or domain id. Returns up to 50 matching invoices, newest first. Dates (date, due_date) are ISO YYYY-MM-DD — present them to the user in Bulgarian format DD.MM.YYYYг (e.g. 15.06.2026г).",
                "security": [
                    {
                        "oauth2": [
                            "read:invoices"
                        ]
                    }
                ],
                "x-mcp-tool": "find_invoices_by_relation",
                "x-mcp-annotations": {
                    "readOnly": true,
                    "destructive": false,
                    "idempotent": true,
                    "openWorld": false
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "rel_type": {
                                        "type": "string",
                                        "description": "Must be exactly \"Hosting\" or \"Domain\"."
                                    },
                                    "rel_id": {
                                        "type": "integer",
                                        "description": "Hosting id (for Hosting) or domain id (for Domain)."
                                    }
                                },
                                "required": [
                                    "rel_type",
                                    "rel_id"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Tool result",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "invoices": {
                                            "type": "array",
                                            "items": {
                                                "type": "object",
                                                "properties": {
                                                    "id": {
                                                        "type": "integer"
                                                    },
                                                    "invoice_number": {
                                                        "type": "string"
                                                    },
                                                    "status": {
                                                        "type": "string",
                                                        "enum": [
                                                            "Unpaid",
                                                            "Paid",
                                                            "Cancelled",
                                                            "Refunded",
                                                            "Collections",
                                                            "Draft",
                                                            "Payment Pending",
                                                            "Overdue"
                                                        ]
                                                    },
                                                    "total": {
                                                        "type": "object",
                                                        "properties": {
                                                            "value": {
                                                                "type": "string"
                                                            },
                                                            "currency": {
                                                                "type": "string"
                                                            }
                                                        },
                                                        "required": [
                                                            "value",
                                                            "currency"
                                                        ]
                                                    },
                                                    "due_date": {
                                                        "type": [
                                                            "string",
                                                            "null"
                                                        ]
                                                    },
                                                    "date": {
                                                        "type": [
                                                            "string",
                                                            "null"
                                                        ]
                                                    }
                                                },
                                                "required": [
                                                    "id",
                                                    "invoice_number",
                                                    "status",
                                                    "total",
                                                    "due_date",
                                                    "date"
                                                ]
                                            }
                                        },
                                        "truncated": {
                                            "type": "boolean"
                                        },
                                        "limit": {
                                            "type": "integer"
                                        },
                                        "error": {
                                            "type": "string"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/tools/list_domains": {
            "post": {
                "operationId": "list_domains",
                "tags": [
                    "Domains"
                ],
                "summary": "List the caller's registered domains with expiry dates.",
                "description": "List the caller's registered domains with expiry dates. expiry_date is ISO YYYY-MM-DD — present it to the user in Bulgarian format DD.MM.YYYYг (e.g. 15.06.2026г).",
                "security": [
                    {
                        "oauth2": [
                            "read:domains"
                        ]
                    }
                ],
                "x-mcp-tool": "list_domains",
                "x-mcp-annotations": {
                    "readOnly": true,
                    "destructive": false,
                    "idempotent": true,
                    "openWorld": false
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {}
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Tool result",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "domains": {
                                            "type": "array",
                                            "items": {
                                                "type": "object",
                                                "properties": {
                                                    "id": {
                                                        "type": "integer"
                                                    },
                                                    "domain_name": {
                                                        "type": "string"
                                                    },
                                                    "status": {
                                                        "type": "string",
                                                        "enum": [
                                                            "Active",
                                                            "Expired",
                                                            "Pending",
                                                            "Pending Registration",
                                                            "Pending Transfer",
                                                            "Transferred Away",
                                                            "Cancelled",
                                                            "Grace",
                                                            "Fraud"
                                                        ]
                                                    },
                                                    "expiry_date": {
                                                        "type": [
                                                            "string",
                                                            "null"
                                                        ]
                                                    },
                                                    "recurring_amount": {
                                                        "type": "object",
                                                        "properties": {
                                                            "value": {
                                                                "type": "string"
                                                            },
                                                            "currency": {
                                                                "type": "string"
                                                            }
                                                        },
                                                        "required": [
                                                            "value",
                                                            "currency"
                                                        ]
                                                    },
                                                    "first_payment_amount": {
                                                        "type": "object",
                                                        "properties": {
                                                            "value": {
                                                                "type": "string"
                                                            },
                                                            "currency": {
                                                                "type": "string"
                                                            }
                                                        },
                                                        "required": [
                                                            "value",
                                                            "currency"
                                                        ]
                                                    }
                                                },
                                                "required": [
                                                    "id",
                                                    "domain_name",
                                                    "status",
                                                    "expiry_date",
                                                    "recurring_amount",
                                                    "first_payment_amount"
                                                ]
                                            }
                                        }
                                    },
                                    "required": [
                                        "domains"
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        },
        "/tools/get_domain": {
            "post": {
                "operationId": "get_domain",
                "tags": [
                    "Domains"
                ],
                "summary": "Get a single domain by ID, including status and expiry date.",
                "description": "Get a single domain by ID, including status and expiry date. Dates (registration_date, expiry_date, next_due_date) are ISO YYYY-MM-DD — present them to the user in Bulgarian format DD.MM.YYYYг (e.g. 15.06.2026г).",
                "security": [
                    {
                        "oauth2": [
                            "read:domains"
                        ]
                    }
                ],
                "x-mcp-tool": "get_domain",
                "x-mcp-annotations": {
                    "readOnly": true,
                    "destructive": false,
                    "idempotent": true,
                    "openWorld": false
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "id": {
                                        "type": "integer"
                                    }
                                },
                                "required": [
                                    "id"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Tool result",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "domain": {
                                            "type": "object",
                                            "properties": {
                                                "id": {
                                                    "type": "integer"
                                                },
                                                "domain_name": {
                                                    "type": "string"
                                                },
                                                "status": {
                                                    "type": "string",
                                                    "enum": [
                                                        "Active",
                                                        "Expired",
                                                        "Pending",
                                                        "Pending Registration",
                                                        "Pending Transfer",
                                                        "Transferred Away",
                                                        "Cancelled",
                                                        "Grace",
                                                        "Fraud"
                                                    ]
                                                },
                                                "registration_date": {
                                                    "type": [
                                                        "string",
                                                        "null"
                                                    ]
                                                },
                                                "expiry_date": {
                                                    "type": [
                                                        "string",
                                                        "null"
                                                    ]
                                                },
                                                "next_due_date": {
                                                    "type": [
                                                        "string",
                                                        "null"
                                                    ]
                                                },
                                                "recurring_amount": {
                                                    "type": "object",
                                                    "properties": {
                                                        "value": {
                                                            "type": "string"
                                                        },
                                                        "currency": {
                                                            "type": "string"
                                                        }
                                                    },
                                                    "required": [
                                                        "value",
                                                        "currency"
                                                    ]
                                                },
                                                "first_payment_amount": {
                                                    "type": "object",
                                                    "properties": {
                                                        "value": {
                                                            "type": "string"
                                                        },
                                                        "currency": {
                                                            "type": "string"
                                                        }
                                                    },
                                                    "required": [
                                                        "value",
                                                        "currency"
                                                    ]
                                                },
                                                "auto_renew": {
                                                    "type": "boolean"
                                                },
                                                "id_protection": {
                                                    "type": "boolean"
                                                },
                                                "dns_management": {
                                                    "type": "boolean"
                                                }
                                            },
                                            "required": [
                                                "id",
                                                "domain_name",
                                                "status",
                                                "registration_date",
                                                "expiry_date",
                                                "next_due_date",
                                                "recurring_amount",
                                                "first_payment_amount",
                                                "auto_renew",
                                                "id_protection",
                                                "dns_management"
                                            ]
                                        },
                                        "error": {
                                            "type": "string"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/tools/get_domain_nameservers": {
            "post": {
                "operationId": "get_domain_nameservers",
                "tags": [
                    "Domains"
                ],
                "summary": "Get the registrar nameservers for one of the caller's domains by ID.",
                "description": "Get the registrar nameservers currently set for one of the caller's domains, by domain ID. Performs a live lookup at the registrar.",
                "security": [
                    {
                        "oauth2": [
                            "read:domains"
                        ]
                    }
                ],
                "x-mcp-tool": "get_domain_nameservers",
                "x-mcp-annotations": {
                    "readOnly": true,
                    "destructive": false,
                    "idempotent": true,
                    "openWorld": true
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "id": {
                                        "type": "integer"
                                    }
                                },
                                "required": [
                                    "id"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Tool result",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "domain_id": {
                                            "type": "integer"
                                        },
                                        "nameservers": {
                                            "type": "array",
                                            "items": {
                                                "type": "string"
                                            }
                                        },
                                        "error": {
                                            "type": "string"
                                        },
                                        "message": {
                                            "type": "string"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/tools/get_domain_whois": {
            "post": {
                "operationId": "get_domain_whois",
                "tags": [
                    "Domains"
                ],
                "summary": "Get the WHOIS contact records for one of the caller's domains by ID.",
                "description": "Get the WHOIS contact records (registrant, admin, tech) for one of the caller's domains, by domain ID. Contains personal contact details; performs a live lookup at the registrar.",
                "security": [
                    {
                        "oauth2": [
                            "read:domains"
                        ]
                    }
                ],
                "x-mcp-tool": "get_domain_whois",
                "x-mcp-annotations": {
                    "readOnly": true,
                    "destructive": false,
                    "idempotent": true,
                    "openWorld": true
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "id": {
                                        "type": "integer"
                                    }
                                },
                                "required": [
                                    "id"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Tool result",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "domain_id": {
                                            "type": "integer"
                                        },
                                        "registrant": {
                                            "type": "object",
                                            "additionalProperties": {
                                                "type": [
                                                    "string",
                                                    "null"
                                                ]
                                            }
                                        },
                                        "admin": {
                                            "type": "object",
                                            "additionalProperties": {
                                                "type": [
                                                    "string",
                                                    "null"
                                                ]
                                            }
                                        },
                                        "tech": {
                                            "type": "object",
                                            "additionalProperties": {
                                                "type": [
                                                    "string",
                                                    "null"
                                                ]
                                            }
                                        },
                                        "error": {
                                            "type": "string"
                                        },
                                        "message": {
                                            "type": "string"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/tools/list_tickets": {
            "post": {
                "operationId": "list_tickets",
                "tags": [
                    "Tickets"
                ],
                "summary": "List the caller's support tickets, optionally filtered by status.",
                "description": "List the caller's support tickets, optionally filtered by status. Timestamps (created_at, updated_at) are ISO date-times — present them to the user in Bulgarian format DD.MM.YYYYг HH:MM (e.g. 15.06.2026г 17:36).",
                "security": [
                    {
                        "oauth2": [
                            "read:tickets"
                        ]
                    }
                ],
                "x-mcp-tool": "list_tickets",
                "x-mcp-annotations": {
                    "readOnly": true,
                    "destructive": false,
                    "idempotent": true,
                    "openWorld": false
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "status": {
                                        "type": [
                                            "null",
                                            "string"
                                        ],
                                        "default": null
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Tool result",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "tickets": {
                                            "type": "array",
                                            "items": {
                                                "type": "object",
                                                "properties": {
                                                    "id": {
                                                        "type": "integer"
                                                    },
                                                    "subject": {
                                                        "type": "string"
                                                    },
                                                    "status": {
                                                        "type": "string",
                                                        "enum": [
                                                            "Open",
                                                            "Answered",
                                                            "Customer-Reply",
                                                            "Awaiting reply",
                                                            "Closed",
                                                            "On Hold",
                                                            "In Progress"
                                                        ]
                                                    },
                                                    "priority": {
                                                        "type": "string"
                                                    },
                                                    "created_at": {
                                                        "type": [
                                                            "string",
                                                            "null"
                                                        ]
                                                    },
                                                    "updated_at": {
                                                        "type": [
                                                            "string",
                                                            "null"
                                                        ]
                                                    }
                                                },
                                                "required": [
                                                    "id",
                                                    "subject",
                                                    "status",
                                                    "priority",
                                                    "created_at",
                                                    "updated_at"
                                                ]
                                            }
                                        }
                                    },
                                    "required": [
                                        "tickets"
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        },
        "/tools/get_ticket": {
            "post": {
                "operationId": "get_ticket",
                "tags": [
                    "Tickets"
                ],
                "summary": "Get a single support ticket by ID, including customer-visible replies only.",
                "description": "Get a single support ticket by ID, including customer-visible replies only. Timestamps (created_at, updated_at, and each reply's created_at) are ISO date-times — present them to the user in Bulgarian format DD.MM.YYYYг HH:MM (e.g. 15.06.2026г 17:36).",
                "security": [
                    {
                        "oauth2": [
                            "read:tickets"
                        ]
                    }
                ],
                "x-mcp-tool": "get_ticket",
                "x-mcp-annotations": {
                    "readOnly": true,
                    "destructive": false,
                    "idempotent": true,
                    "openWorld": false
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "id": {
                                        "type": "integer"
                                    }
                                },
                                "required": [
                                    "id"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Tool result",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "ticket": {
                                            "type": "object",
                                            "properties": {
                                                "id": {
                                                    "type": "integer"
                                                },
                                                "subject": {
                                                    "type": "string"
                                                },
                                                "status": {
                                                    "type": "string",
                                                    "enum": [
                                                        "Open",
                                                        "Answered",
                                                        "Customer-Reply",
                                                        "Awaiting reply",
                                                        "Closed",
                                                        "On Hold",
                                                        "In Progress"
                                                    ]
                                                },
                                                "priority": {
                                                    "type": "string"
                                                },
                                                "created_at": {
                                                    "type": [
                                                        "string",
                                                        "null"
                                                    ]
                                                },
                                                "updated_at": {
                                                    "type": [
                                                        "string",
                                                        "null"
                                                    ]
                                                },
                                                "replies": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "object",
                                                        "properties": {
                                                            "id": {
                                                                "type": "integer"
                                                            },
                                                            "message": {
                                                                "type": "string"
                                                            },
                                                            "created_at": {
                                                                "type": [
                                                                    "string",
                                                                    "null"
                                                                ]
                                                            }
                                                        },
                                                        "required": [
                                                            "id",
                                                            "message",
                                                            "created_at"
                                                        ]
                                                    }
                                                }
                                            },
                                            "required": [
                                                "id",
                                                "subject",
                                                "status",
                                                "priority",
                                                "created_at",
                                                "updated_at",
                                                "replies"
                                            ]
                                        },
                                        "error": {
                                            "type": "string"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/tools/check_domain_availability": {
            "post": {
                "operationId": "check_domain_availability",
                "tags": [
                    "Catalog"
                ],
                "summary": "Check availability and EUR pricing for one or more domains.",
                "description": "Check availability and EUR pricing for one or more explicit domain names (up to 10). Each result gives status, 1-year register and transfer prices, and free_with_hosting / free_with_products — whether the TLD is free when ordered with a JetHost hosting plan and which plans (and billing cycles) qualify. When a domain is available and sellable, follow up with list_hosting_plans to show the customer which plans to pair it with; free_with_products already names the plans that include that TLD as a free domain. Data may be up to 60 seconds stale.",
                "security": [
                    {
                        "oauth2": [
                            "read:domain_catalog"
                        ]
                    }
                ],
                "x-mcp-tool": "check_domain_availability",
                "x-mcp-annotations": {
                    "readOnly": true,
                    "destructive": false,
                    "idempotent": true,
                    "openWorld": true
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "domains": {
                                        "type": "array",
                                        "description": "Fully-qualified domain names to check.",
                                        "items": {
                                            "type": "string"
                                        }
                                    }
                                },
                                "required": [
                                    "domains"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Tool result",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "domains": {
                                            "type": "array",
                                            "items": {
                                                "type": "object",
                                                "properties": {
                                                    "domain_name": {
                                                        "type": "string"
                                                    },
                                                    "sld": {
                                                        "type": "string"
                                                    },
                                                    "tld": {
                                                        "type": "string"
                                                    },
                                                    "status": {
                                                        "type": "string",
                                                        "enum": [
                                                            "available",
                                                            "registered",
                                                            "reserved",
                                                            "unknown"
                                                        ]
                                                    },
                                                    "register_price": {
                                                        "type": [
                                                            "string",
                                                            "null"
                                                        ]
                                                    },
                                                    "transfer_price": {
                                                        "type": [
                                                            "string",
                                                            "null"
                                                        ]
                                                    },
                                                    "is_premium": {
                                                        "type": "boolean"
                                                    },
                                                    "sellable": {
                                                        "type": "boolean"
                                                    },
                                                    "currency": {
                                                        "type": "string"
                                                    },
                                                    "free_with_hosting": {
                                                        "type": "boolean",
                                                        "description": "True when this TLD can be registered free of charge if ordered together with a qualifying JetHost hosting plan. See free_with_products for which plans and billing cycles qualify."
                                                    },
                                                    "free_with_products": {
                                                        "type": "array",
                                                        "description": "Hosting plans that include this domain free when ordered together. Empty when the domain is not free with any plan.",
                                                        "items": {
                                                            "type": "object",
                                                            "properties": {
                                                                "product_id": {
                                                                    "type": "integer",
                                                                    "description": "WHMCS product id of the qualifying hosting plan."
                                                                },
                                                                "product_name": {
                                                                    "type": "string",
                                                                    "description": "Display name of the qualifying hosting plan."
                                                                },
                                                                "billing_cycles": {
                                                                    "type": "array",
                                                                    "description": "Billing cycles on which the free domain applies (e.g. \"annually\", \"biennially\", \"triennially\"). The customer must pick one of these terms for the domain to be free.",
                                                                    "items": {
                                                                        "type": "string"
                                                                    }
                                                                }
                                                            },
                                                            "required": [
                                                                "product_id",
                                                                "product_name",
                                                                "billing_cycles"
                                                            ]
                                                        }
                                                    }
                                                },
                                                "required": [
                                                    "domain_name",
                                                    "sld",
                                                    "tld",
                                                    "status",
                                                    "register_price",
                                                    "transfer_price",
                                                    "is_premium",
                                                    "sellable",
                                                    "currency",
                                                    "free_with_hosting",
                                                    "free_with_products"
                                                ]
                                            }
                                        },
                                        "error": {
                                            "type": "string"
                                        }
                                    },
                                    "required": [
                                        "domains"
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        },
        "/tools/suggest_domains": {
            "post": {
                "operationId": "suggest_domains",
                "tags": [
                    "Catalog"
                ],
                "summary": "Suggest available domains based on a keyword stem, with EUR pricing.",
                "description": "Suggest available domains from a keyword stem. Pass the keyword in the \"stem\" argument (e.g. stem=\"bakery\"). Returns up to 15 JetHost-sellable suggestions, each with EUR pricing and free_with_hosting / free_with_products — whether the TLD is free when ordered with a JetHost hosting plan and which plans (and billing cycles) qualify. Data may be up to 60 seconds stale.",
                "security": [
                    {
                        "oauth2": [
                            "read:domain_catalog"
                        ]
                    }
                ],
                "x-mcp-tool": "suggest_domains",
                "x-mcp-annotations": {
                    "readOnly": true,
                    "destructive": false,
                    "idempotent": true,
                    "openWorld": true
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "stem": {
                                        "type": "string",
                                        "description": "The keyword, brand, or business name to generate domain suggestions from — a single word or short phrase, e.g. \"bakery\" or \"handmade studio\". Pass the stem only: NOT a full domain name and NOT a TLD. This is the only argument; its name is \"stem\".",
                                        "minLength": 1
                                    }
                                },
                                "required": [
                                    "stem"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Tool result",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "domains": {
                                            "type": "array",
                                            "items": {
                                                "type": "object",
                                                "properties": {
                                                    "domain_name": {
                                                        "type": "string"
                                                    },
                                                    "sld": {
                                                        "type": "string"
                                                    },
                                                    "tld": {
                                                        "type": "string"
                                                    },
                                                    "status": {
                                                        "type": "string",
                                                        "enum": [
                                                            "available",
                                                            "registered",
                                                            "reserved",
                                                            "unknown"
                                                        ]
                                                    },
                                                    "register_price": {
                                                        "type": [
                                                            "string",
                                                            "null"
                                                        ]
                                                    },
                                                    "transfer_price": {
                                                        "type": [
                                                            "string",
                                                            "null"
                                                        ]
                                                    },
                                                    "is_premium": {
                                                        "type": "boolean"
                                                    },
                                                    "sellable": {
                                                        "type": "boolean"
                                                    },
                                                    "currency": {
                                                        "type": "string"
                                                    },
                                                    "free_with_hosting": {
                                                        "type": "boolean",
                                                        "description": "True when this TLD can be registered free of charge if ordered together with a qualifying JetHost hosting plan. See free_with_products for which plans and billing cycles qualify."
                                                    },
                                                    "free_with_products": {
                                                        "type": "array",
                                                        "description": "Hosting plans that include this domain free when ordered together. Empty when the domain is not free with any plan.",
                                                        "items": {
                                                            "type": "object",
                                                            "properties": {
                                                                "product_id": {
                                                                    "type": "integer",
                                                                    "description": "WHMCS product id of the qualifying hosting plan."
                                                                },
                                                                "product_name": {
                                                                    "type": "string",
                                                                    "description": "Display name of the qualifying hosting plan."
                                                                },
                                                                "billing_cycles": {
                                                                    "type": "array",
                                                                    "description": "Billing cycles on which the free domain applies (e.g. \"annually\", \"biennially\", \"triennially\"). The customer must pick one of these terms for the domain to be free.",
                                                                    "items": {
                                                                        "type": "string"
                                                                    }
                                                                }
                                                            },
                                                            "required": [
                                                                "product_id",
                                                                "product_name",
                                                                "billing_cycles"
                                                            ]
                                                        }
                                                    }
                                                },
                                                "required": [
                                                    "domain_name",
                                                    "sld",
                                                    "tld",
                                                    "status",
                                                    "register_price",
                                                    "transfer_price",
                                                    "is_premium",
                                                    "sellable",
                                                    "currency",
                                                    "free_with_hosting",
                                                    "free_with_products"
                                                ]
                                            }
                                        },
                                        "error": {
                                            "type": "string"
                                        }
                                    },
                                    "required": [
                                        "domains"
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        },
        "/tools/list_hosting_plans": {
            "post": {
                "operationId": "list_hosting_plans",
                "tags": [
                    "Catalog"
                ],
                "summary": "List all active JetHost hosting plans with EUR pricing per billing cycle (enabled cycles only) and the discounted new-order price. Returns a lean list without config options — call get_hosting_plan(pid) to drill into a single plan's configurable options. Data may be up to 60 seconds stale.",
                "description": "List all active JetHost hosting plans with EUR pricing per billing cycle (enabled cycles only) and the discounted new-order price. Returns a lean list without config options — call get_hosting_plan(pid) to drill into a single plan's configurable options. Data may be up to 60 seconds stale.",
                "security": [
                    {
                        "oauth2": [
                            "read:product_catalog"
                        ]
                    }
                ],
                "x-mcp-tool": "list_hosting_plans",
                "x-mcp-annotations": {
                    "readOnly": true,
                    "destructive": false,
                    "idempotent": true,
                    "openWorld": true
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {}
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Tool result",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "plans": {
                                            "type": "array",
                                            "items": {
                                                "type": "object",
                                                "properties": {
                                                    "pid": {
                                                        "type": "integer"
                                                    },
                                                    "gid": {
                                                        "type": "integer"
                                                    },
                                                    "name": {
                                                        "type": "string"
                                                    },
                                                    "tagline": {
                                                        "type": "string"
                                                    },
                                                    "short_description": {
                                                        "type": "string"
                                                    },
                                                    "description": {
                                                        "type": "string"
                                                    },
                                                    "product_url": {
                                                        "type": "string"
                                                    },
                                                    "currency": {
                                                        "type": "string"
                                                    },
                                                    "pricing": {
                                                        "type": "array",
                                                        "items": {
                                                            "type": "object",
                                                            "properties": {
                                                                "cycle": {
                                                                    "type": "string"
                                                                },
                                                                "base_price": {
                                                                    "type": "string"
                                                                },
                                                                "new_price": {
                                                                    "type": "string"
                                                                },
                                                                "discount_pct": {
                                                                    "type": "number"
                                                                }
                                                            },
                                                            "required": [
                                                                "cycle",
                                                                "base_price",
                                                                "new_price",
                                                                "discount_pct"
                                                            ]
                                                        }
                                                    }
                                                },
                                                "required": [
                                                    "pid",
                                                    "gid",
                                                    "name",
                                                    "tagline",
                                                    "short_description",
                                                    "description",
                                                    "product_url",
                                                    "currency",
                                                    "pricing"
                                                ]
                                            }
                                        }
                                    },
                                    "required": [
                                        "plans"
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        },
        "/tools/get_hosting_plan": {
            "post": {
                "operationId": "get_hosting_plan",
                "tags": [
                    "Catalog"
                ],
                "summary": "Get a single hosting plan by its WHMCS product id (pid), including its pricing and normalized configurable options (e.g. server location). Config-option prices are list price. Call list_hosting_plans first to find the pid. Data may be up to 60 seconds stale.",
                "description": "Get a single hosting plan by its WHMCS product id (pid), including its pricing and normalized configurable options (e.g. server location). Config-option prices are list price. Call list_hosting_plans first to find the pid. Data may be up to 60 seconds stale.",
                "security": [
                    {
                        "oauth2": [
                            "read:product_catalog"
                        ]
                    }
                ],
                "x-mcp-tool": "get_hosting_plan",
                "x-mcp-annotations": {
                    "readOnly": true,
                    "destructive": false,
                    "idempotent": true,
                    "openWorld": true
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "pid": {
                                        "type": "integer",
                                        "description": "The WHMCS product id (pid) of the hosting plan to retrieve. Obtain this from list_hosting_plans. Must be a positive integer.",
                                        "minimum": 1
                                    }
                                },
                                "required": [
                                    "pid"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Tool result",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "plan": {
                                            "type": "object",
                                            "properties": {
                                                "pid": {
                                                    "type": "integer"
                                                },
                                                "gid": {
                                                    "type": "integer"
                                                },
                                                "name": {
                                                    "type": "string"
                                                },
                                                "tagline": {
                                                    "type": "string"
                                                },
                                                "short_description": {
                                                    "type": "string"
                                                },
                                                "description": {
                                                    "type": "string"
                                                },
                                                "product_url": {
                                                    "type": "string"
                                                },
                                                "currency": {
                                                    "type": "string"
                                                },
                                                "pricing": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "object",
                                                        "properties": {
                                                            "cycle": {
                                                                "type": "string"
                                                            },
                                                            "base_price": {
                                                                "type": "string"
                                                            },
                                                            "new_price": {
                                                                "type": "string"
                                                            },
                                                            "discount_pct": {
                                                                "type": "number"
                                                            }
                                                        },
                                                        "required": [
                                                            "cycle",
                                                            "base_price",
                                                            "new_price",
                                                            "discount_pct"
                                                        ]
                                                    }
                                                },
                                                "config_options": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "object",
                                                        "properties": {
                                                            "id": {
                                                                "type": "integer"
                                                            },
                                                            "name": {
                                                                "type": "string"
                                                            },
                                                            "type": {
                                                                "type": "string"
                                                            },
                                                            "required": {
                                                                "type": "boolean"
                                                            },
                                                            "options": {
                                                                "type": "array",
                                                                "items": {
                                                                    "type": "object",
                                                                    "properties": {
                                                                        "id": {
                                                                            "type": "integer"
                                                                        },
                                                                        "name": {
                                                                            "type": "string"
                                                                        },
                                                                        "price": {
                                                                            "type": "object"
                                                                        }
                                                                    },
                                                                    "required": [
                                                                        "id",
                                                                        "name",
                                                                        "price"
                                                                    ]
                                                                }
                                                            }
                                                        },
                                                        "required": [
                                                            "id",
                                                            "name",
                                                            "type",
                                                            "required",
                                                            "options"
                                                        ]
                                                    }
                                                }
                                            },
                                            "required": [
                                                "pid",
                                                "gid",
                                                "name",
                                                "tagline",
                                                "short_description",
                                                "description",
                                                "product_url",
                                                "currency",
                                                "pricing",
                                                "config_options"
                                            ]
                                        },
                                        "error": {
                                            "type": "string"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/tools/get_website_logs": {
            "post": {
                "operationId": "get_website_logs",
                "tags": [
                    "Websites"
                ],
                "summary": "Get raw log lines for one domain on one of the caller's hosting services, within a time window: log_type=access for the HTTPS web-server access log (falls back to the plain HTTP log when the site has no SSL log), log_type=http_access for the plain HTTP access log specifically, log_type=php_error for PHP error_log files and WordPress debug.log. Results are tail-first (most recent matching lines first) and hard-capped at 500 lines / 256 KB — if truncated=true, narrow the time window or add a fixed-string search filter instead of paging. from/to must be ISO 8601 with an explicit offset (e.g. 2026-06-10T08:00:00+03:00 or ...Z); the effective window applied is echoed back in UTC. status=log_not_available means no such log file exists for that domain (do NOT report it as \"no errors\") — distinct from status=ok with zero lines, which means the log exists but nothing matched. status=unavailable_on_server means log access is not rolled out on that hosting server yet.",
                "description": "Get raw log lines for one domain on one of the caller's hosting services, within a time window: log_type=access for the HTTPS web-server access log (falls back to the plain HTTP log when the site has no SSL log), log_type=http_access for the plain HTTP access log specifically, log_type=php_error for PHP error_log files and WordPress debug.log. Results are tail-first (most recent matching lines first) and hard-capped at 500 lines / 256 KB — if truncated=true, narrow the time window or add a fixed-string search filter instead of paging. from/to must be ISO 8601 with an explicit offset (e.g. 2026-06-10T08:00:00+03:00 or ...Z); the effective window applied is echoed back in UTC. status=log_not_available means no such log file exists for that domain (do NOT report it as \"no errors\") — distinct from status=ok with zero lines, which means the log exists but nothing matched. status=unavailable_on_server means log access is not rolled out on that hosting server yet.",
                "security": [
                    {
                        "oauth2": [
                            "read:logs"
                        ]
                    }
                ],
                "x-mcp-tool": "get_website_logs",
                "x-mcp-annotations": {
                    "readOnly": true,
                    "destructive": false,
                    "idempotent": true,
                    "openWorld": true
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "service_id": {
                                        "type": "integer",
                                        "description": "The hosting service ID the domain belongs to. Obtain it via list_services.",
                                        "minimum": 1
                                    },
                                    "domain": {
                                        "type": "string",
                                        "description": "The domain whose logs to read. Must belong to the hosting service (main, addon, or subdomain).",
                                        "minLength": 1
                                    },
                                    "log_type": {
                                        "type": "string",
                                        "description": "Which log to read: \"access\" = the HTTPS web-server access log (the domain's SSL log), falling back to the plain HTTP log when the site has no SSL log; \"http_access\" = the plain HTTP access log specifically; \"php_error\" = PHP error_log files and WordPress debug.log found under the site's document root.",
                                        "enum": [
                                            "access",
                                            "http_access",
                                            "php_error"
                                        ]
                                    },
                                    "from": {
                                        "type": "string",
                                        "description": "Window start as ISO 8601 with a REQUIRED explicit offset, e.g. \"2026-06-10T08:00:00+03:00\" or \"2026-06-10T05:00:00Z\". Offset-less timestamps are rejected."
                                    },
                                    "to": {
                                        "type": "string",
                                        "description": "Window end as ISO 8601 with a REQUIRED explicit offset. Must not be before \"from\"."
                                    },
                                    "search": {
                                        "type": "string",
                                        "default": null,
                                        "description": "Optional fixed-string filter (substring match, NOT a regex) — e.g. an IP, a URL path, or \"PHP Fatal\"."
                                    },
                                    "limit": {
                                        "type": "integer",
                                        "default": null,
                                        "description": "Maximum lines to return. Capped at 500 server-side regardless of the requested value; omit for the full 500.",
                                        "minimum": 1
                                    }
                                },
                                "required": [
                                    "service_id",
                                    "domain",
                                    "log_type",
                                    "from",
                                    "to"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Tool result",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "logs": {
                                            "type": "object",
                                            "properties": {
                                                "service_id": {
                                                    "type": "integer"
                                                },
                                                "domain": {
                                                    "type": "string"
                                                },
                                                "log_type": {
                                                    "type": "string",
                                                    "enum": [
                                                        "access",
                                                        "http_access",
                                                        "php_error"
                                                    ]
                                                },
                                                "status": {
                                                    "type": "string",
                                                    "enum": [
                                                        "ok",
                                                        "log_not_available",
                                                        "unavailable_on_server"
                                                    ]
                                                },
                                                "lines": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string"
                                                    }
                                                },
                                                "truncated": {
                                                    "type": "boolean"
                                                },
                                                "from": {
                                                    "type": "string"
                                                },
                                                "to": {
                                                    "type": "string"
                                                },
                                                "module_version": {
                                                    "type": "string"
                                                },
                                                "files_capped": {
                                                    "type": "integer"
                                                },
                                                "stopped_reason": {
                                                    "type": "string"
                                                }
                                            },
                                            "required": [
                                                "service_id",
                                                "domain",
                                                "log_type",
                                                "status",
                                                "lines",
                                                "truncated",
                                                "from",
                                                "to",
                                                "module_version"
                                            ]
                                        },
                                        "error": {
                                            "type": "string"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/tools/list_website_domains": {
            "post": {
                "operationId": "list_website_domains",
                "tags": [
                    "Websites"
                ],
                "summary": "List the domains hosted on one of the caller's hosting services, by service ID: the main domain plus any addon domains, subdomains, and parked (alias) domains, each with its document root. The result is the complete set for that account. Use it to discover which domain to pass to get_website_logs or to map a site to its directory on the server.",
                "description": "List the domains hosted on one of the caller's hosting services, by service ID: the main domain plus any addon domains, subdomains, and parked (alias) domains, each with its document root. The result is the complete set for that account. Use it to discover which domain to pass to get_website_logs or to map a site to its directory on the server.",
                "security": [
                    {
                        "oauth2": [
                            "read:websites"
                        ]
                    }
                ],
                "x-mcp-tool": "list_website_domains",
                "x-mcp-annotations": {
                    "readOnly": true,
                    "destructive": false,
                    "idempotent": true,
                    "openWorld": false
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "service_id": {
                                        "type": "integer",
                                        "description": "The hosting service ID whose hosted domains to list. Obtain it via list_services.",
                                        "minimum": 1
                                    }
                                },
                                "required": [
                                    "service_id"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Tool result",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "domains": {
                                            "type": "array",
                                            "items": {
                                                "type": "object",
                                                "properties": {
                                                    "domain": {
                                                        "type": "string"
                                                    },
                                                    "type": {
                                                        "type": "string",
                                                        "enum": [
                                                            "main",
                                                            "addon",
                                                            "sub",
                                                            "parked",
                                                            "other"
                                                        ]
                                                    },
                                                    "document_root": {
                                                        "type": "string"
                                                    }
                                                },
                                                "required": [
                                                    "domain",
                                                    "type",
                                                    "document_root"
                                                ]
                                            }
                                        },
                                        "error": {
                                            "type": "string"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/tools/get_website_statistics": {
            "post": {
                "operationId": "get_website_statistics",
                "tags": [
                    "Websites"
                ],
                "summary": "Get pre-aggregated AWStats traffic statistics for one domain on one of the caller's hosting services, for the CURRENT month. HTTP and HTTPS are reported as separate blocks (never summed). Each block has a status: ok (data parsed), statistics_not_available (no data file for that protocol this month — do NOT report as \"no visitors\"), or unavailable_on_server (the stats module is not rolled out on that hosting server yet). Sections cover summary, by_hour, by_day, top_pages, not_found_404, referrers, search_engines, search_keywords, origin, countries, os, browsers, robots, http_errors, file_types — pass \"sections\" to narrow the payload (omitted: list sections return a bounded top-N, small sections are complete). Bandwidth is raw bytes; individual visitor IPs are not exposed. Data is rebuilt nightly, so figures reflect through roughly yesterday and the current month is partial.",
                "description": "Get pre-aggregated AWStats traffic statistics for one domain on one of the caller's hosting services, for the CURRENT month. HTTP and HTTPS are reported as separate blocks (never summed). Each block has a status: ok (data parsed), statistics_not_available (no data file for that protocol this month — do NOT report as \"no visitors\"), or unavailable_on_server (the stats module is not rolled out on that hosting server yet). Sections cover summary, by_hour, by_day, top_pages, not_found_404, referrers, search_engines, search_keywords, origin, countries, os, browsers, robots, http_errors, file_types — pass \"sections\" to narrow the payload (omitted: list sections return a bounded top-N, small sections are complete). Bandwidth is raw bytes; individual visitor IPs are not exposed. Data is rebuilt nightly, so figures reflect through roughly yesterday and the current month is partial.",
                "security": [
                    {
                        "oauth2": [
                            "read:analytics"
                        ]
                    }
                ],
                "x-mcp-tool": "get_website_statistics",
                "x-mcp-annotations": {
                    "readOnly": true,
                    "destructive": false,
                    "idempotent": true,
                    "openWorld": true
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "service_id": {
                                        "type": "integer",
                                        "description": "The hosting service ID the domain belongs to. Obtain it via list_services.",
                                        "minimum": 1
                                    },
                                    "domain": {
                                        "type": "string",
                                        "description": "The domain whose statistics to read. Must belong to the hosting service (main, addon, or subdomain).",
                                        "minLength": 1
                                    },
                                    "sections": {
                                        "type": "array",
                                        "default": null,
                                        "description": "Optional subset of sections to return. Omit for everything (list sections capped to a top-N). Allowed: summary, by_hour, by_day, top_pages, not_found_404, referrers, search_engines, search_keywords, origin, countries, os, browsers, robots, http_errors, file_types.",
                                        "items": {
                                            "type": "string",
                                            "enum": [
                                                "summary",
                                                "by_hour",
                                                "by_day",
                                                "top_pages",
                                                "not_found_404",
                                                "referrers",
                                                "search_engines",
                                                "search_keywords",
                                                "origin",
                                                "countries",
                                                "os",
                                                "browsers",
                                                "robots",
                                                "http_errors",
                                                "file_types"
                                            ]
                                        }
                                    }
                                },
                                "required": [
                                    "service_id",
                                    "domain"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Tool result",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "statistics": {
                                            "type": "object",
                                            "properties": {
                                                "service_id": {
                                                    "type": "integer"
                                                },
                                                "domain": {
                                                    "type": "string"
                                                },
                                                "period": {
                                                    "type": "object",
                                                    "properties": {
                                                        "year": {
                                                            "type": "integer"
                                                        },
                                                        "month": {
                                                            "type": "integer"
                                                        }
                                                    },
                                                    "required": [
                                                        "year",
                                                        "month"
                                                    ]
                                                },
                                                "module_version": {
                                                    "type": "string"
                                                },
                                                "http": {
                                                    "type": "object",
                                                    "properties": {
                                                        "status": {
                                                            "type": "string",
                                                            "enum": [
                                                                "ok",
                                                                "statistics_not_available",
                                                                "unavailable_on_server"
                                                            ]
                                                        },
                                                        "sections": {
                                                            "type": "object"
                                                        }
                                                    },
                                                    "required": [
                                                        "status",
                                                        "sections"
                                                    ]
                                                },
                                                "https": {
                                                    "type": "object",
                                                    "properties": {
                                                        "status": {
                                                            "type": "string",
                                                            "enum": [
                                                                "ok",
                                                                "statistics_not_available",
                                                                "unavailable_on_server"
                                                            ]
                                                        },
                                                        "sections": {
                                                            "type": "object"
                                                        }
                                                    },
                                                    "required": [
                                                        "status",
                                                        "sections"
                                                    ]
                                                }
                                            },
                                            "required": [
                                                "service_id",
                                                "domain",
                                                "period",
                                                "module_version",
                                                "http",
                                                "https"
                                            ]
                                        },
                                        "error": {
                                            "type": "string"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/tools/deploy_site_from_url": {
            "post": {
                "operationId": "deploy_site_from_url",
                "tags": [
                    "Deploy"
                ],
                "summary": "Deploy a Git repository to one domain on one of the caller's hosting services. Source repositories are restricted to a server-side host allowlist. NO build step runs (no npm/composer install, no compilation) — the repository must contain ready-to-serve files. Deploys are contained: the module refuses to overwrite a target that is not a clean scaffold (status=target_not_empty), so an established site is never clobbered. Rollback is by ref — re-deploy a previous ref from get_deploy_status history to restore an earlier state. status=ok means the deploy landed (commit_sha/file_count describe it); status=quota_exceeded means the account disk quota would be exceeded and nothing was deployed; status=target_not_empty is the containment refusal; status=unavailable_on_server means the deploy module is not rolled out on that hosting server yet. This is a state-changing, destructive, non-idempotent write — it requires the write:deploy scope.",
                "description": "Deploy a Git repository to one domain on one of the caller's hosting services. Source repositories are restricted to a server-side host allowlist. NO build step runs (no npm/composer install, no compilation) — the repository must contain ready-to-serve files. Deploys are contained: the module refuses to overwrite a target that is not a clean scaffold (status=target_not_empty), so an established site is never clobbered. Rollback is by ref — re-deploy a previous ref from get_deploy_status history to restore an earlier state. status=ok means the deploy landed (commit_sha/file_count describe it); status=quota_exceeded means the account disk quota would be exceeded and nothing was deployed; status=target_not_empty is the containment refusal; status=unavailable_on_server means the deploy module is not rolled out on that hosting server yet. This is a state-changing, destructive, non-idempotent write — it requires the write:deploy scope.",
                "security": [
                    {
                        "oauth2": [
                            "write:deploy"
                        ]
                    }
                ],
                "x-mcp-tool": "deploy_site_from_url",
                "x-mcp-annotations": {
                    "readOnly": false,
                    "destructive": true,
                    "idempotent": false,
                    "openWorld": true
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "service_id": {
                                        "type": "integer",
                                        "description": "The hosting service ID to deploy to. Obtain it via list_services.",
                                        "minimum": 1
                                    },
                                    "target_domain": {
                                        "type": "string",
                                        "description": "The hosted domain to deploy to. Must belong to the hosting service (discover it via list_website_domains).",
                                        "minLength": 1
                                    },
                                    "repo_url": {
                                        "type": "string",
                                        "description": "The Git repository URL to deploy. Only repositories on the server-side host allowlist are accepted; no build step runs, so the repository must contain ready-to-serve files.",
                                        "minLength": 1
                                    },
                                    "ref": {
                                        "type": "string",
                                        "default": null,
                                        "description": "Optional branch, tag, or commit to deploy. Omit for the repository default branch. To roll back, pass a ref from get_deploy_status history."
                                    },
                                    "subdir": {
                                        "type": "string",
                                        "default": null,
                                        "description": "Optional document-root-relative subdirectory to deploy into. Omit to deploy into the target document root itself."
                                    }
                                },
                                "required": [
                                    "service_id",
                                    "target_domain",
                                    "repo_url"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Tool result",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "deploy": {
                                            "type": "object",
                                            "properties": {
                                                "service_id": {
                                                    "type": "integer"
                                                },
                                                "target_domain": {
                                                    "type": "string"
                                                },
                                                "status": {
                                                    "type": "string",
                                                    "enum": [
                                                        "ok",
                                                        "quota_exceeded",
                                                        "target_not_empty",
                                                        "unavailable_on_server"
                                                    ]
                                                },
                                                "repo_url": {
                                                    "type": "string"
                                                },
                                                "ref": {
                                                    "type": "string"
                                                },
                                                "commit_sha": {
                                                    "type": "string"
                                                },
                                                "target": {
                                                    "type": "string"
                                                },
                                                "file_count": {
                                                    "type": "integer"
                                                },
                                                "module_version": {
                                                    "type": "string"
                                                }
                                            },
                                            "required": [
                                                "service_id",
                                                "target_domain",
                                                "status",
                                                "repo_url",
                                                "ref",
                                                "commit_sha",
                                                "target",
                                                "file_count",
                                                "module_version"
                                            ]
                                        },
                                        "error": {
                                            "type": "string"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/tools/deploy_private_repo": {
            "post": {
                "operationId": "deploy_private_repo",
                "tags": [
                    "Deploy"
                ],
                "summary": "Deploy a private SSH Git repository to one domain on one of the caller's hosting services using a pre-installed per-repo deploy key (generated via generate_deploy_key). The repository MUST contain a .cpanel.yml file at its root — the deployment is driven by it (it defines where files land); a repository without one returns no_cpanel_yml. The repository is cloned over SSH and deployed following .cpanel.yml to the target domain. Call generate_deploy_key first (which needs the cpanel:uapi scope) to provision the SSH key for this (service_id, repo_ssh_url) pair, then add the returned public key to the repository's deploy keys on GitHub/GitLab/Bitbucket before calling this tool. An omitted branch deploys the repository default branch (HEAD). This is a state-changing, destructive, non-idempotent write — it requires the write:deploy scope. Step-up auth enforcement is deferred to the Phase-2 step-up mechanism. TIP — verifying success: a subsequent \"Repository not found\" from get_private_repo_deploy_status can be a red herring — the status command re-contacts the remote, but the clone + .cpanel.yml deploy may have already landed; confirm by listing the docroot (list_website_domains gives its path) rather than trusting that error. TIP — a FAILED clone leaves a hidden .git under /home/<user>/repositories/<domain>/, and a later retry then fails with \"directory already contains files\"; cPanel VersionControl delete does NOT remove these files and Fileman cannot delete — the user must clear that directory in cPanel File Manager (enable Show Hidden Files) before retrying.",
                "description": "Deploy a private SSH Git repository to one domain on one of the caller's hosting services using a pre-installed per-repo deploy key (generated via generate_deploy_key). The repository MUST contain a .cpanel.yml file at its root — the deployment is driven by it (it defines where files land); a repository without one returns no_cpanel_yml. The repository is cloned over SSH and deployed following .cpanel.yml to the target domain. Call generate_deploy_key first (which needs the cpanel:uapi scope) to provision the SSH key for this (service_id, repo_ssh_url) pair, then add the returned public key to the repository's deploy keys on GitHub/GitLab/Bitbucket before calling this tool. An omitted branch deploys the repository default branch (HEAD). This is a state-changing, destructive, non-idempotent write — it requires the write:deploy scope. Step-up auth enforcement is deferred to the Phase-2 step-up mechanism. TIP — verifying success: a subsequent \"Repository not found\" from get_private_repo_deploy_status can be a red herring — the status command re-contacts the remote, but the clone + .cpanel.yml deploy may have already landed; confirm by listing the docroot (list_website_domains gives its path) rather than trusting that error. TIP — a FAILED clone leaves a hidden .git under /home/<user>/repositories/<domain>/, and a later retry then fails with \"directory already contains files\"; cPanel VersionControl delete does NOT remove these files and Fileman cannot delete — the user must clear that directory in cPanel File Manager (enable Show Hidden Files) before retrying.",
                "security": [
                    {
                        "oauth2": [
                            "write:deploy"
                        ]
                    }
                ],
                "x-mcp-tool": "deploy_private_repo",
                "x-mcp-annotations": {
                    "readOnly": false,
                    "destructive": true,
                    "idempotent": false,
                    "openWorld": true
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "service_id": {
                                        "type": "integer",
                                        "description": "The hosting service ID to deploy to. Obtain it via list_services.",
                                        "minimum": 1
                                    },
                                    "repo_ssh_url": {
                                        "type": "string",
                                        "description": "SSH clone URL of the private repository (e.g. git@github.com:org/repo.git). A deploy key for this URL must have been generated via generate_deploy_key for this service first.",
                                        "minLength": 1
                                    },
                                    "target_domain": {
                                        "type": "string",
                                        "description": "The hosted domain to deploy to. Must belong to the hosting service (discover it via list_website_domains).",
                                        "minLength": 1
                                    },
                                    "branch": {
                                        "type": "string",
                                        "default": null,
                                        "description": "Optional branch, tag, or commit to deploy. Omit for the repository default branch (resolves to HEAD)."
                                    }
                                },
                                "required": [
                                    "service_id",
                                    "repo_ssh_url",
                                    "target_domain"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Tool result",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "deploy": {
                                            "type": "object",
                                            "properties": {
                                                "status": {
                                                    "type": "string"
                                                },
                                                "commit_sha": {
                                                    "type": "string"
                                                },
                                                "ref": {
                                                    "type": "string"
                                                },
                                                "service_id": {
                                                    "type": "integer"
                                                },
                                                "target_domain": {
                                                    "type": "string"
                                                },
                                                "repository_root": {
                                                    "type": "string"
                                                },
                                                "deployment_id": {
                                                    "type": "string"
                                                },
                                                "module_version": {
                                                    "type": "string"
                                                }
                                            },
                                            "required": [
                                                "status",
                                                "commit_sha",
                                                "ref",
                                                "service_id",
                                                "target_domain",
                                                "repository_root",
                                                "deployment_id",
                                                "module_version"
                                            ]
                                        },
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "invalid_url",
                                                "not_found",
                                                "key_not_authorized",
                                                "no_cpanel_yml",
                                                "repo_unreachable",
                                                "cloning",
                                                "cpanel_error"
                                            ]
                                        },
                                        "status": {
                                            "type": "string"
                                        },
                                        "repository_root": {
                                            "type": "string"
                                        },
                                        "message": {
                                            "type": "string"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/tools/get_deploy_status": {
            "post": {
                "operationId": "get_deploy_status",
                "tags": [
                    "Deploy"
                ],
                "summary": "Get the current deploy marker and deploy history for one domain on one of the caller's hosting services: current = the repo_url, ref, commit_sha, and deployed_at currently live at the target (null when nothing has been deployed there); history = past deploys, each with the same fields. Pass a ref from history back to deploy_site_from_url to roll back. Requires the read:deploy scope. deployed_at is an ISO date-time.",
                "description": "Get the current deploy marker and deploy history for one domain on one of the caller's hosting services: current = the repo_url, ref, commit_sha, and deployed_at currently live at the target (null when nothing has been deployed there); history = past deploys, each with the same fields. Pass a ref from history back to deploy_site_from_url to roll back. Requires the read:deploy scope. deployed_at is an ISO date-time — present it to the user in Bulgarian format DD.MM.YYYYг HH:MM (e.g. 15.06.2026г 17:36).",
                "security": [
                    {
                        "oauth2": [
                            "read:deploy"
                        ]
                    }
                ],
                "x-mcp-tool": "get_deploy_status",
                "x-mcp-annotations": {
                    "readOnly": true,
                    "destructive": false,
                    "idempotent": true,
                    "openWorld": true
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "service_id": {
                                        "type": "integer",
                                        "description": "The hosting service ID the target domain belongs to. Obtain it via list_services.",
                                        "minimum": 1
                                    },
                                    "target_domain": {
                                        "type": "string",
                                        "description": "The hosted domain whose deploy state to read. Must belong to the hosting service.",
                                        "minLength": 1
                                    }
                                },
                                "required": [
                                    "service_id",
                                    "target_domain"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Tool result",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "deploy_status": {
                                            "type": "object",
                                            "properties": {
                                                "service_id": {
                                                    "type": "integer"
                                                },
                                                "target_domain": {
                                                    "type": "string"
                                                },
                                                "current": {
                                                    "type": [
                                                        "object",
                                                        "null"
                                                    ],
                                                    "properties": {
                                                        "repo_url": {
                                                            "type": "string"
                                                        },
                                                        "ref": {
                                                            "type": "string"
                                                        },
                                                        "commit_sha": {
                                                            "type": "string"
                                                        },
                                                        "deployed_at": {
                                                            "type": "string"
                                                        }
                                                    },
                                                    "required": [
                                                        "repo_url",
                                                        "ref",
                                                        "commit_sha",
                                                        "deployed_at"
                                                    ]
                                                },
                                                "history": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "object",
                                                        "properties": {
                                                            "repo_url": {
                                                                "type": "string"
                                                            },
                                                            "ref": {
                                                                "type": "string"
                                                            },
                                                            "commit_sha": {
                                                                "type": "string"
                                                            },
                                                            "deployed_at": {
                                                                "type": "string"
                                                            }
                                                        },
                                                        "required": [
                                                            "repo_url",
                                                            "ref",
                                                            "commit_sha",
                                                            "deployed_at"
                                                        ]
                                                    }
                                                },
                                                "module_version": {
                                                    "type": "string"
                                                }
                                            },
                                            "required": [
                                                "service_id",
                                                "target_domain",
                                                "current",
                                                "history",
                                                "module_version"
                                            ]
                                        },
                                        "error": {
                                            "type": "string"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/tools/get_private_repo_deploy_status": {
            "post": {
                "operationId": "get_private_repo_deploy_status",
                "tags": [
                    "Deploy"
                ],
                "summary": "Get the current deployment status for a private-repo (.cpanel.yml-managed) deploy on one domain on one of the caller's hosting services. This is the read-status companion to deploy_private_repo (cPanel VersionControl lineage) — distinct from get_deploy_status, which covers the URL-deploy lineage. Returns repository_root, branch, current_ref, commit_sha, last_deploy_outcome, and last_deployed_at for the active deployment. last_deployed_at is an ISO date-time. Requires the read:deploy scope.",
                "description": "Get the current deployment status for a private-repo (.cpanel.yml-managed) deploy on one domain on one of the caller's hosting services. This is the read-status companion to deploy_private_repo (cPanel VersionControl lineage) — distinct from get_deploy_status, which covers the URL-deploy lineage. Returns repository_root, branch, current_ref, commit_sha, last_deploy_outcome, and last_deployed_at for the active deployment. last_deployed_at is an ISO date-time — present it to the user in Bulgarian format DD.MM.YYYYг HH:MM (e.g. 15.06.2026г 17:36). Requires the read:deploy scope.",
                "security": [
                    {
                        "oauth2": [
                            "read:deploy"
                        ]
                    }
                ],
                "x-mcp-tool": "get_private_repo_deploy_status",
                "x-mcp-annotations": {
                    "readOnly": true,
                    "destructive": false,
                    "idempotent": true,
                    "openWorld": true
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "service_id": {
                                        "type": "integer",
                                        "description": "The hosting service ID the target domain belongs to. Obtain it via list_services.",
                                        "minimum": 1
                                    },
                                    "target_domain": {
                                        "type": "string",
                                        "description": "The hosted domain whose private-repo deploy state to read. Must belong to the hosting service.",
                                        "minLength": 1
                                    }
                                },
                                "required": [
                                    "service_id",
                                    "target_domain"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Tool result",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "private_repo_deploy_status": {
                                            "type": "object",
                                            "properties": {
                                                "service_id": {
                                                    "type": "integer"
                                                },
                                                "target_domain": {
                                                    "type": "string"
                                                },
                                                "repository_root": {
                                                    "type": "string"
                                                },
                                                "branch": {
                                                    "type": "string"
                                                },
                                                "current_ref": {
                                                    "type": "string"
                                                },
                                                "commit_sha": {
                                                    "type": "string"
                                                },
                                                "last_deploy_outcome": {
                                                    "type": "string"
                                                },
                                                "last_deployed_at": {
                                                    "type": "string"
                                                },
                                                "module_version": {
                                                    "type": "string"
                                                }
                                            },
                                            "required": [
                                                "service_id",
                                                "target_domain",
                                                "repository_root",
                                                "branch",
                                                "current_ref",
                                                "commit_sha",
                                                "last_deploy_outcome",
                                                "last_deployed_at",
                                                "module_version"
                                            ]
                                        },
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "not_found",
                                                "invalid_target_domain"
                                            ]
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/tools/generate_deploy_key": {
            "post": {
                "operationId": "generate_deploy_key",
                "tags": [
                    "cPanel"
                ],
                "summary": "Generate an ed25519 SSH deploy key (public key) for a Git repository on one of the caller's hosting services. BOTH inputs are REQUIRED: service_id (the hosting service the key is for — obtain it via list_services) and repo_url (the repository URL). Returns the public key and provider-specific instructions for pasting it as a deploy key in GitHub, GitLab, or Bitbucket. Generation is idempotent — re-calling for the same (service_id, repo_url) pair returns the existing public key without creating a duplicate. The private key is never returned; it is installed directly on the server. Requires the cpanel:uapi scope. TIP — add the returned public key to the repository's DEPLOY KEYS (not your account-wide SSH keys); a given deploy key is unique to ONE repo across the whole provider, so \"key already in use\" means it is attached elsewhere. If a later clone fails with \"Permission denied (publickey)\", the deploy may reference an SSH IdentityFile that does not match this installed key — verify ~/.ssh/config IdentityFile lines point at the key this tool installed.",
                "description": "Generate an ed25519 SSH deploy key (public key) for a Git repository on one of the caller's hosting services. BOTH inputs are REQUIRED: service_id (the hosting service the key is for — obtain it via list_services) and repo_url (the repository URL). Returns the public key and provider-specific instructions for pasting it as a deploy key in GitHub, GitLab, or Bitbucket. Generation is idempotent — re-calling for the same (service_id, repo_url) pair returns the existing public key without creating a duplicate. The private key is never returned; it is installed directly on the server. Requires the cpanel:uapi scope. TIP — add the returned public key to the repository's DEPLOY KEYS (not your account-wide SSH keys); a given deploy key is unique to ONE repo across the whole provider, so \"key already in use\" means it is attached elsewhere. If a later clone fails with \"Permission denied (publickey)\", the deploy may reference an SSH IdentityFile that does not match this installed key — verify ~/.ssh/config IdentityFile lines point at the key this tool installed.",
                "security": [
                    {
                        "oauth2": [
                            "cpanel:uapi"
                        ]
                    }
                ],
                "x-mcp-tool": "generate_deploy_key",
                "x-mcp-annotations": {
                    "readOnly": false,
                    "destructive": false,
                    "idempotent": true,
                    "openWorld": true
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "service_id": {
                                        "type": "integer",
                                        "description": "The hosting service ID to generate the deploy key for. Obtain it via list_services.",
                                        "minimum": 1
                                    },
                                    "repo_url": {
                                        "type": "string",
                                        "description": "The Git repository URL to associate the deploy key with (e.g. https://github.com/org/repo.git).",
                                        "minLength": 1
                                    }
                                },
                                "required": [
                                    "service_id",
                                    "repo_url"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Tool result",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "deploy_key": {
                                            "type": "object",
                                            "properties": {
                                                "public_key": {
                                                    "type": "string"
                                                },
                                                "provider_instructions": {
                                                    "type": "string"
                                                },
                                                "repo_id": {
                                                    "type": "string"
                                                },
                                                "ssh_clone_alias": {
                                                    "type": "string"
                                                },
                                                "module_version": {
                                                    "type": "string"
                                                }
                                            },
                                            "required": [
                                                "public_key",
                                                "provider_instructions",
                                                "repo_id",
                                                "ssh_clone_alias",
                                                "module_version"
                                            ]
                                        },
                                        "error": {
                                            "type": "string"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/tools/list_cpanel_operations": {
            "post": {
                "operationId": "list_cpanel_operations",
                "tags": [
                    "cPanel"
                ],
                "summary": "List the cPanel MODULES the caller may currently use — a compact index of module name, display name, and function count (NOT the full operation catalog, which is too large to return at once). The index reflects exactly which cPanel modules JetHost has enabled on the credential's role right now — toggling a module in the admin UI changes this on the next call, with no deploy. Use this first to find the right module (e.g. DNS for DNS zones, Email for mailboxes), then call get_cpanel_module to fetch that module's functions and parameters, then cpanel_uapi to run one. discovery=\"live\" means the index came from the role grants; \"fallback\" means the full catalog is advertised and a disabled module is still denied at call time. Requires the cpanel:uapi scope.",
                "description": "List the cPanel MODULES the caller may currently use — a compact index of module name, display name, and function count (NOT the full operation catalog, which is too large to return at once). The index reflects exactly which cPanel modules JetHost has enabled on the credential's role right now — toggling a module in the admin UI changes this on the next call, with no deploy. Use this first to find the right module (e.g. DNS for DNS zones, Email for mailboxes), then call get_cpanel_module to fetch that module's functions and parameters, then cpanel_uapi to run one. discovery=\"live\" means the index came from the role grants; \"fallback\" means the full catalog is advertised and a disabled module is still denied at call time. Requires the cpanel:uapi scope.",
                "security": [
                    {
                        "oauth2": [
                            "cpanel:uapi"
                        ]
                    }
                ],
                "x-mcp-tool": "list_cpanel_operations",
                "x-mcp-annotations": {
                    "readOnly": true,
                    "destructive": false,
                    "idempotent": true,
                    "openWorld": true
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {}
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Tool result",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "discovery": {
                                            "type": "string",
                                            "enum": [
                                                "live",
                                                "fallback"
                                            ]
                                        },
                                        "modules": {
                                            "type": "object",
                                            "additionalProperties": {
                                                "type": "object",
                                                "properties": {
                                                    "displayName": {
                                                        "type": "string"
                                                    },
                                                    "function_count": {
                                                        "type": "integer"
                                                    }
                                                }
                                            }
                                        },
                                        "errors": {
                                            "type": "array",
                                            "items": {
                                                "type": "string"
                                            }
                                        },
                                        "warnings": {
                                            "type": "array",
                                            "items": {
                                                "type": "string"
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/tools/get_cpanel_module": {
            "post": {
                "operationId": "get_cpanel_module",
                "tags": [
                    "cPanel"
                ],
                "summary": "Describe ONE cPanel module: its functions, each with method (get/post) and parameter schema (name, type, required, description). Pass module (e.g. \"DNS\", \"Email\", \"Mysql\") — call list_cpanel_operations first to see the available module names; the name is matched case-insensitively. If the module is not enabled, the result lists the available module names so you can correct it. Use this after list_cpanel_operations and before cpanel_uapi to discover a module's exact functions and parameters. Requires the cpanel:uapi scope.",
                "description": "Describe ONE cPanel module: its functions, each with method (get/post) and parameter schema (name, type, required, description). Pass module (e.g. \"DNS\", \"Email\", \"Mysql\") — call list_cpanel_operations first to see the available module names; the name is matched case-insensitively. If the module is not enabled, the result lists the available module names so you can correct it. Use this after list_cpanel_operations and before cpanel_uapi to discover a module's exact functions and parameters. Requires the cpanel:uapi scope.",
                "security": [
                    {
                        "oauth2": [
                            "cpanel:uapi"
                        ]
                    }
                ],
                "x-mcp-tool": "get_cpanel_module",
                "x-mcp-annotations": {
                    "readOnly": true,
                    "destructive": false,
                    "idempotent": true,
                    "openWorld": true
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "module": {
                                        "type": "string",
                                        "description": "The cPanel UAPI module to describe, e.g. \"DNS\", \"Email\", or \"Mysql\". Call list_cpanel_operations first to see the available module names. Matched case-insensitively.",
                                        "minLength": 1
                                    }
                                },
                                "required": [
                                    "module"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Tool result",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "discovery": {
                                            "type": "string",
                                            "enum": [
                                                "live",
                                                "fallback"
                                            ]
                                        },
                                        "module": {
                                            "type": "string"
                                        },
                                        "displayName": {
                                            "type": "string"
                                        },
                                        "functions": {
                                            "type": "object",
                                            "additionalProperties": {
                                                "type": "object",
                                                "properties": {
                                                    "method": {
                                                        "type": "string"
                                                    },
                                                    "summary": {
                                                        "type": "string"
                                                    },
                                                    "description": {
                                                        "type": "string"
                                                    },
                                                    "params": {
                                                        "type": "array",
                                                        "items": {
                                                            "type": "object",
                                                            "properties": {
                                                                "name": {
                                                                    "type": "string"
                                                                },
                                                                "type": {
                                                                    "type": "string"
                                                                },
                                                                "required": {
                                                                    "type": "boolean"
                                                                },
                                                                "description": {
                                                                    "type": "string"
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        },
                                        "error": {
                                            "type": "string"
                                        },
                                        "requested": {
                                            "type": "string"
                                        },
                                        "available_modules": {
                                            "type": "array",
                                            "items": {
                                                "type": "string"
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/tools/cpanel_uapi": {
            "post": {
                "operationId": "cpanel_uapi",
                "tags": [
                    "cPanel"
                ],
                "summary": "Run one cPanel operation against the cPanel account behind one of the caller's hosting services and return a normalized result { ok, data, errors[], warnings[] }. module is a cPanel UAPI module (e.g. \"Email\"); function is an operation in that module (e.g. \"list_pops\"); params is a JSON object of that operation's parameters. Only modules JetHost has enabled are available — an unknown or disabled module returns an error. Within an enabled module every operation passes through, INCLUDING ones that change or delete data, so this is a state-changing, potentially destructive call: confirm with the user before running a mutating operation. The cPanel account is resolved from the owned service; a service the caller does not own returns error=not_found. Requires the cpanel:uapi scope. data is the UAPI payload; cPanel base64-encoded fields (e.g. DNS::parse_zone dname_b64/data_b64/text_b64) are decoded to readable values under the same key without the _b64 suffix. TIP — writing PHP source: a WAF on the request path rejects any params carrying the literal \"<?php\" (case-insensitive; e.g. Fileman::save_file_content writing a .php file). It surfaces as a transport-level error, NOT an {ok:false} payload. Plain text and PHP files using the short tag \"<?\" / \"<?=\" pass through (short tags only run where short_open_tag=On). To deploy PHP files reliably prefer deploy_private_repo (git + .cpanel.yml), which clones over SSH and bypasses this path. NOTE — Fileman has no delete/copy/move/mkdir function; save_file_content cannot create parent directories.",
                "description": "Run one cPanel operation against the cPanel account behind one of the caller's hosting services and return a normalized result { ok, data, errors[], warnings[] }. module is a cPanel UAPI module (e.g. \"Email\"); function is an operation in that module (e.g. \"list_pops\"); params is a JSON object of that operation's parameters. Only modules JetHost has enabled are available — an unknown or disabled module returns an error. Within an enabled module every operation passes through, INCLUDING ones that change or delete data, so this is a state-changing, potentially destructive call: confirm with the user before running a mutating operation. The cPanel account is resolved from the owned service; a service the caller does not own returns error=not_found. Requires the cpanel:uapi scope. data is the UAPI payload; cPanel base64-encoded fields (e.g. DNS::parse_zone dname_b64/data_b64/text_b64) are decoded to readable values under the same key without the _b64 suffix. TIP — writing PHP source: a WAF on the request path rejects any params carrying the literal \"<?php\" (case-insensitive; e.g. Fileman::save_file_content writing a .php file). It surfaces as a transport-level error, NOT an {ok:false} payload. Plain text and PHP files using the short tag \"<?\" / \"<?=\" pass through (short tags only run where short_open_tag=On). To deploy PHP files reliably prefer deploy_private_repo (git + .cpanel.yml), which clones over SSH and bypasses this path. NOTE — Fileman has no delete/copy/move/mkdir function; save_file_content cannot create parent directories.",
                "security": [
                    {
                        "oauth2": [
                            "cpanel:uapi"
                        ]
                    }
                ],
                "x-mcp-tool": "cpanel_uapi",
                "x-mcp-annotations": {
                    "readOnly": false,
                    "destructive": true,
                    "idempotent": false,
                    "openWorld": true
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "service_id": {
                                        "type": "integer",
                                        "description": "The hosting service ID the operation runs against. Obtain it via list_services.",
                                        "minimum": 1
                                    },
                                    "module": {
                                        "type": "string",
                                        "description": "The cPanel UAPI module, e.g. \"Email\". Only modules JetHost has enabled are available.",
                                        "minLength": 1
                                    },
                                    "function": {
                                        "type": "string",
                                        "description": "The cPanel UAPI function within the module, e.g. \"list_pops\".",
                                        "minLength": 1
                                    },
                                    "params": {
                                        "type": [
                                            "object",
                                            "array"
                                        ],
                                        "additionalProperties": true,
                                        "description": "The UAPI function's parameters as a flat JSON object of key/value pairs. Example for Email::add_pop: {\"email\":\"jane\",\"domain\":\"example.com\",\"password\":\"…\",\"quota\":\"1024\"}. Omit it, or pass {}, when the function takes no parameters."
                                    }
                                },
                                "required": [
                                    "service_id",
                                    "module",
                                    "function"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Tool result",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "ok": {
                                            "type": "boolean"
                                        },
                                        "data": {},
                                        "errors": {
                                            "type": "array",
                                            "items": {
                                                "type": "string"
                                            }
                                        },
                                        "warnings": {
                                            "type": "array",
                                            "items": {
                                                "type": "string"
                                            }
                                        },
                                        "error": {
                                            "type": "string"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}