Skip to main content
Glama
aphraz

Cloudways MCP Server

by aphraz
servers.py6.97 kB
#!/usr/bin/env python3 """ Server management tools for Cloudways MCP Server """ from typing import Dict, Any from fastmcp import Context from pydantic import BaseModel, Field, field_validator from server import mcp from utils.api_client import make_api_request, make_api_request_post # Shared components (will be injected by main.py) redis_client = None http_client = None token_manager = None class ServerIdParam(BaseModel): server_id: int = Field(gt=0, le=999999999, description="Valid server ID") class ServerOperationParam(BaseModel): server_id: int = Field(gt=0, le=999999999, description="Valid server ID") @mcp.tool async def start_server(ctx: Context, server: ServerIdParam) -> Dict[str, Any]: """ Start a stopped server. Args: server: ServerIdParam object containing server_id Returns: Dictionary containing operation status and details """ return await make_api_request_post(ctx, "/server/start", {"server_id": server.server_id}, redis_client, http_client, token_manager) @mcp.tool async def stop_server(ctx: Context, server: ServerIdParam) -> Dict[str, Any]: """ Stop a running server. Args: server: ServerIdParam object containing server_id Returns: Dictionary containing operation status and details """ return await make_api_request_post(ctx, "/server/stop", {"server_id": server.server_id}, redis_client, http_client, token_manager) @mcp.tool async def restart_server(ctx: Context, server: ServerIdParam) -> Dict[str, Any]: """ Restart a server. Args: server: ServerIdParam object containing server_id Returns: Dictionary containing operation status and details """ return await make_api_request_post(ctx, "/server/restart", {"server_id": server.server_id}, redis_client, http_client, token_manager) @mcp.tool async def backup_server(ctx: Context, server: ServerIdParam) -> Dict[str, Any]: """ Start server backup operation. Args: server: ServerIdParam object containing server_id Returns: Dictionary containing backup operation status """ return await make_api_request_post(ctx, "/server/manage/backup", {"server_id": server.server_id}, redis_client, http_client, token_manager) @mcp.tool async def get_server_settings(ctx: Context, server: ServerIdParam) -> Dict[str, Any]: """ Get server settings and installed package versions. Args: server: ServerIdParam object containing server_id Returns: Dictionary containing server settings and package information """ return await make_api_request(ctx, "/server/manage/settings", {"server_id": server.server_id}, redis_client, http_client, token_manager) @mcp.tool async def get_server_disk_usage(ctx: Context, server: ServerIdParam) -> Dict[str, Any]: """ Get server disk usage information. Args: server: ServerIdParam object containing server_id Returns: Dictionary containing disk usage details """ return await make_api_request(ctx, f"/server/{server.server_id}/diskUsage", None, redis_client, http_client, token_manager) @mcp.tool async def optimize_server_disk(ctx: Context, server: ServerIdParam) -> Dict[str, Any]: """ Optimize server disk space. Args: server: ServerIdParam object containing server_id Returns: Dictionary containing optimization operation status """ return await make_api_request_post(ctx, "/server/disk/cleanup", {"server_id": server.server_id}, redis_client, http_client, token_manager) @mcp.tool async def get_server_services_status(ctx: Context, server: ServerIdParam) -> Dict[str, Any]: """ Get status of all services on a server. Args: server: ServerIdParam object containing server_id Returns: Dictionary containing service status information """ return await make_api_request(ctx, "/service", {"server_id": server.server_id}, redis_client, http_client, token_manager) class ServiceStateParam(BaseModel): server_id: int = Field(gt=0, le=999999999, description="Valid server ID") service: str state: str # start, stop, restart @mcp.tool async def change_service_state(ctx: Context, params: ServiceStateParam) -> Dict[str, Any]: """ Start, stop, or restart a service on a server. Args: params: ServiceStateParam object containing: - server_id: Numeric ID of the server - service: Service name (mysql, apache, nginx, etc.) - state: Action to perform (start, stop, restart) Returns: Dictionary containing service operation status """ return await make_api_request_post(ctx, "/service/state", { "server_id": params.server_id, "service": params.service, "state": params.state }, redis_client, http_client, token_manager) class VarnishStateParam(BaseModel): server_id: int = Field(gt=0, le=999999999, description="Valid server ID") state: str # enable, disable, purge @mcp.tool async def manage_server_varnish(ctx: Context, params: VarnishStateParam) -> Dict[str, Any]: """ Enable, disable, or purge Varnish on server level. Args: params: VarnishStateParam object containing: - server_id: Numeric ID of the server - state: Action to perform (enable, disable, purge) Returns: Dictionary containing varnish operation status """ return await make_api_request_post(ctx, "/service/varnish", { "server_id": params.server_id, "state": params.state }, redis_client, http_client, token_manager) @mcp.tool async def get_server_monitoring_detail(ctx: Context, server: ServerIdParam) -> Dict[str, Any]: """ Get detailed server monitoring graph data. Args: server: ServerIdParam object containing server_id Returns: Dictionary containing detailed monitoring data """ return await make_api_request(ctx, "/server/monitor/detail", {"server_id": server.server_id}, redis_client, http_client, token_manager) @mcp.tool async def get_server_analytics(ctx: Context, server: ServerIdParam) -> Dict[str, Any]: """ Get server usage analytics. Args: server: ServerIdParam object containing server_id Returns: Dictionary containing server usage analytics """ return await make_api_request(ctx, "/server/analytics/serverUsage", {"server_id": server.server_id}, redis_client, http_client, token_manager)

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/aphraz/cw-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server